Шаблон NFR
Шаблон нефункциональных требований.
Шаблон NFR
NFR описывает не что система делает, а как хорошо она должна работать: производительность, доступность, безопасность, надежность, наблюдаемость, масштабируемость.
Паспорт документа
| Поле | Значение |
|---|---|
| Система / продукт | <название> |
| Функциональность | <название> |
| Автор | <ФИО> |
| Статус | Черновик / На согласовании / Согласовано |
| Версия | v1.0 |
Цель
Опишите, какие характеристики качества нужно обеспечить и почему они важны.
Производительность
| ID | Метрика | Требование | Условия измерения |
|---|---|---|---|
| PERF-001 | Время ответа API | p95 <= <N> мс, p99 <= <N> мс | При нагрузке <RPS> |
| PERF-002 | Пропускная способность | Не менее <N> запросов/сек | На <контур> |
| PERF-003 | Время фоновой обработки | Не более <N> минут | Для пачки <N> записей |
Нагрузка
| ID | Показатель | Значение |
|---|---|---|
| LOAD-001 | Средняя нагрузка | <N> запросов/сек |
| LOAD-002 | Пиковая нагрузка | <N> запросов/сек |
| LOAD-003 | Количество пользователей | <N> активных пользователей |
| LOAD-004 | Максимальный размер сообщения | <N> КБ/МБ |
Доступность
| ID | Метрика | Требование |
|---|---|---|
| AV-001 | Availability | <99.9% / 99.95% / 99.99%> |
| AV-002 | Допустимый простой | Не более <N> минут в месяц |
| AV-003 | Режим работы | 24/7 / 8x5 / рабочие дни |
Надежность
| ID | Требование | Описание |
|---|---|---|
| REL-001 | Таймауты | Timeout <N> мс для вызова <сервис> |
| REL-002 | Retry | Повторять временные ошибки <условия> |
| REL-003 | Circuit Breaker | Открывать цепь при <условие> |
| REL-004 | Graceful degradation | При сбое <сервис> использовать <поведение> |
| REL-005 | Идемпотентность | Повтор не должен создавать дубли |
RTO / RPO
| ID | Метрика | Значение | Комментарий |
|---|---|---|---|
| DR-001 | RTO | <N> минут/часов | Максимальное время восстановления |
| DR-002 | RPO | <N> минут/часов | Максимально допустимая потеря данных |
Масштабируемость
| ID | Требование | Описание |
|---|---|---|
| SC-001 | Горизонтальное масштабирование | Сервис масштабируется добавлением экземпляров |
| SC-002 | Stateless | Сервис не хранит состояние пользователя в памяти процесса |
| SC-003 | Партиционирование | Для Kafka использовать ключ <key> |
Безопасность
| ID | Требование | Описание |
|---|---|---|
| SEC-001 | Аутентификация | Доступ только для авторизованных пользователей/сервисов |
| SEC-002 | Авторизация | Проверять право <permission> |
| SEC-003 | TLS | Внешние вызовы выполняются по HTTPS/TLS |
| SEC-004 | Маскирование | ПДн/секреты не логируются в открытом виде |
| SEC-005 | Аудит | Критичные действия фиксируются в audit log |
Наблюдаемость
| ID | Требование | Описание |
|---|---|---|
| OBS-001 | Логирование | Логировать ключевые этапы операции с correlationId |
| OBS-002 | Метрики | Публиковать latency, error rate, throughput |
| OBS-003 | Трейсинг | Передавать traceId между сервисами |
| OBS-004 | Алерты | Алерт при росте ошибок выше <N>% |
Совместимость
| ID | Требование | Описание |
|---|---|---|
| COMP-001 | API compatibility | Изменение не ломает существующих клиентов |
| COMP-002 | Schema compatibility | Новые поля необязательные или имеют default |
Критерии приемки NFR
| ID | Критерий |
|---|---|
| AC-NFR-001 | Нагрузочный тест подтверждает p95 <= <N> мс при <RPS>. |
| AC-NFR-002 | При сбое зависимости пользователь получает контролируемую ошибку. |
| AC-NFR-003 | По correlationId можно найти все логи операции. |
| AC-NFR-004 | Секреты и ПДн не попадают в логи. |
Открытые вопросы
| ID | Вопрос | Кому адресован | Статус |
|---|---|---|---|
| Q-001 | <вопрос> | <роль / ФИО> | Открыт |
Критерии приемки документа
| ID | Критерий |
|---|---|
| AC-DOC-001 | Документ согласован с владельцем продукта / архитектором / разработкой, если применимо. |
| AC-DOC-002 | Все спорные места вынесены в открытые вопросы или зафиксированы как ограничения. |
| AC-DOC-003 | В документе нет неоднозначных формулировок вроде “быстро”, “удобно”, “корректно” без измеримого критерия. |