Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp

3.1 Tổng quát về 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ử.

Thường tốn rất nhiều thời gian và công sức nếu TPPM quá lớn

(thí dụ trong kiểm thử tích hợp hay kiểm thử chức nă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 : tập trung kiểm thử thuật

giải chức năng.

à Kiểm thử dòng dữ liệu : tập trung kiểm thử ₫ời sống

của từng biến dữ liệu ₫ược dùng trong thuật giải.

Trong chương 3 này, chúng ta tập trung giới thiệu kiến thức vể

hoạt ₫ộng kiểm thử luồng ₫iều khiển của TPPM và trong chương 4,

chúng ta tập trung giới thiệu các kiến thức về hoạt ₫ộng kiểm thử

dòng dữ liệu.

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 1

Trang 1

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 2

Trang 2

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 3

Trang 3

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 4

Trang 4

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 5

Trang 5

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 6

Trang 6

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 7

Trang 7

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 8

Trang 8

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 9

Trang 9

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 14 trang xuanhieu 3040
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp

Bài giảng Kiểm thử phần mềm - Chương 3: Kỹ thuật kiểm thử hộp trắng - Nguyễn Văn Hiệp
 Chương 3
 Kỹ thuật kiểm thử hộp trắng
3.1 Tổng quát về 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ử. 
 Thường tốn rất nhiều thời gian và công sức nếu TPPM quá lớn 
(thí dụ trong kiểm thử tích hợp hay kiểm thử chức nă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 : tập trung kiểm thử thuật 
 giải chức năng. 
 à Kiểm thử dòng dữ liệu : tập trung kiểm thử ₫ời sống 
 của từng biến dữ liệu ₫ược dùng trong thuật giải. 
 Trong chương 3 này, chúng ta tập trung giới thiệu kiến thức vể 
hoạt ₫ộng kiểm thử luồng ₫iều khiển của TPPM và trong chương 4, 
chúng ta tập trung giới thiệu các kiến thức về hoạt ₫ộng kiểm thử 
dòng dữ liệu. 
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<=1000; i++) 
 for (j=1; j<=1000; j++) 
 for (k=1; k<=1000; k++) 
 doSomethingWith(i,j,k); 
 chỉ có 1 ₫ường thi hành, nhưng rất dài : dài 
 1000*1000*1000 = 1 tỉ lệnh gọi hàm doSomething(i,j,k) 
 khác nhau. 
 Còn ₫oạn code gồm 32 lệnh if else ₫ộc lập 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. 
 Mà cho dù có kiểm thử hết ₫ược toàn bộ các ₫ường thi hành 
thì vẫn không thể phát hiện những ₫ường thi hành cần có nhưng 
không (chưa) ₫ược hiện thực : 
 if (a>0) doIsGreater(); 
 if (a==0) dolsEqual(); 
 // thiếu việc xử lý trường hợp a < 0 - if (a<0) dolsLess(); 
 Một ₫ường thi hành ₫ã kiểm tra là ₫úng nhưng vẫn có thể bị lỗi 
khi dùng thật (trong 1 vài trường hợp ₫ặc biệt) : 
 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. 
3.3 Các cấp phủ kiểm thử (Coverage) 
 Do ₫ó, ta nên kiểm thử 1 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 ? 
 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. 
 Thành phần liên quan có thể là lệnh thực thi, ₫iểm quyết ₫ịnh, 
₫iều kiện con hay là sự kết hợp của chúng. 
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. 
Phủ cấp 1 : kiểm thử sao cho mỗi lệnh ₫ược thực thi ít nhất 1 lần. 
 Phân tích hàm foo sau ₫ây : 
 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 } 
 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! 
bug(a) TC 4 : foo(1, 2, 1, 1) TC 5 : foo(2,1, 1, 1) 
 Return 1 division by zero! 
Phủ cấp 4 : 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 TRUE lẫn FALSE. Ta gọi mức kiểm 
thử này là phủ các nhánh & các ₫iều kiện con (branch & 
subcondition coverage). Đây là mức ₫ộ phủ kiểm thử tốt nhất trong 
thực tế. Phần còn lại của chương này sẽ giới thiệu qui trình kỹ 
thuật ₫ể ₫ịnh nghĩa các testcase sao cho nếu kiểm thử hết các 
testcase ₫ược ₫ịnh nghĩa này, ta sẽ ₫ạt phủ kiểm thử cấp 4. 
3.4 Đồ thị dòng ₫iều khiển 
 Là một trong nhiều phương pháp miêu tả thuật giải. Đây là 
phương pháp trực quan cho chúng ta thấy dễ dàng các thành phần 
của thuật giải và mối quan hệ trong việc thực hiện các thành phần 
này. 
 Gồm 2 loại thành phần : các nút và các cung nối kết giữa 
chúng. 
 Các loại nút trong ₫ồ thị dòng ₫iều khiển : 
 ₫iểm nối 
 ₫iểm xuất phát khối xử lý ₫iểm quyết ₫ịnh ₫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ụ : 
 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. 
 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. 
