10. Programelemzés A programozástanulás során az önálló feladatmegoldással egyenrangú módszer lehet mások által írt, kész programok elemzése, vizsgálata, átalakítása valamilyen szempontból. Mindez megtehető algoritmusokkal, illetve valamilyen nyelven kódolt programokkal. Ez a programelemzés hasznos saját programok készítése köz- ben is, ugyanis így tudjuk programjaink minőségét garantálni. Éppen ezért e fejezetben olyan kérdésekre próbálunk választ adni, hogy: - mit csinál a program (algoritmus)? - milyen adatokkal kell kipróbálni a programot? - mi a hiba a programban? - hogyan lehet a programot (algoritmust) hatékonyabbra ír- ni, azaz időben gyorsabbra, kevesebb memóriát használóra (rövidebb programszöveg, kevesebb változó), valamint egyszerűbbre? Egy program helyes működését teszteléssel ellenőrizhetjük, amely nem garantálja a program hibamentességét, csupán való- színűsíti azt. Ha a tesztelés során azt látjuk, hogy a prog- ram hibásan működik, akkor meg kell keresnünk a hibát. Ez a hibakeresés. Ha megtaláltuk, majd kijavítottuk, a folyamat újra kezdődik, hiszen meg kell győződnünk róla, hogy most már helyesen működik programunk. Szükségünk lehet más által írt eljárásokra, programokra is. Ebben az esetben el kell tudnunk dönteni, hogy mit csinál a program, esetleg tesztelnünk is kell. Javasolt irodalom: 1. Várkonyi Zs.: Bevezetés a modern programtesztelésbe Műszaki Könyvkiadó, 1979. 2. Varga L.: Programok analízise és szintézise Akadémiai Kiadó, 1981. 3. Szlávi P. - Zsakó L.: Módszeres programozás Műszaki Könyvkiadó, 1986. 4. Számítástechnika középfokon OMIKK, 1987. 10.1 Mit csinál a program? Más által írt programok használatakor, vagy hibásan működő programrészek hibáinak megfejtéséhez szükségünk lehet annak felderítésére, hogy mit csinál az adott programrész. Hosszabb program esetén ez meglehetősen bonyolult feladat, ezért cél- szerű részekre bontani. Néhány soros programrészletekről könnyebben eldönthetjük, hogy milyen bemenő adatokra milyen utasításokat végez el a gép és milyen kimenő értékeket ka- punk. Ugyanaz a programrész természetesen más ágon futhat le, más eredményt adhat attól függően, hogy melyek a bemenő ada- tok. Ezért a program működését nem csak kitalálni kell, hanem lehetőleg szabatos matematikai gondolkodás alapján belátni. 10.2 Tesztelés A program megírása után meg kell vizsgálnunk, hogy azt te- szi-e amit elvárunk tőle. Ezt nevezzük tesztelésnek. A tesz- telésnek két logikailag eltérő módszere van: 1. Statikus tesztelés, amikor a program szövegét vizsgál- juk. Eközben kódellenőrzést, formai és tartalmi ellen- őrzést végzünk. 2. Dinamikus tesztelés: a program végrehajtását vizsgál- juk. Ezt a módszert még két további csoportra szoktuk osztani aszerint, hogy a program adatait vizsgáljuk-e, s eszerint próbálunk tesztadatokat gyártani (fekete do- boz módszer) vagy a szerkezete, a logikája alapján (fe- hér doboz módszer). Egy program ellenőrzését célszerű az első módszerrel kez- deni, mert így a hibák jelentős része kiszűrhető. 10.3 Hibakeresés Hibakeresésről akkor beszélünk, ha már tudjuk, hogy van hiba a programban, csak még nem tudjuk, hogy milyen jellegű és hol található. Az első 19 feladatban algoritmusnyelven írt programok szerepelnek. Ezekről is tudjuk, hogy hibásak, de nem futtatuk őket, tesztadatok tehát nem állhatnak rendelke- zésünkre. Ezen feladatokat próbáljuk először gondolkodva vé- gigkövetni, bennük a hibákat megtalálni! Ha így nem sikerült, akkor kódoljuk, majd futtassuk le őket és a tesztadatok alap- ján keressük a hibát! Módszerek: 1. Az indukciós módszer szerint rendezzük a rendelkezé- sünkre álló tesztadatokat. 2. A dedukciós módszer lényege: a hiba lehetséges okai kö- rének szűkítése. 3. Visszalépéses módszer: a hiba előfordulásának helyétől visszafelé követi a program végrehajtását mindaddig, amíg az adatok hibásak. Hibakeresési eszközök: 1. Kiírás 2. Töréspontok elhelyezése 3. Nyomkövetés 4. Változófigyelés 5. Lépésenkénti végrehajtás 6. Memoriakiírás 7. llapotellenőrzés 8. Tartalmi ellenőrzés Programozási típushibák: 1. Gépelési, névválasztási hibák 2. ltalános vezérlési hibák 3. Elágazásszervezési hibák 4. Ciklusszervezési hibák 5. Bemeneti adatok hibái 6. Változókkal kapcsolatos hibák 7. Aritmetikai kifejezések hibái 8. Tömbökkel kapcsolatos hibák 9. Eljárások használatának, paraméterezésének hibái 10.4 Hatékonyabbra írás rjunk algoritmust az első N természetes szám négyzete össze- gének kiszámítására! Eljárás: S:=0 Ciklus I=1-től N-ig S:=S+I^2 Ciklus vége Eljárás vége. Az eljárás helyes eredményt ad, de nem elég hatékony. I^2 he- lyett I*I-t használva máris gyorsabbá tehetjük. A feladatot sokkal egyszerűbben is meg lehet oldani egy matematikai tétel felhasználásával: Eljárás: S:=N*(N+1)*(2*N+1)/6 Eljárás vége. Az ilyen és ehhez hasonló esetekben van szükség a haté- konyság vizsgálatára. Egész sor olyan módszer létezik, ame- lyek alkalmazásával a programot hatékonyabbá írhatjuk. Hatékonyabbra íráson a végrehajtási idő, a helyfoglalás (programszöveg és adatok), valamint a bonyolultság (elkészí- tési-, megértési idő, szükséges tudás) csökkentését értjük.