Что такое нефункциональные требования (NFR) в разработке ПО?

Ответ

Нефункциональные требования (NFR) описывают не что делает система, а как она это делает. Они определяют атрибуты качества системы, её ограничения и характеристики работы.

Ключевые категории NFR с примерами:

Категория Описание Пример требования
Производительность Скорость и эффективность системы. "95% запросов к API должны обрабатываться менее чем за 200 мс при нагрузке 100 RPS."
Масштабируемость Способность системы справляться с ростом нагрузки. "Архитектура должна позволять увеличить пропускную способность на 50% путём добавления новых инстансов приложения."
Надёжность/Доступность Время безотказной работы. "Доступность системы (uptime) должна составлять не менее 99.9% ("три девятки")."
Безопасность Защита от угроз. "Все пароли должны храниться в хэшированном виде с использованием алгоритма bcrypt."
Удобство использования (Usability) Простота взаимодействия с интерфейсом. "Новый пользователь должен выполнить основную задачу за 3 клика или менее."
Сопровождаемость Лёгкость поддержки и изменения кода. "Время сборки проекта не должно превышать 5 минут."

Как тестируются NFR:

  • Нагрузочное тестирование (JMeter, k6): Проверка производительности и стабильности под нагрузкой.
  • Тестирование безопасности (OWASP ZAP, SAST/DAST инструменты): Поиск уязвимостей.
  • Юзабилити-тестирование: Оценка удобства интерфейса с реальными пользователями.
  • Тестирование восстановления: Проверка отказоустойчивости (например, отключение сервера БД).

Важность: Чёткие и измеримые NFR критичны для архитектурных решений, выбора технологий и оценки успешности проекта.

Ответ 18+ 🔞

Слушай, а вот эти ваши NFR — это ж, блядь, самое интересное! Это когда тебе говорят не «что» делать, а «как, сука, делать». Типа, ну да, кнопку нажать — это понятно. А вот чтобы она нажималась так, чтобы у пользователя хуй с горы не вставал от тормозов — это уже искусство, ёпта!

Нефункциональные требования (NFR) — это, грубо говоря, не про то, что система умеет, а про то, какого она, блядь, качества. Характеристики, ограничения, вся такая сопутствующая хуйня, которая и отличает говно от конфетки.

Основные разновидности этой тягомотины с примерами:

Категория Что это значит на нормальном языке Пример (чтобы было понятно даже мартышке)
Производительность Чтобы не тупило. Вообще. "95% запросов должны отщёлкиваться быстрее, чем ты успеешь сказать 'ёбушки-воробушки' — а именно за 200 мс, даже когда наваливают 100 запросов в секунду."
Масштабируемость Чтобы когда народу припёрло овердохуища, можно было просто добавить железа, а не переписывать всё с нуля. "Если народу набежало — мы просто докидываем ещё серверов в кластер, как блины на сковородку, и всё летает."
Надёжность/Доступность Чтобы не падало каждые пять минут. Чтобы работало. "Система должна быть доступна 99.9% времени. То есть просесть может максимум на 8 часов в год, и то — лучше не надо, а то я тебе вманжу!"
Безопасность Чтобы всякие пидарасы не налетели и не сломали/украли. "Пароли храним только в захэшированном виде, чтоб даже мы сами, если что, не смогли их прочитать. Безопасность, блядь!"
Удобство использования Чтобы интерфейс был не для гениев, а для обычных людей, у которых и так терпения ноль ебать. "Пользователь должен дойти от входа до покупки за три клика. Не за десять, сука, а за три! Иначе он просто уйдёт."
Сопровождаемость Чтобы код можно было поддерживать, а не каждый раз при правке молиться всем богам, чтоб ничего не сломалось. "Сборка всего этого добра не должна длиться дольше, чем перекур. Ставлю 5 минут — и ни секундой больше!"

А как эту хуйню проверять?

  • Нагрузочное тестирование: Наваливаем кучу виртуальных пользователей (типа JMeter) и смотрим, не накроется ли система медным тазом. Или не начнёт отвечать как сонная муха.
  • Тестирование безопасности: Пускаем специальные скрипты (типа OWASP ZAP), которые пытаются найти дыры. Как те самые пидары, только легальные.
  • Юзабилити-тестирование: Сажаем живых людей, даём им задачу и смотрим, как они, бедные, ебутся с интерфейсом. Записываем, где матерятся.
  • Тестирование восстановления: Вырубаем, блядь, сервер баз данных в рабочее время и смотрим, как система от этого оправляется. Хули там с отказоустойчивостью?

А важны-то они, блядь, почему? Да потому что без них получается вот это вот: вроде всё работает, но медленно, падает каждую пятницу и любой школьник может его взломать. Чёткие NFR — это как ТЗ для качества. Без них архитекторы будут выбирать технологии на глазок, а потом окажется, что всё надо переделывать. Пиздец, короче.