Юнит-тестирование — плохо

Для не знающих

Вы попробовали тестирование и поняли, что ваш случай в корне отличается от того, что в книге. Ваши сроки из реальной жизни, у вас нет времени еще и тесты писать. Поддержка тестов только замедляет разработку. Какой толк, все равно та либа работает только на том сервере, а локально нет.

Но

Вы, скорее всего, не умеете писать тесты и, очень вероятно, что в вашем коде присутствует большинство признаков плохого кода. Это лечится при желании. Лекарства:

  • Рефакторинг. Улучшение существующего кода
  • Экстремальное программирование: разработка через тестирование
  • Шаблоны тестирования xUnit. Рефакторинг кода тестов — эта книга мега-лекарство.

Для знающих много пользы

А знать надо вот что:

  • Юнит-тест — тестирует лишь небольшой кусочек функционала.
    В идеале протестировать метод на то, что он правильно делает вызовы других методов
  • Юнит-тест невероятно быстр.
    Поскольку тестируется лишь маленький кусочек функционала без обращений к бд или файлам — все довольно таки быстро.
  • Для большого метода юнит-тест написать очень сложно.
    Сложно, потому что много логики. Приходится слишком много заглушек делать для одного метода.
  • Тестируемый функционал не обращается к базе данных, не отправляет запросов, не считывает файлы с диска.
    Это долго и тестируемый функционал становится незащищенным от сбоев внешнего функционала.
  • Юнит-тест не зависит не от порядка выполнения теста, не от сбоев в остальном функционале.
    Тесты должны быть независимы — это упрощает локализацию ошибок.
  • Все юнит-тесты вместе взятые выполняются не более 10 секунд в любом проекте.
    Иначе слишком часто запускать их будет не удобно.
  • Юнит-тесты как и код требуют рефакторинга.
    Постоянно делая рефакторинг, получите свой тестовый язык (или апи) для тестов.
  • 100% покрытие юнит-тестами не даст 100% гарантии работоспособности проекта.
    Всего не учтешь и не протестируешь.
    Тесты дадут возможность:

  • избежать сценариев — кто похерил мой функционал? (разработчик); как же так, оно ведь уже работало? (заказчик)
  • смело делать рефакторинг кода, который используется во всем проекте
  • быстро находить ошибки
  • получать удовольствие от разработки (когда знаешь, что все работает — очень хорошее чувство)

Еще мысли

Юнит-тесты писать сложно. Лень, незнание, самообман — очень веские помехи.
Разработка через тестирование? — В идеале.
Легко тестировать функционал для рассчетов чего-либо — это сплошное удовольствие.
Являются ли тесты гарантией успеха проекта? — Нет, также как и хороший код. Но приятнее работать с хорошим кодом и с протестированным функционалом.
Если проект не большой и его не надо будет сопровождать в будущем — можно и без тестов обойтись, используя копи-паст для ускорения разработки.

Кроме юнит-тестов нужно писать интеграционные тесты — те же юнит-тесты только без заглушек функционала. Выполняются долго, зато позволяют проверить, что механизм в собранном виде функционирует нормально.

В ваших реалиях скорее всего придется пойти на компромиссы. Вероятно, что быстрый старт вашего проекта важнее, чем в будущем более дешевое сопровождение проекта, поэтому придется балансировать. Если видите, что юнит-тесты писать уже нет времени — пишите интеграционные тесты на пользовательские сценарии, и юнит-тесты на рассчетную часть функционала.

И обязательно прочтите книги из списка, если еще этого не сделали.



Комментарии

  1. Ноябрь 13th, 2008 | 11:35 пп

    >Шаблоны тестирования xUnit. Рефакторинг кода тестов — эта книга мега-лекарство.

    А что с качеством перевода?

  2. Кигорв
    Ноябрь 14th, 2008 | 2:51 дп

    Ужос качество, поэтому последние книги 4 из этой серии я читал в оригинале.
    Последнее, что добило Implementation Patterns → Шаблоны реализации корпоративных приложений.

  3. Ноябрь 14th, 2008 | 3:01 дп

    А подробнее об ужасе в xUnit?

  4. Ноябрь 14th, 2008 | 4:06 дп

    Человек я, человек.

    «Быстрый старт», «ваши реалии»…
    Тесты используются для того, чтобы ускорить разработку, а не замедлить.

  5. Кигорв
    Ноябрь 14th, 2008 | 6:04 дп

    Стоп) Каюсь, Олег, книгу читал на английском. Сейчас открыл русский вариант и быстро его пролистал — мне понравилось.
    Мне кажется, что ваш перевод хорош. Почитаю попозже еще и русский вариант.
    Оценка была дана, основываясь на переводах книг из этой же серии.

Оставь комментарий