Проверяемая спецификация поведения
Что это такое
Проверяемое требование описывает наблюдаемое поведение: вход или событие, условие, при котором оно действует, и требуемый отклик. Если два компетентных человека не могут договориться, удовлетворяет ли работающая система этому требованию, значит требования ещё нет — есть пожелание с приделанным числом.
Почему это важно
Неоднозначность ловят не на ревью, а в продакшене, и ловит её пользователь: стоимость растёт на каждом этапе — час, чтобы исправить предложение, день — чтобы исправить дизайн, релиз — чтобы исправить код и построенные на нём ожидания. Проверяемая запись вдобавок делает критерии приёмки переиспользуемыми: то же предложение становится тест-кейсом, поэтому спецификация и проверка уже не могут разойтись.
Ключевые идеи
Три части: триггер, условие, отклик
Напишите, что вызывает поведение, при каких обстоятельствах и что должно произойти: расплывчатые уточнения превращаются в числа.
Непроверяемо Система должна надёжно обрабатывать большие загрузки.
Проверяемо Когда пользователь загружает файл больше 100 МБ,
система возобновляет загрузку после обрыва сети с
последнего подтверждённого фрагмента, без действий
пользователя.
Вторую версию можно проверить тремя способами: порог, возобновление и отсутствие действий пользователя.
Замените слова-обманки
Каждое из них скрывает решение — быстро, надёжно, удобно, эффективно, безопасно, уместно, несколько, разумно, при необходимости, — поэтому дайте число или удалите предложение.
быстро -> отвечает за 300 мс на 95-м процентиле
несколько -> три или больше, названы явно
безопасно -> шифрует при хранении AES-256, при передаче TLS 1.2+
при необходимости -> укажите условие, при котором это происходит
Используйте одну модальность осознанно
«Должен» — обязательно, «следует» — предпочтение, которое можно оспаривать, «может» — необязательно. Однако если применять их взаимозаменяемо, теряется способность отличить юридическую обязанность от приятного дополнения.
Пишите поведение при сбое, а не только счастливый путь
Что происходит, когда система недоступна, вход некорректен, у пользователя нет прав или операция выполнена частично, — именно здесь и лежат настоящие требования.
Одно требование на предложение
Предложение с «и» — обычно два требования с разными приоритетами, и как одно его нельзя ни трассировать, ни проверить.
Практика
Перепишите пять плохих требований
Возьмите пять утверждений из настоящего документа и перепишите каждое в триггер, условие и отклик.
Готово, когда: каждая переписка называет число или явное условие, и вы можете написать из неё тест-кейс, не спрашивая автора ни о чём.
Превратите одно требование в критерии приёмки
Возьмите одно требование и напишите проверки, которые доказали бы его выполнение, включая как минимум два случая сбоя.
Готово, когда: кто-то другой может выполнить проверки на работающей системе и прийти к тому же выводу, что и вы.
Частые ошибки
- Оставлены слова-обманки — каждое скрывает непринятое решение; исправить: дайте число или удалите предложение.
- Требование, которое не может не выполняться — оно ничего не говорит и не проверяется; исправить: укажите условие, при котором оно ложно.
- Несколько требований в одном предложении — приоритеты и трассировки становятся невозможны; исправить: одно требование на предложение.
- Только счастливый путь — поведение при ошибке выдумывают во время разработки; исправить: опишите случаи недоступности, неверных данных, отсутствия прав и частичного выполнения.
- Модальности используются взаимозаменяемо — юридическая обязанность читается как предпочтение; исправить: определите «должен», «следует» и «может» и держитесь их.
Что читать дальше
- Инженерия требований (04-product-process/05-requirements-engineering) — трек, который открывает эта глава.
- Ревью и трассировка требований (04-product-process/05-requirements-engineering/02-reviewing-and-tracing-requirements) — поймать то, что упустила переписка.
- Приёмочное тестирование пользователем (04-product-process/16-user-acceptance-testing) — где эти утверждения проверяют на построенной системе.
- Пользовательская история (04-product-process/12-user-story) — более лёгкая форма, когда полная спецификация не оправдана.