Как найти пропущенные требования
Коротко Пропущенные требования — самые трудные для обнаружения дефекты, потому что на странице нечего рассматривать. Вигерс и Битти описывают два вида невысказанных требований, признаки того, что выявление (elicitation) пока достаточно полно, и восемь проверок, которые находят пробелы систематически, а не за счёт внимательного перечитывания.
По материалам: К. Вигерс, Дж. Битти, «Разработка требований к программному обеспечению», 3-е изд., гл. 7.
На этой странице
Главные идеи#
Когда остановить выявление (на время)#
Полной завершённости вы не достигнете никогда, особенно в гибкой разработке. Вигерс и Битти перечисляют практические сигналы того, что пора двигаться дальше:
- Пользователи не могут придумать новых вариантов использования или историй.
- Новые предложения оказываются вариациями уже имеющихся.
- Пользователи повторяют вопросы, которые уже обсуждались.
- Новые идеи выходят за границы проекта или получают низкий приоритет.
- Пользователи сами предлагают отложить идеи на потом.
- Разработчики и тестировщики задают всё меньше уточняющих вопросов.
Подразумеваемые и неявные требования#
- Подразумеваемые требования (assumed requirements) — то, чего люди ждут, не говоря об этом, потому что это кажется очевидным. Что очевидно заказчику, не всегда очевидно разработчику.
- Неявные требования (implied requirements) логически следуют из сформулированного требования, но нигде не записаны. Если пользователи могут сохранить наполовину заполненную веб-форму, им нужно и открыть этот черновик снова. В книге описан портал, где никто не определил навигацию по иерархии контента; разработчики сделали плоский список с постраничным выводом по 20 элементов, и некоторые материалы приходилось искать, пролистывая больше 50 страниц.
Чтобы вывести на поверхность и те и другие, спрашивайте: «Что вы считаете само собой разумеющимся?», задавайте открытые, не зависящие от контекста вопросы («Какая точность нужна продукту?») вместо вопросов «да или нет», проводите повторные интервью и привлекайте заинтересованные стороны, которые ещё не участвовали. Свежий взгляд находит пробелы, которые не находит перечитывание.
Восемь проверок на пропущенные требования#
- Декомпозируйте высокоуровневые требования, пока они не станут простыми. Расплывчатые формулировки верхнего уровня оставляют место для расхождения между тем, что представляет себе заказчик, и тем, что делает разработчик.
- Проверьте охват классов пользователей. Каждое пользовательское требование должно приносить пользу хотя бы одному классу пользователей, и каждый класс пользователей должен быть услышан.
- Трассируйте функциональные требования к их источнику: пользовательскому требованию, системному требованию или бизнес-правилу. Так видно, описано ли на самом деле всё необходимое.
- Проверьте граничные значения. Одно требование для сумм меньше 100 $ и другое для сумм больше 100 $ оставляют неопределённой ровно сумму 100 $. Пропущенные требования часто прячутся на краях диапазонов.
- Представьте информацию по-другому. Текст скрывает пробелы; на диаграмме недостающая стрелка или переход видны сразу.
- Проверьте сложную логику. Сочетания И, ИЛИ и НЕ почти всегда неполны, и чаще всего пропущена ветка «иначе». Разложите логику в таблицу или дерево решений: они заставляют перечислить все сочетания.
- Используйте чек-лист стандартных функциональных областей, о которых легко забыть: журналирование ошибок, резервное копирование и восстановление, безопасность доступа, отчёты, печать, предварительный просмотр, пользовательские настройки.
- Проведите CRUD-проверку по модели данных. Для каждой сущности данных убедитесь, что там, где это имеет смысл, есть способ её создать (Create), прочитать (Read), изменить (Update) и удалить (Delete). Отсутствующая операция над важной сущностью — типичный симптом пропущенного требования.
Ещё одна проверка — пройти по атрибутам качества один за другим; см. Атрибуты качества программного обеспечения.
Два предостережения#
- Избегайте аналитического паралича. Цель — приемлемый уровень риска, а не 100% полноты.
- Уравновешивайте голоса. Не позволяйте самому громкому заказчику доминировать. Вигерс и Битти советуют, чтобы за каждым сторонником продукта стояла группа пользователей того же класса.
Авторы также отмечают, что граница между «что» и «как» размыта. Ранние наброски проектных решений и прототипы помогают выявлению, если вы предупредите участников, что они иллюстрируют идею и не являются окончательным дизайном.
Как применять#
- После каждого раунда выявления обсудите с командой сигналы остановки.
- В конце каждого интервью и семинара задавайте вопрос о том, что считается само собой разумеющимся.
- Постройте матрицу CRUD для основных сущностей данных и ищите пустые ячейки.
- Для каждой крупной области нарисуйте хотя бы одну модель (процесса, потоков данных или состояний) и ищите потоки, которые никуда не ведут.
- Каждое правило с несколькими условиями оформите таблицей решений.
- Раз за выпуск проходите чек-лист стандартных областей и список атрибутов качества.
- Пригласите на ревью одну новую заинтересованную сторону именно для того, чтобы искать недостающее.
Пример#
«Мастерская», вымышленная сеть веломастерских, строит матрицу CRUD для своей системы бронирования и ремонта:
| Сущность | Создание (C) | Чтение (R) | Изменение (U) | Удаление (D) |
|---|---|---|---|---|
| Бронь | Клиент, стойка приёма | Клиент, стойка приёма, механик | — | Клиент (отмена) |
| Ремонтный заказ | Стойка приёма | Все сотрудники, клиент (статус) | Механик | — |
| Заказ запчастей | Система, управляющий мастерской | Управляющий мастерской | — | — |
| Клиент | Клиент, стойка приёма | Стойка приёма | Клиент | — |
Пустые ячейки порождают вопросы:
- Бронь / Изменение. Перенести бронь никто не может. Клиенты будут звонить, чтобы сдвинуть время, а это противоречит бизнес-цели. Новое требование: клиент может перенести бронь.
- Заказ запчастей / Изменение и Удаление. Что, если поставщик пришлёт не ту запчасть или заказ на ремонт отменят? Добавляются требования об изменении и отмене заказов.
- Клиент / Удаление. Может ли клиент закрыть свою учётную запись и что будет с его историей ремонтов? Этот вопрос уходит владельцу как открытый.
Проверка граничных значений находит пробел в согласовании на сумме 100 $: ремонты «меньше 100 $» согласуются автоматически, а ремонты «больше 100 $» требуют согласия клиента. Чек-лист стандартных областей добавляет печать бирки заказа, которую крепят к велосипеду.
Чек-лист#
- Сигналы остановки обсуждены с командой.
- На каждой встрече задан вопрос «Что вы считаете само собой разумеющимся?».
- Каждый класс пользователей услышан и получает пользу хотя бы от одного требования.
- Каждое функциональное требование трассируется к источнику.
- Границы диапазонов проверены на пробелы и пересечения.
- Логика с несколькими условиями показана в таблицах решений, включая «иначе».
- Матрица CRUD заполнена, или пробелы в ней объяснены.
- Стандартные функциональные области проверены.
- Хотя бы один свежий рецензент искал пробелы.
Источники и что почитать#
- K. Wiegers, J. Beatty. Software Requirements, 3rd ed. Microsoft Press, 2013. Рус. изд.: К. Вигерс, Дж. Битти. Разработка требований к программному обеспечению, 3-е изд. М.: Русская редакция; СПб.: БХВ-Петербург, 2014. Гл. 7.