Разработка через тестирование (TDD)
Тестирование начинается с самого начала проекта
В рамках подхода «Разработка через тестирование» (TDD) проект строится на коротких, часто повторяющихся циклах разработки и юнит-тестировании. Сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти такой тест, и, наконец, проводится рефакторинг нового кода на соответствие принятым требованиям.
Подход TDD поощряет принятие наиболее простого дизайна продукта и служит дополнительным залогом уверенности заказчика в качестве конечного продукта. Экстремальное программирование и другие Agile-методологии опираются на постоянную сверку ПО с бизнес-требованиями – с самого начала разработки и на протяжении всего проекта.
Приёмочные тесты проходят на стороне заказчика. Это помогает ему быть уверенным в том, что он получит всю необходимую функциональность. Тестирование на ранней стадии сокращает время, необходимое для имплементации необходимых функций.
Множество тестов помогает уменьшить количество ошибок в коде. Кроме того, устранение дефектов на более раннем этапе разработки, препятствует появлению хронических, дорогостоящих ошибок, которые способны привести к длительной и утомительной отладке в дальнейшем.
Подход «Разработка через тестирование» не отменяет традиционного тестирования – напротив, он прокладывает надёжную дорогу к проведению эффективных модульных тестов. Другим серьёзным преимуществом TDD является то, что результативные тесты представляют собой примеры работающего ПО. Начало тестирования на ранней стадии и высокая частота тестов позволяют обнаружить и устранить дефекты, способные усложнить процесс разработки на поздних стадиях.
TDD не только предполагает проверку корректности, но и влияет на дизайн программы. Опираясь на тесты, разработчики могут быстрее представить, какая функциональность необходима пользователю. Таким образом, детали интерфейса появляются задолго до окончательной реализации решения.
Бытует мнение, что при подходе «Разработка через тестирование» для юнит-тестинга требуется больше кода, однако общее время, затрачиваемое на имплементацию, все же невелико. Недавнее исследование в этой области подтвердило, что несмотря на то, что использование TDD подразумевает написание большего количества тестов, в целом программисты работают более продуктивно.