1. Введение в диаграммы потоков данных (DFD)
А Диаграмма потоков данных (DFD) — это графическое представление того, как данные передаются через систему — показывая, откуда берутся данные, как они преобразуются, где хранятся и куда в конечном итоге поступают. В отличие от блок-схем (которые фокусируются на потоке управления и последовательности), DFD подчеркивают движение и преобразование данных не беспокоясь о времени или порядке выполнения.

Зачем использовать DFD?
- Анализировать существующую систему или проектироватьновый
- Выявляйте входные, выходные данные и хранилища данных на ранних этапах
- Сообщайте о границах системы и требованиях к данным заинтересованным сторонам
- Разбивайте сложность с точки зрения общего обзора до деталей реализации
2. Четыре основных компонента диаграммы потоков данных
Каждая диаграмма потоков данных на любом уровне строится всего изчетырехосновных элементов (нотация Гейна-Сарсона):
| Компонент | Нотация | Роль | Пример |
|---|---|---|---|
| Внешняя сущность | Прямоугольник | Источник или место назначения данныхвнеграницы системы | Клиент, платёжный шлюз |
| Процесс | Окружность | Преобразует входящие данные в исходящие данные | «Сделать заказ», «Авторизовать платеж» |
| Хранилище данных | Запись / открытый прямоугольник | Место, где данные хранятся для последующего использования | Заказы, товарные остатки |
| Поток данных | Стрелка (с меткой) | Передвижение данных между вышеперечисленными | «Сведения о заказе», «Статус платежа» |
💡 Ключевое правило:Процессдолжениметь входные и выходные потоки. Процесс, имеющий только входы или только выходы, является ошибкой моделирования — каждое преобразование порождает результат.
3. Уровни DFD — Иерархия сверху вниз
Сила декомпозиции сверху вниз заключается в том, что вы начинаетеабстрактный и добавить деталь итеративно. Каждый уровень имеет стандартную систему нумерации:
| Уровень | Имя | Содержание |
|---|---|---|
| Уровень 0 | Схема контекста | Одиночный процесс (вся система), все внешние сущности и их потоки — без хранилищ данных, без внутренних деталей |
| Уровень 1 | Системная схема потоков данных | Система разложена на основные процессы (1.0, 2.0, 3.0…), внутренние хранилища данных и потоки |
| Уровень 2 | Поддиаграмма | Один процесс уровня 1, разложенный на более мелкие процессы (2.1, 2.2, 2.3…) |
| Уровень 3 | Подподдиаграмма | Один процесс уровня 2, дополнительно разложенный (2.2.1, 2.2.2, 2.2.3…) |
Нумерация точно показывает, где вы находитесь в иерархии — 2.2.4принадлежит2.2, который принадлежит2.0. Эта древовидная структура позволяет навигировать по большим системам.
4. Стиль дома (легенда цветов)
Каждая диаграмма в этом руководстве следует одной и той же визуальной конвенции. В Graphviz рецепт следующий: сначала стиль, затем объявление, затем соединение.
| Элемент | Форма | Заливка | Граница | Цель |
|---|---|---|---|---|
| Внешняя сущность | ящик |
#E1F5FE |
#0288D1 |
Кто находится снаружи |
| Процесс | круг |
#E8F5E9 |
#388E3C |
Что преобразует данные |
| Хранилище данных | запись |
#FFF9C4 |
#FBC02D |
Где хранятся данные |
| Родительский процесс (ссылка) | круг |
#FCE4EC |
#C2185B |
Контекст за пределами текущего уровня |
| Граница системы | штриховая, закруглённая кластер |
#FAFAFA / #757575 |
Серый | Ограждение текущей диаграммы |
| Поток данных | стрелка |
— | #555555 |
Перемещение данных |
⚠️ Важно — шаблон стилей НЕ является диаграммой
Файл Graphviz, который определяет только стили узлов/ребер, ноникогда не объявляет узлы или ребрабудет отображаться какпустой холст. Для DFD необходимо три компонента:
- Стилизовать граф —
graph [...],node [...],edge [...]атрибуты. - Объявите элементы — внешние сущности (прямоугольники), процессы (круги), хранилища данных (записи), обведенные пунктирной линией
кластерграницей. - Нарисуйте потоки — явные
A -> B [label="..."]ребра, используяdir=bothдля двусторонних обменов.
Сравните эти два — оба валидируются нормально, но только второй создает изображение:
❌ Только стиль (ничего не отображается):
digraph DFD {
graph [rankdir = LR]
node [shape = box, style = "filled", fillcolor = "#E1F5FE"]
edge [color = "#555555", arrowsize = 0.8]
}
✅ Готово (отображается):
digraph DFD {
graph [rankdir = LR]
node [style = "filled", fillcolor = "#E1F5FE", shape = box]
Customer;
// ...плюс процессы, хранилища данных, границы и рёбра
}
5. МетодПроцесс декомпозиции сверху вниз (пошагово)
МетодСистема обработки онлайн-заказов демонстрирует методологию. На каждом уровне вы получите полный, рабочий код Graphviz.
Шаг 1 — Построение диаграммы контекста (уровень 0)
Начните с всей системы какодного единого процесса и определите все взаимодействия с внешним миром. Нет хранилищ данных, нет внутренней детализации.

