Долгое время работал, не задумываясь над классификацией требований, описывая просто «Требования», но группируя их в блоки в соответствии с пожеланием заказчика или по смыслу
В какой-то момент меня попросили описать нефункциональные требования, и это вызвало ступор, поскольку данное словосочетание на тот момент мне ничего не говорило. Чтобы у вас такого не происходило, разберем оба вида требований.
Функциональные требования.
С ними всё, вроде бы, просто. Как может быть ясно из самого названия, они нужны, чтобы описать, какие функции должны быть реализованы в рамках задания. Т.е. это то, что нужно пользователю, чтобы делала система. Здесь описываются все действия, которые должны быть выполнены, субъекты, которыми должны быть они выполнены, и результаты, которые должны быть получены. Т.е. нужно описать, кто, когда и что делает, и что получает.
Пример функциональных требований – сценарии использования (Use cases), в которых описывается всё, что должна выполнять система.
Нефункциональные требования
С ними немного сложнее, поскольку в здесь нужно описать те дополнительные пожелания, требования, правила и ограничения, которые предъявляются к системе внешней средой, но не являются функциональными.
Согласно К. Вигерсу, можно выделить 3 группы нефункциональных требований:
- Внешние интерфейсы
- Атрибуты качества
- Ограничения
Это могут быть требования к производительности, используемой операционной системе, надежности, квалификации персонала, энергоэффективности и прочим параметрам, не связанным напрямую с функциональностью системы.
Могут быть требования к качеству кода, к использованию тех или иных компонентов, программных средств, библиотек, лицензий.
Могут быть требования к тому, что должен пользователь видеть на экране, какие кнопки может нажимать, а какие нет, и так далее.
Думаю, разница между этими двумя терминами стала понятной