Что такое TDD
TDD — это аббревиатура от test-driven development (разработка через тестирование). Она широко известна в IT-индустрии благодаря книге Кента Бека по программной инженерии “Экстремальное программирование”. В этом бестселлере представлен новый метод разработки программного обеспечения — экстремальное программирование.
Смысл названия “экстремальное программирование” кроется в главной идее этого метода — доведении обычной практики программирования до предела совершенства. Поэтому TDD — один из наиболее часто рекомендуемых методов.
На приведенном ниже изображении представлена классическая модель TDD:
Модель TDD отражает три этапа этого метода.
- Написание контрольного примера непрохождения теста для функции.
- Создание правильного кода для функции, чтобы тест был пройден.
- Рефакторинг кода.
Считается, что разработка через тестирование заключается в том, чтобы начать с создания тестов, а лишь затем переходить к написанию кода. Это неправильное понимание. Сперва тест, потом код — это скорее Test-First Development (предварительная разработка тестов), а не Test-Driven Development (разработка через тестирование).
Отличие второго понятия от первого заключается в “драйвере” или, говоря более конкретно, в одном шаге — рефакторинге!
При обычной разработке многие, пройдя тест, считают, что функция закончена. На самом деле это игнорирование кода с душком, то есть проблем, которые могут сказаться на следующем этапе.
Рефакторинг позволяет оптимизировать код, устраняя проблемы в его структуре. Это работа на основе тестов, которая служит программисту “драйвером” к написанию лучшего кода.
Из вышесказанного следует, что тестирование и рефакторинг дополняют друг друга. Без тестирования рефакторинг будет выполнен программистом “на свой страх и риск”. А без рефакторинга беспорядок в коде начнет постепенно увеличиваться, и тесты будут ставиться все сложнее и сложнее.
Как эффективно выполнять TDD
Чтобы добиться правильного выполнения TDD, стоит поучиться этому у профессионалов.
Поскольку TDD приобрел большую популярность, Кент Бек посвятил этому методу отдельную книгу под названием “Разработка через тестирование”. Основную ее идею можно выразить так — декомпозиция по заданиям.
Каждое большое задание Кент Бек разбивает на несколько мелких задач и записывает их в порядке очередности выполнения. Затем начинает создавать тесты, писать код и заниматься рефакторингом. После завершения каждого небольшого цикла выполненная задача вычеркивается из списка, и Бек переходит к следующей.
Сталкиваясь в процессе выполнения небольших задач с какой-либо новой проблемой, он заносит ее в контрольный список, чтобы не упустить из виду. Затем возвращается к выполнению задач. Справившись со всеми намеченными задачами, будет решать проблему.
Кажется, что все просто, однако большинство разработчиков так не поступают. Почему?
Причина в том, что Кент Бек разбивает задания на достаточно мелкие задачи, чтобы гарантированно представить код в наилучшем виде после выполнения каждого задания.
К отдельной задаче можно отнести обновление версии зависимости, изменение имени переменной — то, над чем обычный разработчик не станет особо заморачиваться. Главные преимущества тактики Кента Бека заключаются в том, что она позволяет создавать адекватные тесты с гарантированной возможностью остановиться в любой момент.
Так в чем же польза?
Декомпозиция по заданиям заставляет сосредоточиться на ограниченном объеме контента, чтобы более тщательно продумать его детали. Для большинства людей величина задания, с которым они способны справиться, ограничена. Поэтому они не могут решать масштабную проблему, не разбив ее на составные части.
А любой декомпозированный и измененный код не будет слишком большим, что позволит держать процесс разработки под должным контролем.
TDD — инструмент профессионалов
Итак, метод TDD внес новые идеи в разработку программного обеспечения.
Разбивайте большие задания на более мелкие и каждый раз повторяйте три этапа: написание тестов, прохождение тестов и рефакторинг.
Такая практика не только позволит улучшить качество кода, но и повысит производительность.
Читайте также:
- TDD и обработка исключений в ASP.NET Core с помощью xUnit
- Визуализация стратегии автоматизированного тестирования
- Мутационное тестирование: создай мутанта и прокачай тест
Читайте нас в Telegram, VK и Яндекс.Дзен
Перевод статьи Zachary Lee: TDD Can Make You a Better Programmer