TDD: начало

30 авг. 2010 г. | | |

Что такое TDD?
Это способ управления страхом в процессе программирования.
Да, мне гораздо спокойней, когда работоспособность моего кода подтверждена и подтверждается постоянно тестами. В любой момент времени я могу запустить тесты и проверить, все ли работает. Особенно актуально это, когда изменения вносятся в код, написанный пару-тройку месяцев назад, а то и ранее. А если этот код еще и чужой, то шансы поломать что-то возрастают многократно. Имея хороший набор тестов можно безбоязненно и безболезненно вносить изменения в код. Говоря "хороший набор тестов" я намеренно не указываю число в процентах, потому что считаю test coverage весьма относительной метрикой. Стопроцентное покрытие - исключительно утопия. И та еще тема для холивара :) Тестов должно быть столько, сколько требуется для уверенности в вашем коде и спокойного сна, если представить, что каждый ваш проект - система обеспечения АЭС ;)
К чему стремится TDD?
К чистому коду, который работает.
Ключевое слово здесь - чистый. Код, который работает, может написать каждый. И зачастую такой код - выходец из семейства "говнокодовых". Думаю, такой код в начале тернистого пути совершенствования навыков программирования писали все. Но есть несколько вещей, которые заставляют двигаться от кода, который работает, в сторону "чистого кода, который работает" - начинаются сложности при поддержке кода, внесении изменений, расширении системы... признаки того, что все катится в сторону антипаттерна Big ball of mud :(
Каковы правила TDD?
Красный - зеленый - рефакторинг

Эти правила просты, как дважды два:
1) Красный - пишем тест. Не факт, что он заработает сразу (или даже скомпилируется). Напротив, это тревожный знак. Ведь тесты мы пишем всегда перед написанием кода. «Тест, написанный после кода, ничего не стоит и является только обузой.»
2) Зеленый - заставляем тест работать, создавая при этом минимум кода. О чистоте и порядке на этом этапе задумываться еще рано. Тест должен работать. И работать быстро. Вот что главное на данном этапе. Минимум усилий. Ничего лишнего. Тут мы создаем код, который работает.
3) Рефакторинг - наводим порядок. Убираем дублирование и остальные запашки. После каждого действия запускаем тесты, проверить, ничего ли не поломалось. Время создавать чистый код, который работает.
И кто это все придумал?
Тестирование имеет довольно длинную историю, уходя вглубь веков. Первые упоминания о тестировании можно найти в 1975 (в "Мифическом человеко-месяце" Брукса). А сама методология Test-Driven Development и ее основные принципы были сформулированы Кент Беком в книге "Extrime Programming Explained", увидевшей свет в 1999 году. С тех пор и понеслось :)
Что нужно, чтобы начать?
Нужно немного - желание, храбрость, терпение и фреймворк для тестирования под платформу, на которой вы программируете. Или можете сами его написать, как это делает Кент Бек. Заодно и попрактикуетесь:)
А еще?
А еще можно (нужно) искать тут:
Кент Бек. "Экстремальное программирование: разработка через тестирование"
Roy Osherove Understanding TDD (видео, en)
Джерард Мессарош «Шаблоны тестирования xUNIT»
Джошуа Кериевски. "Рефакторинг с использованием шаблонов"
М. Фаулер "Рефакторинг. Улучшение существующего кода."

0 коммент.:

Отправить комментарий