Явное разделение требований облегчит разработку правильной системы.
При нефункциональных требованиях (я предпочитаю атрибуты концепции / термина качества - они должны обеспечивать новое понимание помимо функциональных, а не функциональных), вы больше заботитесь о свойствах программного обеспечения, чем о функциональности. То есть , как система выполняет определенную функцию, а не просто то , что система делает. Требования к качеству оказывают существенное влияние на архитектуру системы так, как этого не требуют функциональные требования, и по этой причине к ним следует относиться по-разному.
Хранение атрибутов качества отдельно от функциональных требований позволяет вам по-разному анализировать, определять и расставлять приоритеты для различных видов требований. Например, атрибуты качества обычно указываются с использованием сценария атрибутов качества, в то время как функциональные требования могут принимать форму историй, сценариев использования, заявлений или любого другого числа форматов. Большинство систем, над которыми я работал, имели менее дюжины качественных атрибутов и еще много функциональных требований.
Я бы на самом деле ввел другой вид требований - технические ограничения . Опять же, явное разделение требований на эти три группы дает вам подсказки о том, как сделать правильный компромисс при построении системы. Функциональные требования часто весьма обговорены, атрибуты качества будут сильно влиять на вашу архитектуру и выбранные вами структуры, технические ограничения не подлежат обсуждению.
Если бы это была моя команда, я бы сказал, что требования должны быть четко обозначены по типам, чтобы мы не пропустили что-то важное в архитектуре. Подумайте об архитектурных драйверах, а не только о функциональности.
Энтони Латтанце из « Архитектурных программных систем с интенсивным использованием программного обеспечения: руководство для практиков» дает практический обзор архитектурных драйверов и причин, по которым с ними следует обращаться по-разному, гораздо более подробно, чем мое резюме