TDD — это легко!

TDD - это легко!

TDD (сокр. от англ. test-driven development — «разработка через тестирование») — это специальная методика разработки ПО, которая основывается на коротких циклах работы, где сначала создаётся тест, а потом функционал.

Преамбула

Недавно, я решил повысить свою компетентность в программировании и начал изучать различные методики разработки ПО. Одной из таким методик оказалась «TDD». Сначала я очень скептически относился к различным методикам, но тяга к новым знаниям перевесила и я начал обучение. Данная методика оказалась очень удобной для работы, потому что перед написанием нужного функционала требуется чётко представлять как он будет работать. Если чётко следовать данной методике, то проблем с рефакторингом не будет так, как рефакторинг проводится часто и над небольшими кусочками кода.

Для чего это нужно?

  • Повышения квалификации. Без глубоких знаний ООП и шаблонов проектирования создавать тесты будет довольно проблематично. Если вы планируете использовать TDD , то заодно улучшите знания в ООП, шаблонах проектирования и рефакторинге.
  • Дисциплина. TDD систематизирует вашу работу. Вы привыкаете к чёткой системе, делаете вашу быстрее и качественнее. Минимизируется количество багов и повышается читабельность кода.
  • Качество кода. Также немаловажными плюсами будет то, что код автоматически поддаётся юнит-тестированию, обладает инверсией контроля, а его поддержание будет дешевле и легче.

Алгоритм

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

Алгоритм

Комментарий от Olif:

В первом случае имеется в виду что изначально тест должен проваливаться (если мы говорим о чистом TDD , когда тесты пишутся до того, как пишется код) — т.к еще не существует тестируемого кода.

Если тест проходит, а кода нет — тест некорректен.

Ведь по сути, TDD — непрерывный процесс «Red-Code-Green»:

  1. написать тест, который проваливается
  2. написать код
  3. убедиться, что тест проходит
  4. повторить

Инструменты для тестирования

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

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

Для стандартных юнит-тестов (PHP-кода) подойдёт PHPUnit и SimpleTest. С помощью данных инструментов можно протестировать базовый функционал серверной стороны, написанной на PHP.

Для тестирования JavaScript существует множество фреймворков и плагинов, таких как qUnit и CodeCoverage

Для эмуляции действий человека хорошо подойдёт Selenium. С помощью данного инструмента можно протестировать например такие действия как нажатие кнопки или ссылки в браузере.

Visual Studio обладает встроенными инструментами для юнит-тестирования.

Книги

Книги — хороший метод изучить что-либо новое. Именно в книгах авторы стараются описать как можно больше и понятным языком. По этому я решил, что список из хороших книг по TDD не будет лишним:

  • Agile Web Application Development with Yii1.1 and PHP5 — книга на английском, ориентирована на изучающих Yii фреймворк, но очень хорошо и простым языком описывает использование TDD-методики.
  • К.Бек — Экстремальное программирование: разработка через тестирование — очень хорошая книга. Хорошо описывает методику доступным языком.
  • Jason E. Sweat — Guide to PHP Design Patterns — книга про шаблоны проектирования, но в ней используется и поясняется методика TDD.
  • V. Massol — JUnit in Action — Среда для модульного тестирования JUnit для Java. Книга хоть и ориентирована на Java-программистов, но будет полезна и для других программистов. Одна из лучших книг по TDD .
  • Rick Mugridge, Ward Cunningham — Fit for Developing Software: Framework for Integrated Tests — книга описывает работу с TDD методикой в команде.

Итоги

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

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

Послесловие

Этот пост был написан человеком с ником Mirgorod (удаленным/деактивирован пользователем habrahabr). Я его выцепил из кеша яндекса и дополним одним комментарием.