- •Восходящее и нисходящее программирование
- •1 Методы программирования
- •1.2 Восходящее программирование
- •1.2 Нисходящее программирование
- •Уровень II
- •Управляющая
- •Заглушка 1
- •Заглушка 2
- •1.3 Повышение качества проектирования программ
- •2 Организация выполнения курсовго проекта
- •2.1 Этапы выполнения курсового проекта
- •2.2 Требования к пояснительной записке
- •3 Задания на курсовое проектирование
- •3.1 Числовые задачи
- •3.2 Создание и введение баз данных. Справочники
- •3.3 Контролирующие и обучающие программы
- •3.4 Звукогенерация, графика, движение, мультипликация
- •3.5 Помехоустойчивое кодирование
- •3.7. Игровые задачи
- •3.8. Психологическое тестирование
- •3.8 Моделирование арифметических операций
- •3.9 Олимпиадные задачи
- •Курсовой проект
- •Задание
- •Студент Панова Александра Николаевна группа в-115
- •Разработка алгоритмов кодирования – декодирования двоичных данных кодом с проверкой на четность
- •1 Анализ задания и формулировка задач на проектирование
- •2 Разработка алгоритмов для контроля передачи данных
- •2.1 Кодирование двоичных данных кодом с проверкой на четность
- •2.2 Декодирование данных
- •2.3. Универсальный алгоритм кодирования-декодирования
- •3 Особенности разработки программы
- •4 Инструкция пользователя
- •5 Результаты тестирования
программа
Заглушка 3Управляющая
Заглушка 1
Заглушка 2
1
2
Рисунок 1.4 – Схема алгоритма на I этапе отладки
а) б)
Рисунок 1.5 – Схемы тестирования программных модулей II уровня, не содержащих подзадач
Далее протестируем модули второго уровня, не содержащие вызовов других программных модулей (или подпрограмм). Следующей ликвидируем третью заглушку. Для этого разработаем алгоритм и программу для игровой задачи (рис.1.5,б).
Чтобы подключить модуль для решения математических задач (заглушка 2), необходимо вызываемые им подпрограммы для подзадач 2.1 и 2.2 заменить своими заглушками (рис.1.6,а), запрограммировать и отладить общие функции – действия, не включенные в подзадачи 2.1 и 2.2.
Таким образом, при отладке подпрограмм, содержащих вызовы других подпрограмм, первоначально ставятся “заглушки” в подпрограммы на уровень ниже тестируемого, а затем они поочередно снимаются или переносятся с коррекцией текста на более низкий уровень. Так после проектирования алгоритма для подзадачи 2.1, он программируется и тестируется, заглушка 2.2 при этом сохраняется (рис.1.6,б). После замены последней заглушки производится отладка и тестирование программного модуля подзадачи 2.2.
а) б)
Рисунок 1.6 – Схемы тестирования сложных программных модулей II и простых последнего III уровня
На этом процесс проектирования и комплексного тестирования программного комплекса завершается. Следует подчеркнуть, что при нисходящем программировании помимо отладки и тестирования каждого программного модуля одновременно ведется отладка и тестирование программного комплекса в целом.
1.3 Повышение качества проектирования программ
При разработке программ рекомендуется придерживаться основных этапов рис.1.9.
Рисунок 1.9. Краткая схема разработки программы
Алгоритм относится к фундаментальным понятиям информатики. На основе алгоритма составляются программы для реализации на компьютере.
Алгоритм – это определенная последовательность, которая за конечное число шагов приводит к решению поставленной задачи [6]. Он характеризуется следующими свойствами: однозначностью, дискретностью, связностью, результативностью, конечностью, массовостью. Для описания алгоритмов известно несколько способов: запись на естественном языке, схемы алгоритмов, структурограммы, псевдокоды.
Каждый проектировщик программы может выбрать наиболее удобный для себя способ, с точки зрения наглядности, простоты правил построения. Автор является сторонником применения схем алгоритмов в процессе обучения с использованием структуризации.
Структурированными считаются алгоритмы и программы, составленные только с использованием трех правил структурной композиции 8 (в схемах алгоритмов они имеют графическое изображение): альтернативный выбор (блок “решение”); циклический повтор (два типа блоков для циклов); вспомогательные алгоритмы (подпрограммы).
Неструктурированными считаются программы, в которых используются операторы goto… или отсутствует ступенчатая запись циклов и альтернатив.
Алгоритм считается правильным и грамотным, если он дает правильные результаты при любых допустимых исходных данных и выдает диагностические сообщения при появлении запрещенных ситуаций и данных.
Структурный подход снижает количество ошибок в алгоритмах. Структурная форма записи упрощает поиск и исправление ошибок при отладке программы. Гарантии отсутствия ошибок сам по себе структурный подход не дает 2Абра. О правильности программ нельзя утверждать ничего, если неизвестны предъявляемые к нему требования. Только при наличии строгих и четких спецификаций, систематическом их использовании для анализа проектируемых алгоритмов и программ, можно судить о правильности работы созданной программы.
Отладка программы – это процесс поиска и исправления ошибок в программе. Синтаксические ошибки обнаруживаются и локализуются компилятором, а семантические (смысловые или алгоритмические) находятся в процессе тестирования.
Тестирование – это проверка программ на компьютере с помощью некоторого набора тестовых примеров (теста) с целью выявления ошибок [5].
Спецификация программы – это точная и полная формулировка задачи, содержащая информацию, необходимую для разработки алгоритма (программы) ее решения 9, включающая описание характеристик, свойств и выполняемых ею функций.
Для разработки программ на любом языке программирования полезно предварительное проектирование реализуемых в них алгоритмов. Эти описания алгоритмов вместе со спецификациями позволяют в полной мере оценивать правильность написанных в дальнейшем программ с точки зрения семантики (или смыслового значения).
Разработка программ с доказательством их правильности называется доказательным программированием 7, 8. Для формирования заключения о наличии ошибок в алгоритмах или программе достаточно указать входной набор, при котором получаются неправильные результаты. В доказательном программировании необходимо показать, что правильные результаты будут получаться для всех допустимых данных путем исчерпывающего анализа результатов выполнения программы при любых допустимых данных.
Существуют два подхода к проверке программ: прагматический и доказательный. При прагматическом подходе проверка программ реализуется на компьютере путем тестирования. При доказательном – предполагается составление спецификаций и доказательство правильности алгоритмов и программ по отношению к этим спецификациям.
Рекомендуется применять комплексный подход к доказательству правильности программы. Сначала обосновывается полнота спецификаций. Затем доказывается правильность алгоритма по отношению к этим спецификациям. Доказательство правильности алгоритмов следует проводить за два этапа:
при проектировании алгоритмов;
после окончания разработки алгоритмов.
На первом этапе показывается, что алгоритм является корректной реализацией метода решения, и доказывает, что метод - правильный. На втором этапе производится программирование [5,10, 13] и проводится исчерпывающий анализ результатов выполнения алгоритмов на соответствие постановке решаемых задач для любых допустимых данных.
Далее программа тестируется. При этом тест для каждой функции должен включать такие тестовые наборы, которые охватывают все спецификации, тестируют все условия, и предполагают выполнение всех ветвей алгоритма, а также каждого оператора программы [5,7]. Для сложных программ дополнительно тестируются межмодульные интерфейсы [5].
Программа, отвечающая всем спецификациям и формирующая правильные результаты для всех тестовых наборов разработанного теста, считается отлаженной.
