Явне розділення вимог спростить проектування правильної системи.
Що стосується нефункціональних вимог (я віддаю перевагу атрибутам якості поняття / терміну - повинні надавати нові уявлення поза функціональними та не функціональними), ви більше переймаєтесь властивостями програмного забезпечення, а не функціональністю. Ось як система виконує якусь функцію, а не просто те, що робить система. Вимоги до якості суттєво впливають на архітектуру системи таким чином, що функціональні вимоги не мають, і з цієї причини до них слід ставитися по-різному.
Зберігання атрибутів якості окремим від функціональних вимог дозволяє аналізувати, уточнювати та визначати пріоритети різних вимог по-різному. Наприклад, атрибути якості зазвичай задаються за допомогою сценарію атрибуту якості, тоді як функціональні вимоги можуть мати форму розповідей, випадків використання, висловлювань або будь-якої іншої кількості форматів. Більшість систем, над якими я працював, мали менше десятка атрибутів якості та багато-багато більш функціональних вимог.
Я б фактично ввів ще один вид вимог - технічні обмеження . Знову-таки, чіткий поділ вимог на ці три відра дає вам підказки, як зробити правильні компроміси під час побудови системи. Функціональні вимоги часто досить оборотні, атрибути якості сильно впливатимуть на вашу архітектуру та обрані вами структури, технічні обмеження не підлягають обговоренню.
Якби це моя команда, я б сказав їм, що вимоги мають бути чітко анотованими за типом, щоб переконатися, що ми не пропустимо щось важливе в архітектурі. Подумайте про архітектурні драйвери, а не лише про функціональність.
Ентоні Латтанзе в архітектурних інтенсивних системах програмного забезпечення: Посібник практиків дає практичний огляд архітектурних драйверів і чому до них слід ставитися інакше, набагато вичерпніше, ніж моє резюме тут.