Форма входа |
---|
Категории раздела | |
---|---|
|
Поиск |
---|
Наш опрос |
---|
Друзья сайта |
---|
|
Статистика |
---|
Главная » Статьи » Опыт моделирования на UML » Повышение производительности аналитика |
Еще раз об описании прецедентовТе, кто читал предыдущие статьи, мой подход знают: "Модель первична, документ вторичен!". В этой статье я постараюсь подробно обосновать этот подход. Начну с цитирования "отцов-основателей". "Три друга": Как описывать прецедент?[1]"Поведение. Последовательность поведения можно описать при помощи конечного автомата, графа деятельности, взаимодействия или текстового кода, написанного на каком-либо из языков программирования. … Элементы Use Case можно описать и неформально – при помощи сценариев или простого текста, однако такие описания недостаточно точны и не годятся для интерпретации инструментами моделирования". RUP: Как описывать прецедент?[2]RUP предоставляет следующие материалы, связанные с описанием прецедентов:
Что мы описываем?Практически все элементы UML характеризуются дихотомиями типа класс/объект, статическая структура/динамическое поведение и т.д. Прецедент (модельный элемент Use Case) характеризуется, в частности, дихотомией внешнее поведение/реализация[4]. Говоря о прецедентах, системные аналитики имеют в виду только внешнее поведение. Такой подход имеет, как минимум, две причины:
И именно описанию внешнего поведения прецедентов посвящена эта статья[5] ПредпосылкиВ этой статье (и во всем цикле) мы предполагаем, что системный аналитик – это единственная роль, которая определяет требования к системе. Требования сформулированы так, что:
Сравнение способов моделированияДаже, если Вы выбрали текстовое описание поведения, вряд ли этой информации будет достаточно для выполнения первого условия предыдущего раздела: достаточность информации. Текстовое описание можно рассматривать как дополнение к модели. "Три друга" предлагают нам выбирать между диаграммой состояний, диаграммой деятельности и диаграммой взаимодействия (последовательности или коммуникаций).
Поведение прецедента естественнее всего формулировать в терминах действий, выполняемых системой в ответ на действия субъекта (Actor)[6]. А диаграмма состояний акцентируется на возможных состояниях классификатора (прецедента), и на переходах его из состояния в состояние в ответ на события. Эти события генерируются, в частности, действиями, доступными в состоянии. На мой взгляд, диаграмма состояний неудобна для моделирования внешнего поведения прецедента.
Диаграмма деятельности – это граф действий. Она предназначена специально для моделирования рабочих потоков. Она легко понимается даже незнакомым с UML читателем. Некоторые специалисты считают, что диаграмму деятельности не следует применять в моделировании прецедентов, т.к. она не соответствует объектно-ориентированному подходу[7], и ее элементы не отображаются в объекты будущей системы. Не хочется вдаваться в полемику, но задам вопрос: "Насколько структурированное текстовое описание ближе к объектно-ориентированному подходу, чем диаграмма деятельности?". Что касается отображения элементов деятельности в элементы системы, то, наверное, этому можно посвятить отдельную статью. Пишите, если Вам это интересно!
Эта диаграмма представляет взаимодействия объектов путем обмена сообщениями. Каждое сообщение инициирует запуск действия (операции) объекта. Хотя диаграмма последовательности позволяет наглядно представить поведение несложного рабочего потока, это ее качество резко падает с появлением необходимости отображать логику, циклы и т.д. Для борьбы со сложностью можно вместо диаграммы полного рабочего потока представлять множество диаграмм (для каждого возможного сценария выполнения прецедента). Но тогда общая картина поведения становится еще менее наглядной. Тем не менее, некоторые считают эту диаграмму более достойной (более правильной, т.к. она уж точно объектно-ориентированная!). Но прецедент описывает взаимодействие всего двух объектов: внешнего субъекта и системы. Некоторые не знают, но субъект (actor) в UML не может иметь операций, а значит, не может принимать сообщения (кроме возвратных)[8]. А это существенно ограничивает возможность моделирования взаимодействий. · Диаграмма коммуникаций Эта разновидность диаграммы взаимодействия не имеет средств отображения логики рабочего потока. Диаграмма деятельности – это выбор RUP. Диаграмма деятельности – это и мой выбор. Мой опыт моделирования прецедентовСоображения о полезности использования при моделировании "строительных блоков" и о необходимости (особенно, при групповой работе) руководствоваться неким общим стандартом моделирования, я изложил в первой статье цикла. Строительные блоки для модели прецедентов (веб-публикация модели) представлены в приложении к первой статье. Пример указаний по моделированию прецедентов – в приложении к предыдущей статье.[9] Мы продолжим рассматривать пример модели прецедентов для проекта "Система управления оказанием услуг". Один прецедент ("Прием заявки") мы рассмотрим более подробно. Вот как выглядит структура описания прецедента в Project Explorer рабочего окна RSA:
А вот как выглядит контекстная диаграмма для этого прецедента:
Обратите внимание: кроме привычных модельных элементов на диаграмму прецедентов помещен элемент URL. Это ссылка. Двойное нажатие откроет MS Word со спецификацией прецедента[10]. Хорошей практикой моделирование является краткое описание модельных элементов UML. Прецедент "Прием заявки имеет следующее описание: С началом регистрации заявка устанавливается в состояние "Инициирована". Автоматически отображаются: - дата и время регистрации - идентификатор регистратора - текущее состояние заявки При регистрации фиксируются: - название и контактные данные клиента - тип услуги - название и характеристики объекта услуги - скан-копии представленных документов - текстовый комментарий Регистрация может выполняться частями в нескольких последовательных сеансах. В ходе регистрации процесс может быть завершен по инициативе клиента или регистратора (с указанием причины). В этих случаях Заявка переходит в состояние "Отклонена". При успешном завершении регистрации Заявка переходит в состояние "Зарегистрирована". Если регистратор имеет права руководителя работ, Заявка может быть сохранена в состоянии "Принята". На следующей диаграмме представлено графическое описание рабочего потока прецедента:
Для всех модельных элементов диаграммы (кроме узлов управления) я печатаю описания.
Завершение прецедента баз сохранения информации. Отображается главное окно системы.
Регистратор использует средства управления для выбора способа продолжения: - создание новой заявки клиента - продолжение регистрации существующей заявки клиента в состоянии "Инициирована". - завершение прецедента без сохранения промежуточных результатов.
Вызываемое поведение. Регистратор заполняет области и поля формы. Заполнение формы может выполняться в нескольких сеансах. Области формы можно заполнять в произвольном порядке. В процессе заполнения регистратор может: - зарегистрировать отмену заявки клиентом (заявке присваивается состояние "Отклонена") - отказать клиенту в выполнении заявки (заявке присваивается состояние "Отклонена") - временно отложить регистрацию (состояние заявки не изменяется) - завершить регистрацию и принять заявку клиента к исполнению (заявке присваивается состояние "Зарегистрирована") - (только регистратор с правами руководителя) принять заявку для дальнейшей работы (заявке присваивается состояние "Принята") При выполнении перечисленных действий информация заявки сохраняется и прецедент завершается. Относительно узлов вызываемого поведения нужно поговорить чуть подробнее. Вызываемое поведение в диаграммах деятельности используется в следующих целях:
Применение прецедентов расширения очень похоже на применение вызываемого поведения для борьбы со сложностью. Но есть одно существенное различие в целях: прецедент расширения описывает существенную часть поведения основного прецедента, выполняемую по условию. Многие аналитики забывают, что прецеденты используются не только для описания требований, но и для планирования итерационного инкрементного процесса разработки проекта:
Рассмотрите узел "Выбор заявки". В примечании к
этому узлу явно указаны условия фильтрации подмножества доступных заявок. Двойное нажатие на элемент (в RSA, и, думаю, в большинстве других инструментов моделирования) откроет следующую диаграмму:
Эта деятельность имеет параметры. Вернитесь к предыдущей диаграмме и обратите внимание, что
открыть существующую заявку для редактирования информации может только
регистратор, который ее инициировал. Таково было требование бизнеса! ЗаключениеЯ думаю, любой, даже самый убежденный нигилист, не сможет отрицать, что документирование в модели существенно "богаче" самого замечательного текста. Хотя бы потому, что текст может быть включен в модель как описания модельных элементов. Некоторые считают, что заказчики не знакомы с UML и не поймут картинки с "телепузиками". Категорически не согласен! Когда нужно объяснить что-то сложное, многие рисуют схемы, графики и т.д., и прекрасно понимают друг друга. По моей статистике разработчики, подавляющее большинство, предпочитают пользоваться моделями, а не документами (диаграмма дает общее представление, детали – по ссылкам). И тут мне в голову закралась крамольная мысль: "А может быть некоторые аналитики не хотят моделировать потому, что не умеют?". Так давайте учиться! [1] Буч Г., Якобсон А., Рамбо Дж. UML. Классика CS. 2-е изд./ Пер. с англ. – СПб.: Питер, 2006. Стр. 689. [2] Не рекомендую использовать официальную русскую версию RUP (пока!). Перевод плохой. Например, одни и те же понятия обозначаются разными терминами. [3] Шаблон RUP Спецификация прецедента.dot на русском языке (перевод мой) представлен в приложении к этой статье. Он, как всегда, очень подробный и разработан "на все случаи жизни". Очень советую посмотреть. Конечно, он требует адаптации к вашим условиям. [4] В RUP есть два модельных элемента для отображения этой дихотомии: собственно прецедент (элемент Use Case в модели прецедентов) и реализация прецедента (кооперация со стереотипом Use Case Realization в модели анализа). [5] Описание реализации прецедента не входит в обязанности системного аналитика. Мало того, многие технологии явно этого не рекомендуют. Я придерживаюсь других взглядов и считаю полезным участие системного аналитика в анализе (описании реализации прецедентов уровня анализа). По крайней мере, проектировщик должен принять от системного аналитика внешнее описание, а системный аналитик должен удостовериться, что все требования внешнего поведения реализованы проектировщиком. Описанию реализации прецедентов может быть посвящена отдельная статья, если будут запросы от читателей. [6] Это утверждение непосредственно следует из определения прецедента. [7] Ее структура и семантика основаны на свободной интерпретации сетей Петри. [8] Инструменты моделирования, которые строго выдерживают метамодель UML, физически не позволяют создать сообщение субъекту. [9] Хочу еще раз напомнить, что "строительные блоки", указания по моделированию и шаблоны отчетов (в том числе – шаблоны SoDA) я представляю как примеры. Они могут использоваться непосредственно. Но правил, независимых от ситуации, не бывает, иначе они неэффективны и "обходятся" при первом удобном случае! RUP предусматривает ревизии и настройки указаний и шаблонов для каждого проекта в дисциплине "Среда". [10] Вы можете попробовать сделать это, если скопируете приложение и откроете веб-публикацию модели. Интерфейс веб-публикации не совпадает с интерфейсом RSA, но обеспечивает все те же возможности. [11] Не могу удержаться и не съехидничать по поводу дискуссии на UML2: это не предусловия прецедента, а предусловия для его деятельности! [12] По желанию владельцев проекта я удалил диаграмму, детализирующую это действие. Из приведенного описания понятно, что на диаграмме были представлены параллельные потоки по числу заполняемых полей (простым вводом, с использованием перечислений или справочников). Прошу извинить! | |
Просмотров: 3518 | Комментарии: 9 | Рейтинг: 0.0/0 |