
- •Аннотация к вопросам для Госэкзаменов по Информационным Системам и Вычислительным процессам
- •1. Модели данных 4
- •2. Прикладные системы 10
- •3. Анализ и проектирование систем 25
- •4. Коллективная разработка систем 35
- •5. Архитектура систем 38
- •6. Программирование 42
- •7. Формальные языки и методы трансляции 44
- •8. Методы распределения памяти и доступа к данным 51
- •9. Сети Петри 57
- •1. Модели данных
- •1.1. Концептуальная и логическая модель данных. Модель «сущность связь» (er-модель)
- •1.2. Полная функциональная зависимость. Вторая нормальная форма (2нф). Приведение отношения к 2нф
- •1.3. Транзитивная зависимость. Третья нормальная форма (3нф). Приведение отношения к 3нф
- •1.4. Операции реляционной алгебры: булевы операции, операции выбора, проекции, соединения, деления
- •1.5. Операторы расщепления и фактора. Их применение для организации работы с распределенными данными
- •1.6. Транзакции в базах данных Понятие транзакции
- •Принципы транзакций (acid)
- •Модели транзакций
- •2. Прикладные системы
- •2.1. Классификация современных программных прикладных систем
- •2.2. Требования к качеству прикладных программных систем: адекватность технологии, удобство использования, устойчивость, сопровождаемость, защищенность, переносимость
- •Адекватность технологии предметной области
- •Удобство использования
- •Сопровождаемость
- •Устойчивость
- •Защищенность
- •Переносимость
- •2.3. Условия и способы тиражирования прикладных программных систем
- •2.5. Жизненный цикл программных систем. Этапы жизненного цикла
- •2.6. Модели жизненного цикла – каскадная, поэтапная, спиральная, инкрементная. Области их применения
- •2.7. Средства автоматизации проектирования (case-средства)
- •2.8. Оценка параметров программной системы. Мера, метрика. Анализ риска Оценка параметров программной системы
- •Мера и метрика
- •Анализ рисков и первичная оценка
- •2.9. Размерно-ориентированные метрики: правила оценивания, область применимости
- •Выполнение оценки проекта
- •Пример оценки проекта
- •Достоинства и недостатки
- •3. Анализ и проектирование систем
- •3.1. Анализ требований, его роль в жизненном цикле создания программной системы. Основные задачи анализа требований. Системный структурный анализ
- •3.2. Методология sadt (idef0). Ее реализация в case-средстве bPwin
- •Использование case-средства bPwin для построения idef0-модели
- •3.3. Моделирование потоков данных и процессов их обработки. Построение диаграмм потоков данных
- •Диаграммы потоков данных
- •Диаграммы потоков данных в методологии Гейна-Сарсона
- •Использование case-средства bPwin для построения дпд
- •4. Коллективная разработка систем
- •4.1. Обоснование необходимости. Проблемы. Типы коллективов программистов Проблема
- •Профессиональные особенности
- •Типы коллективов программистов
- •Традиционная бригада
- •Бригада без персонализации
- •Бригада главного программиста
- •4.2. Условия работы коллективов программистов: физическая, социальная, административная обстановки
- •Стимулы
- •4.3. Взаимодействие участников программного проекта. Их роли в коллективе разработчиков Профессиональные особенности
- •Технические роли в бригаде
- •Психологические роли в бригаде
- •5. Архитектура систем
- •5.1. Причины декомпозиции программы на модули (содержательные и технические аспекты). Декомпозиция как способ борьбы со сложностью
- •5.2. Модуль, его информационная закрытость. Интерфейс и реализация. Связность модуля, уровни связности
- •5.3. Сцепление модулей, уровни сцепления. Модели управления модульной системой
- •6. Программирование
- •6.1. Объектный подход к программированию. Объект и класс. Инкапсуляция, наследование, полиморфизм. Абстрактные и интерфейсные классы
- •6.2. Классы в современных системах программирования. Общие, собственные и защищенные области. Свойства, их назначение, описание и использование. Владелец и родитель класса
- •7. Формальные языки и методы трансляции
- •7.1. Право- и леволинейные грамматики. Регулярные (автоматные) грамматики. Регулярные множества и праволинейные грамматики
- •7.2. Автоматы с магазинной памятью (мп-автоматы). Детерминированные и недетерминированные мп-автоматы. Построение эквивалентного мп-автомата по кс-грамматике
- •7.3. Восходящий анализ кс-языков без возвратов. Lr(k)-грамматики. Грамматики простого предшествования. Алгоритм «перенос-свертка» для грамматики простого предшествования
- •7.4. Алгоритмы удаления пустых и недостижимых символов в кс-грамматике. Нормальные формы кс-грамматик (Хомского и Грейбах). Устранение левой рекурсии в грамматике
- •7.5. Компиляторы и интерпретаторы. Архитектура компилятора. Фазы и этапы компиляции. Препроцессоры
- •7.6. Дерево вывода для кс-грамматик. Восходящий и нисходящий синтаксический анализ. Алгоритм нисходящего разбора с возвратами
- •7.7. Промежуточные представления программ: атрибутно-синтаксическое дерево, триадное представление, тетрады, обратная польская запись. Байт-коды внутреннего представления (Java-код, p-код и др.)
- •7.8. Ll(k)-грамматики, соотношение классов ll(k). Множества first(k) и follow(k) и их построение. Разделенная грамматика
- •7.9. Метод рекурсивного спуска построения синтаксического анализатора
- •7.10. Способы описания синтаксиса языков программирования. Диаграммы Вирта, расширенная форма Бэкуса-Наура
- •7.11. Работа с регулярными выражениями в языках программирования (c#, php). Описание типов xml-документов с помощью грамматики (dtd)
- •8. Методы распределения памяти и доступа к данным
- •8.1. Простые методы динамического распределения памяти: стек, дек, список блоков постоянной длины
- •Простейшее распределение памяти
- •Выделение памяти блоками постоянной длины
- •8.2. Методы динамического распределения памяти, основанные на списках блоков переменной длины
- •8.3. Методы доступа к данным, основанные на индексах: индексно-последовательный и индексно-произвольный Индексные методы
- •Индексно-последовательный метод
- •Индексно-произвольный метод
- •8.4. Методы доступа к данным, основанные на инвертированных списках и битовых картах Инвертированные списки
- •Битовые карты
- •8.5. Алгоритмы хеширования, основанные на методах деления, умножения и деления многочленов Метод деления
- •Метод умножения
- •Деление многочленов
- •8.6. Алгоритмы разрешения коллизий в перемешанных таблицах, основанные на методах внешних и внутренних цепочек Метод внешних цепочек
- •Метод внутренних цепочек
- •9. Сети Петри
- •9.1. Определение и основные понятия сетей Петри. Структура, графы, маркировка Структура сетей Петри
- •Графы сетей Петри
- •Маркировка сетей Петри
- •9.2. Моделирование сетями Петри задач о производителе/потребителе и о чтении/записи Задача о производителе и потребителе
- •Задача о чтении/записи
- •9.3. Безопасность и ограниченность сетей Петри Безопасность
- •Ограниченность
- •9.4. Активность сетей Петри
- •9.5. Достижимость и покрываемость в сетях Петри
- •9.6. Дерево достижимости сети Петри. Алгоритм построения дерева достижимости Дерево достижимости
- •Алгоритм построения дерева достижимости
- •9.7. Применение дерева достижимости сети Петри для проверки безопасности и ограниченности.
- •9.8. Применение дерева достижимости сети Петри для проверки покрываемости
- •Литература Основная
- •Дополнительная
- •Формальные языки и методы трансляции
- •Методы доступа к данным и распределения памяти
- •Сети Петри
Диаграммы потоков данных
Диаграммы потоков данных (ДПД, англоязычная аббревиатура – DFD) – это графическая составляющая методологий структурного анализа и проектирования. С их помощью строится модель процессов преобразования информации в информационной системе. Основное назначение этой модели – определить процессы и данные, над которыми они происходят. Модели процессов используются для описания сложных систем, для оценки требований к системе, как механизм взаимодействия участников проекта на этапе проектирования, служат основой физического проектирования или реализации системы. В ряде случаев [Калашян-3] они используются на этапе анализа вместо SADT-диаграмм.
Система представляется в виде иерархического набора диаграмм потоков данных, детализирующих её функции. Диаграммы показывают потоки данных между процессами, характер и структуру данных, которые хранятся в системе, интерфейсы с внешними по отношению к системе сущностями. Функции нижнего уровня описываются текстуально либо на естественном языке, либо на языке программирования, либо на псевдокоде. Данные и их потоки описываются текстуально или заданием их структуры.
Предполагается, что процессы (функции) происходят мгновенно, входы всегда доступны, и на выходы всегда поступают данные. Диаграммы не показывают последовательность выполнения функций. Поведенческие аспекты представляют графы преобразований, дополняющие диаграммы потоков данных возможностями моделирования систем реального времени и систем, управляемых событиями.
В силу того, что последовательность выполнения процессов явно не задана, а процесс может выполняться, как только у него будет достаточно исходных данных, ДПД пригодны для описания асинхронных (параллельных) процессов. Их согласование, синхронизация по данным, становится возможным в силу наличия компонента «хранилище данных». Если процесс, воспринимающий результирующие данные текущего процесса как входные, не может быть запущен, он получает их из хранилища, куда их помещает текущий процесс. Такая модель асинхронной обработки очень похожа на механизм сетей Петри.
Моделирование потоков данных – достаточно старый и полезный способ представления систем с асинхронной обработкой. Для него существуют различные языки описания моделей, самые распространённые из которых в рамках структурных методологий – это методологии Гейна-Сарсона и Йодана / де Марко. Они очень похожи, различаются, в основном, нотацией, правда, в методологии Гейна-Сарсона есть этап моделирования данных, расположенных в хранилищах. Далее рассмотрим методологию Гейна-Сарсона.
Диаграммы потоков данных в методологии Гейна-Сарсона
Методология Гейна-Сарсона, как и все структурные методологии, основана на идее нисходящей иерархической организации и поддерживается традиционными нисходящими методами проектирования спецификаций. Её цель – преобразование требований к системе, полученных в результате анализа, в достаточно точные определения. Достаточность определяется возможностью программиста однозначно реализовать проектируемую функцию. Методология базируется на графическом представлении потоков данных, она позволяет создать документ, который будет понятен аналитику, проектировщику и программисту, то есть может служить базой для их взаимопонимания.
Диаграмма потоков данных описывает
потоки данных (arrow);
процессы (activity);
хранилища данных (data store);
внешние сущности (external reference).
П
оток
данных – механизм передачи
информации. Поток изображаются стрелкой,
направление которой показывает
направление потока. Стрелка имеет имя,
заданное существительным. Если имя
очевидно, оно может быть опущено.
П
роцесс
преобразует входные потоки, генерируя
выходные в соответствии с действием,
которое обозначено в его имени. Имя
задаётся глаголом с дополнением,
например, «Напечатать экзаменационную
ведомость». Процесс имеет уникальный
номер внутри диаграммы.
Х
ранилище
данных позволяет сохранять данные,
передаваемые потоком. Структура
хранилища может быть задана. Хранилище
может служить как источником данных
для процесса, так и приёмником. Имя
хранилища идентифицирует его содержимое
и задаётся существительным. Если поток,
связанный с хранилищем, имеет ту же
структуру, имя его может быть опущено.
В
нешняя
сущность входит во внешний контекст
системы. Она представляет собой источник
или приёмник внешних по отношению к
системе данных. Её имя обозначается
существительным в именительном падеже,
возможно, с поясняющими словами. Внешняя
сущность не участвует ни в каких
операциях системы.
Диаграмма представлена в виде графа, узлы которого – процессы, хранилища и внешние сущности, а дуги – потоки данных. Модель представляется иерархией диаграмм, каждая из которых, кроме корневой (контекстной) детализирует какой-либо процесс на предыдущем уровне иерархии, то есть, иерархическое упорядочение соответствует детализации процессов в системе.
Построение ДПД начинается с представления проектируемой системы в виде диаграммы верхнего уровня иерархии – контекстной. Она состоит из одного процесса и потоков, соединяющих его с границами диаграммы или с внешними сущностями. Имя единственного процесса совпадает с именем системы. Следует внимательно отнестись к содержанию данной диаграммы: она демонстрирует информационный интерфейс системы с внешним миром, то есть все её входы и выходы. На контекстной диаграмме не могут изображаться хранилища: если они внутренние, они должны быть внутри процесса, если внешние – они входят во внешнюю сущность.
Для построения диаграммы следующего уровня процесс контекстной диаграммы детализируется с помощью нескольких процессов, соединенных потоками. Как правило, поток не соединяет два процесса непосредственно, обычно процесс направляет его в одно из хранилищ, которое и служит исходным узлом потока, направленного в следующий процесс. Таким образом задаётся возможность асинхронной (параллельной) обработки данных.
Поток, в свою очередь, тоже может быть детализирован. На внешней диаграмме он может иметь более общий характер, на внутренней – более конкретный. Для разделения потока используют специальный групповой узел. Этот же узел используется и для слияния потоков.
Каждый процесс диаграммы в свою очередь может быть подвержен декомпозиции для более детального его представления. Как и в случае SADT-диаграмм, потоки верхнего уровня должны соответствовать детализируемым, а процессы детальной диаграммы должны входить в детализируемый процесс.
Детализация должна заканчиваться тогда, когда процесс можно описать простым способом, однозначно понятным программисту: формализованным текстом, псевдокодом или фрагментом программного кода. Такое описание называют миниспецификациями.
Для того, чтобы диаграммы потоков данных отвечали своей цели, то есть были бы понятны программисту, при их написании полезно руководствоваться некоторыми правилами, которые, в частности, представлены в [Калянов-15]. Главные из них следующие:
размещать на каждом уровне декомпозиции 3-6 процессов;
выбирать ясные и однозначные имена процессов, хранилищ и потоков;
однократно определять функционально идентичные процессы;
контролировать связность диаграмм: следить за непрерывностью дуг при детализации;
следить, чтобы процессы не соединялись потоками непосредственно (с учётом уровней детализации), поток, кроме контекстного, должен либо начинаться, либо заканчиваться в хранилище.