Карты диалогов и таблицы «событие — реакция»
Коротко Карта диалогов показывает, как пользователь переходит между экранами или элементами диалога системы, при этом ни один из них не проектируется. Таблица «событие — реакция» перечисляет, что система должна сделать, когда что-то происходит в её окружении, с учётом состояния, в котором она находится. Обе модели — дешёвый способ найти требования, о которых никто не сказал.
По материалам: К. Вигерс, Дж. Битти, «Разработка требований к программному обеспечению», 3-е изд., гл. 12.
На этой странице
Главные идеи#
Карта диалогов#
Карта диалогов (dialog map) — диаграмма переходов состояний, применённая к пользовательскому интерфейсу. Каждый прямоугольник — элемент диалога: меню, окно, рабочая область, командная строка. Каждая стрелка — допустимый переход, подписанный условием, которое его запускает.
Карта намеренно не показывает ни компоновку, ни визуальное оформление — только структуру взаимодействия. Поэтому её можно рисовать ещё во время анализа требований, до того как кто-то начнёт проектировать экраны.
Вигерс и Битти называют четыре вида триггеров:
- действие пользователя, например щелчок, жест или сочетание клавиш;
- значение данных, например неверный ввод, который приводит к сообщению об ошибке;
- состояние системы, например в принтере кончилась бумага;
- сочетание перечисленного.
Глобальные переходы — например, справку, доступную с любого экрана, или кнопку «Назад» в браузере — авторы советуют не рисовать. Они загромождают карту; достаточно одного текстового требования о том, что такая функция есть.
Карта диалогов отличается от блок-схемы. Блок-схема показывает шаги процесса и точки принятия решений. Карта диалогов прячет решения внутри прямоугольников (обычно это выбор пользователя) и пишет условия на стрелках.
К родственным нотациям относятся более богатая карта навигации (navigation map) Константайна и Локвуда (Lockwood) и поток пользовательского интерфейса (user interface flow) Битти и Чена (Chen), который излагает ту же идею в виде дорожек.
Зачем это нужно? Пользователи, глядя на карту диалогов, замечают пропущенные пути. В примере из книги при рассмотрении карты выяснилось, что для отмены всего заказа нужен шаг подтверждения, иначе данные можно случайно потерять. Карта — не столько запись проектного решения, сколько ещё один способ найти пропущенные требования. Особенно она полезна для сложного варианта использования: набросайте её на доске во время семинара по выявлению требований и пройдите по ней вместе с участниками.
Таблица «событие — реакция»#
Событие — изменение или действие в окружении системы, на которое система должна отреагировать. Таблица «событие — реакция» (event-response table), которую также называют таблицей событий или списком событий, перечисляет каждое событие и требуемую реакцию на него. Это альтернатива вариантам использования там, где их не хватает: обычно в системах реального времени, где поведение зависит не столько от намерения пользователя, сколько от внешних сигналов и времени.
Вигерс и Битти различают три класса событий:
- Бизнес-событие — действие пользователя, которое запускает вариант использования.
- Сигнал — данные или прерывание извне: переключатель, датчик, касание, запрос от другой системы.
- Временное событие — наступает заданный момент или истекает период: например, ночная выгрузка или снятие показаний датчика каждые десять секунд.
Главное: реакция зависит и от события, и от текущего состояния системы. Пример из книги — автомобильные стеклоочистители: одно и то же действие с переключателем даёт разный результат в зависимости от того, работают ли уже дворники. Поэтому в таблице обычно есть столбцы для события, состояния системы и реакции, а при необходимости ещё для состояния после реакции, частоты события и данных, нужных для его обработки.
Чтобы найти события, Вигерс и Битти предлагают два пути: для каждого состояния анализируемого объекта спросить, какие события в него переводят, и просмотреть контекстную диаграмму в поисках внешних сущностей, которые могут что-то запустить.
Как применять#
Карта диалогов:
- Возьмите один вариант использования или одну задачу пользователя.
- Нарисуйте прямоугольник для каждого нужного пользователю элемента диалога; называйте его по назначению («Выбор времени»), а не по дизайну экрана.
- Нарисуйте стрелки для всех допустимых переходов и подпишите на каждой триггер.
- Пройдите с пользователями обычные, альтернативные и ошибочные пути. Для каждого прямоугольника спросите: как я сюда попадаю, как ухожу, что будет, если я захочу отменить действие или вернуться?
- Каждый новый путь превратите в требование или вопрос.
Таблица «событие — реакция»:
- Выпишите внешние сущности с контекстной диаграммы и события, которые может вызвать каждая из них.
- Добавьте временные события: сроки, расписания, тайм-ауты.
- Перечислите состояния системы или главного объекта.
- Для каждого значимого сочетания события и состояния запишите требуемую реакцию.
- Проверьте пробелы: события, на которые в каком-то состоянии нет реакции, и состояния, в которые не ведёт ни одно событие.
Пример#
Карта диалогов для онлайн-записи в «Мастерской» (вымышленной сети веломастерских):
- Главная → Выбор мастерской (пользователь выбирает «Записаться на ремонт»)
- Выбор мастерской → Выбор времени (мастерская выбрана)
- Выбор времени → Данные о велосипеде (время выбрано)
- Выбор времени → Время занято (за это время кто-то другой уже забронировал его: условие по данным)
- Данные о велосипеде → Подтверждение брони (данные корректны)
- Подтверждение брони → Главная (пользователь отменяет)
Проходя по карте, управляющий мастерской спрашивает, что будет, если клиент отменит бронь на шаге Подтверждение брони, уже написав длинное описание неисправности. Команда добавляет требование: перед тем как удалить введённые данные, запрашивать подтверждение.
Таблица «событие — реакция» для уведомлений о ремонте:
| Событие | Класс | Состояние системы | Реакция |
|---|---|---|---|
| Механик отмечает ремонт выполненным | Бизнес-событие | Идёт ремонт | Установить статус «Готов»; уведомить клиента |
| Механик отмечает ремонт выполненным | Бизнес-событие | Ждёт запчасть | Отклонить; попросить механика сначала отметить поступление запчасти |
| Поставщик подтверждает отправку запчасти | Сигнал | Ждёт запчасть | Обновить ожидаемую дату; сообщить клиенту о задержке или новой дате |
| Ежедневно в 18:00 | Временное событие | Готов, не забран 3 дня | Отправить клиенту напоминание |
Вторая строка появилась только потому, что аналитик спросил, что то же самое событие означает в другом состоянии.
Источники и что почитать#
- K. Wiegers, J. Beatty. Software Requirements, 3rd ed. Microsoft Press, 2013. Рус. изд.: К. Вигерс, Дж. Битти. Разработка требований к программному обеспечению, 3-е изд. М.: Русская редакция; СПб.: БХВ-Петербург, 2014. Гл. 12 (карты диалогов; таблицы «событие — реакция»).