TDD излишне для небольших проектов? - PullRequest
42 голосов
/ 23 февраля 2010

В последнее время я довольно много читал о TDD и тому подобном, и я пока не совсем продал его. Я делаю много небольших хобби-проектов (только я), и меня беспокоит, пытаюсь ли я сделать TDD излишне для такой вещи. Хотя я видел небольшие проекты с открытым исходным кодом с 3-мя разработчиками, которые делают TDD. (хотя я видел несколько проектов с одним человеком, которые также делают TDD)

Так что, всегда ли полезно использовать TDD или на каком пороге имеет смысл его использовать?

Ответы [ 16 ]

42 голосов
/ 23 февраля 2010

Маленькие проекты могут иметь привычку превращаться в большие проекты, даже если вы этого не понимаете, тогда вам хотелось бы начать с TDD:)

34 голосов
/ 23 февраля 2010

TDD светит в небольших проектах. Часто намного легче придерживаться TDD в небольшом проекте, и это прекрасное время для практики и получения дисциплины, необходимой для соблюдения TDD.

По моему опыту крупных проектов, как правило, являются теми, которые отказываются от TDD в некотором пороге. (Я не утверждаю, что это хорошо).

Я думаю, что крупные проекты, как правило, отказываются от него по нескольким причинам:

  • Неопытность разработчика --- либо вообще, либо с TDD
  • Ограничения по времени --- Большие проекты по своей природе более сложны
    • Добавленная сложность приводит к переполнению сроков, и юнит-тесты, как правило, сначала отбрасываются
    • Это может усугубить неопытная команда
19 голосов
/ 23 февраля 2010

Из своего личного опыта могу сказать следующее:

  1. Каждый раз, когда я начинал один из моих личных маленьких хобби-проектов, я обещал развивать его с использованием TDD.
  2. Каждый раз, когда я этого не делал.
  3. Каждый раз, когда я сожалел об этом.
17 голосов
/ 23 февраля 2010

Все имеет кривую рентабельности .

Игнорируя многие из часто оспариваемых преимуществ TDD, TDD того стоит, если ваша реализация будет меняться достаточно часто, так что выгода от автоматизированного набора тестов перевешивает любые дополнительные затраты, которые могут быть связаны с начальной разработкой .

10 голосов
/ 23 февраля 2010

Я всегда нахожу такой вопрос смешным. Какая альтернатива? Написание кода, который вы только компилируете и никогда не запускаете, чтобы проверить его правильность? Вы ждете, пока не начнете работать, чтобы узнать, работает ли ваш класс вообще?

Если у нас никогда не было практики, называемой TDD, или до того, как JUnit был изобретен еще в 1997 году, не было ли тестирования кода? Конечно был. Так почему же так важно сейчас, когда у вас есть тестовые фреймворки, чтобы помочь вам в этом?

Даже небольшой проект в сжатые сроки не захочет ждать, пока производство узнает, работает ли оно. Напишите тесты.

Нет необходимости в любом «маленьком» проекте, но я определяю «маленький» как менее одного класса.

7 голосов
/ 23 февраля 2010

Overkill? Не за что. В дополнение к основному преимуществу - написанию кода, на который можно положиться, потому что вы подумали о том, как он может сломаться, вы будете более дисциплинированными и потенциально более продуктивными при разработке, управляемой тестами. Подберите любую из книг Pragmatic Programmer для советов и вдохновения.

6 голосов
/ 23 февраля 2010

Что-то, что я слышал от одной из членов нашей местной группы Agile, заключается в том, что она не находит TDD полезным для самых ранних этапов проекта, где вы по сути делаете быстрые наброски, и вы Вы еще не уверены, какую форму принимает эта вещь. Но как только у вас появится представление о том, как выглядят интерфейсы, вы можете начать использовать тесты, которые помогут вам определить их.

TDD - это еще один инструмент, например документация, для улучшения ясности кода. Это очень важно, когда другие люди должны работать с вашим кодом, но многие из нас считают, что он также очень полезен, когда оглядывается на наш собственный код. У вас когда-нибудь был хобби-проект, который вы подобрали после того, как какое-то время находились вдали от него, наткнулись на странный кусочек кода и задались вопросом: «Какого черта я написал , что

6 голосов
/ 23 февраля 2010

Я бы воспользовался возможностью использовать TDD с небольшим проектом, чтобы просто намочить ноги. Это был бы хороший опыт обучения, даже если вы понимаете, что это не для вас.

4 голосов
/ 23 февраля 2010

Я и другие использую TDD в любом проекте, который состоит из нескольких строк кода.

Как только вы получаете ошибку тестирования, трудно ни для чего не использовать TDD. Лично я обнаружил, что мой код улучшился в несколько раз из-за TDD.

3 голосов
/ 23 февраля 2010

Я полагаю, что оно того стоит для большинства проектов. TDD и последующее регрессионное тестирование позволяет вам не только определять, работают ли компоненты, при их написании, но и вносить изменения и рефакторинги. Если ваши тесты достаточно полны, вы можете охватить сценарии для нечастых / маловероятных крайних случаев и создать / поддерживать более надежный код.

Продвигаясь вперед по жизненному циклу проекта, непрерывные циклы тестирования избавят вас от ручного повторения тестов и сведут на нет очевидный шанс повторить их неправильно / не полностью.

...