Nối tiếp nội dung phần 1. Phần 2 trong Giáo trình Công nghệ phần mềm sẽ tiếp tục giới thiệu đến bạn đọc những nội dung về thử nghiệm chương trình và đặc tả phần mềm. Giáo trình dành cho các bạn sinh viên ngành Công nghệ thông tin.
CHặNG Thổớ nghióỷm chổồng trỗnh Nhổ õaợ trỗnh baỡy chỉång trỉåïc, ngỉåìi ta thỉåìng sỉí dủng cạc k thût ténh (static techniques) v k thût âäüng (dynamic techniques) quaù trỗnh V&V õóứ kióứm tra tờnh õuùng õừn cuớa mọỹt saớn phỏứm phỏửn móửm Chổồng naỡy seợ trỗnh by mäüt phỉång phạp ténh l kho sạt (inspection) chỉång trỗnh, vồùi vai troỡ nhổ laỡ mọỹt pheùp chổùng minh phi hỗnh thổùc vaỡ, mọỹt phổồng phaùp õọỹng laỡ thổớ nghióỷm(testing) chổồng trỗnh I Khaớo saùt Khaớo saùt (hay tra) l nhng cüc hp nhàịm mủc âêch xạc minh mäüt sn pháøm Pháưn låïn cạc phỉång phạp sn xút pháưn mãưm âãưu áún âënh trỉåïc nhỉỵng cüc hp váûy Ty theo bn cháút ca sn pháøm cáưn kho sạt, ngỉåìi ta nọi vãư kho sạt thiãút kãú ton thãø (global design), kho sạt thiãút kãú chi tiãút (detailed design), v kho sạt m ngưn Mäüt këch bn máùu (typical scenario) cho mäüt kho sạt m ngưn sau : Cáưn âãún ngỉåìi gäưm mäüt ch tëch, mọỹt ngổồỡi lỏỷp trỗnh, mọỹt ngổồỡi thióỳt kóỳ vaỡ mọỹt kho sạt (âãưu l nhng chun gia vãư Tin hc, riãng kho sạt phi cọ kiãún thỉïc chun män vãư lénh vỉûc ỉïng dủng ca sn pháøm) Cạc thnh vión nhỏỷn chổồng trỗnh nguọửn vaỡ caùc õỷc taớ trổồùc cuäüc hoüp êt ngaìy âãø âoüc vaì chuáøn bë Cüc hp kẹo di khong giåì 30 âãún khong giồỡ Trong quaù trỗnh hoỹp khaớo saùt : Ngổồỡi lỏỷp trỗnh õoỹc vaỡ giaới thờch chổồng trỗnh cuớa mỗnh, coù thóứ õoỹc tổỡng doỡng lóỷnh mọỹt vaỡ tr låìi cạc cáu hi âỉåüc âàût − Chỉång trỗnh õổồỹc phỏn tờch cn cổù trón mọỹt danh saùch cạc läùi sai (errors) thäng dủng kho sạt cung cỏỳp Cuọỹc hoỹp khọng sổớa lọựi tỗm thỏỳy maỡ chè ghi nháûn qua biãn bn m thäi Chênh ngỉåìi lỏỷp trỗnh seợ tổỷ sổớa lọựi sau hoỹp xong Nóỳu khaớo saùt tỗm thỏỳy chổồng trỗnh, nhióửu khióỳm khuyóỳt (failures), hoỷc nhióửu lọựi trỏửm troỹng thỗ phi tiãúp tủc kho sạt láưn sau, sau sỉía läùi TS PHAN HUY KHẠNH biãn soản 90 91 Thỉí nghióỷm chổồng trỗnh Mọỹt sọỳ kởch baớn coi troỹng vióỷc tỗm lọựi sai vaỡ khuyóỳn khờch vióỷc chaỷy demo trổỷc tióỳp maợ chổồng trỗnh (hand made) nguọửn : khaớo saùt mang âãún cüc hp cạch tiãún hnh v cạc dỉỵ liãûu liãn quan âãø mi ngỉåìi tiãún hnh thỉí nghiãûm Ngỉåìi ta cn gi cạch thỉí nghiãûm váûy l walk throughs (chảy sút) Mäüt säú këch bn lải coi troỹng vióỷc chổùng minh khọng hỗnh thổùc : khaớo saùt âãư nghë xạc minh cạc cháút cho phẹp thỉí nghiãûm âụng âàõn ca sn pháøm Ngỉåìi ta nọi âáy l viãûc kho sạt càn cỉï trãn viãûc xạc minh Vióỷc kióứm laỷi (review) khaùc vồùi khaớo saùt vỗ ràịng viãûc kiãøm lải khäng âi hi phi hp : Sn pháøm âỉåüc giao cho nhỉỵng ngỉåìi khäng tham gia vaỡo vióỷc lỏỷp trỗnh, hoỹ coù nhổợng khuynh hổồùng õaùnh giạ âäüc láûp Cọ thãø nọi phỉång phạp kho sạt coù hióỷu quaớ õaùng kóứ : nhổợng sọỳ lióỷu tỗm tháúy cạc vàn bn ghi nháûn khong 50% sai sọt âỉåüc phạt hiãûn kho sạt Nhỉỵng säú dỉåïi âáy (láúy tỉì tảp chê IEEE3 nàm 1992 ca Dyer M tỉì bi bạo “Verification Based Inspection") cho tháúy caùc sai sọỳ tỗm thỏỳy phaùt trióứn dổỷ aùn pháưn mãưm ca hng IBM : Dỉû ạn Kho sạt Kho sạt Kho sạt m Thỉí nghiãûm Thỉí nghiãûm thiãút kãú toaìn bäü thiãút kãú chi tiãút âån vë hãû thäúng 50 25 25 13 49 17 17 20 27 10 20 23 20 26 22 18 36 10 18 24 24 24 Mäüt phỉång phạp khạc, gi l phỉång phạp phng sảch (Clean-room Methodology), thay vỗ thổớ nghióỷm (testing), khuyóỳn khờch vióỷc kho sạt (inspection) bàịng cạch xạc minh (verification) quạ trỗnh saớn xuỏỳt phỏửn móửm Sổỷ phaùt trióứn phỏửn laỡ liãn tiãúp lm mën (raffinement) sn pháøm Mäùi giai âoản, ngỉåìi ta tiãún hnh chỉïng minh âụng âàõn (prouving) mäüt cạch chàût ch, âäưng thåìi våïi cạc cüc kho sạt, cho sn pháøm pháưn mãưm khäng chỉïa sai sọt Viãûc thỉí nghiãûm chè âỉåüc tiãún hnh xạc minh háûu nghiãûm (a posteriori) nhåì cạc phỉång phạp thäúng kã, nhàịm âảt âỉåüc mủc âêch âàût lục âáưu Phỉång phạp phng sảch H.Mills xáy dỉûng tải IBM, â âỉåüc ạp dủng âãø sn xút cạc pháưn mãưm cåỵ låïn IEEE, âc l eye-triple-ee, tãn viãút tàõt ca Institute of Elechtrric and Engineers TS PHAN HUY KHẠNH biãn soản 91 92 Cäng nghãû Pháưn mãưm II Cạc phỉång phạp thỉí nghiãûm Phỉång phạp thỉí nghiãûm l cho chaỷy chổồng trỗnh tổỡ mọỹt sọỳ dổợ lióỷu thổớ õổồỹc chn trỉåïc Phẹp thỉí nghiãûm dng cho c hai quạ trỗnh xaùc minh vaỡ hồỹp thổùc hoùa V&V, vồùi õióửu kióỷn rũng chổồng trỗnh laỡ chaỷy õổồỹc Vióỷc thổớ nghióỷm phán biãût : Cạc phẹp chỉïng minh âụng âàõn hay kho sạt m ngưn m khäng chảy chỉång trỗnh, vồùi quy trỗnh walkthroughs bũng caùch chaỷy demo (hand-made) Chaỷy chổồng trỗnh debugger õóứ tỗm sổớa lọựi Caùc thỉí nghiãûm v chảy debugger thỉåìng cạc nhọm cäng tạc khạc âm nhiãûm Âãø náng cao hiãûu qu, ngỉåìi ta thỉåìng phán cäng sau : nhọm thỉí nghióỷm laỡ nhoùm khọng lỏỷp trỗnh, coỡn nhoùm chaỷy debugger laỡ nhoùm tham gia lỏỷp trỗnh saớn phỏứm Quaù trỗnh debugger gọửm nhióửu giai õoaỷn : Tỗm thỏỳy lọựi sai (Locate error) Tỗm caùch khừc phuỷc lọựi sai (Design error repair) Khàõc phuûc läùi sai (Error repair) Thổớ nghióỷm laỷi chổồng trỗnh (Re-teat program) Tỗm thỏỳy lọựi sai Tỗm caùch khừc phuỷc lọựi sai Khừc phuỷc lọựi sai Thổớ nghióỷm laỷi chổồng trỗnh Hỗnh 4.1 Quaù trỗnh debugger Vồùi nhổợng phổồng phaùp lỏỷp trỗnh truyóửn thọỳng, quaù trỗnh V & V laỡ khaớo saùt vaỡ thổớ nghióỷm chổồng trỗnh Thổỷc tóỳ, vióỷc thổớ nghióỷm chióỳm mọỹt phỏửn õaùng kóứ quaù trỗnh saớn xuỏỳt phỏửn mãưm, chiãúm khong tỉì 30% âãún 50%, ty theo bn cháút ca dỉû ạn Tin hc II.1 Âënh nghéa v mủc âêch thỉí nghiãûm Ngỉåìi ta âỉa nhng âënh nghéa sau âáy : Mäüt thỉí nghiãûm l cho chảy (run) hay thổỷc hióỷn (execution) mọỹt chổồng trỗnh tổỡ nhuợng dỉỵ liãûu âỉåüc lỉûa chn âàûc biãût, nhàịm âãø xạc minh kãút qu nháûn âỉåüc sau chảy l âụng âàõn Mäüt táûp dỉỵ liãûu thỉí l táûp håüp hỉỵu hản cạc dỉỵ liãûu âọ mäùi dỉỵ liãûu phủc vuỷ cho mọỹt thổớ nghióỷm Thổớ nghióỷm chổồng trỗnh 93 Mäùi phẹp thỉí nghiãûm chè hoảt âäüng tỉì viãûc thiãút kãú cạc táûp dỉỵ liãûu thỉí, tiãún hnh thỉí nghiãûm v âạnh giạ kãút qu âãún cạc giai âoản khạc chu k säúng ca pháưn mãưm Ngỉåìi thỉí nghiãûm (hay nhọm thỉí nghiãûm) cọ kiãún thỉïc chun män Tin hc cọ nhiãûm vủ tiãún hnh phẹp thỉí nghiãûm Mäüt khiãúm khuút (failure) xy chỉång trỗnh thổỷc hióỷn cho kóỳt quaớ khọng tổồng hồỹp vồùi õỷc taớ cuớa chổồng trỗnh Mọỹt lọựi sai (error) laỡ mọỹt phỏửn chổồng trỗnh (lóỷnh) õaợ gỏy khióỳm khuút Ngỉåìi thỉí nghiãûm cọ nhiãûm vủ : Tảo táûp dỉỵ liãûu thỉí Triãøn khai cạc phẹp thỉí Láûp bạo cạo vãư kãút qu thỉí nghiãûm v lỉu giỉỵ Mủc âêch thỉí nghiãûm l âãø : Chổùng minh rũng chổồng trỗnh laỡ õuùng õừn óứ khúng õởnh tờnh õuùng õừn cuớa chổồng trỗnh, cỏửn tióỳn hnh cạc thỉí nghiãûm ton bäü (exhaustive testing), âi hi táûp dỉỵ liãûu thỉí phi hỉỵu hản v cọ kêch thỉåïc vỉìa phi cho â sỉïc thuút phủc Âiãưu ny trãn thỉûc tãú ráút khọ thỉûc hiãûn Sau âáy l mäüt tiãu chøn näøi tiãúng ca Dijkstra : “Cạc thổớ nghióỷm cho pheùp chổùng minh mọỹt chổồng trỗnh laỡ khäng âụng, bàịng cạch chè mäüt phn vê dủ, nhiãn, khäng bao giåì cọ thãø chỉïng minh âỉåüc chổồng trỗnh õoù laỡ õuùng õừn Gỏy nhổợng khióỳm khuyóỳt cuớa chổồng trỗnh Myers G J baỡi bạo “The Art of Software Testing“, Wiley 1979, â âënh nghéa thỉí nghiãûm sau : “Phẹp thỉí nghiãûm l cho chaỷy chổồng trỗnh nhũm tỗm nhổợng sai soùt Tỉì âọ, thỉåìng ngỉåìi ta nọi vãư “thỉí nghiãûm phạ hy“ (destructive testings) Mủc âêch ca nhng phẹp thỉí vỏỷy laỡ tỏỷp trung tỗm caùc lọựi sai tổỡ nhuợng khióỳm khuyóỳt ngổồỡi lỏỷp trỗnh phaỷm phaới Ngổồỡi thỉí nghiãûm tiãún hnh våïi mủc âêch nghëch (negative) : pheùp thổớ laỡ thaỡnh cọng nóỳu tỗm õổồỹc khióỳm khuút, l tháút bải trỉåìng håüp ngỉåüc lải Viãûc thỉí nghiãûm kiãøu ny thỉåìng âỉåüc ạp dủng quạ trỗnh vióỳt chổồng trỗnh ổa õaùnh giaù tộnh (static evaluation - static benchmark) vãư cháút lỉåüng ca chỉång trỗnh Ngổồỡi ta sổớ duỷng phổồng phaùp thổớ nghióỷm tộnh (static testing) cho mủc âêch ny Trong phỉång phạp phng tràõng, ngỉåìi ta chè tiãún hnh nhng phẹp thỉí ténh, TS PHAN HUY KHẠNH biãn soản 93 94 Cäng nghãû Pháưn mãưm nhàịm mủc âêch vỉìa âm bo cäng viãûc cuớa ngổồỡi lỏỷp trỗnh vổỡa õaùnh giaù sổỷ tin cỏỷy ca sn pháøm váûn hnh II.2 Thỉí nghiãûm chu k säúng ca pháưn mãưm Ngỉåìi ta phán biãût nhiãưu phỉång phạp thỉí nghiãûm, tỉång ỉïng våïi cạc giai âoản sn xút pháưn mãưm khạc Thỉí nghiãûm Thỉí nghiãûm “big bang” Thỉí nghiãûm trãn xúng Thỉí nghiãûm Thỉí nghiãûm hóỷ thọỳng Thổớ nghióỷm Thổớ nghióỷm tờch hồỹp Hỗnh 4.2 Nhiãưu phỉång phạp thỉí nghiãûm II.2.1 Thỉí nghiãûm âån thãø Thỉí nghiãûm âån thãø (Module testing), hay thỉí nghiãûm âån (Unit testing) ngổồỡi lỏỷp trỗnh tổỷ tióỳn haỡnh Phổồng phaùp naỡy hay õổồỹc sổớ duỷng lỏỷp trỗnh cáúu trục (top-down programing) Cạc phỉång phạp thỉí nghiãûm khạc ngỉåìi thỉí nghiãûm tiãún hnh Gi sỉí gi M l mäüt âån thãø cáưn thỉí nghiãûm riãng biãût Khi âọ, xy hai trỉåìng håüp sau : Trỉåìng håüp : nhỉỵng âån thãø M gi tåïi khäng cọ màût lục thỉí nghiãûm Khi âọ, nhỉỵng âån thãø M gi tåïi vàõng màût phi âỉåüc thay thóỳ bồới caùc chổồng trỗnh cuỡng mọỹt giao dióỷn vồùi M Caùc chổồng trỗnh naỡy thổỷc hióỷn õuùng chổùc nng m chụng âải diãûn cho âån thãø vàõng màût v chuùng õổồỹc goỹi laỡ caùc trỗnh stubs (cuọỳng) ồn thóứ M Hỗnh 4.3 Caùc õồn thóứ vừng mỷt õổồỹc thay bồới caùc trỗnh stubs Vờ duỷ, nóỳu õồn thóứ õang âỉåüc thỉí nghiãûm gi mäüt th tủc sàõp xãúp åí âáưu : Procedure Sort (T: Array ; n: Integer); ngỉåìi ta coù thóứ sổớ duỷng trỗnh Stub : Procedure Sort (T: Array ; n: Integer) ; Writeln (‘Dy cáưn sàõp xãúp laì : ‘) ; for i:= to n writeln (T[i]) ; 95 Thổớ nghióỷm chổồng trỗnh for i:= to n readln (T [i]) ; Tiãúp theo, ngỉåìi thỉí nghiãûm s tiãún hnh sàõp xãúp dy â nháûp bàịng tay âãø thay thãú cho th tủc sàõp xãúp vàõng màût Trỉåìng håüp : nhỉỵng âån thãø gi tåïi M khäng cọ màût lục thỉí nghiãûm Khi âọ, âån thãø gi tåïi M nhỉng vàõng màût phaới õổồỹc thay thóỳ bồới mọỹt chổồng trỗnh, õổồỹc goỹi laỡ trỗnh driver Trỗnh driver goỹi M õóứ M thổỷc hiãûn trãn cạc dỉỵ liãûu thüc táûp dỉỵ liãûu thỉí, sau âọ ghi nháûn cạc kãút qu âỉåüc båíi M âãø so sạnh våïi cạc kãút qu chåì âåüi ồn thóứ M Hỗnh 4.4 Duỡng trỗnh driver õóứ goỹi thổỷc hióỷn M Sọỳ lổồỹng caùc trỗnh stubs vaỡ caùc trỗnh drivers cỏửn thióỳt õóứ tióỳn haỡnh thổớ nghióỷm caùc âån thãø phủ thüc vo thỉï tỉû cạc âån thãø âỉåüc thỉí nghiãûm II.2.2 Thỉí nghiãûm têch håüp Thỉí nghiãûm têch håüp vỉìa nhàịm tảo mäúi liãn kãút giỉỵa cạc âån thãø, vỉìa âỉåüc tiãún hnh âäúi våïi nhỉỵng âån thóứ lồùn hỗnh thaỡnh hóỷ thọỳng chổồng trỗnh hoaỡn chốnh Cọ nhiãưu phỉång phạp thỉí nghiãûm têch håüp Phỉång phạp “big bang“ Ngỉåìi ta xáy dỉûng mäúi liãn hãû giỉỵa cạc âån thãø âãø tảo thnh mäüt phiãn bn hãû thäúng hon chènh, sau âọ thỉí nghiãûm phiãn bn naỡy Nhổ vỏỷy ngổồỡi ta cỏửn õóỳn nhióửu trỗnh drivers, mọựi trỗnh driver cho mọỹt õồn thóứ, mọỹt trỗnh stubs cho táút c cạc âån thãø ca hãû thäúng, trỉì âån thãø chênh phi âỉåüc thỉí nghiãûm bàịng phỉång phạp thỉí nghiãûm âån vë Phỉång phạp “big bang” nguy hiãøm : táút c cạc sai sọt cọ thãø âäưng thåìi xút hiãûn, viãûc xạc âënh tỉìng läùi sai s gàûp khọ khàn Hån nỉỵa phỉång phạp ny âi hi mäüt lổồỹng tọỳi õa caùc trỗnh drivers vaỡ caùc trỗnh stubs Vỗ vỏỷy thổồỡng ngổồỡi ta sổớ duỷng caùc phổồng phaùp têch håüp tỉì trãn xúng, hay tỉì dỉåïi lãn Phỉång phạp thỉí nghiãûm tỉì trãn xúng (Descendant hay Top-down Testing Method) Bàõt âáưu thỉí nghiãûm âån thãø chênh, sau õoù thổớ nghióỷm chổồng trỗnh nhỏỷn õổồỹc tổỡ sổỷ lión kãút giỉỵa âån thãø chênh v cạc âån thãø âỉåüc gi trỉûc tiãúp tỉì âån thãø chênh, v.v TS PHAN HUY KHẠNH biãn soản 95 96 Cäng nghãû Pháưn móửm Phổồng phaùp naỡy chố cỏửn duỡng mọỹt trỗnh driver nhỏỳt cho õồn thóứ chờnh, nhổng cỏửn mọỹt trỗnh stub cho mäùi âån thãø cn lải Dy cạc thỉí nghiãûm Level Level stubs Level Level Level Level Level Level stubs Hỗnh 4.5 Phỉång phạp thỉí nghiãûm tỉì trãn xúng Phỉång phạp thỉí nghiãûm tỉì dỉåïi lãn (Ascendant hay Bottom-Up Testing Method) Bàõt âáưu thỉí nghiãûm cạc âån thãø khäng gi õóỳn caùc õồn thóứ khaùc, sau õoù caùc chổồng trỗnh nháûn âỉåüc båíi sỉû liãn kãút giỉỵa mäüt âån thãø chè gi âãún cạc âån thãø â âỉåüc thỉí nghiãûm våïi cạc âån thãø ny, v.v Phỉång phạp naỡy õoỡi hoới mọựi õồn thóứ mọỹt trỗnh driver, nhổng khọng cỏửn trỗnh stub Mổùc N Mổùc N Mổùc N-1 Mæïc N Mæïc N Mæïc N-1 Mæïc N Mæïc N-1 Hỗnh 4.6 Thổớ nghióỷm tổỡ dổồùi lón Phổồng phaùp tióỳn t ỉu âiãøm hån phỉång phạp li, cạc trỗnh driversổớ duỷng dóự vióỳt hồn caùc trỗnh stubs vaỡ cọ cạc cäng củ âãø tảo sinh tỉû âäüng cạc trỗnh drivers Mỷt khaùc, thổù tổỷ tờch hồỹp thổồỡng bở rng büc båíi thỉï tỉû cọ màût ca cạc âån thãø II.2.3 Thỉí nghiãûm hãû thäúng Váún âãư l thỉí nghiãûm pháưn mãưm hon chènh v pháưn cỉïng âãø âạnh giạ hiãûu nàng, âäü an ton, tỉång håüp våïi cạc âàûc t, v.v Nhỉỵng thỉí nghiãûm ny âi hi nhiãưu thåìi gian Ngỉåìi ta nọi âãún thỉí nghiãûm cháúp nháûn (Acceptance testing), l nhỉỵng thỉí nghiãûm ph håüp våïi sn pháøm cúi cng qua håüp âäưng â k våïi khạch hng (nhiãưu viãûc thỉí nghiãûm ny khạch hng tiãún hnh), cn âỉåüc gi l thỉí nghiãûm alpha v cúi cng l thỉí nghiãûm ci âàût (Setup Testing), l thỉí nghiãûm âäúi våïi sn pháøm cúi cng, tiãún hnh tải vë trê Thỉí nghiãûm chỉång trỗnh 97 cuớa khaùch haỡng (vồùi caùc maùy tờnh vaỡ hãû âiãưu hnh h âang sỉí dủng) Ngỉåìi ta gi cạc thỉí nghiãûm cho phiãn bn âáưu tiãn ca pháưn mãưm khạch hng âỉåüc lỉûa chn âàûc biãût tiãún hnh l thỉí nghiãûm beta II.2.4 Thỉí nghiãûm häưi quy Ngỉåìi ta cn gi cạc thỉí nghiãûm tiãún hnh sau sỉía läùi l thỉí nghiãûm häưi quy, hay thoại lui (regresgion testing) nhàịm âãø xạc minh nãúu cạc sai sọt khạc khäng âỉåüc xỉí l sỉía chỉỵa Kiãøn thổớ nghióỷm naỡy hay õổồỹc duỡng baớo trỗ Âãø tiãún hnh hiãûu qu cạc thỉí nghiãûm ny, cáưn lỉu giỉỵ lải nhỉỵng thỉí nghiãûm â lm quạ trỗnh saớn xuỏỳt phỏửn móửm, õióửu naỡy giuùp cho vióỷc xạc minh tỉû âäüng cạc kãút qu thỉí nghiãûm thoại lui Khọ khàn gàûp phi l säú nhỉỵng thỉí nghiãûm â dàõt dáùn, cáưn phi chn nhỉỵng thỉí nghiãûm no chothỉí nghiãûm thoại lui Phỉång cạch ngỉåìi ta hay laỡm laỡ kóỳt hồỹp mọựi lóỷnh cuớa chổồng trỗnh vồùi tỏỷp hồỹp caùc thổớ nghióỷm laỡm chaỷy chổồng trỗnh II.3 Dáùn dàõt cạc thỉí nghiãûm Viãûc dáùn dàõt cạc thỉí nghiãûm bao gäưm : - Xạc âënh kêch thỉåïc ca táûp dỉỵ liãûu thỉí (váún âãư kãút thục cạc TN) - Lỉûa chn cạc dỉỵ liãûu cáưn thỉí nghiãûm - Xạc âënh âụng âàõn hay khäng âụng âàõn ca cạc kãút qu nháûn âỉåüc sau thỉûc hiãûn chỉång trỗnh õọỳi vồùi caùc dổợ lióỷu cuớa tỏỷp dổợ lióỷu thỉí (Váún âãư låìi tiãn tri - oracle) Viãûc dáùn dàõt cạc thỉí nghiãûm km theo viãûc viãút cạc chỉång trỗnh bọứ trồỹ nhổ laỡ caùc stubs vaỡ caùc drivers Váún âãư låìi tiãn tri Mäüt phẹp thỉí nghiãûm (check program) Mäüt táûp håüp hỉỵu hản cạc giạ trë âỉa vo Mäüt táûp håüp hỉỵu hản cạc càûp (Giạ trë âỉa vo, kãút qu tỉång ỉïng) Trong trỉåìng håüp 1, viãûc phạt hiãûn cạc khiãúm khuút phi âỉåüc lm bàịng tay (by hand), tỉì âọ dáùn âãún mäüt cäng vióỷc xem xeùt kyợ lổồợng caùc kóỳt quaớ mỏỳt thỗ giåì v mãût mi (lm hản chãú kêch thỉåïc cạc táûp dỉỵ liãûu thỉí) Cọ hai kiãøu sai sọt xy xem xẹt : - Mäüt kãút qu sai lải âỉåüc xem l âụng - Mäüt kãút quạ âụng cọ thãø âỉåüc hiãøu l sai Âãø trạnh xạc minh bàịng tay, cáưn phi cọ nhỉỵng âàûc t kh thi, hay mọỹt phión baớn khaùc cuớa chổồng trỗnh (õióửu ny cọ nguy cå lm lan truưn sai sọt tỉì phiãn bn ny sang phiãn bn khạc) TS PHAN HUY KHẠNH biãn soản 97 98 Cäng nghãû Pháưn mãưm Trong trổồỡng hồỹp thổù hai, chờnh chổồng trỗnh õang chaỷy tổỷ phaùt hióỷn caùc khióỳm khuyóỳt, vỏỳn õóử laỡ tỗm âỉåüc cạc giạ trë âỉa kãút qu tỉång ỉïng våïi giạ trë âỉa vo Âiãưu ny cọ thãø lm “ bàịng tay “ våïi mäüt âàûc t kh thi, vồùi mọỹt phión baớn cuớa chổồng trỗnh, vồùi cuỡng nhỉỵng váún âãư â gàûp trỉåìng håüp âáưu Ngỉåìi ta cng cọ thãø váûn dủng cạc phẹp thỉí c õaợ lổu giổợ Chuù yù rũng duỡng chổồng trỗnh xaùc minh âụng âàõn ca kãút qu khäng ln ln âån gin : nãúu xy cọ nhiãưu cại õuùng tổồng ổùng vồùi moỹt caùi vaỡo thỗ phaới õỷt kóỳt quớa chổồng trỗnh tờnh dổồùi daỷng quy tàõc trỉåïc xạc minh nháút quạn våïi kãút qu dỉû kiãún táûp dỉỵ liãûu thỉí Âiãưu ny khäng phi ln ln lm âỉåüc Chàóng hản lm cọ thãø xạc minh âỉåüc ràịng m sinh båíi mọỹt trỗnh bión dởch laỡ õuùng õừn, nóỳu chố thổớ nghiãûm m âọ m thäi ? II.4 Thiãút kãú cạc phẹp thỉí phạ hy (Defect Testing) II.4.1 Cạc phỉång phạp dổỷa trón chổồng trỗnh Caùc phổồng phaùp naỡy coỡn õổồỹc gi l phỉång phạp cọ cáúu trục (Structural Testing) hay thổớ nghióỷm họỹp trừng (white-box hay glass-box) Mọựi chổồng trỗnh tỉång ỉïng våïi mäüt så âäư khäúi gäưm cạc cáúu trục lỉûa chn v cạc cáúu trục khäúi l mäüt dy täúi âa cạc lãûnh thỉûc hiãûn (gäưm cạc lãûnh gaùn, lóỷnh goỹi chổồng trỗnh con, caùc lóỷnh vaỡo-ra ) m khäng cọ lãûnh r nhạnh Ngỉåìi ta gi cạc khäúi lãûnh l cạc âáưu vo så âäư khäúi v cạc quút âënh l cạc cung âi tỉì mäüt cáúu trục lỉûa chn a) Ph cạc lãûnh (cạc âènh) Mäüt phẹp thỉí l ph (trm) hãút cạc lãûnh ca mọỹt chổồng trỗnh nóỳu laỡm cho mọựi lóỷnh cuớa noù âỉåüc thỉûc hiãûn Âáy l mäüt tiãu chøn täúi thiãøu : Ngỉåìi ta khäng xẹt nhỉỵng thỉí nghiãûm m mäùi lóỷnh cuớa chổồng trỗnh khọng õổồỹc thổc hióỷn ờt nhỏỳt mäüt láưn Chụ ràịng tiãu chøn ny khäng phi luọn luọn thoớa maợn bũng mọỹt chổồng trỗnh coù thóứ chỉïa cạc lãûnh m khäng thãø âỉåüc thỉûc hiãûn b) Ph cạc quút âënh (cạc cung) Mäüt phẹp thỉí ph cạc quút âënh nãúu thỉûc hiãûn, mäùi cung cuớa sồ õọử tọứ chổùc cuớa chổồng trỗnh õổồỹc duyóỷt qua êt nháút mäüt láưn : nghéa l nãúu mäùi phẹp chn âỉåüc thỉûc hiãûn êt nháút mäüt láưn cho mäùi giạ trë cọ thãø (th hay fals e trỉåìng håüp ghẹp r nhạnh logic) Nhỉ váûy, tiãu chøn ny khäng phi ln cáưn phi tha mn Vê dủ : if A > then if A ≥ then else 99 Thỉí nghióỷm chổồng trỗnh c) Phuớ caùc õióửu kióỷn Ta xeùt mọỹt chổồng trỗnh chổùa cỏỳu truùc reợ nhaùnh logic gọửm cạc lãûnh not, end v or Mäüt phẹp thỉí ph caùc õióửu kióỷn nóỳu vióỷc thổỷc hióỷn chổồng trỗnh keùo theo sỉû giạ trë ca biãøu thỉïc ny cho mi giạ trë logic cọ thã Nhỉ váûy mäüt biãøu thỉïc cọ hai toạn hảng P, Q s âỉåüc toaïn våïi : A true true false false B true false true false Phẹp ph cạc âiãưu kiãûn cho phẹp cng cäú phẹp ph cạc quút âënh Vê dủ cọ thãø ph cạc quút âënh bàịng cạch thỉûc hiãûn phẹp lỉûa chn P v Q våïi : P = true, Q = true vaì P = false, Q = false, âiãưu ny khäng cho phẹp phán biãût phẹp r nhạnh A or B d) Phuớ caùc lọỹ trỗnh thổỷc hióỷn chổồng trỗnh (path testing) Mọỹt pheùp thổớ phuớ caùc lọỹ trỗnh chaỷy chổồng trỗnh nóỳu gỏy vióỷc thổỷc thi mọựi lọỹ trỗnh thổỷc hióỷn chổồng trỗnh Khọng tọửn taỷi pheùp thổớ nhổ vỏỷy nóỳu chổồng trỗnh coù vọ haỷn lọỹ trỗnh thổỷc hióỷn trổồỡng hồỹp tọứng quaùt Thọng thỉåìng ngỉåìi ta xáy dỉûng phẹp thỉí ph cạc läü trỗnh thổỷc hióỷn coù sọỳ lổồỹng mọỹt hũng õaợ cho e) Xạc âënh dỉỵ liãûu cho phẹp ph läü trỗnh thổỷc hióỷn õỷc bióỷt Giaớ thióỳt rũng vồùi moỹi lóỷnh P cuớa chổồng trỗnh vaỡ moỹi quyóỳt õởnh S, cọ thãø ptpre (P, S), âiãưu kiãûn âáưu úu nháút ỉïng våïi P v S Ngỉåìi ta cọ thãø vồùi moỹi lọỹ trỗnh cuớa chổồng trỗnh, tờnh õổồỹc mọỹt cäng thỉïc E cho cạc dỉỵ liãûu ca chỉång trỗnh thoớa maợn E nóỳu vaỡ chố nóỳu vióỷc thổỷc hióỷn cuớa chổồng trỗnh õi theo lọỹ trỗnh õaợ choỹn Âàûc biãût, E khäng laì sai nãúu vaì chè nãúu lọỹ trỗnh õaợ choỹn laỡ lọỹ trỗnh thổỷc thi Nhổ vỏỷy chố cỏửn tỗm caùc dổợ lióỷu laỡm thoớa maợn E õóứ coù pheùp thổớ phuớ lọỹ trỗnh õaợ chn Âiãưu ny cọ thãø thỉûc hiãûn bàịng ta, hay chỉïng minh mäüt cạch sạng tảo cäng thỉïc xE Phỉång phạp ny âỉåüc dng âãø âënh nghéa phẹp thỉí ph caùc quyóỳt õởnh cuớa mọỹt chổồng trỗnh : ã Lổỷa choỹn mọỹt tỏỷp hồỹp caùc lọỹ trỗnh phuớ caùc quyóỳt õởnh ã Vồùi mọựi lọỹ trỗnh, tờnh õióửu kióỷn õỏửu úu nháút tỉång ỉïng (hồûc mäüt âiãưu kiãûn âáưu mảnh hồn) ã Tỗm caùc dổợ lióỷu thoớa maợn caùc õióửu kiãûn âiãưu ny TS PHAN HUY KHẠNH biãn soản 99 140 Cäng nghãû Pháưn mãưm IV.5 Phẹp håüp thnh (cáúu tảo) ÅÍ mủc trỉåïc, ta â sỉí dủng mäüt cạch phi hỗnh thổùc pheùp hồỹp thaỡnh (composition opertion) cuớa p v q theo a, m v n Trong mủc ny, ta tiãúp tủc âënh nghéa phẹp håüp thnh mäüt cạch chàût ch hån Phẹp håüp thnh, k hiãûu l 0, tạc âäüng lãn hai toạn hảng l hai hm, chàóng f v g, thüc vãư cạc táûp håüp X → Y v Y → Z tỉång ỉïng, cho hm fog thüc vãư táûp X → Z Phẹp håüp thnh cọ thãø âỉåüc âënh nghéanhỉ sau : dom (fog) = { x ∈ dom (g) / g (x) ∈ dom (f) } (fog) (x) = f (g (x)) våïi x ∈ dom (fog) (5.1) Vê duû : { → 6, → }o { → 2, → 3, → } = { → 6, → } Tỉì âënh nghéa trãn cọ thãø suy ràịng nãúu cạc hm f v g âãưu ton pháưn (nọi cạch khạc, nãúu dom (g) = X vaỡ dom (f) = Y), thỗ haỡm fog cng l ton pháưn Mäüt cạch täøng quan hån, nãúu miãưn trë ca g nàịm miãưn xạc âënh.ca f thỗ hai haỡm g vaỡ fog coù cuỡng mióửn xaùc âënh Ta cọ thãø dãù dng xáy dỉûng mäüt säú lût kiãøu âải säú âãø näúi liãưn phẹp håüp thnh våïi cạc phẹp häüi v hản chãú â xẹt åí mủc Sau âáy l mäüt säú lût váûy : (f ∪ g) o h= (f o h) ∪ (g o h) f o (g ∪ h) = (fog) ∪ (f o h) (5.2) S ∩ rang (g) = ∅ keïo theo (f \ s) og = fog (5.3) dom (f) ∩ ran (g) = ∅ keïo theo fog = { } (5.4) Biãøu thæïc { } chè âënh haìm räùng f o (g \ S) = (fog) \ S (5.5) {x→y}o{x→u}={x→y} (5.6) Tỉì cạc lût trãn, ta cọ thãø âån gin họa phẹp thay âäøi biãún â âënh nghéa åí (4.2) sau : p=moa q = m o n (5.7) V ta cọ thãø chỉïng minh dãù dng âënh l ph håüp (4.5) bàịng cạch sỉí dủng cạc cháút trãn Tháût váûy, ta cáưn chỉïng minh hai âàóng thỉïc sau âáy : m’ o n’ = (m o n) + { x → y } m’ o o’ = m o a Nghéa laì : (m + { u → y }) o (n + { x → u }) = (m o n) + { x → y } 141 Âàûc taí (m + { u → y }) o a = m o a våïi cạc gi thiãút : u ∉ ran (n) nghéa laì { u } ∩ ran (n) = ∅ (5.8) u ∉ ran (a) nghéa laì { u } ∩ ran (a) = ∅ (5.9) Ta cọ kãút qu phủ nhæ sau : (m \ { u }) o (n \ { x }) = (( m \ { u }) o n) \ { x } theo (5.5) = (m o n) \ { x } theo (5.3) vaì (5.8) Nhæng : { x → y } o (n \ { x }} = { } theo (5.4), (2.2) v (5.8) V ta cng cọ : (m \ { u }) o { x → u } = { } theo (5.4) v (2.2) {u→y}o{x→u}={x→y} theo (5.6) Nhỉ váûy theo (5.2) vaì (2.5) : (m + { u → y }) o (m + { x → u}) = (m o n) \ { x } ∪ { x → y } = (m o n) + { x → y } Màût khạc ta cọ : m \ { u } o a = m o a theo (5.3) { u → y } o a = { } theo (5.4) Nhæ váûy : (m + { u → y }) o a = m o a theo (2.4) v (5.3) IV.6 Triãøn khai thỉï hai Mủc ny seợ tọỳi ổu caùch trióứn khai õỏửu tión õaợ trỗnh by mủc bàịng cạch xáy dỉûng táûp håüp L cạc âëa chè tỉû ca D, táûp håüp m ta â chn ty mäüt pháưn tỉí u âàûc t phẹp toạn mod1 åí (4.3) tỉåíng thiãút kãú cạch triãøn khai thỉï hai ny nàịm åí chäø giỉỵ lải trảng thại ca mäùi âëa chè ca D m âëa chè ny cọ thãø thüc vãư mäüt (vaì chè mäüt maì thäi) táûp håüp råìi nhæ sau : RN _ RN RA ∩ RN RN _ RA RA ∪ RN = L âoï RA = ran (a), RN = ran (n) TS PHAN HUY KHẠNH biãn soản 141 142 Cäng nghãû Pháưn mãưm Ty theo mäüt âëa chè d ca D thüc vãư mäüt bäún táûp håüp trãn, ta nọi trảng thại tỉång ỉïng s l : old (c) d ∈ ran (a) common (chung) d ∈ ran (a) vaì d ∈ ran (n) new (måïi) d ∈ ran (a) free (tæû do) d ∉ ran (a) vaì d ∉ ran (n) Khi mäüt âëa chè tæû âæåüc choün, mäüt thay âäøi xy ra, âëa chè âọ chuøn qua trảng thại måïi ; vãư âëa chè quạ ti bng n, nãúu âëa chè âoï khäng phán chia bãn bng n (nghéa l nãúu hm nl âån ạnh v âiãưu ny âỉåüc gi thiãút l ln âụng), âọ, âëa chè s tråí nãn tỉû nãúu âảng åí trảng thại måïi hồûc chuøn sang trảng thại c nãúu âang åí trảng thại chung Khi mäüt phẹp håüp thỉïc họa hay khåíi âäüng lải cạc âëa chè tỉû hay chung váùn c Cạc âëa chè måïi chuøn thnh tỉû mäüt sỉû khåíi âäüng lải v l trỉåìng håüp chung håüp thỉïc họa Cúi cng, cạc âëa chè c chuøn thnh tỉû håüp thỉïc họa v tråí thnh chung khåíi âäüng lải.Chụ ràịng cạc âëa chè c khäng liãn quan âãún sỉû thay âäøi Så âäư dỉåïi âáy tọm tàõt mäüt caùch phi hỗnh thổùc nhổợng chuyóứn õọứi khaùc naỡy Muỷc õờch õóứ hỗnh thổùc hoùa phổồng phaùp naỡy, ta âỉa vo mäüt biãún måïi s âënh nghéa trảng thại cuía mäùi âëa chè cuía D s ∈ D → {fr, nw, cm, ol} (6.1) Ta coï báút biãún sau âáy : RA - RN = adr (ol) RA ∩ RN = adr (cm) RN - RA = adr (nw) RA RN = adr (fr) (6.2) HầNH VEẻ Trong âoï : RA = ran (a) RN = ran (n) adr (z) = {x ∈ D / s (x) = Z} våïi Z ∈ {fr, nw, cm, ol} Cuäúi cuìng báút biãún thỉï ba chè r ràịng c hai hm n v a âãưu âån ạnh, nghéa l hai âëa chè ca A phán biãût s ln ln tỉång ỉïng våïi cạc âëa chè ca D phán biãût qua cạc hm ny Táûp håüp cạc hm tỉì A vo D váûy âỉåüc k hiãûu båíi A ⌡ D váûy 143 Âàûc t n∈A⌡D a∈A⌡D Báy giåì s l âënh nghéa ba hm chuøn tiãúp láưn lỉåüt l f, g v h sỉí dủng thay âäøi (cho cạc âëa chè ca D liãn quan), khåíi âäüng lải thay cho håüp thỉïc họa (cho mi âëa chè ca D) : f = {fr → nw, nw → fr, thay âäøi cm → ol} g = {fr → fr, nw → fr, cm → cm,khåíi âäüng lải ol → cm} h = {fr → fr, nw → cm, cm → cm,håüp thỉïc họa ol → fr} Ta cọ âàûc t ca phẹp toạn måïi mod2, rst2, v vld2 xút hiãûn l cạc måí räüng tỉång ỉïng tỉì mủc : (a, n, m, s) mod2 (x, y) (a’, n’, m’, s’) (a, n, m) mod1 (x, y) (a’, n’, m’) (6.5) s’ = s + {u → f (s (u)), v → f (s) (v))} xem (4.3) âoï : L = { Z ∈ D |s (z) = fr } u∈L v = n (x) (a, n, m, s) rst2 (a’, n’, m’, s’) (6.6) s’ = gos xem (4.6) (a, n, m, s) vld2 (a’, n’, m’, s’) (6.7) (a, n, m) vld1 (a’, n’, m’) xem (4.7) s’ = hos Sau âáy l mäüt quạ trỗnh chuyóứn õọứi cuớa hóỷ thọỳng CHặèA Chổùng minh TS PHAN HUY KHẠNH biãn soản 143 144 Cäng nghãû Pháưn mãưm Màûc d mủc trỉåïc ta â kiãøm chỉïng k lỉåỵng âàûc t hãû thäúng v nháûn âỉåüc kãút qu tha mn, nhỉng chỉa âm bo âỉåüc âụng âàõn ca âàûc t mi trỉåìng håüp Âãø âi âãún mäüt kãút qu täøng quạt, ta cáưn phi chỉïng minh khäng phi cho mäüt trỉåìng håüp âàûc biãût no âọ m phi cho cạc dỉỵ liãûu tỉåüng trỉng tha mn nhỉỵng gi thiãút no âọ, cạc phẹp toạn â âàûc t l ph håüp v cháúp nháûn âỉåüc Viãûc chỉïng minh ph håüp ca cạc phẹp toạn âàûc t åí (6.5), (6.6) v (6.7) so våïi cạc phẹp toạn âàûc t åí (4.3), (4.6) v (4.7) l hiãøn nhión vỗ rũng caùch lỏỷp caùc cọng thổùc thỗ cạc phẹp toạn (4.3), (4.6) v (4.7) mäüt cạch tỉång ỉïng Trại lải, viãûc chỉïng minh cháúp nháûn âỉåüc phỉïc tảp hån Trỉåïc hãút ta cáưn chỉïng minh ba nhọm âënh l báút biãún sau âáy : ((6.1) v (6.5)) kẹo theo (6.1)’ (7.1) ((6.2) v (6.5)) kẹo theo (6.2)’ (7.2) ((6.3) v (6.5)) kẹo theo (6.3)’ (7.3) ((6.1) v (6.6)) kẹo theo (6.1)’ (7.4) ((6.2) v (6.6)) kẹo theo (6.2)’ (7.5) ((6.3) v (6.6)) kẹo theo (6.3)’ (7.6) ((6.1) v (6.7)) kẹo theo (6.1)’ (7.7) ((6.2) v (6.7)) kẹo theo (6.2)’ (7.8) ((6.3) v (6.7)) kẹo theo (6.3)’ (7.9) Âäúi våïi âënh l åí nhọm 1, ta cọ thãø dáùn âãún cạc gi thiãút cho cạc âiãưu kiãûn sau âáy : a∈A⌡D n∈A⌡D u ∉ RN (7.10) u ∉ RA v ∈ RN Trong âọ u v âỉåüc âënh nghéa åí (6.5) v RA, RN âỉåüc âënh nghéa åí (6.2) chỉïng minh (7.1) Âàûc t 145 Mäüt khọ khàn nh l hm chuøn tiãúp f âỉåüc âënh nghéa åí (6.4) l hm bäü pháûn Cáưn chỉïng minh ràịng s’ âỉåüc âënh nghéa âụng, nghéa l cạc biãøu thỉïc f (s (u)) v f (s (v)) (6.5) cọ nghéa, nọi cạch khạc ta cọ : s (u) ∈ dom (f) s (v) ∈ dom (f) âiãưu ny hióứn nhión vỗ rũng theo (7.10), ta coù : s (u) = fr s (v) = { nw, cm} vaì theo (6.4) ta coï dom (f) = {fr, nw, cm} Âãø chỉïng minh (7.2) v (7.3) ta cáưn kãút qu sau âáy liãn quan âãún sỉû quạ ti ca mäüt hm âån ạnh thỉìa nháûn m khäng chỉïng minh : f ∈ X ⌡ Y keïo theo f’ ∈ X ⌡ Y x ∈ dom (f) ran (f’) = r’ y ∉ Y - ran (f) y ≠ f (x) Trong âoï : f’ = f + {x → y} r’ = (ran (f) - {f (x)}) ∪ {y} chæïng minh (7.2) : Theo (7.10), (7.11) v (6.5) ta cọ RA = RA (vỗ rũng a = a theo (4.3)) RN’ = (RN {V}) ∪ {u} theo 7.11 u ≠ v theo 7.10 HầNH VEẻ Xaớy hai trổồỡng hồỹp : 1/ v ∈ RA, nghéa laì s (v) = cm Khi âoï : RA’ - RN’ = (RA - RN) ∪ {v} RA’ ∩ RN’ = (RA ∩ RN) - {v} RN’ - RA’ = (RN - RA) ∪ {u} RA’ ∪ RN’ = (RA ∪ RN) - {u} HầNH VEẻ 2/ v RA, nghộa laỡ s (v) = nw Khi âoï : RA’ - RN’ = RA - RN TS PHAN HUY KHẠNH biãn soản 145 146 Cäng nghãû Pháön mãöm RA’ ∩ RN’ = RA ∩ RN RN’ - RA’ = ((RN - RA) - {v}) ∪ {v} RN’ ∪ RA’ = ((RN ∪ RA) - {u} {v} HầNH VEẻ Nhổ vỏỷy caùc chuyóứn tióỳp tỉì s (u) v s (v) sau fr → nw våïi u cm → ol våïi v trỉåìng håüp 1/ nw → fr våïi v trỉåìng håüp 2/ Cạc chuøn tiãúp ny tỉång ỉïng våïi cạc chuøn tiãúp â chè båíi hm g âënh nghéa åí (6.4) IV.7 Triãøn khai thỉûc hiãûn láưn thỉï ba Láưn ny, ta gi thiãút ràịng xy cạc sai sọt cáưn phi dỉû phng nhåì hãû thäúng håüp thỉïc họa v khåíi âäüng lải Gi sỉí cạc bng a, n, m v s âỉåüc ci âàût trãn cạc thiãút bë nhồù khaùc nhổ sau : HầNH VEẻ Tổỡ caùch tọứ chỉïc ny, ta mún dỉû phng cạc sai sọt tạc âäüng lãn bäü nhåï bàịng cạch khåíi âäüng lải tỉì âéa ÅÍ âáy, ta â ci âàût cạc bng s v s bäü nhåï våïi mủc âêch tàng hiãûu qu ca phẹp thay âäøi bäü nhåï l nhanh nháút cọ thãø Våïi mủc âêch trãn, viãûc khåíi âäüng lải lm thay âäøi bng s tỉì chênh (thỉûc tãú l s’ = gos theo (6.6)) khäng coỡn coù taùc duỷng nổợa vỗ rũng ta giaớ thióỳt ràịng bäü nhọ trung tám l s s khäng cn nỉỵa Mäüt gii phạp l gáúp âäi bng s lãn âéa cho mäùi láưn håüp thỉïc họa Xáy dỉûng bng måïi t âæåüc tæång æïng våïi báút biãún nhæ sau : t ∈ D → {fr, cm} (8.1) Chuï yï ràịng ta khäng cáưn mi giạ trë cạc trảng thại õởa chố õộa vỗ rũng t chố duỡng õóứ taùi sinh lải bng s khåíi âäüng lải, tỉì âọ ta cọ báút biãún bäø sung sau : {x ∈ D | t (x) = cm} = ran (a) (8.2) Ta cọ cạc âàûc t måïi sau : (a, n, m, s, t) mod3 (x, y) (a’, n’, m’, s’, t’) (a, n, m, s) mod2 (x, y) (a’, n’, m’, s’) (8.3) t’ = t xem (6.5) (a, n, m, s, t) rst3 (a’, n’, m’, s’, t’) (a, n, m) rst1 (a’, n’, m’)(8.4) s’ = t xem (4.6) 147 Âàûc taí t’ = t (8.5) (a, n, m, s, t) vld3 (a’, n’, m’, s’, t’) (a, n, m, s) vld2 (a’, n’, m’, s’) xem (6.7) t’ = s’ Dãù dng chỉïng minh ràịng c ba âàûc t trãn l ph håüp v cháúp nháûn âỉåüc Màût khạc ta tháúy ràịng phẹp khåíi âäüng lải sinh bäü nhåï tỉì âéa v chè tỉì âéa m thäi Triãøn khai láưn thỉï tỉ v láưn thỉï nàm Ta s m họa cạc giạ trë fr, nw, cm v ol hm âån ạnh k nhæ sau : k = {(0, 0) → fr, (0, 1) → ol, (1, 0) → cm, (9.1) (1, 1) → nw} Sau âọ ta biãøu diãùn cạc hm s v t nhåì ba chùi bit sau : b ∈ D → {0, 1} âãø biãøu diãùn s c ∈ D → {0, 1} d → {0, 1}âãø biãøu diãùn t (9.2) Cúi cng, thay âäøi cạc biãún tỉång ỉïng våïi cạc âiãưu kiãûn sau : s (x) = k (b (x), c (x)) t (x) = k (d (x), 0) våïi x ∈ D (9.3) Gi sỉí l phẹp b (âo ngỉåüc bêt) sau = 1,1 = (9.4) Ta tháúy cọ thãø m họa hm f â âënh nghéa åí (6.4) nhåì hai phẹp b v hm h cng â dënh nghéa åí (6.4) nhåì phẹp chẹp v âàût lãư tỉång ỉïng våïi hm : Z ∈ D → {0} (9.5) Ta cọ âàûc t måïi sau : (a, n, m, b, c, d) mod4 (x, y) (a’, n’, m’, b’, c’, d’) (a, n, m) vld1 (a’, n’,m’) b’ = b (9.8) c’ = z xem (4.7) d’ = b Bỏy giồỡ ta chố cỏửn toùm từt laỷi nhổợng gỗ â lm cho âãún lục ny, nghéa l mäüt màût, chẹp lải cạc âàûc t (4.3), (4.6) v (4.7) vo bãn ca (9.6), (9.7) v (9.8), màût khạc, nhọm cạc báút biãún (4.1), (6.1), (6.2), (6.3), (8.1), (8.2) v (9.2) Âiãưu ny lm âỉåüc bàịng cạch khỉí cạc biãún tråí thnh dỉ thỉìa (chỉïa s v t) båíi cạc phẹp thay âäøi biãún (9.3) TS PHAN HUY KHẠNH biãn soản 147 148 Cäng nghãû Pháưn mãưm Khi chẹp, ta tháúy ràịng âàûc t (4.3) chỉïa âiãưu kiãûn trổồùc L khọng dóự gỗ tờnh õổồỹc óứ khàõc phủc nhỉåüc âiãøm ny ta âỉa vo mäüt biãún måïi w l mäüt säú ngun w∈N (9.9) w chỉïa cạc pháưn tỉí ca táûp håüp L (cardinality) w = | RA ∪ RN | Ta thỉìa nháûn ngáưm ràịng cạc táûp håüp D v A âãưu l hỉỵu hản Khi håüp thỉïc họa v khåíi âäüng lải, bäü âãúm w õổồỹc khồới taỷo giaù trở |D| - |A| (vỗ ràịng a v n âãưu âån ạnh) l mäüt hàịng säú dỉång ca hãû thäúng Khi cọ sỉû thay âäøi, bäü âãúm w tàng lãn vaì chè âëa chè v, quạ ti n, âang åí trảng thại cm, nghéa laì nãúu b (v) = vaì nãúu c (v) = Våïi sỉû måí räüng måïi ny, báút biãún ca hãû thäúng lục ny s l : a∈A→D (6.3) n∈A→D (6.3) m∈D→V (4.1) b ∈ D → {0, 1} (9.2) c ∈ D → {0, 1} (9.2) d ∈ D → {0, 1} (9.2) d ∈ D → {0, 1} (9.2) w∈N (9.9) RA - RN = {x ∈ D / b (x) = vaì c (x) = 1} (6.2) RA ∩ RN = {x ∈ D / b (x) = vaì c (x) = 0} (6.2) RN - RA = {x ∈ D / b (x) = vaì c (x) = 1} (6.2) RA ∪ RA {x ∈ D / b (x) = vaì c (x) = 0} (6.2) RA = {x ∈ D / d (x) = 1}(9.2) W = | RA ∪ RN | (9.10) Trong âoï RA = ran (a) RN = ran (n) Sau âáy l cạc âàûc t âỉåüc tọm tàõt bàịng cạch thay thãú cạc danh di cạc biãún båíi hai biãún trảng thại state v trảng thại cọ dáúu nhạy (‘) state’ state mod5 (x, y) state’ x∈A y∈V w≠0 a’ = a n’ = n + {x → u} Âàûc taí 149 m’ = m + {u → y} b’ = b + {u → b (u) v → b (v)} (9.12) c’ = c + {u → c (u), v → c (v)} d’ = d (b (v) = & c (v) = 0) ⇒ w’ = w - Trong âoï u ∈ {Z ∈ D | b (z) = & c (z) = 0} v = n (x) state rst5 state’ a’ = a n’ = a m’ = m b’ = d (9.13) c’ = z d’ = d w’ = | D | - | A | state vdl5 state’ a’ = n n’ = n m’ = m b’ = b (9.14) c’ = z d’ = b w’ = | D | - | A | Trong âoï Z ∈ D → {0} Sau õỏy laỡ quaù trỗnh bióỳn õọứi cuỷ thóứ IV.8 ỷc taớ laỡm gỗ ? Sau õỏy ta seợ traớ lồỡi cỏu hoới vóử muỷc õờch (cho ai, cho caùi gỗ) ca cạc cäng viãûc m ta â lm Vai tr âáưu tiãn ca mäüt âàûc t l cho phẹp måí cạc tranh lûn vãư âãư ti âàûc t âãư ti âàûc t âãø cáûp âãún Thỉûc tãú, khạc våïi mọỹt chổồng trỗnh, mọỹt õỷc khọng phaới vióỳt õóứ mạy cọ thãø hiãøu âỉåüc m âãø cho nhỉỵng NSD cọ thãø hiãøu v tin tỉåíng vo âụng âàõn ca näüi dung â âàûc t Tỉì âàûc t lục âáưu åí mủc cho âãún cạc âàûc t tiãúp theo åí cạc mủc 4, 6, v 8, ta â sỉí dủng cạc rng büc mäùi lục mäüt mang thỉc tiãùn Ta â khàóng âënh âỉåüc âụng âàõn ca âàûc t båíi cạc chỉïng minh âënh l ph håüp v cháúp nháûn âỉåüc : bo ton báút biãún Báy giåì váún âãư l sỉí dủng caùc õỷc taớ õóứ lỏỷp trỗnh Trong muỷc naỡy, ta seợ lỏỷp trỗnh cho caùc trổồỡng hồỹp õỷc taớ (9.12), (9.13) v (9.14), bàịng cạch sỉí dủng ngän TS PHAN HUY KHẠNH biãn soản 149 150 Cäng nghãû Pháưn mãưm ngỉỵ gi Pascal Ta âỉa vo cạc quy tàõc âãø tiãút láûp mäúi liãn hãû giỉỵa âàûc t v láûp trỗnh Quy từc : Khi mọỹt õỷc taớ chổùa caùc õióửu kióỷn trổồùc, chổồng trỗnh tổồng ổùng seợ laỡ mäüt hm Theo nghéa ca Pascal, mäùi giạ trë sai ca âiãưu kiãûn trỉåïc s tr vãư biãún trảng thại state mọỹt giaù trở phỏn bióỷt Chổồng trỗnh tổồng ổùng våïi âàûc t (9.12) l sau : if not (x in A) then state := bad - x else if not (y in v) then state := bad - y else if w = then state := no more place else begin State := OK ; Modification {goüi th tủc} end ; Quy tàõc : Khi mäüt âàûc t chỉïa cạc biãún phủ, ta cọ thãø måí mi th tủc chỉïa cạc biãún ny l cạc biãún củc bäü Th tủc ny bàõt âáưu båíi cạc lãûnh khåíi âäüng Th tủc Modification sau : procedure Modification ; var u, v : D begin u := ; {chn u l âëa chè bẹ nháút ca L} while (b (u) ≠ 0) or (c (u) ≠ 0) u := u + ; (10.2) v := n (x) {tiãúp tủc thán th tủc end ; Quy tàõc : Cạc âiãưu kiãûn sau khạc nãúu cọ dảng a’ = (trong âọ dáúu ba cháúm chè âënh mäüt biãøu thỉïc khåíi âäüng chỉïa caùc bióỳn coù õaùnh dỏỳu nhaùy), thỗ coù thóứ õổồỹc chuøn thnh phẹp gạn qua cạc quy tàõc bäø tråü sau : - Loải b cạc âiãưu kiãûn sau dảng âàóng thỉïc Vê dủ : d’ = d - Thay thãú dáúu = båíi dáúu gạn bàịng := - Thỉûc hiãûn phẹp täúi ỉu mäüt hm l quạ ti 151 Âàûc t - Loải b cạc dáúu nhạy ‘ - Thay thãú mäüt âiãưu kiãûn sau båíi cáúu trục âiãưu kiãûn if else : Cạc âiãưu kiãûn sau khäng bë loải b ca âàûc t (9.12) sau : if not (x in A) then state := bad - x else if not (y in V) then state := bad - y (10.1) else if w = then state := no-more-place else begin state := O.K ; Modication {gi giạ trë th tủc} end ; Quy tàõc : Khi mäüt âàûc t chỉïa cạc biãún phủ, ta cọ thãø måí mäüt th tủc chỉïa cạc biãún ny l cạc biãún củc bäü Th tủc ny bàõt âáưu båíi cạc lãûnh khåíi âäüng Th tủc Modication nhæ sau : Procedure Modication ; var u, v : D begin u := ; {choün u laì âëa chè bẹ nháútca L} ỉhile (b (u) ≠ 0) or (c (u) ≠ 0) u := u + ; (10.2) v := n (x) {tiãúp tuûc thán th tủc end ; Quy tàõc : Cạc âiãưu kiãûn sau khạc nãúu âãưu cọ dảng a’ = (trong âoï dáúu cháúm chè dënh mäüt biãøu thổùc khọng chổùa caùc bióỳn coù õaùnh dỏỳu nhaùy), thỗ cọ thãø âỉåüc chuøn thnh phẹp gạn qua cạc quy tàõc bäø tråü sau : - Loải b cạc âiãưu kiãûn sau dảng âàóng thỉïc Vê dủ : d’ = d - Thay thãú dáúu = båíi dáúu gạn bàịng := - thỉûc hiãûn phẹp täúi ỉu mäüt hm l quạ ti - Loải b cạc dáúu nhạy ‘ - Thay thãú mäüt âiãưukiãûn sau båíi cáúu trục âiãưu kiãûn if else : Cạc âiãưu kiãûn sau khäng loải b ca âàûc t (9.12) sau : n (x) := u ; m (u) := y ; (10.3) TS PHAN HUY KHẠNH biãn soản 151 152 Cäng nghãû Pháön mãöm b (u) := b (u) ; b (v) := b (v) ; c (u) := c (u) ; c (v) = c (v) ; if (b (v) = 1) and (c (v) = 0) then w := w - Quy tàõc : Mäüt caïch hãû thọỳng caùc hóỷ chổồng trỗnh õaợ vióỳt õổồỹc bồới caùc quy tàõc âm bo “song song” âỉa vo tỉì õỷc taớ Tổỡ caùc õoaỷn chổồng trỗnh (10.1), (10.2) vaỡ (10.3) ta nháûn âỉåüc cäng thỉïc âáúy â hån sau : 153 Âàûc t Mäüt säú âãư thi I Âàûc taí (Specification) Cho ma tráûn vuäng A cáúp n×n Viãút âàûc t thãø hiãûn : a) Mäùi pháưn tỉí trãn âỉåìng chẹo chênh l pháưn tỉí låïn nháút trãn cng hng âi qua pháưn tỉí âọ b) Mäùi pháưn tỉí trãn âỉåìng chẹo phủ l pháưn tỉí nh nháút trãn cng cäüt âi qua pháưn tỉí âọ Mäüt xáu (string) w âỉåüc gi l âäúi xỉïng (palindrome) nãúu w = wR hay âoüc xuäi ngæåüc âoüc ngæåüc âãưu (wR l xáu âo ngỉåüc ca w) Vê dủ cạc xáu omo, mannam, âãưu l âäúi xỉïng Viãút âàûc t thãø hiãûn cạc xáu âäúi xỉïng Âa thỉïc cáúp n âỉåüc viãút dỉåïi dảng Toạn hoüc laì : Pn(x) = a0 + a1x1 + a2x2 + + anxn Viãút âàûc t thãø hiãûn phẹp cäüng, so sạnh hai âa thỉïc Pn(x) v Qm(x), nhán âa thỉïc våïi mäüt hàịng säú a × Pn(x) v nhán hai âa thỉïc Pn(x) × Qm(x) Cạc phán säú (hay säú hỉỵu t) âỉåüc biãøu diãùn båíi danh (n, d), våïi n l tỉí säú v d l máùu säú, l nhỉỵng säú ngun (d ≠ 0) Viãút âàûc t xáy dỉûng cạc hm xỉí l phán säú: rụt gn, trỉì, chia v so sạnh hai phán säú, cäüng, nhán hai phán säú vaì chuyãøn âäøi phán sọỳ thaỡnh sọỳ thổỷc II Lỏỷp trỗnh cỏỳu truùc (Structured programming) Viãút lãûnh bàịng gi ngỉỵ (phng Pascal), chè sỉí dủng täúi âa ba cáúu trục tưn tỉû, âiãưu kiãûn if v làûp (while-repeat), theo cạc så âäư khäúi dỉåïi âáy : Âụng C1 S1 Sai Âụng S1 C1 Sai Âuïng Sai C2 S2 Sai S2 C2 Âuïng TS PHAN HUY KHẠNH biãn soản 153 154 Cäng nghãû Pháưn mãưm Sai S1 C1 Âụng Sai C1 S1 Âụng Sai S2 S3 C2 Âuïng Sai S2 S3 C2 Âuïng Âuïng C1 S1 Sai Sai C1 S2 S1 Âuïng C2 Sai Âụng C2 Âụng Sai S3 S2 Viãút lãûnh bàịng gi ngỉỵ (phng Pascal), chè sỉí dủng täúi âa ba cáúu trục tưn tỉû, âiãưu kiãûn if v làûp (while repeat), theo så âäư khäúi dỉåïi âáy : III Thỉí nghióỷm chổồng trỗnh (Testing) Giaớ sổớ caùc chổồng trỗnh õaợ cho åí pháưn trãn âáy l cạc âån thãø gi õóỳn caùc õồn thóứ S1, S2 vaỡ S3) Trỗnh by mäüt phỉång phạp âãø thỉí nghiãûm âån thãø gi ... nghiãûm thiãút kãú ton bäü thiãút kãú chi tiãút âån vë hãû thäúng 50 25 25 13 49 17 17 20 27 10 20 23 20 26 22 18 36 10 18 24 24 24 Mäüt phỉång phạp khạc, gi l phỉång phạp phoỡng saỷch (Clean-room... cäüng cạc sọ ngun giỉỵa v 23 1 Thåìi gian thỉí nghiãûm mäüt phẹp cäüng l µs Säú lỉåüng dỉỵ liãûu l : 23 1 x 23 1 = 26 2 ≈ 9 .22 x 1018 Thåìi gian thỉí nghiãûm ton thãø l trãn 29 2 471 nàm b) Cạc thỉí nghiãûm... soản 135 136 Cäng nghãû Pháưn mãưm q p 0 0 0 mod (1, 1) 1 0 0 mod (2, 2) 1 2 0 mod (1, 3) 2 0 vld 3 2 0 mod (3, 1) 3 2 2 q q not 3 2 0 Pháön tióỳp theo seợ laỡm mởn mọ hỗnh naỡy, nghộa laỡ âỉa vo