Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пример нисходящей разработки.doc
Скачиваний:
4
Добавлен:
20.11.2019
Размер:
164.86 Кб
Скачать

Разработка алгоритма

Метод

Алгоритм

Структурные тесты

Оформление процедуры

Вид процедуры

Имя

Заголовок

Обращение, или вызов (записывается в головном модуле)

Описание

Кодирование алгоритма на языке c++

Определение глобальных объектов

Описание функции

Обращение

Порядок следования пунктов схемы соответствует этапам разработки программы - от проектирования структур данных и алгоритма с параллельной разработкой структурных тестов к его кодированию - и ориентирован на нисходящую отладку. Как только определены входы и выходы подзадачи, задающие интерфейс "задача - подзадача", достаточно сымитировать соответствующие тестам значения выходов с помощью заглушек, чтобы начать отладку алгоритма задачи.

Эта же ориентация отображена в пункте "Оформление функции" - отладка может быть начата, как только определены межмодульные интерфейсы, хотя процедура еще не создана. Для начала отладки достаточно заменить тела всех функций заглушками. Вызывающему модулю важны интерфейсы; тела функций находятся вне его видения. Поэтому при дальнейшей модификации функций головной модуль останется неизменным.

Если разработка алгоритма не представляет сложности, то пункты "Разработка алгоритма" и "Оформление функций" можно объединить.

Уровень 1

1. Задача А0.1

Проверить, все ли элементы массива b из n элементов попадают в заданный диапазон (-10,10).

Уточним постановку задачи, учитывая необходимость вывода диагностики ошибок: вывести индексы и значения элементов, выходящих за границы диапазона.

2. Входные данные

n, массив b - см. выше; во внутреннем представлении (так как к моменту решения задачи А0.1 они введены); входная форма отсутствует.

3. Выходные данные

и стина, если все элементы в границах диапазона;

лог bver=

ложь, в противном случае;

значения неверных элементов с индексами выводим в процессе поиска:

b(<i>)=<b(i)> задано неверно

обр4.2 b(<i>)=<b(i)> задано неверно

. . . . . .

Примечание. Переменная bver - выходная для рассматриваемой подзадачи, но промежуточная для задачи А0. Поскольку выходная форма подзадачи А0.1 является частью общей выходной формы, ее вывод по обр4.2 не делается.

4. Аномалии - нет

5. Функциональные тесты - отмечены в алгоритме задачи А0 в ветви, где находится абстракция А0.1

Разработка заглушки

Выходная форма

обр4.2.1 Заглушка: проверка массива b

[<обр4.2>]

обр4.2.2 Результат проверки: bver=<bver>

Алгоритм заглушки (подставляется вместо А0.1)

{проверка массива b}

вывод по обр4.2.1;

{для тестов 1.1,1.2,4.1,4.2,5.1} - для тестов

bver:=истина; 1,1.2,4.1,4.2,5.1

вывод (bver)по обр4.2.2;

{проверка массива b}

вывод по обр4.2.1;

{для теста 3.1}

bver:=ложь; - для теста 3.1

i:=4;

вывод (i,b(i))по обр4.2;

{выведется: b(4)=11 задано неверно}

вывод (bver)по обр4.2.2;

Представим, что все остальные абстракции раскрыты. Тогда, закодировав и подставив в алгоритм задачи А0 первую заглушку и пропустив тест 1.1, получим результат, соответствующий этому тесту; то же справедливо для второй заглушки и теста 3.1.

Далее следует: разработать заглушки для всех остальных абстракций, перейдя к задаче А0.2 и затем - к А0.3; закодировать программу с заглушками; отладить эту программу.

Описанную ниже последовательность действий для задачи А0.1 надлежит выполнять только по завершении разработки и отладки программы с заглушками .

Разработка алгоритма

Метод

Последовательная проверка всех элементов с выводом индексов и значений, выходящих за диапазон.

Пусть i - текущий номер элемента массива.

Алгоритм

{проверка массива b}

bver:=истина;

для i от 1 до n цикл

е сли b(i) >10 то

1.1, 3.1 вывод (i,b(i)) по обр4.2;

3.1 bver:=ложь;

кесли;

кц;

Структурные тесты

Отмечены в алгоритме рядом с тестируемыми конструкциями.

Текст алгоритма теперь может быть подставлен в основную программу вместо текста заглушки.

Назовем такой текст, непосредственно вставляемый в программу вместо раскрываемой им абстракции, сегментом-блоком.

Теперь следует отладить программу с вставленным сегментом, оставив остальные абстракции реализованными в виде заглушек. Тогда, продолжая отладку всей программы, фактически мы будем отлаживать только алгоритм этого сегмента - ведь остальная часть программы уже отлажена.

Затем то же следует проделать с остальными заглушками поочередно.

После освоения темы "Процедуры" алгоритмы отдельных сегментов могут быть оформлены в виде сегментов-процедур. Это можно проделать уже на этапе разработки заглушки.

При владении аппаратом процедур целесообразно сегменты сразу оформлять в виде процедур.

Оформление функций

Функция

Тип-тип возвращаемого значения

Вид - функция

Имя - provb (выберем то же имя)

Заголовок - функ provb(n,b)

Выходное данное подзадачи - bver станет локальной переменной и будет присвоено имени функции.

Обращение - указатель функции в виде provb(n,b) будет присутствовать в головном модуле в качестве операнда оператора присваивания. Обращение запишем в головной модуль рядом с соответствующей абстракцией.

Описание

{проверка массива b}

Лог функ provb(n,b);

арг цел n; цел масс b(n);

нач лог bver;{стало локальным}

цел i;{локальная переменная - параметр цикла}

{алгоритм тела процедуры}

bver:=истина;

для i от 1 до n цикл

если b(i) >10 то

1.1, 3.1 вывод (i,b(i)) по обр4.2;

3.1 bver:=ложь;

кесли;

кц;

{присваивание выходного значения имени функции}

provb:=bver;

кон;

кон provb;

9