Секрет древней игры го. Почему компьютер до сих пор не обыграл человека? Алгоритмическое представление правил игры Как их описывать




Следующие заметки будут полезны начинающим бизнес аналитикам, системным аналитикам, а также студентам.

Что такое Use Case

На собеседовании порой можно услышать следующее определение «Это такая UML-диаграмма с человечками и овалами». Давайте разберемся, что это такое, и рассмотрим несколько простых примеров.

Use Case описывает сценарий взаимодействия участников (как правило - пользователя и системы). Участников может быть 2 и больше. Пользователем может выступать как человек, так и другая система.

Мне нравится определение из книги Коберна (советую, ее, кстати, всем аналитикам): «Вариант использования фиксирует соглашение между участниками системы о ее поведении. Вариант использования описывает поведение системы при ее ответах на запрос одного из участников, называемого основным действующим лицом, в различных условиях».

В жизни встречала такие названия: варианты использования, юзкейс, сценарий, прецедент, сценарий использования.

Текст vs диаграмма/схема

Какое описание лучше: текстовое или диаграмма? Выбор за вами и вашей командой. В первые годы работы я использовала диаграммы либо диаграммы + текстовое описание к ним. Сейчас я предпочитаю текстовое описание сценариев, и объясню почему:

  • Такой формат более понятен заказчикам (а они тоже предпочитают читать и согласовывать варианты использования).
  • Текст проще и быстрее отредактировать, чем диаграммы и текст.

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

Кому и в каких случаях нужны сценарии

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

- Заказчикам. Описано человеческим языком, заказчик своевременно может подтвердить, что это именно то, чего он ждет, или поправить.

- Тестировщику. Почти готовый тест-кейс:-)

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

А также другим участникам процесса.

В каких случаях они нужны:

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

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

Если вам нужно описать какую-то часть функциональности, работы пользователя с интерфейсом, etc. в виде сценария. Тогда вы можете взять шаблон юзкейса за основу и использовать его для описания сценария. Например, основу требований к вашему мобильному приложению составляет описание пользовательского интерфейса. Но выполнение некоторых функций имеет много нюансов, которые нужно дополнительно описать при помощи таблички: «действие - отклик системы», или даже совместить такую табличку со сценарием.

Как их описывать

Давайте рассмотрим пару примеров, они говорят сами за себя.

Пример 1. Разблокировать учетную запись пользователя (простой короткий пример, без альтернативного потока событий):

Действующие лица Пользователь, Система
Цели Пользователь: авторизоваться в системе и начать работать;
Система: идентифицировать пользователя и его права.

Успешный сценарий:

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

Важные моменты

Очевидно, что если Пример 1 можно было безболезненно описать простым текстом, то Пример 2 намного лучше воспринимается в виде сценария. Но если у вас вся функциональность описана в виде юзкейсов, то лучше описывать юзкейсами даже очень простые сценарии, из пары шагов. Пусть ваша спецификация будет в едином стиле.

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

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

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

Перечитайте документ со сценариями, перед тем, как отдавать его разработчикам или заказчикам. Лучше даже несколько раз. Всегда находятся моменты, которые можно описать лаконичнее, или выявляются какие-то несоответствия. Или случайные «копипасты». Уважайте время и головы других людей.

Кстати, про «копипасты». Незаполненную табличку для описания юзкейса есть смысл «копипастить».

Как видно из примеров выше, расширение к шагу номер 1 указывается в разделе «Расширение» как 1а, 1б, и т.д. Расширение *а - это общее расширение к сценарию, не к конкретному.

Правильных и полезных вам сценариев! Вопросы, примеры, предложения, комментарии приветствуются. Спасибо за внимание.

При написании статьи я использовала материалы из книги Алистера Коберна «Современные методы описания функциональных требований к системам».

Диаграммы прецедентов.

Среда выполнения

Теория Введение

Для того чтобы более точно понять, как должна работать система, все чаще используется описание функциональности системы через варианты использования (Use Caseили прецеденты). Это самый первый этап в разработке системы – он предваряет этап анализа.

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

Варианты использования отражают функциональность системы с точки зрения получения значимого результата для пользователя, поэтому они точнее позволяют ранжировать функции по значимости получаемого результата. Каждый вариант использования – это набор сценариев, посредством которого и выражаются функциональные требования к системе.

Зачем нужны варианты использования?

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

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

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

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

Нотация uml

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

Любой прецедент должен иметь имя, отличающее его от других прецедентов. Оно должно быть уникально внутри объемлющего пакета. Имя прецедента представляет собой текстовую строку. Взятое само по себе, оно называется простым именем. К составному имени спереди добавлено имя пакета, в котором он находится. Обычно при изображении прецедента указывают только его имя. Имя может занимать несколько строк. На практике для именования прецедентов используют короткие глагольные фразы в активной форме, обозначающие некоторое поведение и взятые из словаря моделируемой системы.

На рис. 1 показано, как на диаграммах изображаются актеры и прецеденты.

рис. 1. Изображение на диаграмме актера и прецедента

Актер. Актер представляет роль, которую играет в данной системе человек, аппаратное устройство или другая система. Как показано на рисунке выше, актеры изображаются в виде человеческой фигуры. Можно определить общие типы актеров, а затем специализировать их отношением обобщения (см. Отношение обобщения), как показано на рис. 2.

рис. 2. Отношение обобщения между актерами

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

Прецеденты организовывают, определив между ними отношения обобщения, включения и расширения. Эти отношения применяют, чтобы выделить некоторое общее поведение (извлекая его из других прецедентов, которые его включают) или, наоборот, вариации (поместив такое поведение в другие прецеденты, которые его расширяют).

Актеров можно связывать с прецедентами только отношениями ассоциации (см. Отношение ассоциации). Ассоциация между актером и прецедентом показывает, что они общаются друг с другом, возможно, посылая или принимая сообщения (рис. 3).

рис. 3. Отношение ассоциации между актером и прецедентом

