Что такое TDD - все о test driven development
Разработка современного программного обеспечения, удовлетворяющего всем требованиям к функциональности и полноте программного кода, является задачей сложной и нетривиальной. Для её решения используется множество подходов к написанию и отладке программ, одним из которых является метод TDD. Рассмотрим особенности данной технологии и покажем преимущества и недостатки её использования перед традиционными методами разработки программ.
Разработка программ с помощью TDD подхода
Выясним, что такое TDD. Test driven development – это один из современных методов создания программ, при котором процесс разработки состоит из ряда повторяющихся циклов, при выполнении которых происходит постепенная отладка и улучшение программного кода отдельного блока или модуля. Отличительной особенностью данного подхода от традиционных методов программирования является предварительная разработка тестов ещё до создания программного кода программы.
На изображении снизу представлен процесс разработки программ методом TDD в виде блок-схемы.
Рассмотрим назначение каждого из блоков схемы.
Написание тестов
Тесты представляют собой программные единицы, реализующие проверку соответствия кода программы требованиям к функциональности, сформулированным в техническом задании (ТЗ). Тесты целесообразно создавать на основе ТЗ, созданного заказчиком проекта. В таком случае их проверка на выполнимость может осуществляться на стороне заказчика. Для их создания, а также автоматизации запуска, как правило, используются те же Фреймворки, что и для создания программ. Тесты пишутся для небольших, наиболее критичных участков программы, подверженных частым изменениям. Метод TDD изначально рассматривался, как наиболее подходящий для таких участков и, поэтому, получил название «экстремальное программирование».
Проверка выполнимости теста
Когда тест готов, сразу же выполняется его проверка на выполнимость. Очевидно, без готового блока программы тест никак не сможет пройти проверку. Это означает, что предварительно тест написан правильно. Если же тест проверку всё-таки проходит, то это может означать следующее: либо он неверен, либо данная функциональность уже реализована в программе и тогда он не имеет смысла. В таком случае тест отправляется на доработку, то есть, цикл замыкается.
Написание кода программы
Код обычно пишется для реализации лишь одной функциональности программы с помощью одного из известных Фреймворков, имеющего свои библиотеки. По сути, целью создания кода является в этом случае удовлетворение требований, установленных в тесте. Таким образом, минимизируется его размер и исключается ненужная избыточность.
Комплексная проверка
Комплексная проверка готового кода на соответствие требованиям тестов. На этом этапе осуществляется запуск тестов для готового участка кода программы и выявление «нестыковки» при их выполнении. В случае, если тесты успешно выполняются, код передаётся на следующий этап обработки – рефакторинг. Если нет, то код возвращается на доработку.
Оптимизация кода программы
Цель этого этапа – оптимизировать код изнутри, оставив его «внешнюю» функциональность. Сюда относится, в частности, уменьшение избыточности кода до допустимого уровня и другие операции, связанные с его оптимизацией. Этот процесс принято называть рефакторингом кода программы, без которого программа не будет оптимальной. После выполнения оптимизации, процесс повторяется снова, то есть, количество итераций будет таким, чтобы, в конечном счёте, обеспечить выход оптимизированного программного модуля с нужной функциональностью.
Преимущества использования TDD
Среди преимуществ использования метода TDD для создания программного обеспечения, можно выделить следующие:
• Использование тестов снижает количество ошибок в коде, а значит, уменьшается время его отладки и, в конечном счёте, время разработки программы.
• Ошибки выявляются на ранней стадии разработки, что практически исключает их появление на завершающей стадии проекта или же в готовом продукте. Это может значительно повлиять на стоимость разработки программы.
• Тесты позволяют производить рефакторинг кода, исключая при этом его повреждение.
• Применение методики способствует улучшению основных характеристик кода – модульности, гибкости и расширяемости.
• Применение автоматизированных тестов способствует покрытию всех путей исполнения кода, что обеспечивает его полноту и достаточность.
• Тесты могут стать хорошей альтернативой документации к программному обеспечению, которая, как известно, часто устаревает.
Недостатки использования метода TDD
Как и любые методы или подходы к программированию, рассматриваемый метод также имеет недостатки. Выделим некоторые из них:
• Ограниченность применения. Метод не подходит для использования в некоторых областях, например, в системах безопасности данных и для описания процессов. Это связано с присутствием некоторых дополнительных неуправляемых факторов, например, человеческого фактора для случая систем безопасности.
• Требуется дополнительное время на разработку и поддержку тестов. Поэтому перед применением методики необходимо обосновать и доказать целесообразность и эффективность её использования в конкретной ситуации.
• Увеличиваются накладные расходы на создание программ.