Giáo trình Kiểm thử phần mềm (Phần 2) - Phạm Ngọc Hùng

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.

pdf134 trang | Chia sẻ: thuyduongbt11 | Ngày: 10/06/2022 | Lượt xem: 439 | Lượt tải: 0download
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 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 137 138 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. 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 b­t ¦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. CC Ë O KIšM 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. KIšM THÛ DÁNG I—U KHIšN 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. CC Ë O KIšM 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. KIšM THÛ DÁNG I—U KHIšN 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 b­t ¦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. KIšM THÛ DÜA TR–N Ë 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. KIšM THÛ DÁNG I—U KHIšN 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. KIšM THÛ DÜA TR–N Ë 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. KIšM THÛ DÁNG I—U KHIšN 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. KIšM THÛ DÜA TR–N Ë 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. KIšM THÛ DÁNG I—U KHIšN 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. KIšM THÛ DÜA TR–N Ë 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. KIšM THÛ DÁNG I—U KHIšN 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