Отношение обобщения (см. Отношение обобщения) между прецедентами аналогично отношениям обобщения между классами. Это означает, что прецедент-потомок наследует поведение и семантику своего родителя, может замещать его или дополнять его поведение, и, кроме того, может быть подставлен всюду, где появляется его родитель (как родитель, так и потомок могут иметь конкретные экземпляры).

Например, в банковской системе возможно наличие прецедента «Проверить клиента», который отвечает за проверку личности клиента. Он может иметь двух специализированных потомков («Проверить пароль» и «Сканирование сетчатки»). Оба потомка ведут себя так же, как прецедент «Проверить клиента», и могут использоваться везде, где используется их родитель, но при этом каждый из них добавляет и свое собственное поведение (первый проверяет текстовый пароль, а второй - рисунок сетчатки глаза).

Как показано на рис. 4, обобщения между прецедентами изображаются точно так же, как и обобщения между классами - в виде линии с незакрашенной стрелкой.

рис. 4. Обобщения, включения и расширения

Отношение включения между прецедентами означает, что в некоторой точке базового прецедента инкорпорировано поведение другого прецедента. Включаемый прецедент никогда не существует автономно, а инстанцируется (создается экземпляр) только как часть объемлющего прецедента. Можно считать, что базовый прецедент заимствует поведение включаемых прецедентов.

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

Отношения включения изображаются в виде зависимостей (см. Отношение зависимости) со стереотипом (см. Отношение ассоциации) include. Чтобы специфицировать место в потоке событий, где базовый прецедент включает поведение другого, вы просто пишете словоinclude, за которым следует имя включаемого прецедента (см. ниже).

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

Например, при описании сценария прецедента «Следить за выполнением заказа», который использует другой прецедент «Проверить клиента»:

Основной поток событий. Получить и проверить номер заказа, include (Проверить клиента). Запросить статус каждой части заказа и доложить клиенту.

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

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

Отношение расширения изображают в виде зависимости (см. Отношение зависимости) со стереотипом extend. Точки расширения базового сценария перечисляются в дополнительном разделе. Они являются просто метками, которые могут появляться в потоке базового прецедента.

Например, поток для прецедента «Разместить заказ» можно было бы описать нижеследующим образом.

Основной поток событий . include(Проверить Клиента). Собрать все пункты сделанного клиентом заказа. (Установить приоритет). Отправить заказ на обработку.

В данном примере фраза «Установить приоритет» - это точка расширения. Прецедент может содержать несколько точек расширения (причем каждую по несколько раз), идентифицируемых по именам. При обычных обстоятельствах базовый прецедент в этом примере выполняется без учета приоритетности заказа. Если же поступает приоритетный заказ, то поток будет выполняться, как обычно, до точки расширения (Установить приоритет), а в ней будет выполнен расширяющий прецедент («Разместить срочный заказ»), после чего возобновится работа главного потока. Если определено несколько точек расширения, то расширяющие прецеденты будут последовательно выполняться в собственных потоках.

Итак, отношения включения используются для описания обязательного поведения системы, реализуемого прецедентом и которое включается в другие прецеденты. Отношения расширения используются для моделирования необязательного поведения системы.

Контекст системы. Любая система содержит внутри себя какие-либо сущности, в то время как другие сущности остаются за ее пределами. Например, в системе проверки кредитных карточек имеются счета, транзакции и механизмы проверки подлинности. В то же время обладатели кредитных карточек и торговые предприятия находятся вне системы. Сущности внутри системы отвечают за реализацию поведения, которого ожидают сущности, находящиеся снаружи. Сущности, находящиеся вне системы и взаимодействующие с ней, составляют ее контекст. Таким образом, контекстом называется окружение системы.

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

Моделирование контекста системы состоит из следующих шагов:

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

    Организуйте похожих актеров с помощью отношений обобщения/специализации.

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

    Поместите актеров на диаграмму прецедентов и определите способы их связи с прецедентами системы.

Например, на показан контекст системы, работающей с кредитными карточками, где основное внимание уделяется окружающим ее актерам. В первую очередь это Клиенты двух типов («Индивидуальный клиент» и «Корпоративный клиент»), соответствующие ролям, которые играют люди при взаимодействии с системой. В этом контексте показаны и актеры, представляющие другие организации, такие как «Торговые предприятия» (с ними покупатели совершают карточные транзакции, приобретая вещи или услуги) и «Субсидирующие финансовые институты». В реальном мире последние два актера, скорее всего, сами будут программными системами.

рис. 5.Моделирование контекста системы

Тот же метод позволяет моделировать и контекст подсистемы. В прямоугольник на рисунке заключены прецеденты, которые описывают саму систему (которую мы разрабатываем), а актеры являются внешними по отношению к системе сущностями.

Для более подробного анализа, правила настольной игры были представлены в виде блок схем, описывающих основные этапы игрового процесса. Общая схема изображена на рисунке 1.1.

Рис. 1.1.

Данная схема включает в себя следующие подпроцессы:

1. Инициализация. Содержит алгоритмы определения права первого хода и выдачи начального числа карт всем игрокам.

2. Фаза развития. Содержит алгоритм размещения карт на столе, в виде животных и их свойств.

3. Фаза определения кормовой базы. Содержит алгоритм определения количества фишек еды, которое будет доступно игрокам в «фазу питания».

4. Фаза питания. Содержит алгоритмы кормления и применения свойств животных.

5. Фаза вымирания и получения новых карт. Содержит алгоритмы перемещения ненакормленных животных в сброс, определения количества и выдачи новых карт.

6. Завершение игры. Данная схема содержит алгоритм подсчета очков и определения победителя.

Подробные схемы подпроцессов находятся в приложении Б. Алгоритмическое описание правил игры.

Спецификация требований

Разрабатываемая игра является полным аналогом настольной игры Эволюция, поэтому в первую очередь весь игровой процесс должен соответствовать и происходить по правилам оригинальной (настольной) игры.

Бизнес требования:

