Типовая ошибка: основная ошибка, которую тут можно сделать и которая не только не особо критична, но и является ошибкой лишь в контексте аналитика-пуриста, работающего по типовому усредненному подходу (т. е. это может вовсе и не быть ошибкой для аналитика, у которого в силу обязанностей смещены дефолтные грани работы) — это переступить грань между данным уровнем требований и следующим. Но следующего же нет, заметите вы. И будете правы, а потому мы будем говорить о границе между требованиями и деталями реализации (design specifics). Я уже ссылался на статью, в которой это подробно описано, но если вкратце: на базе требований эксперты из команды разработки будут реализовывать решение. Как понять, что требования закончены и дальнейшее уже — это их стезя и их область знаний? Если упрощенно, то как только вы лезете в ту область, для которой в команде разработки есть свой эксперт, вы сдвигаетесь из области требований в область деталей решения (за которые этот эксперт отвечает).
Пара примеров, которые в определенном контексте являются анти-примерами:
Если в команде есть UX-специалист или проектировщик User Interface (UI), то требование следующего вида будет неверным:
1.1. Когда пользователь открывает систему, система должна отобразить страницу «Вход», где пользователю необходимо ввести логин и пароль для входа в систему под своей учетной записью.
Почему неверным? Вы как аналитик оперируете в нем «страницами» и «вводом», а за концепцию UI и механизма взаимодействия пользователя с решением отвечаете не вы. Дав такое требование на вход упомянутому человеку, вы ограничите его в подборе решений. Более корректный вариант в таком случае — абстрагироваться от привязки к UI в требованиях и формулировать нечто в таком духе:
1.1. Когда пользователь открывает систему, система должна предоставить пользователю возможность указать логин и пароль для входа в систему под своей учетной записью.
Если в команде есть тот, кто отвечает за проектирование архитектуры системы и ее компонентов, и это не вы, то следующие примеры будут по аналогии не очень корректными:
Когда пользователь подтверждает вход, система должна проверить наличие в базе данных строки с учетной записью пользователя.
Когда пользователь подтверждает вход на фронтенде, система должна передать в бэкенд запрос на проверку корректности учетной записи.
На этапе разработки требований мы не знаем, как в плане компонентов будет реализована система. Да, мы можем это уточнить это у команды, но зачем, если корректнее будет абстрагировать требования от того, как они будут реализованы, и не лезть за границы своей работы?
Вы покупаете себе микроволновку
Решение не является информационной системой, а потому неактуально (если в программном компоненте микроволновки нет необходимости хранить информацию о, например, истории разогревов).
Собственный продукт для массового потребителя: термометры для измерения экстремальных температур
Данные:
1. Замер температуры
1.1. Дата замера (обязательный параметр, формат: DD/MM/YYYY)
1.2. Температура (обязательный параметр, формат: в градусах по шкале Цельсия, диапазон значений: от -100 до +100)
Программная система: веб-приложение для заказа обедов в офис компании для сотрудников
Данные:
1. Учетная запись пользователя
…
2. Меню на день
…
3. Блюдо из меню
…
4. Заказ
4.1. Автор заказа (обязательный параметр, ссылка на учетную запись).
4.2. Дата заказа (обязательный параметр, формат: DD/MM/YYYY).
4.3. Набор блюд в заказе (обязательный параметр, массив ссылок на блюда из меню).
4.4. Количество порций для каждого блюда (обязательный параметр, массив целых положительных чисел).
4.5. Итоговая стоимость (обязательный параметр, дробное положительное число с двумя знаками после запятой).
Вы покупаете себе микроволновку
Usability: Ручка микроволновки должна позволять ухватиться за нее всей рукой полностью (хорошо бы сюда еще размеры руки добавить, ага).
Performance: Микроволновка должна вмещать емкость не менее 30 см. в диаметре и не менее 20 см. высотой. Микроволновка должна нагреть блюдо весом X до температуры Y на мощности Z.
Availability/Reliability: Микроволновка должна выдерживать до 1 часа непрерывного разогревания на максимальной мощности.
Security: -
Installability: Упаковка микроволновки должна позволять распаковать ее голыми руками, без применения иных средств.
Safety: Ручка микроволновки не должна обжигать руки при любой мощности и длительности разогрева.
Efficiency: Микроволновка должна потреблять не более X электроэнергии в Y единицу времени в рабочем состоянии на максимальной мощности.
Portability: -
Reusability (для производителя): Ручка микроволновки должна соответствовать стандарту X, чтобы мы могли одни и те же ручки производить для всей нашей линейки микроволновок.
Scalability: -
Modifiability (хотя более корректно было бы обозвать Maintainability): Нагревательный элемент микроволновки должен соответствовать стандарту Z для облегчения сервисного обслуживания.
Verifiability: -
Собственный продукт для массового потребителя: термометры для измерения экстремальных температур
Usability: Термометр должен иметь кнопку запуска измерения размером 4*4 см., чтобы пользователи могли пользоваться ей в защитных перчатках.
Performance: Термометр должен выводить на дисплей температуру не позднее 3 сек. с точки инициации измерения.
Availability/Reliability: Термометр должен сохранять работоспособность в диапазоне температур окружающей среды от -100 до +100 градусов по Цельсию.
Security: -
Installability: -
Safety: -
Efficiency: Термометр должен потреблять не более 1% батареи за одно измерение температуры.
Portability: Термометр должен быть оборудован шнуром для переноски.
Reusability: -
Scalability: Термометр должен поддерживать батареи различной емкости (стандартов X, Y и Z)
Modifiability: -
Verifiability: -
Программная система: веб-приложение для заказа обедов в офис компании для сотрудников
Usability: Пользователь должен иметь возможность открыть меню за не более, чем 3 действия, с момента открытия стартовой страницы системы.
Performance: Время загрузки страниц не должно превышать 2-х секунд при пропускной способности локальной сети >= 100 Mbps.
Availability/Reliability: Система должна быть доступна 100% времени с 12 до 14 по рабочим дням.
Security: Система должна позволять просматривать созданные заказы только их авторам и пользователям с ролью «Отдел учета зарплаты».
Installability: -
Safety: Блюда, представленные в системе, должны иметь маркировку потенциальных аллергический реакций.
Efficiency: Данные системы должны занимать не более 1 Гб памяти на жестком диске сервера.
Portability: -
Reusability: Модуль аутентификации должен быть компонентом, пригодным для использования в будущих корпоративных веб-приложениях заказчика.
Scalability: Хостинг системы должен позволять увеличить количество одновременных пользователей до 300 без необходимости его смены или апгрейда.
Modifiability: Внесение изменений в цены блюд со стороны команды разработки должно быть возможным без остановки работы системы.
Verifiability: В системе должна быть скрытая для обычных пользователей возможность тестирования корректности отображения на различных устройствах.
Типовая ошибка: Как и с функциональными требованиями (и в той же степени (не)критичности), лучше абстрагироваться от реализации («как») и оставлять на переднем плане ценность требования для стейкхолдеров («что»). Это весьма размытая грань, но во всех анти-примерах ниже логика в том, что компетентно решат, верное ли очерчено решение внутри требования, эксперты из команды разработки, а не аналитик (если это выходит за рамки его зон ответственности).
Страница «Меню» должна быть доступна как пункт меню системы первого уровня.
Загрузка JS-скриптов не должна превышать 1,5 секунд при пропускной способности локальной сети >= 100 Mbps, а размер изображений не должен превышать 1 Mb в формате PNG.
При разработке системы необходимо использовать убермегаязык ProgrammingScript2.0, позволяющий обеспечить максимальную безопасность в контексте неавторизованного доступа к страницам.
Цены блюд должны храниться в XML-файлах, подхватываемых на лету без необходимости пересборки кода.
Вы покупаете себе микроволновку
Внутреннее покрытие микроволновки должно быть сделано из нетоксичного материала (в том контексте, что это порождается требованиями законодательства страны, в которой продукт будет производиться)
Собственный продукт для массового потребителя: термометры для измерения экстремальных температур
Тут можно придумать любое аналогичное примеру выше утверждение, которое ограничит свободу действий команды, занимающейся производством термометра. Не стоит только путать ограничения с любыми прочими требованиями к решению, т. к. ограничения касаются не функциональности или «нефункциональности» решения (даже, если диктуются государством или иными внешними обстоятельствами — практически все требования, будучи порожденными требованиями ЗЛ, диктуются «извне»). Ограничения касаются именно деталей реализации, т. е. технических способов реализовать поступившие в команду требования.
Программная система: веб-приложение для заказа обедов в офис компании для сотрудников
Система должна быть реализована на Java (в том контексте, что заказчик настаивает на этом исходя из того, что его специалисты далее будут поддерживать систему).
Код системы должен быть написан в нотации CamelCase (например, заказчик планирует отдать исходный код системы в будущем в государственный аудит, требующий такого подхода к коду)
Типовая ошибка: наиболее частая ошибка в контексте этих требований — это путаница между ограничением, наложенным на команду разработки, и их собственными решениями. Аналитики видят примеры, в которых фигурирует «реализована на Java», и решают, что в этих требованиях нужно описывать весь спектр используемых технологий и прочие подобные детали. Это не так, и у команды, если необходимо, есть своя документация для фиксации подобных деталей (т. к. это их область информации, а не аналитика). Аналитику нужно подметить только те моменты, когда подобные детали разработки существуют в виде навязанных извне ограничений, о которых команде необходимо знать и придерживаться.