Test-driven development — эффективна ли эта идеология разработки? Отвечает Андрей Плахов, руководитель Яндекс Кью и отдела функциональности поиска:
— Зависит от предметной области и, как ни странно, от языка программирования (редко что в серьезном программировании так сильно зависит от языка).
Если вы пишете, например, компилятор, стандартную библиотеку или криптографические утилиты, то TDD — лучшее, что вы можете выбрать. Обобщая, TDD хорош, когда вы занимаетесь чётко формализуемыми задачами, решение которых при этом достаточно сложно.
Если вы пишете на Python или JavaScript, TDD тоже может пригодиться, но по другим причинам: большое количество тестов будут аналогом «компиляции», то есть достаточно рано (раньше, чем до соответствующего кода доберутся тестировщики или пользователи) спасут вас от банальных опечаток, перепутанного порядка аргументов и тому подобных простых ошибок.
Если же вы занимаетесь, например, machine learning’ом, или, наоборот, пишете какой-то очень простой код, склеивающий между собой вызовы сложных внешних систем, то TDD вам совершенно не пригодится, только время потратите.
В целом я считаю интеграционные тесты гораздо более полезными, нежели изолированные (юнит-, например). Соответственно, мне всегда нравился другой подход к разработке, упирающий, в отличие от TDD, именно на интеграционные тесты.
--------
Читайте на Яндекс Кью ответы Андрея Плахова на популярные вопросы о разработке и математике: ya.cc/F-CKI-Mh3K524P