
- •Аннотация к вопросам для Госэкзаменов по Информационным Системам и Вычислительным процессам
- •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.9. Размерно-ориентированные метрики: правила оценивания, область применимости
Размерно-ориентированные метрики позволяют прямо измерить программное изделие и процесс его разработки. Основываются такие метрики на оценках количества строк кода программ или других подобных количественных характеристиках. Это наиболее распространенная методика оценки программных проектов.
Терминология. В условиях доминирования англоязычной терминологии, которая внедряется даже в традиционную русскоязычную систему терминов, дадим как нормальное, так и англоязычное обозначение. Объёмом программного изделия будем называть количество строк исходного кода, единица измерения (мера) – тысяча строк кода, обозначение – СК. Например, 5 СК означает 5 тыс. строк исходного кода. Аналогичное англоязычное обозначение – SLOC (Source Lines Of Code) или просто LOC.
Первоначально оценки, основанные на измерении СК, применялись в условиях, когда для языков программирования характерным было соответствие одной строки кода одной команде языка. Со временем это соответствие для них перестало выполняться: одна физическая строка кода может содержать несколько команд языка и наоборот. Кроме того, большую роль стал играть стиль программирования, требующий поддержки определённой структуры программы, наличия комментариев и т.п.
Не существует единственного общепризнанного подхода к оценке, приемлемого для различных языков программирования и ориентированного на универсальное применение. Нередко объём определяется как общее число строк кода за исключением пустых строк и комментариев, причём, подсчитывается именно число «физических» строк, наличие нескольких операторов на одной строке не учитывается. Этот подход нельзя считать правильным, так как он побуждает отказываться от комментариев, что отрицательно сказывается на качестве программы.
Размерно-ориентированные метрики, основанные на строках кода, имеют и другие варианты, с помощью которых оцениваются отдельные характеристики проекта, например:
число строк, содержащих исходный код и комментарии (Lines with Both Code and Comments, C&SLOC);
процент комментариев;
среднее число строк для функций (методов);
среднее число строк для модулей;
среднее число строк для классов.