Нефункциональные требования
Функциональные требования описываются ввод и вывод системы. Иногда их можно представить в виде спецификации API-методов.
Нефункциональные требования включают приведенные ниже свойства.
Заявленные заказчиком требования почти всегда будут неполными, неверными, а иногда и избыточными. Без уточнения требований реализовать оптимальное решение (см. Простота в поддержке) не получится.
Любое обсуждение системного дизайна следует начинать с обсуждения и уточнения как функциональных, так и нефункциональных требований.
Нефункциональные требования обычно противопоставляются друг другу.
Масштабируемость
Scalability – способность системы регулировать использование аппаратных ресурсов (железа), чтобы экономически эффективно поддерживать нагрузку.
Доступность
Availability – процент времени, в рамках которого система может принимать запросы и возвращать желаемые ответы.
Производительность
Performance / время ожидания (latency) / P99 и пропускная способность (throughput) – время, необходимое для того, чтобы запрос пользователя к системе получил ответ.
Максимальная частота запросов, которую может обработать система – это ее пропускная способность (bandwidth). Также bandwidth — это объем информации, который способен пропустить канал за определенный временной промежуток.
Пропускная способность (throughput/bandwidth) – значение, обратное времени ожидания или задержки (latency).
Отказоустойчивость
Fault-tolerance – способность системы продолжать работу при отказе некоторых ее компонентов и предотвращение необратимого ущерба (например, потери данных) в случае падения.
Безопасность
Security – предотвращение неавторизованного доступа к системе.
Приватность
Privacy – контроль доступа к персональной информации (PII), которая может быть использована для идентификации пользователя.
Точность
Accuracy – данные системы необязательно должны быть идеально точными, поэтому часто уместно обсуждать компромисс между точностью и стоимостью или сложностью.
Согласованность
Consistency – совпадают ли данные во всех узлах/машинах.
Стоимость
Cost – расходы на разработку и поддержку системы, отдельных ее компонент и любых комплексных изменений.
Стоимость можно снизить за счет компромиссов с другими нефункциональными требованиями к системе.
Простота в поддержке
Все приведенные свойства связаны друг с другом и определяют насколько сложно построить систему и поддерживать ее в будущем:
Complexity – сложность
Maintainability – удобство в поддержке
Debuggability – удобство отладки
Testability – возможность тестирования
Последнее обновление