Эффективность TDD не зависит от размера проекта. Я буду практиковать три закона TDD даже на самых маленьких упражнениях по программированию. Тесты не требуют много времени для написания, и они экономят огромное количество времени на отладку. Они также позволяют мне реорганизовать код, не боясь что-либо сломать.
TDD - это дисциплина, аналогичная дисциплине бухгалтерии с двумя записями, практикуемой бухгалтерами. Это предотвращает ошибки в малом. Бухгалтеры будут вводить каждую транзакцию дважды; один раз как кредит, а один раз как дебет. Если не было допущено ни одной простой ошибки, баланс будет сведен к нулю. Этот ноль является простой выборочной проверкой, которая не позволяет руководителям попасть в тюрьму.
Точно так же программисты пишут модульные тесты перед своим кодом в качестве простой выборочной проверки. По сути, они пишут каждый бит кода дважды; один раз как тест, и один раз как производственный код. Если тесты пройдены, два бита кода будут согласованы. Ни одна из этих практик не защищает от более крупных и сложных ошибок, но обе эти практики, тем не менее, ценны.
Практика TDD на самом деле не техника тестирования, это практика разработки. Слово «тест» в TDD является более или менее совпадением. Таким образом, TDD не является заменой хороших методов тестирования и хороших тестировщиков качества. Действительно, очень хорошая идея, чтобы опытные тестировщики писали планы QA-тестирования независимо (и часто заранее) от программистов, пишущих код (и их модульные тесты).
Я предпочитаю (на самом деле, моя страсть), чтобы эти независимые тесты контроля качества также автоматизировались с помощью такого инструмента, как FitNesse , Селен или Watir . Деловые люди должны легко читать тесты, выполнять их и совершенно недвусмысленно. Вы должны иметь возможность запускать их в любой момент, обычно много раз в день.
Каждая система также должна быть проверена вручную. Тем не менее, ручное тестирование никогда не должно быть запоздалым. Тест, который может быть написан по сценарию, должен быть автоматизирован. Вы только хотите поставить людей в петлю, когда человеческое суждение необходимо. Поэтому люди должны проводить исследовательские испытания , а не слепо следовать планам испытаний.
Итак, краткий ответ на вопрос о том, когда проводить юнит-тестирование по сравнению с ручным, заключается в том, что «против» не существует. Вы должны написать автоматические модульные тесты сначала для подавляющего большинства кода, который вы пишете. Вы должны иметь автоматизированные приемочные тесты, написанные тестерами. И вы должны также практиковать стратегическое поисковое ручное тестирование.