- •Введение Цели и задачи курса «Технология программирования»
- •Классификация программного обеспечения
- •Тема 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.Задачи комплексной отладки программ
- •Библиографический список
Программирование на основе принципа пошагового совершенствования
Основная идея: разбиение заданной функции на некоторые части (подфункции) с последующими объединением и проверкой этих частей. Каждая из таких подфункций решает лишь часть задачи, однако она проще исходной функции и часто допускает дальнейшее разбиение, объединение и проверку. Если получаемая на некотором шаге функция достаточно проста, например, представляет процедуру сортировки элементов небольшого массива, то её дальнейшее разбиение не является необходимым. В противном случае пошаговое совершенствование следует продолжить. Наибольшее внимание уделяется тем частям программы, которые в большей степени требуют совершенствования. При этом на каждом шаге определяется рабочая гипотеза для дальнейшего исследования программы, позволяющая принять решение о степени детализации процесса. Пошаговое совершенствование программы или системы программ осуществляется лишь после того, как определены общие принципы её построения и установлены критические места в алгоритмах и представлении данных. Основные идеи и мысли программиста должны иметь документальное выражение. При уточнении общего замысла программы возникает ряд идей, связанных с организацией данных и управления в программе, а также с отображением операций всех уровней. При этом необходимо тщательно проанализировать все аспекты процесса, выделить главное и второстепенное, построить промежуточные уровни отображения процесса, позволяющие объяснить всю последовательность действий.
Все шаги процесса совершенствования программы должны быть выполнены с достаточной степенью строгости, чтобы имелась возможность проверки правильности каждого шага. Необходимо убедиться в том, что каждый шаг процесса совершенствования отображен ясно и является обозримым, после чего осуществляется проверка правильности шага и переход к продолжению процесса. Проектирование программы и доказательство её правильности проводится параллельно. Предпочтение следует отдавать проекту, который легко проверить. При анализе путей реализации очередного шага вначале для заданной функции мысленно подбираются аргументы для проверки правильности. Программист должен уметь не только записать, но и читать свою программу, поставив себя на место человека, которому предстоит разобраться в результатах работы. Поэтому, если чтение программы затруднительно, а доказательства правильности её частей не очевидны, следует более тщательно продумать свою программу, поскольку всегда существует возможность того, что можно получить более простую, а следовательно, более ценную программу.
Структурное программирование по нисходящему принципу
Пошаговое совершенствование больших структурированных программ выполняется путем посегментного структурирования. Такой процесс называется структурным программированием по принципу сверху вниз, или по нисходящему принципу. Сегмент представляет собой небольшую структурированную программу. Сегмент ограничивается операторами proc и corp, а его отношение к другим сегментам может быть задано в предложениях run. Сегменты используются для управления степенью сложности программы. Это подразумевает более наглядное отображение логики программы с помощью средств структурного программирования, а также ограничение размеров программных текстов до величин, воспринимаемых человеком в каждый момент времени. Сегмент не должен быть слишком большим, что создает неудобства в работе с ним из-за его сложности, и слишком маленьким, что приводит к увеличению утомительных операций по обработке сегментов. Сегмент обычно оперирует несколькими переменными, элементарными программами и строками логического комментария, которые могут быть сформированы и записаны в виде согласованной программы.
Сегментная организация - это способ систематизированного построения больших структурированных программ на основе спецификаций функций. Сначала определяются задачи ограниченного объема и сложности, которые можно вводить до тех пор, пока не будет построена полная программа, реализующая заданную функцию с необходимой степенью детализации. Задача заключается в написании программного сегмента, представляющего полную программу, в которой операции над данными могут быть поименованы как подспецификации (подфункции), подлежащие программированию. Эта задача повторяется для каждого из поименованных (но не написанных) сегментов.
Затем раскрываются подспецификации на следующем уровне, а более мелкие детали переносятся на следующий уровень сегментирования. Этот процесс повторяется до необходимой степени детализации. Окончательная программа может иметь любой объем и представляет собой древовидную структуру, состоящую из сегментов, которые вызываются с помощью предложений run.
Возможны последовательная реализация и тестирование управляющих структур и структур обработки данных, относящихся к сегментам на следующем, более низком уровне. Это делается введением фиктивных программ, называемых заглушками. С помощью заглушек может быть организована печать сообщений и значений внутренних переменных; кроме того, заглушки применяются для имитации реального использования памяти и времени процессора.
После написания начальных сегментов дальнейшая работа может выполняться одновременно несколькими программистами.