Eötvös Loránd Tudományegyetem Informatikai Kar Szoftvertechnológia 8. gyakorlat 2013.11.04. Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto A szoftver életciklus Minden szoftver rendelkezik életciklussal, amely meghatározza létét a feladat kitűzésétől a program használatának befejeztéig Az életciklus a következő fázisokra tagolható: 1. projektdefiníció (project definition) 2. elemzés (analysis) 3. tervezés (software architecture) 4. implementáció (implementation) 5. tesztelés (testing) 6. kihelyezés (deployment, release) 7. tréning és támogatás (training and support) 8. karbantartás (maintenance) ELTE IK, Szoftvertechnológia 8:2 A tervezési folyamat A tervezés a készülő szoftver absztrakt megvalósítása, azaz: a rendszer szerkezetének meghatározása, a programegységek, részegységek feltérképezése a programrészek pontos ábrázolása, funkcióinak meghatározása, ezek közötti reláció, kommunikáció megvalósítása (adatmodellek, áramlások feltérképezése) a feladatmegoldás folyamatának meghatározása, a benne részt vevő programegységekkel, azok állapotváltozásaival, illetve a kiváltó események meghatározása A tervezés során főként az UML csomag, osztály, állapot és szekvencia diagramokat használjuk fel ELTE IK, Szoftvertechnológia 8:3 A tervezési folyamat A program szerkezetének meghatározása: 1. a feladat elemezése, igények és követelmények feltérképezése, felhasználói esetek megállapítása 2. tárgykörök azonosítása, objektumok, majd osztályok hozzárendelése 3. interfészek, kapcsolódási pontok, adatkezelés megtervezése 4. a belső reprezentáció, működési elvek (algoritmusok) feltérképezése 5. végrehajtási folyamat, állapotváltozások meghatározása 6. implementáció specifikus jellemzők meghatározása ELTE IK, Szoftvertechnológia 8:4 Rendszerterv A tervezés eredménye a szoftver rendszerterve (software design description, SDD), amely tartalmazza: a program statikus szerkezetét, azaz a programegységek feladatát, részletes leírását és a köztük lévő relációkat a program dinamikus szerkezetét, azaz a program eseményeinek kiváltódását és hatásait, a programegységek állapotainak változását, az üzenetküldések megvalósítását a tárolt, kezelt, és eredményül adott adatok formáját, leírását a programok belső és külső interfészeinek leírását ajánlásokat az implementáció számára (stratégia, függőségek, programozási nyelv, tesztelési módszerek) Rendszerterv A rendszerterv meghatározó jellemzői: kohézió: egy programegységen belül a komponensek összetartozása, akkor jó, ha erős az összetartó erő összekapcsolás: a programegységek egymáshoz való kapcsolódása és függése, akkor jó, ha gyenge a függés módosíthatóság: mennyiben módosítható a teljes program az egységek, vagy részegységek cseréjével fejleszthetőség: új komponensekkel való bővíthetőség lehetősége, mennyire szabványosak a csatolási felületek bonyolultság: a terv áttekinthetősége és megérthetőségének a mértéke ELTE IK, Szoftvertechnológia 8:5 ELTE IK, Szoftvertechnológia 8:6 1
1. esettanulmány: a feladat 1. esettanulmány: Készítsünk programot, amely Marika néni kávézójának eladási nyilvántartását végigköveti. a kávézóban 3 féle étel (hamburger, ufo, palacsinta 10%-os áfával), illetve 3 féle ital (tea, narancslé, kóla 25%-os áfával) közül lehet választani az ételek ezen belül különfélék lehetnek, amelyre egyenként lehet árat szabni, és elnevezni, az italok árai rögzítettek minden rendelés több ételből és több italból áll, és sorszámmal rendelkezik, esetlegesen törzsvásárlói számmal, amelyet hagyhatunk üresen is lehessen lekérdezni egy adott rendelésre, egy adott törzsvásárlóra, illetve összesítve a bruttó, nettó összeget ELTE IK, Szoftvertechnológia 8:7 1. esettanulmány: felhasználói esetek Felhasználói esetek: Új rendelés felvétele: megadható a törzsvásárlói szám ital felvétele: elég kiválasztani a megadott italt étel felvétele: az étel típusát ki kell választani, majd meg kell adni pontos nevét, illetve bruttó árát Rendelések lekérdezése: adott törzsvásárlóhoz: a törzsvásárlói szám megadásával csak a lényegi adatok lekérdezése összes: valamennyi rendelésről a statisztikák lekérdezése egy rendelés: a rendelés azonosító (sorszám) megadásával valamennyi adat egy rendelésről ELTE IK, Szoftvertechnológia 8:8 1. esettanulmány: felhasználói esetek A program felépítése (1. fázis): a feladatban fellelhető tárgykörök a menü, a rendelések listája, a rendelés, valamint a rendelés elemei (italok, ételek) rendelés elemei (Item): hasonlóan viselkednek, ám némileg eltérően ezért megvalósításban öröklődést használunk, specializáljuk a 3 ételt, illetve italt rendelés (Order): tartalmazza az elemeket (mivel a rendelések száma változhat, ezért láncolt listát használ) menü (Menu): tartalmazza a rendeléseket (láncolt listában) ELTE IK, Szoftvertechnológia 8:9 ELTE IK, Szoftvertechnológia 8:10 A program felépítése (2. fázis): láncolt lista (List): külön megvalósítást igényel, sablonos típusként kétszeresen láncolt, fejelemes, aciklikus reprezentáció lehetőséget ad a beszúrásra (elején, végén, közben), törlésre, kiürítésre, és méret lekérdezésre a listaelem (ListItem) tárolja az adatot és a két mutatót a hibát kivétellel jelezzük, egy felsorolási típussal (Exceptions) a lista bejárható, a bejáró (Iterator) a szabványos műveleteket tárolja ELTE IK, Szoftvertechnológia 8:11 ELTE IK, Szoftvertechnológia 8:12 2
A program felépítése (2. fázis): rendelési elemek (Item): közös tulajdonságaik a típusnév, a bruttó és nettó ár az ételek esetén további adatok a konkrét név, illetve ár rendelések (Order): tulajdonságai az azonosító (ez automatikus), a törzsvásárlói szám lehetőséget ad új elem felvételére, nettó/bruttó érték lekérdezésére menü (Menu): biztosítja a mentést/betöltést, valamint a menüfunkciókat ELTE IK, Szoftvertechnológia 8:13 A program felépítése (3. fázis): a cím szerinti hivatkozásokat mutatókon keresztül kezeljük a listaelemet és a lista kivételeit beágyazott osztályként hozzuk létre, a listaelem egyszerűsége miatt lehet rekord (struct) a lista megfelelő használatához szükséges destruktor, másoló konstruktor, értékadás művelet, kiíró operátor, indexelő operátor a rendelési elem ősosztályban megvalósítunk egy virtuális destruktort ELTE IK, Szoftvertechnológia 8:14 ELTE IK, Szoftvertechnológia 8:15 ELTE IK, Szoftvertechnológia 8:16 1. esettanulmány: adatkezelés A program adatkezelésének megvalósításához egyetlen szöveges fájlra lesz szükségünk legyen ez kavezo.dat, és a programmal azonos könyvtárban helyezkedik el a fájl szerkezete a következőképpen épül fel: <rendelés azonosító>;<italok/ételek száma>; <törzsv. szám> <típus: h/u/p/t/n/k>;<étel neve>;<étel ára> <típus: h/u/p/t/n/k>;<étel neve>;<étel ára> <rendelés azonosító>;<italok/ételek száma>;<törzsv. szám> ELTE IK, Szoftvertechnológia 8:17 ELTE IK, Szoftvertechnológia 8:18 3
1. esettanulmány: dinamikus tervezés A program működése: a lista végrehajt tevékenységet, ugyanakkor állapotai lényegteleneket a program futása szempontjából a menü hajtja végre a tényleges tevékenységeket a különböző metódusok (menüpontok) futtatásával, mivel a metódusok futtatása jellemzi a program különböző állapotait, így az állapotokat a tevékenységekhez kötjük a menüfuttatás mellett az adatok betöltése, valamint kimentése is szerepet játszik a működésben, ezért külön részletezzük a teljes program állapotait, valamint a menüfuttatás állapotait 1. esettanulmány: dinamikus tervezés ELTE IK, Szoftvertechnológia 8:19 ELTE IK, Szoftvertechnológia 8:20 1. esettanulmány: dinamikus tervezés 1. esettanulmány: dinamikus tervezés ELTE IK, Szoftvertechnológia 8:21 ELTE IK, Szoftvertechnológia 8:22 1. esettanulmány: dinamikus tervezés ELTE IK, Szoftvertechnológia 8:23 2. esettanulmány: a feladat 2. esettanulmány: A feladat egy adatbázis alapú, grafikus felületű alkalmazás megvalósítása egy apartmanokkal foglalkozó utazási ügynökség számára, amelyben a felhasználóknak lehetősége van apartmanok foglalására. az adatbázisban városokra csoportosítva találunk épületeket, és épületen belül apartmanokat a programba a felhasználóknak be kell előbb jelentkeznie, így kapnak lehetőséget az adatok megtekintésére és szerkesztésére a felhasználó lehetőséget kap az egyes adatok megtekintésére és szerkesztésére, valamint apartmanok foglalására ELTE IK, Szoftvertechnológia 8:24 4
2. esettanulmány: felhasználói esetek ELTE IK, Szoftvertechnológia 8:25 A program felépítése (1. fázis): a program szerkezetét a Qt modell/nézet architektúrának megfelelően építjük fel az adatbázis kezelésére táblamodell osztályokat alkalmazunk, amelyek tartalmát megfelelő táblamegjelenítőkkel és egyéb vezérlőkkel jelenítjük meg a beépített architektúrát több ponton kiegészítjük, ahol egyedi viselkedésre/megjelenésre van szükségünk, továbbá megvalósítjuk a megjelenítő ablakokat bejelentkezést diaglógusablakban végezzük (LoginDialog) ELTE IK, Szoftvertechnológia 8:26 ELTE IK, Szoftvertechnológia 8:27 A program felépítése (2. fázis): főablak (MainWindow): egy MDI megjelenítőt (QMdiArea) tartalmaz, valamint egy menüsort legyártott akciókkal példányosítja a megfelelő táblamodelleket (setupmodels), illetve az épületek esetén egy egyedi megjelenítőt (BuildingTableDelegate) az akciók végrehajtása a megfelelő beágyazott ablak megnyitását kezdeményezi minden ablak ekkor kapja a táblamodell mutatókat, amelyeket a szerkesztésre felhasznál, így a táblákat nem töltjük be többszörösen a memóriába ELTE IK, Szoftvertechnológia 8:28 A program felépítése (2. fázis): táblamodellek: az AppartmentTableModel specialitása, hogy az apartman állapotát kijelölő mezőn keresztül tudja kezelni. a BuildingTableModel új oszlopokat definiál az állapot, apartman szám, valamint minimum/maximum árak kezelésére, továbbá adatellenőrzéseket végez. a RentTableModel letiltja a nézetek számára a szerkesztést, valamint a fizetési állapotot kijelölést formájában adja vissza ELTE IK, Szoftvertechnológia 8:29 ELTE IK, Szoftvertechnológia 8:30 5
2. esettanulmány: adatkezelés Adatkezelést adatbázis biztosítja a következő táblákkal: városok (city): azonosító, városnév; épületek (building): azonosító, név, város azonosító, utca, tengerpart távolság, tengerpart-típus (számként), jellemzők (binárisan összeillesztve), megjegyzés; apartmanok (appartment): azonosító, épület azonosító, szám, ágyak száma, pótágyak száma, felújítás alatt van-e; ügyfelek (customer): azonosító, név; foglalások (rent): azonosító, ügyfél azonosító, apartman azonosító, kezdődátum, befejező dátum, fizetett-e az ügyfél, összeg; ELTE IK, Szoftvertechnológia 8:31 ELTE IK, Szoftvertechnológia 8:32 2. esettanulmány: adatkezelés 2. esettanulmány: dinamikus tervezés A program működése: a program indításkor ellenőrzi az adatbázis-kapcsolatot, amennyiben az nem megfelelő, azonnal terminál a program elsőként a bejelentkező ablakot nyitja meg, amelyben a felhasználó megadhatja az azonosítót, illetve jelszót (ezek ellenőrzésre kerülnek az adatbázis alapján) amennyiben az azonosítás sikeres, megnyílik a főablak, amelyben elérhetővé válnak a menüpontok minden ablak megnyitásakor az alkalmazás betölti az adatokat az adatbázisból, ablak bezárásakor (vagy mentés gombra) pedig elmenti azokat (amennyiben sikerült) ELTE IK, Szoftvertechnológia 8:33 ELTE IK, Szoftvertechnológia 8:34 2. esettanulmány: dinamikus tervezés 2. esettanulmány: dinamikus tervezés ELTE IK, Szoftvertechnológia 8:35 ELTE IK, Szoftvertechnológia 8:36 6
2. esettanulmány: dinamikus tervezés 2. esettanulmány: dinamikus tervezés ELTE IK, Szoftvertechnológia 8:37 ELTE IK, Szoftvertechnológia 8:38 3. esettanulmány: a feladat 3. esettanulmány: A feladat egy olyan programrendszer (ETRImporter) megvalósítása, amellyel lehetőség nyílik különböző adatok betöltésére az ETR központi adatbázisába. a program felhasználói megadott formátumokban importálhatnak, illetve szerkeszthetnek adatokat a programban, melyet végül elküldhetnek egy központi szervernek, amely betölti az adatokat az adatbázisba az adatok táblázatos formában kerülnek betöltésre, azok utólagos szerkesztését is biztosítanunk kell a programban a táblák formátumát központilag szabályozzák, de a későbbiekben tetszőleges módosítás alá kerülhetnek, illetve új adatformátumok kerülhetnek a rendszerbe ELTE IK, Szoftvertechnológia 8:39 3. esettanulmány: felhasználói esetek ELTE IK, Szoftvertechnológia 8:40 A rendszert az alábbiaknak megfelelően építjük fel: a kliens (ImporterClient) egy grafikus felületű alkalmazás, amely biztosítja az adatok betöltését, kezelését, valamint hálózaton történő továbbítását a szerver oldali szolgáltatás (ImporterService) állandó jelleggel fut a háttérben a szerveren, a szolgáltatás feladata lesz a kliensek kéréseinek kiszolgálása, a kommunikáció, az adatok kezelése és bevitele az adatbázisban, illetve az eseménynaplózás a közvetítő program (ImporterAdmin) feladata korlátozódik az eseménynapló, valamint a csatlakoztatott kliensek megtekintésére, esetleges üzenetküldésre Célszerű a tábla típusainak kezelését külön könyvtárba kiemelni (TypeManagement), hiszen azt már három további komponens is használja Így a rendszer már összesen 4 komponensből áll ELTE IK, Szoftvertechnológia 8:41 ELTE IK, Szoftvertechnológia 8:42 7
A szerver gépen így megjelenik a közvetítő mellett a szolgáltatás, illetve ott és a kliens gépen is megjelenik a típuskezelés A kliens program funkcióit három csomag valósítja meg: felhasználói felület (GUISystem) adatimportáló (ImportSystem) adatkezelő (DataSystem) ELTE IK, Szoftvertechnológia 8:43 ELTE IK, Szoftvertechnológia 8:44 Az adatimportáló csomag a különböző formátumú fájlok betöltésére szolgál, a későbbiekben tetszőlegesen bővíthetőm megfelelően feldogozza a fájlt, és eltárolja a nyers adatokat ennek megfelelően szükség van egy általános osztályra, amely beolvassa (Open) és eltárolja (Data) az adatokat ebből származtatunk speciális feldolgozó osztályokat, amelyek a beolvasást felüldefiniálják ELTE IK, Szoftvertechnológia 8:45 ELTE IK, Szoftvertechnológia 8:46 Az adatkezelő csomag az adatok táblázatos kezeléséért, valamint a kommunikáció lebonyolításáért felel a kommunikációs osztály (Connection) feladata a kapcsolat létrehozása (Connect) TCP kapcsolattal SSL titkosítást alkalmazva, tetszőleges adat feltöltése (SendData), letöltése (ReadData) az összes adat felügyeletét egy adatkezelő osztályra bízzuk (DataHandler), amely kezeli a táblákat (TableObject) a tábla, és annak sorainak, oszlopainak típusleírását külön osztályokra bízzuk (TableType, RowType, Column) a helyes formátum kialakítását külön osztályra bízzuk (DataFormat), amely ezt statikus műveletekkel végzi ELTE IK, Szoftvertechnológia 8:47 ELTE IK, Szoftvertechnológia 8:48 8
A felhasználói felület csomagja a felhasználói interakció kezelésére szolgál a felhasználói felület több ablakból, amelyeknek megfeleltetünk egy-egy osztályt, és minden benne szereplő vezérlőnek egy-egy eseménykezelő alprogramot tartalmazza az adatimportáló, illetve adatkezelő alrendszer hivatkozásait attribútumként a következő feladatra kellenek ablakok: indítóablak (StartForm), főablak (MainForm), beállítások (SettingsForm), új tábla létrehozása (NewTableForm), táblatípusok megjelenítése (TypesForm) ELTE IK, Szoftvertechnológia 8:49 ELTE IK, Szoftvertechnológia 8:50 3. esettanulmány: adatkezelés A rendszer működése során 4 ki-, és bemeneti csatornát használ: adatok lokális mentése a kliens programban: használjunk szérializációt, azaz az adattáblák adatait közvetlenül az objektumorientált felépítésnek megfelelően írjuk ki kommunikáció a kliens és a közvetítő között: használjunk szabványos TCP kapcsolatot, amelyen ASCII formátumú adatsorozatok tartalmazzák az adatokat az adatformátumokat leíró fájl, amely XML formátumban tárolja a különböző tábladefiníciókat, és sorszerkezeteiket adatok mentése az adatbázisba: definiáljuk a megfelelő átmeneti táblákat, valamint a feldolgozó tárolt eljárásokat 3. esettanulmány: adatkezelés Hálózati kommunikáció: a kapcsolat során a kliens, illetve a közvetítő üzeneteket küldenek egymásnak a hálózaton keresztül, TCP kapcsolat segítségével, a kliens elküldi üzeneteit, majd adott ideig vár a válaszra a titkosítás érdekében az azonosító adatokra alkalmazzunk MD5 kódolást, illetve a csatorna kommunikációjára használjunk SSL protokollt a közvetítő állandóan hallgatózik a hálózaton, és várja az új üzenet megérkeztét, a beérkező üzenetek egymás után kerülnek feldolgozásra ELTE IK, Szoftvertechnológia 8:51 ELTE IK, Szoftvertechnológia 8:52 3. esettanulmány: adatkezelés adattovábbítás: a kliens üzenetek formájában küldi el a teljes táblát, benne az azonosító számával és a lekérdezés típusával amennyiben a kliens nem kap választ adott időn belül egy módosítás eltárolására, akkor a küldés sikertelen üzenetszintaxis: egy üzenetkóddal indul, amely megadja az üzenet típusát, a tartalmi elemeket ;-vel választjuk el egymástól ELTE IK, Szoftvertechnológia 8:53 3. esettanulmány: adatkezelés Adatbázis kommunikáció: a közvetítő csak a fenntartott táblákat használja az ETR adatbázisában, azok feldolgozását tárolt eljárások végzik a tárolt eljárások hiba, összeütközés, ellentmondás, vagy hiányzó adat esetén szemantikus hibát jeleznek (soronként), amelyet a közvetítő visszaküld a kliensnek minden adatformátum egy, vagy több saját táblával rendelkezik az adatkezeléshez ETR_IMPORTER_TEMP_<táblatípus név>_p<sorszám> elnevezés konvecióval ezen felül vannak állandó táblák, amelyek a rendszer működéséhez szükségesek ELTE IK, Szoftvertechnológia 8:54 9
3. esettanulmány: adatkezelés ELTE IK, Szoftvertechnológia 8:55 3. esettanulmány: dinamikus tervezés A kliens program indulási folyamata: kapcsolat létrehozása a közvetítővel, felhasználó bejelentkeztetése táblatípusok frissítése, amennyiben szükséges adatkezelő objektum inicializálása a kapcsolattal korábbról megmaradt táblák ellenőrzése és betöltése továbblépés engedélyezése, amennyiben a folyamat sikerrel járt, hibák esetén csak kiléptetés engedélyezése Sikertelen kapcsolódás, vagy adatforgalom esetén a kapcsolatépítés, és a táblatípus frissítés minden feltöltés kezdeményezésre megismétlődik ELTE IK, Szoftvertechnológia 8:56 3. esettanulmány: dinamikus tervezés ELTE IK, Szoftvertechnológia 8:57 10