Почти TDD и рефакторинг
Как правило при проведении дискретезирующего рефакторинга нужно проводить тестирование при каждом шаге рефакторинга.
При изменениях структуры и полиморфизме нужно проводить не верные тесты после верных, потому что туннелирование функций надо проводить с тестированием чтоб "не навредить". Туннели с функциями получаются за счёт вызовов и подвызовов. Неверные тесты помогут проверить то же результат у нового тунеля что и у старого.