Как конвертировать магазин программного обеспечения в TDD?

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

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

Ответ 1

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

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

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

Ответ 2

Как сказал Роб П - я также обнаружил, что проповедь закончила меня хриплым голосом, и никто не слушал. Я получил результаты быстрее и более широко, делая это и сохраняя эту часть видимой. Будьте открыты для допроса и не заставляйте его. Поощряйте и хвалите, но не проповедуйте.

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

Ответ 3

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

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

Как только люди начнут осознавать преимущества, импульс будет расти, но вам нужно пионерами.

Ответ 4

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

Я напишу код, вы пишете тест

Это всегда появляется сначала. Люди предполагают, что с тех пор, как вы так нападали на тестирование, вы должны написать те тесты. Это не работает вообще и не хватает всего.

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

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

Я только начну, и все последуют.

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

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

Ответ 5

Введите пример:

  • используйте TDD для всего кода, который вы пишете.
  • покажите им преимущества, как только у вас появится возможность (регрессия, обнаруженная unit test или инцидентом, воссозданным в вашей тестовой среде)
  • доставить "чистый код, который работает"
  • предложите свою помощь другим.
  • не догматично - TDD - это не серебряная пуля.
  • сделать ваши модульные тесты видимыми: они должны компилироваться вместе с кодом, который они тестируют.

Ответ 6

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

Что касается нажатия TDD или какой-либо другой религии кода, не беспокойтесь.

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

Ответ 7

Огромная проблема с TDD, которая появляется в "снизу вверх", заключается в том, что когда толчок приходит в себя (поскольку это неизбежно происходит, когда приближается крайний срок), руководство собирается переоценить акцент на тестах: "Мы можем" Мы должны закончить проект!"

Конечно, это та самая ситуация (предельный срок надвигается, значительное отставание, прогресс не на пути с promises, что приводит к быстрому смещению приоритетов и задач), где преимущества TDD действительно влезают. Менеджмент преодолевает это, проект/итерация начинает разваливаться в одном и том же старом, и руководство оглядывается назад и говорит: "Мы пробовали TDD, и это совсем не помогло".