Разработка через тестирование — это как?
easy

Разработка через тестирование — это как?

Объясняем понятие TDD — Test Driven Development

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

Обычная разработка выглядит так: пишем код → тестируем → смотрим, что не прошло, и исправляем код. И так повторяем до тех пор, пока все тесты не сработают. Разработка через тестирование — это обратный подход. 

Коротко суть TDD (test-driven development)

Разработка через тестирование — это подход, при котором тесты создаются раньше кода. Вот так: 

  1. Перед тем как писать код, программисты задают для себя критерии рабочего кода. Например, какой-то модуль программы при запросе «Прачечная» должен гарантированно отвечать «Министерство культуры».
  2. Программист сразу пишет тест «Запрос такой-то — ожидать ответ такой-то».
  3. Так как требований и кейсов к модулю может быть много, тестов тоже получается целая батарея. 
  4. Дальше пишется код этого модуля.
  5. Как только код готов, включают батарею тестов и смотрят, чтобы они прошли корректно. 
  6. Так повторяется для каждого модуля, каждого маленького закутка, и при каждом обновлении программы прогоняются все тесты. 

Так как тестов много и они пишутся заранее, они сохраняются в проекте по мере разработки. И когда у тебя не один, а 10 модулей, то они тоже все обвешаны тестами. И если ты поменял что-то в 9-м модуле, что сломало 1-й модуль, ты об этом узнаешь благодаря тестам.

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

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

Плюсы и минусы TDD (Test-driven development)

Плюсы разработки через тестирование:

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

Минусы такого подхода:

  • Нужно больше времени на написание кода и тестов.
  • Для хороших тестов нужен большой опыт. Если программист не умеет писать нормальные тесты, то смысла в таком тестировании не сильно много.
  • Некоторые тесты сложно написать. Например, тестирование графического интерфейса автоматизировать сложно.

Разработка через поведение (BDD)

Кроме разработки через тестирование, есть разработка через поведение, или BDD (Behavior-driven development). Здесь мы смотрим не на ввод-вывод данных, а на поведение программы: как с ней взаимодействует пользователь и что она ему выдаёт.

В поведенческом подходе тесты пишут в формате Given-When-Then (Дано — Когда — Тогда), чтобы сразу привязать код к логике работы проекта. Пример теста BDD:

Scenario: Клиент должен быть авторизован, чтобы иметь доступ к личному кабинету

Given пользователь открывает личный кабинет

When пользователь не авторизован

Then отображаем отказ

Что дальше

В следующий раз мы познакомимся с BDD-сценариями поближе: посмотрим на инструменты и попробуем написать сценарий к какому-нибудь нашему проекту.

Корректор:

Ира Михеева

Художник:

Алексей Сухов

Вёрстка:

Кирилл Климентьев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Вам может быть интересно
easy
[anycomment]
Exit mobile version