Все знают TDD - Test-Driven Development. Пишешь сначала тесты, которые проверяют те случаи, которые ты придумал, а потом пишешь код, который удовлетворяет этим тестам и только тестам - не забегая вперёд. Когда реальная жизнь показывает, что кода недостаточно, пишешь новые тесты (которые подсказала реальная жизнь) и улучшаешь код. Таким образом, код всегда покрыт тестами, а программист не увлекается over-engineering’ом.
Ричи Хики сказал как-то в презентации на конференции Strange Loop:
We say, “I can make a change because I have tests.” Who does that? Who drives their car around banging into the guard rails?!
Что, мне кажется, очень прикольная (не уверен, что уместно использовать слово “хорошая”) аналогия: TDD это как езда по трассе, когда ты меняешь направление только при ударах об отбойник. Пока удара не было - TDD запрещает тебе менять код. Идея в том, чтоб настроить много отбойников. Идея Рича в том, что:
What I have said is, life is short and there are only a finite number of hours in a day. So, we have to make choices about how we spend our time.
А сегодня с утра я наблюдал, как мой сын использует этот подход для того, чтоб учиться ходить, с ходунками: когда под маленьким углом он ударяется об стену, меняет направление и идёт дальше. А вот когда под прямым углом приходит к холодильнику, утыкается в него, и все дальнейшие усилия не приносят плодов.
Провести аналогию с TDD оставим читателю.