Как убедить программистов в моей команде делать TDD?

Мне известен этот вопрос: https://stackoverflow.com/info/428691/how-to-encourage-implementation-of-tdd

В моей команде мы пишем много модульных тестов. Но, как правило, программисты склонны писать модульные тесты после использования кода. Итак, мы сначала завершаем функциональность модуля, а затем записываем тесты. Для большинства модулей наш охват составляет около 70%. Я пробовал убедить своего технического менеджера и членов моей команды сделать чистую TDD, в которой мы сначала пишем тесты, а затем код, но invain. Я думаю, что первые тесты позволяют нам лучше разрабатывать дизайн. Я просто лаяю, особенно когда наше покрытие достаточно велико? Если ответа на этот вопрос нет, то как мне разговаривать с людьми, чтобы иметь подход, основанный на тестах.

EDIT: Я думаю, что писать тесты после написания кода проще. Люди в моей команде привыкли делать это и противостоят любым изменениям.

Ответы

Ответ 1

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

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

Задача состоит в том, чтобы продемонстрировать это другим разработчикам. Один из способов, которым вы можете это сделать, - использовать TDD Kata как этот от Роя Ошерове (он использует его в своем TDD Master Курс). Он разработан специально, чтобы продемонстрировать ценность при малых шагах, реализуя только код, необходимый для прохождения каждого теста. Это может показать людям, как работает процесс, и сделать их более удобными, если попытаться.

Было также упражнение по кодированию, которое я слышал о том, где вы дали две группы/команды разработчиков достаточно простую задачу, и попросил одну из групп использовать TDD и убедиться, что они следовали "самой простой вещи, которая могла бы работать", правила, в то время как другая команда делала все, что хотела. Затем, как только это будет сделано, у вас есть команды, которые переключают задачи, но выкидывают код, написанный каждой командой, оставляя только тесты. Затем команды должны воссоздать код для задачи. Как правило, вы обнаружите, что команда, которая наследует код TDD, делает это намного легче.

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

Ответ 2

Несколько предложений. Ваша практичность может варьироваться:

  • Выиграйте одного или двух человек: ваш босс, стажер и т.д., сначала на свою сторону. Ваш первый последователь сделает вас лидером.
  • Начните парное программирование или наставничество. Даже если его просто с одним или двумя специалистами, тесно сотрудничая с кем-то, может быть хорошим способом повлиять на их стиль. Если вы хотите, вы можете попробовать стать менеджером.
  • Дайте техническую презентацию по этому вопросу. Сделайте фокус на том, почему и проблема, которую вы решаете, вместо TDD. Вы хотите, чтобы люди покупали проблему, а не ваше конкретное решение. Включите еще пару альтернатив, поэтому вам не кажется, что вы просто пытаетесь подтолкнуть то, что работает для вас.
  • Получите некоторую внешнюю подготовку от Object Mentor или тому подобное. Лучше всего работать, если вы можете убедить своего босса, а команда - не кучка закаленных бездушных циников.

Ответ 3

Честно говоря, вы должны всегда использовать цикл разработки/тестирования, который работает.

Многие люди, такие как TDD, и многие крупные игроки, такие как Google, обняли его; из-за высокого охвата тестирования.

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

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

Ответ 4

Возможно, Leading by example может помочь:

Начните работать с этим самостоятельно

Возможно, создайте учебник \ script для настройки среды (IDE), которая не добавит служебные данные для процесса TDD:

  • Запустите тесты в одном ярлыке
  • GUI тестовой системы должен присутствовать в представлении разработки (не только в тестовом представлении, поэтому вам не нужно перемещаться между ними)

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

Ответ 5

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

http://lizkeogh.com/2009/11/06/translating-tdd-to-bdd/

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

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

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