- •Алгоритмические основы программной инженерии
- •1 Семестр вопросы и ответы
- •1 Вопрос. Кризисная история развития программного обеспечения: необходимость повторного использования кода, рост сложности по, модификация по.
- •Необходимость повторного использования кода
- •Функциональное программирование. Достоинства и недостатки
- •2 Вопрос. Этапы разработки программного обеспечения. Состав технического задания.
- •Модели процесса разработки программного обеспечения
- •Каскадная модель
- •Итеративная модель rup
- •Гибкий цикл agile
- •Итеративная модель xp
- •Спиральная модель
- •3 Вопрос. Проектирование и алгоритмизация программы. Свойства алгоритма.
- •4 Вопрос. Понятие и определение сложности алгоритма.
- •5 Вопрос. Кодирование, тестирование и отладка программы.
- •Концепция xp: программирование в паре.
- •Тестирование и отладка.
- •6 Вопрос. Доработка и сопровождение программного продукта.
- •7 Вопрос. Модели жизненного цикла по. Экстремальное программирование (xp).
- •Концепция xp
- •11. Взаимодействие с заказчиком.
- •Если требования проекта могут быть сформулированы достаточно исчерпывающим образом, то имеет смысл прибегать к более надежной стратегии разработки.
- •8 Вопрос. Унифицированная концепция (rup) разработки по: фазы, операции. Определение требований в uml-формате.
- •9 Вопрос. Унифицированная концепция (rup) разработки по: анализ и проектирование. Понятие класса, типы и примеры классов, uml-диаграммы.
- •Стратегия rup Rational Unified Process
- •1. Определение требований.
- •3. Реализация.
- •Ниже представлена самостоятельная работа — пример реализации диаграммы компонентов
- •4. Внедрение.
- •Ниже представлена самостоятельная работа — пример реализации диаграммы развертывания
- •10 Вопрос. Состав и функционал системного программного обеспечения.
- •Операционная система (ос)
- •Система управления файлами (суф)
- •Интерфейсная оболочка для взаимодействия пользователя с ос и операционными средами
- •Системы программирования
- •Трансляторы
- •Утилиты
- •11 Вопрос. Классификация языков программирования.
- •Не существует общепринятой систематичной таксономии языков программирования. Поколения языков
- •Функциональная классификация языков программирования
- •12 Вопрос. Определение ядра операционной системы.
- •13 Вопрос. Классификация операционных систем по функциональности.
- •Системы пакетной обработки
- •Системы разделения времени
- •Системы реального времени
- •14 Вопрос. Определение задачи. Преимущества и недостатки процессов и потоков.
- •15 Вопрос. Свойства задач.
- •16 Вопрос. Механизмы диспетчеризации (планирования) задач.
Спиральная модель
1. Формирование требований и планирование.
2. Анализ рисков (требований).
3. Конструирование:
1) Проектирование;
2) Кодирование;
3) Тестирование;
4) Интеграция (соединение в одно целое).
4. Оценка результата и при удовлетворительном качестве переход к новому витку.
——————————————————————————
3 Вопрос. Проектирование и алгоритмизация программы. Свойства алгоритма.
——————————————————————————
Алгоритм — конечный набор правил, однозначно раскрывающий содержание и последовательность выполнения операций для решения поставленной задачи.
Алгоритмический процесс — реализация алгоритма на уровне программирования и кодирования.
Свойства алгоритма:
— Дискретность ("прерывность"; вся процедура отчета должна быть представлена последовательностью действий следующих друг за другом и связана причинно-следственными связями).
— Понятность и однозначность (детерминированность) (последовательность и содержание операций должны в точности соответствовать алгоритмической модели).
— Результативность (получение результата за конечное число шагов). Если при каких-либо входных данных алгоритм не заканчивается или не выдает результат, то он считается нерезультативным.
— Адекватность и правильность (алгоритм должен выдавать ожидаемый правильный результат). Правильность выясняется посредством сравнения с выходными данными по модели или объекту, который получен альтернативным способом:
1) Численный; 2) Аналитический; 3) Экспериментальный.
— Массовость (алгоритм решения задачи разрабатывается в общем виде, то есть он должен быть применим для некоторого класса задач, различающихся только исходными данными).
— Конечность (каждое действие и весь алгоритм в целом обязательно должны завершаться).
Алгоритмическая модель должна иметь некоторую сложность и некоторую ресурсоемкость.
——————————————————————————
4 Вопрос. Понятие и определение сложности алгоритма.
——————————————————————————
Сложность алгоритма — порядок зависимости времени и памяти, необходимых для вычисления алгоритма, под его размерность.
Временная сложность: T(n).
Пространственная сложность: O(n) [здесь нужно уточнять, что имеется ввиду под этим выражением, так как оно может обозначать асимптотическое обозначение «О большое», что не относится к определению пространственной сложности].
Сложность сама по себе не позволяет определить ни время, ни необходимый объем памяти, а позволяет лишь оценить увеличение этих показателей по мере роста размерности задачи.
Пример.
T(n) = n: при повышении размерности, например, в 5 раз время выполнения возрастает в 5 раз.
T(n) = n²: при повышении размерности, например, в 5 раз время выполнения возрастает в 25 раз.
Оценка сложности алгоритма:
1. Подсчитать количество элементарных операций, выполняемых во время работы.
2. В этой зависимости [по результату п. 1] определить максимальный порядок зависимости от размерности.
Алгоритмы одной и той же сложности могут значительно отличаться по времени выполнения.
Если количество элементарных операций (FLOP, «флоп») постоянно и не зависит от размерности задачи, то считается, что T(n) = 1.
Время выполнения алгоритма зависит не только от размерности данных, но и от значений этих данных.
Различают три типа сложности:
1. Максимальная сложность (самая неблагоприятная ситуация, когда алгоритм работает медленнее всего; пример — пузырьковая сортировка).
2. Минимальная сложность (самая благоприятная ситуация, когда алгоритм работает быстрее всего).
3. Средняя сложность (для среднестатистического случая).
На практике чаще всего встречаются следующие сложности:
1. T (log n) — на каждом шаге выполняется постоянное количество операций C, и задача размерности n сводится к задаче размерности n/k (т. е. n –> n/k; k – целое положительное число).
Пример: двоичный (бинарный) поиск.
2. T (n) — на каждом шаге выполняется постоянное количество операций C, не зависящее от n, и задача размерности сводится к задаче размерности n-1 (т. е. n –> n-1).
Пример: линейный поиск.
3. T (n*log n) — на каждом шаге выполняется некоторое количество операций C*n (c – константа), и задача размерности n сводится к задаче размерности n/k (т. е. n –> n/k; k – целое положительное число).
Примеры: быстрая сортировка (сортировка Хоара), сортировка слиянием, пирамидальная сортировка.
4. T (n²) — на каждом шаге выполняется некоторое количество операций C*n (c – константа), и задача размерности n сводится к задаче размерности n-1.
Примеры: пузырьковая сортировка, сортировка вставками, сортировка выбором.
——————————————————————————