Требования к программной документации

 

На испытание должен быть предъявлен следующий состав программной документации:

текст программы;

программа и методика испытаний;

описание программы;

описание применения;

 Средства и порядок испытаний

 

Испытания будут проводиться в несколько этапов. Первый этап – проверка правильности работы отдельных модулей программы. Второй этап – проверка работы всех модулей вместе.

    Испытания должны проходить при следующих технических и программных средствах:

486 DX4 100 процессор и выше;

8 Мбайта ОЗУ и выше;

Монитор, Клавиатура.

Программное обеспечение: оболочка Borland C 3.1.  

 

 Методы испытаний

 

При испытании программы будет использоваться стратегия “чёрного ящика” в частности следующие методы:

эквивалентное разбиение;

предположение об ошибке;

Эквивалентное разбиение:

 1) Для неправильного класса эквивалентности необходимо проверить следующие тесты:

ввести клавиши ‘g’, ’d’, ‘v’,…1, 2, 3, ….

Результат: программа не риагирует на введённые клавиши.

2) Для правильного класса эквивалентности необходимо проверить следующие тесты:

ввести клавиши ‘к’, ’д’

Результат: на мониторе отображаются комнаты и двери.

 Предположение об ошибке

Для функции «Rasstan», испытание необходимо проводить по методу «Предположение об ошибке». Для испытания данной функции необходимо выполнить следующие действия:

Проверка №1:

Нажать клавишу <к>;

Результат:На экране появилась точка, которая обозначает комнату.

Проверка №2:

Нажать клавишу <д>;

Результат:На экране появился отрезок, обозначающий дверь.

Проверка №3:

Нажать клавишу <я>, на комнате;

Результат:Изображение комнаты исчезло, а на его месте будет пусто.

Для функции «Vvod», испытание необходимо проводить по методу «Предположение об ошибке». Для испытания данной функции необходимо выполнить следующие действия:

Проверка №1:

При запросе входа в лабиринт нажать клавишу <enter> на пустом      месте;

Результат:Ничего не произойдет

Проверка №2:

При запросе выхода из лабиринта нажать клавишу <enter> на двери;

Результат:Ничего не произойдет

 Проверка №3:

При запросе входа в лабиринт нажать клавишу <enter> на комнате;

Результат:Программа попросит ввести выход.

Тесты для программы:

1) ввести отдельно стоящие, не связанные комнаты и ввести вход и выход. Программа выдаёт результат

Результат: Путь не найден.

2) ввести правильный лабиринти найти путь между входом и выходом. Программа выдаёт результат

Результат: Кратчайший путь найден.

Испытания по методу “белого ящика”:

Для тестирования решено применить пошаговое тестирование сверху вниз (нисходящее), при котором тестирование начинается с верхнего, головного модуля программы, причём модули будут тестироваться не изолированно друг от друга, а подключаться поочерёдно для выполнения теста к набору уже ранее оттестированных модулей.

Тестируемый модуль:

 void Rasstan(struct Lab* P)

{                                                              

 int x=1, y=1;

 char a;

 do{

a=getch();

if(!a) a=getch();

switch (a)

{

case 80:if (y<MY) ++y;break;

case 72:if (y>1) --y;break;

case 75:if (x>1) --x;break;

case 77:if (x<MX) ++x;break;

case 'z':P->Map[y][x]=0;

     break;                                           

case 'x':P->Map[y][x]=1;

     break;

case 'c':P->Map[y][x]=2;

     break;

case 27: exit(0);

}

}while(a!=13);

 }

Этот модуль должен получать карту поля из структуры лабиринта, создадим её.

Ø Для этого модуля имеем следующие тесты (Таблица 1):

 

Таблица 1 – Тесты для модуля Rasstan

№  теста     Действие                 Событие   Соответствие

§                     

§                       Критерий тестирования: покрытие решений

1 Нажать клавишу <↑> (вверх) курсор переместился вверх полное соответствие
2 Нажать клавишу<↓> (вниз) курсор переместился вниз полное соответствие
3 Нажать клавишу<←> (влево) курсор переместился влево полное соответствие
4 Нажать клавишу<→> (вправо) курсор переместился  вправо полное соответствие
5 ввести клавишу’х’ (ребро) на карте поля отобразилось значение ‘1’ полное соответствие
6 ввести клавишу’с’ (вершину) на карте поля отобразилось значение ‘2’ полное соответствие
7 навести курсор на значение‘1’или‘2’ и ввести клавишу’z’ (т.е.удалить) на карте поля отобразилось значение ‘0’ вместо значения‘2’или‘1’ полное соответствие
8 Нажать клавишу‘Esc’   выход из программы полное соответствие

                   

                  Критерий тестирования: покрытие условий

