DrakonHub будет навсегда отключен 1 декабря 2024 Узнать больше...

Блог >

Как разработать требования к программному обеспечению на языке ДРАКОН

Автор: Степан Митькин

21 мая 2018 г.

Требуй чёткой постановки задачи

Разработка требований к программному обеспечению начинается с постановки задачи. Чётко поставленная задача — необходимое входное условие для составления требований. Если клиент не предоставил описание задачи, такое описание придётся составить и согласовать с клиентом.

Описание делают коротким, желательно в виде пунктов.

Пример:

  • Реализовать вход с паролем на вебсайт.
  • Во время входа заменить текущую сессию на новую.
  • После успешного входа связать новую сессию с записью пользователя.
  • После успешного входа показать персонализированную начальную страницу.
  • После успешного входа закрыть все остальные сессии пользователя.
  • Система автоматически закрывает сессию после бездействия пользователя.
  • Если неправильный пароль введён 3 раза, заблокировать пользователя.
  • Сделать паузу между проверками пароля одного пользователя в 3 секунды.

Изображения и списки вместо прозы

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

В состав требований будут входить следующие материалы:

  • ДРАКОН-схемы для описания поведения программного обеспечения. Основная сложность программ заключается в поведении, поэтому ДРАКОН-схемы будут составлять большую часть требований.
  • Описание логической структуры данных, с которыми будут работать алгоритмы программы.
  • Форматы входных и выходных данных.
  • Эскизы для графического интерфейса пользователя.
  • Приёмочные тесты, или acceptance tests.

Эта статья рассказывает, как рисовать ДРАКОН-схемы для требований к программному обеспечению. Как составлять приёмочные тесты из ДРАКОН-схем, смотрите здесь: ссылка.

Найди входные точки

Рассматривайте программу как пассивный чёрный ящик, который ничего не делает, пока не получит толчок из внешнего мира. Во внешнем мире происходят события, которые приводят программу в движение. Это входные точки в систему.

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

Входные точки разбивают единое полотно программы на отдельные куски. Действует принцип "разделяй и властвуй".

Важно найти все входные точки. Это не всегда просто, так как некоторые входные точки не очевидны.

Возьмём пример с входом на сайт. Первая входная точка — "Вход с паролем". Пользователь нажимает кнопку "Войти", чтобы залогиниться. Здесь всё понятно.

"Система автоматически закрывает сессию после бездействия пользователя." Данное утверждение скрывает дополнительную входную точку — автоматическое закрытие сессии. Это событие примечательно тем, что произойдёт в будущем.

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

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

Входные точки:

  • Вход с паролем
  • Автоматическое закрытие сессии
  • Отложить автоматическое закрытие сессии

Нарисуй ДРАКОН-схему для каждой входной точки

Приход внешнего толчка во входную точку запускает процесс. Алгоритм этого процесса описывают одной ДРАКОН-схемой верхнего уровня и, возможно, несколькими подчинёнными ДРАКОН-схемами.

Разложи процесс на шаги — приказы и вопросы

Чтобы создать ДРАКОН-схему процесса, изобразите поведение системы в виде последовательности приказов и вопросов. Соблюдайте принцип: одна икона — одна мысль. Читайте руководство по рисованию ДРАКОН-схем здесь: ссылка.

Рассмотрим входную точку "Вход с паролем" из нашего примера.

Вход с паролем
Вход с паролем

Царская дорога

Царская дорога, или happy path, идёт сверху-вниз по главной вертикали:

  • Приказ: получить имя и пароль от пользователя.
  • Приказ: найти пользователя в базе.
  • Вопрос: пользователь найден? Ответ: да.
  • Приказ: проверить пароль.
  • Вопрос: проверка пароля завершилась успехом? Ответ: да.
  • Приказ: подключить сессию к пользователю.
  • Приказ: отложить автоматическое закрытие сессии.
  • Приказ: показать персонализированную главную страницу.

Менее успешный сценарий уходит вправо:

  • Вопрос: пользователь найден? Ответ: нет.
  • Приказ: показать сообщение об ошибке.
  • Приказ: через три секунды дать пользователю попробовать ещё раз.

 Стрелки — только для циклов

