Software Testing Complete File
Software Testing Complete File
Aim: Write a program in C/C++ to find the root of a quardatic equaltion and perform the following
on it: Boundary Value Analysis (BVA).
Consider the program for the determination of nature of roots of a quadratic equation. Its input is
a triple of postive intergers a,b,c and values may be from interval [0,100]. The program output may
have one of the following words: Not a QE, Real Roots, Imaginary Roots or Equal Roots.
#include<iostream.h>
#include<conio.h>
void main()
{
int a,b,c,d;
clrscr();
cout<<"The Quadratic equation is of the type a(x^2)+bx+c=0"<<endl;
cout<<"Enter the value of a: "<<endl;
cin>>a;
cout<<"Enter the value of b: "<<endl;
cin>>b;
cout<<"Enter the value of c: "<<endl;
cin>>c;
d=(b*b)-4*a*c;
if((a<0)||(b<0)||(c<0)||(a>100)||(b>100)||(c>100))
cout<<"Invalid input"<<endl;
else if(a==0)
cout<<"Not a quadratic equation"<<endl;
else if (d==0)
cout<<"Roots are equal"<<endl;
else if(d<0)
cout<<"Imaginary roots"<<endl;
else
cout<<"Real Roots"<<endl;
getch();
}
Boundary Value analysis: The basic idea of boundary value analysis is to use input variable at their
manimum, just above manimum, normal value, just below maximum and maximum.
In this program, we consider the value as 0 (minimum), 1(just above minimum), 50 (normal), 99
(just below maximum) and 100 (maximum).
Aim: write a program in C\C++ to find the area of a Triangle, Square, Rectangle and a Circle.
Perform Equivalence class testing on it.
#include<iostream.h>
#include<conio.h>
#include<process.h>
void main()
{
clrscr();
int ch;
char c;
float b,h,a;
1: cout<<"Enter your choice";
cout<<"\n 1. Triangle";
cout<<"\n 2. Square";
cout<<"\n 3. Rectangle";
cout<<"\n 4. Circle";
cout<<"\n 5. Exit\n";
cin>>ch;
switch(ch)
{
case 1: b: cout<<"\Enter the base of the triangle (1-200)";
cin>>b;
if((b<=0)||(b>200))
{
cout<<"\n Invalid entry for base \n";
goto b;
}
h: cout<<"\n Enter the height of the triangle (1-200)";
cin>>h;
if((h<=0)||(h>200))
{
cout<<"\n Invalid height\n Enter the valid height (1-200)";
goto h;
}
a= 0.5*b*h;
cout<<"\n The area is : "<<a;
cout<<"\n Want to enter more?(y/n)";
cin>>c;
if((c=='y')||(c=='y'))
goto 1;
break;
case 2 : s: cout<<"\n Enter the side of the squre (1-200)";
cin>>b;
if((b<=0)||(b>200))
{
cout<<"\n Invalid entry for base \n";
goto s;
}
a=b*b;
cout<<"\n The area is :"<<a;
cout<<"\n Want to enter more?(y/n)";
cin>>c;
if((c=='y')||(c=='y'))
goto 1;
break;
case 3: d: cout<<"\n Enter the Base of the rectangle (1-200)";
cin>>b;
if((b<=0)||(b>200))
{
cout<<"\n Invalid entry for base \n";
goto d;
}
p: cout<<"\n Enter the height of the rectangle (1-200)";
cin>>h;
if((h<=0)||(h>200))
{
cout<<"\n Invalid Height \n Enter the height (1-200)";
goto p;
}
a=b*h;
cout<<"\n The area is :"<<a;
cout<<"\n Want to enter more?(y/n)";
cin>>c;
if((c=='y')||(c=='y'))
goto 1;
break;
case 4 : t: cout<<"\n Enter the radius of the circle (1-200)";
cin>>b;
if((b<=0)||(b>200))
{
cout<<"\n Invalid entry for radius \n";
goto t;
}
a=3.14*b*b;
cout<<"\n The area is :"<<a;
cout<<"\n Want to enter more?(y/n)";
cin>>c;
if((c=='y')||(c=='y'))
goto 1;
break;
case 5 : exit(0);
break;
default : cout<<"\n Wrong Choice:";
goto 1;
}
getch();
}
Test cases: In Equivalence class testing, we find two types of equivalence classes; input domain and
output domain;
Input domain is formed from one valid sequence and two invalid sequences. The output domain is
obtained from different types of output of a problem.
For Triagle:
Input domain:::
I1 = {h : h<=0}
I2 = {h : H>200}
I3 = {h : 1<=h<=200}
I4 = {b : b<=0}
I5 = {b : b>200}
I6 = {b : 1<=b<=200}
Test cases:
Test case ID h b Expected output
1. 0 100 Invalid input
2. 100 100 5000
3. 201 100 Invalid input
4. 100 0 Invalid input
5. 100 100 5000
6. 100 201 Invalid input
Output domain:::
Input domain:::
I1={s : s<=0}
I2={s : s>200}
I3={s : 1<=s<=200}
Test cases:
Test case ID s Expected output
1. 0 Invalid input
2. 100 10000
3. 201 Invalid input
Output domain:::
For Rectangle:
Input domain:::
I1 = { l : l <=0}
I2 = { l : l>200}
I3 = { I : 1<=l <=200}
I4 = { b : b<=0}
I5 = { b : b>200}
I6 = { b : 1<=b<=200}
Test cases:
Output domain:::
For Circle:
Input domain:::
I1 = {r: r<=0}
I2 = {r : r>200}
I3 = { r: 1<=r<=200}
Test cases:
Test Cases r Expected output
1. 0 Invalid input
2. 100 31400
3. 201 Invalid input
Output domain:
Aim: write a program in C/C++ to calculate the value of a b. Perform Decision Table based testing
on it.
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
clrscr();
int a,b;
float c;
char ch;
1: cout<<"To Calculate 'a to the power b' \n";
cout<<"Enter the value of 'a' \n";
cin>>a;
cout<<"Enter the value of 'b' \n";
cin>>b;
c=pow(a,b);
cout<<endl<<c;
cout<<"\n Want to enter again? (y/n)";
cin>>ch;
if((ch=='y')||(ch=='y'))
goto 1;
getch();
}
Test cases: Decision Table Based testing is useful for describing situations in which a number of
combination of actions are taken for different conditions. There are four parts of a decision table;
condition stub, action stub, condition entries and action entries.
Conditions are:::
C1 : a = 0, b = 0
C2 : a = -ve, b = +ve
C3 : a = +ve, b = -ve
C4 : a = -ve, b = -ve
C5 : a = +ve, b = +ve
C6 : a = 0,b = integer
C7 : b = 0, a = integer
C8 : a = -ve, b= -ve odd
Actions:::
A1 : Domain error
A2 : Negative output
A3 : output =1
A4 : positive output
A5 : output = 0
Condition R1 R2 R3 R4 R5 R6 R7 R8
C1 T - - - - - - -
C2 - T - - - - - -
C3 -- - - T - - - -
C4 - - -- - T - - -
C5 - - - - - T - -
C6 - - - - - - T -
C7 - - - - - - - T
C8 - - T - - - - -
Action
A1 X
A2 X X
A3 X
A4 X X X
A5 X
8
Want to enter again? (y/n)n
Practical No 4
Aim: write a program in C/C++ to compute previous data. We are given the present date as input.
Also perfome the Boundary value analyses on it.
#include<stdio.h>
#include<conio.h>
int main()
{
int day, month, year, flag=0;
printf("Enter the day value:");
scanf("%d",&day);
printf("Enter the month value:");
scanf("%d",&month);
printf("Enter the year value:");
scanf("%d",&year);
if(year>=1900 && year<=2025)
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(day>=1 && day<=31)
{
flag=1;
}
else
{
flag=0;
}
}
else if(month==2)
{
int rval=0;
if(year%4==0)
{
rval=1;
if((year%100)==0 && (year%400)!=0)
{
rval=0;
}
}
if(rval==&&(day>=1 &&day <=29))
{
flag=1;
}
else if (day>=1 &&day <=28)
{
flag=1;
}
else
{
flag=0;
}
}
if(flag)
{
if(day==1)
{
if(month==1)
{
year--;
day=31;
month=12;
}
else if(month==3)
{
int rval=0;
if(year%4==0)
{
rval=1;
if((year%100)==0 &&(year%400)!=0)
{
rval=0;
}
}
if(rval==1)
{
day=29;
month--;
}
else
{
day=28;
month--;
}
}
else if(month==2||month==4||month==6||month==9||month==11)
{
day=31;
month--;
}
else
{
day=30;
month--;
}
}
else
{
day--;
}
printf(" The next data is : %d-%d-%d",day,month,year);
}
else
{
printf(" The entered data is invalid: %d-%d-%d",day,month,year);
}
getch();
return 1;
}}
Test cases:
Aim: Write a program in C/C++ to read three sides of a triangle and to check whether the triangle
is Isoceles, equilateral or scalane. Perform path testing on it and deduce:
1. Flow graph
2. DD path graph
3. Independent path
4. Cyclomatic complexity
#include<stdio.h>
#include<conio.h>
int main()
{
int a,b,c,validinput=0;
printf("Enter the side ‘a’ value");
scanf("%d",&a);
printf("Enter the side ‘b’ value");
scanf("%d",&b);
printf("Enter the side ‘c’ value");
scanf("%d",&c);
if((a>0)&&(a<100)&&(b>0)&&(b<100)&&(c>0)&&(c<100))
{
if(((a+b)>c)&&((c+a)>b)&&((b+c)>a))
{
validinput=1;
}
}
else
{
validinput=-1;
}
if(validinput==1)
{
if((a==b)&&(b==c))
{
printf("The triangle is equilateral");
}
else if((a==b)||(b==c)||(c==a))
{
printf("The triangle is isosceles");
}
else
{
printf("The triangle is scalene");
}
}
else if(validinput==0)
{
printf("The value do not constitute the triangle");
}
else
{
printf("The input belongs to invalid range");
}
getch();
return 1;
}
1. Flow Graph: It shows that how the control and data is flow from one node to another node. The
flow graph for the following program is given below:
2. DD path graph:
3. Independent path : It is a path in the flow graph that has at least one edge that has not been
traversed before in other path.
1. ABFGNPQR
2. ABFGNOQR
3. ABCEGNPQR
4. ABCDGINOQR
5. ABFGHIMQR
6. ABFGHJKMQR
7. ABFGHJLMQR
Aim: write a program in C\C++ to compute total salary of an employee given his/her basic salary.
The slab is given below:
HRA = 30 % of basic
DA=80% of basic
MA = Rs. 100/-
TA = Rs. 800/-
I.tax = Rs. 700/-
PF = Rs. 780/- Also find out the path graph and cyclomatic complexity.
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
void main()
{
clrscr();
cout<<"Enter the basic salary of the employee";
float bs;
cin>>bs;
int hra,da,ma=100,itax=700, pf=780,ta=800;
hra=0.3*bs;
da=0.8*bs;
cout<<"\nHouse allowance: rs."<<hra;
cout<<"\nDarkness allowance: rs."<<da;
cout<<"\nmedical allowance: rs."<<ma;
cout<<"\ntravel allowance: rs."<<ta;
cout<<"\nIncome tax rs."<<itax;
cout<<"\nprovidend fund: rs."<<pf;
float netsal;
netsal=(bs+hra+da+ta-itax-pf);
cout<<endl;
cout<<"The net selary of the employee is : "<<netsal;
getch();
}
V(G) = e - n + 2P
Here: e = 15
n = 16
p=1
hence V(G) = 1
Practical 7:
Aim: Draw the DD Path graph for the practical no 6 ( write a program in C\C++ to compute total
salary of an employee given his/her basic salary. The slab is given below:
HRA = 30 % of basic
DA=80% of basic
MA = Rs. 100/-
TA = Rs. 800/-
I.tax = Rs. 700/-
PF = Rs. 780/- )
Aim: Write a program to read the marks of 10 students in five subjects. Find the average and allot
the grades. Draw its graph matrix and find its V(G).
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct student
{
char sname[10];
float marks[5];
float total,avg;
char grade;
}s[10];
void main()
{
clrscr(); 1
int i;
for(i=1;i<10;i++) 2
{
cout<<"\n Enter the name of the student"<<i<<"\t"; 3
gets(s[i].sname); 4
for(int j=0;j<5;j++) 5
{
cout<<"\n Enter the marks in subject"<<j<<"\t"; 6
cin>>s[i].marks[j]; 7
}
for(j=0;j<5;j++) 8
{
s[i].total=s[i].total+s[i].marks[j]; 9
}
s[i].avg=s[i].total/5; 10
cout<<"\n The average of student"<<i<<"is:"<<s[i].avg; 11
if(s[i].avg>90.0) 12
s[i].grade='O'; 13
else if((s[i].avg<90.0)&&(s[i].avg>=85.0)) 14
s[i].grade='A'; 15
else if((s[i].avg<85.0)&&(s[i].avg>=80.0)) 16
s[i].grade='B'; 17
else if((s[i].avg<80.0)&&(s[i].avg>=70.0)) 18
s[i].grade='C'; 19
else 20
s[i].grade='D'; 21
cout<<"\n The grade of student" <<i<<"\t"<<s[i].grade; 22
}
getch(); 23
}
Graph matrix:
A B C D E F G H I J K L -
A - 1 - - -- - - - - - - 1 1
B - - 1 1 - - - - - - - - 1
C - - - - - - - - - - - 1 0
D - -- - -- 1 1 - - - - - - 1
E - - - - - - - - - - -- 1 0
F - - - - - - - -- 1 - - - 0
G - - - - - - - - - - - - -
H - - - - - - - - - - - - -
I - -- - - - - - - - 1 1 - 1
J - - - - - - - - - - - 1 0
K -- - - - - - - - - - -- 1 0
L - - - - - - - - - - - - -
4+1=5
The cyclomatic complexity is V(G) = 5. That means there are five indepent path in the flow
graph.
Aim: Write a program to read the marks of 10 students in five subjects. Find the average and allot
the grades. Apply data flow testing on the above program.
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct student
{
char sname[10];
float marks[5];
float total,avg;
char grade;
}s[10];
void main()
{
clrscr(); 1
int i;
for(i=1;i<10;i++) 2
{
cout<<"\n Enter the name of the student"<<i<<"\t"; 3
gets(s[i].sname); 4
for(int j=0;j<5;j++) 5
{
cout<<"\n Enter the marks in subject"<<j<<"\t"; 6
cin>>s[i].marks[j]; 7
}
for(j=0;j<5;j++) 8
{
s[i].total=s[i].total+s[i].marks[j]; 9
}
s[i].avg=s[i].total/5; 10
cout<<"\n The average of student"<<i<<"is:"<<s[i].avg; 11
if(s[i].avg>90.0) 12
s[i].grade='O'; 13
else if((s[i].avg<90.0)&&(s[i].avg>=85.0)) 14
s[i].grade='A'; 15
else if((s[i].avg<85.0)&&(s[i].avg>=80.0)) 16
s[i].grade='B'; 17
else if((s[i].avg<80.0)&&(s[i].avg>=70.0)) 18
s[i].grade='C'; 19
else 20
s[i].grade='D'; 21
cout<<"\n The grade of student" <<i<<"\t"<<s[i].grade; 22
}
getch(); 23
}
Variable Defined At Nodes Used At Nodes
Sname 3 16
Marks 4 20,24
Total 5 24,26
Avg 6 26,27,28,30,32,34
Grade 7 29,31,33,35,37,38
I 12 13,16,20,24,26,27,28,29,30,31,32,33,34,35,37,38
J 17 17,20,22,24
The du-paths are identified and are named by their beginning and end nodes using the variable as follows:
Aim: consider the triangle probem. Its input is a triplet of 3 positive integers (say a, b, c) from the
interval (1 to 100). The output may be one of the following words – scalene, isosceles, equilateral,
not a triangle. Also draw the DD Graph, Decision table, and cause effect graph for the same.
#include<stdio.h>
#include<conio.h>
1 int main()
2 {
3 int a,b,c,valid_I=0;
4 printf("\nEnter a:");
5 scanf("%d",&a);
6 printf("\nEnter b:");
7 scanf("%d",&b);
8 printf("\nEnter c:");
9 scanf("%d",&c);
10 if((a>0) && (a<=100)&& (b>0) && (b<=100)&& (c>0) && (c<=100)) {
11 if((a+b)>c) && ((c+a)>b) &&((b+c)>a)){
12 valid_I=1;
13 }
14 }
15 else {
16 valid_I = -1;
17 }
18 if(valid_I==1) {
19 if((a==b)&&(b==c))
20 printf("Traingle is equilateral");
21 }
22 else if(a==b)||(b==c)||(c==a)) {
23 printf("The triangle is isoceles");
24 }
25 else {
26 printf("The triangle is scalene");
27 }
28 }
29 else if(valid_I==0) {
30 printf("\nNot a traingle");
31 }
32 else {
33 printf("\nInvalid triangle");
34 }
35 getch();
36 return 0;
37 }
Flow graph for the triangle problem
Step 1: We prepare a teble of define and use nodes for all variables used in this program:
Out of the 18 du – path, 4 paths namely (3,18), (3, 29), (12,18), (12,29) are not dc-path.
Step 1 : Firstly, we must identify the causes and its effects. The causes are
R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11
C1 F T T T T T T T T T T
C2 -- F T T T T T T T T T
C3 -- -- F T T T T T T T T
C4 -- -- -- T T T T F F F F
C5 -- -- -- T T F F T T F F
C6 -- -- -- T F T F T F T F
E1 X X X X
E2 X X X
E3
E4 X
E5 X X X
Practical no 11.
Aim: (Quadratic Equation Problem). This program reads a, b and c as the three coefficients of a
quadratic equation ax2 + bx + c = 0. It determines the nature of the roots of this equation. Draw its
flow graph
#include<stdio.h>
#include<conio.h>
1 int main()
2 {
3 int a,b,c,boolean=0;
4 double D;
5 printf("\nEnter a coefficient:");
6 scanf("%d",&a);
7 printf("\nEnter b coefficient:");
8 scanf("%d",&b);
9 printf("\nEnter c coefficient");
10 scanf("%d",&c);
11 if((a>=0) && (a<=100)&& (b>=0) && (b<=100)&& (c>=0) && (c<=100)) {
12 boolean=1;
13 if(a==0)
14 boolean = -1
15 }
16 }
17 if(boolean == 1){
18 d=b*b - 4 * a * c;
19 if(d==0){
20 printf("Roots are equal");
21 }
22 else if(d>0) {
23 D=sqrt(d);
24 printf("Roots are real"
25 }
26 else{
27 D=sqrt(-d)/(2*a);
28 printf("Roots are imaginary");
29 }
30 }
31 printf("Not a quadratic equation");
32 }
33 else {
34 printf("Invalid input range ...");
35 }
36 getch();
37 return 0;
38 }
The flow graph for the following is given below: