- •Аннотация к вопросам для Госэкзаменов по Информационным Системам и Вычислительным процессам
- •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. Применение дерева достижимости сети Петри для проверки покрываемости
- •Литература Основная
- •Дополнительная
- •Формальные языки и методы трансляции
- •Методы доступа к данным и распределения памяти
- •Сети Петри
Переносимость
Переносимость обозначает возможность нормальной эксплуатации программной системы в различных программно-аппаратных средах. Проблемы переносимости стояли перед программистами всегда, но раньше они касались в большей степени аппаратного обеспечения. В последнее время, в связи с насыщенностью предприятий и организаций программным обеспечением различного происхождения, более острой стала проблема интеграции программного обеспечения, а, следовательно, и разработка программных систем, допускающих интеграцию.
Синоним – адаптируемость.
2.3. Условия и способы тиражирования прикладных программных систем
Тиражирование ППС – проблема, связанная с необходимостью окупить значительные расходы, связанные с разработкой прикладной программной системы. Сложность и уникальность предметной области не позволяют легко тиражировать соответствующие системы. Возникает противоречие – чем сложнее предметная область, тем больше в ней частных, уникальных особенностей, тем сложнее и дороже ППС, но тем меньше возможностей для тиражирования. Упрощение системы, применение обобщенных подходов, теоретически увеличивает возможность тиража, но уменьшает потребительскую ценность системы. В предельном случае она может стать бесполезной.
Такое состояние дел объясняет разницу в стоимости «настольных» и больших прикладных систем, которая может различаться на порядки. Поэтому так актуальна проблема снижения стоимости ППС за счет тиражирования.
Обычно системы делят на тиражируемые и индивидуальные (системы индивидуальной разработки). С точки зрения ППС нормальное тиражирование возможно при строго определенной и слабо меняющейся предметной области. Такой может быть бухгалтерия небольших организаций, отдел кадров, товарный склад и т.п. В этом случае размер тиража зависит от количества потенциальных покупателей их покупательной способности, наличия конкурентных разработок. При большом тираже стоимость может быть заметно снижена, что увеличивает количество возможных покупателей и, следовательно, прибыль. Система, ориентированная на тираж, должна легко устанавливаться, иметь исчерпывающую эксплуатационную документацию, не требовать усилий на сопровождение. В этом смысле для потребителя она ничем не отличается от других серийных продуктов.
Индивидуальные системы разрабатываются для уникальной предметной области, поэтому тиражирование здесь невозможно. Уникальность заключается не столько в характере основного производства, сколько в тех существенных частностях, которыми оно характеризуется. Поскольку тираж невозможен, все расходы по производству и сопровождению ППС должно нести одно предприятие. Следовательно, индивидуальные системы обходятся заказчику существенно дороже тиражируемых. С другой стороны, индивидуальные системы обладают более полезными потребительскими качествами, так как при их разработке учитывались условия именно этого предприятия.
Реально существует еще класс систем, которые можно назвать слабо тиражируемыми. Их отличительная особенность – небольшой тираж и, как правило, наличие этапа настройки системы под конкретного заказчика. Этот класс систем ориентирован на предметную область, которая в основных чертах повторяется на ряде предприятий, однако есть и существенные различия. Эти различия можно интерпретировать как индивидуальные свойства предприятия. Цель настройки состоит в том, чтобы учесть эти свойства в конкретном экземпляре ППС. Например, в различных медицинских учреждениях существуют биохимические лаборатории. Однако условия работы централизованной лаборатории, лаборатории крупной или небольшой больницы, поликлиники или санатория заметно отличаются. Более того, в рамках лаборатории одного класса есть различия в оборудовании, технологии, взаимоотношениями с пациентами и заказчиками и т.п. В этом случае полезно разработать слабо тиражируемый вариант системы, который будет настраиваться для удовлетворения потребностей заказчика. Системы такого рода способны тиражироваться для ряда сходных, но не тождественных по свойствам предприятий с учетом индивидуальных особенностей. То есть, они характеризуются чертами как тиражируемых, так и индивидуальных ППС. Стоимость их заметно зависит от тиража. Она выше, чем у тиражируемых из-за небольшого тиража и процедуры настройки, но ниже, чем у индивидуальных. Часто такие системы требуют сопровождения.
2.4. Современные подходы к созданию программных систем. Методологии полного цикла и лёгкие методологии. Характеристика. Применимость.\
В начале 21 века группой ведущих специалистов в области разработки программных систем был разработан подход, который был назван «Быстрая разработка программного обеспечения» (Agile software development). Он базируется на опыте многих программных проектов и, по-видимому, соответствует взглядам большинства программистов-практиков, принимавших участие в разработках информационных систем. Суть его изложена в «Манифесте быстрой разработки», она базируется на четырёх идеях:
индивидуумы и взаимодействия между ними ценятся выше процессов и инструментов;
работающее программное обеспечение ценится выше всеобъемлющей документации;
сотрудничество с заказчиками ценится выше формальных договоров;
реагирование на изменения ценится выше строгого следованию плану.
Главными условиями успеха считаются простые, но достаточные правила выполнения проекта, ориентация на участников и их взаимодействие. Побудительными причинами возникновения и утверждения «маневренного» подхода послужили высокая конкуренция на рынке программных систем, возрастающая доля разработок с неустойчивыми требованиями заказчика, распространение программного обеспечения в интернете.
При таком подходе технология создания программного обеспечения занимает важное место, если она способствует выполнению хотя бы одного из условий:
она позволяет людям легче выразить свои мысли;
она выполняет задачи, невыполнимые вручную;
она автоматизирует утомительные и потенциально подверженные ошибкам действия;
она облегчает общение между людьми.
Но этот подход не универсален, он применим только для определённых классов проектов. Для характеристик таких проектов А.Коуберн ввёл две характеристики: критичность и масштаб. Критичность характеризует последствия дефектов программного обеспечения и имеет один из уровней:
C – потеря удобства;
D – потеря возместимых средств;
E – потеря невозместимых средств;
L –угроза человеческой жизни.
Масштаб определяется количеством разработчиков:
малый – 1-6 человек;
средний – 6-20 человек;
большой – свыше 20 человек.
Быстрая разработка применима только для проектов малого и среднего масштаба с низкой критичностью (C или D).
Общая характеристика технологий такого рода такова:
общение лицом к лицу – самый дешёвый способ обмена информацией;
избыточная тяжесть технологии стоит дорого;
многочисленные команды требуют более тяжёлых технологий;
большая формальность требуется для проектов с большой критичностью;
возрастание обратной связи снижает потребность в промежуточных продуктах;
дисциплина, умение и понимание противостоят формальности и документированию;
потеря эффективности в некритичных идах деятельности допустима.
Наиболее известная методология, построенная на подобных принципах – «Экстремальное программирование» (ХР). Она предназначена для небольших компактных команд, нацеленных на получение продуктов высокого качества с высокой продуктивностью. Это достигается путём насыщенной коммуникации, высокому умению и навыкам участников разработки, дисциплине и пониманию. Промежуточные рабочие продукты сводятся к минимуму.
Помимо технологий быстрой разработки, широкое распространение получила методология RUP, ориентированная на строгое следование формальным правилам разработки. В основе её лежит инкрементно-итеративный подход, который позволяет разрабатывать большие системы по отдельным подсистемам (инкрементная часть), причём, каждая подсистема разрабатывается итеративно. Подобный подход позволяет достаточно эффективно разрабатывать системы большого масштаба. Определённая «тяжесть» методологии послужила побудительной причиной для создания на её основе более гибких подходов.
