Programozási alapismeretek 9. előadás
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás2/ Tesztelés – elvek + módszerek Tesztelés Futtatás adatfájllal – C++ Futtatás adatfájllal Hibakeresés Hibakeresés Hibajavítás Hibajavítás Dokumentálás + szövegszerkesztési minimum Dokumentálás Programkészítési elvek Programkészítési elvek Tartalom
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Tesztelés Tesztelési fogalmak: Teszteset = bemenet + kimenet Próba = teszteset-halmaz Jó teszteset: nagy valószínűséggel felfedetlen hibát mutat ki Ideális próba: minden hibát kimutat Megbízható próba: nagy valószínűséggel min- den hibát kimutat A „hiba” helyett jobb lenne „problémát” mondani, mivel a tesztelés nemcsak a hibakeresés, hanem a hatékonyságvizsgálat eszköze is. 3/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Tesztelés Tesztelési elvek: Érvényes ( megengedett ) és érvénytelen ( hibás ) bemenetre is kell tesztelni. Rossz a meg nem ismételhető ( nem adminisztrált ) teszteset. Minden teszteset által nyújtott információt maximálisan ki kell használni ( a következő tesztesetek kiválasztásánál ). Csak más ( mint a szerző ) tudja jól tesztelni a programot. 4/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Tesztelés Tesztelési módszerek: Statikus tesztelés: a programszöveget vizs- gáljuk, a program futtatása nélkül. Dinamikus tesztelés: a programot futtatjuk különböző bemenetekkel és a kapott ered- ményeket vizsgáljuk. A tesztelés eredménye: hibajelenséget találtunk; nem találtunk –még– hibát. 5/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Statikus tesztelés Kódellenőrzés: o algoritmus kód megfeleltetés o algoritmus+kód elmagyarázása másnak Szintaktikus ellenőrzés: o fordítóprogram esetén automatikus, értelmező esetén – esetleg – sok futtatással Szemantikus ellenőrzés, ellentmondás- keresés: o felhasználatlan érték ( i=1;for(i=2;… ) vagy változó o önmagának értékadás ( i=1*i+0 ) 6/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Statikus tesztelés Szemantikus ellenőrzés, ellentmondás- keresés ( folytatás ) : o inicializálatlan változó i=1; while (i<=n) … ( for (i=1;i<=n;…)… ) 7/36 „Rafináltan inicializált” változó: int n; ← globális n … int fv() { for (int n=0;n<9;++n) ← lokális n { … n … ; ← lokális n felhasználása } return …n…; ← globális n-et tartalmazó formula }
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Statikus tesztelés Szemantikus ellenőrzés, ellentmondás- keresés ( folytatás ) : o érték nélküli fv. 8/36 Szintaktikusan hibás C++-ban : int fv() { … return; ← … error: return-statement with no value, in function returning 'int'| } … de ez csak figyelmeztetést vált ki: int fv() { … } ← … warning: control reaches end of non-void function|
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Statikus tesztelés Szemantikus ellenőrzés, ellentmondás- keresés (folytatás) : o azonosan igaz/hamis feltétel ( i>1 || i maxN ) o végtelen számlálós ciklus 9/36 Talán egy while -os ciklus átírása során jött ki: for (int n=0;n<maxN;++n) { …; --n; ← sajnos nem okoz fordítási hibaüzenetet }
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Statikus tesztelés Szemantikus ellenőrzés, ellentmondás- keresés (folytatás) : o végtelen feltételes ciklus ( i<N feltételű ciklusban sem i, sem N nem vagy „szin- kronban” változik) o konstans értékű, ( bár ) változókat tartalmazó kifejezés y=sin(x)*cos(x)-sin(2*x)/2 10/36 i=1; while (i<=N) { … i=1; ← talán i+=1 akart lenni? }
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Dinamikus tesztelés Tesztelési módszerek: Fekete doboz módszerek (←nincs kimerítő be- menet halmaz– nem lehet minden lehetséges bemenetre kipróbálni): a teszteseteket a program specifikációja alapján optimálisan választjuk. Fehér doboz módszerek (←nincs kimerítő út halmaz– nem lehet minden végrehajtási sor- rendre kipróbálni): a teszteseteket a program struktúrája alapján optimálisan választjuk. 11/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Dinamikus tesztelés: fekete doboz módszerek Ekvivalencia-osztályok módszere: a bemeneteket (vagy a kimeneteket) soroljuk olyan osztályokba, amelyekre a program vár- hatóan egyformán működik; ezután osztá- lyonként egy tesztesetet válasszunk! Határeset elemzés módszere: az ek- vivalencia-osztályok határáról válasszunk tesztesetet! 12/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Dinamikus tesztelés: fekete doboz módszerek Feladat: Egy N természetes szám valódi (1- től és önmagától különböző) osztója… Ekvivalencia osztályok ( bemenet alapján ): o N prímszám: 3 o N-nek egyetlen valódi osztója van: 4 =2*2 o N-nek több, különböző valódi osztója is van: 6 =2*3 o N páros o N nem természetes szám Érvényes adatokra Érvénytelen adatokra 13/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Dinamikus tesztelés: fehér doboz módszerek Kipróbálási stratégiák: utasítás lefedés: minden utasítást legalább egy- szer hajtsunk végre! feltétel lefedés: minden feltétel legyen legalább egyszer igaz, illetve hamis! részfeltétel lefedés: minden részfeltétel legyen legalább egyszer igaz, illetve hamis! Tesztadat-generálás: automatikus tesztbemenet-előállítás Ezekhez továbbiakat talál itt: vi/PrM1felev/Pdf/PrTea7.p df vi/PrM1felev/Pdf/PrTea7.p df fejezetében vi/PrM1felev/Pdf/PrTea7.p df 14/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Dinamikus tesztelés: fehér doboz módszerek Feladat: Egy N természetes szám valódi (1-től és önmagától különböző) osztója… Utasítás lefedés: o i:=i+1 végrehajtandó: N=9 o O:=i végrehajtandó ( Van=Igaz ): N=9 Feltétel lefedés: o Ciklusfeltétel igaz: N=3 o Ciklusfeltétel hamis: N=3 ( i=3 esetén ) o Elágazásfeltétel igaz ( Van=Igaz ): N=4 o Elágazásfeltétel hamis ( Van=Hamis ): N=3 15/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Speciális tesztelések Biztonsági teszt: ellenőrzések vannak? Hatékonysági teszt Speciális programokhoz Funkcióteszt: tud minden funkciót? Stressz-teszt: gyorsan jönnek a feldol- gozandók,... Volumen-teszt: sok adat sem zavarja 16/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Futtatás adatfájllal (C++) Elv: A standard input/output átirányítható fájlba. Ekkor a program fájlt használ az inputhoz és az outputhoz. Következmény: szerkezetileg a kon- zol inputtal/outputtal megegyező kell legyen / lesz a megfelelő fájl. „Technika”: A lefordított kód mögé kell paraméterként írni a megfelelő fájlok nevét. prog.exe outputfájl Nyereség: Kényelmes és adminisztrálható tesztelés. Figyelem! Ha van outputfájl, akkor a kérdés szövege is abban „jelenik meg”. prog.exe >>outputfájl outputfájlhoz írás! 17/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Futtatás adatfájllal (C++) Demo: 1. Készítsen néhány bemeneti adatot tartalmazó fájlt (a konzol inputnak megfelelő szerkezetben) 2. Futtassa ezekkel az előbb elmondottak szerint: 1. prog.exe 1.ki 2. prog.exe 2.ki 3. … 3. Ellenőrizze a kimeneti fájlok tartalmát: olyan-e, amilyennek várta Megjegyzés: tovább egyszerűsítheti a tesztelést, ha egy batch állománnyal automatizálja a 2.-t! Valahogy így: próba…próba Kód jegyzet- ként 18/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Hibakeresés Hibajelenségek a tesztelés során… hibás az eredmény, futási hiba keletkezett, nincs eredmény, részleges eredményt kaptunk, olyat is kiír, amit nem vártunk, túl sokat (sokszor) ír, nem áll le a program, … 19/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Hibakeresés Célja: a felfedett hibajelenség okának ( helyének ) megtalálása. Elvek: Eszközök használata előtt alapos végiggondolás. Egy megtalált hiba a program más részeiben is okozhat hibát. A hibák száma, súlyossága a program méretével nemlineárisan ( annál gyorsabban! ) nő. Egyformán fontos, hogy miért nem csinálja a prog- ram, amit várunk, illetve, hogy miért csinál olyat, amit nem várunk. Csak akkor javítani, ha megtaláltuk a hibát. 20/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Hibakeresés Hibakeresési eszközök: Változó-, memória-kiírás ( feltételes fordítás ) feltételes fordítás Nyomkövetés ( hibától visszafelé is ) A hiba helyének és okának kijelzése Töréspont elhelyezése Lépésenkénti végrehajtás Adat-nyomkövetés Állapot-nyomkövetés ( pl. paraméterekre vonat- kozó előfeltételek, ciklus-invariánsok ) Speciális ellenőrzések ( pl. indexhatár ) 21/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Hibakeresési módszerek Célja: bemenetnekmely A bemenetnek mely része, amire hibásan működik a program? Hol programban Hol található a programban a hibát okozó utasítás? Módszerfajták: Indukciós módszer ( hibásak körének bővítése ) Dedukciós módszer ( hibásak körének szűkítése ) Hibakeresés hibától visszafelé Teszteléssel segített hibakeresés ( olyan teszteset kell, amely az ismert hiba helyét fedi fel ) hibásak nem hibásak 22/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Hibakeresési módszerek Példa az indukciós módszerre: Feladat: 1 és 99 közötti N szám kiírása betűkkel Tesztesetek: N=8 jó, N=17 jó, N=30 hibás Próbáljunk a hibásakból általánosítani: tegyük fel, hogy minden 30-cal kezdődőre rossz! Ha beláttuk (teszteléssel), akkor próbáljuk tovább általánosítani, pl. tegyük fel, hogy minden legalább 40-re rossz! Ha nem tudjuk tovább általánosítani, akkor tudjuk mit kell keresni a hibás programban. Ha nem ment az általánosítás, próbáljuk más- képp: hibás-e minden 0-ra végződő számra! … 23/36 hibásak
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Hibakeresési módszerek Példa a dedukciós módszerre: Feladat: 1 és 99 közötti N szám kiírása betűkkel Tesztesetek: N=8 jó, N=17 jó, N=30 hibás Tegyük fel, hogy minden nem jóra hibás! Próbáljunk a hibás esetek alapján szűkíteni: tegyük fel, hogy a 20-nál kisebbekre jó! Ha beláttuk (teszteléssel), akkor szűkítsünk tovább, jó-e minden legalább 40-re? Ha nem szűkíthető tovább, akkor megtalál- tuk, mit kell keresni a hibás programunkban. Ha nem, szűkítsünk másképp: tegyük fel, hogy jó minden nem 0-ra végződő számra! … 24/36 nem hibásak
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Hibajavítás Célja: a megtalált hiba kijavítása. Elvek: A hiba kijavítása a program más részében hibát okozhat ( rosszul javítunk, illetve korábban elfedett más hibát ). A hibát kell javítani és nem a tüneteit. Javítás után a tesztelés megismételendő! A jó javítás valószínűsége a program méretével fordítva arányos. A hibajavítás a tervezési fázisba is visszanyúlhat ( a módszertan célja: lehetőleg ne nyúljon vissza ). 25/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Dokumentációk Fajtái: Felhasználói dokumentáció Fejlesztői dokumentáció Programismertető … 26/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Felhasználói dokumentáció Tartalma: feladat (összefoglaló és részletes is) környezetleírás használat leírása (telepítés, kérdések + lehet- séges válaszok,...) bemenő adatok, eredmények, szolgáltatások mintaalkalmazások – példafutások hibaüzenetek és a hibák lehetséges okai 27/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Fejlesztői dokumentáció Tartalma: specifikáció, követelményanalízis környezetleírás adatleírás (feladatparaméterek reprezentálá- sa) algoritmusok leírása, döntések, más alternatí- vák, érvek, magyarázatok kód, implementációs szabványok, döntések tesztesetek hatékonysági mérések fejlesztési lehetőségek 28/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Szövegszerkesztési isme- retek a dokumentációhoz Karakterformázás (szöveg, program) Bekezdésformázás Tabulátorok Képbeillesztés (pl. a futás bemutatásához) Oldalformázás Táblázatok (struktogram, tesztek) Egyenletszerkesztő (pl. a specifikációhoz) Szervezeti diagram-készítő 29/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Programkészítési elvek Stratégiai elv: a problémamegoldás logikája – a lépésenkénti finomítás. Taktikai elvek: az algoritmuskészítés gondolati elvei a felülről lefelé kifej- téshez. Technológiai elvek: algoritmus és kód módszertani kívánalmai. Technikai elvek: kódolási technika. Esztétikai, ergonómiai elvek: ember- közelség. 30/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Stratégiai elv: lépésenkénti finomítás Felülről–lefelé (top–down) = probléma–dekomponálás, –analizálás. Alulról–felfelé (bottom–up) = probléma–szintézis. 1. szint 2. szint 3. szint 31/36 Nem alternatívák!
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Taktikai elvek Párhuzamos finomítás Döntések elhalasztása Döntések nyilvántartása Vissza az ősökhöz Nyílt rendszer felépítés ( általánosítás ) Párhuzamos ágak függetlensége Szintenkénti teljes kifejtés Adatok elszigetelése ( pl. alprogramokba helyezéssel + paraméterezéssel + lokális adatok deklarálásával ) 32/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Technológiai elvek Struktúrák zárójelezése Bekezdéses struktúrák Kevés algoritmusleíró szabály Értelmes sorokra tördelés Beszédes azonosítók, kifejező névkon- venciók (pl. Hungarian Notation)Hungarian Notation 33/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Technikai elvek Barátságosság Biztonságosság Jól olvashatóság 34/36
ELTE Horváth-Papné-Szlávi-Zsakó: Programozási alapismeretek 9. előadás Esztétikai/ergonómiai elvek Lapokra tagolás, kiemelés, elkülönítés Menütechnika Ikontechnika, választás egérrel Következetesség (beolvasás, kiírás,...) Hibafigyelés, hibajelzés, javíthatóság Súgó, tájékoztató Ablakkezelés Értelmezési tartomány kijelzése Naplózás 35/36
Programozási alapismeretek 9. előadás vége