Oblikovanje programske potpore Testiranje ispitivanje programske potpore Sveuilite
Oblikovanje programske potpore Testiranje (ispitivanje) programske potpore Sveučilište u Zagrebu Fakultet elektrotehnike i računarstva Zavod za elektroniku, mikroel. , računalne i inteligentne sustave
Tema n Testiranje i ciljevi testiranja Klasifikacija testiranja Upoznavanje procesa testiranja Principi testiranja sustava i komponenti Strategije testiranja Funkcionalno i strukturno testiranje Generiranje test slučajeva Svojstva alata za automatizaciju testiranja n Cilj: n n n n n Upoznavanje tehnika testiranja kao jedne od mogućih tehnika verifikacije programske podrške Razumijevanje terminologije, procesa testiranja i različitosti tehnika testiranja Oblikovanje programske potpore 2
Literatura n n n Glen Myers, The art of software testing, testing Second ed. , John Wiley & Sons, New Jersey, 2004. Sommerville, I. , Software engineering, 8 th ed, Addison Wesley, 2007. S. Siegel, Object-Oriented Software Testing: A hierarchical Approach, John Wiley & Sons, New Jersey, 1996. Oblikovanje programske potpore 3
Što je testiranje? n n Cilj testiranja je pokazati da program ispravo obavlja željene funkcije. Testiranje je proces uspostave povjerenja ispravnog rada. Testiranje je proces pokazivanja odsustva pogrešaka. ? Testiranje je proces izvođenja programa sa svrhom pronalaženja pogrešaka. Oblikovanje programske potpore 4
Oblikovanje programske potpore 5
Testiranje n n Aktivnost s ciljem otkrivanja informacija o ispravnosti i kvaliteti, te poboljšanja pronalaženjem kvarova i problema testiranog produkta. Otkrivanje informacija n n Organizirana i detaljna potraga za relevantnim informacijama Aktivan proces istraživanja n n postavljanje pitanja i analiza rezultata Za ostvarenje cilja upotrebljava: n n eksperimentiranje; logika, matematika; modeli; alati (programi, mjerni instrumenti, analizatori. . . Oblikovanje programske potpore 6
Ciljevi testiranja n n Testiranje uobičajeno obuhvaća više ciljeva, a time zahtijeva primjenu različitih strategija i testove, dokumentaciju i daju različite rezultate Najčešći cilj: Pronaći i ispraviti pogreške Osigurati pouzdanost, ispravnost, otkrivanje pogrešaka Minimizirati rizike neuspjeha n n n n n Provjeriti sukladnost rada (engl. interoperability) s ostalim komponentama Pomoći u donošenju odluke o puštanju u rad/prodaju Zaustaviti prerano puštanje u rad/prodaju (engl. premature product releases) Minimizirati troškove tehničke podrške Procijeniti sukladnost specifikacijama Sukladnost s normama (zakonske, tehničke, ) Minimizirati rizik tužbi obzirom na sigurnost vidi slijedeću sliku Definirati način sigurne uporabe Procjena kvalitete Oblikovanje programske potpore 7
Primjer: Microsoft EULA 1 18. EXCLUSION OF INCIDENTAL, CONSEQUENTIAL AND CERTAIN OTHER DAMAGES. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL MICROSOFT OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS OR CONFIDENTIAL OR OTHER INFORMATION, FOR BUSINESS INTERRUPTION, FOR PERSONAL INJURY, FOR LOSS OF PRIVACY, FOR FAILURE TO MEET ANY DUTY INCLUDING OF GOOD FAITH OR OF REASONABLE CARE, FOR NEGLIGENCE, AND FOR ANY OTHER PECUNIARY OR OTHER LOSS WHATSOEVER) ARISING OUT OF OR IN ANY WAY RELATED TO THE USE OF OR INABILITY TO USE THE SOFTWARE THE PROVISION OF OR FAILURE TO PROVIDE SUPPORT SERVICES, OR OTHERWISE UNDER OR IN CONNECTION WITH ANY PROVISION OF THIS EULA, EVEN IN THE EVENT OF THE FAULT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY, BREACH OF CONTRACT OR BREACH OF WARRANTY OF MICROSOFT OR ANY SUPPLIER, AND EVEN IF MICROSOFT OR ANY SUPPLIER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. The guarantee - The Software is designed and offered as a general-purpose software, not for any user's particular purpose. You accept that no Software is error free and you are strongly advised to back-up your files regularly. . . b) any support services provided by Microsoft shall be substantially as described in applicable written materials provided to you by Microsoft and Microsoft support engineers will use reasonable efforts, care and skill to solve any problem issues. 1 EULA = End User Licence Agreement Oblikovanje programske potpore 8
The GPL 1 15. Disclaimer of Warranty. n THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. n IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. n If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. 1 GPL = General Public License (GNU GPL) Oblikovanje programske potpore 9
Kvar, pogreška, zatajenje n Kvar (engl. Error) proglašeni uzročnik kvara n može biti prikriven neko vrijeme n n fizikalni svijet Pogreška (engl. Fault ) dio stanja sustava odgovorno za stvaranje zastoja n manifestacija kvara n n informacija Zatajenje (engl. Failure) n sustav ne zadovoljava specifikacije n vanjska pojavnost problem vidljiv izvan sustava Oblikovanje programske potpore 10
Primjer kočnice . . . zatajenje kvar memorija 0 0 1 0 0 0 pogreška Oblikovanje programske potpore 11
Odnos pogreška i zatajenja n Kvar n n Pogreška uvođenje kvara u programsku potporu (dokumentacija/program) n n Krivi rad pri oblikovanju ili programiranju Uzrokuje pogrešku obrade/izvođenja programa i dovodi do zatajenja Paretov princip (engl. Pareto principle, “Law of the vital few”) n Mali broj pogrešaka dovodi do velikog broja zatajenja (20/80) Pogreška Zatajenje Oblikovanje programske potpore 12
Klasifikacija i posljedice pogrešaka n Tipovi pogrešaka n n n n š t e t a Kategorije pogrešaka n n blage (engl. mild) dosadne (engl. annoying) uznemiravajuće (engl. disturbing) ozbiljne (engl. serious) granične (engl. extreme) katastrofalne (engl. catastrophic) zarazne (engl. infectious) funkcijske, sistemske, podatkovne, pogreške kodiranja, projektiranja, dokumentacije, . . . IEEE std. 1044. 1 IEEE guide to classification for software anomalies Oblikovanje programske potpore 13 13
Testiranje n Problem testiranja: n n n Bez specifikacije nema testiranja Testiranje znači usporedbu stvarnih rezultata s postavljenim standardima The Institute of Electrical and Electronics Engineers (IEEE) definira: n n test - kao jedan ili više testnih scenarija (engl. Test case) testiranje - kao proces analize programskog koda sa svrhom pronalaska razlike između postojećeg i zahtijevanog stanja (kvar, bug), te vrednovanja svojstava programa Odgovornost za verifikaciju i validaciju n Verification: n n n Ponašanje programa prema specifikacijama (odsustvo kvarova). Unit testing, integrating testing, formal verification Validation: n n "Are we building the product right”. "Are we building the right product”. Program mora odgovarati zahtjevima (zadovoljstvo korisnika) prototipovi, test prihvatljivosti (engl. acceptance testing) Oblikovanje programske potpore 14
Standardi n n IEEE Standard 830 -1998 - Software Requirements Specifications IEEE Standard 829 -1998 - Software Test Documentation n n n P 829/D 11, Feb 2008 Draft IEEE Standard for software and system test documentation (Revision of IEEE 829 -1998) IEEE Standard 1008 -1987 - Software Unit Testing IEEE Standard 1012 -1986 - Software Verification and Validation Plans ISO 9126 - Standard for the evaluation of software quality ISO 25000: 2005 - Software product Quality Requirements and Evaluation ISO/IEC 90003: 2004 - Software engineering - Guidelines for the application of ISO 9001: 2000 to computer software n quality management standard for computer software and related services. Oblikovanje programske potpore 15
Standard ISO/IEC 29119 n ISO/IEC 29119 Software Testing n n n ISO/IEC JTC 1/SC 7 Working Group 26 razvoj započeo 2007. godine cilj je razviti jedan standard koji će pokrivati cijeli životni ciklus testiranja programske podrške Oblikovanje programske potpore 16
Primjer dokumenata n 1. IEEE Std. 829 -1998 Standard for Software Test Documentation Contents Plan testiranja - Test Plan n 2. odluka što treba testirati Opis testnih scenarija. n izrada testova Koraci provođenja testova. n kako se izvodi testiranje Zapis tijeka provođenja testova. Izvješća odstupanja - Test Incident Report n 7. n Bilješke testiranja - Test Log n 6. plan provođenja testiranja Testne procedure -Test Procedure Specification n 5. Svojstva, pristup i rezultata testiranja. Testni scenariji - Test Case Specification n 4. n Oblikovanje testiranja - Test Design Specification n 3. Glavni plan testiranja i osnovne razine. Bilješke anomalija u zahtjevima, oblikovanju, kodu ili testovima. Sažetak izvješća testiranja - Test Summary Report n Završno izvješće Oblikovanje programske potpore 17
Terminologija n Testni podaci (I) n n Očekivani izlaz (O) n n uređeni par (I, O) kako testirati modul, funkciju, . . . sadrži opis stanja prije testiranja, funkcije koja se testira Stvarni izlaz n n zabilježen prije provođenje testa Testni scenarij (engl. test case) n n Ulazi odabrani za provođenje određenog testa Rezultat dobiven provođenjem testa Kriterij prolaza testa n Kriterij usporedbe očekivanog i stvarnog izlaza određen prije provođenja testa Oblikovanje programske potpore 18
Svojstva testiranja n Testiranje programske podrške zasniva se na dinamičkoj verifikaciji ponašanja programa na konačnom broju testnih scenarija, pogodno odabranih iz uobičajeno beskonačne domene izvođenja, obzirom na očekivano ponašanje. n n Testiranje podrazumijeva izvođenje programa na ispitnim podacima Beskonačno i detaljno testiranje je nemoguće n n n praktična ograničenja resursa i vremena Tehnike testiranja se razlikuju u načinu odabira pogodnih kriterija i testnih scenarija. Mora omogućiti donošenje odluke o prihvatljivosti i očekivanim rezultatima. Oblikovanje programske potpore 19
Mogućnosti testiranja n engl. Testability mjera mogućnosti jednostavnog testiranja programa n mjerljivost (engl. observability) n n nadzor (engl. controllability) n n n složenost arhitekture i logike programa stabilnost (engl. stability) n n neovisno testiranje modula jednostavnost (engl. simplicity) n n jednostavnost upravljanja tijekom obrade mogućnost automatizacije i ponovne uporabe testova dekompozicija (engl. decomposability) n n jednostavna identifikacija rezultata, različiti izlazi za različite ulaze, jednostavno uočavanje neispravnih rezultata broj promjena tijekom testiranja . . Oblikovanje programske potpore 20
Verifikacija i testiranje n Tehnike verifikacije programa n Dinamička verifikacija n Testiranje n Statička verifikacija n Ispitivanja strukture (engl. Structure Walkthroughs) n Provjere ispravnosti n Formalna verifikacija n Primjena formalnih metoda matematičke logike za dokaz ispravnosti programa Oblikovanje programske potpore 21
Povijest testiranja n n Evolucija koncepta testiranja: – 1956 Prva faza: ispravljanje pogrešaka (engl. Debugging) n n n 1957 – 1978 Druga faza: Orijentacija na demonstraciju (engl. Demonstration) n n n Testiranje = dio validacije i verifikacije Rano otkrivanje pogrešaka u zahtjevima, oblikovanju i implementaciji 1988 – 2000 Peta faza: Orijentacija na prevenciju (engl. Prevention) n n n Testiranje = izazivanje zatajenja sa svrhom otkrivanja pogrešaka Uspješan test otkriva zatajenje 1983 – 1987 Četvrta faza: Orijentacija na evaluaciju (engl. Evaluation) n n Razdvajanje provjere rada programa i ispravljanja grešaka; Testiranje pokazuje ispravan rad (tipični ulazi), sukladnost specifikaciji 1979 – 1982 Treća faza: Orijentacija na razaranje (engl. Destruction) n n Testiranje = provjera rada programa i ispravljanje engl. check-out & debugging Testiranje = jedan od načina pokušaja izbjegavanja pogrešaka Prevencija pogrešaka u zahtjevima, oblikovanju i implementaciji 2000 – Šesta faza: Orijentacija na razvoj prog. potpore (engl. Discipline) n n engl. test-driven software development Rezultira programskim kodom podobnim za testiranje Oblikovanje programske potpore 22
Testiranje danas n n n Nije aktivnost koja započinje nakon završetka kodiranja s ograničenom svrhom otkrivanja pogrešaka Aktivnost objedinjena u procesu razvoja i održavanja i važan dio izgradnje produkta Započinje u ranim fazama analize zahtjeva n planovi testiranja i procedure moraju biti sistematično i kontinuirano razvijane, te prilagođavane sukladno razvoju Oblikovanje programske potpore 23
Uzročnici zatajenja programa Stanje programa+ neočekivani izlaz Stanje sustava Ulazni podaci Nadzirani izlaz Testirani sustav Utjecaj na povezane uređaje/resurse Konfiguracija i resursi sustava Utjecaj suradničkih procesa, klijenata, poslužitelja Izlaz prema suradničkim procesima, klijentima, poslužiteljima Oblikovanje programske potpore 24
Uporaba informacija u testiranju n Specifikacije n n Informacije oblikovanja n n n za odabir, generiranje, provjeru Programski kod n za odabir, generiranje, provjeru Uporaba n n formalne neformalne za odabir, generiranje, provjeru (testnih scenarija) Povijest, model Iskustvo Oblikovanje programske potpore 25
Problemi zatajenja programa n Ugrađena dijagnostika kao pomoć u analizi n n n Umetanje provjera u kod programa Negativi efekti (struktura podataka, resursi, vrijeme, . . . ) Zatajenje zbog efekta “nenamjernog sljepila” n n Ljudi: Ne vide ono što nije u centru pažnje Programi: Uvijek ne vide ono što im nije naglašeno da paze n n Neponovljiva zatajenja n Razmatranje krivih uvjeta n n Precizniji i manje prilagodljivi nemoguće analizirati sve Testovi praktično ne mogu pokriti sve mogućnosti grešaka Oblikovanje programske potpore 26
Potpunost testiranja n n n engl. Complete testing Problem određivanja trajanja procesa testiranja Značenje potpunog testiranja? n Potpuno pokrivanje (engl. Complete coverage)? n n Ne pronalaženje novih pogrešaka? Kraj plana testiranja? Po završetku testiranja znamo da nema neotkrivenih pogrešaka. n n Testiranje svake linije/grane/puta? Ako postoje možemo ih pronaći novim testiranjem testiranje nije potpuno Pojednostavljenje problema uvođenjem pojma potpunog pokrivanja (engl. complete coverage). Oblikovanje programske potpore 27
Pokrivanje testovima n n engl. Complete coverage Stupanj testiranja pojedinih značajki ili dijelova programa n Metrika: pokrivenost koda testovima n n n Postotak programskih elemenata koji su izvedeni Pokrivenost linija koda Pokrivenost grana Pokrivenost puteva Stupanj gotovosti testiranja u odnosu na broj mogućih testova. n Nedostatak: previše pojednostavljenja n n n Problem prekida, paralelnosti. . Provjera zanimljivih podataka i kombinacija Nedostatak koda (“black box”) Dobar alat za procjenu udaljenosti od potpunog testiranja Loše za procjenu gotovosti Oblikovanje programske potpore 28
Svojstva testiranja n n Za potpuno testiranje neophodno provesti: n Test svih mogućih vrijednosti varijabli (ulazne/izlazne/među) n Test svih mogućih kombinacija ulaza n Test svih mogućih sekvenci izvođenja programa n Test svih mogućih HW/SW konfiguracija n Test svih mogućih načina uporabe programa Primjer: n n MASPAR (Massively Parallel computer, 64 K paralelnih procesora) Korijen 32 -bitnog cijelog broja - 4, 294, 967, 296 Test - 6 minuta, usporedba Korijen 64 -bitnog cijelog broja? n 18, 446, 744, 073, 709, 551, 616 Oblikovanje programske potpore 29
Problemi testiranja ulaznih varijabli n Nedokumentirani odziv - Uskršnja jaja – “Easter Eggs” n n Uređivani ulazi podataka (engl. edited inputs) n n Složeni unos podataka preko raznih uređaja Varijacije u vremenu unosa n n na neobične (neočekivane) ulaze – kako otkriti ? Brzo, sporo Prije, tijekom, nakon obrade događaja Obrada nevaljalih ulaza (nedopustivih ? ) Čest problem testiranja: n n Razmišljanje: “niti jedan korisnik to ne bi napravio” Interpretacija: “niti jedan korisnik kojeg mogu zamisliti i koji mi odgovara, to ne bi namjerno napravio” Oblikovanje programske potpore 30
Upravljanje pogreškama n Prevencija – engl. Error prevention n n Uporaba pogodnih metoda oblikovanja za smanjenje složenosti Sprečavanje nekonzistentnosti - npr. CVS, . . . Primjena verifikacije za sprječavanje kvarova u algoritmima Detekcija - engl. Error detection n Tijekom rada n n Testiranje Ispravljanje pogrešaka – Debugging Nadzor rada – Monitoring Oporavak - engl. Error recovery n U radu programa n n Baze podataka n n npr. dijeljenje s nulom ponavljanje transakcija Modularna zalihost - redundancija Oblikovanje programske potpore 31
Kada testirati? n n n Problem testiranja je nemogućnost potpunog testiranja bilo kojeg netrivijalnog modula “Program testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate for showing their absence” n 1972 Dijkstra Tri koraka: n n n Prije kodiranja Tijekom kodiranja Nakon kodiranja Oblikovanje programske potpore 32
Kako testirati? n n Testiranje je spoznajna aktivnost Preduvjeti efikasnog testiranja n n Najbolje koristiti neovisne timove za testiranje n n n Dubinsko poznavanje sustava Znanje tehnika testiranja Vještine primjene tehnika na efikasan način Programeri za testiranje nesvjesno koriste podatke na kojima program radi povećan rizik sukoba s razvojnim timom Program najčešće ne radi kada ga upotrebljava netko drugi n Najgora situacija – to otkriva korisnik Oblikovanje programske potpore 33
Model procesa programskog inženjerstva VODOPADNI eng. Waterfall model 0 25 Specifikacija 50 Oblikovanje 100 75 Razvoj Integracija i testiranje ITERATIVNI engl. Iterative development 0 25 Specifikacija 50 75 Iterativni razvoj 100 Testiranje KOMPONENTNI engl. Component-based software engineering 0 25 Specifikacija 50 Razvoj 75 100 Integracija i testiranje DUGOVJEČNI engl. Development and evolution costs for long-lifetime syst 0 10 Razvoj 200 30 400 Razvoj sustava Oblikovanje programske potpore 34
Trošak ispravljanja pogreške 100 50 20 10 5 2 1 specifikacija oblikovanje programiranje Oblikovanje programske potpore test rad 35
V-model testiranja Testiranje prihvatljivosti zahtjevi Funkcijska specifikacija Testiranje sustava Testiranje integracije oblikovanje implementacija Testiranje komponente Oblikovanje programske potpore 36
V-model testiranja s ranom pripremom Testiranje prihvatljivosti zahtjevi Priprema testa Funkcijska specifikacija Testiranje sustava Priprema testa Testiranje integracije oblikovanje Priprema testa implementacija Testiranje komponente Oblikovanje programske potpore 37
W-model testiranja Zahtjevi Test zahtjeva Funkcijska specifikacija Instalacija Test specifikacije Oblikovanje Test oblikovanja implementacija Izgradnja sustava Integracija Testiranje prihvatljivosti Testiranje sustava Testiranje integracije Testiranje komponenti Oblikovanje programske potpore 38
Aktivnosti testiranja n 1. Četiri osnovne kategorije: Oblikovanje testova (engl. Test design) n n 2. n n Programiranje Provođenje testova i bilježenje rezultata Valorizacija testova (engl. Test evaluation) n n n postavljanje ciljeva testiranja oblikovanje testnih slučajeva pisanje testnih slučajeva ispitivanje testnih slučajeva Testiranje (engl. Test execution) n 4. n Automatiziranje testiranja (engl. Test automation) n 3. Oblikovanje testnih vrijednosti sa svrhom zadovoljenja ciljeva testiranja Analogno oblikovanju arhitekture programske podrške Poznavanje domene i postupaka testiranja Zahtijevaju različita znanja i vještine Oblikovanje programske potpore 39
Tehnike testiranja I n Klasifikacija obzirom na primjenjivost odabira testnih scenarija n Testiranje zasnovano na pokrivenosti engl. Coverage-based testing n Zahtjevi testiranja su specificirani obzirom na pokrivenost testiranog programa n n Testiranje zasnovano na pogreškama engl. Fault-based testing n Testni scenariji koji omogućavaju otkrivanje pogrešaka n n Testiranje zasnovano na kvarovima engl. Error-based testing n Testni scenariji zasnovani na poznavanju tipičnih mjesta izloženih kvarovima (posebice u krivoj uporabi). n Oblikovanje programske potpore 40
Tehnike testiranja II n Klasifikacija obzirom na izvor informacija upotrijebljenih za testne scenarije n Strukturno testiranje, bijela kutija White (glass) box testing n Structural testing n Program-based testing n n Funkcijsko testiranje, crna kutija Black box testing n Functional testing n Specification-based testing n Oblikovanje programske potpore 41
Proces testiranja I n prikaz osnovnog tijeka procesa testiranja Oblikovanje programske potpore 42
Testiranje/ispitivanje – sažetak 1. dio n n n Def. : Testiranje je proces izvođenja programa sa svrhom pronalaženja pogrešaka (dinamička provjera). IEEE stamdardi, dokument testiranja. Terminologija I: kvar (engl. error), pogreška (engl. fault), zatajenje (engl. failure). Terminologija II: ulazni podaci za testiranje, očekivani izlaz, testni slučaj (scenarij), stvarni izlaz, kriterij prolaza testa. Potrebno za testiranje: specifikacija, informacije o oblikovanju, programski kod, uporaba programa, iskustvo. Testovi praktično ne mogu pokriti sve mogućnosti pogrešaka. Potpuno testiranje (kriterij ? ), potpuno pokrivanje. Kada testirati: V-model, V-model + priprema, W-model. Aktivnosti testiranja: oblikovati, automatizirati, provoditi, evaluirati rezultate. Klasifikacija obzirom na odabir scenarija testiranja: pokrivenost, pogreške, kvarovi. Klasifikacija obzirom na izvor informacija za scenarij testiranja: crna kutija (kod nedostupan), bijela kutija (kod dostupan). Oblikovanje programske potpore 43
Proces testiranja II n Testiranje komponenti n n n Test integracije Funkcijsko testiranje n n n engl. Acceptance Testing Test instalacije n n engl. System/Release testing Test prihvatljivosti n n engl. Integration/Function testing Testiranje sustava (performanse) n n engl. Component/Unit testing engl. Installation testing Alpha test Beta test Oblikovanje programske potpore 44
Proces testiranja III Programski kod Arhitektura sustava Requirements Zahtjevi Analysis Inženjerstva zahtjeva Document Test integracije Funkcijski test Test komp. Integrirani podsustavi Funkcionalan sustav ip od su st av Programski kod Test komp. Te st ir an Korisnička dokumentacija Programer Oblikovanje programske potpore 45
Proces testiranja IIIa perspektiva/ zahtjevi naručitelja Opći zahtjevi Test performansi Testni tim Provjeren sustav Test prihvatljivosti Prihvaćen sustav Korisnička okolina Test instalacije Upotrebljiv sustav Testiranje naručitelja korisnik Uporaba sustava “Testiranje korisnika” Oblikovanje programske potpore 46
Proces testiranja - Primjer Izvor: S. H. Kan, J. Parrish D. Manlove: In-process metrics for software testing AS/400 software testing cycle Oblikovanje programske potpore 47
Testiranje komponenti n n Ispitivanje koda na pogreške u algoritmima, podacima i sintaksi Oblikovanje testnih scenarija n n n n sučelje strukture podataka granični uvjeti različiti tokovi izvođenja obrada pogrešaka. . . Testiranje komponente provodi se u kontekstu specifikacije zahtjeva Oblikovanje programske potpore 48 48
Testiranje komponenti n Verificira rad programskih dijelova koje je moguće neovisno zasebno testirati: Pojedinačne funkcije ili metode unutar objekta n Razrede/klase objekata s više atributa i metoda n Složene komponente s definiranim sučeljem za pristup njihovim funkcijama n n n Postoji pristup programskom kodu i upotrebljavaju se alati za ispravljanje pogrešaka Tko radi? Najčešće programer komponente n Testovi proizlaze iz iskustva n Oblikovanje programske potpore 49
Okolina testiranja komponenti n Postupak izolacije komponente u svrhu testiranja Upravljački program (engl. Driver) Testirana komponenta Simulacija poziva komponente Simulacija pozvane komponente Oblikovanje programske potpore 50
Testiranje komponenti OO okoline n Što je komponenta u OO okolini? n n za potrebe testiranja najčešće se uzima razred/klasa Testiranje razreda/klase Testiranje svih operacija n Postavljanje i ispitivanje svih atributa objekta n Ispitivanje objekta u svim stanjima (simulacija događaja koji mijenjaju stanje) n n Poteškoće testiranja razreda uzrokuju osnovni koncepti OO (enkapsulacija, nasljeđivanje, polimorfizam, . . . ) n npr. Informacije koje treba testirati nisu lokalizirane Oblikovanje programske potpore 51
Primjer n n Klasa Weather station Definirati test scenarije za: n n n report. Weather, calibrate, test, startup, shutdown. Uporabom dijagrama stanja pronaći sekvence prijelaza za testiranje i odgovarajuće sekvence događaja koje ih uzrokuju (vidi dijagram) Weather. Station identifier report Weather() calibrate (instruments) test () startup (instruments) shutdown (instruments) test atributa identifier • provjeriti da li je postavljen Npr. • Waiting Calibrating Testing Transmitting Waiting • Shutdown Waiting Shutdown • Waiting Collecting Waiting Summarising Transmitting Waiting Oblikovanje programske potpore 52
Primjer n Dijagram stanja Weather station Operation calibrate () Calibrating OK Shutdown startup () test () Waiting Testing transmission done shutdown () test complete report. Weather () Transmitting clock collection done Summarising weather summary complete Collecting Izvor: Sommerville, I. , Software engineering Oblikovanje programske potpore 53
Testiranje sučelja n n Cilj je otkriti pogreške uzrokovane kvarovima sučelja ili pogrešnim pretpostavkama o sučelju posebno značajno za OO sustave n n Objekti (i komponente) su definirani sučeljima Pogreške nastaju kao posljedica interakcija n Složena komponenta Testni scenariji A B C (test scenariji za cijeli podsustav odnosno složenu komponentu) Izvor: Sommerville, I. , Software engineering Oblikovanje programske potpore 54
Tipovi sučelja programskih komponenata n Parametarsko sučelje (engl. Parameter interfaces) n n Dijeljena memorija (engl. Shared memory interfaces) n n Procedure dijele zajednički memorijski prostor Proceduralno sučelje (engl. Procedural interfaces) n n Podaci i funkcije se prenose pozivima procedure Komponente obuhvaćaju skup procedura koje pozivaju ostali podsustavi (npr. objekti) Sučelje zasnovano na porukama (engl. Message passing interfaces) n Podsustavi traže usluge od ostalih podsustava slanjem poruke (npr. klijent-uslužitelj) Oblikovanje programske potpore 55
Kvarovi sučelja n Pogrešna uporaba (engl. Interface misuse) n Komponenta koja poziva drugu pogrešno upotrebljava njezino sučelje n n Npr. Pogrešan redoslijed parametara Nerazumijevanje sučelja (engl. Interface misunderstanding) n Komponenta koja poziva drugu pogrešno pretpostavlja specifikaciju njezinog ponašanja (npr. binarno pretraživanje na neuređenom nizu) n Vremenske pogreške (engl. Timing errors) n Pozvana i pozivajuća komponenta rade različitom brzinom (npr. zajednička memorija te različita brzina čitanja i pisanja) Naputak za testiranje sučelja: n n n Oblikuj testove tako da parametri poprime ekstremne vrijednosti Uvijek testiraj pokazivače (ako se šalju sučeljem) s null vrijednostima Oblikuj test proceduralnog sučelja tako da zataji komponenta Sustave s razmjenom poruka testiraj na stres (generiraj više pouka nego što je normalno potrebno) Sustave s dijeljenom memorijom testiraj s različitom redoslijedom aktiviranja komponenti Oblikovanje programske potpore 56
Integracijsko testiranje n Proces verifikacije interakcije programskih komponenti n n Sistem se testira tijekom integracije komponenti s ciljem uočavanja problema integracije Cilj je osigurati zajednički rad grupe komponenti prema specifikaciji dokumentaciji zahtjeva Osnovni problem predstavlja lokalizacija pogrešaka n n s dodatnim kodom za zajednički rad zbog složenih interakcija Pristupi integracijskom testiranju n n n Veliki prasak – engl. Big bang Poboljšani veliki prasak Inkrementalno Oblikovanje programske potpore 57
Pristupi integracijskom testiranju n Veliki prasak n n n Poboljšani veliki prasak n n n Integrirati sve komponente bez prethodnog testiranja U slučaju pogrešaka problem predstavlja otkrivanje mjesta pogreške Integracija svih komponenti nakon provedenog testiranja U slučaju pogrešaka i dalje prisutan problem otkrivanja mjesta Inkrementalni pristup n n n Integracija i testiranje sustava dio po dio Uobičajen pristup u praksi Efikasan u lokalizaciji mjesta pogreške Oblikovanje programske potpore 58
Inkrementalno integracijsko testiranje A T 1 A A B T 1 T 2 T 2 T 1 B T 3 T 3 C C T 4 D T 5 komponente testni scenariji n Kako pristupiti testiranju? Oblikovanje programske potpore Izvor: Sommerville, I. , Software engineering 59
Inkrementalno integracijsko testiranje n Odozgo na dolje n Razviti kostur sustava i popuniti ga komponentama zamjena stvarnim komponentama Izvor: Sommerville, I. , Software engineering Oblikovanje programske potpore 60
Inkrementalno integracijsko testiranje n Odozdo na gore n Prvo integrirati neke komponente (najvažnije i najčešće funkcionalnosti), te dodati preostale Izvor: Sommerville, I. , Software engineering Oblikovanje programske potpore 61
Inkrementalno integracijsko testiranje n Funkcijska integracija Integriranje komponenti u konzistentne funkcije bez obzira na hijerarhijsku strukturu n kombinacija odozgo-prema-dolje i odozdo-prema-gore n engl. sandwich n Najčešći postupak u praksi n Oblikovanje programske potpore 62
Testiranje sustava n n engl. System (Release) Testing Proces testiranja inačice namijenjene distribuciji korisniku Osnovni cilj provjera podudarnosti sustava s funkcijskim zahtjevima Uobičajeno funkcijsko testiranje n n Ispitivači nemaju znanje o detaljima implementacije Veća vjerojatnost pronalaženja kvarova koje nisu uočili programeri Neovisni ispitivači uklanjaju sukob interesa razvoja i testiranja Uočavamo dvije faze n n Integracijsko testiranje – ispitivači imaju pristup izvornom kodu Testiranje gotovog sustava - ispitivači imaju sustav kao crnu kutiju Oblikovanje programske potpore 63
Testiranje performansi n n Prije isporuke potrebno je testirati svojstva sustava kao cjeline u radu (engl. emergent properties – svojstvo sustava koje proizlazi od interakcije sastavnih dijelova) Različite namjene: n n n Standardni testovi performansi (engl. benchmarks) Pokazati zadovoljenje performansi pod različitim radnim opterećenjima Pokazati proširivost sustava Testiranje se planira s povećanjem opterećenja sve dok performanse ne postanu nezadovoljavajuće Testiranje pod pritiskom (engl. Stress Testing) n Namjena određivanje stabilnosti sustava n n n Robusnost, raspoloživost i obrada grešaka na graničnim vrijednostima opterećenja npr. broja podataka, učestalost zahtjeva, veličina i sl. npr. transakcija u sekundi, u raspodijeljenim sustavima broj korisnika, Do. S napadi, . . . Istjerivanje pogrešaka Oblikovanje programske potpore 64
Testiranje prihvatljivosti n n n engl. Acceptance Testing Provjerava ponašanje sustava u odnosu na zahtjeve naručitelja (verifikacija je značajnija) Najčešće se provodi zajedno s timom naručitelja Testiranje crne kutije Prije isporuke programa, a ponekad i nakon Cilj je pokazati da sustav zadovoljava zahtjeve i spreman je za uporabu Oblikovanje programske potpore 65
Instalacijsko; , testiranje n Instalacijsko testiranje Provodi se nakon testa prihvatljivosti po instalaciji na ciljanu radnu okolinu n Identično testiranju sustava prema zahtjevima sklopovske konfiguracije n n Alpha / Beta testiranje n Prije završne isporuke, program pokusno upotrebljava ciljana skupina korisnika Alfa – interno n Beta – vanjski korisnici n Oblikovanje programske potpore 66
Ciljevi testiranja n Objašnjeno ranije, ali zbog značaja ponavljamo: Otkrivanje (provociranje) pogrešaka u programu n Uspješan test uzrokuje nenormalno ponašanje programa n Test prikazuje postojanje, a ne odsustvo pogreške n Potrebno kontinuirano testiranje tijekom razvoja programske podrške (V i W modeli testiranja) n Oblikovanje programske potpore 67
Strategije oblikovanja testnih scenarija n Iscrpno testiranje (engl. Exhaustive testing) n n n Testiranje svih mogućih scenarija Moguće samo za ograničene primjere Slučajno testiranje (engl. Random Testing) n n Nije isto kao i “ad hoc” testiranje Odabir testnih scenarija temeljem vjerojatnosti n n n Uniformna razdioba Razdioba temeljena na prethodno prikupljenim podacima Sistematsko testiranje n Podjela ulaznih podataka u podomene (particije) i odabir testnih scenarija temeljem različitih karakteristika n svojstva koda, specifikacija, rizik, . . . Oblikovanje programske potpore 68
Sistematsko testiranje particija n n n 30 -85 pogrešaka u 1000 LOC Dobro testirani programi 0. 5 – 3 pogreške Pogreške su često grupirane Cilj je izolirati područja s vjerojatnom pojavom pogreške Prostor mogućih ulaznih vrijednosti n Zatajenje Oblikovanje programske potpore 69
Sistematsko testiranje n Osnovni koraci: Funkcijska specifikacija Određivanje testabilnih osobina Određivanje tipičnih vrijednosti Specificiranje testnih scenarija testni scenariji Oblikovanje programske potpore 70
Tehnike testiranja Klasifikacija obzirom na izvor informacija upotrijebljenih za testne scenarije n Strukturno testiranje, bijela kutija White (glass) box testing n Structural testing n Program-based testing n n Funkcijsko testiranje, crna kutija Black box testing n Functional testing n Specification-based testing n Oblikovanje programske potpore 71
Funkcijsko testiranje n n engl. Black box Testing Pretpostavlja da nema znanja programskog koda ili oblikovanja sustava Koncentracija na U/I ponašanje n Testiranje samo prema zahtjevima i specifikacijama Ako za ulazne podatke možemo predvidjeti izlaz modula test je uspješan n n Gotovo nemoguće generirati sve moguće ulaze Cilj: Smanjiti broj testnih scenarija ekvivalentnom podjelom ulaza i analizom graničnih vrijednosti Oblikovanje testnih scenarija (engl. test case design) n n n Zasnovano na specifikaciji sustava Podjela vrijednosti ulaznih podataka Podjela ulaznih podataka u klase Odabir testnih scenarija za svaku klasu Analiza graničnih vrijednosti Oblikovanje programske potpore 72
Funkcijsko testiranje Testni ulazni podaci Testni scenariji koji imaju vjerojatnost izazivanja izlaza IE UE Sustav Rezultati testiranja IE Očekivani izlaz Neočekivani izlaz = problem Oblikovanje programske potpore 73
Testiranje particija n n n Ulazni podaci i rezultati često se mogu grupirati u različite klase u kojima je ponašanje članova slično (princip: Podijeli i vladaj). Svaka od tih klasa predstavlja ekvivalentnu particiju (engl. equivalence partition) u kojoj se program ponaša na isti način za sve njegove članove pretpostavka Testni scenariji moraju pokrivati sve ekvivalentne particije n n Posebice granične vrijednosti svake particije jer su to najčešći uzroci kvara Odabir ekvivalentnih particija za testiranje n Podijeliti ulazne ekvivalentne particije na: n n n Valjana vrijednost Nevaljana vrijednost Vrijednosti ulaza su valjane u intervalu –odabrati 3 testna scenarija n n n Vrijednost ispod intervala Vrijednost u intervalu Vrijednost iznad intervala Oblikovanje programske potpore 74
Ekvivalentne podjele n Ekvivalentne podjele ulaza: n n n Nevaljani ulaz Valjani ulazi Nevaljani ulazi Izlazne ekvivalentne podjele n Valjani ulazi zajedničke karakteristike Sustav izlaz Oblikovanje programske potpore 75
Koraci testiranja 1. 2. 3. 4. Odredi particije za sve ulazne varijable. Za sve particije odaberi vrijednosti testiranja. Definiraj test uzorke koristeći odabrane vrijednosti. Odredi očekivane izlaze za odabrane test uzorke i provedi test. Oblikovanje programske potpore 76
Primjer funkcijskog testiranja n Zadatak: Testirati program za Test scenarij 1 odlučivanje o pravu na glasovanje. Pravo glasovanja ovisi o starosti osobe, Test Podatak Rezultat minimalna dob je 18 godina. 1 12 NE n Jedna varijabla - dob 2 21 DA n Svi ulazni podaci mogu se podijeliti u dvije ekvivalentne podjele n 0 -17 - ne smije glasovati Test scenarij 2 n 18 - smije glasovati Test Podatak Rezultat n Test scenarij 1 3 17 NE n n Odabir reprezentativnih podataka iz svake podjele 3 4 17 18 NE DA Test scenarij 2 n Odabir podataka na granicama podjela Oblikovanje programske potpore 77
Ekvivalentne podjele n Primjer: Ulaz 5 -znamenkasti broj vrijednosti između 10000 i 99999 <10, 000 n 10, 000 -99, 999 n >99, 999 n 9999 10000 < 10000 50000 100000 99999 10000 - 99999 Oblikovanje programske potpore > 99999 78
Primjer: komponenta za pretraživanje n Pretražuje se sekvencija (niz) elemenata (integer) za dani element = ključ (key) zadana slijedećom apstraktnom specifikacijom (ne implementacijom): public static void trazi (int [] element, int kljuc, bool nadjen, int indeks) Preduvjet - istinit prije poziva komponente n rutina radi (pretražuje) samo za neprazne sekvencije (ulazni niz ima najmanje jedan element) element’first <= element’last Rezultat - istinit nakon izvođenja komponente n varijabla nadjen se postavlja ako je traženi element u nizu (na mjestu L): nadjen and element(L) = kljuc ili n traženi element se ne nalazi u nizu: not nadjen and not (exists i, element’first >= i <= element’last, element (i) = kljuc) Oblikovanje programske potpore 79
Podjela ulaznih podataka 1. Ulazni niz koji zadovoljava preduvjete i: 1. 2. Ulazni niz koji ne zadovoljava preduvjete i: 1. 2. n Ključ je element niza (nadjen = True) ( Ključ nije element niza (nadjen = False) ( Naputak za testiranje: n n Testiraj pretraživanje na slijedećim nizovima: Niz je samo jedan broj (programeri obično pretpostavljaju više) Niz ima paran broj vrijednosti Niz ima neparan broj vrijednosti Oblikovanje programske potpore 80
Preporučeni slijed testiranja 1. 2. 3. 4. Testirati jednostruke vrijednosti Sekvence (nizove) različitih duljina testirati zasebnim testovima Testove oblikovati na taj način da obuhvaćaju prvi, srednji i zadnji element sekvence (niza) Testirati sekvence (nizove) duljine 0 Oblikovanje programske potpore 81
Primjer: element (ulazna sekvencija) 17 17 kljuc Nadjen ili ne, L=mjesto 17 T, 1 (1 vrijednost) 0 F, ? (1 vrijed. , ne) 17, 21, 23, 29 17 T, 1(više vrij. , početak) 9, 16, 18, 30, 31, 45 45 T, 7 17, 18, 21, 23, 29, 38, 41 23 T, 4 17, 18, 21, 23, 29, 38, 41 21 T, 3 12, 18, 21, 23, 32 23 T, 4 21, 23, 29, 33, 38 25 F, ? Oblikovanje programske potpore (kraj) (oko sredine) (više vrij. , ne) 82
Tehnike testiranja Klasifikacija obzirom na izvor informacija upotrijebljenih za testne scenarije n Strukturno testiranje, bijela kutija White (glass) box testing n Structural testing n Program-based testing n n Funkcijsko testiranje, crna kutija Black box testing n Functional testing n Specification-based testing n Oblikovanje programske potpore 83
Strukturno testiranje n n engl. Stuctural Testing, White Box Testing Testiranje očekivanog ponašanja zasnovano na svojstvima programa ili oblikovanju (tj. strukturi Podaci za programa) testiranje Test Izvorni kod Rezultat n Cilj testiranja je pokrivanje izvođenja svih mogućih naredbi i uvjeta programa najmanje jednom Primjer: n Testiranje komponenti, strukturno testiranje (statement coverage, branch coverage etc, unit testing) Oblikovanje testnih scenarija (engl. test case design) n n n Zasnovano na strukturi programa (poznata struktura) Oblikovanje programske potpore 84
Strukturno testiranje n Analiza puta n Graf tijeka programa n n n engl. control flow graph Graf. reprezentacije tijeka programa public roots (double a, b, c) { double q = b * b - 4 * a * c; if (q > 0 && a ≠ 0) { … … } else if (q == 0) { x = (-b) / (2 * a); } else { Čvorovi – procesi , programske odluke ili Lukovi – kontrola tijeka Ispituju se: n n Svi neovisni putevi Logički izrazi (T, F) Petlje (rubovi, sredina) Interni podaci - struktura … … } } Oblikovanje programske potpore 85
Primjer strukturnog testiranja n Provjera prava glasovanja 2 n 1 učitaj (dob ); ako (dob>= 18) tada { ispiši (“smije glasovati”); } inače { ispiši (“ne smije glasovati”); } 3 4 Graf tijeka programa: 1 T 2 F 4 3 Mogući putevi: 1. 1 2 3 kraj 2. 1 2 4 kraj Kraj Oblikovanje programske potpore 86
Primjer strukturnog testiranja Analiza puteva Mogući putevi: 1. 1 2 3 kraj 2. 1 2 4 kraj Graf tijeka programa 1 2 T F 4 3 Exit Test scenarij 1: osigurati izvođenje oba puta tijekom testiranja Test 1 2 Podatak Rezultat 12 21 NE DA Test scenarij 2: osigurati ispravan rad if naredbe na graničnim vrijednostima Test 3 4 Oblikovanje programske potpore Podatak Rezultat 17 18 NE DA 87
Primjer: binarno pretraživanje n ulaz uređen niz elemenata i ključ, izlaz oznaka nadjen i indeks elementa u nizu) class Pretraga { public static void trazi (int [] element, int kljuc, bool nadjen, int indeks) { int dno = 0 ; (1) int vrh = element. length - 1 ; (2) int sredina ; nadjen = false ; (3) indeks = -1 ; (4) while ( dno <= vrh ) (5) { sredina = (vrh + dno) / 2 ; (6) if (element [sredina] == kljuc) (7) { indeks = sredina ; (8) nadjen = true ; (9) return ; (10) (kraj!) } else { if (element[sredina] < kljuc)(11) dno = sredina + 1 ; (12) else vrh = sredina - 1 ; (13) } } //while } // void trazi (14) (kraj!) } // class Pretraga Oblikovanje programske potpore 88
Kombinacijsko testiranje n n n engl. Combination testing međutjecaj varijabli Za N varijabli (V 1, V 2 VN) broj mogućih kombinacija n n V 1 V 2 V N Primjer: n Broj kombinacija dvije varijable definirane kao jednoznamenkasti dekadski broj n n 10 x 10 = 100 Koliki je broj mogućih kombinacija prva četiri poteza u šahu? n 318. 979. 564. 000 Oblikovanje programske potpore 89
Primjer sekvenci S n A n C Putovi od S X : 5 Cilj testirati petlju od 1 do 20 puta sa svim kombinacijama putova u ponavljanju petlje n n E D n iscrpno testiranje n I H G F B n n J X testira sve moguće kombinacije da li je ostvarivo? Trajanje? ? n <20 5 5 5. . . 5 51 + 52 +. . . + 519 + 520 = 1014 Oblikovanje programske potpore 1 test 1 ms 3170 godina 90
Selektivno testiranje n n testiranje svih kombinacija je najčešće nemoguće suzujemo prostor testiranja na: n Testiranje temeljnih putova S A n n I D H G F B engl. Loop testing Testiranje protoka podataka n E engl. Condition testing Testiranje petlji n n C Testiranje uvjeta n n engl. Basis path testing engl. Dataflow testing Oblikovanje programske potpore <20 J X 91
Testiranje temeljnih putova n Temeljni skup (engl. basis set) n n n Skup puteva koji minimalno jednom pokrivaju izvođenje svih naredbi i uvjeta Ne mora biti jednoznačan Teorija grafova – izračun broja linearno neovisnih puteva n CV(G) - Ciklomatička kompleksnost (engl. Cyclomatic complexity) n n n 1973. C. Berge Broj neovisnih puteva u temeljnom skupu CV(G) = Lukovi – Čvorovi + 2*P Lukovi = broj lukova u grafu Čvorovi = Broj čvorova u grafu P = Broj povezanih komponenti (podprograma, prekidnih rutina i sl. ) n gornja granica broja testova koja garantira potpuno pokrivanje svih naredbi programa Oblikovanje programske potpore 92
Primjer: Izračun CV n n n Procesi=4 Odluke=2 Lukovi=7 Čvor= 4+2=6 P = 1 (nema dodatnih komp. ) CV(G)=7 - 6 + 2=3 Oblikovanje programske potpore 93
Primjer: Dijagram toka i grafa tijeka programa n Dijagram toka n n Graf tijeka programa engl. flowchart CV(G)= 5 Oblikovanje programske potpore 94
Primjer: Binarno pretraživanje CV(G) = Lukovi – Čvorovi + 2*P =16 - 14 + 2 = 4 n 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14 n 1, 2, 3, 4, 5, 6, 7, 11, 12, 5, … n 1, 2, 3, 4, 5, 6, 7, 11, 13, 5, … Ako se izvedu svi navedeni putovi: • svaka naredba je testirana najmanje jednom • testirano je svako grananje Čvor je linija u programu Oblikovanje programske potpore 95
Testiranje uvjeta n Ispitivanje svih logičkih uvjeta u modulu n Jednostavni uvjeti Booleve varijable True, False n Jednostavni relacijski izrazi a<b, a>=b. . . n n Složeni izrazi n n ((a=b) & (c>d)) Metode testiranja n n Testiranje grana (svaka grana svakog uvjeta ispituje se bar jednom) Testiranje domene Npr. za relaciju a<b, treba 3 testa: a<b, a=b, a>b n Booleov izraz sa n varijabli 2 n testova n Oblikovanje programske potpore 96
Testiranje petlji (kritične točke programa) n Fokus na valjanost primjene petlje while X < 20 loop {. . } end loop; n Klasifikacija petlji a) Jednostavna (engl. simple loop) n b) Ugnježdena (engl. nested loop) n c) Iznutra prema van (geom. složenost) Ulančane (engl. concatenated loop) n d) n = max broj prolaza Pristup kao jednostavne ili ugnježdene Nestrukturirane (engl. unstructured loops) n loše programiranje Oblikovanje programske potpore 97
Primjer testiranja petlji n Testni scenarij za jednostavnu petlju: n 1. 2. 3. 4. 5. 6. n odrediti n= maksimalno dozvoljeni broj prolaza preskočiti petlju jedan prolaz dva prolaza m prolaza (m< n) n-1 prolaz n+1 prolaz Kako testirati ugnježdene petlje? Oblikovanje programske potpore 98
Testiranje protoka podataka n n Podjela programa u cjeline s jednim ulazom/izlazom Za svaku cjelinu odrediti uporabu varijabli n n Definiranje (D) - deklaracija varijable (objekta), konstruktor, pridjeljivanje vrijednosti Uporaba (U) - bez mijenjanja vrijednosti Brisanje (K) - varijabla postaje nedefinirana, oslobađanje memorije (engl. garbage collection) Analiza slijeda akcija nad varijablama Oblikovanje programske potpore 99
Regresijsko testiranje n n n Ponovno testiranje nakon promjene (popravka) engl. Regression Testing Testiranje ispravljenih programa s ciljem potvrđivanja ispravnosti promjena i ne postojanja negativnog utjecaja na nepromijenjene dijelove programa utjecaj promjena programa Neki testovi nepotrebni n Mijenjaju rezultate testa n Izrada novih testova n Testiranje pogreška Popravak OK Oblikovanje programske potpore 100
Automatizacija testiranja n Cijena ručnog testiranja visoka n n Automatizacija ručnog testiranja 1. 2. 3. n n n Generiranje ulaznih podataka i očekivanih rezultata Izvođenje testa Evaluacija Jedinično 3 -30 puta cijene ručnog testiranja Zahtjeva formalizirani ručni proces testiranja Cijena ovisi o postavljenom dosegu testiranja - Postupak kodiranja testova Cijena ponavljanja 0 Prednosti n n n Ponavlja se svakim testiranjem, potrebno ponoviti nakon svakog ispravljanja Povećana pouzdanost Povećana kvaliteta testiranja (automatizacija procesa) Kraće vrijeme izvođenja testova Automatska analiza rezultata testova Nedostatak n Cijena, Vrijeme Oblikovanje programske potpore 101
Razine automatizacije testiranja n Osnovna automatizacija n Record&Playback n n Data-Driven Methodology n n skripte generirane bilježenjem korisnikovih akcija Podaci nisu ukodirani u skriptu - čitaju se iz datoteka Napredna automatizacija n Funkcionalna dekompozija n n Male skripte predstavljaju testirane module i funkcije Okviri - Framework Test Framework n Process Framework n Hybrid Framework n Oblikovanje programske potpore 102
Testna radna klupa n engl. testing workbench Izvorni kod Dinamički analizator izvješće (npr. koliko puta je pojedina naredba izvedena) Što je testirano specifikacija Generator podataka Upravitelj testa Testni podaci oracle Testirani program Rezultati testa Predviđanje rezultata simulator Proročište – predikcija rezultata npr. temeljem ranijeg produkta (očekivani izlaz) usporedba (npr. korisničko sučelje) Generator izvješća Oblikovanje programske potpore Izvješće o testiranju 103
Struktura tima za testiranje n Voditelj projekta n n Analitičar n n n analiza zahtjeva testiranja oblikovanje strategije i metodologije testiranja oblikovanje testnih slučajeva i podatka Profesionalni testeri n n praćenje i osiguranje sukladnosti procesa testiranja Voditelj testiranja n n analiza poslovnih procesa, zahtjeva i funkcijske specifikacije planiranje testiranja Voditelj upravljanja kvalitetom n n upravlja procesom testiranja i potrebnim resursima priprema testova provođenje testova pronalaženje grešaka Korisnici Oblikovanje programske potpore 104
Osnovni koraci testiranja 1. Odabir što testirati n n n 2. Analiza: kompletnost zahtjeva Oblikovanje testiranja Implementacija Odluka kako testirati n analiza izvornog koda n n n 3. 4. engl. Software or code inspection Black-box, white box odabir integracijskog testiranja (big bang, bottom up, top down, sandwich) Razvoj testnih slučajeva Predikcija rezultata n za def. testne slučajeve Oblikovanje programske potpore 105
Primjer: Extreme Programming (XP) Incremental Release Next version Review, Refine, prioritize Generate User Stories Passed all unit tests Create Unit Tests pass Pair Programming + unit testing Passed all unit tests Acceptance Testing Failed acceptance test Create Acceptance Tests Oblikovanje programske potpore 106
Primjer: JUnit n JUnit – framework n n Okvir za testiranje Java programa Princip: “Code a little, test a little” n n Erich Gamma, Kent Beck Zasnovan na Javi n n JUnit n n n Definira i izvodi testove Formalizira zahtjeve Pisanje i ispravljanje koda Integrira se s kodom Razvojne okoline n n Java programi mogu ispitivati vlastiti kod Blue. J, JBuilder, Eclipse, Net. Beans više: JUnit. org http: //www. junit. org/ n n Resources for Test Driven Development “JUnit is a simple framework for writing and running automated tests. As a political gesture, it celebrates programmers testing their own software. “ Oblikovanje programske potpore 107
Primjer: JUnit public class Primjer { static public int zbroji(int a, int b) { return a + b; } } import junit. framework. Test ; import junit. framework. Test. Suite ; public class test. Primjer{ @Before public void set. Up() { System. out. println(“Testiranje počinje"); } @After public void tear. Down() { System. out. println(“Završeno!!"); } @Test public void test. Zbroji(){ int i = Primjer. zbroji(2, 3); assert. Equals(5, i); } @Test public void test. Zbroji. L(){ int i = Primjer. Zbroji(3, 5); assert. True(“Pogrešna suma", i!=5); } } Oblikovanje programske potpore izvorni kod dodaci za testiranje <junit printsummary="yes" haltonfailure="yes“ showoutput="yes"> <classpath> <pathelement path="${build}"/ </classpath> <batchtest fork="yes“ todir="${reports}/raw/"> <formatter type="xml"/> <fileset dir="${src}"> <include name="**/*Test*. java"/> </fileset> </batchtest> </junit> 108
Zaključak n Testiranje je složena i zahtjevna aktivnost oblikovanja programske podrške n n Kritični dio razvoja sustava Postoje razvijena pravila Provodi se na svim razinama i planira kao sastavni dio razvojnog procesa Problem strategije n veliki broj ciljeva n n Problem odluke - The Oracle Problem n n n oblikovanje strategije za postizanje ciljeva dionika Da li je program prošao test ili ne? Nemogućnost potpunog testiranja Loše oblikovani sustavi otežavaju testiranje Testiranje može pokazati postojanje pogreške, a ne može dokazati njihovo nepostojanje! Trend predstavlja integracija testiranja i razvoja Alternativa: uporaba formalnih metoda Oblikovanje programske potpore 109
Dokumentacija testnih scenarija n n n Identifikacija - Broj Ime Opis stanja prije izvođenja Vrijednosti ulaza Očekivani izlaz Kratak opis Oblikovanje programske potpore 110
Primjer testnog scenarija n n n Testiranje funkcije “get PIN” za ukradene kartice Ulaz: 4 znamenkasti broj Očekivani rezultat: “Ukradena kartica” R. br. Ulaz Očekivani rezultat Prihvati karticu i traži PIN, ako je Prihvati karticu i traži PIN kartica neispravna izbaci ju Stvarni rezultat Prihvaćena karticu i traži PIN 1 Pročitaj karticu 2 Pročitaj oštećenu karticu Poruka “Nema kartice” i izbacivanje iz bankomata Prihvaćena karticu i traži PIN Unos nevaljanog PIN-a > 3 Poruka “ukradena kartica”, zadržana kartica Prihvaćena karticu i traži PIN 3 Oblikovanje programske potpore Status U redu Ne zadovoljava 111
Primjer: testni slučaj za OCSF n Izvor: Timothy C. Lethbridge, Robert Laganière: Object-Oriented Software Engineering: Practical Software Development using UML and Java, Mc. Graw Hill, 2001 General Setup for Test Cases in the 2000 Series System: Simple. Chat/OCSF Phase: 2 Instructions: 1. Install Java, minimum release 1. 2. 0, on Windows 95, 98 or ME. 2. Install Java, minimum release 1. 2. 0, on Windows NT or 2000. 3. Install Java, minimum release 1. 2. 0, on a Solaris system. 4. Install the Simple. Chat - Phase 2 on each of the above platforms. Oblikovanje programske potpore 112
Test cases for Phase 2 of the Simple. Chat Test Case 2001 System: Simple. Chat Phase: 2 Server startup check with default arguments Severity: 1 Instructions: 1. At the console, enter: java Echo. Server. Expected result: 1. The server reports that it is listening for clients by displaying the following message: Server listening for clients on port 5555 2. The server console waits for user input. Cleanup: 1. Hit CTRL+C to kill the server. 113
Test cases for Phase 2 of the Simple. Chat Test Case 2002 System: Simple. Chat Phase: 2 Client startup check without a login Severity: 1 Instructions: 1. At the console, enter: java Client. Console. Expected result: 1. The client reports it cannot connect without a login by displaying: ERROR - No login ID specified. Connection aborted 2. The client terminates. Cleanup: (if client is still active) 1. Hit CTRL+C to kill the client. 114
Test cases for Phase 2 of the Simple. Chat Test Case 2003 System: Simple. Chat Phase: 2 Client startup check with a login and without a server Severity: 1 Instructions: 1. At the console, enter: java Client. Console <login. ID> where <login. ID> is the name you wish to be identified by. Expected result: 1. The client reports it cannot connect to a server by displaying: Cannot open connection. Awaiting command. 2. The client waits for user input Cleanup: (if client is still active) 1. Hit CTRL+C to kill the client. 115
Test cases for Phase 2 of the Simple. Chat Test Case 2007 System: Simple. Chat Phase: 2 Server termination command check Severity: 2 Instructions: 1. Start a server (Test Case 2001 instruction 1) using default arguments. 2. Type #quit into the server's console. Expected result: 1. The server quits. Cleanup (If the server is still active): 1. Hit CTRL+C to kill the server. 116
Test cases for Phase 2 of the Simple. Chat Test Case 2013 System: Simple. Chat Phase: 2 Client host and port setup commands check Severity: 2 Instructions: 1. Start a client without a server (Test Case 2003). 2. At the client's console, type #sethost <newhost> where • <newhost> is the name of a computer on the network 3. At the client’s console, type #setport 1234. Expected result: 1. The client displays Host set to: <newhost> Port set to: 1234. Cleanup: 1. Type #quit to kill the client. 117
Test cases for Phase 2 of the Simple. Chat Test Case 2019 System: Simple. Chat Phase: 2 Different platform tests Severity: 3 Instructions: 1. Repeat test cases 2001 to 2018 on Windows 95, 98, NT or 2000, and Solaris Expected results: 1. The same as before. 118
- Slides: 118