nfr-intro

Нефункциональные требования: Введение

📚 18 вопросовПройти тест →
Лекция

Нефункциональные требования: Введение

nfr-intro

Нефункциональные требования: Введение

Введение: доставка еды и ожидания пользователя 🍕

Пользователь оценивает не только наличие функции, но и качество её работы: быстро ли открывается страница, безопасно ли платить, стабильно ли работает сервис.
Функциональные требования отвечают на вопрос «что система делает». Нефункциональные требования отвечают на вопрос «как хорошо она это делает».
Вывод: NFR переводят ожидания качества в проверяемые критерии.

Проблема → решение

Проблема: когда NFR не зафиксированы, команда спорит формулировками «должно быть быстро/надёжно/безопасно», но не может это проверить.
Решение: описывать качество через метрику, условия и порог, а затем проверять через тесты и мониторинг.
Вывод: без NFR продукт может работать функционально, но проваливаться по качеству.

Чем помогает и как работает

NFR помогают команде принимать технические решения осознанно:
  • заранее понимать требования к инфраструктуре;
  • формировать реалистичные критерии приёмки;
  • снижать риски деградации на проде.
Как это работает:
  1. Определяем критичные атрибуты качества (скорость, доступность, безопасность, удобство).
  2. Формулируем их как измеримые требования.
  3. Согласовываем с бизнесом, QA и разработкой.
  4. Встраиваем проверку в тестирование и мониторинг.
Вывод: NFR связывают ожидания бизнеса и техническую реализацию.

Ключевые термины (простыми словами)

  • NFR (Non-Functional Requirement) — требование к качеству работы системы.
  • Quality Attribute — атрибут качества (performance, reliability, security и т.д.).
  • Latency — задержка ответа (время до результата).
  • Throughput — объём работы системы за единицу времени (например, rps).
  • Availability — доля времени, когда сервис доступен.
  • Reliability — устойчивость к сбоям и способность восстанавливаться.
  • Scalability — способность работать при росте нагрузки.
  • SLI / SLO / SLA — показатель, цель и внешнее обещание уровня сервиса.
Вывод: общий словарь по качеству снижает конфликт и недопонимание в команде.

1. Категории NFR

Назначение: разложить требования по группам, чтобы ничего не упустить.
Типовые категории:
  • Performance;
  • Availability и Reliability;
  • Security;
  • Usability;
  • Scalability;
  • Maintainability.
🔎 Как это происходит на практике:
  1. На этапе discovery команда собирает риски по качеству.
  2. Для каждой категории фиксирует 1-3 обязательных требования.
  3. Проверяет, что у каждой формулировки есть способ измерения.
Когда использовать: при сборе и уточнении требований перед реализацией.
Вывод: категории NFR дают структуру и предотвращают «слепые зоны».

2. Performance: скорость и пропускная способность

Назначение: гарантировать приемлемую скорость работы под нагрузкой.
Пример формулировки:
Каталог открывается <= 2 сек (p95) при 1000 одновременных пользователях.
🔎 Как это происходит на практике:
  1. Определяется ключевой пользовательский сценарий.
  2. Выбираются метрики (latency p95, error rate, throughput).
  3. Проводится нагрузочное тестирование и сравнение с порогом.
Когда использовать: когда есть критичные пользовательские сценарии и ожидаемая нагрузка.
Вывод: производительность должна описываться цифрами, а не словами «быстро».

3. Availability и Reliability: стабильность сервиса

Назначение: зафиксировать, сколько времени система должна быть доступна и как быстро восстанавливаться.
Пример формулировки:
Доступность сервиса >= 99.9% в месяц, время восстановления после сбоя <= 2 часа.
🔎 Как это происходит на практике:
  1. Согласовывается допустимый простой.
  2. Определяется RTO/RPO (если применимо).
  3. Настраивается мониторинг аптайма и инцидентные процедуры.
Когда использовать: для систем, где простой влияет на деньги, обучение или репутацию.
Вывод: доступность и надёжность — это договорённости с конкретными порогами.

4. Security: защита данных и доступа

Назначение: снизить риск утечки данных и злоупотребления доступом.
Пример формулировки:
Все запросы проходят по TLS 1.2+, пароли хранятся с Argon2, доступ к admin-функциям по ролям.
🔎 Как это происходит на практике:
  1. Определяются критичные данные и точки риска.
  2. Фиксируются технические требования защиты.
  3. Проводятся security-проверки и регулярные ревью.
Когда использовать: всегда, если есть авторизация, персональные данные или платежи.
Вывод: безопасность должна быть частью требований с первого этапа, а не post-factum.

5. Usability: удобство и понятность

Назначение: сделать сценарии пользователя короткими и предсказуемыми.
Пример формулировки:
Запись на курс занимает не более 3 кликов, ошибки формы показываются сразу у поля.
🔎 Как это происходит на практике:
  1. Выбираются критичные пользовательские пути.
  2. Фиксируются критерии по шагам, времени и ошибкам.
  3. Проверяется через UX-тесты и аналитику поведения.