9 Нажать клавишу <↑> (вверх) и передвигать курсор до тех пор, пока не достигнет границы   § Курсор не выходит за границы поля полное соответствие
10 Нажать клавишу<↓> (вниз) и передвигать курсор до тех пор, пока не достигнет границы § Курсор не выходит за границы поля полное соответствие
11 Нажать клавишу<←> (влево) и передвигать курсор до тех пор, пока не достигнет границы § Курсор не выходит за границы поля полное соответствие
12 Нажать клавишу<→> (вправо) и передвигать курсор до тех пор, пока не достигнет границы §  Курсор не выходит за границы поля полное соответствие

Тестируемый модуль:

void Vvod(struct Lab* P, int* x1, int* y1, int* x2, int* y2)

{

 gotoxy(3,2);printf("Введите вход в лабиринт");        

 int x=1,y=1;                                                                    

 

 char a;

 do{

a=getch();

if(!a) a=getch();

CursorHide(x,y);

switch(a){

case 80:if (y<MY) ++y;break;

case 72:if (y>1) --y;break;

case 75:if (x>1) --x;break;

case 77:if (x<MX) ++x;break

case 27:exit(0);

 }

 if ((a==13) && (P->Map[y][x]==2)) break;

}while(1);

*x1=x;*y1=y;

 gotoxy(3,4);printf("Введите выход из лабиринта");

 do{0

a=getch();

if(!a) a=getch();

switch(a){

case 80:if (y<MY) ++y;break;

case 72:if (y>1) --y;break;

case 75:if (x>1) --x;break; 

case 77:if (x<MX) ++x;break;

case 27:exit(0);

}

 if ((a==13) && (P->Map[y][x]==2)) break;

 }while(1);

 *x2=x;*y2=y;

 gotoxy(3,5); printf("x2=%3i y2=%3i ",x,y);

}

Ø

Ø Для этого модуля имеем следующие тесты (Таблица 2):

Таблица 2 – Тесты для модуля Vvod

№  теста          Действие Предполагаемое поведение Функции   Соответствие

§                     

§                       Критерий тестирования: покрытие решений

1 Нажать клавишу <↑> (вверх) курсор должен переместиться вверх полное соответствие
2 Нажать клавишу<↓> (вниз) курсор должен переместиться вниз полное соответствие
3 Нажать клавишу<←> (влево) курсор должен переместиться влево полное соответствие
4 Нажать клавишу<→> (вправо) курсор должен переместиться вправо полное соответствие
5 Нажать клавишу‘Esc’   выход из программы полное соответствие

                   

                  Критерий тестирования: покрытие условий

6 Нажать клавишу <↑> (вверх) и передвигать курсор до тех пор, пока не достигнет границы   § Курсор не должен выходить за границы поля полное соответствие
7 Нажать клавишу<↓> (вниз) и передвигать курсор до тех пор, пока не достигнет границы § Курсор не должен выходить за границы поля полное соответствие
8 Нажать клавишу<←> (влево) и передвигать курсор до тех пор, пока не достигнет границы § Курсор не должен выходить за границы поля полное соответствие
9 Нажать клавишу<→> (вправо) и передвигать курсор до тех пор, пока не достигнет границы § Курсор не должен выходить § за границы поля полное соответствие
10 навести курсор на дверь и нажать Enter   § Функция не будет реаги- § ровать на ввод полное соответствие
11 навести курсор на комнату и нажать Enter   Функция должна попроси ть ввести выход из лаби ринта. полное соответствие

 

Тестируемый модуль:  

int Find(struct Lab *P,int x1,int y1,int x2, int y2)

