Функциональное моделирование программной системы

Сложность: medium Тема: ARCH
DFD функциональная декомпозиция потоки данных CRUD

Контекст задачи

Функциональное представление системы показывает, какие функции выполняет система, какие данные при этом преобразуются и как они передаются между функциями. Основной инструмент — диаграммы потоков данных (DFD, Data Flow Diagrams). DFD помогают:

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

В отличие от UML-диаграмм, DFD фокусируется на данных, а не на управлении или последовательности вызовов.

CRUD-анализ (Create, Read, Update, Delete) дополняет DFD, показывая, какие операции над сущностями выполняет каждая функция.

теория и примеры

Формулировка

Постройте функциональное представление системы в виде диаграмм потоков данных (DFD) и выполните CRUD-анализ для выявления операций над сущностями.

Теория и/или примеры

  • Именование потоков — существительные («учётные данные», «подтверждение оплаты»)
  • Именование процессов — глаголы («проверить», «сохранить», «отправить»)
  • Инструменты: draw.io, Lucidchart, Diagrams.net, PlantUML
  • CRUD-матрицу удобно строить после ER-диаграммы (сущности уже есть)
  • Если сущность поддерживает только чтение (Read) — возможно, она не нуждается в модификации
  • Если сущность никогда не читается (Read отсутствует) — возможно, она не нужна

Справка по DFD

Нотация (Гейна-Сарсона) Значение Пример
○ (круг) Процесс (функция) «Проверить логин»
□ (квадрат) Внешняя сущность «Пользователь»
= (двойная линия) Хранилище данных «База пользователей»
→ (стрелка) Поток данных «учётные данные»

Правила:

  • Каждый процесс должен иметь минимум один входной и один выходной поток
  • Хранилища данных не могут быть связаны напрямую (только через процессы)
  • Внешние сущности не могут получать/отправлять данные друг другу без системы

Справка по CRUD

CRUD — акроним от Create, Read, Update, Delete. Используется для анализа того, какие операции над сущностями выполняет каждый компонент/функция.

Операция Назначение
Create Создание новой записи/сущности
Read Чтение/получение данных
Update Обновление существующих данных
Delete Удаление данных

Подзадача 1. Контекстная диаграмма (DFD уровня 0)

Изобразите систему как «чёрный ящик» с её внешним окружением:

  • Внешние сущности (пользователи, внешние системы, сервисы)
  • Потоки данных между системой и внешними сущностями
  • Границу системы

Результат подзадачи 1: контекстная диаграмма с указанием всех потоков данных и их направления.

Подзадача 2. Декомпозиция функций (DFD уровня 1)

Разбейте систему на основные функции (процессы). Для каждой функции определите:

  • Входные потоки данных (что нужно для выполнения)
  • Выходные потоки данных (что производит функция)
  • Хранилища данных (базы данных, файлы, кэши), к которым функция обращается

Результат подзадачи 2: DFD уровня 1 (3-7 процессов).

Подзадача 3. Детализация функций (DFD уровня 2, опционально)

Для наиболее сложных функций выполните декомпозицию на уровень 2:

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

Результат подзадачи 3: DFD уровня 2 (для 2-3 ключевых функций).

Подзадача 4. CRUD-анализ

На основе сущностей из ER-диаграммы (Задача В) и функций из DFD уровня 1 заполните матрицу CRUD.

Матрица CRUD:

Сущность (из ER) Create Read Update Delete Какие функции выполняют операции
Пользователь + + + - Регистрация, Авторизация, Редактирование профиля
Заказ + + + - Оформление заказа, Просмотр заказов, Изменение статуса
Товар - + - - Просмотр каталога
Отзыв + + + + Добавление отзыва, Модерация

Легенда:

  • + — операция поддерживается (система её выполняет)
  • - — операция не поддерживается

Результат подзадачи 4: заполненная матрица CRUD (минимум 4 сущности).

Подзадача 5. Спецификация функций (интерфейсы)

Для каждой функции из DFD уровня 1 опишите:

  • Входные данные (какие данные получает функция)
  • Выходные данные (какие данные возвращает функция)
  • Какие сущности и операции CRUD используются
Функция (из DFD) Входные данные Выходные данные CRUD-операции (сущность, операция)
Оформить заказ Данные заказа (пользователь, товары, адрес) Подтверждение заказа, номер заказа Заказ (C), Корзина (D)
Просмотреть каталог Категория, фильтры Список товаров Товар (R)
Зарегистрироваться Логин, email, пароль Подтверждение регистрации Пользователь (C)

Результат подзадачи 5: таблица спецификации функций.

Подзадача 6. Согласование с информационной моделью

Проверьте, что:

  1. Все хранилища данных из DFD соответствуют сущностям из ER-диаграммы
  2. Все CRUD-операции над сущностями покрыты функциями из DFD
  3. Нет «висящих» сущностей (сущность есть, но ни одна функция с ней не работает)
Проверка Статус (✓/✗) Комментарий
Каждое хранилище DFD соответствует сущности ER    
Каждая сущность ER имеет хотя бы одну CRUD-операцию    
Нет функций, работающих с несуществующими сущностями    

Результат подзадачи 6: таблица согласования.

Результаты задачи

  1. DFD: контекстная диаграмма (уровень 0) + DFD уровня 1 + DFD уровня 2 (опционально)
  2. CRUD-матрица (минимум 4 сущности)
  3. Спецификация функций (входные/выходные данные, CRUD-операции)
  4. Таблица согласования с информационной моделью (ER)

Критерии оценивания

DFD (подзадачи 1-3)

  • Контекстная диаграмма включает всех внешних сущностей
  • Все потоки данных подписаны и имеют направление
  • DFD уровня 1 содержит 3-7 процессов
  • Хранилища данных корректно идентифицированы
  • Детализация (уровень 2) выполнена для 2-3 сложных функций (если применимо)

CRUD-анализ (подзадача 4)

  • Матрица CRUD содержит минимум 4 сущности
  • Операции корректно отмечены (+/-)
  • Для каждой операции указаны функции, которые её выполняют

Спецификация функций (подзадача 5)

  • Для каждой функции (из DFD уровня 1) заполнена строка в таблице
  • Входные и выходные данные описаны с использованием терминов предметной области
  • CRUD-операции соответствуют матрице CRUD

Согласование с ER (подзадача 6)

  • Проведена проверка соответствия хранилищ DFD и сущностей ER
  • Выявлены и отмечены расхождения (если есть)
  • Нет «висящих» сущностей без операций
  • Выполнена трассировка от требований (use case) → DFD → CRUD → ER
  • Предложены улучшения информационной модели на основе CRUD-анализа