76
Kim thphn mm TS. Nguyn Thanh Hùng BMôn Công NghPhn Mm Email: [email protected] Website: http://soict.hust.edu.vn/~hungnt Kim thhp trng Trường Đại Hc Bách Khoa Hà Ni Vin Công NghThông Tin &Truyn Thông

C3. Kiem Thu Hop Trang

Embed Size (px)

DESCRIPTION

kiểm thử phần mềm

Citation preview

Page 1: C3. Kiem Thu Hop Trang

Kiểm thử phần mềm

TS. Nguyễn Thanh Hùng Bộ Môn Công Nghệ Phần Mềm

Email: [email protected] Website: http://soict.hust.edu.vn/~hungnt

Kiểm thử hộp trắng

Trường Đại Học Bách Khoa Hà Nội Viện Công Nghệ Thông Tin &Truyền Thông

Page 2: C3. Kiem Thu Hop Trang

Nội dung

v  Giới thiệu về kiểm thử hộp trắng v  Các kỹ thuật kiểm thử hộp trắng:

§ Kiểm thử đường dẫn cơ sở § Kiểm thử điều kiện/kiểm thử nhánh § Kiểm thử vòng lặp § Kiểm thử luồng điều khiển

Page 3: C3. Kiem Thu Hop Trang

Nhắc lại: Kiểm thử hộp đen

v Kiểm thử hộp đen là kiểm thử bỏ qua cấu trúc bên trong, chỉ quan tâm tới Output từ Input cho trước có chính xác không.

v Phân loại: §  Kiểm thử biên §  Kiểm thử lớp tương tương §  Bảng quyết định §  Kiểm thử đoán lỗi

Page 4: C3. Kiem Thu Hop Trang

Kiểm thử hộp trắng

v Khái niệm kiểm thử hộp trắng § Đối tượng: mã nguồn § Mức: các mođun đơn vị § Nội dung là kiểm thử:

•  các chi tiết thủ tục (thuật toán) •  con đường logic (luồng điều khiển) •  các trạng thái của chương trình (dữ liệu).

4

Page 5: C3. Kiem Thu Hop Trang

Nội dung cần kiểm thử hộp trắng

v Kiểm thư cái gi? § mọi lệnh (đầy đu ) § mọi điều kiện lôgic có thê (rẽ nhánh) § mọi chu trình trong chương trình (lặp lại) § mọi cấu trúc dư liệu được dùng (dư liệu) § mọi tiến trình tư đầu -> kết thúc (từng luồng điều khiển)

Câu hỏi: Yêu cầu? Lý do? Các ky thuật dùng va nội dung của nó? Chiến lược sư dụng?

5

Page 6: C3. Kiem Thu Hop Trang

Kiểm thử hộp trắng

v Vấn đê, trơ ngai: Sô con đường lôgíc là rất lớn §  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. §  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.

6

Page 7: C3. Kiem Thu Hop Trang

Kiểm thử hộp trắng

Kiểm thử hộp trắng cũng không phủ được hết trường hợp if (a>0) doIsGreater(); if (a==0) dolsEqual(); // thiếu việc xử lý trường hợp a < 0 - if (a<0) dolsLess(); int phanso (int a, int b) { return a/b; } khi kiểm tra, ta chọn b <> 0 thì chạy ₫úng, nhưng khi dùng thật trong trường hợp b = 0 thì hàm phanso bị lỗi.

7

Page 8: C3. Kiem Thu Hop Trang

Phủ kiểm thử

v 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?

v 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.

v 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.

8

Page 9: C3. Kiem Thu Hop Trang

Phủ cấp 0 & 1

v 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.

v Phủ cấp 1 : kiểm thử sao cho mỗi lệnh được thực thi ít nhất 1 lần.

9

Với hàm foo bên cạnh, 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

1 float foo(int a, int b, int c, int d) { 2 float e; 3 if (a==0) 4 return 0; 5 int x = 0; 6 if ((a==b) || ((c==d) && bug(a))) 7 x = 1; 8 e = 1/x; 9 return e; 10 }

Page 10: C3. Kiem Thu Hop Trang

Phủ cấp 2

Phủ cấp 2 : 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.

10

Phủ cấp 2

Chương 4 : Kiểm thử hộp trắng – White Box

� Phủ cấp 2 : 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.Line Predicate True False3 (a == 0) Test Case 1

foo(0, 0, 0, 0)return 0

Test Case 2foo(1, 1, 1, 1)return 1

6 ((a==b) OR ((c == d) AND bug(a) ))

Test Case 2foo(1, 1, 1, 1)return 1

Test Case 3foo(1, 2, 1, 2)return 1

Với 2 test case xác định trong slide trước, ta chỉ đạt được 3/4 x 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.

Với 2 test case xác định trong slide trước, ta chỉ đạt được 3/4 x 75% phu các nhánh. Nếu thêm test case 3 : 3. foo(1,2,1,2), thi mới đạt 100% phu các nhánh.

Page 11: C3. Kiem Thu Hop Trang

Phủ cấp 3

v  Phủ cấp 3 : kiểm thử sao cho mỗi điều kiện 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.

11

Phủ cấp 3

Chương 4 : Kiểm thử hộp trắng – White Box

� 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.Predicate True Falsea ==0 Test Case 1

foo(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 12: C3. Kiem Thu Hop Trang

Phủ cấp 4

v Phủ cấp 4 : kiểm thử sao cho mỗi điều kiện 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).

12

Page 13: C3. Kiem Thu Hop Trang

Yêu cầu kiểm thư hộp trắng

