Инженерия требований

Карты диалогов и таблицы «событие — реакция»

Коротко Карта диалогов показывает, как пользователь переходит между экранами или элементами диалога системы, при этом ни один из них не проектируется. Таблица «событие — реакция» перечисляет, что система должна сделать, когда что-то происходит в её окружении, с учётом состояния, в котором она находится. Обе модели — дешёвый способ найти требования, о которых никто не сказал.

По материалам: К. Вигерс, Дж. Битти, «Разработка требований к программному обеспечению», 3-е изд., гл. 12.

На этой странице

Главные идеи#

Карта диалогов#

Карта диалогов (dialog map) — диаграмма переходов состояний, применённая к пользовательскому интерфейсу. Каждый прямоугольник — элемент диалога: меню, окно, рабочая область, командная строка. Каждая стрелка — допустимый переход, подписанный условием, которое его запускает.

Карта намеренно не показывает ни компоновку, ни визуальное оформление — только структуру взаимодействия. Поэтому её можно рисовать ещё во время анализа требований, до того как кто-то начнёт проектировать экраны.

Вигерс и Битти называют четыре вида триггеров:

  • действие пользователя, например щелчок, жест или сочетание клавиш;
  • значение данных, например неверный ввод, который приводит к сообщению об ошибке;
  • состояние системы, например в принтере кончилась бумага;
  • сочетание перечисленного.

Глобальные переходы — например, справку, доступную с любого экрана, или кнопку «Назад» в браузере — авторы советуют не рисовать. Они загромождают карту; достаточно одного текстового требования о том, что такая функция есть.

Карта диалогов отличается от блок-схемы. Блок-схема показывает шаги процесса и точки принятия решений. Карта диалогов прячет решения внутри прямоугольников (обычно это выбор пользователя) и пишет условия на стрелках.

К родственным нотациям относятся более богатая карта навигации (navigation map) Константайна и Локвуда (Lockwood) и поток пользовательского интерфейса (user interface flow) Битти и Чена (Chen), который излагает ту же идею в виде дорожек.

Зачем это нужно? Пользователи, глядя на карту диалогов, замечают пропущенные пути. В примере из книги при рассмотрении карты выяснилось, что для отмены всего заказа нужен шаг подтверждения, иначе данные можно случайно потерять. Карта — не столько запись проектного решения, сколько ещё один способ найти пропущенные требования. Особенно она полезна для сложного варианта использования: набросайте её на доске во время семинара по выявлению требований и пройдите по ней вместе с участниками.

Таблица «событие — реакция»#

Событие — изменение или действие в окружении системы, на которое система должна отреагировать. Таблица «событие — реакция» (event-response table), которую также называют таблицей событий или списком событий, перечисляет каждое событие и требуемую реакцию на него. Это альтернатива вариантам использования там, где их не хватает: обычно в системах реального времени, где поведение зависит не столько от намерения пользователя, сколько от внешних сигналов и времени.

Вигерс и Битти различают три класса событий:

  • Бизнес-событие — действие пользователя, которое запускает вариант использования.
  • Сигнал — данные или прерывание извне: переключатель, датчик, касание, запрос от другой системы.
  • Временное событие — наступает заданный момент или истекает период: например, ночная выгрузка или снятие показаний датчика каждые десять секунд.

Главное: реакция зависит и от события, и от текущего состояния системы. Пример из книги — автомобильные стеклоочистители: одно и то же действие с переключателем даёт разный результат в зависимости от того, работают ли уже дворники. Поэтому в таблице обычно есть столбцы для события, состояния системы и реакции, а при необходимости ещё для состояния после реакции, частоты события и данных, нужных для его обработки.

Чтобы найти события, Вигерс и Битти предлагают два пути: для каждого состояния анализируемого объекта спросить, какие события в него переводят, и просмотреть контекстную диаграмму в поисках внешних сущностей, которые могут что-то запустить.

Как применять#

Карта диалогов:

  1. Возьмите один вариант использования или одну задачу пользователя.
  2. Нарисуйте прямоугольник для каждого нужного пользователю элемента диалога; называйте его по назначению («Выбор времени»), а не по дизайну экрана.
  3. Нарисуйте стрелки для всех допустимых переходов и подпишите на каждой триггер.
  4. Пройдите с пользователями обычные, альтернативные и ошибочные пути. Для каждого прямоугольника спросите: как я сюда попадаю, как ухожу, что будет, если я захочу отменить действие или вернуться?
  5. Каждый новый путь превратите в требование или вопрос.

Таблица «событие — реакция»:

  1. Выпишите внешние сущности с контекстной диаграммы и события, которые может вызвать каждая из них.
  2. Добавьте временные события: сроки, расписания, тайм-ауты.
  3. Перечислите состояния системы или главного объекта.
  4. Для каждого значимого сочетания события и состояния запишите требуемую реакцию.
  5. Проверьте пробелы: события, на которые в каком-то состоянии нет реакции, и состояния, в которые не ведёт ни одно событие.

Пример#

Карта диалогов для онлайн-записи в «Мастерской» (вымышленной сети веломастерских):

  • Главная → Выбор мастерской (пользователь выбирает «Записаться на ремонт»)
  • Выбор мастерской → Выбор времени (мастерская выбрана)
  • Выбор времени → Данные о велосипеде (время выбрано)
  • Выбор времени → Время занято (за это время кто-то другой уже забронировал его: условие по данным)
  • Данные о велосипеде → Подтверждение брони (данные корректны)
  • Подтверждение брони → Главная (пользователь отменяет)

Проходя по карте, управляющий мастерской спрашивает, что будет, если клиент отменит бронь на шаге Подтверждение брони, уже написав длинное описание неисправности. Команда добавляет требование: перед тем как удалить введённые данные, запрашивать подтверждение.

Таблица «событие — реакция» для уведомлений о ремонте:

Событие Класс Состояние системы Реакция
Механик отмечает ремонт выполненным Бизнес-событие Идёт ремонт Установить статус «Готов»; уведомить клиента
Механик отмечает ремонт выполненным Бизнес-событие Ждёт запчасть Отклонить; попросить механика сначала отметить поступление запчасти
Поставщик подтверждает отправку запчасти Сигнал Ждёт запчасть Обновить ожидаемую дату; сообщить клиенту о задержке или новой дате
Ежедневно в 18:00 Временное событие Готов, не забран 3 дня Отправить клиенту напоминание

Вторая строка появилась только потому, что аналитик спросил, что то же самое событие означает в другом состоянии.

Источники и что почитать#

  • K. Wiegers, J. Beatty. Software Requirements, 3rd ed. Microsoft Press, 2013. Рус. изд.: К. Вигерс, Дж. Битти. Разработка требований к программному обеспечению, 3-е изд. М.: Русская редакция; СПб.: БХВ-Петербург, 2014. Гл. 12 (карты диалогов; таблицы «событие — реакция»).