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

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

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

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

Файл

Функция

Оператор

Просматриваемая

переменная

1

myio2.c

GetNum

if( scanf( “%d”, &n )

!= 1 )

n

2

myio2.c

GetNum

if( scanf( “%d”, &n )

!= 1 )

n

3

myio2.c

GetNum

if( n < minnum )

n

4

myio2.c

GetNum

if( n > maxnum )

n

5

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( );

3. Было

файл: 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;