v Yêu cầu đặt ra: § Mọi con đường độc lập trong một môđun

cần được thực hiện ít nhất một lần. § Mọi ràng buộc logic được thực hiện cả

hai phía đúng (true) & phía sai (false). §  Tất cả các vòng lặp ở biên của nó & cả

các biên vận hành phải được thực hiên. § Mọi cấu trúc dữ liệu nội tại được dùng để bảo đảm hiệu lực thi hành của nó

13

Page 14: C3. Kiem Thu Hop Trang

Lý do kiểm thư hộp trắng

v Vì sao cần kiểm thử hộp trắng? § Các sai logic & giả thiết không đúng tỷ lệ

nghịch với xác suất để một con đường logic được thi hành.

§  Thực tế: mọi con đường lôgic đều có thể được thi hành trên 1 cơ sở/điều kiện nhất định

§ Có những lỗi ngẫu nhiên trên đường ta không kiểm tra.

14

Page 15: C3. Kiem Thu Hop Trang

Kiểm thử hộp trắng

v Là kỹ thuật kiểm thử xâm nhập vào nội bộ, cấu trúc bên trong của chương trình

v Các kỹ thuật kiểm thử hộp trắng phổ biến: §  Kiểm thử đường dẫn cơ sở §  Kiểm thử rẽ nhánh §  Kiểm thử vòng lặp §  Kiểm tra luồng điều khiển

Page 16: C3. Kiem Thu Hop Trang

Lưu ý

v Không thể có được tất cả các test case mong muốn bằng việc áp dụng 1 kỹ thuật kiểm thử duy nhất.

v Trước khi áp dụng các kỹ thuật kiểm thử hộp trắng, hãy xem lại code.

Page 17: C3. Kiem Thu Hop Trang

Nội dung

v  Giới thiệu về kiểm thử hộp trắng v  Các kỹ thuật kiểm thử hộp trắng:

§ Kiểm thử đường dẫn cơ sở § Kiểm thử điều kiện/kiểm thử nhánh § Kiểm thử vòng lặp § Kiểm thử luồng điều khiển

Page 18: C3. Kiem Thu Hop Trang

Kiểm thử đường cơ sở (Basis Path)

v Định nghĩa: Thu được các trường hợp thử nghiệm từ đường cơ sở, được xác định theo biểu đồ dòng chảy của chương trình

v Các bước: §  1. Xây dựng một đồ thị dòng chảy dựa trên logic của

chương trình §  2. Tính toán độ phức tạp Cyclomatic của đồ thì dòng chảy §  3. Xác định đường cơ sở. §  4. Kiểm tra nếu số đường cơ sở không nhiều hơn độ phức

tạp Cyclomatic. §  5. Thiết kế trường hợp thử nghiệm để kiểm tra các đường

cơ sở

Page 19: C3. Kiem Thu Hop Trang

Ky thuật đô thi dòng

v Khái niệm về đồ thị dòng §  Là một kỹ thuật dựa trên cấu trúc điều khiển

của chương trình. § Gần giống đồ thị luồng điều khiển của

chương trình. § Nhận được từ đồ thị luồng điều khiển bằng

cách: •  gộp các lệnh tuần tự •  thay lệnh rẽ nhánh và điểm kết thúc của các đường điều khiển bằng 1 nút vị tự

19

Page 20: C3. Kiem Thu Hop Trang

Cấu trúc đô thi dòng

v Cấu trúc gồm: § mỗi nút (hình tròn) biểu thị một hay một số

lệnh tuần tự, hoặc thay cho điểm hội tụ các đường điều khiển.

§ mỗi cạnh nối hai nút biểu diễn dòng điều khiển,

v Kết quả đồ thi dòng: § Chia mặt phẳng thành nhiều miền. § Có nút vị từ biểu thị sự phân nhánh hoặc hội

nhập của các cung.

20

Page 21: C3. Kiem Thu Hop Trang

Các kiểu cấu trúc thành phần đô thi dòng

v Các cấu trúc cơ bản của đồ thị dòng:

21

Đồ thị dòng điều khiển

Chương 4 : Kiểm thử hộp trắng – White Box

� Các thành phần cơ bản :

điểm xuất phát khối xử lý điểm quyết định điểm nối điểm kết thúc

� Miêu tả các cấu trúc điều khiển phổ dụng :

tuần tự If switch while c do... do ... while c

Đồ thị dòng điều khiển

Chương 4 : Kiểm thử hộp trắng – White Box

� Các thành phần cơ bản :

điểm xuất phát khối xử lý điểm quyết định điểm nối điểm kết thúc

� Miêu tả các cấu trúc điều khiển phổ dụng :

tuần tự If switch while c do... do ... while c

Đồ thị dòng điều khiển

Chương 4 : Kiểm thử hộp trắng – White Box

� Các thành phần cơ bản :

điểm xuất phát khối xử lý điểm quyết định điểm nối điểm kết thúc

� Miêu tả các cấu trúc điều khiển phổ dụng :

tuần tự If switch while c do... do ... while c

Đồ thị dòng điều khiển

Chương 4 : Kiểm thử hộp trắng – White Box

� Các thành phần cơ bản :

điểm xuất phát khối xử lý điểm quyết định điểm nối điểm kết thúc

� Miêu tả các cấu trúc điều khiển phổ dụng :

tuần tự If switch while c do... do ... while c

Các cấu trúc điều khiển

Page 22: C3. Kiem Thu Hop Trang

Ví dụ: cấu trúc điều khiển chương trình

22

2005 B môn CNFM – Ĉɞi hc Công nghʄ 26