{

 int x,y,k=1,F=1;

 P->Put[y2][x2]=k;                                                 

 while(F)

 {

F=0;

for(x=1;x<=MX;x++)

{

for(y=1;y<=MY;y++)

{

if (P->Put[y][x]==k)

{

if (P->Map[y+1][x]!=0 && P->Put[y+1][x]==0)

     { P->Put[y+1][x]=k+1;F=1;}

if (P->Map[y-1][x]!=0 && P->Put[y-1][x]==0)

     { P->Put[y-1][x]=k+1;F=1;}

if (P->Map[y][x+1]!=0 && P->Put[y][x+1]==0)

     { P->Put[y][x+1]=k+1;F=1;}

if (P->Map[y][x-1]!=0 && P->Put[y][x-1]==0)

     { P->Put[y][x-1]=k+1;F=1;}

   }

}

}

k++;

}

 if (P->Put[y1][x1]==0)

{

gotoxy(3,7);printf("Путь не найден");

 }

 else

 {

gotoxy(3,7);printf("Кратчайший путь найден");

}

В модуль должна передаваться карта поля и координаты двух вершин х1,y1

и х2,y2 полученые от функции Vvod, между которыми необходимо найти

кратчайший путь.

Ø Для этого модуля имеем следующие тесты (Таблица 3):

 

Таблица 3 – Тесты для модуля Find

№  теста          Действие Предполагаемое поведе- ние функции Соответствие

§                     

§               Критерий тестирования: покрытие решений/условий

1 Необходимо сформи- ровать лабиринт и  ввести две вершины, между которыми необходимо найти кратчайший путь функция должна найти путь  и выдать соответствующее сообщение полное соответствие
2 Необходимо сформи- ровать несвязаный лабиринт и ввести 2 вершины, между которыми необходи- мо найти путь   функция не должна найти  путь и выдать соответст- вующее сообщение полное соответствие

Текст программы

 

#include<d:\4term\bc\bin\suslov\head.h>

void main()

{

 static struct Lab P;

 int X1,X2,Y1,Y2;

 char a;

 do{

 Grin(&P);

// q(&P);

 Rasstan(&P);

 Vvod(&P,&X1,&Y1,&X2,&Y2);

 if(!Find(&P,X1,Y1,X2,Y2))

 {

gotoxy(3,7);printf("Путь не найден");

 }

 else

 {

gotoxy(3,7);printf("Кратчайший путь:");

Puty(&P,X1,Y1,X2,Y2);

 }

// q(&P);

 gotoxy(3,8); printf("Press Esc to exit or any key to continue");

 a=getch();

 }while(a!=27);

 closegraph();

}

Заголовочный файл:

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

#include<graphics.h>

#include<dos.h>

const

SX=10, //координаты начала

SY=130,//

MX=30, // колво клеток по осям

MY=17,

R =20,

SetkaColor =DARKGRAY,

RebroColor =GREEN,

UzelColor =GREEN,

CursorColor=15,

PutColor =RED;

struct Lab

{

 int Map[MY+2][MX+2];

 // Карта лаб 0-непроходимо 1-дверь 2-комната

 int Put[MY+2][MX+2];

 // Карта прохождения 1-непроходит

};

int Grin(struct Lab* P)

{

int gdriver = DETECT,gmode, errorcode;

initgraph(&gdriver, &gmode,"");

errorcode = graphresult();

if (errorcode!= grOk)

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Graphics error:Press any key:");

getch();

exit(1);

};

int x, y;

for(y=0;y<MY+2;y++)

for(x=0;x<MX+2;x++)

{

P->Map[y][x]=0; /*Инициализирует массивы*/

P->Put[y][x]=0;

}

for(y=0;y<MY+2;y++)

{

P->Put[y][0 ]=-1;

P->Put[y][MX+1]=-1;

}

for(x=0;x<MX+2;x++)

{

P->Put[0 ][x]=-1;

P->Put[MY+1][x]=-1;

}

//Setka

setcolor(SetkaColor);

for(y=0;y<=MY;y++)

for(x=0;x<=MX;x++)

{

line(SX+x*R,SY,SX+x*R,SY+R*MY);

line(SX,SY+y*R,SX+MX*R,SY+y*R);

}

return 0;

}

void maska(int x,int y)

{

 setcolor(0);

 rectangle(SX+(x-1)*R+1,SY+(y-1)*R+1,SX+x*R-1,SY+y*R-1);

}

void vyvod(int x,int y)

{

 setcolor(CursorColor);

 rectangle(SX+(x-1)*R+1,SY+(y-1)*R+1,SX+x*R-1,SY+y*R-1);

}

void Rasstan(struct Lab* P)

