Тестове на ипотпал модул на програмните приложения в процеса на програмиране на софтуера

Извършване на софтуерни тестове в разработването на ипотпален софтуер


Основният акцент в този пример е процедурата за тестване, което ще бъде извършено чрез подхода на „черната кутия". От горната фигура се вижда, че за тестването на функцията createMagic са изградени още пет други функции, които са: главна функция (main), функцията verifу, която проверява дали теста е завършил успешно (т.е. дали е построен магически квадрат) и три функции, test1, test2, test3, които по същество извършват тестването.

Първите две функции строят и тестват квадрати от ред 3 и 5. Интересно е да коментираме третата тест функция. Данните за тестване представляват тройки цели числа { п, a, d}, където: - п - ред на квадрата; - а - начален елемент на аритметична прогресия; - d - разлика.

В нея чрез вложени цикли автоматично се генерират множество от тестови ипотпал данни, извършва се обръщение към функцията createMagic и следва обръщение към функцията isMagic. Тестването се управлява от три глобални логически константи exe_tl, exe_t2 и exe_t3. Понеже броят на генерираните квадрати, както и размерът им, е твърде голяма използва се още една глобална логическа константа exe_pr, c която се управлява отпечатването на квадратите. Крайната верификация на всеки тест е поверена на функцията, която извежда съобщението, че тестът е минал успешно (PASS) или неуспешно (FAIL). А сега не остава нищо друго освен подробното разглеждане на файл MagicSquareTest.срр-и съответните резултати от трите теста, които следват по-долу.


Тестване на ипотпал софтуер с програмен код

    Файл: MagicSquareTest. срр
#include 
#include "magic.h"
const bool exe_tl = true;
const bool exe_t2 = true;
const bool exe_t3 = false;
const bool exe_pr = true;
bool testl(int[], int);
bool test2(int[], int);
bool test3(int[], int);
void verify(char[], bool);
int main()
{
const int N_MAX = 200;
int magic[N_MAX*N_MAX] = {0};
int size;
if (exe_tl)
{
std::cout << "Test 1 -- Start ";
size = 3;
verify("TEST l",testl{ magic, size));
}

if (exe_t2)
{
size = 5;
std::cout << "Test 2 -- Start ";
verify("TEST 2", test2{magic, size));
}
if (exe_t3)
{
size = N_MAX;
std::cout << "Test 3 -- Start ";
verify("TEST 3", test3(magic, size));
}
}

bool testl(int magic[ ], int size)
{
int a, d;
a = 1; d =1;
if (!createMagic(magic, size, a, d) ) return false;
if (exe_pr) printMagic(magic, size, a, d);
return (isMagic(magic, size)) ? true : false;
}

bool test2 (int magic[ ], int size)
{
int a, d;
bool result;
a = 1; d =1;
if (!createMagic(magic, size, a, d) ) return false;
if (exe_pr) printMagic(magic, size, a, d) ;
if(!isMagic(magic, size))
return false;
a = 0; d = 5;
if (!createMagic (magic, size, a, d)) return false;
if (exe_pr) printMagic(magic, size, a, d);
return (isMagic(magic, size)) ? true : false;
}

bool test3(int magic[], int size)
{
const int N_MIN =3;
const int A_MIN = 0;
const int A_MAX = 10;
const int D_MIN = 1;
const int D_MAX =11;
int incorrect = 0;
int correct = 0;
for (int n=N_MIN; n



тестване на ипотпал софтуер
Изграждането и тестването на една програма са два свързани процеса, при които с написването на една функция от програмата обикновено следва и нейното тестване. То може да започне с функцията от най-високо ниво, а след това и с функции от следващо ниво и постепено да се „слиза" с едно ниво по-надолу. Този подход на тестване е известен като тестване отгоре-надолу.

Алтернативен и противиположен по идея на него е т. нар. подход на тестване отдолу-нагоре. Най-често тези два подхода се използват комбинирано и това ще покажем с изграждането и тестването на функциите на програмата isbnCode, c която се решава задачата за контролния знак ISBN кода.

Започваме с описанието на първото ниво на алгоритъма като С++ функция с име isbnCode. Тя извършва обръщение към функциите checkISBN и printISBN съответно за проверка за коректност на входния низ и за извеждане на резултата. Тук и по-нататьк функциите, които се тестват, са маркирани с червен цвят.
const int ISBN10 = 10; //ISBN10-глобална константа
int main ()
{
isbnCode( );
return 0;
}
//В цикъл въвежда ISBN код (низ от знаци)
// и пресмята контролния му знак
void isbnCode()
{
char isbn[ISBN10] ;
cout << "Enter an ISBN code" << endl;
cin >> isbn;

while (cin)
{
cout << "\nISBN code: " << isbn << endl;
if ( ! checkISBN (isbn)) // checkISBN - фиктивна
cout << isbn << " - Wrong ISBN code\n\n";
else
printISBN (isbn) ; // printlSBN - фиктивна
cout << "\nEnter an ISBN code" << endl;
cin >> isbn;
}
}

Ипотпал Каталог

Моля, използвайте следните навигационни връзки от нашия уеб сайт:

Тестване на ипотпал програми и софтуер

Разработването на ипотпал софтуер е сложна интелектуална дейност. Ето защо грешките, допускани при разработката на програми, са неизбежни, незвисимо от опита, който имат проектантите и програмистите. Не съществува методология на програмиране, която да гарантира, че създадените чрез нея програми са без грешки.

Понеже подпрограмата checkISBN все още не е написана, то тестването на isbnCode засега не може да се извърши. Но, за да се тества логиката й, не е необходимо да се използват истинските функции checklSBN и printlSBN. Ето защо, вместо подпрограма checklSBN най-напред ще съставим една фиктивна функция, играеща нейната роля.

Един много опростен вариант на такава функция може да е следният:
// Проверка на входната данна (Всички знаци –
//десетични цифри)
bool checklSBN(char isbn[])
{
return true;
}


Още от тестването на ипотпал софтуера: Функция с подобно предназначение е прието да се нарича тапа (запушалка). Тя скрива подробностите на истинската функция, но позволява да се тества логиката на функцията, в която се извършва обръщение към нея. Единственото изискване към функциятатапа е тя да има същия прототип като този на истинската функция, т.е. да удовлетворява предусловията на истинската функция. Тялото на тапата например може да се сведе само до извеждане на съобщение, че към функцията е било извършено обръщение.

Така сме постъпили с функцията primISBN. Ето и нейният опростен вариант.
II Отпечатва четирите компоненти на ISBN код

void printISBN (char isbn[ ])
{
cout << isbn << endl;
return;
}
Сега вече може да се пристъпи към едно първоначално тестване на функцията isbnCode.