Самостоятелно тестване на функции
* Данните, с които ще се тества функцията, се получават по 3 начена:
-- като вход от потребителя
-- като стойности, получени от цикъл
-- случайни числа
// sqrtest1.cpp
#include <iostream>
#include <cmath>
using namespace std;
bool not_equal(double x, double y)
{
const double EPSILON = 1E-14;
double dmax = fabs(x);
if (fabs(y) > dmax) dmax
= fabs(y);
return fabs(x - y) > dmax
* EPSILON;
}
/* Function to be tested */
double squareroot(double a)
{ if (a == 0) return 0;
double xnew = a;
double xold;
do
{ xold = xnew;
xnew =
(xold + a / xold) / 2;
}
while (not_equal(xnew, xold));
return xnew;
}
/* Test stub */
int main()
{ double x;
while (cin >> x)
{ double y = squareroot(x);
cout <<
"squareroot of " << x << " = " << y << "\n";
}
return 0;
}
// sqrtest2.cpp
#include <iostream>
#include <cmath>
using namespace std;
bool not_equal(double x, double y)
{
const double EPSILON = 1E-14;
double dmax = fabs(x);
if (fabs(y) > dmax) dmax
= fabs(y);
return fabs(x - y) > dmax
* EPSILON;
}
/* Function to be tested */
double squareroot(double a)
{
if (a == 0) return 0;
double xnew = a;
double xold;
do
{ xold = xnew;
xnew =
(xold + a / xold) / 2;
}
while (not_equal(xnew, xold));
return xnew;
}
/* Test stub */
int main()
{ double x;
for (x = 0; x <= 10; x
= x + 0.5)
{ double y = squareroot(x);
cout <<
"squareroot of " << x << " = " << y << "\n";
}
return 0;
}
// sqrtest3.cpp
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
using namespace std;
void rand_seed()
{
int seed = static_cast<int>(time(0));
srand(seed);
}
double rand_double(double a, double b)
{ return a + (b - a) * rand() *
(1.0 / RAND_MAX); }
bool not_equal(double x, double y)
{
const double EPSILON = 1E-14;
double dmax = fabs(x);
if (fabs(y) > dmax) dmax
= fabs(y);
return fabs(x - y) > dmax
* EPSILON;
}
/* Function to be tested */
double squareroot(double a)
{
if (a == 0) return 0;
double xnew = a;
double xold;
do
{ xold = xnew;
xnew =
(xold + a / xold) / 2;
}
while (not_equal(xnew, xold));
return xnew;
}
/* Test stub */
int main()
{ rand_seed();
int i;
for (i = 1; i <= 100;
i++)
{ double x = rand_double(0,
1E6);
double
y = squareroot(x);
cout <<
"squareroot of " << x << " = " << y << "\n";
}
return 0;
}
Подбор на тестови примери
Оценка на резултатите от тестването
// sqrtest4.cpp
oo#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
using namespace std;
void rand_seed()
{
int seed = static_cast<int>(time(0));
srand(seed);
}
double rand_double(double a, double b)
{ return a + (b - a) * rand() *
(1.0 / RAND_MAX); }
bool not_equal(double x, double y)
{
const double EPSILON = 1E-14;
double dmax = fabs(x);
if (fabs(y) > dmax) dmax
= fabs(y);
return fabs(x - y) > dmax
* EPSILON;
}
/* Function to be tested */
double squareroot(double a)
{
if (a == 0) return 0;
double xnew = a;
double xold;
do
{ xold = xnew;
xnew =
(xold + a / xold) / 2;
}
while (not_equal(xnew, xold));
return xnew;
}
/* Test stub */
int main()
{ int i;
for (i = 1; i <= 100;
i++)
{ double x = rand_double(0,
1E6);
double
y = squareroot(x);
if (not_equal(y
* y, x)) cout << "Test failed. ";
else
cout << "Test passed. ";
cout <<
"squareroot of " << x << " = " << y << "\n";
}
return 0;
}
// sqrtest5.cpp
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
using namespace std;
void rand_seed()
{
int seed = static_cast<int>(time(0));
srand(seed);
}
double rand_double(double a, double b)
{ return a + (b - a) * rand() *
(1.0 / RAND_MAX); }
bool not_equal(double x, double y)
{
const double EPSILON = 1E-14;
double dmax = fabs(x);
if (fabs(y) > dmax) dmax
= fabs(y);
return fabs(x - y) > dmax
* EPSILON;
}
/* Function to be tested */
double squareroot(double a)
{
if (a == 0) return 0;
double xnew = a;
double xold;
do
{ xold = xnew;
xnew =
(xold + a / xold) / 2;
}
while (not_equal(xnew, xold));
return xnew;
}
/* Test stub */
int main()
{
rand_seed();
int i;
for (i = 1; i <= 100;
i++)
{ double x = rand_double(0,
1E6);
double
y = squareroot(x);
if (not_equal(y,
pow(x, 0.5))) cout << "Test failed. ";
else
cout << "Test passed. ";
cout <<
"squareroot of " << x << " = " << y << "\n";
}
return 0;
}
Трасиране на програмата
Работа на дебъгерът
Стратегии при тестването
** Възпроизвеждане на грешката
** "Разделяй и владей"
** Изяснете си какво трябва да прави програмата ви
** Обръщайте внимание на всички подробности
** Вниквайте във всяка грешка преди да я отстраните