H IBAKERESÉS, HIBAJAVÍTÁS
H IBAJELENSÉGEK Szintaktikai hiba: Csak értelmezés esetén fordul elő, hiszen a fordítóprogramok korábban, még a fordítási fázisban kijelzik, s nem is készül el a futtatható változat. A hibajelenség a hibás utasításnál (vagy annak „környékén”) jelentkezik, csak ki kell javítani. Végrehajtási hiba: Futás során, a fordítóprogram által beépített hibafigyelő által adott hiba (pl. 0-val való osztás). A leállás sorában szerepel a – rossz érték miatt – hibát okozó változó, s meg kell keresni, hogy hol romlott el az értéke. 2
H IBAJELENSÉGEK Nem áll le a program: Végtelen ciklusra utal. A program láthatólag semmit nem csinál, mégsem áll le. Rosszabb, ha valamit tesz is. Ekkor a program külső leállításakor általában meg lehet tudni az aktuálisan végrehajtott utasítást. Innen kiindulva meg kell keresni azt a ciklust, ami nem fejeződik be, majd meg kell találni a „be nem fejeződés” okát. A jelenség lehet annak következménye is, hogy túl lassú a programunk hatékonyság. 3
H IBAJELENSÉGEK Nem ír ki semmit a program, illetve „részlegesen” ír ki: Elfelejtettünk valamilyen kiíró utasítást tenni, vagy rossz helyre írtuk ki az eredményt, vagy a kiírások olyan ágon szerepelnek, amelyet nem mindig, vagy nem a kellő pillanatban hajtunk végre. Tenni való: a kiíró utasítások „kibogarászása”, kijavítása, jó helyre tétele. Rosszat ír ki a program: Hasonló a végrehajtási hibák esetéhez. 4
H IBAKERESÉS Akkor kezdődik, ha egy hibajelenséget tapasztalunk. Célja, hogy a hiba helyét megtaláljuk. Alapelvei: A hibakeresési eszközök használata előtt célszerű alaposan megvizsgálni a programot, és a program logikája alapján megkeresni a hiba okát. Ha a programban hibát találunk, akkor ennek a program más részére is lehet hatása, azaz elképzelhető, hogy újabb hibákat fogunk találni. A hibák száma és súlyosságuk általában a program méreténél sokkal gyorsabban növekszik. 5
H IBAKERESÉSI MÓDSZEREK Indukciós módszer: Indukció: abból a tényből, hogy nagy számú „tárgynak” meghatározott tulajdonsága van és közös „nemhez” tartozik, arra következtethetünk, hogy az adott „nemhez” tartozó összes „tárgynak” megvan ez az ismertető jegye. Kiindulunk a rendelkezésre álló teszteset-eredményekből, majd megpróbáljuk őket rendezni. Azokat a teszteseteket is célszerű megvizsgálni, amelyek nem idézik elő az adott hibát. A rendezett adatokból megpróbálunk valamilyen feltevést tenni a hiba okára vonatkozóan. A legelső feltevés, hogy a program csak azokra az esetekre hibás, amelyeket már kipróbáltunk és rájuk rossz eredményt kaptunk. Ha ezt igazolni tudjuk, akkor következhet a hiba helyének meghatározása, majd a hiba kijavítása. Ellenkező esetben a hibás bemenő adatok körét próbáljuk meg fokozatosan bővíteni, újabb teszteléssel. Igazoljuk az egyre bővülő adathalmazra a program hibás működését mindaddig, amíg csak lehet. Végül eljutunk a bemenő adatoknak ahhoz a halmazához, amelyre a program hibás, s egy másikhoz, amelyre helyes. Ezután meg kell állapítani, hogy a programon átvezető teszt utak mely ágai azok, amelyek a hibás tesztesetnek megfelelnek, s melyek azok, amelyek nem. Azokon a programágakon kell keresni a hibát, amelyek csak a hibás tesztesetekhez tartoznak. 6
H IBAKERESÉSI MÓDSZEREK Dedukciós módszer: Dedukció: abból a tényből, hogy az adott „nemhez” tartozó összes „tárgy” meghatározott ismertetőjeggyel rendelkezik, arra következtethetünk, hogy bizonyos, az adott „nemhez” tartozó „tárgyak” szintén rendelkeznek a szóban forgó ismertetőjeggyel. A módszer lényege az, hogy egyre szűkíti a hiba lehetséges okainak körét. A meglévő teszteset eredményekből adódó mindenféle lehetséges okot feltételezni kell az első lépésben, majd ezek közül ki kell küszöbölni azokat, amelyek a részletesebb vizsgálat során nem állják meg a helyüket. Ha egy feltevést teszünk, ugyanúgy igazolnunk kell,mint az előző módszer esetén. Ha nem sikerül, akkor újabb információkat kell gyűjtenünk a hibakereséshez a hibajelenségről. Ha elérkeztünk a hibás adatok köréhez, akkor már ugyanaz a teendő, mint az előző esetben volt. 7
H IBAKERESÉSI MÓDSZEREK Visszalépéses technika: A legismertebb hibakeresési módszer. Kiindulunk a hiba előfordulásának helyétől, és a programot visszafelé hajtjuk végre mindaddig, míg a végrehajtás eredményét hibásnak találjuk. Teszteléssel segített hibakeresés: Olyan tesztesetet végzünk el, amely segítségével egy ismert hibát akarunk előidézni a programban. Ezeknek a teszteseteknek az a jellegzetességük, hogy csak egyetlen feltételt fednek le. Ezt a módszert általában nem önállóan, hanem az előző három segítésére használják. 8
H IBAKERESÉSI ESZKÖZÖK A programozási környezet olyan elemei, amelyek a hiba okának megállapítását, a hiba helyének megkeresését teszik könnyebbé azzal, hogy futás közbeni információt szolgáltatnak a programról. A jó fordítóprogramok rendelkeznek ún. tesztelő üzemmóddal, amelyben a tesztelő utasításokat is bele kell fordítani a célprogramba, normál üzemmódban azonban nem. 9
H IBAKERESÉSI ESZKÖZÖK Kiírás: Adatkiírások elhelyezésére alkalmas. Nyomkövetés: A végrehajtott utasítások követése a programban. Adat-nyomkövetés: A változókat vizsgáljuk. Nyomkövetés a hibától visszafelé: Akkor lép életbe, ha a program futási hibával megszakad. 10
H IBAKERESÉSI ESZKÖZÖK Töréspontok elhelyezése: A töréspontok a program olyan utasításai, amelyeknél a végrehajtásnak meg kell állnia. A felhasználó információt szerezhet a program állapotáról, majd folytatódhat a végrehajtás. Leálláskor a felhasználó dönthet a futtatás abbahagyásáról, illetve folytatásáról. Lépésenkénti végrehajtás: A program minden utasítására egy töréspontot definiál. 11
H IBAKERESÉSI ESZKÖZÖK A hiba helyének és okának kijelzése: Fordítóprogramok általában rendelkeznek olyan lehetőségekkel, hogy a futás közbeni ellenőrzéseket beépítsék a program kódjába, illetve kihagyják belőle. A kihagyás a már biztosan helyes programnál futási időt csökkentő tényező lehet, ezért érdemes a kész programokat így lefordítani. Állapotellenőrzés: Hasonlít az előzőre, de a futás közbeni teljes állapotot ellenőrzi. Alkalmas lehet feltételes töréspontok feltételes kiírásának elhelyezésére a programban. 12
T IPIKUS HIBÁK Gépelési hibák. Elágazás szervezési hibák. Ciklusszervezési hibák. Bemeneti adatok hibái. Kimeneti adatok hibái. File-ok hibái. Változókkal kapcsolatos hibák. Kifejezések hibái. Eljárások hibái. Grafikai hibák. 13
H IBAJAVÍTÁS Akkor kezdődik, amikor a hibakeresés véget ért. Alapelvei: A hibát kell kijavítani, nem csak a tüneteit megszüntetni. Amíg a hiba helyét és okát pontosan nem találtuk meg, addig ne kezdjünk bele a javításba! A hibajavítás után a programot alapos tesztelésnek kell alávetni. Annak a valószínűsége, hogy egy hibát jól kijavítottunk, a program méretével arányosan csökken. A hibajavítás visszanyúlhat a program tervezési fázisába is. 14
K ÖSZÖNÖM A FIGYELMET ! 15