Bài giảng Công nghệ phần mềm nâng cao - Phạm Ngọc Hùng - Kiểm thử hộp trắng

4.1 Tổng quát về kiểm thử hộp trắng

4.2 Kiểm thử luồng điều khiển

4.3 Kiểm thử dòng dữ liệu

pdf23 trang | Chuyên mục: Công Nghệ Phần Mềm | Chia sẻ: dkS00TYs | Lượt xem: 1955 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Công nghệ phần mềm nâng cao - Phạm Ngọc Hùng - Kiểm thử hộp trắng, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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.
Kiểm thử luồng điều khiển
Chương 4 : Kiểm thử hộp trắng – White Box
 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 thiệt (trong 1 vài trường hợp đặc biệt) :
int blech (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 blech bị lỗi.
Phủ kiểm thử
Chương 4 : Kiểm thử hộp trắng – White Box
 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 ?
 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, đ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.
Phủ cấp 0 & 1
Chương 4 : Kiểm thử hộp trắng – White Box
 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.
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 bệnh 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
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 False
3 (a == 0) Test Case 1
foo(0, 0, 0, 0)
return 0
Test Case 2
foo(1, 1, 1, 1)
return 1
6 ((a==b) OR ((c == d) 
AND bug(a) ))
Test Case 2
foo(1, 1, 1, 1)
return 1
Test Case 3
foo(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.
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 False
a ==0 Test Case 1
foo(0, 0, 0, 0)
return 0
Test Case 2
foo(1, 1, 1, 1)
return 1
(a==b) Test Case 2
foo(1, 1, 1, 1)
return value 0
Test Case 3
foo(1, 2, 1, 2)
division by zero!
(c==d) Test Case 3
foo(1, 2, 1, 2)
division by zero!
bug(a)
Phủ cấp 4
Chương 4 : Kiểm thử hộp trắng – White Box
 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. Ta gọi mức kiểm thử này là 
phủ các nhánh & điều kiện con (branch & subcondition coverage). 
Kiểm thử các đường thi hành cơ bản
Chương 4 : Kiểm thử hộp trắng – White Box
Dựa trên ý tưởng của Tom McCabe, gồm các bước công việc sau :
 Từ thủ tục cần kiểm thử, xây dựng đồ thị dòng điều khiển 
tương ứng.
 Tính độ phức tạp Cyclomatic của đồ thị (=C).
 Xác định C đường thi hành tuyến tính cơ bản cần kiểm thử.
 Tạo từng test case cho từng đường thi hành tuyến tính cơ 
bản.
 Thực hiện kiểm thử trên tứng test case.
 So sánh kết quả có được với kết quả được kỳ vọng.
 Lập báo cáo kết quả để phản hồi cho những người có liên 
quan.
Đồ 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
 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
s4
s5
Độ phức tạp Cyclomatic C
Chương 4 : Kiểm thử hộp trắng – White Box
Độ 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 đồ thị 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ơ bản của thủ tục 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 thủ tục cần kiểm thử và kiểm thử tất cả các đường 
thi hành này thì sẽ đạt được mức kiểm thử 6 như đã trình bày trong 
các slide trước.
Qui trình xác định các đường tuyến tính độc lập
Chương 4 : Kiểm thử hộp trắng – White Box
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 cơ bản, đường này nên là đường thi hành phố biến 
nhất.
2. Để chọn đường thứ 2, 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. Để 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 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 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. 
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 đủ số C).
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
7
8
9
10
11 12
Độ 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. 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
1
2
3
4
5
6
7
8
9
10
11 12
Thiết kế các test case
Chương 4 : Kiểm thử hộp trắng – White Box
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 khiể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
Thiết kế các test case
Chương 4 : Kiểm thử hộp trắng – White Box
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
Kiểm thử vòng lặp
Chương 4 : Kiểm thử hộp trắng – White Box
Tập trung riêng vào các lệnh lặp. Có 4 loại :
 lệnh lặp đơn giản : thân của nó chỉ chứa các lệnh khác.
 lệnh lặp lồng nhau : thân của nó chứa lệnh lặp khác...
 lệnh lặp liền kề : 2 hay nhiều lệnh lặp kế tiếp nhau
 lệnh lặp giao nhau : 2 hay nhiều lệnh lặp giao nhau.
Kiểm thử vòng lặp đơn giản
Chương 4 : Kiểm thử hộp trắng – White Box
Nên chọn các test case sau đây 
để kiểm thử lệnh lặp n lần :
 chạy 0 lần.
 chạy 1 lần.
 chạy 2 lần.
 chạy k lần, k là giá trị nào đó 
thỏa 2 < k < n-1.
 chạy n-1 lần
 chạy n lần
 chạy n+1 lần.
while c do... do ... while c
Kiểm thử vòng lặp lồng nhau
Chương 4 : Kiểm thử hộp trắng – White Box
Kiểm thử tuần tự từng vòng lặp từ trong ra ngoài 
theo đề nghị sau đây :
1. 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.
2. kiểm thử vòng lặp còn lại : cho các vòng ngoài 
nó chạy với giá trị min, các vòng bê 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.
Kiểm thử các vòng lặp liền kề
Chương 4 : Kiểm thử hộp trắng – White Box
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.
Riêng các vòng lặp giao nhau 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.

File đính kèm:

  • pdfBài giảng Công nghệ phần mềm nâng cao - Phạm Ngọc Hùng - Kiểm thử hộp trắng.pdf