Trường Đại học Bách Khoa Hà NộiViện Công nghệ thông tin và truyền thông Báo cáo kiểm thử và gỡ rối bài làm nhóm 11 Đề tài : Tạo một ADT có tên Array.h và viết một chương trình CheckArra
Trang 1Trường Đại học Bách Khoa Hà Nội
Viện Công nghệ thông tin và truyền thông
Báo cáo kiểm thử
và gỡ rối bài làm nhóm 11
Đề 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
Giảng viên hướng dẫn : TS Vũ thị Hương Giang
Nhóm sinh viên thực hiện 5: 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
Trang 2Mục lục
Mục lục 2
I Kiểm thử 3
1 Kiểm thử void Creat (Array &a) 3
2 Kiểm thử thủ tục void PrintArray(Array a) 5
3 Kiểm thử thủ tục void BubleSort(Array &a) 5
4 Kiểm thử hàm thủ tục InsertSort(Array &a) 6
5 Kiểm thử thủ tục void InsertSort(Array &a) 6
6 Kiểm thử hàm float Max(Array a) 6
7 Kiểm thử hàm float Min(Array a) 7
8 Kiểm thử hàm void Average(Array a) 7
9 Kiểm thử thủ tục void Gap(Array a) 7
10 Kiểm thử thủ tục void Averagedeviation(Array a) 8
11 Kiểm thử hàm int Search(Array a) 8
12 Kiểm thử hàm int SearchBinary(Array a) 9
13 Kiểm thử thủ tục void Times(Array a, Array b) 11
14 Tổng kết các lỗi: 11
II Sửa lỗi, gỡ rối 11
1 Lỗi ở tìm kiếm tuần tự: 11
2 Lỗi ở tìm kiếm nhị phân: 12
3 Lỗi ở tính thời gian: 13
Tài liệu tham khảo 14
Trang 3I Kiểm thử
1 Kiểm thử void Creat (Array &a)
a Trường hợp kiểm thử 1: nhập số phần tử của mảng là một kí tự bất kỳ, nhưng không phải là số
count = e
b Trường hợp kiểm thử 2:nhập vào số phần tử là số nhưng mà không phải là
số nguyên
count = 3.5
Lấy phần nguyên của số vừa nhập
Trang 4c Trường hợp kiểm thử 4: Nhập vào số phần tử của mảng là một số nguyên 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ố
count = 7;
max = {e;2.4;6;7.23;9;12.6;*);
d Trường hợp kiểm thử 6: 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
count = 6
array = {16.66;13.32;32,123;2;5}.Yêu cầu:
Trang 5 Chương trình chạy đúng với yêu cầu.
2 Kiểm thử thủ tục void PrintArray(Array a)
count = 6
array = {16.66;13.32;32,123;2;5}
3 Kiểm thử thủ tục void BubleSort(Array &a)
count = 6
array = {16.66;13.32;32,123;2;5}
Trang 6{2;5;6.7; 13.32;13.32;16.66;123}.
4 Kiểm thử hàm thủ tục InsertSort(Array &a).
count = 6
array = {16.66;13.32;32,123;2;5}
mang1.max = {2;5;6.7; 13.32;13.32;16.66;123}
5 Kiểm thử thủ tục void InsertSort(Array &a).
count = 6
array = {16.66;13.32;32,123;2;5}
{2;5; 13.32;13.32;16.66;123}
6 Kiểm thử hàm float Max(Array a).
count = 6
array = {16.66;13.32;32,123;2;5}
là phần tử thứ 4
Trang 7 Chương trình chạy đúng yêu cầu.
7 Kiểm thử hàm float Min(Array a).
count = 6
array = {16.66;13.32;32,123;2;5}
là phần tử thứ 5
8 Kiểm thử hàm void Average(Array a).
count = 6
array = {16.66;13.32;32,123;2;5}
9 Kiểm thử thủ tục void Gap(Array a).
a Không có 1 hoặc cả hai phần tử thứ i và j:
count = 6
array = {16.66;13.32;32,123;2;5}
i=10; j = 14
Trang 8 Chương trình chạy đúng theo yêu cầu
b Có cả hai phần tử i và j:
count = 6
array = {16.66;13.32;32,123;2;5}
i = 3, j =6
10.Kiểm thử thủ tục void Averagedeviation(Array a).
count = 6
array = {16.66;13.32;32,123;2;5}
trả về giá trị độ lệch trung bình giữa các phần tử trong mảng là 108.16
11.Kiểm thử hàm int Search(Array a).
a Trường hợp thử 1: không có phần tử có giá trị là x
count = 6
array = {16.66;13.32;32,123;2;5}
x = 35.5
Trang 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
b Trường hợp thử 2: có 1 phần tử có giá trị là x
count = 6
array = {16.66;13.32;32,123;2;5}
x = 16.66
In ra đúng vị trí của phần tử có giá trị x =16.66 là 1
c Trường hợp thử 3: có nhiều hơn 1 phần tử có giá trị là x
count = 6
array = {16.66;13.32;32,123;2;5;13.32}
x = 13.32
In ra đúng và đủ vị trí chỉ số của phần tử có giá trị là x= 13.32 là 1 và 6
12.Kiểm thử hàm int SearchBinary(Array a)
a Trường hợp thử 1: không có phần tử có giá trị là giatri
count = 6
array = {16.66;13.32;32,123;2;5;13.32}
x = 35.5
Trang 10 Yêu cầu:
In ra màn hình 0 (k0 thấy phần tử)
b Trường hợp thử 2: có 1 phần tử có giá trị là giatri
count = 6
array = {16.66;13.32;32,123;2;5;13.32}
x = 16.66
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
c Trường hợp thử 3: có nhieu hơn 1 phần tử có giá trị là giá trị
count = 6
array = {16.66;13.32;32,123;2;5;13.32}
sau khi sap xep
array = {2;5;13.32,13.32;16.66;32;123}
x = 13.32
In ra đúng và đủ vị trí chỉ số của phần tử có giá trị là x= 13.32 là 3 và 4
Trang 1113.Kiểm thử thủ tục void Times(Array a, Array b)
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:
14.Tổng kết các lỗi:
trình đưa ra kết quả sai, chỉ đưa ra được 1 giá tri
o Có một phần tử thì chương trình đưa ra giá trị 0 tức là không có phần tử
o Có nhiều hơn 1 phần tử chương trình chỉ đưa ra 1 vị trí, đưa ra không đủ các vị trí của phần tử cần tìm
dữ liệu Array khiến người đọc rối mắt,
1 L i tìm ki m tu n t : ỗi ở tìm kiếm tuần tự: ở tìm kiếm tuần tự: ếm tuần tự: ần tự: ự:
Sử dụng thủ tục in ra vị trí của các phần tử nếu bằng với giá trị cần tìm Nếu không có in ra màn hình số 0.
void sequentialSearch(mang mang1,float x)
{
int i, e;
int cs[mang1.count];
e = 0;
/* tim kiem theo giai thuat sequential search*/
for (i = 0; i < mang1.count; i++){
if (mang1.max[i] == x){
cs[e] = i; /*copy cac chi so tim duoc vao mang cs[] */
e++;
} }
Trang 12/* in ket qua */
if (e == 0) printf("\n %3d", e);
else {
printf("\n Chi so cua phan tu co gia tri %7.3f tim theo giai thuat
sequentialSearch la: ", x);
for (i = 0; i < e; i++)
printf("%3d", cs[i]); // in ra cac chi so can tim }
}
2 L i tìm ki m nh phân: ỗi ở tìm kiếm tuần tự: ở tìm kiếm tuần tự: ếm tuần tự: ị phân:
void SearchBinary(Array a)
{
float key;
printf ("\nNhap gia tri can tim theo kieu nhi phan trong mang :");
key = InPutf();
int left = 0, right, e = 0,d= 0, i,j,k=0, mid, cs1[a.count],cs2[a.count];
right = a.count - 1;
do{
mid = (left + right)/2 ;
if(key == a.array[mid])
{
e++;
cs1[e] = mid;
}
if (key < a.array [mid]) right = mid - 1 ;
else left = mid + 1 ;
}while(left <= right);
left = 1;
right = cs1[1]-1;
do{
mid = (left + right)/2 ;
if(key == a.array [mid])
{
d++;
cs2[d] = mid;
}
if (key <= a.array [mid]) right = mid - 1 ;
else left = mid + 1 ;
}while(left <= right);
if (e == 0) printf("\n khong co phan tu %7.3f tim theo giai thuat binarySearch ", key); else{
printf("\n Chi so cua phan tu co gia tri %7.3f tim theo giai thuat binarySearch trang mang da sap xep la: ", key);
if (cs1[1] == cs2[1]) printf(" %3d ", cs1[1]);
Trang 13else{
for (i = 1; i <= d; i++){
printf(" %3d ",cs2[i]);
} for (i = 1; i <= e; i++){
printf("%3d", cs1[i]);
} }
}
}
3 L i tính th i gian: ỗi ở tìm kiếm tuần tự: ở tìm kiếm tuần tự: ời gian:
Gán thời gian kêt thúc sau mỗi chức năng thục hiện
Trang 14Tà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