Как писать хорошие требования
Коротко Требование написано хорошо, когда все читатели понимают его одинаково — и именно так, как задумал автор. Шаблоны формулировок, несколько правил стиля и быстрые проверки на пробелы дают бо́льшую часть результата.
По материалам: К. Вигерс, Дж. Битти, «Разработка требований к программному обеспечению», 3-е изд., гл. 11, включая шаблон EARS Мейвина и соавторов и шаблон с точки зрения пользователя Александера и Стивенса.
На этой странице
Главные идеи#
Два шаблона формулировок#
- С точки зрения системы (шаблон EARS, Easy Approach to Requirements Syntax — «простой подход к синтаксису требований», предложен Мейвином (Mavin) и коллегами): [необязательное предусловие] [необязательный триггер] система должна [ожидаемая реакция].
- С точки зрения пользователя (Александер и Стивенс, Alexander, Stevens): [класс пользователей] должен иметь возможность [действие] [объект] [условия или время отклика]. Называйте класс пользователей («Механик»), а не просто «пользователь».
Правила стиля от Вигерса и Битти#
- Одно модальное слово. Во всём документе пишите «должен» (shall). Читатели, особенно говорящие на разных языках, не уловят оттенков между «следует», «может», «будет» и «обязан». Приоритет записывайте в отдельном атрибуте: приоритеты меняются от итерации к итерации, а формулировка должна оставаться стабильной.
- Активный залог. «Статус будет изменён» скрывает, кто его меняет — система или человек.
- Разделяйте составные требования. Слова «и», «или», «также» и «и/или» обычно означают, что в одном предложении спрятано несколько требований. Если двум частям нужны разные тесты, это разные требования. «Если не» и «кроме» прячут вторую ветку: запишите основное правило и исключение отдельно.
- Утвердительные формулировки. Переписывайте двойные отрицания. Функциональность, сознательно исключённая из границ, относится к ограничениям и исключениям в документе концепции и границ, а не к отрицательному требованию в спецификации требований к ПО (SRS). Удалённые требования помечайте статусом, а не стирайте.
- Точные границы диапазонов. При «до 5 дней» и «от 5 до 10 дней» неясно, куда относится пятый день. Пишите «включительно» или «более».
- Никаких терминов вида «A/B». «Отдел доставки/исполнения» может означать синонимы, два отдела, «и» или «или». Выберите одно значение.
- Таблицы для вариантов. Много похожих требований (скажем, для каждого сочетания формата и региона) понятнее в виде таблицы с суффиксами в ID. Явная ячейка «неприменимо» показывает сознательный пропуск.
Нужный уровень детализации#
Пишите подробнее, когда работа ведётся для внешнего клиента, разработка или тестирование отданы на аутсорсинг, команда распределена, тесты пишут по требованиям, нужны точные оценки или требуется трассировка (traceability). Меньше деталей допустимо при внутренней работе с плотно вовлечёнными заказчиками, при опытных разработчиках, при прямом прецеденте, например замене существующей системы, или при готовом пакетном решении.
Быстрая проверка — посчитать, сколько тестов нужно требованию. Несколько похожих тестов — уровень верный. Много разных тестов — несколько требований слиплись в одно. Пример из книги — одна строка о голосовых командах, за которой скрывается целая подсистема распознавания речи.
Размытые слова и как их исправить#
| Размытое слово или выражение | Как исправить |
|---|---|
| приемлемый, адекватный, разумный | Назовите критерий, по которому будете судить |
| быстрый, эффективный, мгновенный | Задайте измеримый предел времени |
| улучшенный, лучший | Укажите величину улучшения |
| дружественный, простой | Опишите наблюдаемые характеристики, например время выполнения задачи |
| и/или | Выберите «и» или «или» |
| между X и Y | Укажите, включены ли X и Y |
| включая, такой как, и т. д. | Дайте полный список или ссылку на него |
| обычно, в большинстве случаев | Опишите, что происходит в остальных случаях |
| при необходимости, по возможности | Объясните, кто решает и как |
Авторы делают и более общий вывод: наречия и оценочные прилагательные делают требование субъективным, а значит, неоднозначным, а значит, непроверяемым.
Быстрые проверки на скрытые пробелы#
- Симметрия. Сохранение предполагает загрузку, создание — удаление. Если одной половины пары нет, спросите почему.
- Сложная логика. Три условия «да/нет» дают восемь сочетаний. Перечислите их все в таблице решений.
- Исключения. У каждого «когда всё работает» должно быть своё «когда что-то не сработало».
- Абсурдное прочтение. Попробуйте найти нелепое, но буквальное прочтение. «Страница статуса должна обновляться с интервалом не менее 60 секунд» допускает обновление раз в год. Если абсурдное прочтение не противоречит тексту, перепишите требование.
Вигерс и Битти также предостерегают от паралича анализа: стремитесь к требованиям, которые достаточно хороши, чтобы двигаться дальше при приемлемом уровне риска.
Пример: до и после#
Слабые требования «Мастерской», вымышленной сети веломастерских:
| До | Проблема | После |
|---|---|---|
| Страницу бронирования следует сделать быстрой и удобной. | Две потребности, обе неизмеримы; «следует» | 95% поисков свободного времени должны показывать результаты не позже чем через 2 секунды. Новый клиент должен иметь возможность без посторонней помощи завершить бронирование не более чем за 3 минуты при юзабилити-тестировании. |
| Механики и администраторы могут обновлять и/или закрывать заказы. | Составное требование; «и/или»; неясно, кто что делает | Механик должен иметь возможность менять статус заказа с В работе на Готов к выдаче. Администратор должен иметь возможность закрыть заказ после того, как клиент оплатил ремонт. |
| Статус заказа будет изменён, когда придут запчасти. | Пассивный залог: кто действует? | Когда поставщик подтверждает доставку всех запчастей для заказа, система должна менять статус заказа с Ждёт запчасти на Готов к ремонту. |
| Ремонт дешевле 100 $ одобряется автоматически; ремонт дороже 100 $ требует согласия клиента. | Не определено, что делать, если ремонт стоит ровно 100 $ | Ремонт стоимостью 100 $ и меньше одобряется автоматически. Ремонт стоимостью больше 100 $ требует согласия клиента. |
| Система не должна отправлять уведомления, кроме случаев, когда клиент не отказался от них. | Двойное отрицание | Система должна отправлять уведомления о ремонте только тем клиентам, у которых уведомления включены. |
| Система должна сохранять бронь. | Нет случая сбоя | Добавить: если бронь не удаётся сохранить, система должна сохранить введённые данные и предложить клиенту повторить попытку. |
Чек-лист#
- Использован шаблон, назван класс пользователей.
- Одно модальное слово «должен»; приоритет записан отдельно.
- Активный залог: понятно, кто действует.
- Одно требование в одной формулировке; нет «и/или».
- Нет размытых слов без меры.
- Для границ диапазонов указано, включены они или нет.
- У каждого случая успеха есть случай сбоя.
- Текст не допускает абсурдного буквального прочтения.
- Детализация соответствует контексту (аутсорсинг, распределённая команда, регулируемая отрасль).
Источники и что почитать#
- K. Wiegers, J. Beatty. Software Requirements, 3rd ed. Microsoft Press, 2013. Рус. изд.: К. Вигерс, Дж. Битти. Разработка требований к программному обеспечению, 3-е изд. М.: Русская редакция; СПб.: БХВ-Петербург, 2014. Гл. 11 (принципы написания требований; шаблон EARS Мейвина и соавт.; шаблон с точки зрения пользователя Александера и Стивенса).