Chương 6
Kiểm thử dòng điều khiển
Trong chương này, chúng ta sẽ tìm hiểu chi tiết về phương pháp kiểm thử
dòng dữ liệu (control flow testing) nhằm phát hiện các lỗi tiềm ẩn bên trong
chương trình/đơn vị chương trình cần kiểm thử. Các lỗi này thường khó phát
hiện bởi các kỹ thuật kiểm thử hàm hay kiểm thử chức năng được trình bày
trong chương 5. Để áp dụng phương pháp này, chúng ta cần phân tích mã
nguồn và xây dựng các ca kiểm thử ứng với các dòng điều khiển của chương
trình/đơn vị chương trình. Các độ đo hay tiêu chí kiểm thử cho phương pháp
này cũng sẽ được giới thiệu.
6.1 Kiểm thử hộp trắng
Kiểm thử hộp trắng sử dụng các chiến lược cụ thể và sử dụng mã nguồn của
chương trình/đơn vị phần mềm cần kiểm thử nhằm kiểm tra xem chương
trình/đơn vị phần mềm có thực hiện đúng so với thiết kế và đặc tả hay không.
Trong khi các phương pháp kiểm thử hộp đen hay kiểm thử hàm/chức năng
chỉ cho phép phát hiện các lỗi/khiếm khuyết có thể quan sát được, kiểm
thử hộp trắng cho phép phát hiện các lỗi/khiếm khuyết tiềm ẩn bên trong
chương trình/đơn vị phần mềm. Các lỗi này thường khó phát hiện bởi các
phương pháp kiểm thử hộp đen. Kiểm thử hộp đen và kiểm thử hộp trắng
không thể thay thế cho nhau mà chúng cần được sử dụng kết hợp với nhau
trong một quy trình kiểm thử thống nhất nhằm đảm bảo chất lượng phần
mềm. Tuy nhiên, để áp dụng các phương pháp kiểm thử hộp trắng, người
137138 CHƯƠNG 6. KIỂM THỬ DÒNG ĐIỀU KHIỂN
kiểm thử không chỉ cần hiểu rõ giải thuật mà còn cần có các kỹ năng và kiến
thức tốt về ngôn ngữ lập trình được dùng để phát triển phần mềm, nhằm
hiểu rõ mã nguồn của chương trình/đơn vị phần mềm cần kiểm thử. Do vậy,
việc áp dụng các phương pháp kiểm thử hộp trắng thường tốn thời gian và
công sức nhất là khi chương trình/đơn vị phần mềm có kích thước lớn. Vì
lý do này, các phương pháp kiểm thử hộp trắng chủ yếu được sử dụng cho
kiểm thử đơn vị [D.95].
Hai phương pháp được sử dụng trong kiểm thử hộp trắng là kiểm thử
dòng điều khiển (control flow testing) và kiểm thử dòng dữ liệu (data flow
testing). Phương pháp kiểm thử dòng điều khiển tập trung kiểm thử tính
đúng đắn của các giải thuật sử dụng trong các chương trình/đơn vị phần
mềm. Phương pháp kiểm thử dòng dữ liệu tập trung kiểm thử tính đúng đắn
của việc sử dụng các biến dữ liệu sử dụng trong chương trình/đơn vị phần
mềm. Trong chương này, chúng ta sẽ tìm hiểu chi tiết về phương pháp kiểm
thử dòng điều khiển. Phương pháp kiểm thử dòng dữ liệu sẽ được giới thiệu
trong chương 7.
134 trang |
Chia sẻ: thuyduongbt11 | Ngày: 10/06/2022 | Lượt xem: 439 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Giáo trình Kiểm thử phần mềm (Phần 2) - Phạm Ngọc Hùng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Ch֓ng 6
Kiºm thû dáng i·u khiºn
Trong ch÷ìng n y, chóng ta s³ t¼m hiºu chi ti¸t v· ph÷ìng ph¡p kiºm thû
dáng dú li»u (control flow testing) nh¬m ph¡t hi»n c¡c léi ti·m ©n b¶n trong
ch÷ìng tr¼nh/ìn và ch÷ìng tr¼nh c¦n kiºm thû. C¡c léi n y th÷íng khâ ph¡t
hi»n bði c¡c kÿ thuªt kiºm thû h m hay kiºm thû chùc n«ng ÷ñc tr¼nh b y
trong ch÷ìng 5. º ¡p döng ph÷ìng ph¡p n y, chóng ta c¦n ph¥n t½ch m¢
nguçn v x¥y düng c¡c ca kiºm thû ùng vîi c¡c dáng i·u khiºn cõa ch÷ìng
tr¼nh/ìn và ch÷ìng tr¼nh. C¡c ë o hay ti¶u ch½ kiºm thû cho ph÷ìng ph¡p
n y công s³ ÷ñc giîi thi»u.
6.1 Kiºm thû hëp trng
Kiºm thû hëp trng sû döng c¡c chi¸n l÷ñc cö thº v sû döng m¢ nguçn cõa
ch÷ìng tr¼nh/ìn và ph¦n m·m c¦n kiºm thû nh¬m kiºm tra xem ch÷ìng
tr¼nh/ìn và ph¦n m·m câ thüc hi»n óng so vîi thi¸t k¸ v °c t£ hay khæng.
Trong khi c¡c ph÷ìng ph¡p kiºm thû hëp en hay kiºm thû h m/chùc n«ng
ch¿ cho ph²p ph¡t hi»n c¡c léi/khi¸m khuy¸t câ thº quan s¡t ÷ñc, kiºm
thû hëp trng cho ph²p ph¡t hi»n c¡c léi/khi¸m khuy¸t ti·m ©n b¶n trong
ch÷ìng tr¼nh/ìn và ph¦n m·m. C¡c léi n y th÷íng khâ ph¡t hi»n bði c¡c
ph÷ìng ph¡p kiºm thû hëp en. Kiºm thû hëp en v kiºm thû hëp trng
khæng thº thay th¸ cho nhau m chóng c¦n ÷ñc sû döng k¸t hñp vîi nhau
trong mët quy tr¼nh kiºm thû thèng nh§t nh¬m £m b£o ch§t l÷ñng ph¦n
m·m. Tuy nhi¶n, º ¡p döng c¡c ph÷ìng ph¡p kiºm thû hëp trng, ng÷íi
137
138 CH×ÌNG 6. KIM THÛ DÁNG IU KHIN
kiºm thû khæng ch¿ c¦n hiºu rã gi£i thuªt m cán c¦n câ c¡c kÿ n«ng v ki¸n
thùc tèt v· ngæn ngú lªp tr¼nh ÷ñc dòng º ph¡t triºn ph¦n m·m, nh¬m
hiºu rã m¢ nguçn cõa ch÷ìng tr¼nh/ìn và ph¦n m·m c¦n kiºm thû. Do vªy,
vi»c ¡p döng c¡c ph÷ìng ph¡p kiºm thû hëp trng th÷íng tèn thíi gian v
cæng sùc nh§t l khi ch÷ìng tr¼nh/ìn và ph¦n m·m câ k½ch th÷îc lîn. V¼
lþ do n y, c¡c ph÷ìng ph¡p kiºm thû hëp trng chõ y¸u ÷ñc sû döng cho
kiºm thû ìn và [D.95].
Hai ph÷ìng ph¡p ÷ñc sû döng trong kiºm thû hëp trng l kiºm thû
dáng i·u khiºn (control flow testing) v kiºm thû dáng dú li»u (data flow
testing). Ph÷ìng ph¡p kiºm thû dáng i·u khiºn tªp trung kiºm thû t½nh
óng n cõa c¡c gi£i thuªt sû döng trong c¡c ch÷ìng tr¼nh/ìn và ph¦n
m·m. Ph÷ìng ph¡p kiºm thû dáng dú li»u tªp trung kiºm thû t½nh óng n
cõa vi»c sû döng c¡c bi¸n dú li»u sû döng trong ch÷ìng tr¼nh/ìn và ph¦n
m·m. Trong ch÷ìng n y, chóng ta s³ t¼m hiºu chi ti¸t v· ph÷ìng ph¡p kiºm
thû dáng i·u khiºn. Ph÷ìng ph¡p kiºm thû dáng dú li»u s³ ÷ñc giîi thi»u
trong ch֓ng 7.
6.2 ç thà dáng i·u khiºn
Ph÷ìng ph¡p kiºm thû dáng i·u khiºn düa tr¶n kh¡i ni»m ç thà dáng
i·u khiºn (control flow graph). ç thà n y ÷ñc x¥y düng tø m¢ nguçn cõa
ch÷ìng tr¼nh/ìn và ch÷ìng tr¼nh. ç thà dáng i·u khiºn l mët ç thà câ
h÷îng gçm c¡c ¿nh t÷ìng ùng vîi c¡c c¥u l»nh/nhâm c¥u l»nh v c¡c c¤nh
l c¡c dáng i·u khiºn giúa c¡c c¥u l»nh/nhâm c¥u l»nh. N¸u i v j l c¡c
¿nh cõa ç thà dáng i·u khiºn th¼ tçn t¤i mët c¤nh tø i ¸n j n¸u l»nh
t÷ìng ùng vîi j câ thº ÷ñc thüc hi»n ngay sau l»nh t÷ìng ùng vîi i.
X¥y düng mët ç thà dáng i·u khiºn tø mët ch÷ìng tr¼nh/ìn và ch÷ìng
tr¼nh kh¡ ìn gi£n. H¼nh 6.1 mæ t£ c¡c th nh ph¦n cì b£n cõa ç thà dáng
i·u khiºn bao gçm iºm bt ¦u cõa ìn và ch÷ìng tr¼nh, khèi xû lþ chùa
c¡c c¥u l»nh khai b¡o ho°c t½nh to¡n, iºm quy¸t ành ùng vîi c¡c c¥u l»nh
i·u ki»n trong c¡c khèi l»nh r³ nh¡nh ho°c l°p, iºm nèi ùng vîi c¡c c¥u
l»nh ngay sau c¡c l»nh r³ nh¡nh, v iºm k¸t thóc ùng vîi iºm k¸t thóc
cõa ìn và ch÷ìng tr¼nh. C¡c c§u tróc i·u khiºn phê bi¸n cõa ch÷ìng tr¼nh
÷ñc mæ t£ trong H¼nh 6.2. Chóng ta s³ sû döng c¡c th nh ph¦n cì b£n v
c¡c c§u tróc phê bi¸n n y º d¹ d ng x¥y düng ç thà dáng i·u khiºn cho
6.3. CC Ë O KIM THÛ 139
H¼nh 6.1: C¡c th nh ph¦n cì b£n cõa ç thà ch÷ìng tr¼nh.
H¼nh 6.2: C¡c c§u tróc i·u khiºn phê bi¸n cõa ch÷ìng tr¼nh.
måi ìn và ch÷ìng tr¼nh vi¸t b¬ng måi ngæn ngú lªp tr¼nh.
Chóng ta thû xem c¡ch düng ç thà dáng i·u khiºn cho ìn và ch÷ìng
tr¼nh câ m¢ nguçn b¬ng ngæn ngú C nh÷ H¼nh 6.3. Chóng ta ¡nh sè c¡c
dáng l»nh cõa ìn và ch÷ìng tr¼nh v l§y sè n y l m ¿nh cõa ç thà. iºm
xu§t ph¡t cõa ìn và ch÷ìng tr¼nh ùng vîi c¥u l»nh khai b¡o h m foo. ¿nh
1 ùng vîi c¥u l»nh khai b¡o bi¸n e. C¡c ¿nh 2 v 3 ùng vîi c¥u l»nh if.
¿nh 4 ùng vîi c¥u l»nh khai b¡o bi¸n x trong khi c¡c ¿nh 5 v 6 ùng vîi
c¥u l»nh if. ¿nh 7,8 ¤i di»n cho hai c¥u l»nh 7 v 8. Trong tr÷íng hñp
n y, chóng ta khæng t¡ch ri¶ng th nh hai ¿nh v¼ ¥y l hai c¥u l»nh tu¦n
tü n¶n chóng ta gh²p chóng th nh mët ¿nh nh¬m tèi thiºu sè ¿nh cõa ç
thà dáng i·u khiºn.
6.3 C¡c ë o kiºm thû
Kiºm thû h m (kiºm thû hëp en) câ h¤n ch¸ l chóng ta khæng bi¸t câ thøa
hay thi¸u c¡c ca kiºm thû hay khæng so vîi ch÷ìng tr¼nh c i °t v thi¸u
thøa ð mùc ë n o. ë o kiºm thû l mët cæng cö gióp ta o mùc ë bao
phõ ch÷ìng tr¼nh cõa mët tªp ca kiºm thû cho tr÷îc. Mùc ë bao phõ cõa
140 CH×ÌNG 6. KIM THÛ DÁNG IU KHIN
H¼nh 6.3: M¢ nguçn cõa h m foo v ç thà dáng i·u khiºn cõa nâ.
B£ng 6.1: C¡c ca kiºm thû cho ë o C1 cõa h m foo
ID Inputs EO RO Note
tc1 0, 1, 2, 3 0
tc2 1, 1, 2, 3 1
mët bë kiºm thû (tªp c¡c ca kiºm thû) ÷ñc o b¬ng t l» c¡c th nh ph¦n
thüc sü ÷ñc kiºm thû so vîi têng thº sau khi ¢ thüc hi»n c¡c ca kiºm thû.
Th nh ph¦n li¶n quan câ thº l c¥u 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. ë bao phõ c ng lîn th¼ ë tin
cªy cõa bë kiºm thû c ng cao. ë o n y gióp chóng ta kiºm so¡t v qu£n
lþ qu¡ tr¼nh kiºm thû tèt hìn. Möc ti¶u cõa chóng ta l kiºm thû vîi sè ca
kiºm thû tèi thiºu nh÷ng ¤t ÷ñc ë bao phõ tèi a. Câ r§t nhi·u ë o
kiºm thû ang ÷ñc sû döng hi»n nay, d÷îi ¥y l ba ë o kiºm thû ang
÷ñc sû döng phê bi¸n nh§t trong thüc t¸ [Lee03].
ë o kiºm thû c§p 1 (C1): méi c¥u l»nh ÷ñc thüc hi»n ½t nh§t mët l¦n
sau khi ch¤y c¡c ca kiºm thû (test cases). V½ dö, vîi h m foo câ m¢ nguçn
nh÷ trong H¼nh 6.3, ta ch¿ c¦n hai ca kiºm thû nh÷ B£ng 6.1 l ¤t 100%
ë phõ cho ë o C1 vîi EO (expected output) l gi¡ trà ¦u ra mong ñi v
RO (real output) l gi¡ trà ¦u ra thüc t¸ (gi¡ trà n y s³ ÷ñc i·n khi thüc
hi»n ca kiºm thû).
6.3. CC Ë O KIM THÛ 141
B£ng 6.2: C¡c tr÷íng hñp c¦n kiºm thû cõa ë o C2 vîi h m foo
iºm quy¸t ành i·u ki»n t÷ìng ùng óng Sai
2 a==0 tc1 tc2
5 (a == b) || (c == d) tc2 ?
B£ng 6.3: C¡c ca kiºm thû cho ë o C2 cõa h m foo
ID Inputs EO RO Note
tc1 0, 1, 2, 3 0
tc2 1, 1, 2, 3 1
tc3 1, 2, 1, 2 Léi chia cho 0
ë o kiºm thû c§p 2 (C2): c¡c iºm quy¸t ành trong ç thà dáng i·u
khiºn cõa ìn và kiºm thû ·u ÷ñc thüc hi»n ½t nh§t mët l¦n c£ hai nh¡nh
óng v sai. V½ dö, B£ng 6.2 mæ t£ c¡c tr÷íng hñp c¦n kiºm thû º ¤t ÷ñc
100% ë phõ cõa ë o C2 ùng vîi h m foo ÷ñc mæ t£ trong H¼nh 6.3.
Nh÷ vªy, vîi hai ca kiºm thû trong ë o kiºm thû c§p 1 (tc1 v tc2), ta
ch¿ kiºm thû ÷ñc 3/4 = 75% ùng vîi ë o kiºm thû c§p 2. Chóng ta c¦n mët
ca kiºm thû núa ùng vîi tr÷íng hñp sai cõa i·u ki»n (a == b) || (c == d)
nh¬m ¤t ÷ñc 100% ë phõ cõa ë o C2. B£ng 6.3 mæ t£ c¡c ca kiºm thû
cho möc ½ch n y.
ë o kiºm thû c§p 3 (C3): Vîi c¡c i·u ki»n phùc t¤p (chùa nhi·u i·u
ki»n con cì b£n), vi»c ch¿ quan t¥m ¸n gi¡ trà óng sai l khæng õ º kiºm
tra t½nh óng n cõa ch÷ìng tr¼nh ùng vîi i·u ki»n phùc t¤p n y. V½ dö,
n¸u mët i·u ki»n phùc t¤p gçm hai i·u ki»n con cì b£n, chóng ta câ bèn
tr÷íng hñp c¦n kiºm thû chù khæng ph£i hai tr÷íng hñp óng sai nh÷ ë o
C2. Vîi c¡c ìn và ch÷ìng tr¼nh câ y¶u c¦u cao v· t½nh óng n, vi»c tu¥n
thõ ë o C3 l h¸t sùc c¦n thi¸t. i·u ki»n º £m b£o ë o n y l c¡c
i·u ki»n con thuëc c¡c i·u ki»n phùc t¤p t÷ìng ùng vîi c¡c iºm quy¸t
ành trong ç thà dáng i·u khiºn cõa ìn và c¦n kiºm thû ·u ÷ñc thüc
hi»n ½t nh§t mët l¦n c£ hai nh¡nh óng v sai. V½ dö, B£ng 6.4 mæ t£ c¡c
tr÷íng hñp c¦n kiºm thû º ¤t ÷ñc 100% ë phõ cõa ë o C3 ùng vîi
142 CH×ÌNG 6. KIM THÛ DÁNG IU KHIN
B£ng 6.4: C¡c tr÷íng hñp c¦n kiºm thû cõa ë o C3 vîi h m foo
iºm quy¸t ành i·u ki»n t÷ìng ùng óng Sai
2 a==0 tc1 tc2
5 (a == b) tc2 tc3
5 (c == d) ? tc2
B£ng 6.5: C¡c ca kiºm thû cho ë o C3 cõa h m foo
ID Inputs EO RO Note
tc1 0, 1, 2, 3 0
tc2 1, 1, 2, 3 1
tc3 1, 2, 1, 2 Léi chia cho 0
tc4 1, 2, 1, 1 1
h m foo ÷ñc mæ t£ trong H¼nh 6.3.
Nh÷ vªy, vîi ba ca kiºm thû trong ë o kiºm thû c§p 2 (tc1, tc2 v tc3),
ta ch¿ kiºm thû ÷ñc 7/8 = 87,5% ùng vîi ë o kiºm thû c§p 3. Chóng ta
c¦n mët ca kiºm thû núa ùng vîi tr÷íng hñp sai cõa i·u ki»n con cì b£n
(c == d) nh¬m ¤t ÷ñc 100% ë phõ cõa ë o C3. B£ng 6.5 mæ t£ c¡c ca
kiºm thû cho möc ½ch n y.
6.4 Kiºm thû düa tr¶n ë o
Kiºm thû düa tr¶n ë o l ph÷ìng ph¡p ch¤y m¢ nguçn sao cho bao phõ
mët ë o n o â. H¼nh 6.4 mæ t£ quy tr¼nh kiºm thû düa tr¶n ë o cho
c¡c ìn và ch÷ìng tr¼nh. Vîi méi ìn và ch÷ìng tr¼nh, ç thà dáng i·u khiºn
ùng vîi c¡c ë o C1 v C2 l gièng nhau trong khi chóng kh¡c vîi ç thà
dáng i·u khiºn ùng vîi ë o C3. Vîi méi ìn và ch÷ìng tr¼nh v méi ë o
kiºm thû, chóng ta ti¸n h nh x¥y düng ç thà dáng i·u khiºn t÷ìng ùng.
C¡c ÷íng i cõa ch÷ìng tr¼nh (xu§t ph¡t tø iºm bt ¦u, i qua c¡c ¿nh
cõa ç thà v k¸t thóc ð iºm cuèi) ÷ñc x¡c ành sao cho khi chóng ÷ñc
thüc hi»n th¼ ë o kiºm thû t÷ìng ùng ÷ñc thäa m¢n. Düa tr¶n þ t÷ðng
6.4. KIM THÛ DÜA TRN Ë O 143
H¼nh 6.4: Quy tr¼nh kiºm thû ìn và ch÷ìng tr¼nh düa tr¶n ë o.
H¼nh 6.5: M¢ nguçn cõa h m foo v ç thà dáng i·u khiºn cõa nâ.
cõa T. J. McCabe [McC76, WM96], sè ÷íng i ch÷ìng tr¼nh ùng vîi ç thà
dáng i·u khiºn cõa nâ ÷ñc t½nh b¬ng mët trong c¡c ph÷ìng ph¡p sau:
Sè c¤nh sè ¿nh + 2
Sè ¿nh quy¸t ành + 1
Sau khi câ ÷ñc c¡c ÷íng i cõa ìn và ch÷ìng tr¼nh c¦n kiºm thû, vîi
méi ÷íng i, chóng ta s³ sinh mët ca kiºm thû t÷ìng ùng. Cuèi còng, c¡c
ca kiºm thû ÷ñc thüc hi»n tr¶n ìn và ch÷ìng tr¼nh nh¬m ph¡t hi»n c¡c léi.
6.4.1 Kiºm thû cho ë o C1
X²t l¤i h m foo câ m¢ nguçn nh÷ H¼nh 6.5. Chóng ta x¥y düng ç thà dáng
i·u khiºn ùng vîi ë phõ C1 cho h m n y nh÷ H¼nh 6.5. º ¤t ÷ñc 100%
144 CH×ÌNG 6. KIM THÛ DÁNG IU KHIN
B£ng 6.6: C¡c ca kiºm thû cho ë o C1 cõa h m foo
ID Test Path Inputs EO RO Note
tc1 1; 2; 4; 5; 6; 7,8 2, 2, 3, 5 1
tc2 1; 2; 3 0, 3, 2, 7 0
ë phõ cõa ë o C1, ta ch¿ c¦n hai ÷íng i nh÷ sau º £m b£o ÷ñc t§t
c£ c¡c c¥u l»nh cõa h m foo ÷ñc kiºm thû ½t nh§t mët l¦n. º kiºm tra vi»c
£m b£o ë o C1, chóng ta c¦n kiºm tra t§t c£ c¡c l»nh/khèi l»nh (1-8) ·u
÷ñc xu§t hi»n ½t nh§t mët l¦n trong c¡c ÷íng i n y. Rã r ng, hai ÷íng
i n y thäa m¢n i·u ki»n tr¶n n¶n chóng ta ¤t ÷ñc 100% ë phõ C1.
1. 1; 2; 4; 5; 6; 7,8
2. 1; 2; 3
Vîi ÷íng i 1; 2; 4; 5; 6; 7,8, ta s³ sinh mët ca kiºm thû º nâ ÷ñc
thüc thi khi thüc hi»n ca kiºm thû n y. Þ t÷ðng cõa vi»c sinh ca kiºm thû
n y l t¼m mët bë gi¡ trà ¦u v o cho a; b; c v d sao cho i·u ki»n ùng vîi
iºm quy¸t ành 2 (a == 0) l sai v i·u ki»n ùng vîi iºm quy¸t ành 5
((a == b) || (c == d)) l óng. Gi¡ trà ¦u ra mong ñi (EO) cõa ca kiºm
thû n y l 1. T÷ìng tü, ta s³ sinh ca kiºm thû ùng vîi ÷íng i 1; 2; 3 vîi
¦u ra mong ñi l 0. Chóng ta s³ t¼m mët bë ¦u v o sao cho i·u ki»n
(a == 0) l óng. B£ng 6.6 l mët v½ dö v· hai ca kiºm thû ÷ñc sinh ra
b¬ng þ t÷ðng tr¶n.
6.4.2 Kiºm thû cho ë o C2
Nh÷ chóng ta ¢ bi¸t, vîi méi ìn và ch÷ìng tr¼nh, ç thà dáng i·u khiºn
ùng vîi c¡c ë o C1 v C2 l gièng nhau. V¼ vªy, ç thà dáng i·u khiºn ùng
vîi ë o C1 cõa h m foo ÷ñc mæ t£ ð H¼nh 6.5 công l ç thà dáng i·u
khiºn cõa h m n y ùng vîi ë o C2. Tuy nhi¶n, º ÷ñc 100% ë phõ cõa
ë o C2 chóng ta c¦n tèi thiºu ba ÷íng i. T¤i sao chóng ta bi¸t ÷ñc i·u
n y? Nh÷ ¢ tr¼nh b y ð möc 6.4, chóng ta câ hai c¡ch º t½nh ÷ñc con sè
n y. V½ dö, ç thà dáng i·u khiºn cõa h m foo câ hai iºm quy¸t ành l 2
v 5 n¶n chóng ta c¦n 2 + 1 = 3 ÷íng i º ¤t ÷ñc 100% ë phõ cõa ë
6.4. KIM THÛ DÜA TRN Ë O 145
B£ng 6.7: C¡c ca kiºm thû cho ë o C2 cõa h m foo
ID Test Path Inputs EO RO Note
tc1 1; 2; 4; 5; 6; 7,8 2, 2, 3, 5 1
tc2 1; 2; 3 0, 3, 2, 7 0
tc3 1; 2; 4; 5; 7,8 2,3,4,5 léi chia cho 0
o C2. C¡c ÷íng i c¦n thi¸t ÷ñc li»t k¶ nh÷ sau. Rã r ng vîi ba ÷íng i
n y, c£ hai nh¡nh óng v sai cõa hai iºm quy¸t 2 v 5 ·u ÷ñc kiºm tra.
1. 1; 2; 4; 5; 6; 7,8
2. 1; 2; 3
3. 1; 2; 4; 5; 7,8
º sinh c¡c ca kiºm thû ùng vîi c¡c ÷íng i tr¶n, chóng ta ch¿ c¦n
quan t¥m ¸n ÷íng i (3) v¼ vi»c sinh c¡c ca kiºm thû cho c¡c ÷íng i
(1) v (2) ¢ ÷ñc tr¼nh b y ð möc kiºm thû cho ë o C1 (möc 6.4.1). Vîi
÷íng i (3), ta ch¿ c¦n chån mët bë ¦u v o sao cho i·u ki»n ùng vîi
iºm quy¸t ành 2 (a == 0) l sai v i·u ki»n ùng vîi iºm quy¸t ành 5
((a == b) || (c == d)) công l sai. Gi¡ trà ¦u ra mong ñi cõa ÷íng i
n y l léi chia cho 0. B£ng 6.7 l mët v½ dö v· ba ca kiºm thû ÷ñc sinh ra
b¬ng þ t÷ðng tr¶n ùng vîi c¡c ÷íng i (1), (2), v (3).
ë o C1 £m b£o c¡c c¥u l»nh ÷ñc vi¸ng th«m ½t nh§t mët l¦n khi
thüc hi»n t§t c£ c¡c ca kiºm thû ÷ñc sinh ra ùng vîi ë o n y. ¥y l ë
o kh¡ tèt v vi»c £m b£o ë o n y trong thüc t¸ công kh¡ tèn k²m. Tuy
nhi¶n, qua v½ dö tr¶n, chóng ta th§y r¬ng n¸u ch¿ sû döng ë o C1 vîi hai
ca kiºm thû nh÷ trong b£ng 6.6, léi chia cho khæng s³ khæng ÷ñc ph¡t hi»n.
Ch¿ khi kiºm tra c£ hai nh¡nh óng sai cõa t§t c£ c¡c iºm quy¸t ành (c¡c
l»nh i·u khiºn) th¼ léi n y mîi ÷ñc ph¡t hi»n nh÷ ca kiºm thû tc3 trong
b£ng 6.7.
6.4.3 Kiºm thû cho ë o C3
Nh÷ ¢ tr¼nh b y ð möc 6.3, ùng vîi méi ìn và ch÷ìng tr¼nh, ç thà dáng
i·u khiºn ùng vîi ë o C3 kh¡c vîi ç thà dáng i·u khiºn ùng vîi c¡c
146 CH×ÌNG 6. KIM THÛ DÁNG IU KHIN
H¼nh 6.6: H m foo v ç thà dáng i·u khiºn cõa nâ ùng vîi ë o C3.
ë o C1 v C2. V½ dö, ç thà dáng i·u khiºn cõa h m foo ùng vîi ë o
C3 ÷ñc x¥y düng nh÷ H¼nh 6.6. Vîi c¥u l»nh i·u ki»n 5, v¼ ¥y l i·u
ki»n phùc t¤p n¶n ta ph£i t¡ch th nh hai i·u ki»n con cì b£n l (a == b)
v (c == d) ùng vîi hai iºm quy¸t ành 5c1 v 5c2 trong ç thà dáng i·u
khiºn. Tø c¥u l»nh 4, n¸u i·u ki»n con (a == b) óng, ta khæng c¦n kiºm
tra i·u ki»n con cán l¤i (v¼ i·u ki»n phùc t¤p l ho°c cõa hai i·u ki»n
con cì b£n) v thüc hi»n c¥u l»nh 6. N¸u i·u ki»n con (a == b) l sai, ta
c¦n ti¸n h nh kiºm tra i·u ki»n con cì b£n cán l¤i (c == d). N¸u i·u ki»n
n y óng, ta ti¸n h nh c¥u l»nh 6. Ng÷ñc l¤i, chóng ta thüc hi»n c¡c c¥u
l»nh 7 v 8. Trong ç thà n y, chóng ta gëp hai l»nh 7 v 8 trong mët ¿nh
(¿nh (7,8)) v¼ ¥y l hai c¥u l»nh tu¦n tü. Möc ½ch cõa vi»c n y l nh¬m
tèi thiºu sè ¿nh cõa ç thà dáng i·u khiºn. Mët ç thà câ sè ¿nh c ng nhä
th¼ chóng ta c ng d¹ d ng trong vi»c sinh c¡c ÷íng i cõa ch÷ìng tr¼nh v
tr¡nh c¡c sai sât trong qu¡ tr¼nh n y.
ç thà dáng i·u khiºn cõa h m foo ùng vîi ë o C3 nh÷ H¼nh 6.6 câ
ba iºm quy¸t ành l 2, 5c1 v 5c2 n¶n chóng ta c¦n 3 + 1 = 4 ÷íng i
º ÷ñc 100% ë phõ cõa ë o C3. C¡c ÷íng i c¦n thi¸t ÷ñc li»t k¶ nh÷
sau:
1. 1; 2; 4; 5c1; 6; 7,8
2. 1; 2; 4; 5c1; 5c2; 6; 7,8
6.4. KIM THÛ DÜA TRN Ë O 147
B£ng 6.8: C¡c ca kiºm thû cho ë o C3 cõa h m foo
ID Test Path Inputs EO RO Note
tc1 1; 2; 4; 5c1; 6; 7,8 0, 2, 3, 5 0
tc2 1; 2; 4; 5c1; 5c2; 6; 7,8 2, 2, 2, 7 1
tc3 1; 2; 4; 5c1; 5c2; 7,8 2,3,4,5 léi chia cho 0
tc4 1; 2; 3 2,3,4,4 1
3. 1; 2; 4; 5c1; 5c2; 7,8
4. 1; 2; 3
T÷ìng tü nh÷ c¡c ph÷ìng ph¡p kiºm thû ë o C1 v C2, chóng ta d¹
d ng sinh c¡c ca kiºm thû t÷ìng ùng cho c¡c ÷íng i ch÷ìng tr¼nh nh÷ ¢
mæ t£ tr¶n. B£ng 6.8 l mët v½ dö v· c¡c ca kiºm thû cho h m foo ùng vîi
ë o C3.
6.4.4 Kiºm thû váng l°p
Cho dò chóng ta ti¸n h nh kiºm thû c¡c ìn và ch÷ìng tr¼nh vîi ë o C3
(ë o vîi y¶u c¦u cao nh§t), ph÷ìng ph¡p kiºm thû dáng i·u khiºn khæng
thº kiºm thû c¡c váng l°p xu§t hi»n trong c¡c ìn và ch÷ìng tr¼nh. Lþ do
l c¡c ÷íng i sinh ra tø ç thà dáng i·u khiºn khæng chùa c¡c váng l°p.
Trong thüc t¸, léi hay x£y ra ð c¡c váng l°p. V¼ lþ do n y, chóng ta c¦n sinh
th¶m c¡c ca kiºm thû cho c¡c váng l°p nh¬m gi£m t l» léi cõa c¡c ìn và
ch÷ìng tr¼nh. Vîi méi ìn và ch÷ìng tr¼nh câ váng l°p, chóng ta c¦n quan
t¥m ¸n ba tr÷íng hñp sau:
L»nh l°p ìn gi£n: ìn và ch÷ìng tr¼nh ch¿ chùa óng mët váng l°p
(th¥n cõa váng l°p khæng chùa c¡c váng l°p kh¡c).
L»nh l°p li·n k·: ìn và ch÷ìng tr¼nh ch¿ chùa c¡c l»nh l°p k¸ ti¸p
nhau.
L»nh l°p lçng nhau: ìn và ch÷ìng tr¼nh ch¿ chùa c¡c váng l°p chùa
c¡c l»nh l°p kh¡c.
148 CH×ÌNG 6. KIM THÛ DÁNG IU KHIN
H¼nh 6.7: H m average v ç thà dáng i·u khiºn cõa nâ ùng vîi ë o C3.
º kiºm thû c¡c ìn và ch÷ìng tr¼nh ch¿ câ l»nh l°p ìn gi£n, ta x²t h m
average vîi m¢ nguçn ç thà dáng i·u khiºn t÷ìng ùng vîi ë o C3 nh÷
H¼nh 6.7.
ç thà dáng i·u khiºn cõa h m average ùng vîi ë o C3 nh÷ H¼nh 6.7
câ n«m iºm quy¸t ành l 2, 3, 5, 6 v 9 n¶n chóng ta c¦n 5 + 1 = 6 ÷íng
i º ÷ñc 100% ë phõ cõa ë o C3. C¡c ÷íng i c¦n thi¸t ÷ñc li»t k¶
nh÷ sau:
1. 1; 2; 9; 10
2. 1; 2; 9; 11
3. 1; 2; 3; 9; 10
4. 1; 2; 3; 4; 5; 8; 2; 9; 11
5. 1; 2; 3; 4; 5; 6; 8; 2; 9; 11
6. 1; 2; 3; 4; 5; 6; 7; 8; 2; 9; 10
6.4. KIM THÛ DÜA TRN Ë O 149
B£ng 6.9: C¡c ca kiºm thû cho ë o C3 cõa h m average
ID Test Path Inputs EO RO Note
tc1 1; 2; 9; 10 tc6
tc2 1; 2; 9; 11 [-999, ...], 1, 2 -999
tc3 1; 2; 3; 9; 10 tc6
tc4 1; 2; 3; 4; 5; 8; 2; 9; 11 [0,-999], 1, 2 -999
tc5 1; 2; 3; 4; 5; 6; 8; 2; 9; 11 [3,-999], 1, 2 -999
tc6 1; 2; 3; 4; 5; 6; 7; 8; 2; 9; 10 [1,-999], 1, 2 1
Vîi méi ÷íng i, chóng ta s³ sinh mët ca kiºm thû t÷ìng ùng. B£ng 6.9
mæ t£ c¡c ca kiºm thû cho h m average ùng vîi ë o C3. Vîi méi ca
kiºm thû, bë dú li»u ¦u v o (inputs) gçm ba th nh ph¦n: double value[],
double min, v double max. Vîi ÷íng i 1; 2; 9; 10, chóng ta khæng thº t¼m
÷ñc bë dú li»u ¦u v o º ÷íng i n y ÷ñc thüc thi. Thüc vªy, i·u ki»n
º thüc thi ÷íng i n y l value[0] = -999 (tùc l i·u ki»n 2 l sai) v
i·u ki»n 9 óng (tùc l vcnt > 0). i·u n y khæng bao gií x£y ra v¼ n¸u
value[0] = -999 th¼ vcnt = 0. T÷ìng tü, chóng ta công khæng thº sinh bë
kiºm thû vîi ÷íng i 1; 2; 3; 9; 10. Trong c¡c tr÷íng hñp n y, chóng ta
khæng c¦n sinh c¡c ca kiºm thû cho nhúng ÷íng i n y. Chóng s³ ÷ñc
kiºm thû bði c¡c ÷íng i kh¡c (V½ dö: ÷íng i 1; 2; 3; 4; 5; 6; 7; 8; 2; 9;
10 chùa c¡c ¿nh cõa c¡c ÷íng d¨n tr¶n).
Vîi c¡c ÷íng i tr¶n, váng l°p while cõa h m average ch¿ ÷ñc thüc hi»n
tèi a mët l¦n l°p n¶n chóng ta r§t khâ º ph¡t hi»n c¡c léi ti·m ©n (câ thº
câ) b¶n trong váng l°p n y. C¡c léi n y câ thº x£y ra khi váng l°p n y ÷ñc
thüc hi»n nhi·u l¦n l°p. V½ dö tr¶n ¢ ch¿ ra nhúng h¤n ch¸ cõa ph÷ìng ph¡p
kiºm thû dáng i·u khiºn khi ¡p döng cho c¡c ch÷ìng tr¼nh/ìn và ch÷ìng
tr¼nh câ chùa váng l°p. º gi£i quy¸t v§n · n y, chóng ta c¦n sinh th¶m
b£y ca kiºm thû ùng vîi b£y tr÷íng hñp sau:
1. Váng l°p thüc hi»n 0 l¦n
2. Váng l°p thüc hi»n 1 l¦n
3. Váng l°p thüc hi»n 2 l¦n
150 CH×ÌNG 6. KIM THÛ DÁNG IU KHIN
B£ng 6.10: C¡c ca kiºm thû cho cho kiºm thû váng l°p while cõa h m average
ID Sè l¦n l°p Inputs EO RO Note
tcl0 0 [-999, ...], 1, 2 -999
tcl1 1 [1,-999], 1, 2 1
tcl2 2 [1,2,-999], 1, 2 1.5
tclk 5 [1,2,3,4,5,-999], 1, 10 3
tcl(n-1) 99 [1,2,...,99,-999], 1, 100 50
tcln 100 [1,2,...,100], 1, 2 50.5
tcl(n+1)
4. Váng l°p thüc hi»n k l¦n, 2 < k < n - 1, vîi n l sè l¦n l°p tèi a cõa
váng l°p
5. Váng l°p thüc hi»n n - 1 l¦n
6. Váng l°p thüc hi»n n l¦n
7. Váng l°p thüc hi»n n + 1 l¦n
Chó þ r¬ng trong mët sè tr÷íng hñp chóng ta câ thº khæng x¡c ành
÷ñc sè l¦n l°p tèi a cõa c¡c váng l°p. Trong tr÷íng hñp n y, chóng ta ch¿
c¦n sinh bèn ca kiºm thû ¦u ti¶n. T÷ìng tü, trong mët sè c¡c tr÷íng hñp
kh¡c, chóng ta khæng thº sinh ca kiºm thû º váng l°p thüc hi»n n + 1 l¦n
(tr÷íng hñp thù 7). Khi â, chóng ta ch¿ c¦n sinh s¡u ca kiºm thû cán l¤i
(c¡c tr÷íng hñp tø 16). V½ dö, vîi váng l°p while trong h m average nh÷
H¼nh 6.7, váng l°p n y ch¿ thüc hi»n l°p tèi a 100 l¦n n¶n chóng ta khæng
thº sinh c