Чуть больше года назад мне посчастливилось взять 9-месячный перерыв в работе. Я решил, что в то время я буду оттачивать свои навыки C #. Я начал работать над кучей проектов и заставил себя следовать TDD.
Это был довольно поучительный процесс.
Сначала это было непросто, но со временем я научился писать более тестируемый код (который, как выясняется, обычно является более твердым кодом), и в процессе я также оттачивал свои навыки проектирования ОО.
Теперь я вернулся в рабочую силу и заметил нечто странное.
Я предпочитаю не следовать TDD.
Я считаю, что TDD замедляет меня и фактически усложняет разработку чистого приложения.
Вместо этого я принял немного (очень) другой подход:
- Выберите вертикальный кусок работы
- Разработать функционирующий прототип
- Рефакторинг пока все хорошо и аккуратно
- Расслабьтесь и оцените красивый твердый и тестируемый код, который я написал.
Вы, возможно, заметили, что шаг 1 не был «определите публичную поверхность моей тестовой цели», а шаг 2 не был «тестом bejesus вне указанной публичной поверхности». Возможно, вы также заметили, что ни один из шагов не включает тестирование. Я пишу тестируемый код, но я не тестирую его ... пока что.
Теперь я хотел бы прояснить, что на самом деле я не отказываюсь от каких-либо испытаний. Код, который я пишу, работает . Это работает, потому что я проверяю это вручную.
Я также хотел бы прояснить, что я не отказываюсь от всех автоматических тестирований. Это где мой процесс отличается. И именно поэтому я задаю этот вопрос.
TDD в теории. Не на практике.
Мой процесс немного изменился, и я нашел баланс между TDD и отсутствием тестов, которые я считаю очень продуктивными и в то же время достаточно безопасными. Это выглядит следующим образом:
- Реализуйте рабочий вертикальный фрагмент работы с учетом тестирования, но не пишите никаких тестов.
- Если в будущем (например, через месяц) этот срез нуждается в модификации
- Написать модульные тесты, интеграционные тесты, поведенческие тесты и т. Д., Которые гарантируют правильность работы
- Изменить код
- Если этот срез не нуждается в модификации,
- Ничего не делать
Просто переложив бремя написания тестов от написания кода до его модификации, я смог создать гораздо более работающий код. И когда я приступаю к написанию тестов, я пишу гораздо меньше их, но покрываю почти столько же (более высокий ROI).
Мне нравится этот процесс, но я обеспокоен тем, что он может плохо масштабироваться. Его успех зависит от того, как разработчики старательно пишут тесты, прежде чем что-то изменить. И это кажется довольно большим риском. Но TDD имеет тот же риск.
Итак, я иду в ад [BT] DD, или это обычная форма прагматического кодирования и тестирования?
Я хотел бы продолжать работать таким образом. Что я могу сделать, чтобы этот процесс работал в долгосрочной перспективе?
Заметка:Я являюсь единственным разработчиком своих проектов и отвечаю за все: сбор требований, проектирование, архитектуру, тестирование, развертывание и т. Д. Я подозреваю, что именно поэтому мой процесс работает.
If that slice doesn't need modification
. lizkeogh.com/2012/06/24/beyond-test-driven-development