Lénárt György
Programozás - Szoftverek tesztelése, dokumentálása
A követelménymodul megnevezése:
Informatikai ismeretek A követelménymodul száma: 1155-06 A tartalomelem azonosító száma és célcsoportja: SzT-020-50
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
ESETFELVETÉS - MUNKAHELYZET Ön egy olyan munkahelyen dolgozik, amely számítógéppel végzett tervezési és gyártási feladatokra szakosodott. A számítógépes tervezést, gyártást minden esetben előzetes adatok alapján kell elvégezni, amelyek bizonyos programozási ismereteket igényelnek Öntől. Ön azt a feladatot kapta, hogy a megadott műszaki rajzok alapján készítse el a munkadarab gyártásához szükséges CAM-programot. Mielőtt a program megírásához hozzákezdene, ellenőrizze a rajzokon a méretek pontosságát és számszaki helyességét. Az
Ön
számára
a
számítógéppel
támogatott
gyártásban
való
közreműködéshez
elengedhetetlenül szükséges a programozási alapok megismerése. A fejezetben ismertetésre kerülnek azok a főbb témakörök, amelyekkel az eddigi tanulmányaiban találkozhatott, és lesznek olyan elemek is, amelyek az újdonság erejével hathatnak. Az Ön feladata, hogy ismerje meg a számítógépes program tervezésének menetét.
SZAKMAI INFORMÁCIÓTARTALOM Számítógépes program tervezésének témakörei: 1. Számítógépes program készítésének lépései 2. Programtervezés, programozáslogika szabályai 3. Számítógépes program tesztelése 4. Algoritmusok alapjai és a grafikus tervezés eszközei
1. Számítógépes program készítésének lépései A számítógépet okossá a rajta futó programok teszik. Jó programokat csak akkor tudunk írni, ha jól átgondoljuk, hogy mit szeretnénk csinálni, és azt hogyan tudjuk véghezvinni.
1
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA A programozás az a folyamat, amikor a konkrét feladatot a számítógép által értelmezhető formában írjuk le. A programozás eredménye a program. A program legkisebb egysége az utasítás. A program adott utasítások sorozata, amely az előre meghatározott célt, feladatot tartalmazza. Programozási nyelvnek nevezzük a programleírás nyelvét. A programozási nyelvek a programozó munkáját könnyítik meg a feladat megfogalmazására. Programozási nyelvek csoportosítása: -
gépi kódú programozás
-
alacsony szintű programozási nyelv
-
magas szintű programnyelvek
-
objektumorientált programozási nyelvek
-
negyedik generációs programozási nyelvek
-
ötödik generációs programozási nyelvek
Gépi kódú programozás: A program gépi kód formájában van a számítógép operatív tárjában. A gépi kód minden esetben egy bináris kód. A számítógép kettes számrendszerben dolgozik, azaz 0, 1 bitsorozatokkal. A gépi kódú utasítás részei az utasítás kód, amely az elvégzendő műveletet azonosítja és a műveletekhez szükséges paraméterek (érték, memóriacím) listája, bináris formában. Alacsony szintű programozási nyelv: Azokat a nyelveket nevezzük így, amelyek a gépi kódhoz nagyon közel álló nyelven vannak megírva. A bináris értékek helyett emlékeztetőket használnak (például: az összeadás utasítása az ADD parancs). Az
alacsony
felhasználható
szintű adat,
programozási illetve
a
nyelvek
nagymértékben
vezérlőszerkezetek
számítógépfüggőek.
visszatükrözik
a
számítógép,
A a
mikroprocesszor architektúráját. Ilyen programozási nyelv az assembly. Jellemzője, hogy a legtöbb utasítása egyértelműen egyetlen gépi kódú utasításnak felel meg. Az alacsony szinten megírt, megszerkesztett programot forrásprogramnak nevezzük, amelyet le kell fordítanunk gépi kódra. Az assembly fordítóprogramja az assembler.
2
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Magas szintű programnyelvek: A fő cél az volt a nyelvek megalkotásánál, hogy a számítógép programozását az emberi nyelv logikájához közelálló módon, lehetőleg gépfüggetlenül és gyorsan lehessen elvégezni.
Több ezer különféle, magas szintű programnyelv létezik. Egy
programnyelven
megírt,
kódolt,
megszerkesztett
programot
forrásprogramnak
nevezzük. A forrásprogramot fordítani, értelmeztetni kell a számítógéppel. Két nagy csoportba sorolhatjuk a fordítás módja alapján a magas szintű programnyelveket. Értelmezőprogramot használó programnyelvek: Az értelmezőprogramot interpreternek nevezzük. Soronként fordító és futtató programnyelvnek is nevezhetjük ezeket a programnyelveket. Ilyen programozási nyelv a BASIC. A forrásprogramot utasításról utasításra értelmezi, majd azonnal végrehajtja az értelmezőprogram. Fordítóprogramot használó programnyelvek: A programnyelven megírt forrásprogramot a compiler fordítja le a számítógép által végrehajtható formára. Egyben fordító majd futtató programnyelvnek is nevezhetjük ezeket. Ilyen programozási nyelv a C, Pascal, Clipper stb. A magas szintű programnyelvek vezérlési szerkezetei: -
szekvencia
-
szelekció
-
iteráció
A magas színtű programnyelveket sajátos szintaxis és szemantika határozza meg. A szintaxis a programozási nyelv utasításaira vonatkozó nyelvtani szabályok összessége. A szemantika programozási nyelv szerkezetének értelmét, jelentését határozza meg. A szintaktikailag helyesen megírt forrásprogramnak szemantikailag is értelmezhetőnek kell lenni, hogy az értelmező- vagy fordítóprogram a számítógép által használt formára tudja alakítani.
3
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Objektum-orientált programozási nyelvek:
Három és fél generációs programozási nyelveknek is szokták nevezni az objektumorientált programozási nyelveket. Az objektumorientált programozási nyelv használatával a felhasználó sokkal egyszerűbben és szabadabban készítheti el a saját típusait (melyeknek jelentését természetesen le kell programozni). Meglévő típusok továbbfejlesztésével (öröklődés) könnyedén készíthet új típusokat. A saját típusokhoz nemcsak operátorokat rendelhet, hanem megadhat függvényeket és eljárásokat is, amelyek az adott típusú adatokkal végeznek valamilyen műveletet. A vezérlési szerkezetek a magas szintű programozási nyelveknél is használt formákra épülnek (szekvencia, szelekció, iteráció). Negyedik generációs programozási nyelvek: A negyedik generációs nyelvek speciális feladatkörre készült nyelvek. Ezen nyelvek jellemzője, hogy nagyon kevés nyelvi elemmel dolgoznak, és nagyon egyszerű, szinte mondatszerűen olvasható utasítások fogalmazhatók meg. Ilyen nyelv például az SQL nyelv, amely elsősorban adatbázis-kezelésre van felkészítve. Ötödik generációs programozási nyelvek: A mesterséges intelligencia programozási nyelvekkel elvileg az emberi gondolkodás leírását lehetne megvalósítani, gyakorlatilag azonban még a nyelvek kutatása, fejlesztése folyik napjainkban. Programok csoportosítása: -
rendszerprogramok
-
alkalmazói programok
-
segédprogramok
-
fejlesztő rendszerek, programozási nyelvek
-
egyéb programok
A számítógépes programkészítés lépései: 1. A feladat megfogalmazása és elemzése. 2. A matematikai modell kialakítása. Milyen módszert alkalmazunk, és milyen részekre lehet a feladatot felbontani? 3. Az adatstruktúra kialakítása. Milyen adatokra van szükség a program futásához? 4. A program eredményközlése. Meg kell tervezni, hogy a program a legjobban kiértékelhető formában adja vissza az eredményt. 5. A program folyamatábrájának elkészítése. 4
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA 6. A program megírása. 7. A program tesztelése, hibakeresés, futási eredmények kiértékelése. 8. A program dokumentálása. FONTOS! Cél a jó szoftver előállítása, elkészítése. A szoftver-előállítás fázisai: -
analízis
-
tervezés
-
implementálás
-
tesztelés
-
követés
1. ábra. A hagyományos termékek készítésének folyamata
A szoftver minden más ipari terméktől különbözik. Ha egy kis része is hibás, már nem működik. A számítógéprendszer életciklusának főbb kérdései: -
Hol kezdődik?
-
Hogyan tagozódik szeletekre?
-
Mikor lesz vége?
2. ábra. A számítógéprendszer életciklusa
Most térjünk vissza a programnyelvek vezérlési szerkezeteihez (szekvencia, szelekció, iteráció)!
5
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Böhm-Jacopini tétele: Bármely egy bemenetű és egy kimenetű program megfeleltethető egy olyan programnak, amely három alapvető vezérlési szerkezetből (szekvencia, szelekció, iteráció) épül fel. Szekvencia alatt logikailag összetartozó utasítások, programrészek összességét értjük. A szelekció valamilyen feltétel szerinti elágazást jelent a programban. Az
iteráció
valamilyen
feltétel
szerinti
ismételt
szekvencia
végrehajtását
jelenti
a
programban. Az iterációt ismétlésnek vagy ciklusnak szokás nevezni. Megkülönböztethetünk elől tesztelő, illetve hátul tesztelő ciklust.
2. Programtervezés, a programozáslogika szabályai A programok írása, kódolása a programozó feladata, aki a rendszerszervező tevékenységét programokká ülteti át. Egy eljárást több program is megvalósíthat. A programozó feladatai: -
Az eljárások részekre bontása. Biztosítani a programok együttműködését (a programozó és a szervező közösen valósítja meg).
-
Meg kell határozni az egyes programok sorrendjét.
-
Programok megírása (kódolás).
-
Tesztelés (szervezővel együtt, külön-külön).
-
Kezelési utasítás készítése.
-
Programdokumentáció készítése.
A rendszerszervezés módszertanok kialakítására azért volt szükség, mert kellett valamilyen útmutatás a szoftverek fejlesztéséhez. Fontos kérdés, amire válaszokat, lehetőségeket fogalmaz meg a módszertan: Mit, mikor és hogyan kell végrehajtani? Mindezekhez módszertani ajánlások szükségesek.
Száraz, nehezen tanulható anyagok. Módszertani ajánlás tartalma:
6
-
Előírja az elkészítendő terméket.
-
Felsorolja az elvégzendő feladatokat.
-
Mindezekhez technikát ad.
-
Segíti a projektvezetést.
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Feladata: Azokat az általános irányelveket foglalja össze, amelyek meghatározzák a szervezők, programozók szemléletmódját, viselkedésmódját és módszereit. A módszertanok elemei: -
dokumentációs szabvány
-
tevékenységterv
-
technikák a dokumentumok előállításához
A módszertanok célja: -
A szoftver eleget tegyen a felhasználók igényeinek.
-
Minél korábban derüljenek ki a hibák.
-
A projekt tervezhető legyen.
-
Támogassa az eltérő szerepű közreműködők munkáját.
-
Hatékony fejlesztés, működés.
-
Könnyű karbantarthatóság.
-
A termék minél kevésbé függjön az alapszoftvertől.
Az egyes módszereket parciálisan is lehet alkalmazni. Általánosan jó séma nincs, vannak használható sémák. Ez a tevékenység szellemi termék, nem lehet általánosan jó sémát ráhúzni. Itt az alkotás, az intuíció is fontos (intelligencia, rátermettség, emberismeret). A szoftverrel szemben támasztott követelmények: -
futási idő minimalizálása
-
tárgyigény minimalizálása
-
felhasználóbarát felület
-
feltétlen megbízhatóság
-
könnyű karbantarthatóság
-
gyors és olcsó kivitelezés
-
határidők pontos betartása
-
egyéniségfüggetlen programozás
Ezen követelményeket számos elkészített szoftver csak részben teljesíti. A következő diagramról egy összehasonlító statisztika olvasható le, amely utal a szoftverekkel
szemben
támasztott
követelmények
figyelmen
kívül
hagyására
(szoftverkrízisnek is szokás nevezni).
7
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
3. ábra. A szoftverkrízis
A statisztikából kiderül, hogy az elkészített szoftverek körülbelül egyharmada szinte „öncélúnak”, „hasztalannak” is tekinthető. Az informatika fejlődésével egy érdekes jelenség figyelhető meg, amely a 80-as évektől radikális változást okozott a hardverek, illetve a szoftverek tekintetében. A 80-as évekig a hardvereszközök jelentősége és ára dominálta a szoftverek előállítóit, gyártóit. Az elkészített szoftvereknek minden tekintetben alkalmazkodniuk kellett a meglévő hardver
paramétereihez.
Ekkor a
hardverek
ára
nagyságrendekkel drágább volt a
szoftverekénél. A 80-as évektől elkezdődött egy folyamat, amely egyre inkább igaz napjainkban, hogy az elkészített szoftverhez utólag igazítják hozzá a hardvereszközöket. A felhasználók egy-egy új program megjelenése után hardverbővítést, számítógépcserét kénytelenek végrehajtani, ha azt akarják, hogy az a program a gépeiken használható legyen. Manapság a szoftverek ára nagyságrendekkel drágább a hardvereszközök áránál. A következő ábrán a hardver-szoftver arány változását figyelhetjük meg.
8
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
4. ábra. A hardver-szoftver arány változása
Az informatikai beszerzéseket napjainkban a szoftverek hardverigénye határozza meg. Tervezéskor először a kívánt végtermék tulajdonságait határozzák meg, majd az ehhez szükséges szerelvényeket, alkatrészeket. A fejlesztésnek nem csupán végterméke van (szoftver vagy információrendszer), hanem mindig valamilyen terméket állít elő vagy módosít (modelleket, diagramokat, specifikációkat, programokat stb.). Az előállítandó terméktípusoknak előre meghatározott minőségi követelményeknek kell eleget tenniük (minőségkezelés). A fejlesztés menetének pontos előírásai vannak. Pontosan előírják a fejlesztés szakaszait, az azon belül szükséges tevékenységeket, hogy ehhez milyen más tevékenység termékeit kell felhasználni, milyen technikákat kell használni az egyes termékek előállításához, és milyen minőségi követelményeknek kell a terméknek eleget tenni. Az előírt minőségi követelmények mércét szabnak a projektben résztvevők egyéni munkateljesítményének megítéléséhez. Tovább erősíti a projektvezetés megalapozását és hatékonyságát. A fejlesztés eszközei meghatározott módszerek alkalmazásának automatizálását, illetve félautomatikus támogatását szolgálják. Elemzési munkát segítő eszközök: olyan diagrammok, ábrák, sémák, amelyek a rendszert áttekinthetőbbé teszik, megkönnyítik a probléma felismerését, és lehetőséget biztosítanak a team munkatársainak az azonos értelmezésű közös munkára.
9
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Az eszközök alkalmazási területei: -
Problémadefiniálás, a helyzetfeltárás és elemzés fázisában alkalmazható technikák
-
A fejlesztés során alkalmazható technikák
-
A kivitelezés eszközei
-
A rendszerfelügyelet során alkalmazható eszközök
-
Számítógép a fejlesztésben: CASE és 4GL
A programírás során az algoritmust kell a számítógép számára érthető formába kódolni. Ez valamely programozási nyelv segítségével történik. A programozási nyelvek mindegyikének saját szintaktikai és logikai szabályai vannak, melyeket szigorúan be kell tartani. A programozási nyelven írt programot a nyelv fordítóprogramja teszi érthetővé a számítógép számára.
3. Számítógépes program tesztelése A számítógépes program tesztelése egy olyan folyamat, mely vizsgálja, meghatározza a fejlesztett számítógépes szoftver helyességét, teljességét, biztonságát, minőségét. A minőségi kritériumok tesztelése: -
Megbízhatóság, hibatűrés
-
Hatékonyság
-
Hordozhatóság
-
Karbantarthatóság
-
Felhasználóbarátság
A program megbízhatósága annak a valószínűségével mérhető, hogy a program nem nyújt hibás szolgáltatást. A megbízhatóság mértékét meghatározhatjuk a programban lévő rejtett hibák számának becslésével. Az
elkészített,
megírt
programot
tesztelni
célszerű,
hogy
kiderüljenek
a
hibák,
hiányosságok, amelyek kijavításával a program tökéletesedik a megrendelő, illetve a felhasználó igényeinek megfelelően. Különböző programtesztelési módszereket alkalmazhatunk. Statikus tesztelésen a szélsőséges esetek vizsgálatát értjük, a hibák javítása érdekében. Dinamikus tesztelés esetén a program futtatása alatt lépésenkénti nyomon követés történik. Floyd-módszer alkalmazásakor a programot a tesztelés idejére teletűzdeljük ellenőrzési pontokkal, állításokkal, feltételekkel, amelyek hibás működés esetén a hamis logikai értéket veszik fel. A funkcionális tesztelés a program viselkedését összeveti a specifikáció követelményeivel a felhasználó szemszögéből vizsgálva. 10
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Kódlefedés módszer használata során a tesztadatokat úgy határozzuk meg, hogy a program forráskódjának minél nagyobb részét teszteljük. Egy mérőszám is egyben, mely megmutatja, hogy a forráskód hány százalékát teszteltük. Teljesítménytesztelés Általános teljesítményteszt: A rendszer működési sebességének összevetetése az elvárt értékekkel. A teszt segítségével fény derül a rendszernek a sebesség szempontjából kritikus pontjaira, szűk keresztmetszeteire. Referencia teljesítményteszt: A rendszer működési sebességének egy másik, a tesztelt rendszerhez hasonló funkcionalitású rendszer sebességével való összevetése. Terheléses
teljesítményteszt:
A
rendszer
sebességének
vizsgálata
különböző
munkaterhelések esetén. A teszt során rögzítésre kerül a terhelés mértéke (pl. felhasználók, tranzakciók száma), valamint a rendszer működési sebessége az adott terhelés alatt. Konkurencia teljesítményteszt: A rendszer teljesítményének vizsgálata abban az esetben, ha a rendszernek többszörösen kell ugyanahhoz az erőforráshoz (pl. ugyanahhoz az adatrekordhoz) hozzáférnie. Sokk teljesítményteszt: A rendszer működésének vizsgálata extrém körülmények között. Ezek
az
extrém
körülmények
lehetnek
a
tervezettnél
nagyobb
terhelések,
kevés
memória/erőforrások, hardverproblémák, áramszünet stb. A
tesztelés
folyamata
szervesen
beilleszkedik
a
szoftverfejlesztés
folyamatába,
és
végigkíséri azt a szoftvertermék teljes életciklusán. A tesztelés a tesztelési stratégia kiválasztásával kezdődik. Ezt követően elkészítésre kerülnek a teszttervek, amelyek tartalmazzák a tesztelés egyes lépéseit, valamint a tesztelés ellenőrző pontjait, a teszteseket. A tesztterveket természetesen a szoftver változásával, bővülésével együtt kell változtatni. Az elkészült teszttervek alapján a tesztelés a programfejlesztés különböző fázisaiban kerül végrehajtásra, majd az eredményt kiértékelve a szoftverben talált hibákat javítani kell. Komponenstesztelés:
Programkomponensek
egyedi
tesztelése,
amely
általában
a
komponens fejlesztőjének feladata és a fejlesztő tapasztalatán alapul. Rendszertesztelés: Komponensek rendszerbe vagy alrendszerbe integrált csoportjainak tesztelése,
amely
egy
független
fejlesztő
csoport
feladata
és
a
tesztek
a
rendszerspecifikáción alapulnak.
11
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
5. ábra. A tesztelés fázisai
Csak a kimerítő teszteléssel deríthető ki, hogy a program hibamentes-e. De a kimerítő tesztelés lehetetlen. A tesztelési vezérelvek definiálják a tesztek kiválasztásának módját: -
A menükön keresztül elérhető valamennyi funkciót le kell tesztelni.
-
Az azonos menün keresztül elérhető funkciók kombinációit tesztelni kell.
-
Ahol felhasználói bevitel van, minden funkciót ellenőrizni kell helyes és helytelen adatokkal.
6. ábra. A szoftvertesztelés folyamata
A tesztelés automatizálása: A tesztelés nagyon drága fejlesztési fázis. A tesztelési munkapadok számos eszközt tartalmaznak, mellyel a tesztelési idő és költség redukálható. Egyes rendszerek támogatják a tesztek automatikus végrehajtását. A legtöbb tesztelési munkapad nyitott rendszer, hiszen a tesztelési igények a szervezettől függenek. Ezeket időnként nehéz integrálni a zárt tervezési és analízis munkapadokkal. A tesztelés felfedheti hibák jelenlétét a rendszerben, de nem tudja bizonyítani, hogy nem maradt több hiba. A komponensek fejlesztői felelősek a komponenstesztelésért, a rendszertesztelés egy független csoport feladata.
12
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Az
integrációs tesztelés a
rendszer
növekményeinek
tesztje,
a
végteszt
pedig a
megrendelőnek átadni kívánt rendszer tesztelésével foglalkozik. A hibatesztelés tervezéséhez mind a tapasztalat, mind az ökölszabályok használhatók. Az interfésztesztelés feladata a kompozit komponensek interfészeiben lévő hibák feltárása. A tesztek kidolgozásának egy módja az ekvivalencia partíciók kialakítása: a partíció olyan, hogy a benne lévő összes eset ugyanúgy viselkedik. A strukturális analízis a program analíziséből teszteket generál. Az automatikus tesztelés a tesztelési eljárást szoftvereszközökkel támogatva csökkenti a tesztelés költségeit.
4. Algoritmusok alapjai és a grafikus tervezés eszközei Az algoritmus meghatározására többféle definíciót is használhatunk. Az
algoritmus
a
műveletek
tartalmára
és
sorrendjére
vonatkozó
egyértelmű
utasításrendszer, amely a megfelelő kiinduló adatokból a kívánt eredményre vezet. Az algoritmus feladat megoldására készített terv, amely véges lépésben a feladat megoldását eredményezi. Az algoritmus olyan eljárás (parancsok és utasítások sorozata), amely véges, teljes és egyértelmű. Az algoritmus elemi (egyszerű) és összetett műveletekből álló utasítások halmaza. Az algoritmus tulajdonságai: Az algoritmus véges, mivel pontosan meghatározható (előre definiált) egy olyan pont, amelynél az algoritmus működése befejeződik. Az algoritmus teljes, azaz ha az algoritmus megoldást ad egy problémára, akkor megoldást ad az abból következő összes részfeladatra is. Az algoritmus egyértelmű, mivel minden egyes lépés következő lépése előre meg lett határozva, és más lépés nem következhet utána, azaz nem helyettesíthető egy másik lépéssel. Az algoritmus bemenő adatokkal, alapadatokkal (input) végez különböző műveleteket. Az elemi műveletek olyan tevékenységek, amelyek nem igényelnek magyarázatot, azonnal végrehajthatók. Az összetett műveletek elemi műveletekből felépülő műveletsor. 13
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
7. ábra. Algoritmus működése
Algoritmusmegadási módok: -
élőbeszéd
-
mondatszerű leírás
-
folyamatábra (blokkdiagram)
-
struktogram
-
programszerű leírás
-
faszerkezet
-
Jackson-diagram
Élőbeszéd: Az élőbeszéddel való megadás a programok elkészítéséhez nem nyújt megfelelő alapot. Szokták mondani, hogy a szó elszáll, de az írás megmarad, ezért ezt a módszert nagyon ritkán használjuk bonyolult feladatok megoldására. Nagyon egyszerű feladatokra azonban használhatjuk. Például: Olvass be egy számot egy változóba, majd írd ki! Mondatszerű leírás: Az algoritmusleíró eszköz alapeleme a mondat, illetve a mondatszerű forma. Az algoritmus szerkezetet tagolni kell. Nagy előnye, hogy jól illeszkedik a programozási nyelvek szerkezetéhez. A mondatszerű leírásnak kötött szabályai vannak. Az utasítás mindig nagybetűvel kezdődik. A mondatszerű leírás elemei:
Beviteli, kiviteli műveletek: Be: adat Ki: adat
Értékadás: VÁLTOZÓ := kifejezés
14
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
Elágazás: Ha feltétel akkor utasítások különben utasítások Elágazás vége
Hátul tesztelő ciklus: Ismétlés ciklusmag amíg feltétel
Elől tesztelő ciklus: Ismétlés, mialatt feltétel ciklusmag Ismétlés vége Most tekintsünk meg néhány egyszerű példát a mondatszerű leírásra! Példa: Határozzuk meg két szám (A, B) hányadosát (C), ügyelve a zérussal való osztásra! Be: A, B Ha B =0 akkor Ki: „Zérussal való osztás!” különben
C :=A/B Ki: C
15
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Elágazás vége Példa: Határozzuk meg N darab természetes szám (Ai) átlagát! Be: N
I :=1, ÖSSZEG :=0 Ismételd, mialatt I <= N Be: A
ÖSSZEG := ÖSSZEG+A I := I + 1 Ismétlés vége
ÁTLAG :=ÖSSZEG / N Ki: ÁTLAG A folyamatábra az algoritmust grafikus módon ábrázolja. Fontos jellemzője a folyamatábrának, hogy az utasítások sorrendje jól nyomon követhető, mivel az utasításokat ábrázoló grafikus jelekből húzott nyilak egyértelműen megmutatják a következő műveletet. A
folyamatábra
szimbólumokból
épül
fel,
amelyek
meghatározzák
az
ábrában
továbbhaladás módját. A start, illetve a stop csomópont a folyamatábra kezdetét, illetve befejezését jelzik. A be- és kivitel csomópont az adat, adatok beolvasására, kiíratására használt elem. Az utasítás csomóponton áthaladva végre kell hajtani a téglalapban megadott utasítást. A döntés csomópontnál a feltételtől függ a továbbhaladás iránya (igaz vagy hamis ág). A csatlakozási pont kapcsolja össze a különböző algoritmuságakat.
16
a
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
8. ábra. Folyamatábra alapszimbólumai
A folyamatábra tartalmazhat kiegészítő szimbólumokat is, amelyek használata, beépítése az adott feladattól függhet.
9. ábra. Folyamatábra kiegészítő szimbólumai
A
folyamatábrában
a
tevékenységszerkezeteket
(szekvencia,
szelekció,
iteráció)
is
megadhatunk.
10. ábra. Folyamatábra tevékenységszerkezetei 17
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA A folyamatábra hátránya, hogy az összetettebb, bonyolultabb algoritmusok nehézkesen ábrázolhatók vele, nagy helyet foglalnak (több oldal is lehet). A folyamatábrának szépnek (jó kinézetű), olvashatónak (jól áttekinthető) kell lennie, és a továbbhaladást jelző nyilak nem keresztezhetik egymást. Most tekintsünk meg néhány egyszerű példát a folyamatábrák alkalmazására! Példa: Határozzuk meg két szám (A, B) hányadosát (C), ügyelve a zérussal való osztásra!
11. ábra. Folyamatábra (két szám hányadosa)
Példa: Határozzuk meg N darab természetes szám (Ai) átlagát!
18
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
12. ábra. Folyamatábra (n darab természetes szám átlaga)
Megfigyelhetjük a két példa folyamatábráin, hogy a felhasználó tetszés szerinti változókat (S: Összeg, X: Átlag) használhat, vezethet be, így nagyfokú szabadságot biztosít számára az algoritmus elkészítésekor. A struktogram az algoritmust szintén grafikus módon ábrázolja, mint a folyamatábra, azonban jóval tömörebb formában. A struktogram nem tartalmaz továbbhaladást mutató nyilakat. Olvasása felülről lefelé és balról jobbra történik. Strukturált programok szerkezete jeleníthető meg a használatával, amelynek alapeleme a téglalap.
19
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA A
struktogramon
a
tevékenységszerkezeteket
(szekvencia,
szelekció,
iteráció)
megadhatunk.
13. ábra. Struktogram tevékenységszerkezetei
Most tekintsünk meg néhány egyszerű példát a struktogramok alkalmazására! Példa: Határozzuk meg két szám (A, B) hányadosát (C), ügyelve a zérussal való osztásra!
14. ábra. Struktogram (két szám hányadosa)
Példa: Határozzuk meg N darab természetes szám (Ai) átlagát!
20
is
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
15. ábra. Struktogram (n darab természetes szám átlaga)
A struktogram hátránya, hogy a grafikus formátuma miatt terjengős lehet a mérete, ha bonyolult, összetett feladatra szeretnénk használni ezt az algoritmusleíró eszközt.
A többi algoritmusleíró eszköz ismertetésétől (programszerű leírás, faszerkezet, Jacksondiagram) e szakmai információtartalomban eltekintünk. FONTOS! Egy elkészített algoritmusnak programnyelv-függetlennek kell lennie, és a program kódolását kell elősegítenie! Az algoritmus a programozás legfőbb alappillére! Adatok, adatszerkezetek: Most az algoritmusban használható adatok, adatszerkezetek ismertetése következik. Az algoritmus tevékenységszerkezetekből épül fel, ahogy ez már korábban ismertetésre került. Az adatokat konstansokra és változókra bontjuk. Mivel az algoritmus megadása mondatszerű leírással nagyon jól illeszkedik a programozási nyelvek szerkezetéhez, ezért a továbbiakban ezzel fogunk foglalkozni. A változók a dekaráció vagy bejelentés helyén kaphatnak értéket. Használata nem kötelező, de bizonyos programnyelvek használatánál viszont igen. A változó értéke lehet definiált, ha a deklaráció helyén kezdőértékkel látjuk el, illetve definiálatlan, ha a dekaráció helyén nem adunk neki értéket. 21
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Be: M -> M definiálatlan, mivel nem adtunk neki kezdőértéket.
J := 0 -> J definiált, mivel kezdőértéket adtunk neki. Az értéktípus az adatok azon tulajdonsága, amely meghatározza az adat által felvehető értékeket és a rajtuk értelmezett műveleteket. Értéktípusok: -
egész típus
-
valós típus
-
logikai típus
-
szövegtípus
-
tömbtípus
Egész típus esetén a változó az egész számok halmazából vehet fel értékeket, azaz Z:= {…, -4, -3, -2, -1, 0, 1, 2, 3, 4, …}. Egész számokon végezhető műveletek: +, -, *, /, div, mod div (egész osztás) -> Például: 10 div 3 = 3 (10/3 = 3 maradék 1) mod (maradék képzés) -> Például: 10 mod 3 = 1 (10/3 = 3 maradék 1) Valós típus esetén a változó a valós számok halmazából vehet fel értékeket, azaz R:= {racionális-, irracionális számok}, ahol a racionális számok két egész szám hányadosaként előállítható számok, illetve az irracionális számok nem állíthatók elő két egész szám hányadosaként. Logikai típus esetén a változó {igaz, hamis} értékeket vehet fel. Logikai értékeken végezhető műveletek: AND, OR, NOT Szövegtípus esetén a változó maximum 255 karakterből álló szöveges értéket vehet fel.
Szokás még karaktertípusról is beszélni, amely olyan szöveges típusú változó, amelynek hossza egyetlen egy karakter. Az eddig ismertetett változó adattípusokat elemi típusú változóknak nevezzük. Az összetett változó adattípus elemi típusokból épül fel, ezért megadásukkor meg kell adnunk, hogy milyen elemekből és hogyan képezzük az elemeit. Amivel a továbbiakban foglalkozunk, az a tömbtípus, mint összetett változó adattípus. A tömb deklarációját a következőképpen tehetjük meg:
22
-
tömb nevének megadása, azaz a változók közös neve,
-
indextartomány megadása, amely a tömb elemszámát határozza meg,
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA -
elemek típusának megadása.
Például: -
T: Tömb[1..10] Egész
-
VEKTOR: Tömb[1..40] Valós
-
MÁTRIX: Tömb[1..3,1..4] Egész
Most nézzünk példát a konstansok és változók deklarációjára: Konstans
Indul = 1 Befejez = 10 Változó
I: Egész R: Valós B: Logikai Sz: Szöveg[10] T: Tömb[1..50] Egész Természetesen nagyon ritka eset, amikor egyszerre minden típust használunk (konstans, változó). Ez mindig függ az adott feladattól! A változók jelölésében a nagy-, dőlt betű használata nem kötelező érvényű. A félkövér betűtípus használata csak a kiemelést, átláthatóságot szolgálja a nyomtatott forma következtében. Adatszerkezeten végezhető általános műveletek: -
a tömb elemekkel való feltöltése
-
a tömb elemeinek kiíratása
-
a tömb elemeinek rendezése
-
a tömb elemeinek keresése
23
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA A feladat a következő: Töltsünk fel egy 20 elemű tömböt egész számokkal! Rendezzük le a tömböt növekvő sorrendbe, majd írassuk ki a tartalmát! Nézzük meg, hogy egy tetszőlegesen beolvasott egész számot tartalmaz-e a tömb! Konstans n=20 Változó i, cs, x: Egész t: Tömb[1..n] Egész z: Logikai Algoritmus i:=0 Ismételd i:=i+1, Be: t[i] amíg i>(n-1) i:=1 Ismételd i:=1-től (n-1)-ig Ismételd j:=(i+1)-től n-ig Ha t[i]>=t[j] cs:= t[i], t[i]:=t[j], t[j]:=cs Elágazás vége Ismétlés vége Ismétlés vége i:=1 Ismételd i:=1-től n-ig Ki: t[i] Ismétlés vége
24
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Be: x, i:=1, z:=hamis Ismételd i:=1-től n-ig Ha t[i]=z z:=igaz, i:=n+1 Elágazás vége Ismétlés vége Ki: z Algoritmus vége Jelölések magyarázata: -
n: a tömb elemeinek száma, azaz 20
-
i: a tömb index változója (például: t[1]=5, … , t[20]=-2)
-
cs: átmeneti változó, ha a tömb elemeinek cseréjére van szükség
-
x: a keresett érték, tetszőleges egész szám beolvasása után
-
z: logikai változó, amely igaz, ha az x benne van a t[i] tömbben, egyébként hamis
Belátható, hogy egy összetett feladat, probléma megoldása mondatszerű megadás használatával rövid és átlátható algoritmust eredményez.
TANULÁSIRÁNYÍTÓ 1. Válaszolja meg a következő kérdéseket írásban!
Ön a munkájában, munkájához milyen programozási nyelvet használ? Melyik generációba sorolná? Válaszát indokolja meg!
Programozási nyelv megnevezése: ______________________________________________________________ Programozási nyelv generációja: _______________________________________________________________ Indoklás: __________________________________________________________________________________ _________________________________________________________________________________________
25
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA 2. Tekintse át újból a szoftverelőállítás fázisait!
Rakja helyes sorrendbe a szoftverelőállítás fázisait!
1: Tervezés ________________________________________________________________________________ 2: Analízis _________________________________________________________________________________ 3: Implementálás ____________________________________________________________________________ 4: Követés _________________________________________________________________________________ 5: Tesztelés ________________________________________________________________________________
A helyes sorrend:
1: ________________________________________________________________________________________ 2: ________________________________________________________________________________________ 3: ________________________________________________________________________________________ 4: ________________________________________________________________________________________ 5: ________________________________________________________________________________________
3. Keresse meg a folyamatábrában található hibákat, hiányosságokat és javítsa ki azokat! Adja meg a javított algoritmus feladatát!
A javított folyamatábra a következő feladatra készült:
_________________________________________________________________________________________ _________________________________________________________________________________________ _________________________________________________________________________________________ _________________________________________________________________________________________ _________________________________________________________________________________________
26
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
16. ábra. Hibás folyamatábra
Helyes, javított folyamatábra:
4. Keresse meg a mondatszerű megadásban található hibákat, hiányosságokat és javítsa ki azokat! 27
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Adja meg a javított algoritmus feladatát!
A javított algoritmus a következő feladatra készült:
_________________________________________________________________________________________ _________________________________________________________________________________________ _________________________________________________________________________________________
Konstans Fő=20 Változó i: Egész Magyar: Tömb[1..Fő] Egész Algoritmus i:=1 Ismételd mialatt i
28
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
Helyes, javított algoritmus:
29
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
ÖNELLENŐRZŐ FELADATOK 1. feladat Döntse el a következő állításokról, hogy igazak vagy hamisak! A helyes állítást húzza alá! a) Szekvencia alatt logikailag összetartozó utasítások, programrészek összességét értjük. b) A szelekció valamilyen feltétel szerinti, ismételt szekvencia végrehajtását jelenti a programban. c) Az iteráció valamilyen feltétel szerinti elágazást jelent a programban. d) Az iterációt ciklusnak is szokás nevezni. 2. feladat Egészítse ki a hiányos mondatokat! a) A ………………… generációs programozási nyelvek speciális feladatkörre készült nyelvek. b) Három és fél generációs programozási nyelveket ……………………………… programozási nyelveknek is szokták nevezni. c) Alacsony szintű programozási nyelveknek nevezzük azokat a nyelveket, amelyek a ………………….. -hoz nagyon közel álló nyelven vannak megírva. d) Magas szintű programnyelvnek nevezzük azokat a nyelveket, amelyekkel a számítógép programozását
az
………………………………-i
logikához
közelálló
módon,
lehetőleg
gépfüggetlenül és gyorsan lehet elvégezni. 3. feladat Soroljon fel legalább négy programozói feladatot!
_________________________________________________________________________________________ _________________________________________________________________________________________ _________________________________________________________________________________________ _________________________________________________________________________________________ _________________________________________________________________________________________
30
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA 4. feladat Adja meg az algoritmus definícióját és tulajdonságait!
Definíció: _________________________________________________________________________________ _________________________________________________________________________________________ Tulajdonságai: _____________________________________________________________________________
5. feladat Készítsen folyamatábrát, amely számokat (A) olvas be nulla végjelig egy tömbbe (T[I]), majd kiírja a tömb legkisebb (MIN) és legnagyobb (MAX) beolvasott elemét!
Folyamatábra:
31
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA 6. feladat Készítsen mondatszerű megadással algoritmust! Olvasson be egész számokat (a) nulla végjelig egy tömbbe (T[i]), majd a beolvasott elemeket válogassa szét páros (PS[j]), illetve páratlan (PA[k]) számokat tartalmazó tömbökre!
32
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
MEGOLDÁSOK 1. feladat a) Szekvencia alatt logikailag összetartozó utasítások, programrészek összességét értjük. b) A szelekció valamilyen feltétel szerinti, ismételt szekvencia végrehajtását jelenti a programban. c) Az iteráció valamilyen feltétel szerinti elágazást jelent a programban. d) Az iterációt ciklusnak is szokás nevezni. 2. feladat a) negyedik b) objektumorientált c) gépi kód d) emberi nyelv 3. feladat Eljárások részekre bontása. Programok együttműködésének biztosítása. Egyes programok sorrendjének meghatározása. Programok megírása. Tesztelés. Kezelési utasítás készítése. Programdokumentáció készítése. 4. feladat Definíció: Az algoritmus a műveletek tartalmát és sorrendjét tartalmazó egyértelmű utasításrendszer, amely a megfelelő kiinduló adatokból a kívánt eredményre vezet. Az algoritmus tulajdonságai: véges, teljes, egyértelmű
33
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA 5. feladat
17. ábra. Folyamatábra minimum és maximum meghatározására
6. feladat Változó i, j, k, a, n: Egész T, PS, PA: Tömb[1..n] Egész 34
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA Algoritmus i:=0, n:=0 Be: a Ha a<>0 i:=i+1, n:=i, T[i]:=a Be: a Elágazás vége Ha n>0 akkor i:=1, j:=0, k:=0 Ismételd i=1-től n-ig Ha (T[i] mod 2)=0 akkor j:=j+1, PS[j]:=T[i] különben k:=k+1, PA[k]:=T[i] Elágazás vége Ismétlés vége különben Ki: „Nem olvastunk be egyetlen egy értéket sem!” Elágazás vége Algoritmus vége
35
PROGRAMOZÁS - SZOFTVEREK TESZTELÉSE, DOKUMENTÁLÁSA
IRODALOMJEGYZÉK FELHASZNÁLT IRODALOM Dr. Kondorosi Károly - Dr. László Zoltán - Dr. Szirmay-Kalos László: Objektumorientált szoftverfejlesztés. ComputerBooks, 1997. Benkő Tiborné - Benkő László - Tóth Bertalan - Varga Balász: Programozzunk Turbo Pascal nyelven!, ComputerBooks, 1995. Benkő Tiborné - Poppe András - Benkő László: Bevezetés a Borland C++ programozásába. ComputerBooks, 1991. Lénárt György: Szervezési ismeretek. Nyitott Szakképzésért Közalapítvány, 1999. Wagner György: A programozás alapjai, algoritmusok (modulfüzet). Észak-magyarországi Regionális Képző Központ, 2007.
AJÁNLOTT IRODALOM Csőke Lajos - Garamszegi Gábor: A számítógép-programozás logikai alapjai. Nemzeti Tankönyvkiadó, 1997.
36
A(z) 1155-06 modul 020 számú szakmai tankönyvi tartalomeleme felhasználható az alábbi szakképesítésekhez: A szakképesítés OKJ azonosító száma: 54-481-01-1000-00-00 54-481-04-0010-54-01 54-481-04-0010-54-02 54-481-04-0010-54-03 54-481-04-0010-54-04 54-481-04-0010-54-05 54-481-04-0010-54-06 54-481-04-0010-54-07
A szakképesítés megnevezése CAD-CAM informatikus Gazdasági informatikus Infostruktúra menedzser Ipari informatikai technikus Műszaki informatikus Távközlési informatikus Telekommunikációs informatikus Térinformatikus
A szakmai tankönyvi tartalomelem feldolgozásához ajánlott óraszám: 15 óra
A kiadvány az Új Magyarország Fejlesztési Terv TÁMOP 2.2.1 08/1-2008-0002 „A képzés minőségének és tartalmának fejlesztése” keretében készült. A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszírozásával valósul meg. Kiadja a Nemzeti Szakképzési és Felnőttképzési Intézet 1085 Budapest, Baross u. 52. Telefon: (1) 210-1065, Fax: (1) 210-1063 Felelős kiadó: Nagy László főigazgató