- •Введение Цели и задачи курса «Технология программирования»
- •Классификация программного обеспечения
- •Тема 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.Задачи комплексной отладки программ
- •Библиографический список
Пример доказательства правильности программы методом индуктивных утверждений
Пусть имеется следующая программа поиска максимального значения среди элементов хi,j.
1-8 – это точки, в которых предположительно имеют место следующие утверждения:
А1 : х – массив чисел, состоящий из m строк и n столбцов,
(исходная предпосылка);
А2 : , кроме того
А3: , , при этом .
А8 : .
Доказательство.
Путь 1→2: , и т.к. из , то , т.е. утверждение А2 справедливо.
Путь 2→3: Дано утверждение А2. Требуется доказать А3. При первом вхождении в точку 3 ,следовательно, , т.к. . Из утверждения А2, т.к. i не менялось, имеем , но в силу ограничения цикла в точке 2 в точке 3 получаем . Если , то из утверждения А2 следует , иначе, когда , из утверждения А2 получаем, что . Более того, можно утверждать, что , т.к. . Таким образом, видно, что при переходе из точки 2 в точку 3 утверждение А3 оказывается справедливым.
Путь 3→4→5→3. Пусть справедливо утверждение А3. Покажем, что оно остается справедливым при переходе по данному пути. Пусть в точке 3 в какой-то момент времени , для которых выполняются неравенства: , . Тогда при переходе по пути 3→4→5→3 получаем , где . Так как мы двигались по указанному выше пути, то проверка в цикле была истинной, следовательно, . Значение не менялось, кроме того, мы приходим в точку 3 с условием , следовательно, остается максимальным и для нового значения j, т.е. утверждение А3 остается справедливым.
Путь 3→4→6→3. Доказательство аналогично пункту 3 за исключением того, что здесь нашлось , и переменной присвоено это значение. Таким образом, утверждение А3 остается также справедливым.
Путь 3→7→2. Пусть справедливо утверждение А3. Покажем, что при прохождении пути 3→7→2 будет справедливо утверждение А2. Из точки 3 в точку 2 мы попадаем, когда ложна проверка , но из А3 известно, что . Отсюда следует, что или . Тогда утверждение A3 относительно перепишется в виде . Но при прохождении пути 3→7→2 , поэтому , . Утверждение А2 справедливо.
Путь 2→8. Так как мы вышли из точки 2 в точку 8 проверка неравенства оказалась ложной, следовательно, и утверждение A2 , что , преобразуется в утверждение A8 о частичной правильности программы: .
Тема 6.Рекурсивные программы. Методы доказательства их правильности
6.1.Понятие рекурсивных программ. Способы их описания Язык описания рекурсивных программ
Введем упрощенный язык программирования для иллюстрации работы рекурсивных программ. Программа на этом языке состоит из определения функции следующего вида:
F (x1, x2, … xn) = if <условие1> then <выражение1>
else if <условие2> then <выражение2>
. . . .
if <условиеN> then <выражениеN>
else <выражение N+1>
В данном выражении последовательно проверяются условия. Если i-ое условие выдает истину, то функция F выдает значение выражения i. Если ни одно из условий не выдает истину, то функция выдает значение выражения N+1. Рекурсия вводится в этот язык следующим образом: функция F может входить как часть в любом из выражений или условий в программе. Такое появление F называется рекурсивным обращением к этой функции. Дополнительно для каждой такой рекурсивной программы необходимо указать область определения, т.е. указать для каких аргументов х1,…хn применима программа.