Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Описание тестирования программы

Читайте также:
  1. Begin {начало основной программы} . . .
  2. Begin {начало основной программы} . . .
  3. II. Описание митоза и мейоза
  4. II. Организация и программы Олимпийских игр.
  5. II. Требования к результатам освоения основной образовательной программы начального общего образования
  6. II. ТРЕБОВАНИЯ К РЕЗУЛЬТАТАМ ОСВОЕНИЯ ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ НАЧАЛЬНОГО ОБЩЕГО ОБРАЗОВАНИЯ
  7. II. Требования к результатам освоения ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ НАЧАЛЬНОГООБЩЕГО ОБРАЗОВАНИЯ

 

Для тестирования программы использовался встроенный символический отладчик Turbo C Version 2.1. Были использованы такие его возможности, как слежение за ходом выполнения программы и контроль значений переменных в точках останова.

 

Таблица точек останова

 

Файл Функция Оператор Просматриваемая переменная
  myio2.c GetNum if(scanf(“%d”, &n) != 1) n
  myio2.c GetNum if(scanf(“%d”, &n) != 1) n
  myio2.c GetNum if(n < minnum) n
  myio2.c GetNum if(n > maxnum) n
  myio2.c YesNo c = getchar   c

 

В результате работы были выявлены следующие наиболее типичные синтаксические ошибки:

1. Было:

файл: myio2.с, функция Finish

void finish(char *final);

{

printf(“%s\n ”,final)

}

стало:

void Finish(char *final)

{

printf(“%s\n ”,final);

}

2. Было:

файл: main2.c, функция main

{

do{

title(SQUARES);

getpar();

calc();

стало:

{

do{

Title(SQUARES);

GetPar();

Calc();

 

 

Было

файл: calc2.c, функция calc

for(i = 0; i < maxnum; i+)

 

{

n = Begnum + i;

printf(OUTMSG, n, n * n);

Стало

for(i = 0; i < Maxnum; i++)

 

{

n = Begnum + i;

printf(OUTMSG, n, n*n);

Устранив синтаксические ошибки, я смог скомпилировать программу и начал ее отладку.

После первого программы я подтвердил намерение повторить прогон программы, но на экран было выведено “Работа завершена” и был выполнен выход из программы. После проверки соответствующего значения переменной с в функции YesNo я пришел к выводу о необходимости ввести функцию fflush для очистки буфера.

 

1. Было:

файл: myio2.c, функция YesNo

int YesNo(char *text)

{

int c;

 

printf(“\n%s”, text);

c = getchar();

 

if((c == ’y’) || (c == ’Y’))

return 1;

else

return 0;

}

стало:

файл: myio2.c, YesNo

int YesNo(char *text)

{

int c;

 

printf(“\n%s”, text);

fflush(stdin);

c = getchar();

 

if((c == ’y’) || (c == ’Y’))

return 1;

else

return 0;

}

На ввод некоторых чисел программа реагировала некорректными значениями квадрата чисел. Я пришел к выводу о необходимости изменения ОДЗ для вводимых чисел.

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

2. Было:

файл: const.h

 

#define MINNUM 1 /* мин. обрабатываемое число */

#define MAXNUM 1000 /* макс. Обрабатываемое число */

 

#define MINLINES 1 /* мин. выводимое число строк */

#define MAXLINES 1000 /* макс. выводимое число строк */

стало:

#define MINNUM -181 /* мин. обрабатываемое число */

#define MAXNUM 181 /* макс. Обрабатываемое число */

 

#define MINLINES 1 /* мин. количество выводимых строк */

#define MAXLINES 20 /* макс. количество выводимых строк */

 

Даже после введения истинных для каждой переменной ОДЗ при введении некоторых значений результат вычисления был неверен. С помощью отслеживания значений в точке останова я убедился в том, что некоторые значения, истинные для каждой переменной в отдельности несовместимы. Поэтому следующим моим шагом было введение проверки на совместимость.

3. Было:

файл: myio2.c, функция GetPar

void GetPar(void)

{

Begnum = GetNum(STARTNUM, MINNUM, MAXNUM);

Maxnum = GetNum(NUMBERS, MINLINES, MAXLINES);

}

стало:

файл: myio2.c, функция GetPar

void GetPar(void)

{

Begnum = GetNum(STARTNUM, MINNUM, MAXNUM);

Maxnum = GetNum(NUMBERS, MINLINES, MAXLINES);

 

if(Begnum + Maxnum > MAXNUM + 1)

Maxnum = MAXNUM - Begnum + 1;

}

 

Далее при последующих прогонах я решил ввести защиту от введения нечисла, так как таковая не была введена ранее.

4. Было:

Файл: myio2.c, функция GetNum

int GetNum(char* query, int minnum, int maxnum)

{

int n;

 

printf("\n%s = ", query);

if(n < minnum)

n = minnum;

else if(n > maxnum)

n = maxnum;

 

return n;

}

стало:

int GetNum(char* query, int minnum, int maxnum)

{

int n;

 

printf("\n%s = ", query);

fflush(stdin);

 

if(scanf("%d", &n)!= 1)

n = (minnum + maxnum) / 2;

else if(n < minnum)

n = minnum;

else if(n > maxnum)

n = maxnum;

 

return n;

 

}

 

Стараясь привести программу к более логичному виду, я решил перенести знаки форматирования из констант в функции, управляющие вводом/выводом.

5. Было:

Файл: myio2.c, функция YesNo

int YesNo(char* text)

{

int c;

 

printf(“%s”, text);

fflush(stdin);

c = getchar();

 

if ((c == ’y’) || (c == ’Y’))

return 1;

else

return 0;

}

стало:

int YesNo(char* text)

{

int c;

 

printf(“\n%s [Y/N]? ”, text);

fflush(stdin);

 

c = getchar();

 

if ((c == ’y’) || (c == ’Y’))

return 1;

else

return 0;


Дата добавления: 2015-07-20; просмотров: 70 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Исходный текст программы| Анализ работы по решению задачи

mybiblioteka.su - 2015-2024 год. (0.013 сек.)