uit coverage testing

29
1 Khoa Công nghệ phần mềm Trường ĐH Công Nghệ Thông Tin Tp. HCM

Upload: phan-the-duy

Post on 27-Nov-2014

116 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: UIT Coverage Testing

1

Khoa Công nghệ phần mềmTrường ĐH Công Nghệ Thông Tin Tp. HCM

Page 2: UIT Coverage Testing

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

Page 3: UIT Coverage Testing

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

Page 4: UIT Coverage Testing

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

Page 5: UIT Coverage Testing

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

Page 6: UIT Coverage Testing

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

Page 7: UIT Coverage Testing

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

Page 8: UIT Coverage Testing

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

Page 9: UIT Coverage Testing

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

Page 10: UIT Coverage Testing

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

Page 11: UIT Coverage Testing

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

Page 12: UIT Coverage Testing

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

Page 13: UIT Coverage Testing

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

Page 14: UIT Coverage Testing

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

Page 15: UIT Coverage Testing

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

Page 16: UIT Coverage Testing

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

Page 17: UIT Coverage Testing

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

Page 18: UIT Coverage Testing

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á:

Page 19: UIT Coverage Testing

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

Page 20: UIT Coverage Testing

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

Page 21: UIT Coverage Testing

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

Page 22: UIT Coverage Testing

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)

Page 23: UIT Coverage Testing

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

Page 24: UIT Coverage Testing

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

Page 25: UIT Coverage Testing

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

Page 26: UIT Coverage Testing

Đá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

Page 27: UIT Coverage Testing

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

Page 28: UIT Coverage Testing

Q& A

Khoa CNPM Trường ĐH Công Nghệ Thông Tin Tp. HCM 28

Page 29: UIT Coverage Testing

www.uit.edu.vn

29Khoa CNPM

Trường ĐH Công Nghệ Thông Tin Tp. HCM