2008-09-23 1 views
3

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

Мой вопрос заключается в следующем: Может ли TDD использоваться в среде, где старший программист/designer/architect делает класс и/или компонентный дизайн, а затем руки, которые разрабатываются для младшего разработчика для реализации? В этом случае тесты не будут основным драйвером конструкции. Я предполагаю, что внедряющий программист может реализовать этот проект, используя первый подход к тестированию. В этом случае это еще TDD, или это то, что было бы лучше назвать Test Driven Implementation? Было бы что-то вроде этой работы в реальном мире, или вы думаете, что в итоге вы столкнетесь с худшими частями TDD и спроектируете фронт?

UPDATE:

я наткнулся на блог Рой Osherove в describing the various meanings of TDD:

Каковы возможные значения TDD?

  1. Test Driven Development: идея написания кода в тесте первого образом. Возможно, у вас уже есть существующий проект .
  2. Теста-ориентированное развитие: Имея блок испытания интеграционных тестов в вашем коды и писать их либо до или после нашей записи коды. В вашем коде много тестов. Вы признаете ценность тестов, но вы не обязательно записываете их до , вы пишете код. Дизайн, вероятно, существует, прежде чем писать код
  3. Test Driven Design (Крайнее Программирование путь): Идею использования тест-первого подход как полностью оперившаяся методику проектирования, где тесты бонус, но Идея состоит в том, чтобы полный дизайн от маленького до нуля. дизайн вообще. Вы проектируете, как вы идти.
  4. Test Driven Development и Design: с помощью тест-первых технику для привода нового кода и изменения, в то же время позволяя ему изменения и развивать свой дизайн как дополнительный бонус. Возможно, у вас уже есть какой-то дизайн на месте перед запуском , чтобы код, но он мог очень хорошо изменить, потому что тесты указывают различные запахи.

После прочтения, что это довольно ясно, что Test Driven Design вкус TDD, вероятно, не наилучшим образом подходит в этой среде, но Test Driven Development вкус будет, вероятно, подходит.

ответ

6

TDD в первую очередь стратегия дизайна. То есть, сначала записи тестов используются для управления дизайном производственного кода, да.

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

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

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

Независимо от того, принимаете TDD или нет, я бы добавил, что ваш подход, похоже, немного пахнет Architects Don't Code anti pattern. Я бы подумал о том, что старшая программа разработчиков с младшими членами, по крайней мере частично. Это навело бы юниоров, дало бы пожилым людям ценную обратную связь по их проектным решениям и уменьшило бы трения, которые могли бы возникнуть между этими двумя ролями.

2

«TDD сторонники что у вас нет дизайна за пределы вашего проекта архитектуры и каркасного выбора

TDD определенно не сторонника того, что вы описали выше

ОБНОВЛЕНО:. Я чувствую стоит изменить этот ответ из-за обновлений к вопросу.

TDD - это больше философии дизайна, чем это стратегия тестирования.

Я думаю, что это нужно переформулировать .. TDD не о тестировании или о разработке «теста первой». TDD - это поведение на основе функциональных требований бизнеса, некоторые называют этот эволюционный дизайн.

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

Я бы определенно задал вопрос о том, почему существует необходимость «спланировать» весь дизайн спереди? Недостаточно ли доверия к команде разработчиков? Есть гораздо лучшие способы поделиться знаниями & дизайн с юниорами, чем путем диктовки полного решения кода. Например, программирование с участием старших разработчиков.

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

+0

Это показывает, насколько я не испытываю TDD даже после большого чтения и экспериментирования. Множество примеров, которые я видел, откладывают так же просто, как открытие класса, которое должно быть проверено на основе теста. Эти примеры практически не имели дизайна. Ваш комментарий подразумевает, что это не арендатор TDD. Хорошо знать! – 2008-09-23 20:15:13

2

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

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

Классический цикл repeat:(add a test->write code to satisfy test criteria) * хорошо сочетается с другими практиками, такими как выполнение общего проекта, выполненного архитектором. Задача разработчика написать соответствующие тесты значительно упрощается, если он может использовать проектный документ так же, как писать функциональный тестовый пример намного проще, если у вас уже есть подробный пример использования.

* shortened for convenience 
2

В этой среде я считаю, что лучше использовать подход, основанный на контракте.

Архитектор описывает контракт, который должен реализовать класс или интерфейс. Затем разработчик создает тестовые примеры для реализации контракта и кода для его реализации.

Например, взгляните на статью Мартина Фаулера на Consuder Driven контрактов, который описывает, как этот подход работает с веб-сервисами: http://martinfowler.com/articles/consumerDrivenContracts.html

1

У нас есть процесс разработки очень похож на ваш вопрос. Фактически мы нарушили разрыв между анализом и реализацией с этим процессом. И у дизайнера есть модульные тесты по его дизайну.

Смежные вопросы