際際滷

際際滷Share a Scribd company logo
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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===

More Related Content

際際滷 bai giang_kiem_thu

  • 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===