Я хотел задать этот вопрос, чтобы увидеть, сколько компаний на самом деле практикуют TDD.
За 11 лет, в течение которых я профессионально занимался программированием, только последние две организации знали о TDD (это охватывало почти 5 лет, до этого TDD не был таким популярным, как сегодня). Я перейду в погоню и отвечу на ваш вопрос, прежде чем отвлечься от моего предложения о продаже TDD :)
В последней компании, в которой я работал (он-лайн академический издатель гуманитарных и научных сборников), мы знали, что нам нужно практиковать TDD, но мы так и не достигли цели. В нашей защите у нас была база кода 250 тыс., Поэтому добавление тестов в непроверяемую кодовую базу такого размера казалось непреодолимым (я чувствую себя виноватым, печатая это сейчас!). Даже лучшие из нас делают ошибки .
Любой, кто выполнил даже небольшое количество TDD, знает, насколько болезненными могут быть тесты по переоборудованию для непроверяемого кода коричневого поля ... Основными причинами являются неявные зависимости (вы не можете тянуть все рычаги, чтобы утверждать результаты из кода - вы не можете издеваться сценарии) и нарушение принципа единой ответственности (тесты сложные, надуманные, требуют слишком много настроек и их трудно понять ).
Мы временно увеличили нашу команду QA (с одного, может быть, двух человек до полдюжины или более), чтобы протестировать платформу перед любым выпуском. Это было чрезвычайно дорогое время и материально, некоторые выпуски могли занять три месяца, чтобы завершить «тестирование». Уже тогда мы знали, что у нас проблемы, они не были «блокирующими» или «критическими», а просто «приоритетными».
Если вы обладаете многолетним коммерческим опытом, вы поймете, что каждая компания ставит критические задачи, а затем изобретает более высокий уровень приоритета выше этого, и, скорее всего, уровень выше этого - особенно когда кто-то сверху выдвигает функцию / исправление ошибки. Я отвлекся ...
Я рад сообщить, что я практикую TDD в моей нынешней компании (телекоммуникационный, веб-сайт и дом разработки мобильных приложений) в сочетании с Jenkins CI для предоставления других отчетов статического анализа (покрытие кода является наиболее полезным после подтверждения прохождения набора тестов) , Проекты, в которых я использовал TDD, - это платежная система и сетевая вычислительная система.
Торговая площадка ...
Часто это может быть тяжелая борьба, оправдывающая автоматизированное тестирование для нетехнических членов команды. Написание тестов действительно добавляет больше работы к процессу разработки, но ... время, которое вы тратите на тестирование сейчас, вы сэкономите на обслуживании позже. Ты действительно просто занимаешь время . Чем дольше продукт используется, тем больше вы сэкономите - и это поможет вам избежать переписывания .
Сначала проверка означает, что сначала вы кодируете свое намерение, а затем подтверждаете, что ваш код выполняет это намерение. Это обеспечивает фокусировку и позволяет вашему коду делать только то, что задумано, и не более (читай, не раздувай). Это исполняемая спецификация и документация одновременно (если ваш тест хорошо написан, и тесты должны быть такими же читаемыми / чистыми, как и системный код, если не больше!).
Непрограммисты (часто) не будут иметь этого понимания, и поэтому TDD не имеет для них особой ценности, и рассматривается как одноразовый ярлык для более ранней даты выпуска.
Программирование - это наша сфера, и, на мой взгляд, мы , как профессионалы, обязаны давать советы по наилучшей практике, такой как TDD. Не для руководителей проектов, чтобы решить, если это сделано, чтобы сократить время разработки, это вне их компетенции . Точно так же они не сообщают вам, какую инфраструктуру, решение для кэширования или алгоритм поиска использовать, они не должны сообщать вам, следует ли вам использовать автоматизированное тестирование.
По моему мнению, индустрия разработки программного обеспечения (в целом) в настоящее время не работает, тот факт, что тестирование вашего ПО НЕ является нормой.
Представьте себе это в других отраслях: медицина, авиация, автомобили, косметика, мягкие игрушки, алкогольные напитки и т. Д. Я попросил свою невесту назвать индустрию, в которой они не тестируют продукт, а она не может!
Возможно, было бы несправедливо утверждать, что никакого тестирования не происходит, потому что это происходит ... но в компаниях без автоматического тестирования это очень ручной / человеческий (читай неуклюжий и часто подверженный ошибкам) процесс.
Один момент, который я бы оспорил в вашем вопросе ...
Они обычно хотели, чтобы разработка началась немедленно или после короткого периода проектирования. Больше похоже на Agile.
Быть «Agile» не означает, что вы не будете проходить тесты, первым участником, внесенным в список на agilemanifesto.org, является Кент Бек , создатель XP и TDD!
Две книги, которые я очень рекомендую, если вы заинтересованы в TDD, или просто не читали их, и увлеченный программист (это все правильно читают?;)
Растущее ориентированное на программное обеспечение, ориентированное на тесты
Чистый код - Роберт С. Мартин («Дядя Боб») Серия
Эти две книги дополняют друг друга и объединяют много смысла в несколько страниц.
Спасибо, что задали этот вопрос :)