Download - UIT Coverage Testing
1
Khoa Công nghệ phần mềmTrường ĐH Công Nghệ Thông Tin Tp. HCM
Coverage Testing:Bao phủ câu lệnh trong
Kiểm thử hộp trắng
Nhóm thực hiện:
Phan Thế Duy- 08520068Trần Hoàng Minh- 08520231
Lê Văn Quang- 08520302
Kiểm thử phần mềm
2Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
Nội dung
Tổng quát kiểm thử hộp trắng1
Phủ kiểm thử2
Bao phủ câu lệnh& phủ mở rộng3
Đánh giá4
3Khoa CNPMTrường ĐH Công Nghệ Thông Tin Tp. HCM
Tổng quát kiểm thử hộp trắ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 để có thể thông hiểu chi tiết về đoạn code cần kiểm thử.
4Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
Tổng quát kiểm thử hộp trắng Thường tốn rất nhiều thời gian và công sức
nếu mức độ kiểm thử được nâng lên ở cấp kiểm thử tích hợp hay kiểm thử hệ thống.
Do đó kỹ thuật này chủ yếu được dùng để kiểm thử đơn vị. Trong lập trình hướng đối tượng, kiểm thử đơn vị là kiểm thử từng tác vụ của 1 class chức năng nào đó.
Có 2 hoạt động kiểm thử hộp trắng : Kiểm thử luồng điều khiển(control flow) hay
còn gọi là phủ kiểm thử(coverage Testing) Kiểm thử dòng dữ liệu(data flow).
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 5
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 : 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ụ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ỏ.
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 6
Thí dụ đoạn code sau :
for (i=1; i<=1000; i++)
for (j=1; j<=1000; j++)
for (k=1; k<=1000; k++)
doSomethingWith(i,j,k);
có 1 đường thi hành dài 1000*1000*1000 = 1 tỉ lệnh gọi doSomethingWith(i,j,k) khác nhau.
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 7
Thí dụ đoạn code gồm 32 lệnh if else sau :
• if (c1) s11 else s12;
• if (c2) s21 else s22;
• if (c3) s31 else s32;
• ...
• if (c32) s321 else s322;
có 2^32 = 4 tỉ đường thi hành khác nhau.
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 8
Do đó, ta nên kiểm thử số test case tối thiểu mà kết quả độ tin cậy tối đa. Nhưng làm sao xác định được số test case tối thiểu nào có thể đem lại kết quả có độ tin cậy tối đa ?
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 9
Nội dung
Tổng quát kiểm thử hộp trắng1
Phủ kiểm thử2
Bao phủ câu lệnh& phủ mở rộng3
Đánh giá4
10Khoa CNPMTrường ĐH Công Nghệ Thông Tin Tp. HCM
Phủ kiểm thử( Coverage Testing)
Phủ kiểm thử (Coverage) : là tỉ lệ các thành phần thực sự được kiểm thử so với tổng thể sau khi đã kiểm thử các test case được chọn. Phủ càng lớn thì độ tin cậy càng cao.
Độ phủ: là tỉ lệ phần trăm code chương trình được kiểm tra
Thành phần liên quan có thể là lệnh, điểm quyết định, điều kiện con, đường thi hành hay là sự kết hợp của chúng.
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 11
Các dạng phủ kiểm thử
Bao gồm các loại cơ bản sau: Bao phủ phương thức(Method Coverage): phủ cấp 0 Bao phủ câu lệnh(Statement Coverage): phủ cấp 1 Bao phủ nhánh(Branch Coverage): phủ cấp 2 Bao phủ điều kiện(Condition Coverage): ơhur cấp 3 Bao phủ nhánh & điều kiện(branch&condition
Coverage): phủ cấp 4
Ngoài ra người ta còn qui ước:Phủ cấp 0: kiểm thử những gì có thể kiểm thử được,
phần còn lại để người dùng phát hiện và báo lại sau. Đây là mức độ kiểm thử không thực sự có trách nhiệm.
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
12
Nội dung
Tổng quát kiểm thử hộp trắng1
Phủ kiểm thử2
Bao phủ câu lệnh& phủ mở rộng3
Đánh giá4
13Khoa CNPMTrường ĐH Công Nghệ Thông Tin Tp. HCM
Coverage Testing
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
14
1 float foo(int a, int b, int c, int d, float e) {
2 float e;
3 if (a==0) {
4 return 0;
5 }
6 int x = 0;
7 if ((a==b) || ((c==d) && bug(a))){
8 x = 1;
9 }
10 e = 1/x;
11 return e;
12 }
Trong đó: bug(a) là hàm If a > 1 return FALSEElse return TRUE
Bao phủ phương thức(Method Coverage)
• Là phương pháp kiểm thử sao cho mỗi phương thức được thực hiện ít nhất 1 lần.
• Test Case 1: foo(0, 0, 0, 0, 0.), expected return value of 0.
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 15
Bao phủ câu lệnh(Statement Coverage)
• Là phương pháp kiểm thử sao cho mỗi lệnh được thực thi ít nhất 1 lần.
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 16
Bao phủ câu lệnh(Statement Coverage)
Ở TestCase 1, dòng lệnh từ 1-5 được thực thi=> 42% (5/12) phủ câu lệnh.
Thêm TestCase 2: gọi phương thức foo(1, 1, 1, 1,1), giá trị mong đợi trả về là 1 => 100% phủ câu lệnh.
• Tóm lại,với hàm foo đã đề cập, ta chỉ cần 2 test case sau đây là đạt 100% phủ câu lệnh : TestCase 1: foo(0,0,0,0,0), trả về 0 TestCase 2: foo(1,1,1,1,1), trả về 1
nhưng không phát hiện lỗi chia 0 ở hàng lệnh 10
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
17
Bao phủ câu lệnh(Statement Coverage)
• Phương pháp bao phủ câu lệnh thường khá yếu trong việc tìm ra các lỗi trong chương trình
• Vì vậy phương pháp này chỉ sử dụng trong một số trường hợp kiểm thử ở mức đơn vị, kết hợp với các phương pháp kiểm thử khác.
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 18
• Đánh giá:
Bao phủ nhánh(Branch Coverage)
• Là phương pháp kiểm thử sao cho mỗi đ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 nhánh (Branch coverage). Phủ các nhánh đảm bảo phủ các lệnh.
• Với TestCase1 và TestCase2 chỉ mới bao phủ được 75% nhánh
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
19
Line Predicate True False
3 (a == 0) Test Case 1foo(0, 0, 0, 0, 0)return 0
Test Case 2foo(1, 1, 1, 1, 1)return 1
7 ((a==b) OR ((c == d) AND bug(a) ))
Test Case 2foo(1, 1, 1, 1, 1)return 1
Bao phủ nhánh(Branch Coverage)
• Thêm vào TestCase3 để phủ hoàn toàn 100%:
• Với TestCase 3, ta phát hiện ra được lỗi chia cho 0 ở dòng lệnh 10 mà trước đó không phát hiện được
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 20
Line Predicate True False
3 (a == 0) Test Case 1foo(0, 0, 0, 0, 0)return 0
Test Case 2foo(1, 1, 1, 1, 1)return 1
7 ((a==b) OR ((c == d) AND bug(a) ))
Test Case 2foo(1, 1, 1, 1, 1)return 1
TestCase 3Foo(1,2,1,2,1) return 1
Bao phủ điều kiện(Condition Coverage)
• Là phương pháp 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.
• Không có tiêu chuẩn bao phủ điều kiện(không yêu cầu bao phủ 100%)
• Xét điều kiện dòng 7 if ((a==b) OR ((c == d) AND bug(a) )) {
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 21
Bao phủ điều kiện(Condition Coverage)
• Điều kiện bao phủ được: 50%
(c==d) -> TRUE: không bao giờ được kiểm tra short-circuit Boolean has prevented the method
bug(int) from ever being executedKhoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
22
Predicate True False
a ==0 Test Case 1foo(0, 0, 0, 0)return 0
Test Case 2foo(1, 1, 1, 1)return 1
(a==b) Test Case 2foo(1, 1, 1, 1)return value 0
Test Case 3foo(1, 2, 1, 2)division by zero!
(c==d) Test Case 3foo(1, 2, 1, 2)division by zero!
bug(a)
Bao phủ điều kiện(Condition Coverage)
23
Predicate True False
(a==b) Test Case 2foo(1, 1, x, x, 1)return value 0
Test Case 3foo(1, 2, 1, 2, 1)division by zero!
(c==d) Test Case 4foo(1, 2, 1, 1, 1)return value 1
Test Case 3foo(1, 2, 1, 2, 1)division by zero!
bug(a) Test Case 4foo(1, 2, 1, 1, 1)return value 1
Test Case 5foo(3, 2, 1, 1, 1)division by zero!
bug(a) If a > 1 return FALSEElse return TRUE
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
Bao phủ nhánh & điều kiện(branch&condition
Coverage)
• Là phương pháp 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 & điểm quyết định cũng được kiểm thử cho cả 2 nhánh. Ta gọi mức kiểm thử này là phủ các nhánh & điều kiện con (branch & subcondition coverage).
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 24
Nội dung
Tổng quát kiểm thử hộp trắng1
Phủ kiểm thử2
Bao phủ câu lệnh& phủ mở rộng3
Đánh giá4
25Khoa CNPMTrường ĐH Công Nghệ Thông Tin Tp. HCM
Đánh giá
Tóm lại: Kiểm thử luồng điều khiển(control flow) hay
còn gọi là phủ kiểm thử(coverage testing) là một trong 2 phương pháp kiểm thử hộp trắng, kiểm thử dựa trên cấu trúc module code của chương trình.
Kiểm thử số test case tối thiểu với độ tin cậy tối đa khi độ phủ(coverage) càng cao.
Phương pháp bao phủ câu lệnh(Statement Coverage) thường khá yếu trong việc tìm ra các lỗi trong chương trình. Vì vậy cần kết hợp với các kĩ thuật khác khi kiểm thử.
26Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
Tham khảo• Beizer, Boris (1990). Software Testing
Techniques (Second Edition). Van Nostrand Reinhold.
• Myers, Glenford (1979). The Art of Software Testing. John Wiley & Sons.
• Pressman, Roger S. (1982). Software Engineering: A Practitioner's Approach (Fourth Edition). McGraw-Hill.
• Watson, Arthur H. and Thomas J. McCabe. Structured Testing: A Testing Methodology Using the Cyclomatic Complexity Metric. NIST Special Publication 500-235 available at http://www.mccabe.com/nist/nist_pub.php
27Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM
Q& A
Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 28
www.uit.edu.vn
29Khoa CNPM
Trường ĐH Công Nghệ Thông Tin Tp. HCM