Системный аналитик

Курсы по REST API: учимся проектировать микросервисы, валидировать запросы и тестировать нагрузку. Паттерны, антипаттерны и боль SOAP в legacy-банках

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

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

Определимся с понятием

Название на русскомНазвание на английском
Функциональные требования (ФТ)Functional Requirements ( FR )
Нефункциональные требования (НФТ)Non-Functional Requirements ( NFR )

Функциональные требования — это то, что делает система.
Нефункциональные требования — это то, как это делает система. Как правило, это связано с ограничениями системы (производительность, масштабируемость)

Типы нефункциональных требований

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

С пониманием нефункциональных требований все немного сложнее. В идеальном мире, где вы никуда не спешите, можно сформировать НФТ для каждого типа:

  • Производительность
  • Безопасность
  • Масштабируемость
  • Надежность
  • Usability
  • Совместимость
  • Логирование и мониторинг
  • Соответствие стандартам

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

Все, что не описано в доке, обычно трактуется в пользу бизнеса.
Например, если не описать и не завалидировать, что минимальная поддерживаемая версия приложения, где доступен функционал вашего сервиса, условно 10.0, то бизнес обязательно раскатит на версии ниже, где функционал недоступен.

Производительность

Хочу отдельно поговорить о понятии — производительность. У большинства учеников возникает ощущение, что понятие производительности ограничена только скоростью обработки сервиса — т.е. бекендом. При этом игнорируя производительность передачи данных от фронта на бек и получения результата.

Давайте разберем подробнее, предположим у нас есть микросервис — калькулятор, который просто складывает числа (как 2 + 2 ). Но в качестве аргументов, на вход он принимает портянку из 10к+ символов:

ШагОперацияВремя обработки(ms)
1Бекенд принимает данные в виде XML на 10к+ строк0.1
2Бекенд делает валидацию данных0.1
3Бекенд должен найти в этой XML значения, соответствующие определенным условиям0.5
4Сделать сложения ( как 2+2 )0.001
5Отформатировать ответ для фронта0.1
Итогоне верное значение0.001
Итоговерное значение0.801

Многие аналитики, отвечая на этот вопрос, отделяют все шаги от шага #4, опуская все предшествующие и последующие операции. А ведь они будут выполнять в рамках одной операции (трейса).

Несмотря на то, что не все аналитики описывают все типы нефункциональных требований, в совокупности с функциональными требованиями, это описания, отличный вклад в архитектуру будущего ПО. Поскольку формируя НФТ, вы декомпозируете задачу, а НФТ диктует будущую архитектуру.

Вернемся к прошлому примеру — регистрация пользователя.
Мы должны сформировать список требований, которые хорошо будут решать эту задачу. Например, нам необходимо зафиксировать, что форма регистрации должна отдаваться пользователю за 0.01мс. И отклик на кнопку «зарегистрироваться», после ввода всех данных должна быть до 1мс в пиковых значения нагрузки до 10k rps (request per second).

Пример базовых НФТ

ФТНФТ
Регистрация пользователя* Время ответа при пиковой нагрузки на клик «зарегистрироваться» [ Производительность ]
* Протокол передачи данных ( HTTP/ HTTPS ) [ Безопасность ]
* Формат хранения пароля : hash/открытый вид [ Безопасность ]

Практика

Проведем с вами тестированием, где вам нужно будет определить, какие атрибуты будут являться НФТ. Подчеркиваю, что в качестве примера ФТ — мы рассматриваем совершенно обычную «жарку на сковороде», не умной устройство или ПО. А просто обычную жарку на сковородке, скажем, яиц =)
Если возникнет сложность, посмотрите подсказки, там будет описание что из атрибутов НЕ является НФТ.

Подсказки

Отлично жарить яйца — это ФТ, отвечает на вопрос — что делать.

Диаметр сковороды — Это техническая спецификация (размер), а не требование к качеству или эксплуатации.

Сковорода должна продаваться с лопаткой — Это коммерческое условие (комплектация), а не свойство самого продукта.

Итак, давайте закрепим, список компромиссов между детально сформированными НФТ и рисками.