Привет.
Мне бы хотелось поделиться сомнениями в том, правильное ли отношение к авто-тестам сложилось в среде веб-разработки.
Есть две крайних точки зрения.
Сначала тесты.
Приложение начинается с описания User Story на языке функциональных/приёмочных тестов. Каждая возможность, каждая ситуация (глазами пользователя) должны быть закодированы. Это позволяет отслеживать изменения в поведении приложения (и вовремя чинить, разумеется). Плюс строгое описание функциональности помогает понять какие классы будут затронуты, сколько времени уйдёт на программирование новой возможности.
Затем наступает время модульных тестов. Мы описываем интерфейсы, они позволяют нам контролировать несоответствие поведения функций ожидаемому (т.е. проводить тестирование на регрессии после каждого крупного изменения кода). Описывается далеко не всё приложение и не каждая возможность, а лишь отдельные модули самописного кода (printf тестировать нет нужды). Кроме того, модульные тесты могут выступать в качестве некой документации, что неплохо.
Почему тесты сначала? а) тесты тоже могут содержать ошибки, неплохо прогнать их без тестируемого кода б) тесты помогают не писать избыточный код (тест прошёл - код достаточен).
Тесты потом, нафиг функциональные тесты.
Нам нужен код быстро. Может, мы потом отрефакторим. Оттестируем перед релизом.
Функциональные тесты - это дублирование и тех.задания, и кода, и (упаси б-г) модульных тестов. И вообще язык ублюдочный.
Модульные тесты. Ладно, напишу 10 позитивных тестов и 20 негативных тестов на этот вырвиглазный модуль, который никто не хочет читать. Скажем, теперь ээта чёрная коробка полностью оттестирована и всё пучком.
Итак. Как вам кажется, какая точка зрения несёт вечное и светлое, а тем паче помогает в долгих проектах?