{

 int x=1, y=1; //Коорты курсора

 gotoxy(55,4); printf("Управление:");

 gotoxy(55,5); printf(" я - удалить");

 gotoxy(55,6); printf(" д - дверь");

 gotoxy(55,7); printf(" к - комната");

 gotoxy(55,8); printf(" Enter - ввести");

 vyvod(x,y);

 char a;

 do{

a=getch();

if(!a) a=getch();

maska(x,y);

switch (a)

{

case 80:if (y<MY) ++y;break; /* вниз */

case 72:if (y>1) --y;break; /* вверх */

case 75:if (x>1) --x;break; /* влево */

case 77:if (x<MX) ++x;break; /* вправо*/

case 'z':P->Map[y][x]=0;

    setcolor(0);setfillstyle(1,0);                   

    bar(SX+(x-1)*R+1,SY+(y-1)*R+1,SX+x*R-1,SY+y*R-1); 

    break;                                           

//раставляем ком и дв

case 'l':P->Map[y][x]=1;

    setcolor(RebroColor);

    line(SX+x*R-R/2,SY+(y-1)*R+1,SX+x*R-R/2,SY+y*R-1);

    line(SX+(x-1)*R+1,SY+y*R-R/2,SX+x*R-1,SY+y*R-R/2);

    break;

case 'r':P->Map[y][x]=2;

    setcolor(UzelColor);setfillstyle(1,UzelColor);

    fillellipse(SX+x*R-R/2,SY+y*R-R/2,R/2-1,R/2-1);

    break;

case 27: exit(0);//vixod iz programmi

}

vyvod(x,y);

 }while(a!=13);

 maska(x,y);

}

 

void Vvod(struct Lab* P, int* x1, int* y1, int* x2, int* y2)

{

 gotoxy(3,2);printf("Введите вход в лабиринт");

 int x=1,y=1;

 char a;

 vyvod(x,y);

 do{

a=getch();

if(!a) a=getch();

maska(x,y);

switch(a){

case 80:if (y<MY) ++y;break; /* вниз */

case 72:if (y>1) --y;break; /* вверх */

case 75:if (x>1) --x;break; /* влево */

case 77:if (x<MX) ++x;break; /* вправо*/

case 27:exit(0);

}

 vyvod(x,y);

 if ((a==13) && (P->Map[y][x]==2)) break;

 }while(1);

 maska(x,y);

 *x1=x;*y1=y;

 gotoxy(3,3); printf("x1=%3i y1=%3i ",x,y);

 gotoxy(3,4);printf("Введите выход");

 vyvod(x,y);

 do{

a=getch();

if(!a) a=getch();

maska(x,y);

switch(a){

case 80:if (y<MY) ++y;break; /* вниз */

case 72:if (y>1) --y;break; /* вверх */

case 75:if (x>1) --x;break; /* влево */

case 77:if (x<MX) ++x;break; /* вправо*/

case 27:exit(0);

}

 vyvod(x,y);

 if ((a==13) && (P->Map[y][x]==2)) break;

 }while(1);

 maska(x,y);

 *x2=x;*y2=y;

 gotoxy(3,5); printf("x2=%3i y2=%3i ",x,y);

}

int Find(struct Lab *P,int x1,int y1,int x2, int y2)

{

 int x,y,k=1,F=1;

 P->Put[y2][x2]=k;

 while(F)

 {

F=0;

for(x=1;x<=MX;x++)

{

for(y=1;y<=MY;y++)

{

if (P->Put[y][x]==k)

{

if (P->Map[y+1][x]!=0 && P->Put[y+1][x]==0)

     { P->Put[y+1][x]=k+1;F=1;}

if (P->Map[y-1][x]!=0 && P->Put[y-1][x]==0)

     { P->Put[y-1][x]=k+1;F=1;}

if (P->Map[y][x+1]!=0 && P->Put[y][x+1]==0)

     { P->Put[y][x+1]=k+1;F=1;}

if (P->Map[y][x-1]!=0 && P->Put[y][x-1]==0)

     { P->Put[y][x-1]=k+1;F=1;}

  }

}

}

k++;

}

 if (P->Put[y1][x1]==0) return 0; else return 1;

}

void Puty(struct Lab* P,int x1, int y1, int x2, int y2)

{

 int x=x1,y=y1;

 int k;

 setcolor(PutColor);

 setfillstyle(1,PutColor);

 while(!(x==x2 && y==y2))

 {

fillellipse(SX+x*R-R/2,SY+y*R-R/2,R/4,R/4);

k=P->Put[y][x]-1;

if(P->Put[y+1][x ]==k){y++;continue;}

if(P->Put[y-1][x ]==k){y--;continue;}

  if(P->Put[y ][x+1]==k){x++;continue;}

if(P->Put[y ][x-1]==k){x--;continue;}

 }

 fillellipse(SX+x*R-R/2,SY+y*R-R/2,R/4,R/4);

}

ПРИЛОЖЕНИЕ Г


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: