- •Введение Цели и задачи курса «Технология программирования»
- •Классификация программного обеспечения
- •Тема 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, так как существует
путь через каждый узел от начала к концу
программы. Тогда, если будет достигнута
конечная точка программы, то будет
справедливо и утверждение С.