digraph DFD {
// --- СТИЛЬ ГРАФИКА И НАЗВАНИЕ ДИАГРАММЫ ---
graph [
rankdir = LR
splines = true
overlap = false
nodesep = 0.6
ranksep = 0.9
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
label = "Система обработки онлайн-заказов — Контекст (уровень 0)"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// Внешние сущности
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer; PaymentGateway; Warehouse; Courier;
// Единственный процесс системы
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.6]
System [label="0.0nОнлайн-заказnСистема обработки заказов"];
// Потоки данных (двунаправленные, где данные обмениваются в обоих направлениях)
Customer -> System [label="Заказ &nАккаунт"];
System -> Customer [label="Подтверждение &nЧек"];
System -> PaymentGateway [label="Запрос оплаты"];
PaymentGateway -> System [label="Статус оплаты"];
Warehouse -> System [label="Наличие на складе"];
System -> Courier [label="Запрос доставки", dir=both];
}
Интерпретация: Контекстная диаграмма отвечает на вопрос «Каковы границы этой системы и с кем она взаимодействует?» — она показывает внешние сущности и их потоки, но скрывает всю внутреннюю структуру. Мы видим, что система принимает заказы от Customer, взимает плату через PaymentGateway, проверяет наличие на складе через Warehouse, и передаёт выполнение заказа Courier.
Шаг 2 — Расчленение на Уровень-1 (Основные процессы)

Разбейте единый процесс контекста на ключевые функции и добавьте общие хранилища данных. Окружите процессы и хранилища штриховой закругленной границей системы.
digraph DFD {
// --- СТИЛЬ ГРАФИКА И НАЗВАНИЕ ДИАГРАММЫ ---
graph [
rankdir = LR
splines = true
overlap = false
nodesep = 0.5
ranksep = 0.8
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
label = "Система обработки онлайн-заказов - Уровень 1"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// Внешние сущности
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer; PaymentGateway; Warehouse; Courier;
// --- КОНТЕЙНЕР ГРАНИЦЫ СИСТЕМЫ ---
subgraph cluster_SystemBoundary {
label = "Система обработки онлайн-заказов";
fontname = "Helvetica,Arial,sans-serif"
fontsize = 14
color = "#757575"
style = "dashed,rounded"
bgcolor = "#FAFAFA"
margin = 20
// Процессы (зеленые круги)
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.3]
P1 [label="1.0nСоздатьnзаказ"];
P2 [label="2.0nОбработатьnплатеж"];
P3 [label="3.0nПодтвердитьnналичие товара"];
P4 [label="4.0nОтправитьnзаказ"];
// Хранилища данных (желтые записи)
node [shape = record, style = "filled", fillcolor = "#FFF9C4",
color = "#FBC02D", fixedsize = false]
OrderDS [label="{ D1 | Заказы }"];
ProductDS [label="{ D2 | Инвентарьnтоваров }"];
ShippingDS [label="{ D3 | Отгрузки }"];
}
// --- ПОТОКИ ДАННЫХ: Внешние сущности ---
Customer -> P1 [label="Заказ иnданные аккаунта"];
P1 -> Customer [label="Подтверждениеnзаказа"];
P2 -> PaymentGateway [label="Запросnплатежа"];
PaymentGateway -> P2 [label="Статусnплатежа"];
Warehouse -> P3 [label="Наличиеnтовара"];
Courier -> P4 [label="Статусnдоставки", dir=both];
// --- Цепочка процессов ---
P1 -> P2 [label="Суммаnзаказа"];
P2 -> P3 [label="Оплаченныйnзаказ"];
P3 -> P4 [label="Подтвержденныйnзаказ"];
// --- Процессы <-> Хранилища данных ---
P1 -> OrderDS [label="Создатьnзаказ"]; // только запись
P3 -> ProductDS [label="Обновитьnналичие", dir=both]; // чтение и запись
P4 -> ShippingDS [label="Создатьnотгрузку"]; // только запись
OrderDS -> P3 [label="Деталиnзаказа"]; // только чтение
ShippingDS -> P4 [label="Меткаnотгрузки"]; // только чтение
}
Интерпретация:
- Линейная цепочка
P1 → P2 → P3 → P4показывает упорядоченную цепочку: заказ создается до оплаты, до проверки наличия товара, до отправки. - Система Платежный шлюз обмен использует два односторонних стрелки (
Запрос на оплатувнешний,Статус платежавнутренний). - Хранилища данных выступают как состояние:
P1записывает Заказы,P3читает и обновляет запас (dir=both),P4записывает Отгрузки. P3 → ProductDSиспользуетdir=both— одна линия, а не две — потому что процесс одновременно читает и обновляет инвентарь.
Шаг 3 — детализация:Уровень-2 (Сосредоточьтесь на одном процессе)

