Что такое TDD

TDD  —  это аббревиатура от test-driven development (разработка через тестирование). Она широко известна в IT-индустрии благодаря книге Кента Бека по программной инженерии “Экстремальное программирование”. В этом бестселлере представлен новый метод разработки программного обеспечения  —  экстремальное программирование.

Смысл названия “экстремальное программирование” кроется в главной идее этого метода  —  доведении обычной практики программирования до предела совершенства. Поэтому TDD  —  один из наиболее часто рекомендуемых методов.

На приведенном ниже изображении представлена классическая модель TDD:

Модель TDD отражает три этапа этого метода.

  1. Написание контрольного примера непрохождения теста для функции.
  2. Создание правильного кода для функции, чтобы тест был пройден.
  3. Рефакторинг кода.

Считается, что разработка через тестирование заключается в том, чтобы начать с создания тестов, а лишь затем переходить к написанию кода. Это неправильное понимание. Сперва тест, потом код  —  это скорее Test-First Development (предварительная разработка тестов), а не Test-Driven Development (разработка через тестирование).

Отличие второго понятия от первого заключается в “драйвере” или, говоря более конкретно, в одном шаге  —  рефакторинге!

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

Рефакторинг позволяет оптимизировать код, устраняя проблемы в его структуре. Это работа на основе тестов, которая служит программисту “драйвером” к написанию лучшего кода.

Из вышесказанного следует, что тестирование и рефакторинг дополняют друг друга. Без тестирования рефакторинг будет выполнен программистом “на свой страх и риск”. А без рефакторинга беспорядок в коде начнет постепенно увеличиваться, и тесты будут ставиться все сложнее и сложнее.

Как эффективно выполнять TDD

Чтобы добиться правильного выполнения TDD, стоит поучиться этому у профессионалов.

Поскольку TDD приобрел большую популярность, Кент Бек посвятил этому методу отдельную книгу под названием “Разработка через тестирование”. Основную ее идею можно выразить так  —  декомпозиция по заданиям.

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

Сталкиваясь в процессе выполнения небольших задач с какой-либо новой проблемой, он заносит ее в контрольный список, чтобы не упустить из виду. Затем возвращается к выполнению задач. Справившись со всеми намеченными задачами, будет решать проблему.

Кажется, что все просто, однако большинство разработчиков так не поступают. Почему?

Причина в том, что Кент Бек разбивает задания на достаточно мелкие задачи, чтобы гарантированно представить код в наилучшем виде после выполнения каждого задания.

К отдельной задаче можно отнести обновление версии зависимости, изменение имени переменной  —  то, над чем обычный разработчик не станет особо заморачиваться. Главные преимущества тактики Кента Бека заключаются в том, что она позволяет создавать адекватные тесты с гарантированной возможностью остановиться в любой момент.

Так в чем же польза?

Декомпозиция по заданиям заставляет сосредоточиться на ограниченном объеме контента, чтобы более тщательно продумать его детали. Для большинства людей величина задания, с которым они способны справиться, ограничена. Поэтому они не могут решать масштабную проблему, не разбив ее на составные части.

А любой декомпозированный и измененный код не будет слишком большим, что позволит держать процесс разработки под должным контролем.

TDD — инструмент профессионалов

Итак, метод TDD внес новые идеи в разработку программного обеспечения.

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

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

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен


Перевод статьи Zachary Lee: TDD Can Make You a Better Programmer

Предыдущая статьяКак хранить и кодировать видео посредством Ruby on Rails, Lambda и S3
Следующая статьяПакетная обработка 22 ГБ данных о транзакциях с помощью Pandas