Стрелки — графические детали, которые отвлекают внимание и занимают место. Для линейного течения событий в ДРАКОНе не применяют стрелки. В ДРАКОНе время течёт вниз. Так как направление движения процесса известно, простых линий достаточно.

Стрелка на ДРАКОН-схеме означает цикл и встречается редко, поэтому циклы бросаются в глаза.

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

 Отбрось ненужные детали

ДРАКОН-схема показывает последовательность действий системы точно и однозначно, но без лишних технических деталей и формализмов.

В нашем примере икона "Ввод" задаёт, что процесс получает данные извне — от пользователя.

Получение данных от пользователя в иконе Ввод
Получение данных от пользователя в иконе Ввод

Схема не объясняет, как работают виджеты для имени пользователя и пароля, показываются ли эти виджеты одновременно или по очереди. Читатель узнаёт только суть: пользователь вводит данные в систему.

Аналогично, икона "Вывод" отправляет данные наружу из процесса — сообщение об ошибке пользователю. В каком месте на экране появляется сообщение и с каким шрифтом — не важно на этом уровне абстракции.

Икона "Пауза" говорит: процесс замирает на три секунды, и пользователь не влияет на ход процесса в это время. ДРАКОН-схема "Вход с паролем" не указывает, как реализовать паузу. Возможно, вся страница или только некоторые виджеты будут "заморожены" на время паузы. Такие технические детали не требуются для понимания работы системы в целом. Если нужно, эти детали можно описать в требованиях более низкого уровня.

Икона Пауза
Икона Пауза

Избегай переменных и параметров

Программисты любят переменные. Программисты кладут в переменные значения и передают переменные в аргументы функций. Переменные превращают требования в нечитаемый программный код. Место переменных — в программах, не в требованиях.

Избегайте переменных в требованиях, если можете. Это относится и к передаче параметров в подчинённые ДРАКОН-схемы.

Процедура "Проверить пароль" принимает в составе входных данных пользователя и пароль. ДРАКОН-схема "Проверить пароль" показывает это в иконе "Параметры".

Входные данные в иконе параметры
Входные данные в иконе параметры

В ДРАКОН-схеме "Вход с паролем" икона "Вставка" вызывает подчинённую ДРАКОН-схему "Проверить пароль", но в тексте иконы нет переменных "пароль" и "пользователь". В иконе "Вставка" есть только название подчинённой схемы — "Проверить пароль".

При вызове подчинённой ДРАКОН-схемы параметры не передаются
При вызове подчинённой ДРАКОН-схемы параметры не передаются

Если щёлкнуть на этой иконе правой кнопкой мыши, в контекстном меню появится возможность перейти к схеме "Проверить пароль". DrakonHub автоматические вставил эту ссылку, так как нашёл имя схемы в тексте иконы.

Чем правее, тем хуже

Рассмотрим процедуру "Проверить пароль". Царская дорога на этой диаграмме идёт прямо, без поворотов по главной вертикали:

  • Вопрос: пользователь заблокирован? Ответ: нет.
  • Вопрос: с прошлой проверки пароля прошло более 3 секунд? Ответ: да.
  • Вопрос: пароль правильный? Ответ: да.
  • Приказ: считать проверку пароля успешной.

Кроме наилучшего сценария, через диаграмму проходят и другие, менее успешные пути. Правило "чем правее, тем хуже" предписывает сортировать пути через диаграмму. Чем менее удачно складывается сценарий, тем правее этот сценарий расположен на диаграмме.

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

Чем правее, тем хуже. Пример
Чем правее, тем хуже. Пример

Сообщай намерение в приказах и вопросах

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

  • обнулить в начале;
  • сравнивать значение счётчика с числом 3, когда пароль неправильный;
  • увеличивать значение при неудачных попытках входа.

Не программируйте в требованиях, уберите переменные. Вместо того, чтобы жонглировать значениями переменных, поместите в вопрос или приказ намерение, желаемый результат этого шага. В нашем примере намерение — выяснить, совершил ли пользователь 3 неудачных попытки входа. Разработчики догадаются, как реализовать это намерение.

Смотрите также

Визуальный язык ДРАКОН

Инструкция по рисованию ДРАКОН-схем

Как составить приёмочные тесты из ДРАКОН-схемы

Учим ДРАКОН по примерам

Иконы языка ДРАКОН

Видео: Как нарисовать ДРАКОН-схему