Чтение ответов на этот вопрос Недостатки разработки, управляемой тестированием? У меня сложилось впечатление, что существует много недоразумений в отношении того, что такое TDD и как ее следует проводить. Может оказаться полезным рассмотреть эти проблемы здесь.
Каковы некоторые распространенные недоразумения в отношении TDD?
Ответ 1
Я чувствую, что принятый ответ был одним из самых слабых (Недостатки Test Driven Development?), и самый отзывчивый ответный запах того, кто может писать за определенные тесты.
Инвестиции большого времени: для простых Если вы потеряете около 20% фактического но для сложных случаев вы теряете гораздо больше.
TDD - это инвестиция. Я обнаружил, что как только я был полностью в TDD, время, которое я потерял, очень мало, и в какое время я проиграл, было больше, чем придумано, когда дело дошло до времени.
В сложных случаях ваши тестовые примеры сложнее рассчитать, я бы предложил в такие случаи, чтобы попытаться использовать автоматический код ссылки, который будет запускаться параллельно в отладочной версии/ вместо unit testПростейшие случаи.
Если ваш тест становится очень сложным, возможно, пришло время просмотреть ваш дизайн. TDD должен вести вас по пути меньших, менее сложных единиц кода, работающих вместе.
Иногда вы не поняли дизайн в начале и эволюционируете по мере продвижения - это заставит вас повторить ваш тест, который приведет к большому проигрышу. Я бы предложил отложить модульные тесты в этом случае, пока у вас не будет понимания дизайна.
Это худший момент для всех! TDD действительно должен быть "Test Driven Design". TDD - это дизайн, а не тестирование. Чтобы полностью реализовать ценность преимуществ TDD, у вас есть игрушка драйв вашего дизайна из ваших тестов. Поэтому вы должны переделать свой производственный код, чтобы ваши тесты проходили, а не наоборот, поскольку этот пункт предполагает
Теперь в настоящее время наиболее распространены: Недостатки разработки, основанной на тестах
Когда вы дойдете до того, что у вас большое количество тестов, изменение системы может потребовать повторной записи некоторых или всех ваших тестов, в зависимости от того, какие изменения были изменены. Это может превратить относительно быструю модификацию в очень трудоемкий процесс.
Как и принятые ответы на первый взгляд, это похоже на спецификацию в тестах и общее отсутствие понимания процесса TDD. При внесении изменений начинайте с теста. Измените тест на то, что должен сделать новый код, и внесите изменения. Если это изменение нарушает другие тесты, то ваши тесты делают то, что они должны делать, терпя неудачу. Единичные тесты для меня предназначены для отказа, поэтому почему RED-этап является первым и никогда не должен упускаться.
Ответ 2
ИМХО Самое большое заблуждение относительно TDD заключается в том, что: время, потраченное на тестирование записи и рефакторинга, было бы потеряно в времени. Мысль выглядит так: "Да, набор тестов хорош, но функция будет полной быстрее, если мы просто закодировали его".
Когда все сделано правильно, время, затрачиваемое на запись и поддержание тестов, сохраняется несколько раз в течение срока действия проекта вовремя, не затрачивая отладки и фиксации регрессий. Поскольку стоимость тестирования стоит впереди, а выигрыш со временем, его легко упускать из виду.
Другие большие заблуждения включают в себя игнорирование влияния TDD на процесс проектирования и отсутствие понимания того, что "болезненные тесты" представляют собой серьезный запах кода, который требует быстрой фиксации.
Ответ 3
Я вижу, что многие люди не понимают, какие тесты действительно полезны для TDD. Люди пишут большие приемочные тесты вместо небольших модульных тестов, а затем проводят слишком много времени, сохраняя свои тесты, а затем заключают, что TDD не работает. Я думаю, что у людей BDD есть смысл полностью избегать использования теста слов.
Другая крайность заключается в том, что люди перестают принимать приемочные испытания и думают, что, поскольку они тестируют блок, проверяется их код. Это опять-таки недоразумение функции unit test. Вам все еще нужны приемочные тесты.
Ответ 4
Заблуждение, которое я часто вижу, заключается в том, что TDD обеспечивает хорошие результаты.
Часто тесты списываются с недостатками требований, и поэтому разработчики производят продукт, который не выполняет то, что ожидает пользователь. Ключ к TDD - это, на мой взгляд, работа с пользователями для определения требований, помогая им справляться с ожиданиями.
Ответ 5
Это проблемы, которые, на мой взгляд, довольно противоречивы и, следовательно, склонны к непониманию:
-
По моему опыту самым большим преимуществом является создание гораздо лучшего кода за счет большого количества времени, затрачиваемого на письменные тесты. Таким образом, это действительно стоит для проектов, которые требуют высокого качества, но на некоторых других, менее качественных центрированных сайтах, дополнительное время не будет стоить усилий.
-
Люди, похоже, думают, что нужно тестировать только основное подмножество функций, но на самом деле это неправильно ИМХО. Вам нужно проверить все, чтобы ваш тест был действительным после рефакторинга.
-
Большой недостаток TDD - ложное чувство безопасности, которое дает неполные тесты: я видел, как сайты снижались, потому что люди полагали, что Unit Testing было достаточно для запуска развертывания.
-
Нет необходимости в издевательских фреймворках для TDD. Это просто инструмент для более простого тестирования некоторых случаев. Лучшие юнит-тесты, хотя и уволены в стеке и должны быть агностическими для слоев в коде. Тестирование одного слоя за раз в этом смысле бессмысленно.
Ответ 6
Просто вставляйте еще один ответ в банк.
Одним из наиболее распространенных недоразумений является то, что ваш код исправлен, т.е. У меня есть этот код, теперь, как я его испытаю? Если трудно написать тест, мы должны задать вопрос: как я могу изменить этот код, чтобы было легче протестировать?
Почему?..
Ну Тип кода, который легко тестировать:
- Модульный - каждый метод делает одно.
- Параметрированный - каждый метод принимает все, что ему нужно, и выводит все, что ему нужно.
- Хорошо указана - каждый метод делает именно то, что должен, не более, не менее.
Если мы пишем такой код, тестирование будет неудачей. Интересно, что код, который легко тестировать, по совпадению, лучше кода.
Лучше, чем проще читать, проще проверить, проще понять, проще отлаживать. Вот почему TDD часто описывается как проектное упражнение.