Игра против компьютера;

Выбор количества игроков.

Функциональные требования:

Требования, предъявляемые к системе, с точки зрения правил игры:

Выдавать карты;

Хранить актуальную информацию о текущих картах на руках игроков и их животных со всеми свойствами, лежащими на игровом поле;

Рассчитывать очередность хода;

Определять и передавать право на первый ход;

Рассчитывать взаимодействие между различными свойствами;

Определять кормовую базу в расчете на количество игроков;

Помещать карты в сброс;

Хранить информацию о картах находящихся в сбросе игрока;

Требования, предъявляемые к системе, с точки зрения игрока:

Начать новую игру;

Положить карту в виде животного;

Положить карту, как свойство;

Пропустить ход;

Взять фишку еды из кормовой базы;

Положить фишку еды на своё животное;

Активировать применить свойство;

Закончить игру.

Модель вариантов использования

Построение диаграммы прецедентов

Визуализация требований реализована с помощью use-case диаграммы (см. рисунок 1.2.).


Рис. 1.2.

Документирование прецедентов

Документирование прецедентов представлено ниже в таблицах (см . таблицы 1.1. - 1.15).

Таблица 1.1. Прецедент «Создать новую игру».

Таблица 1.2. Прецедент «Задать параметры».

Краткое описание

Прецедент позволяет пользователю задать параметры создаваемой игры и начать игровой процесс.

Исполнители

Предусловия

Пользователь нажал кнопку «Новая игра»

Основной поток

1. Игрок выбирает используемый набор карт:

Стандартный набор (84 карты) - по умолчанию.

Дополнение «Время летать» (+42 карты).

2. Игрок выбирает количество игроков:

2 игрока - по умолчанию.

3 игрока.

4 игрока.

3. Игрок нажимает кнопку «Создать игру».

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

Альтернативные потоки

Постусловия

Параметры настроены.

Краткое описание

Исполнитель

Предусловия

Основной поток

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

3. Игрок выбирает путь, название файла и подтверждает сохранение.

4. Система сохраняет игру на диск и выдает игроку сообщение.

5. Система предлагает продолжить игру.

Альтернативные потоки

А1. Недостаточно места на диске.

a. Система выводит сообщение, что недостаточно места на диске для записи.

Постусловия

Конфигурация и текущее состояние игры сохранены в файл на жестком диске

Таблица 1.4.Прецедент «Продолжить игру».

Краткое описание

Прецедент позволяет продолжить ранее сохраненную игру.

Исполнитель

Предусловия

Наличие на диске файла с сохраненной конфигурацией игры.

Основной поток

1. Игрок запускает систему.

2. Игрок нажимает на кнопку «Продолжить игру».

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

4. Игрок выбирает файл и подтверждает открытие.

А1. Файл неверной структуры.

5. Система восстанавливает конфигурацию, состояние и количество игроков из файла и загружает игровое поле.

Альтернативные потоки

А1. Файл неверной структуры.

a. Система выводит сообщение о том, что файл поврежден.

b. Система возвращается к 3-ому пункту.

Постусловия

Конфигурация игры восстановлена.

Таблица 1.5.Прецедент «Закончить игру».

Таблица 1.6.Прецедент «Играть».

Краткое описание

Прецедент представляет собой игровой процесс.

Исполнитель

Предусловия

Выполнен прецедент «Создать новую игру».

Основной поток

Начало игры:

1. Система определяет очередность хода (Выполняет жеребьевку на основе ДСЧ).

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

3. Выполняется прецедент «Получить карты» для новой игры.

Фаза развития:

А2. Игрок уже пропустил ход.

5. Игрок делает ход.

А3. Игрок решает сходить.

А4. У игрока нет карт на руках.

6. Система переводит очередь на другого игрока.

Фаза определения кормовой базы:

7. Система при помощи ДСЧ определяет количество фишек еды, которое будет доступно на фазе питания.

8. Фишки еды появляются на игровом поле.

Фаза питания:

А7. Игрок уже пропустил ход.

9. Игрок делает ход.

А9. Игрок решает сходить.

А5. Игрок нажимает на кнопку «Пропустить ход».

10. Система переводит очередь на следующего игрока.

Фаза вымирания:

11. Выполняется прецедент «Получить карты» в фазу вымирания.

Завершение игры:

12. Система подсчитывает очки, набранные игроками.

13. Система выводит общий результат всех игроков.

14. Появляются кнопки «Создать новую игру» «Выйти в меню».

Альтернативные потоки

А1. Все игроки получили карты.

a. Игра переходит на шаг 3.

А2. Игрок уже пропустил ход.

А3. У игрока нет карт на руках.

А4. Игрок решает сходить.

a. Выполняется прецедент «Сделать ход» в фазу развития.

А5. Игрок нажимает на кнопку «Пропустить ход».

a. Выполняется прецедент «Пропустить ход».

А6. Все игроки пропустили ход в фазе развития.

a. Игра переходит на шаг 5.

А7. Игрок уже пропустил ход.

a. Прецедент переходит к шагу 8.

А8. У игрока нет карт на столе.

a. Выполняется прецедент «Пропустить ход».

А9. Игрок решает сходить.

a. Выполняется прецедент «Сделать ход» в фазу питания.

А10. Все игроки пропустили ход в фазу питания.

a. Игра переходит на шаг 9.

А11. Прецедент «Получить карты» в фазу вымирания завершен.

А11.1. Ни один из игроков не получил новых карт.

a. Право первого хода переходит следующему игроку.

b. Игра возвращается на шаг 3.

А11.1. Ни один из игроков не получил новых карт в фазу вымирания.

a. Игра переходит на шаг 10.

А12. Игрок набрал больше всех очков.

a. Выполняется прецедент «Выиграть».

А13. Игрок, вместе с другим игроком, набрал одинаковое количество очков, но больше, чем у остальных игроков.

a. Система дополнительно подсчитывает очки по животным находящимся в сбросе игроков.

