Инженерия требований

Классификация требований и категории нефункциональных требований

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

По материалам: К. Вигерс, Дж. Битти, «Разработка требований к программному обеспечению», 3-е изд., гл. 11; Г. Косцевич, скетчноут «Requirements»; Ю. А. Маглинец, «Анализ требований к информационным системам», лекция 2.

На этой странице

Главные идеи#

Модель Вигерса в общих чертах#

В модели Карла Вигерса бизнес-правила влияют на бизнес-требования (их фиксируют в документе концепции и границ), из бизнес-требований вытекают пользовательские требования, а из них — функциональные требования. Параллельно идут атрибуты качества, требования к внешним интерфейсам и ограничения. Функциональные и нефункциональные требования сходятся в спецификации требований к ПО (SRS). Руководство BABOK® делит требования иначе (бизнес-требования, требования заинтересованных сторон, требования к решению, переходные требования), но две схемы достаточно хорошо соотносятся друг с другом. Уровни подробно разобраны на странице Уровни и типы требований.

Четыре практические категории нефункциональных требований#

Автор скетчноута «Requirements» Г. Косцевич ставит модель Вигерса рядом со схемой BABOK и группирует нефункциональные требования (non-functional requirements, NFR) в четыре корзины. Используйте их как подсказки при выявлении:

Категория О чём спросить
Ограничения Физические ограничения, законы и нормативные акты, бизнес-правила, работа на нескольких площадках
Производительность Как часто используются функции, объёмы данных, точность данных, как долго хранятся данные, как быстро система должна реагировать, как быстро должны обновляться данные
Пользовательский опыт Физический доступ, сколько требуется взаимодействия, обучаемость, соответствие культуре, простота использования
Изменчивость Сопровождаемость, переносимость, доступность, масштабируемость, ожидаемая скорость изменений, надёжность

Семь характеристик отдельного требования#

Вигерс и Битти (гл. 11) перечисляют семь характеристик и указывают, кто лучше всего может оценить каждую:

  • Полнота — требование содержит всю информацию, нужную для реализации. Известные пробелы явно помечайте как TBD (подлежит определению).
  • Корректность — требование точно описывает нужную возможность и не противоречит родительскому требованию. Оценивают это представители пользователей, а не аналитик.
  • Осуществимость — требование можно реализовать в известных технических, бюджетных и временных рамках. Оценивают это разработчики.
  • Необходимость — требование прослеживается до источника, обладающего полномочиями, и до бизнес-цели. Вы можете ответить на вопрос «зачем это здесь?».
  • Приоритизированность — у требования есть приоритет реализации.
  • Однозначность — все читатели понимают требование одинаково. Авторы описывают два вида неоднозначности: автор сам видит больше одного прочтения или, что опаснее, каждый читатель видит своё прочтение, которое кажется ему очевидным.
  • Проверяемость — тестировщик может составить тест, который покажет, что требование выполнено. Без этого вопрос «готово ли?» становится делом мнения.

Четыре характеристики набора требований#

  • Полнота — ничего не упущено. Абсолютная полнота на практике недостижима, а любая спецификация с TBD формально неполна.
  • Согласованность — нет конфликтов с требованиями того же или более высокого уровня. Записывайте автора каждого требования, чтобы при конфликте знать, к кому обратиться.
  • Модифицируемость — у каждого требования уникальный ID, и оно записано один раз. Текст, продублированный в нескольких местах, рано или поздно разойдётся.
  • Трассируемость — каждое требование можно связать назад с его источником и вперёд с дизайном, кодом и тестами. Записывать каждую связь не обязательно, но формат должен это позволять: короткие формулировки с уникальными номерами, а не длинные повествовательные абзацы.

Другие версии списка#

В скетчноуте «Requirements» дан более короткий список из шести характеристик: ясность, полнота, применимость, приоритизированность, реализуемость (подтверждают разработчики) и тестируемость (подтверждают тестировщики); проверяют их с помощью взаимных проверок (peer review) и сквозных просмотров (walkthrough). Курс лекций Маглинца, опирающийся на работы IEEE и Вигерса, перечисляет двенадцать свойств. Он добавляет числовую метрику для каждого нефункционального требования, упорядочивание и по важности, и по стабильности, разделение на необходимые и просто полезные требования, а также согласованность как между уровнями, так и внутри уровня. Маглинец использует и треугольник компромиссов «ресурсы — время — границы»: если меняется одна сторона, должны подстроиться и другие; это ещё одна причина формулировать каждое требование только один раз.

Откуда берутся требования#

Требования приходят от людей (заинтересованных сторон) и из документов (существующих требований, стандартов). Проверяйте, что информация достоверна и актуальна, при необходимости привлекайте эксперта в предметной области и всегда указывайте заинтересованную сторону как источник требования. Не придумывайте требования сами.

Как применять#

  1. Прогоняйте каждое новое требование через семь характеристик, прежде чем отдавать его на ревью.
  2. Закрепите каждую характеристику за подходящим проверяющим: пользователи — корректность, разработчики — осуществимость, тестировщики — проверяемость.
  3. При каждой фиксации базовой версии проверяйте набор: ищите дубликаты, TBD и требования без источника или автора.
  4. Используйте четыре категории нефункциональных требований как список подсказок для интервью, чтобы нефункциональные потребности не откладывались на самый конец.

Пример#

Черновое требование в «Мастерской», вымышленной сети веломастерских: «Система должна быстро уведомлять клиентов, когда их велосипед готов».

  • Однозначность / проверяемость: не выполнено. У «быстро» нет меры, а «уведомлять» не называет канал.
  • Полнота: не выполнено. Что считается состоянием «готов»?
  • Необходимость: выполнено. Требование трассируется к цели — меньше звонков на стойку приёма с вопросами о статусе.
  • Приоритизированность: отсутствует.

Переписанное требование: «FR-NOT-03. Когда механик переводит ремонтный заказ в статус Готов к выдаче, система должна в течение 5 минут отправить клиенту SMS и письмо по электронной почте. Приоритет: высокий. Источник: совещание управляющих мастерскими по итогам ревью».

Чек-лист#

  • У каждого требования есть уникальный ID, автор и источник.
  • Нет расплывчатых слов без меры («быстро», «удобный для пользователя»).
  • У каждого нефункционального требования есть единица измерения и целевое значение.
  • Каждое требование можно протестировать, и вы можете сказать как.
  • У каждого требования есть приоритет.
  • Ни одно требование не записано в двух местах.
  • Открытые вопросы помечены TBD, и у каждого есть ответственный.
  • Обсуждены ограничения, производительность, пользовательский опыт и изменчивость.

Источники и что почитать#

  • K. Wiegers, J. Beatty. Software Requirements, 3rd ed. Microsoft Press, 2013. Рус. изд.: К. Вигерс, Дж. Битти. Разработка требований к программному обеспечению, 3-е изд. М.: Русская редакция; СПб.: БХВ-Петербург, 2014. Гл. 11.
  • Г. Косцевич. Requirements (скетчноут).
  • Ю. А. Маглинец. Анализ требований к информационным системам: конспект лекций. Красноярск: Сибирский федеральный университет, 2007. Лекция 2.
  • IIBA. A Guide to the Business Analysis Body of Knowledge (BABOK® Guide), version 3. International Institute of Business Analysis, 2015. Рус. изд.: Руководство к своду знаний по бизнес-анализу (Руководство BABOK®), версия 3.0.