1. 1
Ki m th
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
2
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. 2
3
Ki m th l g狸 ?
IEEE: Ki m th l ti n tr狸nh v n hnh
h th ng ho c thnh 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 thnh 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)
4
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 hnh s a l i
3. 3
5
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 lm 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
6
C叩c kh叩i ni m
D li u th (test data)
d li u vo 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
4. 4
7
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
8
C叩c kh叩i ni m
5. 5
9
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 vo 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 vo
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
10
Ti n tr狸nh ki m th
6. 6
11
Kh坦 khn 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 vo 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 hon ton c a b t k畛 m t ch動董ng tr狸nh
no
12
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 ?
7. 7
13
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 nng (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)
14
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 ti 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
8. 8
15
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 /thnh 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 /thnh 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坦 khn
d li u th 単動 c t o ra d a tr棚n thi t k
t ng th
16
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 thnh ph n kh叩c m担
ph ng c叩c thnh ph n ph n m m ch動a
単動 c t鱈ch h p
tr狸nh 単i u khi n (driver): c叩c thnh ph n
t o ra c叩c d li u vo cho m t vi c叩c
thnh ph n ph n m m trong t p h p
単ang 単動 c ki m th
9. 9
17
Ki m th trong ti n tr狸nh
ph叩t tri n
Ki m th t鱈ch h p (3)
18
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 thnh ph n ch鱈nh tr動 c, sau 単坦 th棚m
vo c叩c thnh ph n 単動 c g i tr c ti p b i c叩c thnh 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 ny 単嘆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 thnh ph n kh担ng g i c叩c thnh ph n kh叩c, sau
単坦 th棚m vo c叩c thnh ph n g i c叩c thnh 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
10. 10
19
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 vo 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
20
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 vo 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
11. 11
21
Ki m th trong m担 h狸nh V
丹 c t y棚u c u
Thi t k ki n tr炭c
Thi t k chi ti t
M達 h坦a
Ki m th h p th c h坦a
Ki m th t鱈ch h p
Ki m th 単董n v
22
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 nng (functional
testing)
ki m th h p tr ng (white-box testing)
k thu t ki m th c u tr炭c (structural testing)
12. 12
23
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
24
Ki m th h p 単en
I
e
Input test data
OeOutput test results
System
Inputs causing
anomalous
behaviour
Outputs which reveal
the presence of
defects
13. 13
25
Ki m th h p 単en
Ch c n d a vo 単 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 dng th c hi n
Chi ph鱈 th p
26
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
14. 14
27
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 vo 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
28
Ki m th gi叩 tr bi棚n
15. 15
29
Ki m th gi叩 tr bi棚n
Nguy棚n t c ch n d li u th
N u d li u vo 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 vo 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 vo l 単i u ki n rng 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 nng v th c t 単 ch n c叩c gi叩 tr bi棚n
c n ki m th
30
Ki m th gi叩 tr bi棚n
V鱈 d (1)
Ch動董ng tr狸nh nh n vo ba s th c, ki m tra ba s
th c c坦 l 単 di ba c nh m t tam gi叩c. N u l 単 di
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湛.
16. 16
31
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 vo r ng
-3, -3, 5 Gi叩 tr 但m
32
Ki m th l p t動董ng 単動董ng
t動 ng
ph但n ho ch mi n
d li u vo thnh
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 nng, g i l
l p t動董ng 単動董ng
17. 17
33
Ki m th l p t動董ng 単動董ng
Ba b動 c
単 i v i m i d li u vo, x叩c 単 nh c叩c l p
t動董ng 単動董ng t mi n d li u vo
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
34
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 vo 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
n l p h p l
N u d li u vo l 単i u ki n rng bu c, x但y d ng
1 l p v i rng bu c 単動 c th a m達n
1 l p v i rng bu c kh担ng 単動 c th a m達n
18. 18
35
Ki m th l p t動董ng 単動董ng
V鱈 d
Bi 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
36
Bi 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 nm h c.
T p ny 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
19. 19
37
Bi 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
38
Ki m th h p tr ng
D a vo 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
20. 20
39
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)
40
丹 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 vo v m t 単 nh ra 単動 c th棚m vo 単 bi u
di n 単i m vo v ra c a ch動董ng tr狸nh
L tr狸nh (path) trong 丹TL丹K
xu t ph叩t t 単 nh vo 単i qua c叩c 単 nh v cung trong
単 th v k t th炭c t i 単 nh ra
21. 21
41
丹 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);
42
丹 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]
22. 22
43
丹 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
44
丹 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
23. 23
45
丹 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
46
丹 th lu ng 単i u khi n
Bi 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);
24. 24
47
丹 th lu ng 単i u khi n
Bi 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
48
Ki m th d a tr棚n 丹TL丹K
C叩c ti棚u chu n bao ph
Ph t t c c叩c 単 nh/l nh
Ph t t c c叩c cung
Ph t t c c叩c quy t 単 nh
Ph t t c c叩c 単動 ng 単i
25. 25
49
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
50
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
26. 26
51
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,
ch ng h n DT3 = {a=3, b=2}
52
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
27. 27
53
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}
54
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
t t c c叩c cung/quy t 単 nh, nh動ng kh担ng ph叩t hi n l i
28. 28
55
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坦 khn 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)
56
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}
29. 29
57
Ki m th d a tr棚n 丹TL丹K
Bi 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);
58
Ki m th d a tr棚n 丹TL丹K
Bi 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;
end;
===H T===