Выберите процесс уровня-1 и разложите еготолько этот один. Покажитеродительские процессына границе (розовый), чтобы сохранить контекст, а также подпроцессы, подхранилища и потоки.
digraph DFD {
// --- СТИЛЬ ГРАФИКА И НАЗВАНИЕ ДИАГРАММЫ ---
graph [
rankdir = LR
splines = true
overlap = false
nodesep = 0.5
ranksep = 0.8
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
label = "Процесс оплаты (Уровень-2) - Система обработки онлайн-заказов"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// Внешняя сущность
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer; PaymentGateway;
// --- ГРАНИЦА СИСТЕМЫ (этот подпроцесс) ---
subgraph cluster_SystemBoundary {
label = "2.0 Процесс оплаты";
fontname = "Helvetica,Arial,sans-serif"
fontsize = 14
color = "#757575"
style = "dashed,rounded"
bgcolor = "#FAFAFA"
margin = 20
// Подпроцессы (зелёные круги)
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.3]
P21 [label="2.1nРассчитатьnИтог"];
P22 [label="2.2nПроверитьnОплату"];
P23 [label="2.3nОдобритьnОплату"];
P24 [label="2.4nПодтвердитьnЗаказ"];
// Подхранилища данных (жёлтые записи)
node [shape = record, style = "filled", fillcolor = "#FFF9C4",
color = "#FBC02D", fixedsize = false]
CartDS [label="{ D1 | Корзина/nПозиции заказа }"];
PromoDS [label="{ D2 | Акции }"];
PaymentDS [label="{ D3 | ОплатыnТранзакции }"];
OrderDS [label="{ D4 | Заказы }"];
// Родительские процессы (розовые) — контекст с более высокого уровня
node [shape = circle, style = "filled", fillcolor = "#FCE4EC",
color = "#C2185B", fixedsize = true, width = 1.4]
P1 [label="1.0nСоздатьnЗаказn(родитель)"];
P3 [label="3.0nПодтвердитьnИнвентарьn(родитель)"];
}
// Потоки от родительских процессов / клиента в подпроцессы
P1 -> P21 [label="ПозицииnЗаказа"];
P1 -> P22 [label="СпособnОплаты"];
Customer -> P22 [label="ДанныеnОплаты"];
// Цепочка подпроцессов
P21 -> P22 [label="Итог иnСкидки"];
P22 -> P23 [label="ПровереннаяnОплата"];
P23 -> P24 [label="ОплатаnОдобрена"];
// Взаимодействие с внешним шлюзом
P23 -> PaymentGateway [label="ЗапросnОдобрения"];
PaymentGateway -> P23 [label="Утверждение/nОтказ"];
// Вывод к родительским процессам / клиенту
P24 -> P3 [label="ОплаченныйnЗаказ"];
P24 -> Customer [label="ЧекnОплаты"];
// Доступ к хранилищам данных
P21 -> CartDS [label="ЧтениеnПозиций", dir=both];
P22 -> PromoDS [label="ПроверитьnАкцию"];
P23 -> PaymentDS [label="ЗаписатьnТранзакцию", dir=both];
P24 -> OrderDS [label="ОбновитьnСтатус"];
}
Интерпретация (по сравнению с Уровень-1):
- 2.1 Рассчитать итог — это чистая вычислительная операция — читает элементы корзины, вычисляет итоговую сумму, внешний ввод-вывод отсутствует, кроме хранилищ.
- 2.3 Авторизация платежа — это единственная этап, взаимодействующий с внешним платежным шлюзом — перемещение средств четко изолировано.
- Хранилище
Заказоввновь появляется, потому что 2.4 обновляет статус заказа (изначально написано 1.0 на уровне-1). - Цепочка
2.1 → 2.2 → 2.3 → 2.4является последовательная проверка пайплайна перед передачей на 3.0 (розовый родитель). - Родительские процессы 1.0 и 3.0 рисуются розовыми вне границы, чтобы зафиксировать начало и конец потоков.
Шаг 4 — Снова детализировать: Уровень-3 (Повторить рекурсивно)

