Функциональное моделирование программной системы
Контекст задачи
Функциональное представление системы показывает, какие функции выполняет система, какие данные при этом преобразуются и как они передаются между функциями. Основной инструмент — диаграммы потоков данных (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. Согласование с информационной моделью
Проверьте, что:
- Все хранилища данных из DFD соответствуют сущностям из ER-диаграммы
- Все CRUD-операции над сущностями покрыты функциями из DFD
- Нет «висящих» сущностей (сущность есть, но ни одна функция с ней не работает)
| Проверка | Статус (✓/✗) | Комментарий |
|---|---|---|
| Каждое хранилище DFD соответствует сущности ER | ||
| Каждая сущность ER имеет хотя бы одну CRUD-операцию | ||
| Нет функций, работающих с несуществующими сущностями |
Результат подзадачи 6: таблица согласования.
Результаты задачи
- DFD: контекстная диаграмма (уровень 0) + DFD уровня 1 + DFD уровня 2 (опционально)
- CRUD-матрица (минимум 4 сущности)
- Спецификация функций (входные/выходные данные, CRUD-операции)
- Таблица согласования с информационной моделью (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-анализа