b. Если игрок набрал больше очков, чем соперник - выполняется прецедент «Выиграть».

c. Если игрок набрал меньше очков, чем соперник - выполняется прецедент «Проиграть».

А14. Игрок набрал меньше очков, чем другой игрок.

А15. Игрок нажал кнопку «Создать новую игру».

a. Выполняется прецедент «Создать игру».

А16. Игрок нажал кнопку «Выйти в меню».

a. Выполняется прецедент «Завершить игру».

Точка расширения

· Прецедент «Выиграть».

· Прецедент «Проиграть».

Постусловия

Сыграна партия игры.

Таблица 1.7. Прецедент «Получить карты».

Краткое описание

Прецедент позволяет игроку получить новые карты из колоды.

Предусловия

Выполнен прецедент «Создать новую игру».

Основной поток

Для новой игры:

1. Система выдает игроку 6 карт из общей колоды.

В фазу вымирания:

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

А2. Ненакормленные животные игрока помещены в сброс и определено количество необходимых для выдачи карт.

1. Система помещает ненакормленных животных в сброс игрока.

2. Система определяет количество необходимых для выдачи карт, равное числу выживших животных игрока + 1.

3. Система выдает игроку одну карту из необходимого количества.

4. Система переводит очередь на следующего игрока.

5. Выполняется прецедент «Получить карты» в фазу вымирания.

Альтернативные потоки

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

a. Прецедент завершается.

А2. Ненакормленные животные игрока помещены в сброс и определено количество выживших животных.

a. Прецедент переходит к шагу 3.

А3. У игрока нет выживших животных и нет карт на руках.

А3.1. В колоде нет карт.

a. Система определяет количество необходимых для выдачи карт, равное 6.

А3.1. В колоде нет карт.

a. Выполняется прецедент «Проиграть».

b. Прецедент переходит к шагу 4.

А4. Игроку выдано всё необходимое количество карт.

a. Прецедент переходит к шагу 4.

Постусловия

Игрок получил новые карты.

Таблица 1.8.Прецедент «Выиграть».

Таблица 1.9.Прецедент «Проиграть».

Таблица 1.10.Прецедент «Пропустить ход».

Краткое описание

Прецедент пропускает ход игрока.

Предусловия

Игрок обладает правом хода.

Основной поток

1. Система завершает ход игрока. В текущей фазе игрок больше не будет получать право хода.

Альтернативные потоки

А1. Игра находится на фазе питания, есть фишки в кормовой базе и у игрока есть ненакормленные животные или животные с незаполненным жировым запасом.

a. Система выводит сообщение о том, что игрок не может пропустить ход, т.к. обязан взять фишку еды.

b. Прецедент завершается.

Постусловия

Игрок пропускает ход и больше не может ходить в текущую фазу.

Таблица 1.11.Прецедент «Сделать ход».

Краткое описание

Прецедент позволяет игроку сделать ход.

Предусловия

Игрок обладает правом хода.

Основной поток

Фаза развития:

Фаза питания:

А5. Игрок применяет свойство.

Альтернативные потоки

А1. Игрок кладет карту в виде животного.

a. Выполняется прецедент «Положить карту в виде животного».

А2. Игрок кладет карту, как свойство.

a. Выполняется прецедент «Положить карту, как свойство».

b. Прецедент «Сделать ход» завершается.

А3. В кормовой базе не осталось фишек еды. У игрока нет свойств, которые можно применить.

a. Выполняется прецедент «Пропустить ход».

А4. Игрок берет фишку еды из кормовой базы.

a. Выполняется прецедент «Взять фишку еды».

А5. Игрок применяет свойство.

a. Выполняется прецедент «Применить свойство».

А5.1. У игрока нет свойств, которые можно применить.

a. Прецедент «Сделать ход» завершается.

Постусловия

Игрок делает ход в текущую фазу.

Таблица 1.12.Прецедент «Положить карту в виде животного».

Краткое описание

Прецедент позволяет игроку создать новое животное.

Предусловия

Игрок имеет право хода.

Основной поток

А1. Игрок отпустил карту.

2. Игрок перетаскивает карту на свободное место своего игрового поля.

3. Система выделяет место и информирует игрока о том, что карта будет положена в виде животного игрока.

А2. Карта находится над другой картой своего игрового поля или поля противника.

4. Игрок отпускает карту.

5. Карта располагается на игровом поле игрока изображением животного вверх.

Альтернативные потоки

А1. Игрок отпустил карту.

А2. Игрок отпустил карту над другой картой своего игрового поля или поля противника.

a. Выполняется прецедент «Положить карту как свойство» с шага 3.

А3. Игрок отпустил карту над игровым полем противника.

Постусловия

На игровом поле текущего игрока появилась карта животного.

Таблица 1.13.Прецедент «Положить карту как свойство».

Краткое описание

Прецедент позволяет игроку наделить выбранное животное свойством.

Предусловия

Игрок имеет право хода.

Основной поток

1. Игрок нажимает на выбранную карту и удерживает её.

А1. Игрок отпустил карту.

2. Игрок перетаскивает карту на животное на своем игровом поле.

3. Система выделяет карту животного и информирует игрока о том, что карта будет расположена, как свойство этого животного.

4. Игрок отпускает карту.

5. Над выбранным животным появляется название и признаки свойства.

Альтернативные потоки

А1. Игрок отпустил карту.

a. Карта не меняет положения и остается на «руках» у игрока.

А2. Игрок отпустил карту на пустое место своего игрового поля.

a. Выполняется прецедент «Положить карту в виде животного» с шага 3.

А3. Игрок отпустил карту на пустое место игрового поля противника.

a. Карта возвращается обратно в «руки» игрока.

А4. Игрок отпустил карту над животным противника.

a. Если свойство может применяться на животных других игроков, то прецедент переходит к шагу 5.

b. Если свойство не может применяться на животных других игроков, то система информирует игрока о том, что данное свойство может быть применено только на своих животных, карта возвращается обратно в «руки» игрока.

