Требования — это не формальность. Это страховка от «мы же обсуждали».
Если вы когда-нибудь слышали на демо фразу «это не то, что мы просили», хотя вы точно помните, что именно это и просили — добро пожаловать в мир, где требования либо не были записаны, либо были записаны так, что каждый понял их по-своему.
Функциональные и нефункциональные требования — это два столпа, на которых держится любая система. ФТ говорят что система делает. НФТ говорят как она это делает. Пропустите одно из двух — и получите продукт, который либо не делает того, что нужно, либо делает, но так медленно (или небезопасно), что лучше бы не делал.
В предыдущей статье о нефункциональных требованиях мы разобрали теорию. Сегодня — практика: конкретные примеры, готовые шаблоны и ошибки, которые я встречал у десятков команд.
Классификация требований: что относится к ФТ, а что к НФТ
Прежде чем лезть в примеры, давайте раз и навсегда зафиксируем разницу. Потому что на собеседованиях и в реальных проектах эту границу путают с завидной регулярностью.
Функциональное требование (ФТ / FR) — описывает конкретное поведение системы: что она делает в ответ на действие пользователя или внешнее событие.
Нефункциональное требование (НФТ / NFR) — описывает качественную характеристику системы: как быстро, надёжно, безопасно и удобно она выполняет свои функции.
Простая аналогия: вы заказываете пиццу. ФТ — «пицца с моцареллой и томатами». НФТ — «доставка за 30 минут, температура не ниже 60°C, курьер не роняет коробку». Если вам привезут правильную пиццу через 3 часа в холодном виде — функциональное требование выполнено, а нефункциональные провалены.
На диаграмме видно, что НФТ — это не один пункт в документации, а целое дерево характеристик. Каждая ветка — отдельная область, которую нужно проработать. На практике, конечно, не все проекты требуют проработки всех восьми категорий, но знать о них нужно, чтобы осознанно решать, что пропускаете.
Примеры функциональных и нефункциональных требований по доменам
Теория без примеров — как API без документации: вроде существует, но пользоваться невозможно. Ниже — примеры ФТ и НФТ из четырёх популярных доменов.
Интернет-банк
| # | Функциональное требование | Связанные НФТ |
|---|---|---|
| 1 | Пользователь может перевести деньги между своими счетами | Время выполнения перевода — не более 3 сек при нагрузке до 5 000 RPS. Данные передаются по TLS 1.3. Операция логируется с сохранением audit trail |
| 2 | Система формирует выписку по счёту за указанный период | Генерация выписки за 12 месяцев — не более 10 сек. Формат: PDF/CSV. Доступно при 99.9% uptime |
| 3 | Пользователь может заблокировать карту через мобильное приложение | Блокировка применяется в течение 5 сек. Повторная блокировка идемпотентна. Работает при отсутствии интернета через SMS-канал |
E-commerce
| # | Функциональное требование | Связанные НФТ |
|---|---|---|
| 1 | Покупатель может добавить товар в корзину | Время добавления — не более 200 мс. Корзина сохраняется между сессиями. Максимум 500 позиций |
| 2 | Система рассчитывает стоимость доставки на основе адреса | Расчёт за 1 сек. Поддержка до 50 тарифных зон. Кэширование результатов на 15 минут |
| 3 | Покупатель получает уведомление о смене статуса заказа | Задержка уведомления — не более 30 сек. Каналы: push, email, SMS. В случае сбоя — retry до 3 раз |
Страхование
| # | Функциональное требование | Связанные НФТ |
|---|---|---|
| 1 | Агент оформляет полис ОСАГО через внутреннюю систему | Время оформления — не более 60 сек. Интеграция с РСА: ответ за 5 сек, timeout — 15 сек. Данные хранятся 5 лет |
| 2 | Система рассчитывает скоринг для каско | Расчёт за 3 сек. Модель обновляется раз в квартал. Результат воспроизводим (аудит) |
| 3 | Клиент подаёт заявление на страховой случай через личный кабинет | Загрузка фото до 10 МБ каждое, максимум 20 файлов. Валидация формата на клиенте. Данные шифруются at rest |
Общепит (система управления рестораном)
| # | Функциональное требование | Связанные НФТ |
|---|---|---|
| 1 | Официант оформляет заказ через планшет | Время отправки на кухню — не более 1 сек. Работает при нестабильном Wi-Fi (offline-first). Синхронизация при восстановлении соединения |
| 2 | Система печатает чек через фискальный регистратор | Печать за 2 сек. Совместимость с ККТ: АТОЛ, Штрих-М, Эвотор. При сбое — повторная печать с тем же номером |
| 3 | Менеджер просматривает дашборд продаж за день | Загрузка дашборда — до 3 сек. Данные обновляются раз в 5 минут. Поддержка 3 параллельных сессий |
Шаблоны для описания требований
«А как это записывать?» — вопрос, который возникает у каждого аналитика после того, как он понял разницу между ФТ и НФТ. Вот три проверенных шаблона.
Шаблон 1: ФТ в формате User Story + критерии приёмки
Как [роль],я хочу [действие],чтобы [цель/ценность].
Критерии приёмки:- Система должна [конкретное поведение]- При ошибке система [поведение при ошибке]- Допустимые входные данные: [ограничения]
НФТ:- Производительность: [время отклика] при [нагрузка]- Безопасность: [требование к защите данных]- Доступность: [uptime]Пример заполненного шаблона:
Как клиент интернет-банка,я хочу перевести деньги на счёт другого клиента по номеру телефона,чтобы не запоминать номера счетов.
Критерии приёмки:- Система находит получателя по номеру телефона, привязанному к счёту- При отсутствии привязки — сообщение «Получатель не найден»- Максимальная сумма перевода: 500 000 ₽ в сутки
НФТ:- Производительность: поиск получателя < 1 сек, перевод < 3 сек при нагрузке до 2 000 RPS- Безопасность: подтверждение через SMS/push, данные по TLS 1.3- Доступность: 99.95% uptimeШаблон 2: таблица НФТ с метриками
Этот шаблон хорош для технической документации и передачи в разработку:
| ID | Категория | Требование | Метрика | Метод проверки |
|---|---|---|---|---|
| NFR-001 | Производительность | Время ответа API авторизации | p95 < 500 мс при 1 000 RPS | Нагрузочное тестирование (k6/JMeter) |
| NFR-002 | Масштабируемость | Горизонтальное масштабирование сервиса заказов | До 10 инстансов без деградации | Тест с линейным увеличением нагрузки |
| NFR-003 | Безопасность | Хранение паролей пользователей | bcrypt, cost factor ≥ 12 | Код-ревью + аудит БД |
| NFR-004 | Надёжность | Доступность платёжного сервиса | 99.99% uptime (52 мин простоя/год) | Мониторинг (Grafana/Prometheus) |
| NFR-005 | Совместимость | Поддержка браузеров | Chrome 90+, Firefox 88+, Safari 14+ | Кросс-браузерное тестирование |
Шаблон 3: НФТ как часть спецификации API
Для REST API удобно фиксировать НФТ прямо в спецификации эндпоинта:
POST /api/v1/orders
Описание: Создание нового заказа
Функциональные требования:- Создаёт заказ с переданными товарами- Рассчитывает итоговую стоимость с учётом скидок- Возвращает ID созданного заказа
Нефункциональные требования:- Время ответа: p99 < 2 сек- Rate limit: 100 запросов/мин на пользователя- Максимальный размер тела запроса: 1 МБ- Идемпотентность: поддержка Idempotency-Key- Логирование: каждый запрос в audit logКлассификация нефункциональных требований: 8 категорий с примерами
Давайте пройдёмся по каждой категории НФТ с конкретными формулировками. Это не абстрактные «безопасность должна быть на высоте» — а измеримые требования, которые можно проверить.
1. Производительность (Performance)
Самая очевидная категория, но и самая часто неверно описанная. «Система должна работать быстро» — это не требование, это пожелание.
| Плохо | Хорошо |
|---|---|
| Система должна быстро отвечать | API авторизации отвечает за < 500 мс (p95) при 2 000 RPS |
| Страница должна загружаться быстро | Время загрузки главной страницы < 2 сек (LCP) на 4G-соединении |
| Отчёт должен формироваться оперативно | Генерация отчёта за 30 дней — до 5 сек; за 365 дней — до 30 сек |
2. Безопасность (Security)
| Плохо | Хорошо |
|---|---|
| Данные должны быть защищены | Пароли хранятся в виде bcrypt-хеша (cost ≥ 12). Передача по TLS 1.3. Сессия истекает через 30 мин неактивности |
| Нужна авторизация | Доступ к ресурсам — через OAuth 2.0 + JWT. Токен живёт 15 мин, refresh-токен — 7 дней. Ротация refresh при использовании |
3. Масштабируемость (Scalability)
| Плохо | Хорошо |
|---|---|
| Система должна масштабироваться | Сервис заказов поддерживает горизонтальное масштабирование до 10 инстансов. При увеличении RPS в 5 раз — деградация latency не более 20% |
| Нужна поддержка роста | Система рассчитана на рост DAU с 10 000 до 100 000 за 12 месяцев без архитектурных изменений |
4. Надёжность (Reliability)
| Плохо | Хорошо |
|---|---|
| Система должна быть надёжной | SLA 99.95%. Максимальное время недоступности — 4.38 часа/год. RTO = 15 мин, RPO = 1 мин |
| Система не должна падать | При отказе одного инстанса нагрузка автоматически перераспределяется. Потеря данных — 0 транзакций через synchronous replication |
5. Удобство использования (Usability)
| Плохо | Хорошо |
|---|---|
| Интерфейс должен быть удобным | Новый пользователь выполняет целевое действие за ≤ 3 клика. Интерфейс соответствует WCAG 2.1 AA. Поддержка screen reader |
6. Совместимость (Compatibility)
| Плохо | Хорошо |
|---|---|
| Должно работать везде | Web: Chrome 90+, Firefox 88+, Safari 14+, Edge 90+. Mobile: iOS 15+, Android 10+. Минимальное разрешение: 320px |
7. Логирование и мониторинг (Observability)
| Плохо | Хорошо |
|---|---|
| Нужны логи | Structured logging (JSON). Уровни: ERROR, WARN, INFO, DEBUG. Каждый запрос — trace_id для сквозной трассировки. Retention: 90 дней. Алерты: Slack/PagerDuty при error rate > 1% |
8. Соответствие стандартам (Compliance)
| Плохо | Хорошо |
|---|---|
| Система должна соответствовать законам | Хранение ПДн — 152-ФЗ. Платёжные данные — PCI DSS Level 1. Право на удаление данных (GDPR Art. 17) — исполнение за 72 часа |
Как ФТ и НФТ связаны с архитектурой системы
Вот что большинство аналитиков упускают: НФТ — это не «бумажка для галочки». НФТ напрямую диктует архитектурные решения. Плохо сформулированные НФТ = плохая архитектура = «мы потом перепишем» (а мы знаем, что потом — это никогда).
Каждое НФТ тянет за собой цепочку архитектурных и инфраструктурных решений. Требование «< 3 сек» приводит к кэшированию. Требование «99.99% uptime» — к отказоустойчивым кластерам. Требование «PCI DSS» — к аппаратным модулям безопасности. Именно поэтому НФТ нужно фиксировать на ранних этапах — когда архитектура ещё гибкая, а не когда монолит уже закатан в бетон.
Больше о том, как требования формируют архитектуру, можно найти в подборке ресурсов для аналитиков и архитекторов.
Типичные ошибки при описании ФТ и НФТ
За годы работы я видел одни и те же паттерны ошибок. Некоторые из них стоили командам месяцев переработки. Вот пятёрка лидеров:
1. НФТ описаны абстрактно — без метрик
❌ «Система должна быть быстрой и надёжной»✅ «API отвечает за < 200 мс (p95), uptime 99.9%, RTO = 10 мин»Если требование нельзя проверить тестом — это не требование. Это надежда.
2. НФТ не привязаны к конкретным ФТ
Когда НФТ живут в отдельном документе и никак не связаны с функциональными требованиями, разработчики их просто игнорируют. «А к какой фиче это относится?» — и документ уходит в архив.
Решение: каждое НФТ привязывайте к конкретному сценарию или эндпоинту (как в шаблонах выше).
3. Забыли про нагрузку
«Авторизация работает за 200 мс» — при одном пользователе. А при 10 000 одновременных запросов? Всегда указывайте нагрузку:
❌ «Время ответа < 200 мс»✅ «Время ответа < 200 мс (p95) при нагрузке 5 000 RPS»4. ФТ и НФТ перепутаны
Это классика собеседований и реальных проектов. «Система должна шифровать данные» — это ФТ или НФТ? Зависит от контекста:
- Вы делаете приложение-шифровальщик? Это ФТ — шифрование и есть основная функция.
- Вы делаете интернет-банк? Это НФТ — шифрование описывает как система защищает данные, а не что она делает.
5. НФТ написаны «под копирку» без учёта домена
Копировать шаблон из интернета и вставлять «99.99% uptime» для внутреннего инструмента на 15 пользователей — это не инженерный подход. Это карго-культ. НФТ должны отражать реальные потребности бизнеса, а не красивые цифры из чужих SLA.
Матрица приоритизации: какие НФТ описывать в первую очередь
Не все НФТ одинаково важны. Для MVP внутреннего инструмента и для платёжного шлюза приоритеты будут разными. Вот матрица, которая поможет определить, что описывать в первую очередь:
| Категория НФТ | Внутренний инструмент | B2C-продукт | Финтех / Платежи | Медицина |
|---|---|---|---|---|
| Производительность | Средний | Высокий | Высокий | Средний |
| Безопасность | Низкий | Средний | Критичный | Критичный |
| Масштабируемость | Низкий | Высокий | Высокий | Средний |
| Надёжность | Средний | Высокий | Критичный | Критичный |
| Usability | Средний | Критичный | Высокий | Высокий |
| Совместимость | Низкий | Высокий | Средний | Средний |
| Логирование | Низкий | Средний | Критичный | Критичный |
| Compliance | Низкий | Средний | Критичный | Критичный |
Начинайте с категорий, помеченных Критичный в вашем домене. Для e-commerce это производительность и usability — потому что медленный сайт теряет деньги (каждая дополнительная секунда загрузки — минус 7% конверсии, если верить исследованиям). Для финтеха — безопасность и compliance, потому что штрафы за нарушение PCI DSS измеряются в миллионах.
Как не превратить НФТ в бюрократию
Есть соблазн описать НФТ для каждого чекбокса в системе. Не надо. Золотое правило:
Описывайте НФТ для критического пути пользователя и для точек интеграции. Всё остальное — по потребности.
Критический путь — это последовательность действий, без которых система теряет смысл. Для интернет-магазина: поиск → корзина → оплата → подтверждение. Для каждого шага этой цепочки НФТ обязательны.
Точки интеграции — это места, где ваша система общается с внешним миром: платёжные провайдеры, внешние API, SMTP-серверы. Здесь всегда нужны таймауты, retry-политики и fallback-стратегии.
Для внутренней админки, которой пользуется 5 человек? Хватит базовых требований: «работает в Chrome, открывается за 5 сек, доступна в рабочее время». Не нужно вычислять p99 для кнопки «Экспорт в Excel» (хотя если этот Excel содержит данные за 10 лет — может, и нужно).
Заключение
Функциональные и нефункциональные требования — это не формальность для галочки в документации. Это контракт между бизнесом и разработкой. ФТ фиксирует, что мы строим. НФТ фиксирует, каким оно должно быть. Пропустите одно — и получите систему, которая «работает, но…» (и все знают, что после «но» ничего хорошего не бывает).
Три ключевых правила:
- Измеримость — если нельзя проверить тестом, это не требование
- Привязка — каждое НФТ связано с конкретным сценарием или компонентом
- Адекватность — НФТ соответствует реальным потребностям, а не копипасте из чужого SLA
И помните: хорошо описанные требования экономят месяцы разработки. Плохо описанные — добавляют месяцы отладки. Выбор, как говорится, за вами.
PS: Если ваш PM говорит «НФТ — это потом, сначала сделаем функционал», покажите ему таблицу с компромиссами. Обычно после фразы «99.99% uptime означает 52 минуты простоя в год» разговор становится продуктивнее.