Trường Đại học Bách Khoa Hà Nội
Viện Công nghệ thông tin và truyền thông
Tài liệu kiểm thử
và gỡ rối
Đề tài : Tạo một ADT có tên Array.h
và viết một chương trình CheckArray.c để kiểm tra
Hà Nội, 2013
1
Giảng viên hướng dẫn : TS Vũ thị Hương Giang
Nhóm sinh viên thực hiện : Vũ Văn Bảo
Trần Trung Hiếu
Nguyễn Minh Tiến
Nguyễn Văn Tùng
Nguyễn Hồng Vinh
Lớp : KSCLC – K55
Năm học : 2012 - 2013
Mục lục
Mục lục 2
I.Kiểm thử 3
1.Kiểm thử hàm mang nhap() 3
2.Kiểm thử thủ tục void hien(mang mang1) 5
3.Kiểm thử hàm mang bubbleSort(mang mang1) 5
4.Kiểm thử hàm mang insertionSort(mang mang1) 6
5.Kiểm thử hàm mang selectionSort(mang mang1) 6
6.Kiểm thử thủ tục void finMax(mang mang1) 7
7.Kiểm thử thủ tục void finMin(mang mang1) 7
8.Kiểm thử hàm float avgMax(mang mang1) 7
9.Kiểm thử hàm float dolech(mang mang1, int i, int j) 8
10.Kiểm thử hàm float dolechtb(mang mang1) 9
11.Kiểm thử thủ tục void sequentialSearch(mang mang1, float x) 9
12.Kiểm thử thủ tục void binarySearch(mang mang1, float giatri) 10
13.Kiểm thử thủ tục getTime(mang mang_input) 12
II.Gỡ rối 13
1.ASSERT1 dùng để kiểm tra xem việc nhập dữ liệu vào mảng có đúng
không 13
2.ASSERT 2 dùng để kiểm tra giá trị ở 2 giải thuật tìm kiếm có đúng kiểu dữ
liệu hay không 13
3.ASSERT 3 dùng để kiểm tra việc nhập kích thước của mảngcó đúng yêu
cầu hay không 14
Tài liệu tham khảo 16
2
I. Kiểm thử
1. Kiểm thử hàm mang nhap().
a. Trường hợp kiểm thử 1:nhập vào số phần tử là số nhưng mà không phải là
số nguyên.
• Dữ liệu kiểm thử:
count = 3.5.
• Yêu cầu:
Thông báo nhập dữ liệu không đúng, cho phép nhập lại.
• Kết quả:
Chương trình chạy không đúng yêu cầu.
b. Trường hợp kiểm thử 2:nhập vào số phần tử của mảng là 1 số nguyên
nhưng có giá trị lớn hơn 1000 hoặc nhỏ hơn 1.
• Dữ liệu kiểm thử:
count = 1001.
• Yêu cầu:
In ra thông báo nhập dữ liệu không đúng và cho phép nhập lại.
• Kết quả:
Chương trình chạy đúng với yêu cầu.
c. Trường hợp kiểm thử 3: Nhập vào số phần tử của mảng là một số nguyên
thuộc [1;1000] nhưng nhập dữ liệu cho mảng có ít nhất 1 phần tử là 1 ký tự
bất kỳ, không phải số.
• Dữ liệu kiểm thử:
count = 7;
max = {e;2.4;6;7.23;9;12.6;*);
• Yêu cầu: thông báo dữ liệu không đúng và cho phép nhập lại
3
• Kết quả:
Chương tình chạy không đúng với yêu cầu.
d. Trường hợp kiểm thử 4: Nhập vào số phần tử của mảng là 1 số nguyên
thuộc [1;1000] và nhập dữ liệu cho mảng là các số thực nằm trong phạm vi
kích thước của kiểu float.
• Dữ liệu kiểm thử:
count = 6.
max = {16.66;13.32;123;2;5;6.7}.
• Yêu cầu: Dữ liệu được nhập, và in ra thông báo nhập dữ liệu thành công.
• Kết quả:
4
Chương trình chạy đúng với yêu cầu.
2. Kiểm thử thủ tục void hien(mang mang1).
• Dữ liệu kiểm thử:
mang1.count = 6.
mang1.max = {16.66;13.32;123;2;5;6.7}.
• Yêu cầu: In ra màn hình đúng giá trị của biến mang1.
• Kết quả :
Chương trình chạy đúng theo yêu cầu.
3. Kiểm thử hàm mang bubbleSort(mang mang1).
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
• Yêu cầu:trả về mảng mang1.max được sắp xếp tăng dần
mang1.max = {2;2;5;6.7; 13.32;13.32;16.66;123}.
• Kết quả:
5
Chương trình chạy đúng theo yêu cầu.
4. Kiểm thử hàm mang insertionSort(mang mang1).
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
• Yêu cầu: trả về mảng mang1.max được sắp xếp tăng dần
mang1.max = {2;2;5;6.7; 13.32;13.32;16.66;123}.
• Kết quả:
Chương trình chạy đúng theo yêu cầu.
5. Kiểm thử hàm mang selectionSort(mang mang1).
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
• Yêu cầu: trả về mảng mang1.max được sắp xếp tăng dần
mang1.max = {2;2;5;6.7; 13.32;13.32;16.66;123}.
• Kết quả:
6
Chương trình chạy đúng theo yêu cầu.
6. Kiểm thử thủ tục void finMax(mang mang1).
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
• Yêu cầu: In ra đúng giá trị lớn nhất trong mảng là 123, và phần tử lớn nhất
là phần tử thứ 3.
• Kết quả:
Chương trình chạy đúng yêu cầu.
7. Kiểm thử thủ tục void finMin(mang mang1).
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
• Yêu cầu: In ra đúng giá trị nhỏ nhất trong mảng là 2, và phần tử lớn nhất
là phần tử thứ 4, 8.
• Kết quả:
Chương trình chạy đúng yêu cầu.
8. Kiểm thử hàm float avgMax(mang mang1).
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
Yêu cầu: Trả về giá trị tb của các phần tử trong mảng: avg = 22.75
7
• Kết quả:
Chương trình chạy đúng theo yêu càu.
9. Kiểm thử hàm float dolech(mang mang1, int i, int j).
a. Không có cả hai phần tử thứ i và j:
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
i=10; j = 14.
• Yêu cầu: trả về giá trị -3 ( không có phần tử thứ i= 10 và j = 14).
• Kết quả:
Chương trình chạy đúng theo yêu cầu
b. Không có phần tử thứ i:
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
i= 12,j =3;
• Yêu cầu: trả về giá trị -2 ( không có phần tử thứ i = 12).
• Kết quả:
Chương trình chạy đúng theo yêu cầu
c. Không có phần tử thứ j:
• Dữ liêu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
i = 3, j = 15;
8
• Yêu cầu: trả về giá trị -1 ( không có phần tử thứ j =13).
• Kết quả:
Chương trình chạy đúng theo yêu cầu.
d. Có cả hai phần tử i và j:
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
i = 3, j =6.
• Yêu cầu: trả về giá trị độ lệch giữa hai phần tử 116.3
• Kết quả:
Chương trình chạy đúng yêu cầu.
10. Kiểm thử hàm float dolechtb(mang mang1).
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
• Yêu cầu: trả về giá trị độ lệch trung bình giữa các phần tử trong mảng là
108.16
• Kết quả:
Chương trình chạy đúng với yêu cầu.
11. Kiểm thử thủ tục void sequentialSearch(mang mang1, float x).
a. Trường hợp thử 1: không có phần tử có giá trị là x.
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
x = 35.5.
9
• Yêu cầu:
In ra màn hình số 0 thể hiện cho không tìm thấy phần tử này.
• Kết quả:
Chương trình chạy đúng với yêu cầu.
b. Trường hợp thử 2: có 1 phần tử có giá trị là x.
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
x = 16.66.
• Yêu cầu:
In ra đúng vị trí chỉ số của phần tử có giá trị x =16.66 là 0.
• Kết quả:
Chương trình chạy đúng với yêu cầu.
c. Trường hợp thử 3: có nhiều hơn 1 phần tử có giá trị là x.
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
x = 13.32.
• Yêu cầu:
In ra đúng và đủ vị trí chỉ số của phần tử có giá trị là x= 13.32 là 1 và 6.
• Kết quả:
Chương trình chạy đúng với yêu cầu.
12. Kiểm thử thủ tục void binarySearch(mang mang1, float giatri).
a. Trường hợp thử 1: không có phần tử có giá trị là giatri.
• Dữ liệu kiểm thử:
10
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
x = 35.5.
• Yêu cầu:
In ra màn hình thông báo không tìm thấy phần tử này.
• Kết quả:
Chương trình chạy đúng với yêu cầu.
b. Trường hợp thử 2: có 1 phần tử có giá trị là giatri.
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
x = 16.66.
• Yêu cầu:
In ra đúng vị trí chỉ số của phần tử có giá trị x =16.66 là 6 trong mảng đã
sắp xếp.
• Kết quả:
Chương trình chạy đúng với yêu cầu.
c. Trường hợp thử 3: có nhieu hơn 1 phần tử có giá trị là giá trị.
• Dữ liệu kiểm thử:
mang1.count = 8.
mang1.max = {16.66;13.32;123;2;5;6.7;13.32;2}.
x = 13.32.
• Yêu cầu:
In ra đúng và đủ vị trí chỉ số của phần tử có giá trị là x= 13.32 là 4 và 5.
• Kết quả:
Chương trình chạy đúng với yêu cầu.
11
13. Kiểm thử thủ tục getTime(mang mang_input).
Từ kết quả kiểm thử ở các hàm thủ tục trên, và xem thời gian thực hiện của
từng hàm/thủ tục:
12
Chương trình chạy đúng với yêu cầu.
II. Gỡ rối
1.ASSERT1 dùng để kiểm tra xem việc nhập dữ liệu vào mảng có đúng
không.
float ASSERT1( int chiso){
float a;
char dulieu[10];
printf("\n nhap phan tu thu %3d max[%3d]= ", chiso+1, chiso);
scanf("%s",&dulieu);
fflush(stdin);
if(strcmp(dulieu,"0")!=0){
a= atof(dulieu);
if(a ==0){
printf("\n nhap sai!! moi ban nhap lai");
a= ASSERT1(chiso);
return a;
}
else return a;
}
else {
a=0;
return a;
}
}
2.ASSERT 2 dùng để kiểm tra giá trị ở 2 giải thuật tìm kiếm có đúng kiểu
dữ liệu hay không
float ASSERT2(){
float a;
char dulieu[10];
printf("\n Nhap so can tim y = ");
scanf("%s",&dulieu);
fflush(stdin);
if(strcmp(dulieu,"0")!=0){
a= atof(dulieu);
13
if(a ==0){
printf("\n ban nhap y sai !!!moi ban nhap lai");
a= ASSERT2();
return a;
}
else return a;
}
else {
a=0;
return a;
}
}
3.ASSERT 3 dùng để kiểm tra việc nhập kích thước của mảngcó đúng
yêu cầu hay không.
int ASSERT3(){
int b;
float a;
char dulieu[10];
printf("\n Nhap so luong phan tu cua mang count = ");
scanf("%s",&dulieu);
fflush(stdin);
if(strcmp(dulieu,"0")!=0){
a= atof(dulieu);
b= atoi(dulieu);
if(a ==0){
printf("\n ban da nhap so luong phan tu la ky tu");
printf("\n sai yeu cau moi ban nhap lai");
b= ASSERT3();
return b;
}
else{
if((a-b)!=0){
printf("\n ban da nhap so luong phan tu la kieu so
thuc");
printf("\n sai yeu cau moi ban nhap lai");
b= ASSERT3();
return b;
}
else{
14
if(b<0||b>1000){
printf("\n ban da nhap so luong phan tu khong dung
kich thuoc yeu cau");
printf("\n sai yeu cau moi ban nhap lai");
b= ASSERT3();
return b;
}
else return b;
}
}
}
else {
b=0;
return b;
}
}
15
Tài liệu tham khảo
[1] Slide bài giảng KTLT-Vũ Thị Hương Giang
[2] Code complete A Practical Handbook ofd Software Construction
của tác giả Steve Mc Connell
16