А5. Свойство на карте относится к парным.

a. Система применяет свойство к выбранному животному и запрашивает указать второе животное игрока.

b. Игрок указывает 2е животное.

c. Система располагает указанные карты рядом друг с другом.

d. Над выбранными животными появляется название свойства и соединительная линия между этими свойствами.

А5.1. У игрока только 1 животное.

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

b. Карта возвращается обратно в «руки» игрока.

А6. На карте имеется 2 свойства на выбор.

a. Система выводит модальное окно с вариантами свойств.

b. Игрок нажимает на выбранное свойство.

c. Прецедент переходит к шагу 5.

A7. Свойство не может быть применено дважды на одну карту животного.

a. Система информирует игрока о том, что свойство не может быть размещено дважды на одно и то же животное.

Постусловия

На игровом поле игрока к карте животного добавляется название и признаки свойства, которыми оно обладает.

Таблица 1.14.Прецедент «Взять фишку еды».

Краткое описание

Прецедент позволяет игроку накормить одно из его животных.

Предусловия

Игрок имеет право хода.

Основной поток

1. Игрок нажимает на фишку еды в кормовой базе и удерживает её.

А1. Игрок отпустил фишку.

2. Игрок перетаскивает фишку еды на животное на своем игровом поле.

3. Система выделяет карту животного и информирует игрока о том, что данное животное получит +1 к запасу пищи.

4. Игрок отпускает фишку еды.

5. У выбранного животного устанавливается отметка о получении фишки еды, запас пищи пополняется на +1 единицу.

Альтернативные потоки

А1. Игрок отпустил фишку.

a. Фишка не меняет положения и остается в кормовой базе.

А2. Животное игрока уже накормлено.

a. Система выделяет карту животного и информирует игрока о том, что данное животное не может получить новую фишку еды, т.к. является полностью накормленным.

b. Если игрок отпускает фишку еды, то фишка возвращается в кормовую базу.

А3. Игрок отпустил фишку еды вне своего игрового поля.

А4. Игрок отпустил фишку вне карты животного на своем игровом поле.

a. Фишка возвращается в кормовую базу.

Постусловия

Текущее животное игрока пополняет запас пищи на 1 единицу.

Таблица 1.15.Прецедент «Применить свойство».

Краткое описание

Прецедент позволяет игроку активировать свойство своего животного.

Предусловия

Игрок имеет право хода.

Основной поток

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

2. Игрок нажимает на доступное свойство.

3. Система обрабатывает выбранное свойство и отображает результат применения на игровом поле, либо сообщает его игроку.

Альтернативные потоки

А1. Использовано свойство «Хищник».

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

b. Игрок выбирает животное, которое собирается атаковать.

c. Система проверяет защитные свойства этого животного.

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

e. Если свойств нет или оно не сработало - животное считается съеденным и пропадает с поля. Животное атаковавшего игрока получает 2 единицы еды.

А2. Свойство может применяться один раз за раунд.

a. Система помечает свойство, как использованное, такое свойство больше не может применяться в этом раунде.

Постусловия

Активируется свойство животного, принадлежащего игроку.

В программной и системной инженерии USE CASE-диаграмма представляет собой список действий или шагов мероприятия, которые обычно определяют взаимодействие между ролью (известной на языке унифицированного моделирования как «актер») и системой для достижения цели. "Актер" может быть человеческой или другой внешней системой.

Определение

USE CASE-диаграммы языка UML — это важный и ценный метод анализа требований, который широко используется в современной разработке программного обеспечения со времени его официального введения Иваром Джекобсоном в 1992 году. Разработка с использованием приложений зависит от многих моделей процессов и структур, таких как ICONIX, Unified Process (UP), IBM Rational Unified Process (RUP) и Oracle Unified Method (OUM).

История

В 1986 году Ивар Джекобсон сначала сформулировал текстовые, структурные и визуальные методы моделирования для определения вариантов использования. В 1992 году его соавтор книги «Объектно-ориентированная разработка программного обеспечения — подход, основанный на USE CASE», помог популяризовать технику сбора функциональных требований, особенно в разработке ПО.

Другие эксперты также внесли большой вклад, в частности Алистер Кокберн, Ларри Константин, Дин Леффингвелл, Курт Биттнер и Гуннар Овергаард.

Характер взаимодействия элементов

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

Участник может играть как активную, так и пассивную роль: например, потребитель является одновременно покупателем (не взаимодействующим с системой) и пользователем ("актером", активно взаимодействующим с приобретенным продуктом). В свою очередь, пользователь является обычным оператором ("актером", использующим систему по прямому назначению) и функциональным бенефициаром (заинтересованной стороной, пользующейся системой).

USE CASE-диаграммы: состав, виды связей

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

Существует три основных элемента процесса:

    "Актеры" — это тип пользователей, которые взаимодействуют с системой.

    Система — функциональные требования, которые определяют предполагаемое поведение элементов.

    Цели — USE CASE обычно инициируются пользователем для выполнения целей, описывающих действия и варианты, участвующие в их достижении.

Характеристики методики:


Шаги при разработке диаграмм:

    Определите пользователей системы.

    Определите важные цели, связанные с каждой ролью для поддержки системы. Ценовое предложение системы определяет значительную роль.

    Создайте примеры использования для каждой цели, связанной с шаблоном, и поддерживайте одинаковый уровень абстракции во всем прецеденте.

Шаги использования более высокого уровня рассматриваются как цели для более низкого уровня.

Терминология

USE CASE-диаграмма в Rational Rose — это диаграмма динамического поведения в UML, которая моделирует функциональность системы с использованием участников, прецедентов и других важнейших объектов. Случаи использования — это набор действий, служб и функций, которые должна выполнять система. В этом контексте система — это то, что разрабатывается или эксплуатируется, например веб-сайт. «Актеры» (условный термин) — это люди или организации, которые работают под определенными ролями внутри системы.

Для чего применяются USE CASE-диаграммы?

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

USE CASE-диаграммы прецедентов обеспечивают хороший внесистемный анализ высокого уровня и указывают, как система взаимодействует с участниками, не беспокоясь о деталях реализации этой функциональности.

Что такое диаграмма UML?

USE CASE-диаграмма UML — это способ визуализации программного обеспечения с использованием набора диаграмм. Основоположники технологии — Грэди Буч, Джеймс Румбо, Ивар Джекобсон и компания Rational Software Corporation. Их работы легли в основу объектно-ориентированного дизайна, затем спецификации были расширены, чтобы охватить более широкий спектр проектов разработки программного обеспечения. Сегодня UML принимается группой управления объектами (OMG) в качестве стандарта для разработки программного обеспечения для моделирования.

Чтобы ответить на вопрос о том, использования в UML, необходимо сначала понять ее строительные блоки. Общие компоненты включают:

    пользователей, которые взаимодействуют с системой;

    определенную последовательность действий и взаимодействия между участниками и сценарием системы;

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

В профессиональном сообществе программистов для объяснения структуры часто применяют диаграммы USE CASE «по курочке Рябе» — визуальное изображение сюжета популярной сказки в виде схемы.

Что такое UML?

UML означает Unified Modeling Language. UML 2.0 помог расширить исходную спецификацию, чтобы охватить более широкую часть усилий по разработке программного обеспечения, включая гибкие методы. Также были реализованы следующие разработки:


Ключом к созданию UML-диаграммы является объединение форм, представляющих объект или класс, с другими фигурами для иллюстрации отношений потока информации и данных.

Типы диаграмм

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

Эти диаграммы организованы в две различные группы: структурные и диаграммы поведения (или взаимодействия).

Структурные, в свою очередь, делятся на следующие виды диаграмм:

    Классов — являются основой почти каждого объектно-ориентированного метода, включая UML. Они описывают статическую структуру системы.

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

    Объекта — описывают статическую структуру системы в определенное время. Они могут использоваться для проверки диаграмм классов для точности.
    Композитные структурные диаграммы показывают внутреннюю часть класса. Моделируют функциональность системы с использованием участников и прецедентов.

    Компонентов — описывают организацию физических программных компонентов, включая исходный код, исполняемый файл (двоичный код).

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

Поведенческие имеют в своем составе диаграммы:

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

Символы и обозначения

Существует много разных типов UML-диаграмм, и каждый из них имеет свой набор символов. Классовые диаграммы являются одной из наиболее распространенных диаграмм UML, а символы диаграмм классов — одним из важных атрибутов. Например, есть символы для активных классов и интерфейсов. Символ класса можно фрагментировать, чтобы показать операции, атрибуты и обязанности класса.
Линии также являются важными символами для обозначения отношений между компонентами. Обобщение и наследование обозначаются пустыми стрелками.

Зависимости отмечены пунктирной линией со стрелкой. Использование << >> позволяет указать свойства этой зависимости. Множественность обычно отображается с номером на одном конце стрелки и * с другой.

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

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

Почему мы используем UML?

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

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

Пример USE CASE-диаграммы — графическое изображение взаимодействий между методология, используемая в системном анализе для выявления, уточнения и организации системных требований. В этом контексте термин «система» относится к тому, что разрабатывается или эксплуатируется, например к веб-сайту по продаже и обслуживанию товаров по почте. USE CASE-диаграмма в UML (Unified Modeling Language) — стандартная нотация для моделирования объектов и систем реального мира.

Расшифровка понятий

Цели системы могут включать в себя планирование общих требований, проверку аппаратного проектирования, тестирование и отладку разрабатываемого программного продукта, создание справки по оперативной помощи или выполнение задачи, ориентированной на потребителя. Например, использование диаграммы вариантов USE CASE diagram в среде продаж включает в себя упорядочивание товаров, обновление каталога, обработку платежей и отношения с клиентами. Диаграмма использования выглядит как блок-схема. Интуитивные символы представляют собой элементы системы. Сценарии прецедентов диаграмм USE CASE-банкомата содержат четыре компонента:

    Граница, которая определяет систему интереса к окружающему миру.

    "Актеры", обычно люди, связанные с системой, определяемые в соответствии с их ролями.

    Варианты использования, которые являются конкретными ролями, которые играют "актеры" внутри и вокруг системы.

    Взаимоотношения между субъектами.

На унифицированном языке моделирования диаграмма может суммировать сведения о пользователях вашей системы (также известных как субъекты) и их взаимодействии с системой. Чтобы построить один объект, вы будете использовать набор специализированных символов и коннекторов. Например, USE CASE-диаграмма интернет-магазина может помочь вашей команде обсудить и представить:

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

    цели и методы их достижения;

    объем системы.

Практическое применение

USE CASE-диаграмма не имеет большого значения при отсутствии четкого понимания процесса — она не будет моделировать порядок выполнения шагов, если не заложен четкий алгоритм. Эксперты рекомендуют использовать данные диаграммы для дополнения текстового варианта. В диаграмме на высоком уровне демонстрируется взаимосвязь между вариантами использования, субъектами и системами. По этой причине часто используются USE CASE uml-диаграммы для политической партии при моделировании структуры.

Диаграмма идеальна в таких ситуациях:

    представление целей системно-пользовательских взаимодействий;

    определение и организация функциональных требований в системе;

    выявление контекста и требований системы;

    моделирование основного потока событий в прецеденте.

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

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

Назначение

Цель диаграммы — захватить динамический аспект системы. Однако это определение является слишком общим для описания цели. Так как другие четыре диаграммы (активность, последовательность, совместное использование и Statechart) также имеют одинаковую цель. USE CASE-диаграммы используются для сбора требований к системе, включая внутренние и внешние воздействия (как правило, это требования к дизайну). Следовательно, когда система анализируется для сбора ее функциональных возможностей, разрабатываются примеры использования и идентифицируются участники.

