- •Введение Цели и задачи курса «Технология программирования»
- •Классификация программного обеспечения
- •Тема 1.Понятие программного изделия
- •1.1.Основные требования к программному изделию как к продукции производственно-технического назначения
- •1.2.Жизненный цикл программных изделий
- •1.3.Методическая, технологическая, инструментальная и организационная поддержка процесса проектирования программных изделий
- •1.4.Этапы проектирования сложных программных изделий
- •Тема 2.Внешнее проектирование программных изделий
- •2.1.Разработка требований и внешнее проектирование программных изделий
- •2.2.Обеспечение целей создания программных изделий Цели проекта с точки зрения пользователя
- •Цели проекта с точки зрения разработчика
- •2.3.Разработка внешних спецификаций проекта
- •Тема 3.Внутреннее проектирование программных изделий
- •3.1.Понятие модуля. Характеристики качества модулей
- •3.2.Методы проектирования программ
- •Иерархическая декомпозиция и абстрактные машины (метод нисходящей декомпозиции)
- •Программирование на основе принципа пошагового совершенствования
- •Структурное программирование по нисходящему принципу
- •Программирование с использованием пошаговой реорганизации
- •Способы описания программ. Язык проектирования программ
- •Тема 4.Структурированные программы
- •4.1.Блок-схемы и управляющие структуры
- •4.2.Теорема о структурировании
- •4.3.Рекурсивные структурированные программы
- •Тема 5.Методы Доказательства правильности программ
- •5.1.Математический аппарат доказательства Принцип простой индукции
- •Принцип модифицированной простой индукции
- •Принцип обобщенной индукции
- •5.2.Методы доказательства правильности программ Метод индуктивных утверждений
- •Пример доказательства правильности программы методом индуктивных утверждений
- •Тема 6.Рекурсивные программы. Методы доказательства их правильности
- •6.1.Понятие рекурсивных программ. Способы их описания Язык описания рекурсивных программ
- •Примеры рекурсивных программ
- •6.2.Рекурсивные программы работы со списками Списки и операции над ними
- •Примеры программ работы со списками
- •6.3.Примеры доказательства правильности рекурсивных программ
- •Тема 7.Отладка программ
- •7.1.Типичные ошибки в программных комплексах
- •7.2.Задачи отладки программ
- •7.3.Методы разработки тестов Метод эквивалентных разбиений
- •Методы тестирования программ путем покрытия логики
- •Метод функциональных диаграмм
- •Предположения об ошибках
- •7.4.Задачи комплексной отладки программ
- •Библиографический список
Тема 5.Методы Доказательства правильности программ
5.1.Математический аппарат доказательства Принцип простой индукции
Пусть – некоторое высказывание о целом числе . Требуется доказать, что справедливо для всех .
Согласно простой математической индукции для этого необходимо:
доказать, что справедливо высказывание .
Доказать, что если для справедливо высказывание , то справедливо и высказывание .
Рассмотрим пример использования простой индукции. Необходимо доказать, что для сумма первых положительных целых чисел равна
Используя простую индукцию, необходимо доказать, что . Это высказывание справедливо.
Предположим, что справедливо высказывание
Покажем, что справедлива формула и для .
Принцип модифицированной простой индукции
Этот принцип применяют, когда необходимо доказать, что утверждение справедливо . В этом случае, чтобы доказать справедливость утверждения необходимо:
доказать, что справедливо утверждение ;
доказать, что если справедливо , то справедливо и утверждение .
В частном случае при получаем принцип простой индукции.
Иногда необходимо доказать справедливость утверждения . В этом случае можно воспользоваться одним из двух вариантов индукции.
Простая восходящая индукция.
Здесь необходимо:
доказать, что справедливо утверждение ;
доказать, что если справедливо , то справедливо и утверждение .
Простая нисходящая индукция.
Здесь необходимо:
доказать, что справедливо утверждение ;
доказать, что если справедливо S(n) , то справедливо и утверждение .
Принцип обобщенной индукции
Пусть – некоторое упорядоченное множество, в котором задана операция отношения . Пусть также - минимальный элемент множества. Тогда для доказательства справедливости высказывания необходимо:
доказать, что справедливо ;
доказать, что если справедливо , , то имеет место и .
5.2.Методы доказательства правильности программ Метод индуктивных утверждений
Определение 1. Пусть А – некоторое утверждение, описывающее предполагаемые свойства данных в программе. С – утверждение, описывающее то, что мы по предположению должны получить в результате процесса выполнения программы, т.е. утверждение о правильности. Будем говорить, что программа частично правильна по отношению к А и С, если при каждом выполнении этой программы с данными, удовлетворяющими А, будет справедливо С при условии, что программа закончит свою работу, т.е. если выполнять программу с данными, удовлетворяющими утверждению А, то либо она не заканчивается, либо заканчивается, и будет справедливо С.
Определение 2. Будем называть программу полностью правильной по отношению к А и С, если она частично правильна и заканчивается при всех данных, удовлетворяющих А.
Для доказательства частичной правильности программы поступают следующим образом:
утверждение А связывают с началом программы, а утверждение С – с конечной точкой программы;
выявляют некоторые закономерности, относящиеся к значениям переменных, и связывают соответствующие утверждения с другими точками программы;
для каждого пути, ведущего из точки i, связанной с утверждением Аi, в точку j, связанную с утверждением Аj, доказывают, что если попасть в точку i и при этом будет справедливо утверждение Аi, а затем пройти в точку j, то будет справедливо утверждение Аj. Для циклов точки i и j могут быть одной и той же точкой.
Если справедливо А1, то при прохождении по пути 1→2 будет справедливо А2 и т.д.
Чтобы убедиться, что таким образом действительно доказывается частичная правильность, докажем теорему.
Теорема. Если можно выполнить все действия, описанные в методе индуктивных утверждений для некоторых программ, то эта программа частично правильна относительно А и С.
Доказательство будем проводить с помощью индукции по n - числу точек программы, через которые мы уже прошли.
Предположим, что в процессе выполнения программы мы попали в первую из точек n=1. Нужно показать, что связанные с этой точкой утверждения справедливы. Но первая точка – это начальная точка программы, и с ней связано исходное допущение А о начальных данных. Это допущение предполагается справедливым, т.е. для n=1 утверждение справедливо.
Предположим, что мы прошли n точек и попали в некоторую точку in, с которой связано утверждение . Предположим, что утверждение справедливо (гипотеза индукции). Нужно доказать, что если выполнение программы продолжается, и мы из точки in попали в точку in+1, то при ее достижении будет справедливо утверждение . Справедливость этого факта для каждого пути, связывающего точки in и in+1, мы доказали в методе индуктивных утверждений (пункт 2). Таким образом, если программа написана по правилам структурного программирования и является простой, то для каждой точки i будет справедливо утверждение Аi, так как существует путь через каждый узел от начала к концу программы. Тогда, если будет достигнута конечная точка программы, то будет справедливо и утверждение С.