Правильно ли использовать TDD для проектирования вашей модели перед тем, как писать тесты или писать тесты для разработки вашей модели? - PullRequest
6 голосов
/ 21 октября 2010

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

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

Мои коллеги, похоже, считают, что это не очень хорошая практика TDD + DDD.Они думают, что вам не следует ничего набрасывать и начинать тестирование сборки, а также разрабатывать свою модель по мере того, как вы проходите «чувство» тестов.

Какой из них считается «правильной» техникой TDD при создании модели DDD?

Ответы [ 4 ]

7 голосов
/ 21 октября 2010

Как и любой другой вопрос разработки программного обеспечения, ответ часто бывает «немного и того, и другого».

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

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

3 голосов
/ 21 октября 2010

Я не понимаю, как вы можете написать тест, не зная, о каких элементах данных вы говорите.

 Thing myThing = getThingById( 87 );
 assert(Thing is Blue);

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

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

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

0 голосов
/ 22 октября 2010

Одним из наиболее важных преимуществ TDD является то, что он заставляет вас думать о своем приложении так, как иначе, как DDD и многие другие практики, которые мы применяем в нашей разработке.Мышление в деталях, без СЛИШКОМ большого количества деталей, является тем, что является самым важным.

0 голосов
/ 21 октября 2010

Если я вас правильно понял, вы хотите начать писать код, прежде чем делать какой-либо дизайн.Это просто неправильно.Для гибкой разработки вам нужно сделать какой-то дизайн, прежде чем делать что-то еще.Конечно, он должен быть максимально гибким и не должен вдаваться в подробности.Детали уточняются при помощи юнит-тестов.

...