ProgramozásMódszertan
9. előadás’2001
(vázlat)

A Programírási folyamat elemei

0. A folyamat egésze

A programírást olyan tevékenységnek tekintjük, amely célja egy programnak mint ter­méknek a létrehozása. Az alábbi táblázatban összefoglaljuk, hogy milyen lépéseket tesz a programfejlesztő a kezdetektől (a feladat felvetődésétől) a programtermék elkészültéig. Meg­adjuk, hogy az egyes lépések milyen „konkrétum” létrehozását vállalják föl, és hogy ezáltal milyen lényegesebb részcél elérését segítik.

lépés

konkrét eredménye

célja

Feladatmegfogalmazás

specifikáció (Sp)

 

 

 

A (körültekintően megvizsgált, s így garantáltan) megértett[1] feladat +
formalizált feladatleírás

Algoritmizálás

adatleírás + algoritmus v0.0[2]
(AA)

 

1. Helyességvizsgálat –
helyességbizonyítás

levezetések

 

Algoritmuskorrekció

korrigált adatleírás + algoritmus v+x.y[3]

 

 

 

helyes absztrakt program (HAP) =
AA+
bizonyítási jegyzőkönyv (
'Sp))

Kódolás

kód v0.0[4] (K)

 

2. Helyességvizsgálat –
tesztelés

tesztesetek
(bemenet+várt kimenet
Ûkapott kimenet)

 

Hibakeresés

hibaesetek
(hibajelenség+hibahely)

 

Hibajavítás

javított kód v+x.y

 

 

 

helyes (konkrét) program (HP)=
K +
tesztelési jegyzőkönyv

Hatékonyságvizsgálat

hatékonysági esetek
(bemenet
Þhatékonysági mutatók+helyek)

 

Hatékonyítás –
„humanizálás
[5]

módosított, kiegészített kód v+x.y

 

 

 

jó program (JP) =
HP +
hatékonysági okok miatti adatállományok
[6] +
hatékonysági jegyzőkönyv

Dokumentálás

dokumentációk

 

 

 

használható program =
JP +
dokumentációk

Karbantartás

paraméterek, környezet változásának követése a programban

 

 

 

időtálló program

1. Algoritmizálásról

Láttuk, az algoritmust miként határozza meg az elkészült specifikáció. (Programozási tételek szerepe a gyakorlati programozásban.) Nagyobb feladatok esetében azonban ez a mechani­kusan alkalmazható módszer nem bizonyul elegendőnek. Emiatt kell az e fejezetben felsorolt elveket ismernünk és követnünk.

Az elvek a szerint, hogy mire vonatkoznak csoportosíthatók. A „mindent” meghatározó el­veinket „stratégiaiként” aposztrofáljuk. Azok, amelyek az algoritmus (és adatok) logikájára gyakorolnak hatást és így közvetlenül a stratégiai elvekhez kapcsolódnak, azok „aprópénzre” válásait jelentik: a taktikai elvek. A technológiai elvek közé azokat soroltuk, amelyek az algoritmus „papírra vetéséhez” szolgálnak útmutatóul. (Ezen egyike-másika persze rányomja bélyegét a kódra is.) A kódolásnál kamatoztathatók az ún. technikai elvek. Végezetül azokat az elveinket, amelyek a haladó programok jellegzetes tulajdonságaiért felelősek, de az előző elvek folyamánya, mondhatjuk: magasabb szintű alkalmazásaik, azokat esztétikai-ergonómiai elveknek nevezzük.

1.1. Stratégiai elvek

1.1.1 Felülről lefelé tervezés

piramis elv’ – egyre terebélyesedő program (értsd: algoritmus)…

Dijkstra-féle ’gyöngysor’ metafora az „absztrakt gép–absztrakt program” kettősről…

1.1.2. Lépésenkénti finomítás

A piramis „tégláinak” ideális méretére igyekszik utalni: 5-7 részre bontás…

1.2. Taktikai elvek

1.2.1. Párhuzamos finomítás

Egyszerre a teljes szinten

1.2.2. Döntések elhalasztása

A szint domináns fogalmára (egy input vagy output adat, egy meglévő vagy éppen hiányzó feltételre) kell kihegyezni a döntést, amelyre alkalmazva a ’struktúra szerinti feldolgozás’ elvét, vagy valamely illeszkedő programozási tételt… Az a jó döntés, amely nem túl sok rész problémára szedi szét a finomítás alatt álló tevékenységet…

A kódhoz közeli döntéseket minél későbbre kell halogatni…

1.2.3. Vissza az ősökhöz

Ha nem lehet, vagy aránytalanul nehéznek tűnik a továbblépés, akkor az előző (ős) finomítási szint egészét elvetni, s más finomítási szerkezetet találva folytatni… (L. az ábrát.)

1.2.4. A nyílt rendszerfelépítése

Addig „általánosítani” a feladatot, amíg az hatékonyságcsökkenés nélkül azonos módon megoldható… s a feladatbeli konkrét értékeket általános paraméterekkel helyettesíteni… Pl. nem 10 elemre, hanem MaxN elemre…

1.2.5. A döntések kinyilvánítása

Tudatában kell lennünk, hogy milyen lépés hátterében milyen döntésünk (feltételezésünk) húzódik meg; sőt legjobb ezt lejegyezni, kinyilvánítani… (pl. ha a sorozat rendezett, akkor … vagy ha annyi adatunk van, hogy az a memóriában tartható… vagy az adatok egy tömbben tárolhatók…)

1.2.6. Az adatok elszigetelése

Az egyes programegységek csak ellenőrzött „csatornákon” kommunikálhatnak (paraméterek, globális változók).

Ciklusváltozó mindig egyedi a programegységre nézve, sohasem lehet globálissá tenni.

Ezen interface-eket célszerű csoportosítva lejegyezni az ún. kereszthivatkozási táblában: input/output/input-output; paraméter/ globális/lokális/saját…:

Objektum

előfordulási hely

hatáskör

információ-irány

N

program

globális

input-output

N

Beolvas

paraméter

output

N

Feldolgoz

paraméter

input

i

Feldolgoz

lokális/saját

(input-output)

Van

program

globális

input-output

Van

Feldolgoz

paraméter

output

1.2.7. Szintenkénti teljes kifejtés

Az adott szinten „absztrahált” résztevékenységeket specifikációjukkal (ef/uf) együtt illesztjük helyükre: így a szint mindig teljesen definiált, s lehetővé válik a helyességbizonyítás…

(L. az ábrát.)

1.3. Technológiai elvek

1.3.1. Kifejező és elégséges algoritmus leíró nyelv

Legyen minden algoritmikus és szabványos adatszerkezetnek könnyen megjegyezhető kulcs-szava. Legyen nyitott a bővítésre…

1.3.2. Világos tagolás

A sorokra tördelés szabadsága szolgálja a megértést.

1.3.3. Bekezdéses leírás

Az algoritmus struktúrája tükrözze vissza a felülről-lefelé tervezés menetét és az algoritmikus szerkezetek egymás alárendeltségi viszonyait.

1.3.4. Összetett szerkezetek „zárójelezése”

Eleje-vége egyértelműsítés kulcs-szavakkal megerősítése…

1.3.5. Beszédes azonosítók alkalmazása

Nagyban csökkenti a programbonyolultságát, ha az adatok/programegységek neve utal a funkciójára. (Gondoljunk egy „visszafordító” sematikus neveire, vagy a Word Doc®Html konverzióbeli tartalomjegyzék automatikus linkneveire.)

1.4. Technikai elvek

1.4.1. Barátságosság

Tájékoztató… inputnál kérdőszöveg…

1.4.2. Biztonságosság

Előfeltétel ellenőrzése, hibajelzés és a hibajavítás felkínálása…

1.4.3. Érvényességi halmaz kijelzése[7]

Milyen intervallumból választhat a felhasználó? Az input mindig mértékegységgel együtt értendő, amit jelezni (nem beolvasni) kell!

1.4.4. Input-minimalitás

Származtatható adatokat tilos bekérni…

1.4.5. Következetes kezelési szokások

Kell-e lezárni az inputot (gondoljunk a Read vagy ReadKey Pascal-beli utasításpárra). Az egyes billentyűkhöz –ha lehet– mindig ugyanaz a funkció társuljon…

1.4.6. Jól olvasható program

Kommentált forrás szöveg:

·  meghatározó adatoknál (típus, konstans, változó)

·  programegységeknél (eljárás/függvény/operátor) előfeltétel, utófeltétel (nem feltétlenül formálisan, de célra törően)

·  bonyolultabb tevékenységeknél az egyes részek funkciójának, módszerének leírása (pl. té­telre utalás)

1.5. Esztétikai-ergonómiai elvek

1.5.1. Input-lista

Ha csak előre meghatározott, kevés számú érték közül választható ki a paraméterérték, akkor csak ezek közül lehessen valahogyan választani (sorszámmal, adott hozzárendelt billentyűvel, lenyíló listából …)

1.5.2. Ablak/Lapozási technika

A monitoron megjelenő szöveg nagyobb, egyben tartandó, tartható egységeit egy-egy lapra tördelve jelenítjük meg, s felhasználói beavatkozásig várakoztatjuk a programot

A nyomtatón kiíratandó adatokat is lapozott egységekre tördeljük. Minden lapnak azonos szerkezet legyen: fejléc + törzs + lábléc. Adminisztratív információkat (programnév, dátum, lapsorszám stb.) a fej vagy lábsorba helyezzük.

(L. a példát, és futás közben.)

1.5.3. Menütechnika

A párbeszéd elegáns, hibaelkerülő módja, amely gyakorta építhető az ablakkezelés rutinjaira.

(L. a példát, és futás közben.)

1.5.4. Ikontechnika

Egy jól eltalált ikon (mini kép) gyorsíthatja a felhasználást.

1.5.5. Fontos információk kiemelése, strukturálása

A megjelenítést támogathatja a színek (betű- és papírszín) és más kiemelési (keretbefoglalás, villogtatás) technikák, valamint a csoportosított megjelenítés…

1.5.6. Kapcsolat-logikájú haladás lehetővé tétele

A nem csak lineáris haladás egy szövegolvasásban gyorsíthatja, könnyebbé teheti a felhasz­náló dolgát a program használatban (linkek).

1.5.7. Hibajelzés – hibajavítás

Ahol a hiba keletkezik, ott kell jelezni. Ha lehet, legyen visszavonható az utolsó input.

1.5.8. Naplózás

Egy –nem feltétlenül publikus– file-ban följegyezni a program haladás útjelzőit, az akkor és ott érvényes státuszváltozók értékeivel (esetleg időpontjával). Ez rendszerint egy TEXT állomány könnyen olvasható sorokkal…

1.5.9. Gyorsbillentyűs vezérelhetőség

A menük mellett (!) a gyakori funkciók egyetlen billentyű(kombináció)val történő elérhe­tősége. Érdemes tudni és alkalmazkodni bizonyos billentyű-szokásokhoz (szabványokhoz).

1.5.10. Segítségnyújtás

Általános és helyzetérzékeny súgó…

2. Kódolásról

A kódolás a már elkészült algoritmusból kiindulva készítjük kész kódolási szabályok vezényletével.

A kódban alkalmazott azonosítók célszerűen megegyeznek –ha nyelvi korlát nincsen– az algoritmusbelivel.

Ügyeljünk a kód „öndokumentálásra”, azaz kommentárok elhelyezésére. (L. példaprog­ramok.)

Ha hatékonysági indok (nagy méret, hosszú paraméterlista) és lehetőség (az adat egyértelmű, s globálisan elérhető) van arra, hogy egyik-másik paramétert elhagyjuk az eljárás/ függvény fejsorából, akkor tegyük, de alaposan meg kell vizsgálni, hogy interferenciát nem okozhat.

A programfejlesztés közben érdemes gondolni arra, hogy mik azok a funkciók, amik várha­tólag később is felhasználhatók lesznek. Ezeket külön file-ba elkülönítve tároljuk (kellően kommentálva a file elején). A legtöbb programozási nyelv lehetőséget biztosít ilyen file-ok könnyű beillesztésére. (L. Pascal include-direktíva.)

3. Dokumentálás

A program termék, amelyet kiválasztani kell tudni, használni, javítani–karbantartani–tovább­fejleszteni.

Mindehhez különfajta dokumentációk adnak segítséget.

Fajtái

·  Programismertető

·  Fejlesztői

·  Felhasználói

·  Installálási kézikönyv

Tulajdonságai

Illeszkedjen a megcélzott olvasóhoz, a betöltendő célhoz. Legyen a

·  szerkezete – világos, célratörő …

·  formája – … tartalomjegyzék, fogalomindex

·  stílusa –

o Ismertető: reklámízű…

o Felhasználói: jobbára szöveges, nem formális, képszerű...

o Fejlesztői: pontos, formálisabb, definitívebb

o Installálási: praktikus kérdésekre koncentráló, algoritmikusabb szemléletű (mikor mi történik, mi érdekében mi teendő)

A fejlesztői dokumentáció részei

L. mintadokumentációt.

A jól felhasználható segédprogramokat letöltheti: http://izzo.inf.elte.hu/szlaviPrM1felev/DoksiKellekek könyvtárból.

A felhasználói dokumentáció részei

 

 


Ábrák

A felülről-lefelé programtervezés

Szövegdoboz:  A felülről-lefelé programtervezés


Tartalom

A Programírási folyamat elemei 1

0. A folyamat egésze. 1

1. Algoritmizálásról 2

1.1. Stratégiai elvek. 2

1.1.1 Felülről lefelé tervezés. 2

1.1.2. Lépésenkénti finomítás. 2

1.2. Taktikai elvek. 3

1.2.1. Párhuzamos finomítás. 3

1.2.2. Döntések elhalasztása. 3

1.2.3. Vissza az ősökhöz. 3

1.2.4. A nyílt rendszerfelépítése. 3

1.2.5. A döntések kinyilvánítása. 3

1.2.6. Az adatok elszigetelése. 3

1.2.7. Szintenkénti teljes kifejtés. 4

1.3. Technológiai elvek. 4

1.3.1. Kifejező és elégséges algoritmus leíró nyelv. 4

1.3.2. Világos tagolás. 4

1.3.3. Bekezdéses leírás. 4

1.3.4. Összetett szerkezetek „zárójelezése”. 4

1.3.5. Beszédes azonosítók alkalmazása. 4

1.4. Technikai elvek. 4

1.4.1. Barátságosság. 4

1.4.2. Biztonságosság. 4

1.4.3. Érvényességi halmaz kijelzése. 4

1.4.4. Input-minimalitás. 4

1.4.5. Következetes kezelési szokások. 4

1.4.6. Jól olvasható program.. 5

1.5. Esztétikai-ergonómiai elvek. 5

1.5.1. Input-lista. 5

1.5.2. Lapozási technika. 5

1.5.3. Menütechnika. 5

1.5.4. Ikontechnika. 5

1.5.5. Fontos információk kiemelése, strukturálása. 5

1.5.6. Kapcsolat-logikájú haladás lehetővététele. 5

1.5.7. Hibajelzés – hibajavítás. 5

1.5.8. Naplózás. 5

1.5.9. Gyorsbillentyűs vezérelhetőség. 6

1.5.10. Segítségnyújtás. 6

2. Kódolásról 6

3. Dokumentálás. 6

Fajtái 6

Tulajdonságai 6

A fejlesztői dokumentáció részei 7

A felhasználói dokumentáció részei 7

 



[1] Ennek hangsúlyozása azért fontos, mert többnyire nem ugyanaz a személy, aki a feladatot kitűzi, mint az aki(k) a megoldást elkészíti(k).

[2] Játékos utalás, hogy ez a 0.0. verziója az adatleírás+algoritmusnak.

[3] Játékos utalás, hogy a verziók száma ezen lépés során növekszik.

[4] A választott célnyelvtől függően valamilyen kódolási szabályoknak megfelelően.

[5] Hatékonyítás a tárra és végrehajtási időre; a humanizálás az „emberi oldalának” (User Interface) a milyenségére vonatkozik.

[6] Help-állomány, kódtáblák (kódrövidítés: kódÞfile, adattömörítés: ismétlődő adatÞhelyettesítő kód)…

[7] Célszerű ezt a „magasabb szintet” képviselő ergonómiaiak közül áthelyezni a technikai elvek közé.