CASE. Структурный системный анализ.
ГЛАВА 2. ДИАГРАММЫ ПОТОКОВ ДАННЫХ
---------------------------------
Диаграммы потоков данных (DFD) являются основным средством
моделирования функциональных требований проектируемой системы. С их
помощью эти требования разбиваются на функциональные компоненты (процессы)
и представляются в виде сети, связанной потоками данных. Главная цель
таких средств - продемонстрировать, как каждый процесс преобразует сбои
входные данные в выходные, а также выявить отношения между этими
процессами.
Для изображения DFD традиционно используются две различные нотации:
Йодана (Yourdon) и Гейна-Сарсона (Gane-Sarson). Далее при построении
примеров будет использоваться нотация Йодана, все исключения будут
предварительно оговариваться.
Основные символы
---------------------------------------------------------------------
Основные символы DFD изображены на рис.2.1. Опишем их назначение. На
диаграммах функциональные требования представляются с помощью процессов и
хранилищ, связанных потоками данных.
Потоки данных являются механизмами, использующимися для моделирования
передачи информации (или даже физических компонентов) из одной части
системы в другую. Потоки на диаграммах обычно изображаются именованными
стрелками, ориентация которых указывает направление движения информации.
Иногда информация может двигаться в одном направлении, обрабатываться и
возвращаться назад в ее источник. Такая ситуация может моделироваться либо
двумя различными потоками, либо одним - двунаправленным.
Назначение процесса состоит в продуцировании выходных потоков из
входных в соответствии с действием, задаваемым именем процесса. Это имя
должно содержать глагол в неопределенной форме с последующим дополнением
(например, ВЫЧИСЛИТЬ МАКСИМАЛЬНУЮ ВЫСОТУ). Кроме того, каждый процесс
должен иметь уникальный номер для ссылок на него внутри диаграммы. Этот
номер может использоваться совместно с номером диаграммы для получения
уникального индекса процесса во всей модели.
Рис. 2.1: Основные символы диаграммы потоков данных
Хранилище (накопитель) данных позволяет на определенных участках
определять данные, которые будут сохраняться в памяти между процессами,
фактически хранилище представляет "срезы" потоков данных во времени.
Информация, которую оно содержит, может использоваться в любое время после
ее определения, при этом данные могут выбираться в любом порядке. Имя
хранилища должно идентифицировать его содержимое и быть существительным. В
случае, когда поток данных входит или выходит в/из хранилища, и его
структура соответствует структуре хранилища, он должен иметь то же самое
имя, которое нет необходимости отражать на диаграмме.
Внешняя сущность (терминатор) представляет сущность вне контекста
системы, являющуюся источником или приемником системных данных. Ее имя
должно содержать существительное, например, СКЛАД ТОВАРОВ. Предполагается,
что объекты, представленные такими узлами, не должны участвовать ни в
какой обработке.
Контекстная диаграмма и детализация процессов
---------------------------------------------------------------------
Декомпозиция DFD осуществляется на основе процессов: каждый процесс
может раскрываться с помощью DFD нижнего уровня.
Важную специфическую роль в модели играет специальный вид DFD -
контекстная диаграмма, моделирующая систему наиболее общим образом.
Контекстная диаграмма отражает интерфейс системы с внешним миром, а
именно, информационные потоки между системой и внешними сущностями, с
которыми она должна быть связана. Она идентифицирует эти внешние сущности,
а также, как правило, единственный процесс, отражающий главную цель или
природу системы насколько это возможно. Каждый проект должен иметь только
одну контекстную диаграмму, при этом нет необходимости в нумерации ее
единственного процесса.
DFD первого уровня строится как декомпозиция процесса, который
присутствует на контекстной диаграмме.
Построенная диаграмма первого уровня также имеет множество процессов,
которые в свою очередь МОГУТ быть декомпозированы в DFD нижнего уровня.
Таким образом строится иерархия DFD с контекстной диаграммой в корне
дерева. Этот процесс декомпозиции Продолжается до тех пор, пока процессы
могут быть эффективно описаны с помощью коротких (до одной страницы)
миниспецификаций обработки (спецификаций процессов).
При таком построении иерархии DFD каждый процесс более низкого уровня
необходимо соотнести с процессом верхнего уровня. Обычно для этой цели
используются структурированные номера процессов. Так, например, если мы
детализируем процесс номер 2 на диаграмме первого уровня, раскрывая его с
помощью DFD, содержащей три процесса, то их номера будут иметь следующий
вид: 2.1, 2.2 и 2.3. При необходимости можно перейти на следующий уровень,
т.е. для процесса 2.2 получим 2.2.1, 2.2.2. и т.д.
Декомпозиция данных и соответствующие расширения
диаграмм потоков данных
--------------------------------------------------------------------
Индивидуальные данные в системе часто являются независимыми. Однако
иногда необходимо иметь дело с несколькими независимыми данными
одновременно. Например, в системе имеются потоки ЯБЛОКИ, АПЕЛЬСИНЫ и
ГРУШИ. Эти потоки могут быть сгруппированы с помощью введения нового
потока ФРУКТЫ. Для этого необходимо определить формально поток ФРУКТЫ как
состоящий из нескольких элементов-потомков. Такое определение задается с
помощью формы БэкусаНаура (БНФ) в словаре данных (см. главу 3). В свою
очередь поток ФРУКТЫ сам может содержаться в потоке-предке ЕДА вместе с
потоками ОВОЩИ, МЯСО и др. Такие потоки, объединяющие несколько потоков,
получили название групповых.
Обратная операция (расщепление потоков на подпотоки) осуществляется с
использованием группового узла (рис. 2.2), позволяющего расщепить поток на
любое число подпотоков. При расщеплении также необходимо формально
определить подпотоки в словаре данных (с помощью БНФ).
Аналогичным образом осуществляется и декомпозиция потоков через
границы диаграмм, позволяющая упростить детализирующую DFD. Пусть имеется
поток ФРУКТЫ, входящий в детализируемый процесс. На детализирующей этот
процесс диаграмме потока ФРУКТЫ может не быть вовсе, но вместо него могут
быть потоки ЯБЛОКИ и АПЕЛЬСИНЫ (как будто бы они переданы из
детализируемого процесса). В этом случае должно существовать
БНФ-определение потока ФРУКТЫ, состоящего из подпотоков ЯБЛОКИ и
АПЕЛЬСИНЫ, для целей балансирования.
Применение этих операций над данными позволяет обеспечить
структуризацию данных, увеличивает наглядность и читабельность диаграмм.
Для обеспечения декомпозиции данных и некоторых других сервисных
возможностей к DFD добавляются следующие типы объектов:
¦ Групповой узел. Предназначен для расщепления и объединения потоков.
В некоторых случаях может отсутствовать (т.е. фактически
вырождаться в точку слияния/расщепления потоков на диаграмме).
¦ Узел-предок. Позволяет увязывать входящие и выходящие потоки между
детализируемым процессом и детализирующей DFD.
¦ Неиспользуемый узел. Применяется в ситуации, когда декомпозиция
данных производится в групповом узле, при этом требуются не все
элементы входящего в узел потока.
¦ Узел изменения имени. Позволяет неоднозначно именовать потоки, при
этом их содержимое эквивалентно. Например, если при проектировании
разных частей системы один и тот же фрагмент данных получил
различные имена, то эквивалентность соответствующих потоков данных
обеспечивается узлом изменения имени. При этом один из потоков
данных является входным для данного узла, а другой - выходным.
¦ Текст в свободном формате в любом месте диаграммы.
Возможный способ изображения этих узлов приведен на рис. 2.2.
Рис. 2.2: Расширения диаграммы потоков данных
Построение модели
---------------------------------------------------------------------
Главная цель построения иерархического множества DFD заключается в
том, чтобы сделать требования ясными и понятными на каждом уровне
детализации, а также разбить эти требования на части с точно определенными
отношениями между ними. Для достижения этого целесообразно пользоваться
следующими рекомендациями:
¦ Размещать на каждой диаграмме от 3 до 6-7 процессов. Верхняя
граница соответствует человеческим возможностям одновременного
восприятия и понимания структуры сложной системы с множеством
внутренних связей, нижняя граница выбрана по соображениям здравого
смысла: нет необходимости детализировать процесс диаграммой,
содержащей всего один или два процесса.
¦ Не загромождать диаграммы несущественными на данном уровне
деталями.
¦ Декомпозицию потоков данных осуществлять параллельно с
декомпозицией процессов; эти две работы должны выполняться
одновременно, а не одна после завершения другой.
¦ Выбирать ясные, отражающие суть дела, имена процессов и потоков для
улучшения понимаемости диаграмм, при этом стараться не использовать
аббревиатуры.
¦ Однократно определять функционально идентичные процессы на самом
верхнем уровне, где такой процесс необходим, и ссылаться на него на
нижних уровнях.
¦ Пользоваться простейшими диаграммными техниками: если что-либо
возможно описать с помощью DFD, то это и необходимо делать, а не
использовать для описания более сложные объекты.
¦ Отделять управляющие структуры от обрабатывающих структур (т.е.
процессов), локализовать управляющие структуры.
В соответствии с этими рекомендациями процесс построения модели
разбивается на следующие этапы:
1. Расчленение множества требований и организация их в основные
функциональные группы.
2. Идентификация внешних объектов, с которыми система должна быть
связана.
3. Идентификация основных видов информации, циркулирующей между
системой и внешними объектами.
4. Предварительная разработка контекстной диаграммы, на которой
основные функциональные группы представляются процессами, внешние
объекты - внешними сущностями, основные виды информации - потоками
данных между процессами и внешними сущностями.
5. Изучение предварительной контекстной диаграммы и внесение в нее
изменений по результатам ответов на возникающие вопросы по всем ее
частям.
6. Построение контекстной диаграммы путем объединения всех процессов
предварительной диаграммы в один процесс, а также группирования
потоков.
7. Формирование DFD первого уровня на базе процессов предварительной
контекстной диаграммы.
8. Проверка основных требований по DFD первого уровня.
9. Декомпозиция каждого процесса текущей DFD с помощью детализирующей
диаграммы или спецификации процесса.
10. Проверка основных требований по DFD соответствующего уровня,
11. Добавление определений новых потоков в словарь данных при каждом
их появлении на диаграммах.
12. Параллельное (с процессом декомпозиции) изучение требований (в том
числе и вновь поступающих), разбиение их на элементарные и
идентификация процессов или спецификаций процессов,
соответствующих этим требованиям.
13. После построения двух-трех уровней проведение ревизии с целью
проверки корректности и улучшения понимаемости модели.
14. Построение спецификации процесса (а не простейшей диаграммы) в
случае, если некоторую функцию сложно или невозможно выразить
комбинацией процессов.
Пример банковской задачи
---------------------------------------------------------------------
В качестве примера создания модели рассмотрим фрагмент проекта
системы, организующей работу банкомата по обслуживанию клиента по его
кредитной карте. Этот пример будет строиться поэтапно, на нем будут
продемонстрированы базовые техники структурного анализа и проектирования
по мере их определения.
На рис. 2.3 приведена контекстная диаграмма системы с единственным
процессом ОБСЛУЖИТЬ, идентифицирующая внешние сущности КЛИЕНТ и КОМПЬЮТЕР
БАНКА, хранящий информацию о счетах всех клиентов. Опишем потоки данных,
которыми обменивается проектируемая система с внешними объектами.
Рис. 2.3: Контекстная диаграмма банковской задачи
Для банковского обслуживания клиенту необходимо предоставить системе
свою КРЕДИТНУЮ КАРТУ для автоматического считывания с нее информации
(ПАРОЛЬ, ЛИМИТ ДЕНЕГ, ДЕТАЛИ КЛИЕНТА), а также сообщить свои КЛЮЧЕВЫЕ
ДАННЫЕ, а именно ПАРОЛЬ и ЗАПРОС НА ОБСЛУЖИВАНИЕ, т.е. требуемую ему
услугу (например, снятие со счета наличных денег). Банковское обслуживание
с позиций клиента, в свою очередь, должно обеспечить следующее:
¦ выдать СООБЩЕНИЕ, приглашающее клиента ввести КЛЮЧЕВЫЕ ДАННЫЕ;
¦ выдать клиенту ДЕНЬГИ;
¦ выдать клиенту ВЫПИСКУ по проведенному обслуживанию, включающую
ВЫПИСКУ О ДЕНЬГАХ, ВЫПИСКУ ПО БАЛАНСУ и ВЫПИСКУ ПО ОПЕРАЦИИ,
проведенной банком.
Контекстный процесс и КОМПЬЮТЕР БАНКА должны обмениваться следующей
информацией:
¦ ДАННЫЕ ПО СЧЕТУ клиента в банке;
¦ ПРОТОКОЛ ОБСЛУЖИВАНИЯ, включающий информацию об ОБРАБОТАННОЙ
ДОКУМЕНТАЦИИ, изымаемой ДЕНЕЖНОЙ СУММЕ и ДАННЫЕ ПО ИСТОРИИ ЗАПРОСА.
Контекстный процесс может быть детализирован DFD первого уровня как
показано на рис. 2.4. Эта диаграмма содержит 4 процесса и хранилище ДАННЫЕ
КРЕДИТНОЙ КАРТЫ, которое изображено дважды на диаграмме с целью избежания
пересечений линий потоков данных.
Рис. 2.4: Детализация процесса ОБСЛУЖИТЬ
Процесс 1.1 (ПОЛУЧИТЬ ПАРОЛЬ) осуществляет прием и проверку пароля
клиента и имеет на входе/выходе следующие потоки:
¦ внешний выходной поток СООБЩЕНИЕ для информирования клиента о
готовности принять пароль;
¦ входной поток ВВЕДЕННЫЙ ПАРОЛЬ как элемент внешнего потока КЛЮЧЕВЫЕ
ДАННЫЕ;
¦ входной поток ПАРОЛЬ из хранилища ДАННЫЕ КРЕДИТНОЙ КАРТЫ для
проверки вводимого клиентом пароля.
Процесс 1.2 (ПОЛУЧИТЬ ЗАПРОС НА ОБСЛУЖИВАНИЕ) осуществляет прием и
проверку запроса клиента на проведение необходимой ему банковской операции
и имеет на входе/выходе следующие потоки:
¦ внешний выходной поток СООБЩЕНИЕ для информирования клиента о своей
готовности принять запрос на обслуживание;
¦ входной поток ЗАПРОС НА ОБСЛУЖИВАНИЕ как элемент внешнего потока
КЛЮЧЕВЫЕ ДАННЫЕ;
¦ входной поток ЛИМИТ ДЕНЕГ из хранилища ДАННЫЕ КРЕДИТНОЙ КАРТЫ для
контроля наличия денег на счете клиента.
Процесс 1.3 (ОБРАБОТАТЬ ЗАПРОС НА ОБСЛУЖИВАНИЕ) имеет внешний входной
поток ДАННЫЕ ПО СЧЕТУ (из внешней сущности КОМПЬЮТЕР БАНКА), входной поток
ДЕТАЛИ КЛИЕНТА (из хранилища), а также внешние выходные потоки ВЫПИСКА,
ДЕНЬГИ и ПРОТОКОЛ ОБСЛУЖИВАНИЯ.
Процесс 1.4 (ОБРАБОТАТЬ КРЕДИТНУЮ КАРТУ) осуществляет считывание
информации с кредитной карты и имеет на входе внешний поток КРЕДИТНАЯ
КАРТА, а на выходе поток ДАННЫЕ КРЕДИТНОЙ КАРТЫ. Отметим, что нет
необходимости в идентификации последнего потока, т.к. идентифицировано
соответствующее хранилище.
Процессы 1.1, 1.2 и 1.4 являются элементарными, поэтому нет
необходимости в их детализации с помощью DFD уровня 2 (они будут раскрыты
с помощью спецификаций процессов в главе 4). Процесс 1.3 может быть
детализирован с помощью DFD второго уровня как показано на рис. 2.5. Эта
диаграмма содержит 4 элементарных процесса, спецификации которых также
будут приведены в главе 4.
Рис. 2.5: Детализация процесса ОБРАБОТАТЬ ЗАПРОС НА ОБСЛУЖИВАНИЕ
Процесс 1.3.1 (ОБРАБОТАТЬ ДОКУМЕНТАЦИЮ БАНКА) осуществляет обработку
внутренней банковской документации по клиенту и имеет входной поток ДЕТАЛИ
КЛИЕНТА и выходной поток ОБРАБОТАННАЯ ДОКУМЕНТАЦИЯ (часть внешнего потока
ПРОТОКОЛ СДЕЛКИ).
Процесс 1.3.2 (РАСПЕЧАТАТЬ БАЛАНС КЛИЕНТА) выдает справку по истории
счета клиента и по балансу клиента. Входные потоки - ДЕТАЛИ КЛИЕНТА и
ДАННЫЕ ПО БАЛАНСУ (часть внешнего потока ДАННЫЕ ПО СЧЕТУ), выходные потоки
ВЫПИСКА ПО БАЛАНСУ (часть внешнего потока ВЫПИСКА) и ДАННЫЕ ПО ИСТОРИИ
ЗАПРОСА (часть внешнего потока ПРОТОКОЛ ОБСЛУЖИВАНИЯ).
Процесс 1.3.3 (ПРИГОТОВИТЬ ДЕНЬГИ КЛИЕНТУ) обеспечивает выдачу
наличных денег и информирование компьютера банка об изъятых из банка
деньгах. Он имеет входные потоки ДЕНЕЖНАЯ СУММА и ДЕТАЛИ КЛИЕНТА, и
выходные потоки ДЕНЬГИ и ДЕНЕЖНАЯ СУММА (часть потока ПРОТОКОЛ
ОБСЛУЖИВАНИЯ).
Процесс 1.3.4 (РАСПЕЧАТАТЬ ОПЕРАЦИЮ КЛИЕНТА) выдает справку по
истории счета и уведомление по проведенной операции. Входные потоки ДАННЫЕ
ПО СЧЕТУ и ДЕТАЛИ КЛИЕНТА, выходные потоки - ВЫПИСКА ПО ОПЕРАЦИИ (часть
потока ВЫПИСКА) и ДАННЫЕ ПО ИСТОРИИ ЗАПРОСА (часть потока ПРОТОКОЛ
ОБСЛУЖИВАНИЯ).
Расширения реального времени
---------------------------------------------------------------------
Расширения реального времени используются для дополнения модели
функционирования данных (иерархии DFD) средствами описания управляющих
аспектов в системах реального времени. Для этих целей применяются
следующие символы (рис. 2.6):
Рис. 2.6: Расширение реального времени
Управляющий процесс. Представляет собой интерфейс между DFD и
спецификациями управления, собственно моделирующими и документирующими
аспекты реального времени (глава 6). Его имя указывает на тип управляющей
деятельности, вырабатываемой спецификацией. Фактически управляющий процесс
представляет собой преобразователь входных управляющих потоков в выходные
управляющие потоки; при этом точное описание этого преобразования должно
задаваться в спецификации управления.
Управляющее хранилище. Представляет собой "срез" управляющего потока
во времени. Содержащаяся в нем управляющая информация может использоваться
в любое время после ее занесения в хранилище, при этом соответствующие
данные могут быть использованы в произвольном порядке. Имя управляющего
хранилища должно идентифицировать его содержимое и быть существительным.
Управляющее хранилище отличается от традиционного тем, что может содержать
только управляющие потоки; все другие их характеристики идентичны.
Управляющий поток. Представляет собой "трубопровод", через который
проходит управляющая информация. Его имя не должно содержать глаголов, а
только существительные и прилагательные. Обычно управляющий поток имеет
дискретное, а не непрерывное значение. Это может быть, например, сигнал,
представляющий состояние или вид операции.
Логически управляющий процесс есть некий командный пункт, реагирующий
на изменения внешних условий, передаваемые ему с помощью управляющих
потоков, и продуцирующий в соответствии со своей внутренней логикой
выполняемые процессами команды. При этом режим выполнения процесса зависит
от типа управляющего потока. Имеются следующие типы управляющих потоков:
а) Т-поток (trigger now). Является потоком управления процессом,
который может вызывать выполнение процесса. При этом процесс как бы
включается одной короткой операцией. Это аналог выключателя света,
единственным нажатием которого "запускается" процесс горения лампы.
б) А-поток (activator flow). Является потоком управления процессом,
который может изменять выполнение отдельного процесса. Используется для
обеспечения непрерывности выполнения процесса до тех пор, пока поток
"включен" (т.е. течет непрерывно), с "выключением" потока выполнение
процесса завершается. Это - аналог переключателя лампы, которая может быть
как включена, так и выключена.
в) E/D-поток (enable/disable flow). Является потоком управления
процессом, который может переключать выполнение отдельного процесса.
Течение по Е-линии вызывает выполнение процесса, которое продолжается до
тех пор, пока не возбуждается течение по D-линии. Это аналог выключателя с
двумя кнопками: одной - для включения света, другой - для его выключения.
Отметим, что можно использовать 3 типа таких потоков: Е-поток, D-поток,
E/D-поток.
Иногда возникает необходимость в представлении одного и того же
фрагмента данных потоками различных типов. Например, поток данных СКОРОСТЬ
МАШИНЫ в отдельных случаях может использоваться как управляющий для
контроля критического значения. Для обеспечения этого используется узел
изменения типа (рис. 2.7): поток данных является входным для этого узла, а
управляющий поток - выходным.
Рис. 2.7: Узел изменения типа
Дополним приведенную выше модель банкомата,введя в диаграммы
управляющий процесс и управляющие потоки, позволяющие описать ее
функционирование в реальном времени. После такого расширения DFD,
приведенные на рис. 2.4 и 2.5 будут выглядеть, как показано на рис. 2.8 и
2.9, соответственно.
Управляющий процесс 1.5 (УПРАВЛЕНИЕ ОБСЛУЖИВАНИЕМ), получив
информацию о том, что кредитная карта введена (поток ВВЕДЕННАЯ КРЕДИТНАЯ
КАРТА), вызывает выполнение процесса 1.1 (поток А: ПОЛУЧИТЬ ПАРОЛЬ).
Получив информацию о введенном пароле (поток КОРРЕКТНЫЙ ПАРОЛЬ), процесс
1.5 информирует процесс 1.4 о необходимости удаления кредитной карты
(поток: УДАЛЕННАЯ КРЕДИТНАЯ КАРТА) и с помощью потока Т: ОБЕСПЕЧИТЬ
ТРЕБУЕМОЕ ОБСЛУЖИВАНИЕ вызывает выполнение процесса 1.2, затем процесса
1.3 (поток ТРЕБУЕМОЕ ОБСЛУЖИВАНИЕ ). Последний управляющий поток на
детализирующей процесс 1.3 диаграмме расчленяется на 4 подпотока, каждый
из которых вызывает выполнение процессов 1.3.1 - 1.3.4, соответственно.
Рис. 2.8: Расширение диаграммы, детализирующей контекстный процесс
Рис. 2.9: Расширение диаграммы, детализирующей процесс 3
|