150 likes | 251 Views
Hibakeresés, hibajavítás. Hibajelensé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.
E N D
Hibajelensé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.
Hibajelensé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.
Hibajelensé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.
Hibakeresé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.
Hibakeresé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.
Hibakeresé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.
Hibakeresé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.
Hibakeresé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.
Hibakeresé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.
Hibakeresé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.
Hibakeresé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.
Tipikus 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.
Hibajaví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.