Есть ли разница между TDD и Test First Development (или Test First Programming)? - программирование
Подтвердить что ты не робот

Есть ли разница между TDD и Test First Development (или Test First Programming)?

Обе идеи звучат очень похоже на меня, но могут быть тонкие различия или то же самое, объясненные по-разному. Какова связь между TDD и Test First Development/Programming?

4b9b3361

Ответ 1

Есть разница в том, что фактор движения.

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

Знаете ли вы, что такое открытый API-интерфейс класса, и просто пишите тесты перед реализацией? Эта тестовая разработка.

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

Иными словами, TDD начинается с "Какие вопросы я хочу задать?" тогда как не TDD (независимо от того, тест первый или нет) начинается с "Какой ответ я хочу дать?"

Ответ 2

В основном это разные имена, описывающие одно и то же - ну, по сути, пять имен, поскольку последний D может выступать как для дизайна, так и для разработки.

Test First был термином, используемым первоначально, особенно в контексте Extreme Programming, для цикла тестового кода-рефактора. Название Test Driven Development было предложено - и быстро приняло - позже, чтобы подчеркнуть тот факт, что TFD - и всегда был - скорее стратегией дизайна, чем стратегией тестирования.

Очевидно, сегодня некоторые люди имеют разные коннотации для этих двух терминов, но это не было целью их существования, и я не стал бы полагаться на то, что это общеизвестно (потому что это не так). Фактически, я бы предпочел, чтобы термин TFD был устаревшим.

Ответ 3

Есть много аналогичных терминов, таких как тестовое программирование, тестовая разработка, тестовая разработка или даже тестовый дизайн. Важно прояснить несколько моментов:

1. Test First Programming (TFP)

Термин тестовое программирование - это наилучшая практика программирования. Он был повторно представлен (если не был придуман) Кентом Бек в его книге "Extreme Programming Explained": "Напиши модульные тесты перед программированием и продолжайте все тесты, выполняемые в любое время". Итак, когда речь идет о тестовом программировании, мы говорим о написании автоматических модульных тестов самим разработчиком, который собирается написать код для удовлетворения этих тестов. Модульные тесты накапливаются и создают набор тестов автоматической регрессии, который может выполняться периодически.

2. Тестирование (TDD)

Тестируемая разработка (TDD) - это название методологии, предложенной Кентом Бекком в его книге "Разработка, основанная на тестировании по примеру". Это процесс разработки программного обеспечения, это касается не только написания тестов перед кодом. Вся книга пытается объяснить ее шаблонами, рабочими потоками, культурой и т.д. Одним из важных аспектов этого является акцент на рефакторинг.

Некоторые люди используют термины "тест-первая разработка", тестовый дизайн или тестовое программирование и... Одно можно сказать наверняка: хорошо разработанная методология - это разработка, основанная на тестах, и технология программирования является тестовой программирование. Остальные, как правило, ссылаются на идею написания тестов перед кодом или ошибочно ссылаются на тестовую разработку или тестовое программирование.

Ответ 4

TDD = TFD + Рефакторинг.

Когда вы делаете TFD, вы применяете некоторый рефакторинг, чтобы сделать код более универсальным и надежным.

Ответ 5

Исторически верно: тестовое программирование и разработка через тестирование означают одно и то же с улучшенным именем

В контексте XP (Extreme Programming), который является процессом разработки программного обеспечения, благодаря которому популярное программирование и разработка через тестирование стали популярными, программирование сначала было переименовано в разработку через тестирование, а затем через проектирование, основанное на тестировании, после осознания того, что Написание тестов в первую очередь оказывает чрезвычайно положительное влияние на архитектуру программного обеспечения и дизайн программной системы.

Это влияние на архитектуру и дизайн является следствием более или менее удивительных синонимов:

  • Тестируемые
  • отсоединенных
  • многоразовый
  • Независимо развертываемый
  • Независимо развивающийся
  • Независимо Разумный

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

Это влияние на дизайн и архитектуру программного обеспечения стало настолько важным, помимо других положительных эффектов, что создатели посчитали целесообразным переименовать его из Test-First Programming в Test-Driven Development.

Название Test-Driven Development также помогает лучше продвигать метод с точки зрения принятия и правильного понимания, потому что название Test-Driven Development делает упор на целостных аспектах метода, чем Test-First Programming.

Не исторически правильно, но полезно

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

Тестирование в начале программирования...

… Любой метод, в котором тесты для тестируемого кода пишутся перед тестируемым кодом.

Разработка через тестирование…

… Представляет собой специфическое подмножество программ "сначала тестируй", которое следует трем законам разработки через тестирование, как описано Робертом К. Мартином:

  1. Вы не можете написать производственный код до тех пор, пока не напишете неудачный unit тест.
  2. Вы не можете написать больше модульных тестов, чем достаточно для сбоя, а не компиляция не удалась.
  3. Вы не можете написать больше производственного кода, чем достаточно для прохождения в настоящее время неудачного модульного теста. - Роберт К. Мартин, Три закона развития, управляемого тестами

Следуя этим трем правилам, вы попадаете в цикл Red-Green-Refactor. 1. Вы пишете провальный тест. 2. Вы делаете это пройти. 3. Теперь, когда оно прошло, вы можете беспощадно провести рефакторинг, прежде чем писать следующий неудачный тест.

Обратите внимание, что рефакторинг безопасно требует испытаний. Рефакторинг означает изменение структуры исходного кода без изменения существенного поведения. Но откуда мы знаем, что мы случайно не изменили существенное поведение? Что определяет существенное поведение? Это одна из многих вещей, для которых полезны тесты.

Кстати, если ваши тесты мешают рефакторингу, ваши тесты слишком низкоуровневые, слишком тесно связаны, и, возможно, вы использовали слишком много насмешек.

Другие интересные переименования в Extreme Programming

  • Непрерывная интеграция → Непрерывная доставка → Непрерывное развертывание; Строго говоря, они означают разные вещи, однако, в духе XP, это означало "Непрерывное развертывание" с самого начала, и когда люди запрыгнули на подножку, стало понятно, что интеграция воспринималась слишком буквально, и люди останавливались, прежде чем они это сделали.
  • Непрерывный рефакторинг → Постоянное улучшение дизайна; Рефакторинг не является средством для достижения цели, но преследует более высокую цель.
  • 40 часов в неделю → Sustainable Pace (Городская легенда: это переименование произошло после протестов французских разработчиков программного обеспечения.)

Ответ 6

Это точно то же самое. Сначала выполняются оба эталонных теста записи, а затем записывается код, который пройдет тест

Ответ 7

TDD (Test Driven Development) - это тестирование первой разработки/программирования, хотя я видел и слышал, что TDD означает создание постоянных, повторяемых модульных тестов (даже после кода), но на самом деле это означает, что тесты написаны перед кодом, который они тестируются.

Ответ 8

В тесте, управляемом разработкой: в качестве примера, автор, Кент Бек, четко заявляет, что правило "сначала тест" (TF) является правилом. Так что TF - это принцип, который управляет TDD. Более поздний процесс.