1. int ProcessOp (int opcode) { =0
2. switch (op) { 
3. case 0 : ...; break; op =1 
4. case 1 : ...; break; 
5. case 2 : ...; break; =2 
6. case 3 : ...; break; 3 2 1 0
7. } 
 =3 
Độ phức tạp Cyclomatic C 
 Độ phức tạp Cyclomatic C = V(G) của ₫ồ thị dòng ₫iều khiển 
₫ược tính bởi 1 trong các công thức sau : 
 ƒ V(G) = E - N + 2, trong ₫ó E là số cung, N là số nút của ₫ồ 
 thị. 
 ƒ V(G) = P + 1, nếu là ₫ồ thị dòng ₫iều khiển nhị phân (chỉ 
 chứa các nút quyết ₫ịnh luận lý - chỉ có 2 cung xuất 
 True/False) và P số nút quyết ₫ịnh. 
 Độ phức tạp Cyclomatic C chính là số ₫ường thi hành tuyến 
tính ₫ộc lập 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ủ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 3 như ₫ã trình bày 
trong các slide trước. 
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. 
 6. So sánh kết quả có ₫ược với kết quả ₫ược kỳ vọng. 
 7. Lập báo cáo kết quả ₫ể phản hồi cho những người có liên 
 qu 
Qui trình xác ₫ịnh các ₫ường tuyến tính ₫ộc lập 
 Tom McCabe ₫ề nghị qui trình xác ₫ịnh C ₫ường tuyến tính 
₫ộc lập gồm các bước : 
 1. Xác ₫ịnh ₫ường tuyến tính ₫ầu tiên bằng cách ₫i dọc theo 
 nhánh bên trái nhất của các nút quyết ₫ịnh. Chọn ₫ường 
 này là pilot. 
 2. Dựa trên ₫ường pilot, thay ₫ổi cung xuất của nút quyết 
 ₫ịnh ₫ầu tiên và cố gắng giữ lại maximum phần còn lại. 
 3. Dựa trên ₫ường pilot, thay ₫ổi cung xuất của nút quyết 
 ₫ịnh thứ 2 và cố gắng giữ lại maximum phần còn lại. 
 4. Tiếp tục thay ₫ổi cung xuất cho từng nút quyết ₫ịnh trên 
 ₫ường pilot ₫ể xác ₫ịnh ₫ường thứ 4, 5,... cho ₫ến khi 
 không còn nút quyết ₫ịnh nào trong ₫ường pilot nữa. 
 5. Lặp chọn tuần tự từng ₫ường tìm ₫ược làm pilot ₫ể 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 ₫ủ số C). 
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] -999 && tcnt <100) { 3
 tcnt++; 
 4 5 6 4
 if (min<=value[i] && value[i] <= max) { 1
 sum += value[i]; 5
 7
 vcnt ++; 1 1
 } 6
 8 
 i++; 
 7
 } 9 1 1
 if (vcnt > 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 
 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 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 
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 
3.8 Kiểm thử vòng lặp 
 Thường thân của 1 lệnh lặp sẽ ₫ược thực hiện nhiều lần (có 
thể rất lớn). Chi phí kiểm thử ₫ầy ₫ủ rất tốn kém, nên chúng ta sẽ 
chỉ kiểm thử ở những lần lặp mà theo thống kê dễ gây lỗi nhất. Ta 
xét từng loại lệnh lặp, có 4 loại : 
 1. lệnh lặp ₫ơn giản : thân của nó chỉ chứa các lệnh khác chứ 
 không chứa lệnh lặp khác. 
 2. lệnh lặp lồng nhau : thân của nó có chứa ít nhất lệnh lặp 
 khác... 
 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 : 
Kiểm thử tuần tự từng vòng lặp từ trong ra ngoài theo ₫ề nghị sau 
₫ây : 
 ƒ kiểm thử vòng lặp trong cùng : cho các vòng ngoài chạy 
 với giá trị min, kiểm thử vòng lặp trong cùng bằng 7 test 
 case ₫ã giới thiệu ở silde trước. 
 ƒ kiểm thử từng vòng lặp còn lại : cho các vòng ngoài nó 
 chạy với giá trị min, còn các vòng bên trong nó chạy với 
 giá trị ₫iển hình, kiểm thử nó bằng 7 test case ₫ã giới thiệu 
 ở slide trước. 
3. Kiểm thử các vòng lặp liền kề : Kiểm thử tuần tự từng vòng lặp 
từ trên xuống, mỗi vòng thực hiện kiểm thử bằng 7 test case ₫ã 
giới thiệu. 
4. Riêng các vòng lặp giao nhau thì thường do việc viết code chưa 
tốt tạo ra ⇒ nên cấu trúc lại ₫oạn code sao cho không chứa dạng 
giao nhau này. 
3.9 Kết chương 
 Chương này ₫ã giới thiệu 1 kỹ thuật thiết yếu ₫ể kiểm thử hộp 
trắng TPPM, ₫ó là kỹ thuật kiểm thử dòng ₫iều khiển. 
 Chúng ta ₫ã giới thiệu các cấp ₫ộ phủ kiểm thử khác nhau, 
giới thiệu ₫ồ thị dòng ₫iều khiển và ₫ồ thị dòng ₫iều khiển cơ bản 
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. 

File đính kèm:

  • pdfbai_giang_kiem_thu_phan_mem_chuong_3_ky_thuat_kiem_thu_hop_t.pdf