- •Введение Цели и задачи курса «Технология программирования»
- •Классификация программного обеспечения
- •Тема 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.Задачи комплексной отладки программ
- •Библиографический список
Программирование с использованием пошаговой реорганизации
В ситуациях, когда степень сложности программы затрудняет использование метода пошагового совершенствования, применяется метод пошаговой реорганизации. Здесь стратегия основана на стремлении сохранить простоту восприятия сложной программы путем первоначального программирования с помощью пошагового совершенствования без учета эффективности программы и последующего программирования пошаговой реорганизацией программы для построения более эффективной программы.
Характеристика подобной стратегии:
1. Пошаговое совершенствование. Не принимая во внимание эффективность, используется метод пошагового совершенствования для построения программы, адекватным образом реализующей заданную функцию. При этом основная идея заключается в определении структур данных и управления с помощью регулярных соотношений, которые часто не являются эффективными. Подобные проекты обычно не рассматриваются, поскольку они не позволяют удовлетворить ограничениям по времени и памяти. Однако их можно использовать для упрощения восприятия сложных функций, а эффективность вычисления процесса может быть повышена позднее за счет дополнительных усилий.
2. Пошаговая реорганизация. Программа, полученная процессом пошагового совершенствования, далее проходит пошаговую реорганизацию для повышения ее эффективности. На шаге процесса реорганизации может вводиться новая управляющая логика для обработки существующей структуры данных или новая структура данных, обрабатываемая существующей управляющей логикой. Однако обычно на одном шаге процесса не могут одновременно существенно меняться структуры данных и управления. На практике отдельные шаги процессов совершенствования и реорганизации программы можно объединять, получая таким образом итерационный процесс, посредством которого правильность программы на каждом уровне обеспечивается на шаге совершенствования, а эффективность - на шаге реорганизации.
3. Правильность. В процессе пошаговой реорганизации должна возникать последовательность структурированных программ, из которых только для первой проводится доказательство правильности, а для каждой из последующих доказывается, что она эквивалентна предыдущей. Каждый шаг реорганизации служит "основой верификации" для последующих шагов.
Способы описания программ. Язык проектирования программ
При проектировании программ разработчики в основном пользуются двумя способами: либо составляют блок-схему программы, либо сразу пишут программу. Очевидно, что при втором способе структура программы может оказаться нечеткой, но и хорошая блок-схема иногда может привести к созданию программы плохой структуры. Одним из способов проектирования программ может быть использование языка проектирования программ PDL (Program Design Language).
PDL – это некоторая система записи, с помощью которой можно проектировать программное обеспечение. PDL обычно состоит из двух частей:
заданный набор операторов, построенных по образцу языков программирования;
общий обычно неопределенный синтаксис пригодный для описания задач в данной области.
Итак, с одной стороны, язык проектирования программ включает определенный внешний синтаксис, описывающий логику программы при проектировании. Эта логика строится с помощью управляющих структур, имеющихся в большинстве языков программирования (операторы цикла, условные операторы, операторы вызова процедур). С другой стороны, почти любое предложение, написанное на естественном языке, можно использовать для описания преобразования данных. Чтобы не ограничивать выбор проектировщика, внутренний синтаксис языка специально не определяют. Например, программа извлечения квадратного корня из числа на языке PDL может выглядеть следующим образом:
if x неотрицательно then return (квадратный корень – веществ) else return (квадратный корень – мнимый) |
В этом примере на языке PDL фиксируется логика программы при помощи структуры if – then – else, а внутренние выражения не определяются. Далее необходимо детализировать, что означает «квадратный корень – веществ», «квадратный корень - мнимый», «неотрицательно».
Язык PDL обычно включает 6 групп операторов (1 часть):
if – then – else – условный оператор;
case of - оператор выбора;
for, whilе и т.д. – операторы цикла;
операторы описания данных, например, Vаr Pascal;
операторы выхода – exit;
другие операторы: присваивание, вызов процедуры, ввод-вывод данных и т.д..
Вторая часть может содержать предложения естественного языка, математическую символику и т.д.
При нисходящем проектировании наиболее удобными для описания программы является язык PDL. При этом вначале проектируются функции управляющей программы, например, следующим образом:
procedure Driver; begin выполнить задачу А; whilе выполняется условие do выполнить задачу В; выполнить задачу С; еnd; |
Затем более подробно представляют каждый из операторов данной программы. Например, если задачи А, В и С достаточно сложны, их можно оформить как отдельные процедуры, тогда более полный проект данной программы будет выглядеть следующим образом:
procedure Driver; begin инициализировать задачу А; call А; whilе выполняется условие do begin инициализировать задачу В; сall В; end; инициализировать задачу С; call С; еnd; |