Когда начальная задача завершена, диаграммы случайных ситуаций моделируются для представления внешнего вида. Целями при создании USE CASE-диаграмм можно назвать следующее:

    сбор требований;

    получение внешнего вида системы;

    влияние внешних и внутренних факторов;

    визуализация взаимодействия между требованиями и субъектами.

Процесс создания

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

Можно сказать, что варианты использования - это не что иное, как системные функции, написанные организованным образом.

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

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

    Дайте подходящее имя для актеров.

    Покажите на диаграмме отношения и зависимости.

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

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

Сферы применения

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

Чтобы понять динамику, нужно использовать разные типы диаграмм. USE CASE-диаграммы, состав, виды связей — наилучший пример. Ее конкретная цель - собирать системные требования участников.

Диаграммы используются на очень высоком уровне дизайна, где данные уточняются многократно до получения полной и практичной картины. Хорошо структурированный прецедент также описывает предварительное условие, состояние сообщения и исключения. Эти дополнительные элементы используются для создания примеров при проведении тестирования.

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

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

Аннотация: Предметом этого курса является The UML - унифицированный язык моделирования. В предыдущей лекции было рассказано о том, что же такое UML, о его истории, назначении, способах использования языка, структуре его определения, терминологии и нотации. Было отмечено, что модель UML - это набор диаграмм. В этой лекции мы рассмотрим такие вопросы: почему нужно несколько видов диаграмм; виды диаграмм; ООП и последовательность построения диаграмм

Прежде чем перейти к обсуждению основного материала этой лекции, давайте поговорим о том, зачем вообще строить какие-то диаграммы. Разработка модели любой системы (не только программной) всегда предшествует ее созданию или обновлению. Это необходимо хотя бы для того, чтобы яснее представить себе решаемую задачу. Продуманные модели очень важны и для взаимодействия внутри команды разработчиков, и для взаимопонимания с заказчиком. В конце концов, это позволяет убедиться в "архитектурной согласованности" проекта до того, как он будет реализован в коде.

Мы строим модели сложных систем, потому что не можем описать их полностью, "окинуть одним взглядом". Поэтому мы выделяем лишь существенные для конкретной задачи свойства системы и строим ее модель, отображающую эти свойства. Метод объектно-ориентированного анализа позволяет описывать реальные сложные системы наиболее адекватным образом. Но с увеличением сложности систем возникает потребность в хорошей технологии моделирования. Как мы уже говорили в предыдущей лекции, в качестве такой "стандартной" технологии используется унифицированный язык моделирования ( Unified Modeling Language , UML ), который является графическим языком для спецификации, визуализации, проектирования и документирования систем. С помощью UML можно разработать подробную модель создаваемой системы, отображающую не только ее концепцию, но и конкретные особенности реализации. В рамках UML -модели все представления о системе фиксируются в виде специальных графических конструкций, получивших название диаграмм.

Примечание . Мы рассмотрим не все, а лишь некоторые из видов диаграмм. Например, диаграмма компонентов не рассматривается в этой лекции, которая является лишь кратким обзором видов диаграмм. Количество типов диаграмм для конкретной модели приложения никак не ограничивается. Для простых приложений нет необходимости строить диаграммы всех без исключения типов. Некоторые из них могут просто отсутствовать, и этот факт не будет считаться ошибкой. Важно понимать, что наличие диаграмм определенного вида зависит от специфики конкретного проекта. Информацию о других (не рассмотренных здесь) видах диаграмм можно найти в стандарте UML.

Почему нужно несколько видов диаграмм

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

Система - совокупность взаимосвязанных управляемых подсистем, объединенных общей целью функционирования.

Да, не слишком информативно. А что же такое тогда подсистема? Чтобы прояснить ситуацию, обратимся к классикам:

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

Что ж, ничего не попишешь, придется искать определение подсистемы. Там же сказано, что подсистема - это совокупность элементов, часть из которых задает спецификацию поведения других элементов. Ян Соммервилл объясняет это понятие таким образом:

Подсистема - это система, функционирование которой не зависит от сервисов других подсистем. Программная система структурируется в виде совокупности относительно независимых подсистем. Также определяются взаимодействия между подсистемами.

Тоже не слишком понятно, но уже лучше. Говоря "человеческим" языком, система представляется в виде набора более простых сущностей, которые относительно самодостаточны. Это можно сравнить с тем, как в процессе разработки программы мы строим графический интерфейс из стандартных "кубиков" - визуальных компонентов, или как сам текст программы тоже разбивается на модули, которые содержат подпрограммы, объединенные по функциональному признаку, и их можно использовать повторно, в следующих программах.

С понятием системы разобрались. В процессе проектирования система рассматривается с разных точек зрения с помощью моделей, различные представления которых предстают в форме диаграмм. Опять-таки у читателя могут возникнуть вопросы о смысле понятий модели и диаграммы . Думаем, красивое, но не слишком понятное определение модели как семантически замкнутой абстракции системы вряд ли прояснит ситуацию, поэтому попробуем объяснить "своими словами".

Модель - это некий (материальный или нет) объект , отображающий лишь наиболее значимые для данной задачи характеристики системы. Модели бывают разные - материальные и нематериальные, искусственные и естественные, декоративные и математические...

Приведем несколько примеров. Знакомые всем нам пластмассовые игрушечные автомобильчики, которыми мы с таким азартом играли в детстве, это не что иное, как материальная искусственная декоративная модель реального автомобиля. Конечно, в таком "авто" нет двигателя, мы не заполняем его бак бензином, в нем не работает (более того, вообще отсутствует) коробка передач, но как модель эта игрушка свои функции вполне выполняет: она дает ребенку представление об автомобиле, поскольку отображает его характерные черты - наличие четырех колес, кузова, дверей, окон, способность ехать и т. д.

В ходе медицинских исследований опыты на животных часто предшествуют клиническим испытаниям медицинских препаратов на людях. В таком случае животное выступает в роли материальной естественной модели человека.

Уравнение, изображенное выше - тоже модель, но это модель математическая, и описывает она движение материальной точки под действием силы тяжести.

