Нефункциональные требования
В прошлом уроке мы рассмотрели первую часть спецификации требований и узнали правила написания хороших функциональных требований. В этом уроке мы чуть глубже погрузимся в тему нефункциональных требований. Нефункциональные требования — неотъемлемая часть спецификации, поэтому важно знать, из чего они состоят и как формируются.
Когда речь идёт о создании продукта, который может решать пользовательские задачи, высказываются и требования к его возможностям: что должен уметь делать продукт, какие опции он должен предоставлять пользователю. То, что продукт должен выполнять эти требования качественно и хорошо, считается очевидным. Но такие критерии субъективны. Каждый может вкладывать своё в эти понятия. И для того, чтобы привести всех участников процесса (заинтересованных лиц, разработчиков и других) к единому пониманию того, что такое хороший продукт, нужно составлять нефункциональные требования.
Выявляя нефункциональные требования, нужно учитывать важный момент: заказчик и пользователи могут описывать вам характеристики, которыми должен обладать продукт. Это ещё не требования. И задача системного аналитика — превратить в них эти характеристики.
Классы нефункциональных требований
Все нефункциональные требования можно разделить на три класса:
- Атрибуты качества. Это описание различных характеристик продукта, таких как производительность, доступность, совместимость, надёжность и прочих.
Пример атрибута качества: «Система должна быть доступна ежедневно с 06:00 до 20:00 GMT+3». - Требования к внешним интерфейсам. Включают в себя описание аспектов того, как пользователь взаимодействует с системой и как система взаимодействует с другой системой.
Пример требования к внешним интерфейсам: «Авторизация во внешней системе Б должна выполняться по типу Basic Auth». - Ограничения проектирования и реализации. Этот класс требований позволяет команде разработки понять, какие факторы нужно учитывать при проектировании продукта.
Пример ограничения проектирования и реализации: «Интерфейс приложения должен быть адаптирован под экраны с разрешением 8K (7680 x 4320 px)».
Как вы помните, нефункциональные требования — обязательный элемент спецификации требований к ПО. Поэтому мы подробно рассмотрим каждый из упомянутых выше классов. Это поможет понять, по каким признакам определяется качество ПО и от чего оно зависит.
Атрибуты качества
За качество ПО отвечает совокупность его характеристик, которые влияют на то, как все пользователи и заинтересованные лица смогут решать свои задачи с помощью этого ПО. Атрибуты качества можно подразделить на внешние и внутренние:
- Внешние атрибуты качества отвечают за то, насколько легко пользователям и заинтересованным лицам решать свои задачи. Эти характеристики ощутимы для пользователя и влияют на то, как он воспринимает продукт.
Как именно? Допустим, функции продукта позволяют пользователю решить его проблему и может показаться, что этого достаточно. Но если в процессе ПО постоянно зависает или нужные для решения опции трудно найти с первого раза, у пользователя создаётся впечатление, что продукт некачественный. - Внутренние атрибуты качества отвечают за то, насколько эффективно продукт работает с точки зрения его создателей. Эти характеристики только на первый взгляд кажутся незаметными для пользователя и важными для разработчиков и тестировщиков. На самом деле они непосредственно влияют на возможность развития продукта и позволяют представить, как много усилий нужно для того, чтобы что-то поменять в продукте. Как правило, эти требования составляются вместе с командой разработки.
Чтобы лучше разобраться, рассмотрим каждый из этих атрибутов на примере мобильного приложения для доставки продуктов.
Внешние атрибуты:
- Доступность — время, в течение которого сервисы системы полностью доступны для пользователя.Например: «Приложение должно быть доступно не менее 99% времени в сутки, за исключением времени планового обслуживания».Это требование говорит, что приложение должно быть доступно пользователям как минимум 23 часа 38 минут в сутки. Если приложение будет недоступно для пользователей больше 14 минут 24 секунд в сутки, это говорит о снижении качества.
- Удобство установки — то, насколько просто пользователю установить, обновить, удалить и переустановить приложение.Например: «При обновлении версии приложения должна сохраниться авторизация пользователя и все настройки его профиля».
- Целостность — характеризует качество защиты данных. В частности, безопасность хранения данных и возможность в определённых ситуациях восстановить их.Например: «Система должна бессрочно хранить все данные заказов активного пользователя».
- Совместимость — характеризует возможность системы взаимодействовать и обмениваться данными с другими системами.Например: «Система должна иметь возможность запрашивать и получать список продуктов из системы „Склад”».
- Производительность — скорость реакции системы на действия пользователя и другие внешние события. Система не просто должна работать быстро, она должна иметь точные показатели требуемой скорости работы.Например: «Система должна уведомлять пользователя об изменении статуса заказа не позднее 10 секунд после изменения».
- Надёжность — то, как долго система работает без сбоев в течение определённого времени. Любая система может дать сбой, из-за чего снизится её доступность. Надёжность системы определяется именно тем, как она должна вести себя в подобных ситуациях.Например: «Количество заказов, завершённых по причине ошибок в работе системы или её компонентов, не должно превышать более 0,1% от всех заказов в сутки».
- Устойчивость — характеризует способность системы сохранять работоспособность в разных ситуациях и реагировать на них. То, как система ведёт себя во время нештатных ситуаций и сбоев, определяет её устойчивость.Например: «Если при работе с приложением произошёл сбой и был выполнен автоматический перезапуск приложения, система должна восстановить состав корзины по состоянию на момент последнего изменения».
- Защита — то, насколько пользователю физически безопасно взаимодействовать с системой.Например: «При наличии в корзине товаров, у которых срок годности закончится спустя двое суток от текущей даты, система должна уведомить пользователя о наличии таких товаров в корзине».
Обратите внимание, что атрибут «защита» связан именно с физическим вредом, который система может причинить пользователю. Защита данных относится к атрибуту качества «безопасность».
- Безопасность — если атрибут «целостность» характеризует безопасность данных с точки зрения их хранения, то атрибут «безопасность» описывает требования к системе по защите этих данных от неправомерного доступа.Например: «При входе в приложение система должна запрашивать подтверждение в виде четырёхзначного кода».
- Удобство использования — определяет то, насколько пользователю удобно и комфортно работать с продуктом. На самом деле удобство использования учитывается в описанных выше атрибутах, а также пользовательских интерфейсах. При этом не лишне дать дополнительные критерии удобства.Например: «Пользователь, который не авторизован в приложении, должен проходить путь от авторизации до просмотра витрины с товарами не более чем за 15 секунд».
Внутренние атрибуты:
- Эффективность — говорит о том, насколько хорошо система использует ресурсы компьютера. Если система требует слишком больших ресурсов для работы, например, слишком много оперативной памяти и, как следствие, замедляет работу остальных программ, то это может привести к недовольству пользователей и общему снижению качества продукта.Например: «При размещении готовой версии приложения в AppStore и Google Play размер приложения должен быть менее 200 Мб».
- Возможность модификации — этот атрибут качества очень важен для часто меняющихся продуктов. Поэтому он актуален для всех ПО, которые разрабатываются в рамках гибких подходов или по методу набегающей волны. Возможность модификации в первую очередь позволяет понять, насколько просто внести правки в существующий код ПО и изменить продукт.Например: «Управление версиями продукта должно осуществляться с помощью Git».
- Переносимость — характеризует то, насколько просто перенести продукт и все данные из одной среды в другую. Например, легко ли сделать так, чтобы приложение, которое работает с операционной системой iOS, заработало и на Android? Для этого нужно переписать 99% кода или 10%? А если пользователь поменяет старый ноутбук на новый, насколько просто перенести все данные приложения с одного устройства на другое? Ответы на эти и подобные вопросы определяет качество продукта.Например: «Приложение должно запускаться в операционных системах Unix, Windows и MacOS».
- Возможность повторного использования — переиспользование некоторых компонентов ПО повышает его качество и упрощает процесс развития. Например, повторное использование дизайна интерфейса, программного кода, базы данных экономит время на разработке. Требования к этому атрибуту качества обычно представляют собой единые требования к элементам интерфейса, использование библиотек и многое другое.Например: «Функциональность обращения в техподдержку должна быть спроектирована таким образом, чтобы её можно было переиспользовать в любых пользовательских сценариях».
- Масштабируемость — ещё один важный фактор, который влияет на возможность развития продукта. Этот атрибут качества говорит о возможности масштабирования продукта так, чтобы он мог пропускать через себя больше пользователей, сохраняя при этом высокую производительность и оставаясь устойчивым к нагрузкам.Например: «Необходимо обеспечить быструю (менее одной секунды) загрузку изображений товаров в условиях запуска маркетинговых кампаний и планового увеличения суточной посещаемости на 60%».
- Тестируемость — если тестирование одной функции (то есть проверка её работы) отнимает много времени и ресурсов, то изменение такой функциональности будет дорого обходиться. Поэтому тестируемость продукта — это тоже показатель качества.Например: «Должна быть предоставлена возможность отслеживания результата тестирования каждого отдельного функционального требования в одном рабочем пространстве».
Перед вами несколько требований к качеству корпоративного портала, в котором сотрудники могут выгружать разные отчёты. Определите, к какому виду атрибутов качества (внешнему или внутреннему) относится каждое требование:
Система должна предоставлять пользователю выгруженный отчёт не позднее 10 секунд с момента клика по кнопке «Выгрузить отчёт».
Внешний атрибут качества
Это требование соответствует внешнему атрибуту качества «производительность» и напрямую влияет на эффективность работы портала с точки зрения пользователя.
Система должна ежедневно создавать резервную копию всех баз данных, которые содержат персональные данные пользователей.
Внешний атрибут качества
Если что-то случится с системой и пострадают персональные данные пользователей, мы сможем восстановить эти данные и повысить удовлетворённость пользователя от работы с порталом. Поэтому это требование относится к внешнему атрибуту качества «целостность».
Выгрузка одного отчёта должна занимать не более 500 Мб оперативной памяти на сервере.
Внутренний атрибут качества
Если в требовании упоминается об эффективности использования ресурсов устройств, это требование относится к внутренним атрибутам качества и напрямую влияет на проектирование и реализацию решения. Это требование характерно для атрибута качества «эффективность».
Для хранения истории выгруженных отчётов необходимо предусмотреть возможность добавления дискового пространства.
Внутренний атрибут качества
Это нефункциональное требование относится к внутренним атрибутам качества. Возможность добавления дискового пространства не видна пользователям, но очень важна для команды разработки при проектировании системы. Это требование относится к атрибуту качества «масштабируемость».
Требования к внешним интерфейсам
Описанию требований к внешним интерфейсам отводится целый раздел спецификации.
К внешним интерфейсам относится любое взаимодействие ПО с внешним миром: пользователями, другими системами и оборудованием.
- Пользовательские интерфейсы (UI) Требования к пользовательским интерфейсам содержат описание каждой части интерфейса, включая размеры экранов и всех его элементов, а также стилевые характеристики — шрифты, цветовые схемы и прочие.
- Программные интерфейсы Требования к программным интерфейсам включают в себя описание взаимодействия системы с другими ПО, а также описания взаимодействия компонентов системы между собой. Подробнее о программных интерфейсах вы узнаете в следующих спринтах курса.
- Аппаратные интерфейсы Работа ПО может зависеть от оборудования, с которым оно взаимодействует. Для такого программного обеспечения нужно указывать требования к аппаратным интерфейсам (физическим), например виды поддерживаемых устройств, типы физических носителей, протоколы обмена данными между ПО и оборудованием. Пример аппаратного требования — требование о запуске компьютерной игры на устройствах только с видеокартой определённой версии.
- Коммуникационные интерфейсы Для систем, которые взаимодействуют с пользователем и обмениваются с ним данными посредством внешних систем, например браузера, электронной почты, описываются требования для интерфейсов коммуникации с пользователем.
Пример:
- Требования к внешним интерфейсам
- Пользовательские интерфейсы5.1.1 Карточка товара должна содержать информацию о калорийности продукта в табличной форме.
- Программные интерфейсы5.2.1 Система дисконтных карт партнёра А.5.2.1.1 Система должна запрашивать статус активности дисконтной карты в системе дисконтных карт партнёра А.
- Аппаратные интерфейсыНеприменимо.
- Коммуникационные интерфейсы**5.4.1 Система должна отправлять пользователю смс-сообщение с уникальным кодом для подтверждения смены пароля учётной записи.
Ограничения проектирования и реализации
Во время проектирования и реализации будущего продукта неизбежно возникают разные ограничения. Например, необходимо использовать определённый язык программирования, определённые типы API, базы данных или библиотеки. Такие особенности могут существенно повлиять на архитектуру, процесс разработки и на внутренние атрибуты качества. Поэтому очень важно иметь обоснование для каждого выдвинутого ограничения.
Пример:
- Общее описание….2.4 Ограничения проектирования и реализацииПродукт должен быть разработан с использованием библиотеки React и фреймворка Jest для проведения быстрого тестирования новой версии приложения.
Качественные нефункциональные требования должны быть:
- Измеримыми
- Точными
- Однозначными
- Проверяемыми
При составлении нефункциональных требований потерялись их идентификаторы. Теперь нужно распределить их по классам. Прочитайте каждое требование и выберите его класс из выпадающего списка.
Пользователь должен иметь возможность переключаться между языками приложения с помощью кнопки на любом экране приложения без перехода в настройки
Требования к внешним интерфейсам
Это требование указывает на то, что интерфейс приложения должен дать пользователю возможность сделать определённое действие, а значит, это требование к пользовательскому интерфейсу.
Если пользователь трижды неправильно ввёл пароль в рамках одной сессии, доступ к учётной записи такого пользователя должен быть заблокирован на 24 часа
Атрибуты качества
Это требование относится к классу атрибутов качества и описывает требование по обеспечению безопасности доступа к учётным данным пользователя.
После создания обращения в системе пользователь должен получать уведомления о создании обращения и обо всех изменениях статуса обращения на email, который указан в его профиле
Требования к внешним интерфейсам
Это требование относится к классу требований к внешним интерфейсам, а именно к коммуникационным интерфейсам. Описание указывает на необходимость коммуникации с пользователем через внешнюю систему. То есть после того, как пользователь создал обращение, он взаимодействует с продуктом через email.
ПО должно быть разработано на языке Java или Python для оптимальной работы с big data
Ограничения проектирования и реализации
Это требование накладывает ограничения на процесс разработки и проектирования решения. Например, в команде разработки должны присутствовать разработчики, которые могут писать на Java или Python, а также потребуются специальные среды исполнения такого программного кода. Поэтому требование относится к классу ограничений проектирования и реализации.
Максимально допустимое время восстановления системы после сбоев категории А должно составлять 1 час, после сбоев категории B — 2 часа. Восстановление системы определяется доступностью системы на уровне 99,5% в час
Атрибуты качества
Требование к устойчивости системы — это один из внешних атрибутов качества.
Подведём итоги
В этом уроке вы узнали подробнее о том, что:
- Заинтересованные лица часто описывают нефункциональные требования как характеристики продукта. Системный аналитик должен их конкретизировать и превратить именно в требования.
- «Приложение должно работать быстро» — скажут вам заинтересованные лица. Что значит «быстро»? Как мы будем измерять эту скорость?
- «Приложение должно работать на всех компьютерах». Что значит «на всех»? Каковы конкретные модели, размеры экранов, операционные системы этих компьютеров?
- Нефункциональные требования делятся на классы:
- Атрибуты качества
- Требования к внешним интерфейсам
- Ограничения проектирования и реализации
- Атрибуты качества — это характеристики системы, которые влияют на лёгкость выполнения задач пользователями, а также на эффективность работы продукта с точки зрения разработчика.
- Требования к внешним интерфейсам описывают любое взаимодействие ПО с внешним миром: пользователями, другими системами и оборудованием.
- Ограничения проектирования и реализации — это особенности реализации, которые могут существенно влиять на архитектуру, процесс разработки и внутренние атрибуты качества.
- Нефункциональные требования составляются так же, как и функциональные: в форме утверждений со словами «должен» или «должна».