Проверяемая спецификация поведения

Что это такое

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

Почему это важно

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

Ключевые идеи

Три части: триггер, условие, отклик

Напишите, что вызывает поведение, при каких обстоятельствах и что должно произойти: расплывчатые уточнения превращаются в числа.

Непроверяемо  Система должна надёжно обрабатывать большие загрузки.
Проверяемо    Когда пользователь загружает файл больше 100 МБ,
              система возобновляет загрузку после обрыва сети с
              последнего подтверждённого фрагмента, без действий
              пользователя.

Вторую версию можно проверить тремя способами: порог, возобновление и отсутствие действий пользователя.

Замените слова-обманки

Каждое из них скрывает решение — быстро, надёжно, удобно, эффективно, безопасно, уместно, несколько, разумно, при необходимости, — поэтому дайте число или удалите предложение.

быстро           -> отвечает за 300 мс на 95-м процентиле
несколько        -> три или больше, названы явно
безопасно        -> шифрует при хранении AES-256, при передаче TLS 1.2+
при необходимости -> укажите условие, при котором это происходит

Используйте одну модальность осознанно

«Должен» — обязательно, «следует» — предпочтение, которое можно оспаривать, «может» — необязательно. Однако если применять их взаимозаменяемо, теряется способность отличить юридическую обязанность от приятного дополнения.

Пишите поведение при сбое, а не только счастливый путь

Что происходит, когда система недоступна, вход некорректен, у пользователя нет прав или операция выполнена частично, — именно здесь и лежат настоящие требования.

Одно требование на предложение

Предложение с «и» — обычно два требования с разными приоритетами, и как одно его нельзя ни трассировать, ни проверить.

Практика

Перепишите пять плохих требований

Возьмите пять утверждений из настоящего документа и перепишите каждое в триггер, условие и отклик.

Готово, когда: каждая переписка называет число или явное условие, и вы можете написать из неё тест-кейс, не спрашивая автора ни о чём.

Превратите одно требование в критерии приёмки

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

Готово, когда: кто-то другой может выполнить проверки на работающей системе и прийти к тому же выводу, что и вы.

Частые ошибки

  • Оставлены слова-обманки — каждое скрывает непринятое решение; исправить: дайте число или удалите предложение.
  • Требование, которое не может не выполняться — оно ничего не говорит и не проверяется; исправить: укажите условие, при котором оно ложно.
  • Несколько требований в одном предложении — приоритеты и трассировки становятся невозможны; исправить: одно требование на предложение.
  • Только счастливый путь — поведение при ошибке выдумывают во время разработки; исправить: опишите случаи недоступности, неверных данных, отсутствия прав и частичного выполнения.
  • Модальности используются взаимозаменяемо — юридическая обязанность читается как предпочтение; исправить: определите «должен», «следует» и «может» и держитесь их.

Что читать дальше