Предположим, у кого-то была относительно большая программа (скажем, 900k SLOC на C #), все тщательно прокомментированы / задокументированы, хорошо организованы и работают хорошо. Вся база кода была написана одним старшим разработчиком, который больше не работает в компании. Весь код тестируется как есть, и IoC используется повсеместно - за исключением какой-то странной причины, они не написали никаких модульных тестов. Теперь ваша компания хочет разветвить код и хочет добавить модульные тесты, чтобы определить, когда изменения нарушают основные функции.
- Является ли добавление тестов хорошей идеей?
- Если так, то как можно начать что-то подобное?
РЕДАКТИРОВАТЬ
Хорошо, поэтому я не ожидал ответов, дающих хорошие аргументы для противоположных выводов. В любом случае, проблема может быть не в моих руках. Я также прочитал «дублирующие вопросы», и общее мнение таково, что «написание тестов - это хорошо» ... да, но не слишком полезно в данном конкретном случае.
Я не думаю, что я одинок в рассмотрении написания тестов для устаревшей системы. Я собираюсь сохранить метрики о том, сколько времени потрачено и сколько раз новые тесты обнаруживают проблемы (и сколько раз они этого не делают). Я вернусь и обновлю это через год или около того с моими результатами.
ЗАКЛЮЧЕНИЕ
Таким образом, оказывается, что в принципе невозможно просто добавить модульный тест в существующий код с каким-либо подобием ортодоксальности. Когда код работает, вы, очевидно, не можете красный / зеленый свет ваших тестов, обычно не ясно, какое поведение важно проверить, не ясно, с чего начать и, конечно, не ясно, когда вы закончите. Действительно, даже задавая этот вопрос, в первую очередь упускается суть написания тестов. В большинстве случаев я обнаружил, что на самом деле проще переписать код с использованием TDD, чем расшифровывать предназначенные функции и задним числом добавлять их в модульные тесты. Исправление проблемы или добавление новой функции - это отдельная история, и я считаю, что сейчас самое время добавить юнит-тесты (как указано ниже). В конце концов, большая часть кода переписывается, часто раньше, чем вы ожидаете - используя этот подход, я