Когда использовать: когда важны конверсия, удержание и снижение пользовательских ошибок.
Вывод: usability-требования уменьшают потери на «непонятном» интерфейсе.

6. Scalability и Maintainability

Назначение: подготовить систему к росту нагрузки и изменениям.
Пример формулировки:
Система выдерживает рост до 10 000 активных пользователей с деградацией p95 не более 20%.
🔎 Как это происходит на практике:
  1. Прогнозируется рост аудитории и пиковые сценарии.
  2. Закладываются технические ограничения и архитектурные решения.
  3. Команда фиксирует стандарты логирования, мониторинга и поддержки.
Когда использовать: при планировании roadmap, масштабирования и долгой поддержки продукта.
Вывод: масштабируемость и сопровождаемость защищают продукт от технического долга.

7. Формула хорошего NFR

Шаблон: [Система/сценарий] должна [метрика] при [условии] не хуже [порога].
Пример:
API оплаты отвечает <= 300 мс (p95) при 200 rps, доля ошибок < 1%.
🔎 Как это происходит на практике:
  1. Уточняется сценарий.
  2. Выбирается метрика и единица измерения.
  3. Добавляется условие нагрузки и порог.
  4. Проверяется реализуемость с техлидом и QA.
Когда использовать: для каждого нефункционального требования без исключений.
Вывод: если требование нельзя измерить, оно не готово к разработке.

8. SLI, SLO, SLA

  • SLI — измеряемый показатель сервиса.
  • SLO — целевое значение этого показателя.
  • SLA — внешнее обещание качества и последствия нарушения.
🔎 Как это происходит на практике:
  1. Команда выбирает SLI, которые реально отражают пользовательский опыт.
  2. Для каждого SLI задаются внутренние SLO.
  3. Для внешних клиентов формируется SLA.
Когда использовать: при операционном управлении качеством и договорённостях с клиентами.
Вывод: SLI/SLO/SLA переводят качество в управляемые обязательства.

9. Как проверяют NFR

Инструменты проверки:
  • нагрузочные и стресс-тесты;
  • мониторинг latency/error rate/uptime;
  • security-сканирование и аудит;
  • UX-тестирование и продуктовая аналитика.
🔎 Как это происходит на практике:
  1. Для каждого NFR назначается способ проверки.
  2. Проверки автоматизируются в CI/CD и наблюдении в проде.
  3. При отклонениях создаются инциденты и корректирующие задачи.
Когда использовать: на QA-этапе и постоянно после релиза.
Вывод: NFR считаются выполненными только при фактическом подтверждении метриками.

Сравнение: FR vs NFR

Тип требованияНа какой вопрос отвечаетПример
FunctionalЧто система делает?Пользователь может записаться на курс
Non-functionalНасколько качественно это делает?Запись подтверждается <= 3 сек при 200 rps

Частые вопросы на собеседованиях

  • Чем FR отличаются от NFR?
  • Почему фразы «должно быть быстро» недостаточно?
  • Какие категории NFR обязательны для веб-платформы?
  • Как связаны SLI, SLO и SLA?
  • Кто отвечает за NFR: аналитик, QA или разработка?
Вывод: на интервью ценится умение обосновать метрики и способы проверки.

Типичные ошибки

Ошибка 1: Нет измеримости

❌ «Должно быть удобно и быстро» ✅ «p95 <= 2 сек, сценарий выполняется <= 3 клика»

Ошибка 2: Нет контекста нагрузки

❌ «API 300 мс» ✅ «API <= 300 мс при 200 rps»

Ошибка 3: Нереалистичные пороги

❌ «0% ошибок всегда» ✅ «error rate < 1% при пиковой нагрузке»

Ошибка 4: Нет проверки

❌ NFR есть в документе, но нет мониторинга ✅ Для каждого NFR есть тест и наблюдение в проде

Best Practices

  • У каждого NFR обязательно должны быть метрика, условие и порог.
  • NFR нужно согласовывать с QA, разработкой и продуктом вместе.
  • Критичные NFR стоит привязывать к SLO и мониторингу.
  • Формулировки должны быть реалистичными для текущей архитектуры.
  • NFR нужно пересматривать при росте нагрузки и изменении продукта.

Заключение

🎯 Нефункциональные требования определяют качество, а не функциональность.
🎯 Сильный NFR всегда измерим и проверяем.
🎯 Практика NFR снижает риски деградации и делает релизы предсказуемыми.
Вы уже можете формулировать NFR так, чтобы команда действительно могла их реализовать и подтвердить в проде.
🎯

Проверьте знания

Закрепите материал — пройдите тест по теме «Нефункциональные требования: Введение»

Пройти тест →