Нефункциональные требования (Non‑functional Requirements, NFR) описывают, как должна работать система: её характеристики, ограничения и условия эксплуатации. В отличие от функциональных требований они не добавляют новых функций, но определяют качество работы ПО.
Ключевое отличие от функциональных требований
- Функциональные: отвечают на вопрос «Что система должна делать?» (например, «система должна позволять пользователю сбрасывать пароль»).
- Нефункциональные: отвечают на вопросы «Как система должна это делать?» и «Насколько хорошо?» (например, «процесс сброса пароля не должен занимать более 2 минут»).
Без учёта нефункциональных требований система может выполнять все функции, но работать медленно, часто падать, быть неудобной или небезопасной — что приведёт к оттоку пользователей.
Основные категории нефункциональных требований
- Производительность (Performance):
- скорость отклика системы;
- время выполнения операций;
- пропускная способность (количество операций в единицу времени);
- использование ресурсов (CPU, память, дисковое пространство).
- «Время отклика интерфейса при загрузке главной страницы не должно превышать 2 секунд при ширине канала 10 Мбит/с».
- «Поиск по каталогу должен выдавать результаты не дольше чем за 1 секунду».
- «Система должна поддерживать не менее 1 000 одновременных подключений».
- Надёжность (Reliability):
- стабильность работы;
- устойчивость к сбоям;
- время восстановления после сбоев.
- Масштабируемость (Scalability):
- способность системы справляться с ростом нагрузки (пользователей, данных, транзакций) без существенной потери производительности.
- Безопасность (Security):
- защита данных от несанкционированного доступа;
- аутентификация и авторизация пользователей;
- шифрование данных (при передаче и хранении);
- соответствие стандартам безопасности (PCI DSS, GDPR и т. д.).
- «Все пароли должны храниться в зашифрованном виде с использованием алгоритма bcrypt».
- «Система должна поддерживать двухфакторную аутентификацию для администраторов».
- «Данные при передаче между клиентом и сервером должны быть зашифрованы с использованием TLS 1.3».
- Удобство использования (юзабилити) (Usability):
- интуитивность интерфейса;
- доступность для людей с ограниченными возможностями (соответствие стандарту WCAG);
- минимизация количества действий для выполнения типовых задач.
- «Новый пользователь должен выполнить типовую задачу за не более чем 3 клика без предварительного обучения».
- «Интерфейс должен быть адаптирован для пользователей с нарушениями зрения (поддержка экранных дикторов, контрастные темы)».
- Совместимость и переносимость (Compatibility & Portability):
- работа на разных платформах, устройствах, браузерах;
- интеграция с другими системами и сервисами.
- «Система должна корректно отображаться в последних версиях Chrome, Firefox, Safari и Edge».
- «Интерфейс должен быть адаптирован под мобильные устройства (разрешение от 320 px)».
- «Система должна интегрироваться с 1С через REST API».
- Сопровождаемость (Maintainability):
- лёгкость внесения изменений и исправлений;
- модульность архитектуры;
- наличие документации и логов.
- Локализация и интернационализация (Localization & Internationalization):
- поддержка разных языков;
- корректное отображение форматов даты, времени, валюты, чисел.
- Эксплуатационные требования:
- простота установки и развёртывания;
- мониторинг и логирование;
- резервное копирование и восстановление данных.
- «Процесс установки системы должен занимать не более 30 минут силами одного администратора».
- «Система должна автоматически создавать резервные копии базы данных каждые 24 часа».
Как правильно формулировать нефункциональные требования
Чтобы требования были полезными, их нужно формулировать конкретно и измеримо.
Плохо:
- «Система должна быть быстрой».
- «Интерфейс должен быть удобным».
- «Система должна быть надёжной».
Хорошо:
- «Время загрузки главной страницы не должно превышать 1,5 секунд при нагрузке до 500 одновременных пользователей».
- «Пользователь должен находить нужный раздел не более чем за 2 клика».
- «Доступность системы должна составлять 99,95 % в течение календарного месяца».
Роль нефункциональных требований в разработке ПО
Нефункциональные требования влияют на:
- архитектуру системы (выбор технологий, баз данных, серверов);
- бюджет и сроки (реализация высокой надёжности или масштабируемости требует дополнительных ресурсов);
- пользовательский опыт (скорость, удобство, безопасность напрямую влияют на удовлетворённость);
- конкурентные преимущества (система, которая работает быстрее и стабильнее аналогов, привлекает больше пользователей).
Грамотно сформулированные нефункциональные требования помогают создать продукт, который не только выполняет нужные функции, но и удобен, безопасен и эффективен в реальной эксплуатации.