1. Ki m th (9)
Nguy n Thanh Bình
Khoa Công ngh Thông tin
Trư ng ð i h c Bách khoa
ð i h c ðà N ng
N i dung
Gi i thi u v ki m th
Ki m th trong ti n trình phát tri n
Ki m th h p ñen
Ki m th h p tr ng
2
1
2. Ki m th là gì ?
IEEE: Ki m th là ti n trình v n hành
h th ng ho c thành ph n dư i
nh ng ñi u ki n xác ñ nh, quan sát
ho c ghi nh n k t qu và ñưa ra ñánh
giá v h th ng ho c thành ph n ñó
Myers: Ki m th là ti n trình th c thi
chương trình v i m c ñích tìm th y l i
(The art of software testing)
3
Ki m th là gì ?
Ki m th ≠ G r i (debug)
Ki m th
• nh m phát hi n l i
G r i
• xác ñ nh b n ch t l i và ñ nh v l i trong
chương trình
• ti n hành s a l i
4
2
3. Các khái ni m
M t sai sót (error) là m t s nh m l n hay m t s
hi u sai trong quá trình phát tri n ph n m m c a
ngư i phát tri n
M t l i (fault, defect) xu t hi n trong ph n m m
như là k t qu c a m t sai sót
M t h ng hóc (failure) là k t qu c a m t l i xu t
hi n làm cho chương trình không ho t ñ ng ñư c
hay ho t ñ ng nhưng cho k t qu không như mong
ñ i
sai sót l i h ng hóc
5
Các khái ni m
D li u th (test data)
d li u vào c n cung c p cho ph n m m
trong khi th c thi
K ch b n ki m th (test scenario)
các bư c th c hi n khi khi ki m th
Phán xét ki m th (test oracle)
ñánh giá k t qu c a ki m th
• t ñ ng: chương trình
• th công: con ngư i
6
3
4. Các khái ni m
Ki m th viên (tester)
ngư i th c hi n ki m th
Ca ki m th (test case)
t p d li u th
ñi u ki n th c thi
k t qu mong ñ i
7
Các khái ni m
8
4
5. Ti n trình ki m th
Ki m th thư ng bao g m các bư c
thi t k các ca ki m th
bư c t o d li u th
• ki m th v i t t c các d li u vào là c n thi t
• không th ki m th “vét c n”
• ch n t p các d li u th ñ i di n t mi n d li u vào
• d a trên các tiêu chu n ch n d li u th
bư c th c thi chương trình trên d li u th
• cung c p d li u th
• th c thi
• ghi nh n k t qu
bư c quan sát k t qu ki m th
• th c hi n trong khi ho c sau khi th c thi
• so sánh k t qu nh n ñư c và k t qu mong ñ i
9
Ti n trình ki m th
10
5
6. Khó khăn c a ki m th
Liên quan ñ n ti n trình phát tri n
g m nhi u giai ño n phát tri n
• cái ra c a m t giai ño n là cái vào c a giai ño n khác
• m t mát thông tin
V m t con ngư i
thi u ñào t o
ít chú tr ng vai trò ki m th
V m t k thu t
không t n t i thu t toán t ng quát có th ch ng minh
s ñúng ñ n hoàn toàn c a b t kỳ m t chương trình
nào
11
T i sao ki m th
H p th c hóa (validation)
ch ra r ng s n ph m ñáp ng ñư c yêu c u ngư i
s d ng
Xác minh (verification)
ch ra r ng s n ph m th a mãn ñ c t yêu c u
Phân bi t h p th c hóa và xác minh
“Verification: Are we building the product right ?”
“Validation: Are we building the right product ?”
12
6
7. Ki m th trong ti n trình
phát tri n
Các k thu t ki m th
k thu t ki m th tĩnh (static testing)
k thu t ki m th ñ ng (dynamic testing)
• ki m th h p ñen (black-box testing)
• k thu t ki m th ch c năng (functional testing)
• ki m th h p tr ng (white-box testing)
• k thu t ki m th c u trúc (structural testing)
Các ho t ñ ng ki m th /chi n lư c ki m th
ki m th ñơn v (unit testing)
ki m th tích h p (integration testing)
ki m th h p th c hóa (validation testing)
ki m th h i quy (regression testing)
13
Ki m th trong ti n trình
phát tri n
Ki m th ñơn v (unit testing)
ki m th m i ñơn v ph n m m (mô-ñun)
s d ng k thu t ki m th h p ñen
d li u th ñươc t o ra d a trên tài li u thi t
k
có th s d ng c ki m th h p tr ng và
ki m th tĩnh
• ph n m m yêu c u ch t lư ng cao
thư ng ñư c th c hi n trên ph n c ng phát
tri n ph n m m
14
7
8. Ki m th trong ti n trình
phát tri n
Ki m th tích h p (integration testing)
sau khi ñã th c hi n ki m th ñơn v
ghép n i các ñơn v /thành ph n ph n m m
ki m th s ghép n i, trao ñ i d li u gi a
các ñơn v /thành ph n
s d ng k thu t ki m th h p ñen
môt s trư ng h p, s d ng k thu t ki m
th h p tr ng
• chi phí cao, khó khăn
d li u th ñư c t o ra d a trên thi t k
t ng th
15
Ki m th trong ti n trình
phát tri n
Ki m th tích h p (2)
c n xây d ng thêm
• nút trám (stub): các thành ph n khác mô
ph ng các thành ph n ph n m m chưa
ñư c tích h p
• trình ñi u khi n (driver): các thành ph n
t o ra các d li u vào cho m t vài các
thành ph n ph n m m trong t p h p
ñang ñư c ki m th
16
8
9. Ki m th trong ti n trình
phát tri n
Ki m th tích h p (3)
17
Ki m th trong ti n trình
phát tri n
Ki m th tích h p (4)
chi n lư c t trên xu ng (top-down)
• ki m th tích h p các thành ph n chính trư c, sau ñó thêm
vào các thành ph n ñư c g i tr c ti p b i các thành ph n v a
ki m th
• cho phép xác ñ nh s m các l i v ki n trúc
• các b d li u th có th ñư c tái s d ng cho các bư c ti p
theo
• tuy nhiên chi n lư c này ñòi h i ph i xây d ng nhi u nút trám
chi n lư c t dư i lên (bottom-up)
• ki m th các thành ph n không g i các thành ph n khác, sau
ñó thêm vào các thành ph n g i các thành ph n v a ki m th
• ít s d ng các nút trám
• nhưng l i xác ñ nh l i tr hơn
18
9
10. Ki m th trong ti n trình
phát tri n
Ki m th h p th c hóa (validation testing)
còn g i là ki m th h th ng (system
testing)
th c hi n sau khi ki m th tích h p k t thúc
ch ng minh ph n m m th c hi n ñúng
mong ñ i c a ngư i s d ng
d a vào yêu c u ngư i s d ng
ch s d ng k thu t ki m th h p ñen
nên th c hi n trong môi trư ng mà ph n
m m s ñư c s d ng
19
Ki m th trong ti n trình
phát tri n
Ki m th h i quy (regression testing)
ph n m m sau khi ñưa vào s d ng, có th
có các ch nh s a
• có th phát sinh l i m i
c n ki m th l i: ki m th h i quy
thư ng tái s d ng các b d li u th ñã s
d ng trong các giai ño n trư c
20
10
11. Ki m th trong mô hình V
ð c t yêu c u Ki m th h p th c hóa
Thi t k ki n trúc Ki m th tích h p
Thi t k chi ti t Ki m th ñơn v
Mã hóa
21
Các k thu t ki m th
k thu t ki m th tĩnh (static testing)
• không th c thi chương trình
k thu t ki m th ñ ng (dynamic
testing)
• ki m th h p ñen (black-box testing)
• k thu t ki m th ch c năng (functional
testing)
• ki m th h p tr ng (white-box testing)
• k thu t ki m th c u trúc (structural testing)
22
11
12. Ki m th tĩnh
Thanh tra mã ngu n (code inspection)
Ch ng minh hình th c
Th c thi hình th c (symbolic execution)
ðánh giá ñ ph c t p
McCabe
Nejmeh
23
Ki m th h p ñen
Inputs causing
anomalous
Input test data I behaviour
e
System
Outputs which reveal
the presence of
Output test results Oe defects
24
12
13. Ki m th h p ñen
Ch c n d a vào ñ c t chương trình
Xây d ng d li u th trư c khi mã hóa/l p
trình
Thư ng phát hi n các l i ñ c t yêu c u,
thi t k
D dàng th c hi n
Chi phí th p
25
Ki m th h p ñen
Ki m th giá tr biên (boundary value
analysis)
Ki m th l p tương ñương (equivalence
class testing)
Ki m th ng u nhiên (random testing)
ð th nhân-qu (cause-efect graph)
Ki m th cú pháp
26
13
14. Ki m th giá tr biên
Cơ s
l i thư ng xu t hi n g n các giá tr biên c a mi n dũ
li u
T p trung phân tích các giá tr biên c a mi n d li u
ñ xây d ng d li u ki m th
Nguyên t c: ki m th các d li u vào g m
giá tr nh nh t
giá tr g n k l n hơn giá tr nh nh t
giá tr bình thư ng
giá tr g n k nh hơn giá tr l n nh t
giá tr l n nh t
27
Ki m th giá tr biên
28
14
15. Ki m th giá tr biên
Nguyên t c ch n d li u th
N u d li u vào thu c m t kho ng, ch n
• 2 giá tr biên
• 4 giá tr = giá tr biên ± sai s nh nh t
N u giá tr vào thu c danh sách các giá tr , ch n
• ph n t th nh t, ph n t th hai, ph n t k cu i và ph n t
cu i
N u d li u vào là ñi u ki n ràng bu c s giá tr , ch n
• s giá tr t i thi u, s giá tr t i ña và m t s các s giá tr
không h p l
T v n d ng kh năng và th c t ñ ch n các giá tr biên
c n ki m th
29
Ki m th giá tr biên
Ví d (1)
Chương trình nh n vào ba s th c, ki m tra ba s
th c có là ñ dài ba c nh m t tam giác. N u là ñ dài
ba c nh c a m t tam giác, thì ki m tra xem ñó là tam
giác thư ng, cân, ñ u cũng như ki m tra ñó là tam
giác nh n, vuông hay tù.
30
15
16. Ki m th giá tr biên
Ví d (2)
D li u th
1, 1, 2 Không là tam giác
0, 0, 0 Ch m t ñi m
4, 0, 3 M t c nh b ng không
1, 2, 3.00001 G n là m t tam giác
0.001, 0.001, 0.001 Tam giác r t nh
99999, 99999, 99999 Tam giác r t l n
3.00001, 3, 3 Tam giác g n ñ u
2.99999, 3, 4 Tam giác g n cân
3, 4, 5.00001 Tam giác giác g n vuông
3, 4, 5, 6 B n giá tr
3 Ch m t giá tr
D li u vào r ng
-3, -3, 5 Giá tr âm
31
Ki m th l p tương ñương
Ý tư ng
phân ho ch mi n
d li u vào thành
các l p các d
li u có quan h
v i nhau
m i l p dùng ñ
ki m th m t
ch c năng, g i là
l p tương ñương
32
16
17. Ki m th l p tương ñương
Ba bư c
ñ i v i m i d li u vào, xác ñ nh các l p
tương ñương t mi n d li u vào
ch n d li u ñ i di n cho m i l p tương
ñương
k t h p các d li u th b i tích ð -các ñ
t i ra b d li u ki m th
33
Ki m th l p tương ñương
Nguyên t c phân ho ch các l p tương ñương
N u d li u vào thu c m t kho ng, xây d ng
• 1 l p các giá tr l n hơn
• 1 l p các giá tr nh hơn
• n l p các giá tr h p l
N u d li u là t p h p các giá tr , xây d ng
• 1 l p v i t p r ng
• 1 l p quá nhi u các giá tr
• nl ph pl
N u d li u vào là ñi u ki n ràng bu c, xây d ng
• 1 l p v i ràng bu c ñư c th a mãn
• 1 l p v i ràng bu c không ñư c th a mãn
34
17
18. Ki m th l p tương ñương
Ví d
Bài toán tam giác
Nh n Vuông Tù
Thư ng 6,5,3 5,6,10 3,4,5
Cân 6,1,6 7,4,4 √2,2,√2
ð u 4,4,4 không th không th
Không là tam giác -1,2,8
35
Bài t p
Ki m th giá tr biên
Vi t m t chương trình th ng kê phân tích m t t p
ch a tên và ñi m c a sinh viên trong m t năm h c.
T p này ch a nhi u nh t 100 trư ng. M i trư ng
ch a tên c a m i sinh viên (20 ký t ), gi i tính (1 ký
t ) và ñi m c a 5 môn h c (t 0 ñ n 10). M c ñích
chương trình:
• tính di m trung bình m i sinh viên
• tính ñi m trung bình chung (theo gi i tính et theo môn
h c)
• tính s sinh viên lên l p (ñi m trung bình trên 5)
Xây d ng d li u th cho chương trình trên b i ki m
th giá tr biên
36
18
19. Bài t p
Ki m th l p tương ñương
Vi t chương trình d ch, trong ñó có câu l nh FOR,
ñ c t câu l nh FOR như sau: “L nh FOR ch ch p
nh n m t tham s duy nh t là bi n ñ m. Tên bi n
không ñư c s d ng quá hai ký t khác r ng. Sau ký
hi u = là c n dư i và c n trên c a bi n ñ m. Các c n
trên và c n dư i là các s nguyên dương và ñư c
ñ t gi a t khóa TO”.
Xây d ng d li u th ñ ki m th câu l nh FOR theo
k thu t ki m th l p tương ñương
37
Ki m th h p tr ng
D a vào mã ngu n/c u trúc chương trình
Xây d ng d li u th sau khi mã hóa/l p
trình
Thư ng phát hi n các l i l p trình
Khó th c hi n
Chi phí cao
38
19
20. Các k thu t ki m th h p
tr ng
Ki m th d a trên ñ th lu ng ñi u khi n
Ki m th d a trên ñ th lu ng d li u
Ki m th ñ t bi n (mutation testing)
39
ð th lu ng ñi u khi n
ð th lu ng ñi u khi n (Control Flow Graph -
ðTLðK) là ñ th có hư ng, bi u di n m t chương
trình
ñ nh: bi u di n l nh tu n t hay kh i l nh
cung: bi u di n các r nhánh
m t ñ nh vào và m t ñ nh ra ñư c thêm vào ñ bi u
di n ñi m vào và ra c a chương trình
L trình (path) trong ðTLðK
xu t phát t ñ nh vào ñi qua các ñ nh và cung trong
ñ th và k t thúc t i ñ nh ra
40
20
21. ð th lu ng ñi u khi n
Ví d 1
if x <= 0 then
x := -x
else
x := 1 -x;
if x = -1 then
x=1
else
x := x+1;
writeln(x);
41
ð th lu ng ñi u khi n
Ví d 1 (2)
Có 4 l trình
• [a, b, d, f, g]
• [a, b, d, e, g]
• [a, c, d, f, g]
• [a, c, d, e, g]
42
21
22. ð th lu ng ñi u khi n
Ví d 1 (3)
ð th G1 có th bi u di n d ng bi u th c
chính quy:
G1 = abdfg + abdeg + acdfg + acdeg
Hay ñơn gi n:
G1 = a(bdf + bde + bdf + bde)g
G1 = a(b + c)d(e + f)g
43
ð th lu ng ñi u khi n
Bi u di n các c u trúc
C u trúc tu n t : ab
C u trúc r nhánh: b(a + d)c
C u trúc l p: ab(cb)*d
44
22
23. ð th lu ng ñi u khi n
Ví d 2
i := 1;
found:= false;
while (not found) do
begin
if (a[i] = E) then
begin
found:= true;
s := i;
end;
i := i + 1;
end;
ε
G2 = ab(c(ε + d)eb)*f
45
ð th lu ng ñi u khi n
Bài t p 1
V ñ th lu ng ñi u khi n
Xây d ng bi u th c chính quy bi u di n ñ th
if n <= 0 then
n := 1-n
end;
if (n mod 2) = 0 then
n := n / 2
else
n := 3*n + 1
end ;
write(n);
46
23
24. ð th lu ng ñi u khi n
Bài t p 2
V ñ th lu ng ñi u khi n
Xây d ng bi u th c chính quy bi u di n ñ th
read(i);
s := 0;
while(i <= 3) do
begin
if a[i] > 0 thens := s + a[i];
i := i + 1;
end
47
Ki m th d a trên ðTLðK
Các tiêu chu n bao ph
Ph t tc các ñ nh/l nh
Ph t tc các cung
Ph t tc các quy t ñ nh
Ph t tc các ñư ng ñi
48
24
25. Ki m th d a trên ðTLðK
Ph t t c các ñ nh/l nh
Cho phép ph t t c các ñ nh/l nh
m i l nh ñư c th c thi ít nh t m t l n
tiêu chu n t i thi u
functionsum(x,y : integer) : integer;
begin
if (x = 0) then
sum := x
else
sum := x + y
end;
Khi th c thi l trình acd s phát hi n l i
49
Ki m th d a trên ðTLðK
Ph t t c các ñ nh/l nh
H n ch c a tiêu chu n
read(x);
…
if (x <> 0) then x := 1;
…
y := 1/x;
Ph t t c các ñ nh không phát hi n ñư c phát hi n l i
50
25
26. Ki m th d a trên ðTLðK
Ph t t c các cung
Ph t t c các cung ít nh t m t l n
ph t t các giá tr ñúng sai c a m t bi u th c lô-gíc
ph t t c các cung kéo theo ph t t c các ñ nh
if ((a < 2) and (b = a))
then
x := 2 -a
else
x := a -2
D li u th DT1 = {a=b=1} và DT2 = {a=b=3} th a mãn ph
t t c các cung, nhưng không ph t t c các quy t ñ nh,
51 ch ng h n DT3 = {a=3, b=2}
Ki m th d a trên ðTLðK
Ph t t c các quy t ñ nh
Ph t t c các quy t ñ nh ñư c th a mãn khi:
tiêu chu n ph t t c các cung ñư c th a mãn và
m i bi u th c con c a bi u th c ñi u ki n ñư c th
v i t t c các giá tr có th
N u (a AND b)
a = b = true
a = b = false
a = true, b = false
a = false, b = true
52
26
27. Ki m th d a trên ðTLðK
Ph t t c các quy t ñ nh
D li u th
DT1 = {a = b = 1}
DT2 = {a = 1, b = 0}
DT3 = {a = 3, b = 2}
DT4 = {a = b = 3}
53
Ki m th d a trên ðTLðK
Ph t t c các quy t ñ nh
H n ch
Không phát hi n l i trư ng h p không th c thi
vòng l p
read(inf, sup);
i := inf;
sum:= 0;
while(i <= sup) do
begin
sum:= sum+ a[i];
i := i + 1;
end;
writeln(1/sum);
D li u th DT1 = {a[1]=50, a[2]=60, a[3]=80, inf=1, sup=3} ph
54 t t c các cung/quy t ñ nh, nhưng không phát hi n l i
27
28. Ki m th d a trên ðTLðK
Ph t t c các l trình
M i l trình ph i ñư c th c thi ít nh t m t
l n
G p khó khăn khi s l n l p vô h n
Ch th c hi n m t s l n l p nh t ñ nh
Ho c ch th c hi n hai lo i l trình
• các l trình vư t qua vòng l p nhưng không l p
• các l trình ch l p n l n (ch ng h n n = 1)
55
Ki m th d a trên ðTLðK
Ph t t c các l trình
D li u th
DT1 = {a[1]=50, a[2]=60, a[3]=80, inf=1, sup=3}
DT2 = {a[1]=50, a[2]=60, a[3]=80, inf=3, sup=2}
56
28
29. Ki m th d a trên ðTLðK
Bài t p
Xây d ng d li u th th a mãn các tiêu chu n
ph t t c các ñ nh
ph t t c các cung
ph t t c các l trình
if n ≤ 0 then
n := 1-n
end;
if (n mod 2) = 0
then
n := n / 2
else
n := 3*n + 1
end ;
write(n);
57
Ki m th d a trên ðTLðK
Bài t p
Xây d ng d li u th th a mãn các tiêu chu n ph
t t c các l trình
function goodstring(var count : integer) : boolean;
var ch : char;
begin
goodstring := false;
count := 0;
read(ch);
if ch = ‘a’ then
begin
read(ch)
while(ch = ‘b’) or (ch = ‘c’) do begin
count := count + 1;
read(ch);
end;
if ch = ‘x’ then goodstring = true;
end;
58 end;
29