Осталось лишь сказать, что такое диаграмма . Диаграмма - это графическое представление множества элементов. Обычно изображается в виде графа с вершинами (сущностями) и ребрами (отношениями). Примеров диаграмм можно привести множество. Это и знакомая нам всем со школьных лет блок-схема , и схемы монтажа различного оборудования, которые мы можем видеть в руководствах пользователя, и дерево файлов и каталогов на диске, которое мы можем увидеть, выполнив в консоли Windows команду tree , и многое-многое другое. В повседневной жизни диаграммы окружают нас со всех сторон, ведь рисунок воспринимается нами легче, чем текст...

Но вернемся к проектированию ПО (и не только). В этой отрасли с помощью диаграмм можно визуализировать систему с различных точек зрения . Одна из диаграмм, например, может описывать взаимодействие пользователя с системой, другая - изменение состояний системы в процессе ее работы, третья - взаимодействие между собой элементов системы и т. д. Сложную систему можно и нужно представить в виде набора небольших и почти независимых моделей-диаграмм, причем ни одна из них не является достаточной для описания системы и получения полного представления о ней, поскольку каждая из них фокусируется на каком-то определенном аспекте функционирования системы и выражает разный уровень абстракции . Другими словами, каждая модель соответствует некоторой определенной, частной точке зрения на проектируемую систему.

Несмотря на то что в предыдущем абзаце мы весьма вольготно обошлись с понятием модели, следует понимать, что в контексте приведенных выше определений ни одна отдельная диаграмма не является моделью . Диаграммы - лишь средство визуализации модели, и эти два понятия следует различать. Лишь набор диаграмм составляет модель системы и наиболее полно ее описывает, но не одна диаграмма , вырванная из контекста.

Виды диаграмм

UML 1.5 определял двенадцать типов диаграмм , разделенных на три группы:

  • четыре типа диаграмм представляют статическую структуру приложения;
  • пять представляют поведенческие аспекты системы;
  • три представляют физические аспекты функционирования системы (диаграммы реализации).

Текущая версия UML 2.1 внесла не слишком много изменений. Диаграммы слегка изменились внешне (появились фреймы и другие визуальные улучшения), немного усовершенствовалась нотация , некоторые диаграммы получили новые наименования.

Впрочем, точное число канонических диаграмм для нас абсолютно неважно, так как мы рассмотрим не все из них, а лишь некоторые - по той причине, что количество типов диаграмм для конкретной модели конкретного приложения не является строго фиксированным. Для простых приложений нет необходимости строить все без исключения диаграммы. Например, для локального приложения не обязательно строить диаграмму развертывания. Важно понимать, что перечень диаграмм зависит от специфики разрабатываемого проекта и определяется самим разработчиком. Если же любопытный читатель все-таки пожелает узнать обо всех диаграммах UML , мы отошлем его к стандарту UML (http://www.omg.org/technology/documents/modeling_spec_catalog.htm#UML). Напомним, что цель этого курса - не описать абсолютно все возможности UML , а лишь познакомить с этим языком, дать первоначальное представление об этой технологии.

Итак, мы кратко рассмотрим такие виды диаграмм, как:

  • диаграмма прецедентов ;
  • диаграмма классов;
  • диаграмма объектов ;
  • диаграмма последовательностей;
  • диаграмма взаимодействия;
  • диаграмма состояний;
  • диаграмма активности ;
  • диаграмма развертывания .

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

Диаграмма прецедентов (use case diagram)

Любые (в том числе и программные) системы проектируются с учетом того, что в процессе своей работы они будут использоваться людьми и/или взаимодействовать с другими системами. Сущности, с которыми взаимодействует система в процессе своей работы, называются экторами , причем каждый эктор ожидает, что система будет вести себя строго определенным, предсказуемым образом. Попробуем дать более строгое определение эктора. Для этого воспользуемся замечательным визуальным словарем по UML Zicom Mentor :

Эктор (actor) - это множество логически связанных ролей, исполняемых при взаимодействии с прецедентами или сущностями (система, подсистема или класс). Эктором может быть человек или другая система, подсистема или класс, которые представляют нечто вне сущности.

Графически эктор изображается либо " человечком ", подобным тем, которые мы рисовали в детстве, изображая членов своей семьи, либо символом класса с соответствующим стереотипом , как показано на рисунке. Обе формы представления имеют один и тот же смысл и могут использоваться в диаграммах. "Стереотипированная" форма чаще применяется для представления системных экторов или в случаях, когда эктор имеет свойства и их нужно отобразить (рис. 2.1).

Внимательный читатель сразу же может задать вопрос: а почему эктор, а не актер ? Согласны, слово "эктор" немного режет слух русского человека. Причина же, почему мы говорим именно так, проста - эктор образовано от слова action , что в переводе означает действие . Дословный же перевод слова "эктор" - действующее лицо - слишком длинный и неудобный для употребления. Поэтому мы будем и далее говорить именно так.


Рис. 2.1.

Тот же внимательный читатель мог заметить промелькнувшее в определении эктора слово "прецедент". Что же это такое? Этот вопрос заинтересует нас еще больше, если вспомнить, что сейчас мы говорим о диаграмме прецедентов . Итак,

Прецедент (use-case) - описание отдельного аспекта поведения системы с точки зрения пользователя (Буч).

Определение вполне понятное и исчерпывающее, но его можно еще немного уточнить, воспользовавшись тем же Zicom Mentor "ом:

Прецедент (use case) - описание множества последовательных событий (включая варианты), выполняемых системой, которые приводят к наблюдаемому эктором результату. Прецедент представляет поведение сущности, описывая взаимодействие между экторами и системой. Прецедент не показывает, "как" достигается некоторый результат, а только "что" именно выполняется.

Прецеденты обозначаются очень простым образом - в виде эллипса, внутри которого указано его название. Прецеденты и экторы соединяются с помощью линий . Часто на одном из концов линии изображают рис. 2.3

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