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

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


Функциональные требования отвечают на вопрос «что система должна уметь». Нефункциональные требования отвечают на вопрос «с каким качеством». Кнопка «Отменить заказ» относится к первым. Время, за которое открывается страница заказа, и защита от чужого доступа относятся ко вторым.

Нефункциональное требование - требование к качеству работы системы, а не к её функциям. Метрика - то, что мы измеряем, чтобы судить об этом качестве, например время ответа в секундах.

Кейс: «сайт должен быстро работать»

Перед распродажей владелец магазина «Узелок» просит: «Сайт должен быстро работать». Разработчик согласен и делает как умеет. В день распродажи страница заказа открывается долго, покупатели жалуются, и каждый участник уверен, что был прав. Владелец ожидал секунды, разработчик считал приемлемым ожидание в несколько секунд, а тестировщик не знал, с чем сравнивать.

Проблема не в скорости, а в формулировке: слово «быстро» у каждого свой смысл. Числа в этом кейсе условные: мы взяли их для иллюстрации, а не из реального магазина.

Рисунок 1. Расплывчатое требование «быстро работать» и его измеримая запись

Основные группы

Нефункциональные требования удобно разбирать по группам. Качество программного продукта принято описывать набором характеристик; среди них производительность, надёжность, безопасность, взаимодействие с пользователем (раньше называлось удобством использования) и другие. Для работы чаще всего хватает шести групп, которые перекликаются с этими характеристиками.

Рисунок 2. Шесть групп нефункциональных требований с вопросами и примерами
  • Производительность: как быстро система отвечает и обрабатывает данные.
  • Надёжность и доступность: как долго система работает без сбоев и какую долю времени доступна.
  • Безопасность: кто какие данные и действия видит.
  • Масштабируемость: сколько пользователей и данных система выдержит и как будет расти.
  • Удобство: сколько шагов до цели и насколько понятен интерфейс.
  • Аудит: какие действия записываются в журнал и как долго он хранится.

Нагрузку и масштабирование подробнее разбирает статья 06-09, отказоустойчивость статья 06-11, безопасность статья 06-12.

Как сделать требование измеримым

Измеримое требование отвечает на четыре вопроса: что мы измеряем, какое значение считаем достаточным, при каких условиях и как будем проверять. Если хотя бы на один вопрос нет ответа, проверка превращается в спор.

Рисунок 3. Четыре части измеримого нефункционального требования

Для кейса запись может выглядеть так (числа условные): «Страница заказа открывается не дольше чем за 2 секунды в 95% случаев при 100 одновременно работающих покупателях. Проверка: замер на тестовом стенде перед релизом».

Фраза «в 95% случаев» нужна, потому что время ответа меняется от запроса к запросу. Одно среднее число скрывает медленные случаи, а запись «95% запросов укладываются в границу» показывает, как себя чувствует почти каждый покупатель. Такое значение называют 95-м перцентилем.

Рисунок 4. Что значит «в 95% случаев»

Как выяснять значения

Цифру не придумывают сами, её выясняют. Полезные вопросы к владельцу и команде:

Рисунок 5. Откуда берутся числа в требованиях
  • Сколько пользователей и запросов ожидается в обычный день и в пик?
  • Что произойдёт, если страница откроется за 5 секунд: покупатель уйдёт, пожалуется, подождёт?
  • Сколько можно терять данных и времени при сбое?
  • Есть ли требования закона или договора к хранению, доступу и журналу действий?

Требования к персональным данным вынесены в отдельную статью 02-14, а пример с формулой измеримой записи есть и в статье 02-06 о метриках успеха.

Где нефункциональные требования ломаются

Чаще всего ломается одно из трёх. Требование не записано: все надеются на «разумное» поведение. Требование записано без числа: «быстро», «надёжно», «безопасно». Требование записано, но не проверяется: нет стенда, нет замера, нет ответственного.

Ещё одна частая беда: требования противоречат друг другу. Строгая защита замедляет вход, а шифрование данных увеличивает время ответа. Такие конфликты лучше видеть заранее, поэтому в статье 02-18 мы разберём поиск противоречий.

Где это встречается в работе

  • В описании функции рядом с функциональной частью: время ответа, доступность, права доступа.
  • В обсуждении релиза: нагрузочное тестирование проверяет требования к производительности, о чём пойдёт речь в статье 02-24.
  • В договоре или соглашении об уровне сервиса, где доступность и время восстановления записаны числами.
  • В разборе инцидента: часто выясняется, что требование «просто не обсуждали».

Итог

  • Нефункциональные требования описывают качество работы системы.
  • Группы: производительность, надёжность, безопасность, масштабируемость, удобство, аудит.
  • Измеримое требование включает метрику, значение, условия и способ проверки.
  • Значения выясняют у владельца и команды, а не придумывают.
  • Конфликты между требованиями видны заранее, если смотреть на них вместе.

Что дальше

  • 06-09 Нагрузка и масштабирование: как оценить нагрузку и что даёт масштабирование.
  • 02-14 Персональные данные: какие требования возникают при работе с данными людей.
  • 02-24 Виды тестирования: как проверяют нефункциональные требования.
Проверка знаний

5 вопросов