
Понимание того, как информация перемещается через систему, является фундаментальным для анализа и проектирования систем. Диаграмма потока данных (DFD) предоставляет визуальное представление этого перемещения. В отличие от технических чертежей, которые фокусируются на коде или схемах баз данных, DFD фокусируется на потоке данных и процессах, которые его трансформируют. Данное руководство описывает основные символы, используемые для построения этих диаграмм, обеспечивая ясность и точность в вашей документации.
Что такое диаграмма потока данных? 🤔
Диаграмма потока данных — это инструмент структурированного анализа. Она отображает последовательность операций обработки информации. Она не описывает логику системы на языке программирования. Вместо этого она показывает, какие данные перемещаются, откуда они приходят, куда направляются и как изменяются. Такая абстракция позволяет заинтересованным сторонам понять функциональные требования, не погружаясь в технические детали реализации.
DFD являются иерархическими. Они начинаются с обзора высокого уровня и постепенно распадаются на более детальные представления. Такое разложение помогает управлять сложностью. Определяя границы и взаимодействия, аналитики могут выявить пробелы в требованиях или потенциальные узкие места до начала разработки.
Четыре основных символа 🛠️
Стандартная нотация DFD основана на четырех основных фигурах. Хотя существуют различия между различными методологиями (например, Yourdon/DeMarco или Gane/Sarson), основные концепции остаются неизменными. Каждый символ представляет определённую функцию внутри границ системы.
| Название символа | Визуальное представление | Функция |
|---|---|---|
| Внешняя сущность | Прямоугольник | Источник или пункт назначения данных |
| Процесс | Окружность или скруглённый прямоугольник | Преобразование данных |
| Хранилище данных | Открытый прямоугольник | Хранение данных в состоянии покоя |
| Поток данных | Стрелка | Перемещение данных |
1. Внешняя сущность 📦
Внешние сущности представляют источники или пункты назначения данных, которые находятся за пределами моделируемой системы. Это акторы, взаимодействующие с системой, но не входящие в её внутреннюю логику. Сущность может быть человеком, группой, другой компьютерной системой или отделом.
Сущности обычно изображаются в виде прямоугольников. В некоторых нотациях они могут выглядеть как овалы. Ключевая особенность заключается в том, что система либо отправляет им данные, либо получает от них данные. Например, клиент — это сущность. Система обрабатывает его заказ, но сам клиент существует независимо от программного обеспечения обработки заказов.
- Вход: Данные поступают в систему от сущности.
- Выход: Данные покидают систему и направляются к сущности.
Важно не путать внешние сущности с процессами. Сущность не преобразует данные; она лишь порождает их или потребляет.
2. Процесс 🔄
Процессы — это активные элементы диаграммы. Они представляют функции, которые преобразуют входные данные в выходные. Процесс — это выполняемая работа. Это может быть вычисление, проверка валидности, принятие решения или процедура манипуляции данными.
Процессы обычно изображаются в виде окружностей или скруглённых прямоугольников. Внутри фигуры указывается название, описывающее действие, например, «Рассчитать итог» или «Проверить вход». Каждый процесс должен иметь хотя бы один вход и хотя бы один выход. Процесс, которому поступают данные, но из которого ничего не выходит, является неполным.
Процессы нумеруются для обозначения иерархии. Например, «Процесс 1» может быть разбит на «Процесс 1.1», «Процесс 1.2» и т.д. Такая нумерация помогает отслеживать уровень детализации на разных диаграммах.
3. Хранилище данных 📁
Хранилища данных представляют собой места, где хранятся данные для последующего использования. Это репозитории. В физической системе это может быть таблица базы данных, файл или физический файловый шкаф. В логической схеме это просто место, где находятся данные.
Обычные формы включают прямоугольники с открытыми концами или параллельные линии. Имя внутри хранилища должно быть во множественном числе, что указывает на совокупность записей, например, «Файлы клиентов» или «Журналы заказов».
- Чтение: Процесс читает данные из хранилища для их использования.
- Запись: Процесс записывает данные в хранилище для их сохранения.
Данные поступают в хранилища и выходят из них. Крайне важно отметить, что потоки данных не могут пересекаться без прохождения через процесс. Нельзя рисовать прямую линию между двумя хранилищами данных; между ними должен находиться процесс, который объясняет причину перемещения данных.
4. Поток данных ➡️
Потоки данных — это стрелки, соединяющие символы. Они представляют перемещение данных по системе. В отличие от потока управления в программировании, поток данных представляет собой реальные пакеты информации.
Каждая стрелка должна быть подписана названием данных, перемещающихся по ней. Например, стрелка от Клиента к Процессу может быть подписана «Запрос на заказ». Стрелка от Процесса к Хранилищу данных может быть подписана «Новая запись заказа».
Стрелки должны иметь однонаправленное движение. Если данные перемещаются в обоих направлениях между двумя точками, используйте две отдельные стрелки. Подпись должна быть согласована по числу — всегда в единственном или всегда во множественном числе. Избегайте неопределённых подписей, таких как «Данные» или «Информация». Будьте конкретны, например, «Адрес доставки» или «Отчёт по запасам».
Понимание уровней диаграммы потоков данных 📈
Диаграммы потоков данных создаются по уровням для управления сложностью. Такой подход называется декомпозицией.
Уровень 0: Диаграмма контекста
Диаграмма уровня 0 — это самый высокий уровень. Она показывает всю систему как один процесс. Она подчёркивает взаимодействие между системой и внешними сущностями. Этот взгляд отвечает на вопрос: «Каковы границы системы?»
На этой диаграмме существует только один узел процесса. Все потоки данных соединяют внешние сущности напрямую с этим центральным процессом. На этом уровне не показаны внутренние хранилища данных, поскольку внутренняя работа скрыта.
Уровень 1: Основные процессы
Диаграмма уровня 1 раскрывает единственный процесс уровня 0 на его основные подпроцессы. Это разбивает систему на управляемые части. Вы увидите несколько узлов процессов, хранилища данных и конкретные потоки, их соединяющие.
На этом уровне определяются основные функциональные области. Например, система электронной коммерции может быть разделена на «Управление запасами», «Обработка платежей» и «Обработка доставки». Каждый из этих элементов представляет собой основной процесс.
Уровень 2: Подробная логика
Диаграммы уровня 2 углубляются в конкретные процессы уровня 1. Если процесс уровня 1 сложный, он получает собственную диаграмму. Это позволяет аналитикам детально проработать каждый шаг конкретной функции, не загромождая общую картину.
На этом этапе нотация становится более детализированной. Вы можете увидеть несколько хранилищ данных и сложную маршрутизацию потоков данных. Именно здесь часто визуализируются конкретные бизнес-правила.
Правила и соглашения ✅
Для поддержания ясности диаграммы потоков данных должны строго соблюдать правила. Нарушение этих правил может привести к путанице и неверной интерпретации.
Согласованность имён
Один и тот же поток данных должен иметь одно и то же имя везде, где он появляется. Если на одной диаграмме вы помечаете поток как «ID пользователя», на другой он не может быть «Номером идентификатора». Согласованность помогает отслеживать данные на разных уровнях.
Нет чёрных дыр и чудес
«Чёрная дыра» — это процесс с входом, но без выхода. Это означает, что данные исчезают, что обычно неверно. «Чудо» — это процесс с выходом, но без входа. Это означает, что данные появляются ниоткуда. Оба случая являются логическими ошибками на диаграмме.
Согласование хранилищ данных
При декомпозиции процесса хранилища данных, подключённые к родительскому процессу, должны оставаться подключёнными к дочерним процессам. Вы не можете удалить хранилище данных на нижнем уровне, если логика не изменилась кардинально. Поток данных должен быть сбалансирован между уровнями.
Направление стрелок
Стрелки указывают направление. Не рисуйте стрелки, пересекающиеся друг с другом без необходимости. Пересекающиеся линии затрудняют чтение диаграммы. Используйте изгибы или разрывы, чтобы сохранить чёткость маршрутов. Если два потока пересекаются, убедитесь, что типы данных различны, чтобы избежать путаницы.
DFD против блок-схемы 🧩
Часто путают диаграммы потоков данных с блок-схемами. Хотя они выглядят похоже, они выполняют разные функции.
Блок-схема описывает логику и последовательность операций. Она показывает точки принятия решений (ромбы), циклы и точный порядок шагов. Это процедурный подход. Отвечает на вопрос: «Как система выполняется?»
DFD описывает перемещение данных. Она не показывает циклы или логику принятия решений напрямую. Она фокусируется на «Чём» и «Где» находятся данные. Отвечает на вопрос: «Какие данные перемещаются и преобразуются?»
Использование DFD для описания логики управления — ошибка. Она не должна содержать ромбы с решениями. Если нужно показать логику, используйте таблицу решений или структурированное описание на английском языке в дополнение к DFD. Такое разделение ответственности сохраняет диаграмму чистой.
Практическое применение 📝
При построении диаграммы начните с диаграммы контекста. Определите границу системы. Нарисуйте внешние сущности. Нарисуйте единственный процесс, представляющий систему. Нарисуйте потоки, соединяющие их.
Далее перейдите к уровню 1. Разбейте центральный процесс на основные функции. Определите, где хранятся данные. Убедитесь, что каждый процесс имеет входы и выходы. Проверьте, совпадают ли потоки с диаграммой контекста.
Проведите обзор диаграммы с заинтересованными сторонами. Спросите, соответствуют ли потоки их пониманию бизнеса. Если заинтересованная сторона скажет: «Мы не храним эти данные здесь», скорректируйте хранилища данных. Если скажет: «Мы не отправляем данные этому человеку», скорректируйте сущности.
Валидация имеет ключевое значение. Диаграмма, которую не понимают пользователи, бесполезна. Она служит инструментом коммуникации. Она устраняет разрыв между техническими командами и владельцами бизнеса.
Наилучшие практики для ясности 🌟
Следите за тем, чтобы количество символов на одной странице было управляемым. Если диаграмма становится слишком перегруженной, она теряет свою ценность. Используйте поддиаграммы для разделения. Не пытайтесь показать всю систему на одном листе, если она превышает визуальные возможности.
Используйте стандартные обозначения. Хотя существуют вариации, придерживайтесь одного стиля (например, Yourdon/DeMarco или Gane/Sarson), чтобы избежать путаницы. Не смешивайте стили в одном документе.
Маркируйте всё. Ненарисованные стрелки бессмысленны. Ненарисованные процессы неоднозначны. Даже простые фигуры должны иметь названия, чтобы передать смысл.
Избегайте пересечения линий. Это создаёт визуальный шум. Если линии должны пересекаться, используйте «пропуск» или разрыв линии, чтобы показать, что они не пересекаются.
Обзор семантики символов 📋
Для повторения основных компонентов:
- Сущность: Вне системы. Источник или приемник.
- Процесс: Внутри системы. Преобразует данные.
- Хранилище: Внутри системы. Хранит данные.
- Поток: Соединяет вышеперечисленные. Передвигает данные.
Овладение этими символами позволяет вам ясно документировать сложные системы. Это обеспечивает общую языковую основу для аналитиков и разработчиков. Соблюдая правила декомпозиции и согласованности, вы создаете диаграммы, которые не просто рисунки, а функциональные спецификации.
Начните просто. Постройте контекст. Расширьте детали. Проверьте с пользователями. Этот итеративный процесс гарантирует, что диаграмма отражает реальность.