Nguyn Văn Vͻ

� xét biӇu ÿӗ ÿiӅu khiӇn cӫa mӝt chѭѫng trình

f3. Ví dө: cҩu trúc ÿiӅu khiӇn chѭѫng trình

8

11

1

2

6

3

9

75

4

10

Xét biểu đồ điều khiển của một chương trình

Page 23: C3. Kiem Thu Hop Trang

Ví dụ: cấu trúc đô thi dòng

23

2005 B môn CNFM – Ĉɞi hc Công nghʄ 27

Nguyn Văn Vͻ

� luӗng ÿiӅu khiӇn

f4. Ví dө: cҩu trúc ÿӗ thӏ dòng

1

109

87

6

11

4,5

2,3

� ÿӗ thӏ dòng

8

11

1

2

6

3

9

75

4

10

Page 24: C3. Kiem Thu Hop Trang

Ví dụ: xác định các thông sô

v Đồ thị dòng trên gồm: §  9 nút, trongđó: §  5 nút là vị tự (mầuđỏ) §  11 cung § Chia mặt phẳng thành 4 miền

24

Page 25: C3. Kiem Thu Hop Trang

Ví dụ 2

25

Đồ thị dòng điều khiển

Chương 4 : Kiểm thử hộp trắng – White Box

� Thí dụ :

1 float foo(int a, int b, int c, int d) {2 float e;3 if (a==0) 4 return 0;5 int x = 0;6 if ((a==b) || ((c==d) && bug(a)))7 x = 1;8 e = 1/x;9 return e;10 }

s1

c1

s2

c2

s3

s4s5

Page 26: C3. Kiem Thu Hop Trang

Độ phức tạp của chu trình

v Để đảm bảo mọi câu lệnh đều được kiểm thử ít nhất một lần, cần tìm được tất cả các đường điều khiển độc lập trong chương trình (khác với các đường khác ít nhất một lệnh).

v Số các đường độc lập của 1 chương trình là giới hạn trên số các kiểm thử cần phải tiến hành. Nó được gọi là độ phức tạp chu trình của chương trình

v Các đường độc lập của 1 chương trình trùng với các đường độc lập của đồ thị dòng (tìm đơn giản hơn).

26

Page 27: C3. Kiem Thu Hop Trang

Tính toán độ phức tạp chu trình

v Độ phức tạp chu trình V(G) của đô thi G được tính theo các cách sau: §  V(G) = E - N + 2 (= 11-9+2 = 4) §  V(G) = sô miền phẳng (= 4) §  V(G) = P – 1 (= 5-1 =4) §  Trong đo : E=sô cung; N=sô nút; P=sô nút vị tư Với ví dụ vê đô thi dòng ơ trên ta co : V(G) = 4 Đọ phức tạp Cyclomatic C chính là sô đường thi hành tuyến tính độc lập co bản của thu tục cần kiểm thư.

27

Page 28: C3. Kiem Thu Hop Trang

Quy trình xác định các đường tuyến tính độc lập

Tom McCabe đê nghi qui trình xác định C đường tuyến tính độc lập gồm các bước : v  1. Xác định đường cơ bản, đường này nên là đường thi hành

phô biến nhất. v  2. Đê chọn đường thư 2, thay đổi cung xuất của nút quyết định đầu tiên va cô gắng giư lại maximum phần còn lại.

v  3. Đê chọn đường thư 3, dùng đường cơ bản nhưng thay đổi cung xuất của nút quyết định thư 2 va cô gắng giư lại maximum phần còn lại.

v  4. Tiếp tục thay đổi cung xuất cho từng nút quyết định trên đường cơ bản đê xác định đường thư 4, 5,... cho đến khi không còn nút quyết định nào trong đường cơ bản nữa.

v  5. Lặp dùng tuần tư các đường tìm được làm đường cơ bản đê xác định các đường mới xung quanh nó y như các bước 2, 3, 4 cho đến khi không tìm được đường tuyến tính độc lập nào nữa (khi đu sô C).

28

Page 29: C3. Kiem Thu Hop Trang

Xác định các ca kiểm thư

29

2005 B môn CNFM – Ĉɞi hc Công nghʄ 31

Nguyn Văn Vͻ

f8. Xác ÿӏnh các ca kiӇm thӱ

Tính ÿ phc Tɞp chu trình

Xác ÿʈnh tɪp ÿɉng cɇ bɠn

Chuɦn bʈ cácca kiʀm th

Yêu cɤu, mã ngun

Vɺÿthʈ dòng

Các ca kiʀm thvà ni dung

Page 30: C3. Kiem Thu Hop Trang

Ví dụ

30

Thí dụ

Chương 4 : Kiểm thử hộp trắng – White Box

double average(double value[], double min, double max, int& tcnt, int& vcnt) {

double sum = 0;int i = 1;tcnt = vcnt = 0; while (value[i] <> -999 && tcnt <100) {

tcnt++;if (min<=value[i] && value[i] <= max)

sum += value[i];vcnt ++;

}i++;

}if (vcnt > 0) return sum/vcnt;return -999;

}

1

2 3

4 5 6

7

8

9 10 11

12

1

2

3

4

5

6

78

9

10

11 12

Thí dụ

Chương 4 : Kiểm thử hộp trắng – White Box

double average(double value[], double min, double max, int& tcnt, int& vcnt) {

double sum = 0;int i = 1;tcnt = vcnt = 0; while (value[i] <> -999 && tcnt <100) {

tcnt++;if (min<=value[i] && value[i] <= max)

sum += value[i];vcnt ++;

}i++;

}if (vcnt > 0) return sum/vcnt;return -999;

}

