Aaronaught уже получил отличный ответ, но поскольку были и другие, уже удаленные ответы, которые были совершенно неверными в отношении того, что является нефункциональным требованием, я думаю, что было бы полезно добавить несколько объяснений, чтобы избежать ошибок в том, что нефункциональное требование есть.
Нефункциональное требование - это «качество или свойство, которым должен обладать продукт» ¹. Джеймс Тейлор говорит, что нефункциональное требование «[...] является [тем не менее] требованием, и оно важно для клиента - иногда даже важнее, чем функциональное требование» . Затем он приводит два примера: логотип продукта, а также точность и надежность оборудования. Оба эти примера очень хорошо показывают, что:
- Нефункциональные требования не похожи на маркетинговые jibber-jabber: «Интернет важен в наше время, и мы хотим иметь веб-сайт».
- Нефункциональные требования касаются клиентов, так как они могут сильно повлиять на их производительность и саму возможность использования продукта.
- Нефункциональные требования абсолютно объективны.
Последний пункт имеет важное значение. Если требование субъективно, оно не имеет ничего общего в списке требований. Было бы невозможно построить проверочные тесты из чего-то субъективного . Единственная цель списка требований состоит в том, чтобы перечислить недвусмысленные ожидания клиента. «Я хочу, чтобы этот квадрат был красным» - это требование. «Я хочу, чтобы этот квадрат был хорошего цвета» - это желание, которое требует объяснения.
Помните, что список требований подобен договору (и в большинстве случаев является частью договора). Он подписан заказчиком и компанией-разработчиком, и в случае судебного разбирательства он будет использоваться на законных основаниях для определения того, правильно ли вы выполнили свою работу. Что если я закажу вам программный продукт, укажите, что «продукт должен быть отличным», и откажитесь платить, когда продукт будет готов, потому что для меня то, что вы на самом деле сделали, не является отличным продуктом?
Итак, давайте посмотрим несколько примеров.
1. Программный продукт реагирует на конечного пользователя.
Это не требование. Не функционал. Не нефункциональный. Это просто не требование. Вообще. Это имеет нулевое значение. Вы не можете проверить, соответствует ли система программного обеспечения этому требованию во время проверочного тестирования. Ни вы - отдел QA, ни заказчик.
2. Перезагрузка пользовательской статистики выполняется 90% времени ниже 100 мс. при тестировании на машине с характеристиками, указанными в приложении G, часть 2, и нагрузкой на ЦП ниже 10%, для памяти ниже 50% и без активных операций чтения / записи диска.
Это требование. Если приложение G, часть 2, достаточно точное, я могу взять машину с аналогичным оборудованием и выполнить тест проверки в отделе контроля качества, и я всегда получу двоичный результат: пройден или не пройден.
Это функциональное требование? Нет. Это не указывает, что должна делать система. Вероятно, ранее существовало функциональное требование, указывающее, что программное приложение должно иметь возможность перезагрузить пользовательскую статистику.
Это нефункциональное требование? Это. Он определяет свойство, которое должен иметь продукт, то есть максимальное / среднее время отклика с учетом процентного порога.
3. Приложение написано на C #.
Это требование? Мы действительно не знаем без контекста. Это может быть желание ведущего разработчика, который хочет, вставив это требование, избегать в дальнейшем обсуждения со своими коллегами по поводу используемого языка. Это также может быть требование, основанное на аппаратном / программном обеспечении, устаревших или совместимых элементах. Мы не знаем
4. Кодовая база C # продукта соответствует минимальным рекомендуемым правилам Microsoft и правилам глобализации Microsoft.
Это странная вещь. Лично я бы предпочел не называть это требованием, а поместить его в отдельный документ с указанием стандартов и лучших практик.
5. Главное окно приложения имеет синюю (# 00f) рамку размером 10px с розовыми (#fcc) заполненными кружками, причем эти кружки располагаются на внутреннем крае рамки и имеют диаметр 3px, отделенные друг от друга на 20px.
Это требование и нефункциональное. Он определяет что-то, что мы можем тестировать во время проверочного тестирования, и определяет свойство продукта, а не то , для чего он предназначен.
6. Система слежения за транспортным средством измеряет скорость с точностью до ± 0,016 миль в час.
Также нефункциональное требование. Это дает измеримый порог точности системы. Он не говорит, что должна делать система, но говорит, насколько точно она выполняет свою работу. Но ждать? Это говорит о том, что система отслеживания транспортных средств измеряет скорость, не так ли? Значит, это тоже функциональное требование? Ну, нет, так как мы делаем акцент на точности измерения, а не на том факте, что измерение сделано.
7. Система слежения за транспортным средством измеряет скорость автомобиля.
Теперь это функциональное требование. Это не говорит о том, как работает система, но что она делает. Благодаря функциональным требованиям мы могли бы узнать, что система слежения за транспортным средством измеряет скорость, заряд аккумулятора, давление, и я не знаю, что и если свет включен или нет.
8. Страницы сайта занимают 850 мс. загружать.
Это не требование. Это пытается быть одним, но совершенно недействительным. Как бы вы это оценили? Какие страницы? Все? Протестировано через локальную сеть 1 Гбит / с на четырехъядерном клиентском компьютере и восьмиядерном сервере с твердотельными накопителями, используемыми на 2%, или через модем старого и дрянного ноутбука, пока веб-сайт размещается на небольшом сервере, используемом на 99%. ? Что означает «загрузить»? Это означает загрузку страницы? Загрузка и отображение? Отправлять запрос POST с некоторыми большими данными, затем загружать ответ и отображать его?
В заключение, нефункциональное требование - это всегда требование, которое означает, что оно описывает что-то абсолютно объективное и может быть проверено с помощью автоматического или ручного проверочного теста, но вместо того, чтобы рассказать, что делает система, оно объясняет, как система что-то делает или как сама система .
¹ Управление проектами в области информационных технологий: применение стратегий управления проектами к программным, аппаратным и интеграционным инициативам, Джеймс Тейлор, ISBN: 0814408117.