Их немало, но преимущества намного перевешивают недостатки.
Там крутая кривая обучения.
Многие разработчики, похоже, ожидают, что они могут быть эффективными при первом тестировании программирования с самого первого дня. К сожалению, для получения опыта и программирования требуется столько же времени, сколько и раньше. Вы не можете обойти это.
Чтобы быть более конкретным, очень легко ошибиться. Вы можете очень легко (с очень благими намерениями) написать целую кучу тестов, которые либо сложно обслуживать, либо проверять не те вещи. Здесь сложно привести примеры - для решения подобных проблем просто необходим опыт. Вы должны хорошо разбираться в разделении проблем и проектировании для тестирования. Мой лучший совет здесь - заниматься парным программированием с кем-то, кто действительно хорошо знает TDD.
Вы делаете больше кодирования заранее.
Test-first означает, что вы не можете пропустить тесты (что хорошо) и означает, что в итоге вы напишете больше кода. Это значит больше времени. Опять же, вы не можете обойти это. Вы получаете вознаграждение за код, который легче поддерживать, расширять и, как правило, меньше ошибок, но это требует времени.
Может быть трудно продать менеджерам.
Менеджеры программного обеспечения обычно касаются только сроков. Если вы переключитесь на тестирование в первую очередь, и вам вдруг понадобится 2 недели, чтобы завершить функцию вместо одной, им это не понравится. Это определенно стоит битвы, и многие менеджеры достаточно просвещены, чтобы ее получить, но это может быть непростой задачей.
Может быть трудно продать коллегам-разработчикам.
Так как есть крутая кривая обучения, не всем разработчикам нравится программирование в тестовом режиме. На самом деле, я предполагаю, что большинству разработчиков поначалу это не нравится. Вы можете делать такие вещи, как парное программирование, чтобы помочь им освоиться, но это может быть непростой задачей.
В конце концов, преимущества перевешивают недостатки, но это не поможет, если вы просто проигнорируете недостатки. Знание того, с чем вы имеете дело с самого начала, помогает вам решить некоторые, если не все, недостатки.