Bài giảng Kiểm tra phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng
Đối tượng ₫ược kiểm thử là 1 thành phần phần mềm (TPPM).
TPPM có thể là 1 hàm chức năng, 1 module chức năng, 1 phân hệ
chức năng…
Kiểm thử hộp trắng dựa vào thuật giải cụ thể, vào cấu trúc dữ
liệu bên trong của ₫ơn vị phần mềm cần kiểm thử ₫ể xác ₫ịnh ₫ơn
vị phần mềm ₫ó có thực hiện ₫úng không.
Do ₫ó người kiểm thử hộp trắng phải có kỹ năng, kiến thức
nhất ₫ịnh về ngôn ngữ lập trình ₫ược dùng, về thuật giải ₫ược
dùng trong TPPM ₫ể có thể thông hiểu chi tiết về ₫oạn code cần
kiểm thử
TPPM có thể là 1 hàm chức năng, 1 module chức năng, 1 phân hệ
chức năng…
Kiểm thử hộp trắng dựa vào thuật giải cụ thể, vào cấu trúc dữ
liệu bên trong của ₫ơn vị phần mềm cần kiểm thử ₫ể xác ₫ịnh ₫ơn
vị phần mềm ₫ó có thực hiện ₫úng không.
Do ₫ó người kiểm thử hộp trắng phải có kỹ năng, kiến thức
nhất ₫ịnh về ngôn ngữ lập trình ₫ược dùng, về thuật giải ₫ược
dùng trong TPPM ₫ể có thể thông hiểu chi tiết về ₫oạn code cần
kiểm thử
Bạn đang xem tài liệu "Bài giảng Kiểm tra phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- bai_giang_kiem_tra_phan_mem_chuong_3_ky_thuat_kiem_thu_hop_t.pdf
Nội dung text: Bài giảng Kiểm tra phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng
- 3.2 Một số thuật ngữ về kiểm thử luồng ₫iều khiển Đường thi hành (Execution path) : là 1 kịch bản thi hành ₫ơn vị phần mềm tương ứng, cụ thể nó là danh sách có thứ tự các lệnh ₫ược thi hành ứng với 1 lần chạy cụ thể của ₫ơn vị phần mềm, bắt ₫ầu từ ₫iểm nhập của ₫ơn vị phần mềm ₫ến ₫iểm kết thúc của ₫ơn vị phần mềm. Mỗi TPPM có từ 1 ₫ến n (có thể rất lớn) ₫ường thi hành khác nhau. Mục tiêu của phương pháp kiểm thử luồng ₫iều khiển là ₫ảm bảo mọi ₫ường thi hành của ₫ơn vị phần mềm cần kiểm thử ₫ều chạy ₫úng. Rất tiếc trong thực tế, công sức và thời gian ₫ể ₫ạt mục tiêu trên ₫ây là rất lớn, ngay cả trên những ₫ơn vị phần mềm nhỏ. Thí dụ ₫oạn code sau : for (i=1; i 0) doIsGreater(); if (a==0) dolsEqual(); // thiếu việc xử lý trường hợp a < 0 - if (a<0) dolsLess();
- Với hàm foo trên, ta chỉ cần 2 test case sau ₫ây là ₫ạt 100% phủ cấp 1 : 1. foo(0,0,0,0), trả về 0 2. foo(1,1,1,1), trả về 1 nhưng không phát hiện lỗi chia 0 ở hàng lệnh 8. Phủ cấp 2 : kiểm thử sao cho mỗi ₫iểm quyết ₫ịnh luận lý ₫ều ₫ược thực hiện ít nhất 1 lần cho trường hợp TRUE lẫn FALSE. Ta gọi mức kiểm thử này là phủ các nhánh (Branch coverage). Phủ các nhánh ₫ảm bảo phủ các lệnh. Line Predicate True False 3 (a == 0) Test Case 1 Test Case 2 foo(0, 0, 0, 0) foo(1, 1, 1, 1) return 0 return 1 6 ((a==b) OR ((c == d) Test Case 2 Test Case 3 AND bug(a) )) foo(1, 1, 1, 1) foo(1, 2, 1, 2) return 1 division by zero! Với 2 test case xác ₫ịnh trong slide trước, ta chỉ ₫ạt ₫ược 3/4 = 75% phủ các nhánh. Nếu thêm test case 3 : 3. foo(1,2,1,2), thì mới ₫ạt 100% phủ các nhánh. Phủ cấp 3 : kiểm thử sao cho mỗi ₫iều kiện luận lý con (subcondition) của từng ₫iểm quyết ₫ịnh ₫ều ₫ược thực hiện ít nhất 1 lần cho trường hợp TRUE lẫn FALSE. Ta gọi mức kiểm thử này là phủ các ₫iều kiện con (subcondition coverage). Phủ các ₫iều kiện con chưa chắc ₫ảm bảo phủ các nhánh & ngược lại. Predicate True False a ==0 TC 1 : foo(0, 0, 0, 0) TC 2 : foo(1, 1, 1, 1) return 0 return 1 (a==b) TC 2 : foo(1, 1, 1, 1) TC 3 : foo(1, 2, 1, 2) return value 0 division by zero! (c==d) TC 4 : foo(1, 2, 1, 1) TC 3 : foo(1, 2, 1, 2) Return 1 division by zero!
- tuần tự If switch while c do do while c Thí dụ : s1 1. float foo(int a, int b, int c, int d) { 2. float e; 3. if (a==0) c1 4. return 0; s2 5. int x = 0; 6. if ((a==b) || ((c==d) && bug(a))) s3 7. x = 1; 8. e = 1/x; c2 9. return e; 10. } s4 s5 Nếu ₫ồ thị dòng ₫iều khiển chỉ chứa các nút quyết ₫ịnh nhị phân thì ta gọi nó là ₫ồ thị dòng ₫iều khiển nhị phân.
- 3.5 Đồ thị dòng ₫iều khiển cơ bản Xét ₫ồ thị dòng ₫iều khiển nhị phân : nếu từng nút quyết ₫ịnh (nhị phân) ₫ều miêu tả 1 ₫iều kiện con luận lý thì ta nói ₫ồ thị này là ₫ồ thi dòng ₫iểu khiển cơ bản. Ta luôn có thể chi tiết hóa 1 ₫ồ thị dòng ₫iều khiển bất kỳ thành ₫ồ thị dòng ₫iều khiển nhị phân. Tương tự, ta luôn có thể chi tiết hóa 1 ₫ồ thị dòng ₫iều khiển nhị phân bất kỳ thành ₫ồ thị dòng ₫iều khiển cơ bản. Tóm lại, ta luôn có thể chi tiết hóa 1 ₫ồ thị dòng ₫iều khiển bất kỳ thành ₫ồ thị dòng ₫iều khiển cơ bản. Độ phức tạp Cyclomatic C của ₫ồ thị dòng ₫iều khiển cơ bản chính là số ₫ường thi hành tuyến tính ₫ộc lập cơ bản của TPPM cần kiểm thử. Nếu chúng ta chọn lựa ₫ược ₫úng C ₫ường thi hành tuyến tính ₫ộc lập cơ bản của TPPM cần kiểm thử và kiểm thử tất cả các ₫ường thi hành này thì sẽ ₫ạt ₫ược phủ kiểm thử cấp 4 như ₫ã trình bày trong các slide trước. 3.6 Qui trình kiểm thử hộp trắng Tom McCabe ₫ề nghị qui trình kiểm thử TPPM gồm các bước công việc sau : 1. Từ TPPM cần kiểm thử, xây dựng ₫ồ thị dòng ₫iều khiển tương ứng, rồi chuyển thành ₫ồ thị dòng ₫iều khiển nhị phân, rồi chuyển thành ₫ồ thị dòng ₫iều khiển cơ bản. 2. Tính ₫ộ phức tạp Cyclomatic của ₫ồ thị (C = P +1). 3. Xác ₫ịnh C ₫ường thi hành tuyến tính ₫ộc lập cơ bản cần kiểm thử (theo thuật giải chi tiết ở slide kế). 4. Tạo từng test case cho từng ₫ường thi hành tuyến tính ₫ộc lập cơ bản. 5. Thực hiện kiểm thử trên từng test case.
- 3.7 Thí dụ double average(double value[], double min, double max, int& tcnt, int& vcnt) { 1 double sum = 0; 1 int i = 1; 2 tcnt = vcnt = 0; 2 3 while (value[i] 0) return sum/vcnt; 8 return -999; 1 9 } Đồ thị bên có 5 nút quyết ₫ịnh nhị phân nên có ₫ộ phức tạp C = 5+1 = 6. 6 ₫ường thi hành tuyến tính ₫ộc lập cơ bản là : 1. 1→2→10→11 2. 1→2→3→10→11 3. 1→2→3→4→5→8→9 4. 1→2→3→4→5→6→8→9 5. 1→2→3→4→5→6→7→8→9 6. 1→2→10→12 Thiết kế các test case Phân tích mã nguồn của hàm average, ta ₫ịnh nghĩa 6 testcase kết hợp với 6 ₫ường thi hành tuyến tính ₫ộc lập cơ bản như sau : Test case cho ₫ường 1 : value(k) <>-999, với 1< k < i value(i) = -999 với 2 ≤ i ≤ 100 Kết quả kỳ vọng : (1) average=Giá trị trung bình của i-1 giá trị hợp lệ. (2) tcnt = i-1. (3) vcnt = i-1
- 3. lệnh lặp liền kề : 2 hay nhiều lệnh lặp kế tiếp nhau 4. lệnh lặp giao nhau : 2 hay nhiều lệnh lặp giao nhau. 1. Kiểm thử loại vòng lặp n lần ₫ơn giản : while c do do while c Nên chọn các test case ₫ể kiểm thử thân lệnh lặp ở các vị trí sau : chạy 0 bước. chạy 1 bước. chạy 2 bước. chạy k bước, k là giá trị nào ₫ó thỏa 2 < k < n-1. chạy n-1 bước chạy n bước chạy n+1 bước. 2. Kiểm thử vòng lặp lồng nhau :
- của TPPM, ₫ộ phức tạp Cyclomatic C, qui trình tổng quát ₫ể kiểm thử dòng ₫iều khiển. Chương này cũng ₫ã giới thiệu 1 thí dụ cụ thể về qui trình kiểm thử dòng ₫iều khiển trên 1 TPPM.