Функциональные спецификации
Одна из претензий к функциональным спецификациям состоит в том, что они не отражают реальный продукт. В процессе реализации многое меняется, и все отдают себе в этом отчет - такова природа работы над техническими продуктами. Иногда то, что должно было работать, не работает или, что вероятнее, работает не совсем так, как вы хотели. Однако это не повод объявлять спецификации заведомо проигрышной затеей и отказываться от них. Наоборот, этот факт лишь подчеркивает необходимость создания спецификаций и поддержания их в актуальном состоянии. Если по ходу работы над проектом что-то меняется, нельзя сдаваться и заявлять о тщетности написания спецификаций. Правильное решение - не лениться синхронизировать спецификации с ходом разработки.
Независимо от размера и сложности проекта при формулировании требований следует руководствоваться некоторыми общими правилами.
Будьте позитивны. Вместо описания плохого или неправильного поведения системы опишите ее действия, предотвращающие нежелательный поворот событий. Например, вместо
Система не позволит купить воздушный змей без веревки.
Лучше написать
При попытке купить воздушный змей без веревки система направит пользователя на страницу, где он сможет приобрести веревку.
Будьте конкретны. Только оставив как можно меньше путей для неправильной интерпретации требований, мы сможем определить, выполнены ли эти требования.
Сравните эти примеры.
1. Сайт будет доступен людям с ограниченными физическими возможностями.
2. Сайт будет удовлетворять Разделу 508 Акта о людях с ограниченными возможностями.
Навскидку первый пример производит впечатление четко сформулированного требования, но даже без глубокого анализа видно, какие пробелы он содержит. Что значит «доступен»? Если все картинки на сайте сопровождаются текстовыми описаниями, этого достаточно? Кто считается человеком с ограниченными физическими возможностями? Если на сайте не воспроизводится звук, значит ли это, что сайт доступен для глухих?
К счастью, Конгресс США уже выработал эти определения. Второй пример отсылает нас к конкретному юридическому документу, подробно формулирующему наши цели. Убрав возможность различных интерпретаций, второй вариант требования исключает любые споры, которые могли бы возникнуть в течение или после работы над проектом.
Избегайте субъективных формулировок. Это просто еще один способ выражаться ясно и исключать из требований двусмысленность (а значит, возможность разночтений).
Вот очень субъективное утверждение:
Стиль сайта будет броским и ярким.
Требования обязаны быть проверяемыми, то есть должен существовать способ продемонстрировать, что требования нарушены. Явно показать, что сайту присущи такие субъективные качества, как «броский» и «яркий», - трудная задача. Мое представление о броскости может отличаться от вашего и почти наверняка не имеет ничего общего с мнением президента компании.
Сказанное не означает, что невозможно потребовать от сайта броскости. Вам просто нужно сформулировать критерии оценки:
Сайт должен быть броским с точки зрения Уэйна - клерка, разбирающего почту.
Уэйн никаким образом не участвует в проекте, но спонсор проекта полагается на его представления о том, что является броским. Будем надеяться, что эти представления не расходятся с мнением пользователей. Однако требования остаются довольно произвольными, поскольку мы полагаемся на суждение Уэйна, а не на объективно сформулированные критерии. Возможно, лучше всего будет такое требование:
Внешний вид сайта должен соответствовать документу, содержащему рекомендации о визуальном стиле бренда компании.
Понятие «броскость» попросту исчезло из требований. Вместо этого мы имеем ясную и однозначную ссылку на существующие рекомендации. Чтобы решить, насколько броским является корпоративный стиль компании, ответственный сотрудник отдела маркетинга может проконсультироваться с Уэйном, посоветоваться со своей дочерью-подростком или даже поинтересоваться результатами исследования пользовательской аудитории. Это его дело. Зато мы теперь всегда уверенно скажем, выполнены ли наши требования.
Мы также можем устранить субъективность, сформулировав некоторые требования в количественных терминах. Подобно тому как метрики успешности делают измеримыми стратегические цели, формулировка требований в количественных терминах поможет нам понять, удовлетворены ли эти требования. Например, вместо утверждения, что система должна иметь «высокую производительность», следует потребовать, чтобы она была в состоянии одновременно обслужить не менее 1000 пользователей. Если у конечного продукта поле со счетчиком пользователей будет трехзначным, мы скажем, что требование не выполнено.