- •Аннотация к вопросам для Госэкзаменов по Информационным Системам и Вычислительным процессам
- •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. Применение дерева достижимости сети Петри для проверки покрываемости
- •Литература Основная
- •Дополнительная
- •Формальные языки и методы трансляции
- •Методы доступа к данным и распределения памяти
- •Сети Петри
Достоинства и недостатки
Достоинства размерно-ориентированных метрик:
Простота расчёта.
Понятность как процесса оценки, так и результата, особенно для представителей заказчика.
Высокий уровень объективности оценки: слабая зависимость от экспертных оценок.
Недостатки размерно-ориентированных метрик:
Нельзя или трудно получить достоверные данные до начала разработки.
Нет оценки для баз данных.
Нельзя оценить сложность форм и выходных документов.
Нет возможности адекватно оценить сложные алгоритмы.
Метод чувствителен к языкам программирования: для разных языков получаются разные оценки.
Программистские организации склонны вознаграждать программистов, которые: а) пишут много кода, б) исправляют много ошибок. Соответственно, наилучший способ отличиться в таких условиях – это создать большое количество некачественного кода, а потом героически устранять в нем собственные же промахи.
3. Анализ и проектирование систем
3.1. Анализ требований, его роль в жизненном цикле создания программной системы. Основные задачи анализа требований. Системный структурный анализ
Анализ требований – первая фаза жизненного цикла (ЖЦ) разработки программного обеспечения (ПО). На ней требования заказчика уточняются, формализуются и документируются.
Согласно стандарту ГОСТ Р ИСО/МЭК 12207-99, регламентирующему состав процессов жизненного цикла ПО, анализ требований входит в процесс разработки. Рассматривается анализ требований к системе и к ПО.
Анализ требований к системе подразумевает определение её функциональных потребностей, требований к надёжности и безопасности, определение внешних интерфейсов и т.п.
Анализ требований к ПО предполагает определение таких характеристик ПО, как функциональные возможности, характеристики производительности, эргономические характеристики, особенности среды функционирования, требования к исходным данным, требования к установке и приёмке, ограничения в процессе разработки (сроки, ресурсы и т.п.).
На этапе анализа требований фактически даётся ответ на вопрос «Что должна делать система?» Без достаточного полного и точного ответа на этот вопрос существует значительный риск провала проекта: ошибки на этой стадии обходятся наиболее дорого. Цель анализа – преобразовать неясные, неточные знания о требованиях к системе в точные, по возможности, определения. Принципиальная сложность заключается в том, что потенциально бесконечная предметная область должна быть представлена конечным числом формализованных спецификаций, представляющих концептуальную модель предметной области. Такое преобразование невозможно выполнить формально, оно требует участия специалиста-аналитика. Этот этап нередко вызывает наибольшие трудности, которые связаны со следующими проблемами:
аналитику сложно увидеть предметную область с точки зрения заказчика;
заказчик обычно не в состоянии оценить выполнимость и трудоёмкость той или иной функции;
аналитик вынужден перерабатывать большое количество неструктурированной, а иногда и противоречивой информации;
заказчику сложно разобраться в технических терминах, присутствующих в спецификации, но если спецификация вполне понятна заказчику, есть риск, что она в значительной степени будет бесполезна программисту;
требования заказчика могут изменяться в процессе исследования.
Формализация знаний о предметной области, в свою очередь, преследует следующие цели:
обеспечение взаимопонимания между всеми участниками процесса разработки, в том числе, и заказчиками;
определение архитектуры будущей системы до её фактической реализации;
формирование базиса для планирования, оценки стоимости и времени создания системы.
Для достижения этих целей необходимо решить следующие задачи:
выбрать методику проведения исследования;
определить круг ключевых специалистов со стороны заказчика, которые будут выступать в роли экспертов;
выбрать методологию создания концептуальной модели предметной области;
подобрать необходимые инструментальные средства;
определить и согласовать терминологию документов;
определить структуру документов;
провести исследования (анализ предметной области) в соответствии с требованиями заказчика и выбранной методологией;
сформировать необходимую документацию;
обсудить полученные результаты с заказчиком и разработчиками.
Документ, который получается в результате анализа, носит название «Техническое задание». Его структура определяется на основе ГОСТ 34.602-89. Техническое задание содержит следующие разделы:
общие сведения:
назначение и цели создания системы;
характеристика объекта автоматизации;
требования к системе;
состав и содержание работ по созданию системы;
порядок контроля и приёмки системы;
требования по подготовке и вводу в действие;
требования к документированию;
источники разработки;
глоссарий.
В процессе выполнения анализа предметной области обычно используют два подхода: структурный анализ и объектно-ориентированный анализ. Методологии структурного анализа более глубоко проработаны и более понятны заказчикам, но методологии объектно-ориентированного анализа более современны и перспективны.
Структурным анализом принято называть метод исследования системы, которое начинается с её общего обзора, а затем детализируется, в результате чего получается иерархическая модель с числом уровней, достаточным для получения необходимых знаний о системе. Для методологий, основанных на структурном анализе, характерны такие черты, как разбиение на уровни абстракции с ограниченным числом элементов; ограниченный контекст, включающий лишь необходимые детали; использование формальных правил записи, обычно основанных на диаграммах.
В качестве базовых принципов структурного анализа выбраны два основных принципа: разбиение задач на подзадачи и иерархическое упорядочивание. Первый означает, что изначальная задача делится на фрагменты (модули), каждый из которых легко понять, а второй позволяет определить каждый модуль, выстраивая иерархию по уровням детализации.
Кроме того, в работе полезно руководствоваться правилами, предложенными в [15], некоторые из которых приведены далее:
абстрагирование – выделение лишь существенных деталей на данном уровне детализации;
формализация – строгий методический подход к решению проблемы;
концептуальная общность – следование единым принципам на всех этапах ЖЦ;
полнота – наличие необходимых элементов описания модели;
непротиворечивость – согласованность элементов модели;
независимость данных – состав и структура данных не зависит от реализации;
Структурная методология, которая чаще всего используется для анализа – SADT, точнее, её подмножество IDEF0, которое реализовано в инструментальном средстве BPwin.
