Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.WproWadzeniedoteStoWania
1.5.
Ogólnezasadytestowania
Wciągukilkudziesięciuostatnichlatpojawiłosięwielezasaddotyczącychtestowania
oprogramowania.Poniższalista,zaczerpniętaz[13],podajesiedemuniwersalnychza-
sad,któreobowiązująniezależnieodzakresutestowania,rodzajutestowanegosystemu
czyużywanychtechnik.
Zasada1.Testowanieujawniausterki.hTestowaniepokazujeobecność,aniebrakuste-
rek”–tosłynnezdaniezostałowygłoszoneprzezDijkstrępodczasdyskusjinakonfe-
rencjihSoftwareEngineeringTechniques”w1969rokuwRzymie[21].Test,którego
wynikróżnisięodoczekiwanego,pokazujeistnieniejakiegośproblemuwkodzielubdo-
kumentacji.Wystarczyjedentakitest,abyśmymoglistwierdzićwystąpieniebłędu.Jeśli
jednakwszystkietestydadząpoprawne,tzn.zgodnezoczekiwaniem,wyniki,czyjestto
dowódpoprawnościtestowanegoprogramu?Niestetynie.Wkodziemożeistniećde-
fekt,któregożadentestniewykrył.StwierdzenieDijkstrymawręczcharaktertwierdze-
niamatematycznego–możnajeformalnieudowodnićnagruncieteoriirozstrzygalności.
Formalnie,problemstwierdzeniapoprawnościprogramujestnierozstrzygalny,tozna-
czynieistniejealgorytmstwierdzający,czyprogrampodanymunawejściujestpopraw-
ny
2.Oczywiścietestowaniezmniejszaprawdopodobieństwowystępowaniawprogramie
niewykrytychdefektów,niemniejnieznalezienieżadnychusterekniejestdowodempo-
prawnościoprogramowania.
Zasada2.Testowaniegruntownejestniewykonalne.Przetestowaniewszystkichmoż-
liwychkombinacjiwarunkówpoczątkowychidanychwejściowychdoprogramujest
wykonalnetylkowtrywialnychprzypadkach.Pozatrywialnymiprzypadkaminiedasię
równieżprzetestowaćwszystkichmożliwychścieżekprzepływusterowania.Jeśliwpro-
gramieistniejeprzynajmniejjednapętla,tomożesięonawykonywaćdowolnąliczbę
razy,zatemistniejenieskończeniewieleścieżekwykonania.Nawetjeślizałożymy,że
dziedzinawejściowajestograniczona(wkońcukomputeroperujenazbiorachdyskret-
nych,nieciągłychikażdazmiennamożeprzyjmowaćskończonąliczbęmożliwychwar-
tości),toitakliczbakombinacjiwejśćczyścieżekjestzbytduża,abydałasięprzetesto-
waćwsensownymczasie.
zmienna(ang0variable)–elementpamięcikomputera,dostępnywprogramieprzez
swojąnazwę
Rozważmyprzykładpseudokoduzlistingu1.3.
2Poprawnośćprogramuwszczególnościwymaga,byalgorytmmiałwłasnośćstopu,tzn.abydlakażdego
możliwegowejściazakończyłswojąpracęwskończonymczasie.Jeśliprogramsięzapętla,oznaczatoistnienie
usterki.Wiadomo,żetzw.problemstopujestproblememnierozstrzygalnym,awięcnierozstrzygalnyjesttakże
problemstwierdzenia,czyprogramniezawierausterek.
14