1

2 3

4 5 6

7

8

9 10 11

12

1

2

3

4

5

6

78

9

10

11 12

Page 31: C3. Kiem Thu Hop Trang

Độ phức tạp Cyclomatic C

31

Độ phức tạp Cyclomatic C

Chương 4 : Kiểm thử hộp trắng – White Box

Đồ 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 là :

1. 1o2o10o112. 1o2o3o10o113. 1o2o10o124. 1o2o3o4o5o8o95. 1o2o3o4o5o6o8o96. 1o2o3o4o5o6o7o8o9

1

2

3

4

5

6

78

9

10

11 12

Đồ 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 là : 1. 1 è2è 10è 11 2. 1è2è 3è 10è 11 3. 1è2è 10è 12 4. 1è2è 3è 4è 5è 8è 9 5. 1è2è 3è 4è 5è 6è 8è 9 6. 1è2è 3è 4è 5è 6è 7è 8è 9

Page 32: C3. Kiem Thu Hop Trang

Thiết kế các test-cases

32

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 k giá trị hợp lệ. (2) tcnt = k. (3) vcnt = k Chú ý: không thể kiểm thử đường 1 này riêng biệt mà phảI kiểm thử chung với đường 4 hay 5 hay 6.

Test case cho đường 2: value(k) <>-999, với k < i , i >100 Kết quả kỳ vọng : (1) average=Giá trị trung bình của 100 giá trị hợp lệ. (2) tcnt = 100. (3) vcnt = 100

Test case cho đường 3: value(1) = -999 Kết quả kỳ vọng : (1) average = -999. (2) tcnt = 0 (3) vcnt = 0

Page 33: C3. Kiem Thu Hop Trang

Thiết kế các test-cases

Test case cho đường 4: value(i) <> -999 i <= 100 và value(k) < min với k < i Kết quả kỳ vọng : (1) average=Giá trị trung bình của n giá trị hợp lệ. (2) tcnt = 100. (3) vcnt = n (số lượng giá trị hợp lệ)

Test case cho đường 5: value(i) <>-999 với i <= 100 và value(k) > max với k <= i Kết quả kỳ vọng : (1) average=Giá trị trung bình của n giá trị hợp lệ. (2) tcnt = 100. (3) vcnt = n (số lượng giá trị hợp lệ)

Test case cho đường 6: value(i) <>-999 và min<=value(i)<=max với i<=100 Kết quả kỳ vọng : (1) average=Giá trị trung bình của 100 giá trị hợp lệ. (2) tcnt = 100. (3) vcnt = 100 33

Page 34: C3. Kiem Thu Hop Trang

