TDD
Последние 3 месяца активно практикую TDD в своей работе.
В этом посте опишу свой опыт.
📌 По классике процесс разработки с TDD должен выглядеть так: написание короткого теста, который падает, затем написание минимального кода, чтобы тест прошел, и затем рефакторинг написанного кода, без добавления новой логики. В идеале такие тесты, написанные перед началом разработки, должны служить своеобразной спецификацией, а код в результате все время следует этой спецификации.
〰️ Лично мне было немного сложновато следовать классической схеме, часто слишком увлекаюсь написанием кода и изменения в итерациях не всегда получаются минималистичными.
〰️ Также очень часто перед началом разработки хочется написать не короткий тест, а сразу большой, чтобы охватить все этапы тестового сценария, пока общая картина после чтения документации еще свежа и не размылась от погружения в технические детали. Но при следовании TDD, написание и выполнение теста должны быть быстрыми. Это значит что надо писать юнит-тесты, а в нашем проекте в основном используются интеграционные. Да и сама система спроектирована так, что сложно писать юнит-тесты, очень много приватных методов, а публичные часто принимают сложные объекты, завязанные на другие объекты.
〰️ Все это приводит к тому, что когда иногда интеграционных тестов становится слишком много, и они выполняются слишком долго. Пока размышляю над тем, как все-таки частично перейти на юнит-тесты.
Но несмотря на это, плюсов у TDD для меня оказалось намного больше.
✔️Во-первых, теперь к каждой задаче пишу тесты, что улучшает покрытие.
✔️Во-вторых, раньше зачастую недооценивала для себя время, нужное для написания тестов, и это выливалось в неверное планирование сроков. Теперь временные затраты оцениваю куда лучше.
✔️В-третьих, когда тест пишется после кода, сложно абстрагироваться для написания максимально непредвзятого теста. Все равно неосознанно опираешься на написанный код, и легко упустить краевые случаи.
✔️В-четвертых, появляется большая свобода в маневрах. Если по ходу разработки я хочу переписать свой код, то могу просто откатиться к предыдущему коммиту (которые надо делать после каждой итерации) и начать все заново. Не боясь, что большой кусок кода будет невозвратно сломан.
Подводя итог, для меня это крайне положительный опыт и очень продуктивная техника тестирования, которой буду придерживаться и дальше.
Post #62
154
- ❤ 4
- ✍ 3