Chương 3
K thut kim th hp trng
3.1 Tng quát v kim th hp trng
Đối tượng ₫ược kim th là 1 thành phn phn mm (TPPM).
TPPM có th là 1 hàm chc năng, 1 module chc năng, 1 phân h
chc năng…
Kim th hp trng da vào thut gii c th, vào cu trúc d
liu bên trong ca ₫ơn v phn mm cn kim th ₫ể xác ₫ịnh ₫ơn
v phn mm ó có thc hin úng không.
Do ó người kim th hp trng phi có k năng, kiến thc
nht ₫ịnh v ngôn ng lp trình ₫ược dùng, v thut gii ₫ược
dùng trong TPPM ₫ể có th thông hiu chi tiết v on code cn
kim th.
Thường tn rt nhiu thi gian và công sc nếu TPPM quá ln
(thí d trong kim th tích hp hay kim th chc năng).
Do ó k thut này ch yếu ₫ược dùng ₫ể kim th ₫ơn v.
Trong lp trình hướng ₫ối tượng, kim th ₫ơn v là kim th tng
tác v ca 1 class chc năng nào ó.
Có 2 hot ₫ộng kim th hp trng :
à Kim th lung iu khin : tp trung kim th thut
gii chc năng.
à Kim th dòng d liu : tp trung kim th ₫ời sng
ca tng biến d liu ₫ược dùng trong thut gii.
Trong chương 3 này, chúng ta tp trung gii thiu kiến thc v
hot ₫ộng kim th lung iu khin ca TPPM và trong chương 4,
chúng ta tp trung gii thiu các kiến thc v hot ₫ộng kim th
dòng d liu.
CuuDuongThanCong.com https://fb.com/tailieudientucntt
3.2 Mt s thut ng v kim th lung iu khin
Đường thi hành (Execution path) : là 1 kch bn thi hành ₫ơn v
phn mm tương ng, c th nó là danh sách có th t các lnh
₫ược thi hành ng vi 1 ln chy c th ca ₫ơn v phn mm, bt
₫ầu t im nhp ca ₫ơn v phn mm ₫ến im kết thúc ca ₫ơn
v phn mm.
Mi TPPM có t 1 ₫ến n (có th rt ln) ₫ường thi hành khác
nhau. Mc tiêu ca phương pháp kim th lung iu khin là ₫ảm
bo mi ₫ường thi hành ca ₫ơn v phn mm cn kim th ₫ều
chy úng. Rt tiếc trong thc tế, công sc và thi gian ₫ể ₫ạt mc
tiêu trên ây là rt ln, ngay c trên nhng ₫ơn v phn mm nh.
Thí d on 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 rt dài : dài
1000*1000*1000 = 1 t lnh gi hàm doSomething(i,j,k)
khác nhau.
Còn on code gm 32 lnh if else ₫ộc lp 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ó kim th hết ₫ược toàn b các ₫ường thi hành
thì vn không th phát hin nhng ₫ường thi hành cn có nhưng
không (chưa) ₫ược hin thc :
if (a>0) doIsGreater();
if (a==0) dolsEqual();
// thiếu vic x lý trường hp a < 0 - if (a<0) dolsLess();
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Mt ₫ường thi hành ã kim tra là úng nhưng vn có th b li
khi dùng tht (trong 1 vài trường hp ₫ặc bit) :
int phanso (int a, int b) {
return a/b;
}
khi kim tra, ta chn b <> 0 thì chy úng, nhưng khi dùng
tht trong trường hp b = 0 thì hàm phanso b li.
3.3 Các cp ph kim th (Coverage)
Do ó, ta nên kim th 1 s test case ti thiu mà kết qu ₫ộ
tin cy ti a. Nhưng làm sao xác ₫ịnh ₫ược s test case ti thiu
nào có th em li kết qu₫ộ tin cy ti a ?
Ph kim th (Coverage) : là t l các thành phn thc s ₫ược
kim th so vi tng th sau khi ã kim th các test case ₫ược
chn. Ph càng ln thì ₫ộ tin cy càng cao.
Thành phn liên quan có th là lnh thc thi, im quyết ₫ịnh,
iu kin con hay là s kết hp ca chúng.
Ph cp 0 : kim th nhng gì có th kim th ₫ược, phn còn li
₫ể người dùng phát hin và báo li sau. Đây là mc ₫ộ kim th
không thc s có trách nhim.
Ph cp 1 : kim th sao cho mi lnh ₫ược thc thi ít nht 1 ln.
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 }
CuuDuongThanCong.com https://fb.com/tailieudientucntt
Vi hàm foo trên, ta ch cn 2 test case sau ây là ₫ạt 100%
ph cp 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 hin li chia 0 hàng lnh 8.
Ph cp 2 : kim th sao cho mi im quyết ₫ịnh lun lý ₫ều
₫ược thc hin ít nht 1 ln cho trường hp TRUE ln FALSE. Ta
gi mc kim th này là ph các nhánh (Branch coverage). Ph
các nhánh ₫ảm bo ph các lnh.
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)
division by zero!
Vi 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ì mi ₫ạt 100% ph các nhánh.
Ph cp 3 : kim th sao cho mi iu kin lun lý con
(subcondition) ca tng im quyết ₫ịnh ₫ều ₫ược thc hin ít nht
1 ln cho trường hp TRUE ln FALSE. Ta gi mc kim th này
là ph các iu kin con (subcondition coverage). Ph các iu
kin con chưa chc ₫ảm bo ph các nhánh & ngược li.
Predicate True False
a ==0 TC 1 : foo(0, 0, 0, 0)
return 0
TC 2 : foo(1, 1, 1, 1)
return 1
(a==b) TC 2 : foo(1, 1, 1, 1)
return value 0
TC 3 : foo(1, 2, 1, 2)
division by zero!
(c==d) TC 4 : foo(1, 2, 1, 1)
Return 1
TC 3 : foo(1, 2, 1, 2)
division by zero!
CuuDuongThanCong.com https://fb.com/tailieudientucntt
bug(a) TC 4 : foo(1, 2, 1, 1)
Return 1
TC 5 : foo(2,1, 1, 1)
division by zero!
Ph cp 4 : kim th sao cho mi iu kin lun lý con
(subcondition) ca tng im quyết ₫ịnh ₫ều ₫ược thc hin ít nht
1 ln cho trường hp TRUE ln FALSE & im quyết ₫ịnh cũng
₫ược kim th cho c 2 nhánh TRUE ln FALSE. Ta gi mc kim
th này là ph các nhánh & các iu kin con (branch &
subcondition coverage). Đây là mc ₫ộ ph kim th tt nht trong
thc tế. Phn còn li ca chương này s gii thiu qui trình k
thut ₫ể ₫ịnh nghĩa các testcase sao cho nếu kim th hết các
testcase ₫ược ₫ịnh nghĩa này, ta s ₫ạt ph kim th cp 4.
3.4 Đồ th dòng iu khin
Là mt trong nhiu phương pháp miêu t thut gii. Đây là
phương pháp trc quan cho chúng ta thy d dàng các thành phn
ca thut gii và mi quan h trong vic thc hin các thành phn
này.
Gm 2 loi thành phn : các nút và các cung ni kết gia
chúng.
Các loi nút trong ₫ồ th dòng iu khin :
Miêu t các cu trúc iu khin ph dng :
im xut phát khi x im quyết ₫ịnh im ni im kết thúc
CuuDuongThanCong.com https://fb.com/tailieudientucntt