Повторите точно такую же технику для любого подпроцесса, который всё ещё слишком сложен. Мы увеличиваем 2.2 Проверить оплату.
digraph DFD {
// --- СТИЛЬ ГРАФИКА И НАЗВАНИЕ ДИАГРАММЫ ---
graph [
rankdir = LR
splines = true
overlap = false
nodesep = 0.5
ranksep = 0.8
fontname = "Helvetica,Arial,sans-serif"
fontsize = 12
label = "Проверить оплату (Уровень-3) - Система обработки онлайн-заказов"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// Внешняя сущность
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Customer;
// --- ГРАНИЦА СИСТЕМЫ (этот подпроцесс на уровне листа) ---
subgraph cluster_SystemBoundary {
label = "2.2 Проверить оплату";
fontname = "Helvetica,Arial,sans-serif"
fontsize = 14
color = "#757575"
style = "dashed,rounded"
bgcolor = "#FAFAFA"
margin = 20
// Листовые процессы (зелёные круги)
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.3]
P221 [label="2.2.1nПроверитьnДанные карты/платежа"];
P222 [label="2.2.2nПроверитьnМошенничество"];
P223 [label="2.2.3nПроверитьnПромо-код"];
P224 [label="2.2.4nВычислитьnИтоговуюnСумму"];
// Листовые хранилища данных (жёлтые записи)
node [shape = record, style = "filled", fillcolor = "#FFF9C4",
color = "#FBC02D", fixedsize = false]
CardDS [label="{ D1 | Реестр карт }"];
FraudDS [label="{ D2 | Правила мошенничества }"];
PromoDS [label="{ D3 | Акции }"];
CartDS [label="{ D4 | Корзина/nПозиции заказа }"];
// Родительские процессы (розовые)
node [shape = circle, style = "filled", fillcolor = "#FCE4EC",
color = "#C2185B", fixedsize = true, width = 1.4]
P21 [label="2.1nВычислитьnИтоговуюnСумму (родитель)"];
P23 [label="2.3nОдобритьnОплату (родитель)"];
}
// Входы
P21 -> P221 [label="Итоговая сумма &nДата"];
Customer -> P221 [label="Данные оплаты"];
// Последовательная проверка с параллельным ветвлением
P221 -> P222 [label="ПроверенныеnДанные"];
P222 -> P223 [label="Нет флага мошенничестваn(параллельно)"];
// Подача данных для финального вычисления
P21 -> P223 [label="Промо-код"];
P221 -> P224 [label="Сумма оплаты"];
P223 -> P224 [label="Скидка применена"];
// Выход к родителю
P224 -> P23 [label="Проверенная иnсо скидкойnИтоговая сумма"];
// Доступ к хранилищам данных
P221 -> CardDS [label="ПроверитьnКарту"];
P222 -> FraudDS [label="ПроверитьnПравила"];
P223 -> PromoDS [label="Поиск иnПрименение"];
P224 -> CartDS [label="ЧтениеnПозиций", dir=both];
}
Интерпретация:
- 2.2.1 Проверка карты является вход — он должен завершиться успешно до начала проверки на мошенничество.
- 2.2.2 (Мошенничество) и 2.2.3 (Промо) выполняются параллельно параллельно: оба читают правила и оба поступают в финальные вычисления. Метка «(параллельно)» указывает на это.
- 2.2.4 Вычислить итоговую сумму является точка слияния точка — он объединяет
Итого по оплате+Скидкав один проверенный выход, возвращающийся к родительскому элементу2.3. - Реестр картиПравила мошенничестваявляются хранилищами детального уровня, недоступными на уровне 2 — новые хранилища естественным образом возникают при декомпозиции.
Шаг 5 — остановка, когда процессы являются «примитивными»
Продолжайте декомпозицию до тех пор, пока каждый процесс не будет описыватьодно, однозначное, реализуемое действие. Глубина не фиксирована; остановитесь, когда процесс четко соответствует одной функции или одному решению. Уровни 2.2.1–2.2.4 выше уже являются примитивными.
6. Лучшие практики и распространённые ошибки
✅ Лучшие практики
- Нумеруйте процессы иерархически (
2.2.4) чтобы любой диаграмма была самонавигационной в дереве. - Рисуйте родительские процессы на границе (розовый), чтобы потоки сохраняли контекст — никогда не оставляйте вход/выход без родителя.
- Используйте одну двунаправленную кромку (
dir=both) для двусторонних обменов вместо двух отдельных стрелок. Уменьшает загромождение. - Держите метки описательными, но краткими («Авторизовать платеж», а не «AP»).
- Разбирайте один процесс за раз — каждый уровень является собственной диаграммой; не помещайте несколько уровней на одну диаграмму.
- Сбалансируйте диаграммы — входы/выходы на родительском уровне должны быть равны суммарным входам/выходам его дочерних элементов (правило балансировки).
- Всегда объявляйте элементы — шаблон только с оформлением, который не объявляет узлы или кромки, отображает пустой холст. Каждая DFD должнасначала оформите, затем объявите, затем соедините.
- Имя хранилищ данных должно быть уникальным внутри дочерних диаграмм, но перенумеруйте локально (D1, D2…) для автономности.
❌ Распространённые ошибки
- Процессы-сироты — процесс без входов или выходов. Каждый процесс что-то преобразует.
- Отсутствие балансировки — поток появляется на уровне 1, но ни один из его дочерних элементов уровня 2 не производит/не потребляет его.
- Слишком раннее уточнение — раскрытие хранилищ данных на диаграмме контекста уровня 0 (они должны быть только на более низких уровнях).
- Мышление на основе потока управления — включение циклов или символов принятия решений в диаграмму потока данных; оставьте это для диаграмм потоков. Диаграммы потока данных показывают данные, а не порядок.
- Два параллельных стрелки для того, что должно быть одним
dir=bothребро — создает путаницу из дублирующих линий. - Неправильное направление доступа к хранилищу — пометка хранилища как только для чтения когда на самом деле производится запись (или наоборот).
- Шаблон стиля ошибочно воспринимается как диаграмма — забывание объявить узлы и рёбра приводит к пустой графической схеме.
7. Чек-лист проверки сверху вниз
Перед представлением диаграммы проверьте:
- ✅ У каждого процесса есть ≥1 вход и ≥1 выход.
- ✅ Каждая метка потока — это существительное («Сведения о заказе»), а не глагол.
- ✅ Каждый источник данных читаетсяи и записывается в какой-то момент (если только это не внешние справочные данные).
- ✅ Границы уровнейсбалансированность: дети потребляют и производят ровно то, что обменивалось их родителем.
- ✅ Внешние сущности появляются только на краях, никогда внутри границы.
- ✅
dir=bothиспользуется для двусторонних обменов; в противном случае односторонние стрелки. - ✅ Розовые ссылки на родительский процесс правильно показывают уровень, который разбивается.
- ✅ Код объявляет реальные узлы, рёбра и границу — это не просто правило стиля.
8. Обобщённое резюме процесса декомпозиции сверху вниз
Декомпозиция ДФП сверху вниз — это путь отабстракции к деталям:
- Контекст (уровень 0) — один блок, все границы и внешние сущности.
- Система (уровень 1) — основные процессы, хранилища и поток данных.
- Поддиаграммы (уровень 2, уровень 3…) — рекурсивно увеличивать один процесс за раз, сохраняя видимым контекст родительского элемента и нумеруя локальные хранилища.
Каждый уровень отвечает на другой вопрос: Уровень L0 спрашивает: «Каков масштаб системы?», уровень L1 спрашивает: «Каковы основные потоки данных?», уровень L2+ спрашивает: «Как именно преобразуются эти данные?»
С Процесс онлайн-заказа пример демонстрирует полную цепочку в полный, рабочий код Graphviz — от диаграммы с четырьмя сущностями диаграммы контекста, до четырёхэтапной процедуры проверки (2.2.1 → 2.2.4). С обрезка чисел, сбалансированность потоков, соблюдая единый легенда цветов (синие прямоугольники, зеленые круги, желтые записи, розовые ссылки на родительские элементы, пунктирная серая граница), и всегда явно указывая каждый узел/ребро, любой крупный систем остается удобной для навигации и однозначной — и каждый диаграмма действительно отображается.
9. Инструменты: построение декомпозиции DFD сверху вниз с помощью Visual Paradigm AI
Visual Paradigm AI помещает в ИИ-чата прямо внутри инструмента моделирования. Вместо ручного рисования каждого уровня вы можете управлять всей декомпозицией в диалоговом режиме, а затем уточнить результат. Вот как использовать его для точного подхода, описанного в этом руководстве.
9.1 Основные возможности для работы с DFD
ИVP ИИ-чатбот является ассистент по тексту и коду который работает с вами в диалоговом режиме. Для декомпозиции DFD сверху вниз он может:
| Возможность | Что он делает для вас |
|---|---|
| Генерировать код диаграммы | Генерировать Graphviz (DOT) на основе описания процесса — по одному уровню за раз |
| Анализировать прикрепленные изображения | Прочитайте изображение ручной или существующей DFD, которое вы загрузили, и преобразуйте его в структурированные модели |
| Уточняйте итеративно | Возьмите ваш отзыв («увеличить до 2.2», «добавить ветвь отказа») и повторно сгенерируйте диаграмму |
| Объясните толкования | Пройдитесь по тому, что означает каждый объект, процесс, хранилище и поток |
| Проверьте синтаксис | Убедитесь, что DOT структурно корректен, прежде чем отрисовывать его |
| Создайте вывод стратегии/диаграммы | Создайте сопутствующие диаграммы или структуры, сопровождающие DFD (например, диаграмму потоков или организационный контекст) |
📌 Примечание: Visual Paradigm поддерживает широкий спектр нотаций диаграммирования. Предпочтение следует отдавать BPMN для моделирования бизнес-процессов, требующих событий начала/окончания, шлюзов и диаграмм потоков; используйте DFD на основе Graphviz для строгого моделирования потоков данных, как показано в этом руководстве.
9.2 Проработанный диалог — декомпозиция процесса онлайн-заказа
Вот реалистичный сеанс чата, который отражает шаги, которые мы прошли. Обратите внимание, как каждый запрос углубляется на один уровень — именно методология сверху вниз.
Запрос 1 — Начните диаграмму контекста:
«Создайте диаграмму контекста (уровень 0) для системы онлайн-заказа. Внешние сущности: Клиент, Платежный шлюз, Склад, Курьер.»
VP AI отвечает с диаграммой потоков данных уровня 0 — одним центральным процессом, четырьмя внешними сущностями и их потоками — которую вы размещаете на диаграмме.
Подсказка 2 — Добавьте уровень детализации:
«Теперь разложите его на диаграмму потоков данных уровня 1 с процессами: 1.0 Разместить заказ, 2.0 Обработать оплату, 3.0 Подтвердить наличие товара, 4.0 Отправить заказ. Добавьте хранилища данных для заказов, товарного запаса и отправок.»
VP AI возвращает диаграмму уровня 1 с последовательно соединёнными процессами, присоединёнными хранилищами и сохранёнными потоками внешних сущностей — конвейер, который вы видели на шаге 2 руководства.
Подсказка 3 — Увеличьте один процесс:
«Увеличьте процесс 2.0 Обработка оплаты. Создайте поддиаграмму уровня 2 с процессами: 2.1 Рассчитать итог, 2.2 Проверить оплату, 2.3 Авторизовать оплату, 2.4 Подтвердить заказ. Сохраните процессы 1.0 и 3.0 как ссылки на родительские элементы.»
VP AI создаёт поддиаграмму уровня 2: подпроцессы, локальные хранилища (D1–D4), взаимодействие с платёжным шлюзом и розовые ссылки на родительские элементы 1.0 и 3.0 — соответствует шагу 3.
Подсказка 4 — Продолжите углубление:
«Углубитесь в процесс 2.2 Проверить оплату как диаграмму уровня 3: 2.2.1 Проверить карту, 2.2.2 Проверить мошенничество, 2.2.3 Проверить промоакцию, 2.2.4 Рассчитать итоговую сумму. Добавьте хранилища для реестра карт, правил мошенничества, промоакций и элементов корзины.»
VP AI генерирует диаграмму листа уровня 3 с вычислением сходящихся потоков (2.2.4) и параллельными ветвями проверки мошенничества/промоакций — в точности шаг 4.
Подсказка 5 — Добавьте обработку исключений:
«Добавьте путь ошибки: если процесс 2.2.2 Проверить мошенничество помечает транзакцию, направьте её на процесс уведомления об отмене, возвращающийся к Клиенту.»
VP AI уточняет диаграмму с ветвью отказа и автоматически перебалансирует потоки.
9.3 Шаблоны подсказок, которые работают
Используйте эти шаблоны, чтобы получить надёжные результаты, соответствующие методологии:
| Цель | Пример запроса |
|---|---|
| Разложить на один уровень глубже | «Увеличить 3.0 Подтвердить наличие как поддиаграмму уровня 2.» |
| Указать нумерацию | «Использовать нумерованные процессы 2.1, 2.2, 2.3.” |
| Сохранить контекст родительского элемента | «Оставить 1.0 и 3.0 как ссылки на родительский элемент на границе.» |
| Добавить хранилища данных | «Включить хранилища: D1 Элементы корзины, D2 Акции.” |
| Показать двунаправленный поток | «Использовать dir=both для процесса ↔ чтение и запись в хранилище.» |
| Сбалансировать уровень | «Убедитесь, что входы и выходы соответствуют родительскому уровню.» |
| Добавить путь сбоя | «Добавьте ветвь исключения, когда платеж отклонен.” |
| Ограничить глубину | «Останавливайтесь на примитивных процессах — одиночных, реализуемых действиях.» |
9.4 Загрузка изображения для анализа
Если у вас уже есть рисунок от руки или устаревший ДФП, и вы хотите его цифровизировать:
- Прикрепите изображениек чату (снимок экрана, фото или экспорт существующей диаграммы потоков данных).
- Спросите: «Проанализируйте это изображение диаграммы потоков данных и преобразуйте его в структурированную модель, которую можно редактировать».
- VP AI анализирует изображение (читая формы, метки и стрелки) и воссоздает сущности, процессы, хранилища и потоки в виде редактируемой диаграммы.
📌 ИИ читает содержимое изображения содержание — прямоугольники, круги, записи и их метки — и воспроизводит их в правильной нотации. Это быстрый путь от чернового наброска к чистой, многослойной модели, которую затем можно дополнительно разложить.
9.5 Итерации с рабочим процессом артефактов
VP AI сохраняет каждую сгенерированную диаграмму как артефакт который можно использовать при доработке:
- «Улучшите артефакт уровня 2, добавив ветвь отказа из-за мошенничества». — нацелен на конкретную уже сгенерированную диаграммуконкретную уже сгенерированную диаграмму вместо повторной генерации с нуля.
- «Сгенерируйте заново диаграмму контекста, но исключите сущность «Склад»». — заменяет артефакт при изменении объема работ.
- «Сравните артефакты уровня 2 и уровня 3 для балансировки.»— проверяет соответствие потоков родительского/дочернего уровней.
Поскольку артефакты сохраняют состояние диалога, вы можете последовательно уточнять детали, не теряя предыдущих решений — суть декомпозиции сверху вниз.
9.6 Рекомендуемый чек-лист рабочего процесса
| Этап | Действие |
|---|---|
| 1. Сооружение | Сначала запросите диаграмму контекста (уровень 0). |
| 2. Создайте уровень 1 | Запросите декомпозицию основных процессов с учетом хранилищ и границы. |
| 3. Детализация | Просматривайте один процесс за раз; сохраняйте ссылки на родительские элементы. |
| 4. Уточнение | Запросите исключительные пути, исправления балансировки и исправления хранилищ. |
| 5. Валидация | Попросите ИИ проверить синтаксис DOT; ознакомьтесь с чек-листом в разделе 7. |
| 6. Документ | Запросите повествование интерпретации, которое будет прикреплено к каждому уровню. |
9.7 Пример вывода — попросите ИИ VP сгенерировать код уровня 1
Типичный ответ чат-бота для Разложение шага-2 был бы полный, рабочий DOT, который вы видели ранее:

