Tải bản đầy đủ (.doc) (14 trang)

BÀI TẬP NHÓM MÔN HỌC KỸ THUẬT LẬP TRÌNH Tạo một ADT có tên Array.h và viết một chương trình CheckArray.c để kiểm tra

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (751.9 KB, 14 trang )

Trườ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
1

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
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ử 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
2
I. 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ố.
• Dữ liệu kiểm thử:
count = e.
• Yêu cầu: Cho phép nhâp lại
• Kết quả:
• Chương trình chạy đúng yêu cầu
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.
• Dữ liệu kiểm thử:
count = 3.5.
• Yêu cầu:
Lấy phần nguyên của số vừa nhập
• Kết quả:
 Chương trình chạy đúng yêu cầu.
3
c. 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ố.

• Dữ liệu kiểm thử:
count = 7;
max = {e;2.4;6;7.23;9;12.6;*);
• Yêu cầu: kí tự sẽ được coi là nhập vào số 0.
• Kết quả:
 Chương tình chạy đúng với yêu cầu.
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.
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}.Yêu cầu:
• 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 PrintArray(Array a)
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}.
• 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ử thủ tục void BubleSort(Array &a)
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}.
• Yêu cầu:trả về mảng mang1.max được sắp xếp tăng dần
5
{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.
4. Kiểm thử hàm thủ tục InsertSort(Array &a).
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}.
• Yêu cầu: trả về mảng mang1.max được sắp xếp tăng dần
mang1.max = {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ử thủ tục void InsertSort(Array &a).
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}.
• Yêu cầu: trả về mảng mang1.max được sắp xếp tăng dần
{2;5; 13.32;13.32;16.66;123}.
• Kết quả:
 Chương trình chạy đúng theo yêu cầu.
6. Kiểm thử hàm float Max(Array a).
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}.
• 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ứ 4.
• Kết quả:
6
 Chương trình chạy đúng yêu cầu.
7. Kiểm thử hàm float Min(Array a).
• Dữ liệu kiểm thử:
count = 6.

array = {16.66;13.32;32,123;2;5}.
• 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ứ 5.
• Kết quả:
 Chương trình chạy đúng yêu cầu.
8. Kiểm thử hàm void Average(Array a).
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}.
• Yêu cầu: Trả về giá trị tb của các phần tử trong mảng: avg = 31.9967
• Kết quả:
 Chương trình chạy đúng theo yêu càu.
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:
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}
i=10; j = 14.
• Yêu cầu: thông báo nhập lỗi.
• Kết quả:
7
 Chương trình chạy đúng theo yêu cầu
b. Có cả hai phần tử i và j:
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}
i = 3, j =6.
• Yêu cầu: trả về giá trị độ lệch giữa hai phần tử 27
• Kết quả:
 Chương trình chạy đúng yêu cầu.

10.Kiểm thử thủ tục void Averagedeviation(Array a).
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}
• 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ử hàm int Search(Array a).
a. Trường hợp thử 1: không có phần tử có giá trị là x.
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5}
x = 35.5.
8
• 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ử:
count = 6.
array = {16.66;13.32;32,123;2;5}
x = 16.66.
• Yêu cầu:
In ra đúng vị trí của phần tử có giá trị x =16.66 là 1.
• 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ử:

count = 6.
array = {16.66;13.32;32,123;2;5;13.32}
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 không đúng với yêu cầu.
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.
• Dữ liệu kiểm thử:
count = 6.
array = {16.66;13.32;32,123;2;5;13.32}
9
x = 35.5.
• Yêu cầu:
In ra màn hình 0 (k0 thấy phần tử).
• 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ử:
count = 6.
array = {16.66;13.32;32,123;2;5;13.32}
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 không đú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ử:

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.
• 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à 3 và 4.
• Kết quả:
10
 Chương trình chạy đúng với yêu cầu.
13.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:
 Chương trình chạy saivới yêu cầu.
14.Tổng kết các lỗi:
• Ở chức năng tìm kiếm tuần tự : khi có nhiều hơn 2 phần tử thì chương
trình đưa ra kết quả sai, chỉ đưa ra được 1 giá tri.
• Ở chức năng tìm kiếm nhị phân: khi có phần tử thì chương trình chạy sai:
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
• Ngoài ra, trong cấu trúc chương trình, đặt tên như là filed array trong kiểu
dữ liệu Array khiến người đọc rối mắt,
II. Sửa lỗi, gỡ rối
1. Lỗi ở tìm kiếm tuầ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++;
}
11
}
/* 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:
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);
12
if (cs1[1] == cs2[1]) printf(" %3d ", cs1[1]);
else{
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:
Gán thời gian kêt thúc sau mỗi chức năng thục hiện
13
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
14

×