Xét ví dụ về tam giác: 1. program triangle (input, output); 2. VAR a,b,c: integer; 3. IsATriangle: boolean; 4. BEGIN 5. writeln(“Enter integers: “); 6. readln(a,b,c); 7. Writeln(“Side A is: “, a, “Side B is: “, b, “Side C is: “, c); 8. IF(a <b+c) AND (b < a+c) AND (c<a+b) THEN 9. IsATriangle = True; 10. ELSE IsATriangle = False; 11. IF IsATriangle) 12. THEN 13. BEGIN 14. IF (a=b) XOR (a=c) XOR (b=c) AND NOT((a=b) AND (a=c) 15. THEN writeln(“Equilateral”); 16. IF (a=b) AND (b=c) 17. THEN writeln(“Equilateral”); 18. IF(a <> b) AND (a <> c) AND (a<>c) 19. THEN writeln(“Scalene”); 20. END 21. ELSE Writeln(“Not a Triangle”); 22. END

Ví dụ

Page 35: C3. Kiem Thu Hop Trang

35

Thiết kế trường hợp kiểm thử cho kiểm thử đường cơ sở

Ví dụ

Page 36: C3. Kiem Thu Hop Trang

36

Ví dụ

Page 37: C3. Kiem Thu Hop Trang

37

Đồ thị dòng chảy

Page 38: C3. Kiem Thu Hop Trang

v  Số vùng khép kín bao gồm cả các hình

tứ giác = 4 +1 v  Số lượng nhị phân +1 = 4+1=5 v  Số cạnh – số nút + 2 = 15-12+2=5

Độ phức tạp “Cyclomatic”

Page 39: C3. Kiem Thu Hop Trang

1. 12-15->16->17->21->22->24->26-27->30 Trường hợp kiểm thử: Input = (68,68,56) Kết quả dự kiến: tam giác cân 2. 12-15->16->17->21->22->24->25->30 Trường hợp kiểm thử: Input = (68,60,56) Kết quả dự kiến: tam giác không cân

Đường cơ sở và các trường hợp kiểm thử (1)

Page 40: C3. Kiem Thu Hop Trang

3. 12-15->16->17->21->22->23->30 Trường hợp kiểm thử: Input = (68,68,68) Kết quả dự kiến: tam giác đều 4. 12-15->16->18->20->21->28-29->30 Trường hợp kiểm thử: Input = (68,8,56) Kết quả dự kiến: không phải là tam giác

Đường cơ sở và các trường hợp kiểm thử (2)

Page 41: C3. Kiem Thu Hop Trang

Bài tập - BinarySearch

41

13

25

binarySearch() Example

public int binarySearch(int sortedArray[ ], int searchValue){

int bottom = 0;int top = sortedArray.length - 1;int middle, locationOfsearchValue;boolean found = flase;locationOfsearchValue = -1; /* the location of searchValue in the sortedArray */

/* location = -1 means that searchValue is not found */while ( bottom <= top && !found){

middle = (top + bottom)/2;if (searchValue == sortedArray[ middle ]){

found = true;locationOfsearchValue = middle;

}else if (searchValue < sortedArray[ middle ])

top = middle - 1;else

bottom = middle + 1;} // end while

return locationOfsearchValue;}

12

4

5

678

910

3

26

The CFG of Function binarySearch()1

2

3

4

56

7

8

9

10

Page 42: C3. Kiem Thu Hop Trang

Bài tập – BinarySearch - CFG

42

13

25

binarySearch() Example

public int binarySearch(int sortedArray[ ], int searchValue){

int bottom = 0;int top = sortedArray.length - 1;int middle, locationOfsearchValue;boolean found = flase;locationOfsearchValue = -1; /* the location of searchValue in the sortedArray */

/* location = -1 means that searchValue is not found */while ( bottom <= top && !found){

middle = (top + bottom)/2;if (searchValue == sortedArray[ middle ]){

found = true;locationOfsearchValue = middle;

}else if (searchValue < sortedArray[ middle ])

top = middle - 1;else

bottom = middle + 1;} // end while

return locationOfsearchValue;}

12

4

5

678

910

3

26

The CFG of Function binarySearch()1

2

3

4

56

7

8

9

10

Page 43: C3. Kiem Thu Hop Trang

Bài tập – BinarySearch – Độ phức tạp

43

15

29

Cyclomatic Complexity

• Three ways to compute cyclomatic complexity:

– The number of regions of the flow graph correspond

to the cyclomatic complexity.

– Cyclomatic complexity, V(G), for a flow graph G is

defined as V(G) = E - N + 2 (13-10+2=5)

where E is the number of flow graph edges and N is

the number of flow graph nodes.

– Cyclomatic complexity, V(G) = P + 1

where P is the number of predicate nodes contained

in the flow graph G.

30

Cyclomatic Complexity of Function

binarySearch()1

5

7

8

9

10

2

3

4

6

predicate nodes

2

3

4

6

R1

R2

R3

R4 R5

regions

V(G) = 5 regions V(G) = 13(edges) – 10(nodes) +2 = 5 V(G) = 4(predicate nodes) + 1 = 5

Page 44: C3. Kiem Thu Hop Trang

Bài tập – BinarySearch – Đường cơ sở

44

15

29

Cyclomatic Complexity

• Three ways to compute cyclomatic complexity:

– The number of regions of the flow graph correspond

to the cyclomatic complexity.

– Cyclomatic complexity, V(G), for a flow graph G is

defined as V(G) = E - N + 2 (13-10+2=5)

where E is the number of flow graph edges and N is

the number of flow graph nodes.

– Cyclomatic complexity, V(G) = P + 1

where P is the number of predicate nodes contained

in the flow graph G.

30

Cyclomatic Complexity of Function

binarySearch()1

5

7

8

9

10

2

3

4

6

predicate nodes

2

3

4

6

R1

R2

R3

R4 R5

regions

Path 1: 1-2-10 Path 2: 1-2-3-10 Path 3: 1-2-3-4-5-9-2- ... Path 4: 1-2-3-4-6-7-9-2-... Path 5: 1-2-3-4-6-8-9-2-...

Page 45: C3. Kiem Thu Hop Trang

Bài tập – BinarySearch – Test-cases

v  Path 1 test case: §  Inputs: sortedArray = { }, searchValue = 2 §  Expected results: locationOfSearchValue = -1

v  Path 2 test case: cannot be tested stand-alone! §  Inputs: sortedArray = {2, 4, 6}, searchValue = 8 §  Expected results: locationOfSearchValue = -1

v  Path 3 test case: §  Inputs: sortedArray={2,4,6,8,10},searchValue = 6 §  Expected results: locationOfSearchValue = 2

v  • Path 4 test case: §  Inputs: sortedArray = {2, 4, 6, 8, 10}, searchValue = 4 §  Expected results: locationOfSearchValue = 1

v  • Path 5 test case: §  Inputs: sortedArray = {2, 4, 6, 8, 10}, searchValue = 10 §  Expected results: locationOfSearchValue = 4 45

Page 46: C3. Kiem Thu Hop Trang

Kỹ thuật ma trận kiểm thử

v Ma trân kiểm thử là một ma trận vuông có kich thước bằng số các nút trong đồ thị dòng: §  Mỗi dòng/cột ứng với tên một nút §  Mỗi ô: là tên một cung nối nút dòng đến nút cột.

v Ma trận kiểm thử được sử dụng như 1 dữ liệu có cấu trúc để kiểm tra các con đường cơ bản: số đường đi qua nút

46

Page 47: C3. Kiem Thu Hop Trang

Ví dụ ma trận kiểm thử

47

2005 B môn CNFM – Ĉɞi hc Công nghʄ 34

Nguyn Văn Vͻ

g2. Ví dө ma trұn kiӇm thӱ

1

109

87

6

11

4,5

2,3

1 23 45 6 7 8 9 10 11

1 1 1

23 1 1

45 1

6 1 1

7 1

8 1

9 1

10 1

11

=A

2005 B môn CNFM – Ĉɞi hc Công nghʄ 34

Nguyn Văn Vͻ

g2. Ví dө ma trұn kiӇm thӱ

1

109

87

6

11

4,5

2,3

1 23 45 6 7 8 9 10 11

1 1 1

23 1 1

45 1

6 1 1

7 1

8 1

9 1

10 1

11

=A2005 B môn CNFM – Ĉɞi hc Công nghʄ 34

Nguyn Văn Vͻ

g2. Ví dө ma trұn kiӇm thӱ

1

109

87

6

11

4,5

2,3

1 23 45 6 7 8 9 10 11

1 1 1

23 1 1

45 1

6 1 1

7 1

8 1

9 1

10 1

11

=A

Page 48: C3. Kiem Thu Hop Trang

Ví dụ ma trận kiểm thử

48

2005 B môn CNFM – Ĉɞi hc Công nghʄ 34

Nguyn Văn Vͻ

g2. Ví dө ma trұn kiӇm thӱ

1

109

87

6

11

4,5

2,3

1 23 45 6 7 8 9 10 11

1 1 1

23 1 1

45 1

6 1 1

7 1

8 1

9 1

10 1

11

=A2 – 1 = 1 2 – 1 = 1 1 – 1 = 0 2 – 1 = 1 1 – 1 = 0 1 – 1 = 0 1 – 1 = 0

V(G) = 3 + 1 = 4

Page 49: C3. Kiem Thu Hop Trang

v  Giới thiệu về kiểm thử hộp trắng v  Các kỹ thuật kiểm thử hộp trắng:

§ Kiểm thử đường dẫn cơ sở § Kiểm thử điều kiện/kiểm thử nhánh § Kiểm thử vòng lặp § Kiểm thử luồng điều khiển

Nội dung

Page 50: C3. Kiem Thu Hop Trang

Kiểm thử điền kiện

v  Kiểm thử điều kiện §  Phương pháp thiết kế test-case để kiểm tra các điều kiện logic

v  Điều kiện logic §  Điều kiện đơn là 1 biến Bool (có thê có toán tử phủ định): X §  Điều kiện đơn là biểu thức quan hệ giữa 2 biểu thức sô học C = (A Θ B), vớI Θ là phép so sánh: <, ≤, =, >, ≥ hay ≠

A, B là biểu thức sô học v  Điều kiện phức hợp cấu thành tư hơn một điều kiện đơn

nhơ các toán tư Bool: hoặc (∪), va (∩), phu định (┘) D = X1 & X2 &...Xn, trong đo Xi là điều kiện đơn, & là toán tư bool

Nếu một điều kiện sai, ít nhất một thành phần trong điều kiện sai

50

Page 51: C3. Kiem Thu Hop Trang

Kiểu sai trong điều kiện lôgic

v Sai biến Bool v Sai toán tử Bool v Sai số hạng trong biểu thức toán tử Bool v Sai toán tử quan hệ v Sai biểu thức số học

51

Page 52: C3. Kiem Thu Hop Trang

Chiến lược kiểm thư phân nhánh

v Kiểm thử từng điều kiện trong chương trình. v Kiểm thử điều kiện không chỉ là phát hiện sai

trong điều kiện đó mà còn là phát hiện sai khác của chương trình liên quan.

v Nguyên tắc kiểm thử nhánh: với mỗi điều kiện phức hợp C, thì với mỗi nhánh “true” và “false” của C, mỗi điều kiện đơn trong C phải được kiểm thử ít nhất một lần.

52

Page 53: C3. Kiem Thu Hop Trang

Chiến lược kiểm thư miền

v Chiến lược kiểm thử miền cần 3 hoặc 4 kiểm thử cho một biểu thức quan hệ gồm các trường hợp: <, >, = và có thể ≠ nữa.

v Nếu biểu thức Bool có n biến, mà n nhỏ thì thuận lợi, song n lớn thì khó thực hiện!

v Người ta đưa ra chiến lược cho các phép thử nhạy cảm bằng cách áp dụng kết hợp chiến lược kiểm thử nhánh và kiểm thử miền (quan hệ)

v Làm sao chỉ ra tất cả các trường hợp cần kiểm thử?

53

Page 54: C3. Kiem Thu Hop Trang

Chiến lược kiểm thư BRO

v BRO = kiểm thư nhánh & toán tư quan hệ (branch and relational operation) §  BRO dùng “ràng buộc điều kiện làm điều kiện

cần thư” đê phát hiện sai ơ nhánh va toán tư khi xẩy ra một lần va không có biến chung.

§ Gia sư: D=X1&X2&...Xn, Xi: điều kiện đơn,&: toán tư bool

v Cần đặc tả ràng buộc đầu ra của Xi tương ứng với điều kiện D đa xác định?.

54

Page 55: C3. Kiem Thu Hop Trang

v Ta nói rằng ràng buộc Xi của điều kiện D là được phủ bởi một sự thực thi của C nếu như trong quá trình thực thi đó, đầu ra của mỗi điều kiện đơn Xi trong D thoả mãn các ràng buộc tương ứng.

v Điều này có nghĩa là: Khi giá trị của D đã cho, ta cần tìm các điều kiện ràng buộc mà mỗi Xi (1 thành phân của D) cần thỏa mãn để đảm bảo được giá trị của D

55

Chiến lược BRO – điều kiện đầu vào

Page 56: C3. Kiem Thu Hop Trang

Chiến lược BRO – tạo ràng buộc

v Với một biến Bool B, thì ràng buộc đầu ra của B là t (true) hoặc f (false).

v Với một biểu thức quan hệ (AΘB) thì ràng buộc đầu ra của nó là toán tử quan hệ: Θ có thể nhận một trong bốn giá trị >, <, =, # (lớn hơn, nhỏ hơn & bằng hoặc khác).

56

Page 57: C3. Kiem Thu Hop Trang

v Ví dụ, xét điều kiện C = A ∩ B v A và B là hai biến Bool. Khi đó ràng buộc đầu ra của C là một cặp giá trị của t và f.

v Chiến lược kiểm thử BRO đòi hỏi rằng tập ba cặp ràng buộc (t,t), (t,f) và (f,t) đều được phủ bởi các thực thi của C. § Căp(t,t) ứngvới C=t § Căp(t,f)và(f,t) ứngvới C=f

57

Chiến lược BRO – tạo ràng buộc 1

Page 58: C3. Kiem Thu Hop Trang

v Xét điều kiện C=(B=E). Khi đo ràng buộc đầu ra là “=“ tương ứng với t va “<,>” tương ứng với f

v Xét điều kiện C là hội biến Bool va biểu thức quan hệ: A va B = E. Khi đo các ràng buộc của C là các cặp (t,t), (t,f) va (f,t); với (B = E) có gia trị t tương ứng với “=“, va gia trị f tương ứng với “<“ hoặc “>”; Bởi vậy tập các ràng buộc đầu ra của C phải gồm 4 phần tư:

(t,=), (t,<), (t,>) va (f,=) v Phu của các ràng buộc này bảo đảm phát hiện được sai biến Bool hoặc toán tư quan hệ trong C

58

Chiến lược BRO – tạo ràng buộc

Page 59: C3. Kiem Thu Hop Trang

v Xét điều kiện C là hội của hai biểu thức quan hệ (A>B) và (E=F)

v Tập ràng buộc đầu ra sẽ (t,t), (t,f) và (f,t) và tương ứng sẽ là: (>,=); (>,<); (>,>); (=,=) và (<,=).

v Phủ của ràng buộc này bảo đảm rằng phát hiện được sai ở các toán tử quan hệ trong C.

59

Chiến lược BRO – tạo ràng buộc

Page 60: C3. Kiem Thu Hop Trang

v Giới thiệu về kiểm thử hộp trắng v Kiểm thử đường dẫn cơ sở v Kiểm thử điều kiện/kiểm thử nhánh v Kiểm thử vòng lặp v Kiểm thử luồng điều khiển

Nội dung

Page 61: C3. Kiem Thu Hop Trang

Kiểm thử vòng lặp

Định nghĩa: v Tập trung vào hiệu lực của các cấu trúc vòng lặp, đặc biệt là

các biến thể vòng lặp.

v Bốn kiểu vòng lặp:

§  1. Simple loop: một vòng lặp đơn

§  2. Nested loops: một vòng lặp trong vòng lặp khác

§  3. Concatenated loops: một vòng lặp sau vòng lặp khác

§  4. Unstructured loops: các vòng lặp được nối vòng và lồng nhau

phức tạp 61

Page 62: C3. Kiem Thu Hop Trang

62

Simple Loop

Nested Loops

Concatenated Loops Unstructured Loops

Kiểm thử vòng lặp

Page 63: C3. Kiem Thu Hop Trang

Kiểm thử các vòng lặp đơn

Với n là số vòng lặp tối đa cho phép, các trường hợp kiểm tra bao gồm: 1.  hoàn toàn bỏ qua vòng lặp 2.  qua một vòng lặp 3.  qua hai vòng lặp 4.  qua m vòng lặp với m < n 5.  qua (n-1), n, và (n+1) vòng lặp

63

Page 64: C3. Kiem Thu Hop Trang

1. Bắt đầu vòng lặp trong cùng. Đặt tất cả các vòng ngoài với các giá trị tham số tối thiểu cho sự lặp lại của chúng.

2. Kiểm tra các giá trị tối thiểu, điển hình, tối đa cho vòng lặp trong cùng, trong khi giữ các vòng lặp ngoài tại các giá trị tối thiểu của chúng.

3. Di chuyển ra khỏi một vòng lặp và thiết lập nó như trong bước 2, giữ tất cả các vòng lặp bên trong những giá trị tiêu biểu. Tiếp tục bước này cho đến khi vòng lặp ngoài cùng đã được thử nghiệm.

64

Nested Loops

Kiểm thử vòng lặp lồng nhau

Page 65: C3. Kiem Thu Hop Trang

v Nếu mỗi vòng lặp là độc lập với các vòng lặp khác thì kiểm tra chúng như các vòng lặp đơn giản.

v Nếu hai vòng được nối tiếp, vòng lặp 1 được dùng như là giá trị ban đầu cho vòng lặp 2 thì kiểm tra chúng như các vòng lặp lồng nhau.

65

Concatenated

Loops

Kiểm thử vòng lặp ghép nối

Page 66: C3. Kiem Thu Hop Trang

v Giới thiệu về kiểm thử hộp trắng v Kiểm thử đường dẫn cơ sở v Kiểm thử điều kiện/kiểm thử nhánh v Kiểm thử vòng lặp v Kiểm thử luồng điều khiển

Nội dung

Page 67: C3. Kiem Thu Hop Trang

v Đôi khi còn được gọi là tiêu chuẩn kiểm thử phần mềm hoặc tiêu chuẩn kiểm thử dữ liệu đầy đủ có thể được sử dụng như: §  Quy tắc dừng để xác định tính đầy đủ. §  Kiểm tra đo chất lượng khi mức độ an toàn có liên quan với

mỗi tập kiểm tra. §  Lựa chọn dữ liệu kiểm thử. Bộ kiểm tra được coi là tương đương nếu đáp ứng các tiêu chí tương tự.

v Tiêu chuẩn kiểm thử hộp trắng •  Tiêu chuẩn có xem xét đến cấu trúc bên trong của chương trình

có thể được chia thành. 1. Tiêu chuẩn luồng điều khiển. 2. Tiêu chuẩn luồng dữ liệu.

67

Tiêu chuẩn bao phủ

Page 68: C3. Kiem Thu Hop Trang

v Tiêu chuẩn luồng điều khiển §  Kiểm tra các biểu thức logic trong đó xác định các

nhánh và cấu trúc vòng lặp của chương trình. §  Được sử dụng chủ yếu trong các ngành công

nghiệp. §  Các tiêu chí phổ biến nhất bao gồm:

•  1. Bao phủ câu lệnh •  2. Bao phủ quyết định •  3. Bao phủ điều kiện •  4. Bao phủ quyết định / điều kiện •  5. Bao phủ đa điều kiện

68

Tiêu chuẩn luồng điều khiển

Page 69: C3. Kiem Thu Hop Trang

v Định nghĩa §  Nếu tất cả các tập kiểm tra thỏa mãn A cũng đáp ứng

B thì ta nói tiêu chuẩn A mạnh hơn tiêu chuẩn B

v Thứ tự các tiêu chuẩn §  Phạm vi tiêu chuẩn bao phủ là yếu nhất. §  Điều kiện tiêu chuẩn bao phủ là mạnh nhất. §  Trình tự giữa cả hai là quyết định phạm vi bao phủ, điều kiện bao phủ và quyết định phạm vi / điều khiện bao phủ.

69

Thứ tự tiêu chuẩn luồng điều khiển

Page 70: C3. Kiem Thu Hop Trang

70

§  Định Nghĩa: •  Mỗi câu lệnh trong chương trình được thực hiện ít nhất một lần.

§  Ví dụ: •  Để thoả mãn bao phủ câu lệnh đáp ứng đoạn Code 1, một trường hợp kiểm thử có thể:

A = 2 B= 0 X = 3 •  Như đã thấy, tất cả các câu lệnh đều được thực thi. •  Nhưng điều gì sẽ xảy ra nếu code sai như trong Code 2?

Code1: if ((A > 1) && (B == 0)) X = X/A; if ((A == 2) || (X > 1)) X=X+1;

Code2: if ((A > 1) || (B == 0)) X = X/A; if ((A == 2) || (X > 1)) X=X+1;

Bao phủ câu lệnh

Page 71: C3. Kiem Thu Hop Trang

71

§  Định Nghĩa:

•  Mỗi câu lệnh trong chương trình được thực hiện ít nhất một lần và mỗi điều kiện có thể xảy ra ít nhất một lần.

•  Một quyết định là một biểu thức Boolean bao gồm một hoặc nhiều điều kiện kết hợp bởi các từ nối hợp lí, chẳng hạn như “AND”, “OR” và “NOT”.

Code1: if ((A > 1) && (B == 0)) X = X/A; if ((A == 2) || (X > 1)) X=X+1;

Bao phủ điều kiện (1)

Page 72: C3. Kiem Thu Hop Trang

72

§  Ví dụ: •  Để thoả mãn bao phủ điều kiện đáp ứng đoạn code 1, một trường hợp kiểm thử có thể:

A = 2 B= 0 X = 2 A = 1 B= 0 X = 1

•  Như đã thấy, tất cả các câu lệnh đều được thực thi. •  Nhưng điều gì sẽ xảy ra nếu code sai trong ví dụ 2?

Code1: if ((A > 1) && (B == 0)) X = X/A; if ((A == 2) || (X > 1)) X=X+1;

Code2: if ((A > 1) && (B >= 0)) X = X/A; if ((A == 2) || (X > 1)) X=X+1;

Bao phủ điều kiện (2)

Page 73: C3. Kiem Thu Hop Trang

73

Dưới đây là một phương thức của một lớp nào đó, hãy áp dụng kiểm thử hộp trắng để lấy được trường hợp kiểm thử của nó

Áp dụng kỹ thuật kiểm thử hộp trắng

Page 74: C3. Kiem Thu Hop Trang

v Để áp dụng kiểm thử hộp trắng để lấy được các trường hợp kiểm thử của nó, có thể làm như sau: §  Bước 1: Rút ra các trường hợp kiểm thử từ kiểm thử đường dẫn cơ sở.

§  Bước 2: Rút ra các trường hợp kiểm thử từ các kiểm thử rẽ nhánh.

§  Bước 3: Rút ra các trường hợp kiểm thử từ kiểm thử vòng lặp.

§  Bước 4: Cuối cùng nên thiết lập kiểm thử kết hợp tất cả các bước trên.

§  Bước 5: Bổ xung các trường hợp kiểm thử đặc biệt theo tính năng của chương trình.

74

Trả lời

Page 75: C3. Kiem Thu Hop Trang

v Kĩ thuật kiểm thử hộp trắng có thể kiểm tra logic của chương trình dựa trên cấu trúc của nó.

v Kĩ thuật kiểm thử hộp trắng bao gồm thử nghiệm đường dẫn cơ sở, kiểm tra rẽ nhánh và kiểm thử vòng lặp.

v Tiêu chuẩn bao phủ có thể được sử dụng như quy tắc dừng và kiểm tra dữ liệu.

v Tiêu chuẩn luồng điểu khiển được áp dụng trong các ngành công nghiệp bao gồm bao phủ câu lệnh, bao phủ điều kiện, bao phủ quyết định / điều kiện và bao phủ đa điều kiện.

75

Tóm tắt

Page 76: C3. Kiem Thu Hop Trang

THE END

76