Мой опыт с переходом
В течение многих лет я был в заблуждении, что у меня не было достаточно времени для написания модульных тестов для моего кода. Когда я писал тесты, они были раздутыми, тяжелыми вещами, которые только побуждали меня думать, что я должен когда-либо писать модульные тесты только тогда, когда я знал, что они нужны.
Недавно мне предложили использовать Test Driven Development, и я обнаружил, что это полное откровение. Теперь я твердо убежден, что у меня нет времени не писать юнит-тесты .
По моему опыту, разрабатывая с учетом тестирования, вы получаете более чистые интерфейсы, более сфокусированные классы и модули и, как правило, более твердый , тестируемый код.
Каждый раз, когда я работаю с устаревшим кодом, который не имеет модульных тестов и должен что-то тестировать вручную, я продолжаю думать, что «это было бы намного быстрее, если бы этот код уже имел модульные тесты». Каждый раз, когда мне приходится пытаться добавить функциональность модульного теста в код с высокой связью, я продолжаю думать, что «это было бы намного проще, если бы оно было написано в разобщенном виде».
Сравнивая и сравнивая две экспериментальные станции, которые я поддерживаю. Один существует уже некоторое время и имеет большой унаследованный код, а другой относительно новый.
При добавлении функциональности в старую лабораторию часто случается, что вы зашли в лабораторию и потратили много часов на то, чтобы разобраться в последствиях необходимой им функциональности и о том, как я могу добавить эту функциональность, не затрагивая другие функциональные возможности. Код просто не настроен для автономного тестирования, поэтому практически все должно быть разработано в режиме онлайн. Если бы я действительно пытался разрабатывать в автономном режиме, я бы получил больше ложных объектов, чем было бы разумно.
В более новой лаборатории я обычно могу добавить функциональность, разработав ее в автономном режиме за своим рабочим столом, высмеивая только те вещи, которые требуются немедленно, и затем проводя в лаборатории недолгое время, решая оставшиеся проблемы, которые не были устранены. -линия.
Мой совет
Кажется, что вы начали хорошо, каждый раз, когда вы собираетесь внести большие изменения в ваш рабочий процесс разработки, вы должны убедиться, что все вовлечены в принятие этого решения, и в идеале, что большинство людей приняло его. Судя по твоему вопросу, похоже, ты правильно понял. Если люди не испытывают энтузиазма к этой идее, она обречена либо потерпеть неудачу, либо вызвать дурную волю.
Если вы не представите убедительное экономическое обоснование, я бы не рекомендовал провести базовую реализацию модульных тестов и спецификаций для всей вашей системы. Как я упоминал выше, если система не предназначена для тестирования, может быть очень сложно написать для нее автоматические тесты.
Вместо этого я бы рекомендовал начать с малого и использовать правило бойскаута :
Всегда оставляйте лагерь чище, чем вы его нашли.
Если во время реализации чего-либо в этой кодовой базе вы можете определить конкретные тесты, необходимые для тестирования существующего поведения и перехода от старого поведения к новому, то вы одновременно задокументировали изменение в спецификации и приступили к реализации модульных тестов для ваша система.
Модули, к которым вы не прикасаетесь, не проходят модульные тесты, но если вы не прикасаетесь к ним, то это, вероятно, потому, что они уже полностью протестированы в использовании и не нуждаются в изменениях, или они никогда не используются.
Чего вы хотите избежать, так это тратить целую кучу усилий разработчиков на написание тестов, которые никогда не понадобятся ( YAGNI работает так же хорошо для тестового кода, как и для рабочего кода * 8 '), никогда не будет использоваться снова и деморализует людей в думая, что тесты бесполезны в конце концов.
Резюме
Начните с малого, постепенно повышайте доверие к тестам и извлекайте выгоду для бизнеса из разработки тестов, когда и где они приносят наибольшую пользу вашей команде.