Я слышал, что проекты, разработанные с использованием TDD, легче рефакторировать, потому что практика дает полный набор модульных тестов, которые (надеюсь) потерпят неудачу, если какое-либо изменение нарушит код. Тем не менее, все примеры, которые я видел из этого, касаются рефакторинга - например, с помощью алгоритма с более эффективным.
Я нахожу, что архитектура рефакторинга намного более распространена на ранних стадиях разработки дизайна. Интерфейсы меняются, новые классы добавляются и удаляются, даже поведение функции может немного меняться (я думал, что мне нужно это сделать, но на самом деле это нужно сделать) и т.д. Но если каждый тестовый пример тесно связан к этим неустойчивым классам, разве вы не должны постоянно переписывать свои тестовые примеры каждый раз, когда вы меняете дизайн?
В каких ситуациях в TDD можно изменить и удалить тестовые примеры? Как вы можете быть уверены, что изменение тестовых случаев не нарушает их? Плюс, похоже, что синхронизация комплексного набора тестов с постоянно меняющимся кодом будет больно. Я понимаю, что пакет unit test может очень помочь во время обслуживания, как только программное обеспечение будет построено, стабильно и функционирует, но в конце игры, когда TDD также должен помочь на раннем этапе.
Наконец, будет ли хорошая книга по TDD и/или рефакторингу адресовать такие проблемы? Если да, то что бы вы порекомендовали?