digraph DFD {
graph [
rankdir = LR, splines = true, overlap = false,
nodesep = 0.5, ranksep = 0.8,
fontname = "Helvetica,Arial,sans-serif", fontsize = 12,
label = "Система обработки онлайн-заказов - Уровень 1"
]
node [ fontname = "Helvetica,Arial,sans-serif", fontsize = 11, penwidth = 1.5 ]
edge [ fontname = "Helvetica,Arial,sans-serif", fontsize = 9,
color = "#555555", arrowsize = 0.8 ]
// Внешние сущности
node [shape = box, style = "filled", fillcolor = "#E1F5FE", color = "#0288D1"]
Клиент; Платежный шлюз; Склад; Курьер;
subgraph cluster_SystemBoundary {
label = "Система обработки онлайн-заказов";
fontname = "Helvetica,Arial,sans-serif"
fontsize = 14
color = "#757575"
style = "dashed,rounded"
bgcolor = "#FAFAFA"
margin = 20
node [shape = circle, style = "filled", fillcolor = "#E8F5E9",
color = "#388E3C", fixedsize = true, width = 1.3]
P1 [label="1.0nСоздатьnзаказ"];
P2 [label="2.0nОбработатьnплатеж"];
P3 [label="3.0nПодтвердитьnналичие товара"];
P4 [label="4.0nОтправитьnзаказ"];
node [shape = record, style = "filled", fillcolor = "#FFF9C4",
color = "#FBC02D", fixedsize = false]
OrderDS [label="{ D1 | Заказы }"];
ProductDS [label="{ D2 | Товарныйnинвентарь }"];
ShippingDS [label="{ D3 | Отгрузки }"];
}
// Потоки
Клиент -> P1 [label="Заказ иnданные аккаунта"];
P1 -> Клиент [label="Подтверждениеnзаказа"];
P2 -> Платежный шлюз [label="Запросnплатежа"];
Платежный шлюз -> P2 [label="Статусnплатежа"];
Склад -> P3 [label="Наличиеnтовара"];
Курьер -> P4 [label="Статусnдоставки", dir=both];
P1 -> P2 [label="Суммаnзаказа"];
P2 -> P3 [label="Оплаченныйnзаказ"];
P3 -> P4 [label="Подтвержденныйnзаказ"];
P1 -> OrderDS [label="Создатьnзаказ"];
P3 -> ProductDS [label="Обновитьnналичие", dir=both];
P4 -> ShippingDS [label="Создатьnотгрузку"];
OrderDS -> P3 [label="Данныеnзаказа"];
ShippingDS -> P4 [label="Маркировкаnотгрузки"];
}
Вставьте это в диаграмму VP, и у вас будет полностью структурированная модель уровня 1 — готовая к повторному разложению с помощью следующего запроса.
10. Обобщение
Разложение ДФП сверху вниз — это путь от абстракция до деталей:
- Контекст (Уровень 0) — один блок, все границы и внешние сущности.
- Система (Уровень 1) — основные процессы, хранилища и поток данных.
- Поддиаграммы (Уровень 2, Уровень 3…) — рекурсивно увеличивайте один процесс за раз, сохраняя видимым родительский контекст и нумеруя локальные хранилища.
Каждый уровень отвечает на разный вопрос:Уровень 0 спрашивает «Каков масштаб системы?», Уровень 1 спрашивает «Каковы основные потоки данных?», Уровень 2+ спрашивает «Как именно преобразуются эти данные?»
С Visual Paradigm AIвесь процесс является диалоговым: задайте запрос на Уровень 0, попросите его разложить, увеличивайте по одному процессу за раз, запрашивайте ветви исключений и загружайте изображения для цифровизации существующих диаграмм. В сочетании с строгимнумерацией, балансировкой потоков, последовательнойцветовой легендой, и полнойобъявляй-затем-соединяйкод, любой крупный системе остается удобной для навигации, однозначной — и каждый диаграмма действительно отображается. 🚀
Эта статья также доступна на Deutsch, English, Español, فارسی, Français, Bahasa Indonesia, 日本語, Polski, Portuguese, Việt Nam, 简体中文 and 繁體中文












