Verkehrsmeldungen am UML 27 – Led Zeppelin Konzulens:
Budai Péter
Csapattagok Bodó Péter Pál Tamás Szárnyas Gábor
MKA2DY UVKSGJ U944EQ
[email protected] [email protected] [email protected]
2010-05-13
Led Zeppelin
Tartalom Tartalom.............................................................................................................................................................. 2 1. Követelmény, projekt, funkcionalitás ............................................................................................ 6 1.1 Követelmény definíció ................................................................................................................. 6 1.1.1 A program célja, alapvető feladatai ................................................................................ 6 1.1.2 A felhasználói felület ............................................................................................................ 6 1.1.3 A program futtatásához szükséges követelmények................................................. 6 1.1.4 A szoftver fejlesztésével kapcsolatos alapkövetelmények, elvek, célok .......... 6 1.2 Projekt terv ....................................................................................................................................... 7 1.2.1 A felhasznált fejlesztőeszközök ....................................................................................... 7 1.2.2 A fejlesztőcsapat tagjai, azok feladatkörei ................................................................... 7 1.2.3 Kommunikációs modell ...................................................................................................... 7 1.2.4 Fejlesztési mérföldkövek, ütemterv............................................................................... 7 1.2.5 Határidők .................................................................................................................................. 8 1.2.6 Átadás ........................................................................................................................................ 8 1.2.7 Szükséges dokumentációk ................................................................................................. 8 1.3 Feladatleírás..................................................................................................................................... 9 1.4 Szótár ............................................................................................................................................... 10 1.5 Essential use-case-ek ................................................................................................................. 11 1.5.1 Use-case diagram ............................................................................................................... 11 1.5.2 Use-case leírások ................................................................................................................ 11 1.6 Napló ................................................................................................................................................ 11 2. Analízis modell kidolgozása ............................................................................................................ 12 2.1 Napló ................................................................................................................................................ 12 3. Analízis modell kidolgozása ............................................................................................................ 13 3.1 Objektum katalógus ................................................................................................................... 13 3.1.1 City ........................................................................................................................................... 13 3.1.2 Timer ....................................................................................................................................... 13 3.1.3 Field ......................................................................................................................................... 14 3.1.4 ITickable <
> ................................................................................................... 14 3.1.5 Vehicle .................................................................................................................................... 15 3.1.6 Police ....................................................................................................................................... 15 3.1.7 Civilian .................................................................................................................................... 16 3.1.8 Thief ......................................................................................................................................... 16 3.1.9 Road ......................................................................................................................................... 17 3.1.10 HideOut .............................................................................................................................. 18 3.1.11 BorderIn ............................................................................................................................ 19 3.1.12 BorderOut ......................................................................................................................... 19 3.1.13 Junction .............................................................................................................................. 19 3.1.14 RoadSign ............................................................................................................................ 20 3.1.15 StopSign ............................................................................................................................. 21 3.1.16 Semaphore ........................................................................................................................ 21 3.1.17 NoRoadSign ...................................................................................................................... 22 3.2 Osztályok leírása ......................................................................................................................... 23 3.3 Statikus struktúra diagramok ................................................................................................ 24 3.4 Szekvencia diagramok............................................................................................................... 25 3.5 State-chartok ................................................................................................................................ 40 3.6 Napló ................................................................................................................................................ 40 2010-05-12
2
Led Zeppelin 4.
Szkeleton tervezése............................................................................................................................ 42 4.1 A szkeleton modell valóságos use-case-ei ......................................................................... 42 4.1.1 Use-case diagramok .......................................................................................................... 42 4.1.2 Use-case leírások ................................................................................................................ 44 4.2 Architektúra .................................................................................................................................. 47 4.3 A szkeleton kezelői felületének terve, dialógusok ......................................................... 48 4.4 Szekvencia diagramok a belső működésre ....................................................................... 51 4.4.1 Civil határon ki / Rendőr határon ki és be ............................................................... 51 4.4.2 Civil kereszteződésből útra ............................................................................................ 52 4.4.3 Civil útról útra...................................................................................................................... 53 4.4.4 Civil útról lámpás kereszteződésbe............................................................................. 54 4.4.5 Civil stoptáblás kereszteződésbe ................................................................................. 55 4.4.6 Rendőr kereszteződésből útra lép ............................................................................... 56 4.4.7 Rendőr útról keresztezősbe lép .................................................................................... 57 4.4.8 Rendőr útról útra lép ........................................................................................................ 58 4.4.9 Tolvaj kereszteződésből útra lép ................................................................................. 59 4.4.10 Tolvaj határon ki ............................................................................................................ 60 4.4.11 Tolvaj útról rejtekhelyre ............................................................................................. 61 4.4.12 Tolvaj útról kereszteződésbe lép ............................................................................. 62 4.4.13 Tolvaj útról útra.............................................................................................................. 63 4.4.14 Játék indítása ................................................................................................................... 64 4.4.15 Idő léptetése..................................................................................................................... 65 4.5 Napló ................................................................................................................................................ 66 5. Szkeleton beadása............................................................................................................................... 67 5.1 Fordítási és futtatási útmutató .............................................................................................. 67 5.1.1 Fájllista ................................................................................................................................... 67 5.1.2 Fordítás .................................................................................................................................. 68 5.1.3 Futtatás................................................................................................................................... 68 5.1.4 Dokumentáció generálása............................................................................................... 68 5.1.5 Értékelés ................................................................................................................................ 69 5.2 Napló ................................................................................................................................................ 69 5.3 Statisztika ....................................................................................................................................... 69 6. Prototípus koncepciója ..................................................................................................................... 71 6.1 Prototípus interface-definíciója ............................................................................................ 71 6.1.1 Az interfész általános leírása ......................................................................................... 71 6.1.2 Paraméterek ......................................................................................................................... 71 6.1.3 Bemeneti nyelv.................................................................................................................... 71 6.1.4 Pályaformátum .................................................................................................................... 72 6.1.5 Kimeneti nyelv..................................................................................................................... 73 6.2 Összes részletes use-case......................................................................................................... 74 6.2.1 Játékos use-case-ei ............................................................................................................. 74 6.2.2 Óra use-case-ei .................................................................................................................... 75 6.3 Tesztelési terv .............................................................................................................................. 77 6.3.1 Tesztelés menete ................................................................................................................ 77 6.3.2 Teszt-esetek.......................................................................................................................... 78 6.4 Napló ................................................................................................................................................ 80 7. Részletes tervek................................................................................................................................... 81 7.1 Osztályok és metódusok tervei .............................................................................................. 81 7.1.1 City ........................................................................................................................................... 81 2010-05-12
3
Led Zeppelin 7.1.2 Timer ....................................................................................................................................... 82 7.1.3 ITickable <> ................................................................................................... 82 7.1.4 Vehicle .................................................................................................................................... 83 7.1.5 Bunny ...................................................................................................................................... 84 7.1.6 Police ....................................................................................................................................... 86 7.1.7 Civilian .................................................................................................................................... 87 7.1.8 Thief ......................................................................................................................................... 88 7.1.9 Road ......................................................................................................................................... 90 7.1.10 HideOut .............................................................................................................................. 93 7.1.11 BorderIn ............................................................................................................................ 93 7.1.12 BorderOut ......................................................................................................................... 93 7.1.13 Junction .............................................................................................................................. 94 7.1.14 RoadSign ............................................................................................................................ 95 7.1.15 StopSign ............................................................................................................................. 96 7.1.16 Semaphore ........................................................................................................................ 97 7.1.17 NoRoadSign ...................................................................................................................... 99 7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén .....................................................100 7.2.1 Civilian (Police) mozgása Roadról Roadra .............................................................100 7.2.2 Város elhagyása, érkezés ...............................................................................................100 7.2.3 Ütközés elkerülés .............................................................................................................101 7.2.4 Civilian útról kereszteződésbe ....................................................................................102 7.2.5 Tolvaj mozgása ..................................................................................................................103 7.2.6 Elkapás .................................................................................................................................105 7.2.7 Ütközés .................................................................................................................................105 7.2.8 Győzelem .............................................................................................................................106 7.2.9 Police Roadról Junctionbe .............................................................................................107 7.2.10 A tolvaj felveszi a nyuszit és a rendőr nekiütközik .........................................108 7.2.11 A tolvaj felveszi a nyuszit és a rendőrnek ütközik ..........................................109 7.3 A tesztelést támogató programok tervei .........................................................................110 7.4 Változtatások a követelmények módosulása miatt .....................................................110 7.5 Napló ..............................................................................................................................................115 8. Prototípus beadása...........................................................................................................................116 8.1 Fordítási és futtatási útmutató ............................................................................................116 8.1.1 Fájllista .................................................................................................................................116 8.1.2 Fordítás ................................................................................................................................118 8.1.3 Futtatás.................................................................................................................................118 8.2 Tesztek jegyzőkönyvei ............................................................................................................118 8.2.1 Civilian (Police) mozgása Roadról Roadra .............................................................118 8.2.2 Város elhagyása, érkezés ...............................................................................................119 8.2.3 Ütközés elkerülés .............................................................................................................119 8.2.4 Civilian útról kereszteződésbe ....................................................................................120 8.2.5 Tolvaj mozgása ..................................................................................................................121 8.2.6 Elkapás .................................................................................................................................122 8.2.7 Ütközés .................................................................................................................................123 8.2.8 Győzelem .............................................................................................................................123 8.2.9 Police Roadról Junctionbe .............................................................................................124 8.2.10 A tolvaj felveszi a nyuszit és a rendőr nekiütközik .........................................125 8.2.11 A tolvaj felveszi a nyuszit és a rendőrnek ütközik ..........................................125 8.3 Értékelés .......................................................................................................................................126 2010-05-12
4
Led Zeppelin 8.4 Napló ..............................................................................................................................................126 8.5 Statisztika .....................................................................................................................................126 9. Grafikus felület specifikációja ......................................................................................................127 9.1 A grafikus interfész ..................................................................................................................127 9.2 A grafikus rendszer architektúrája ....................................................................................127 9.2.1 A felület működési elve ..................................................................................................127 9.2.2 A felület osztály-struktúrája ........................................................................................128 9.3 A grafikus objektumok felsorolása .....................................................................................128 9.3.1 IView <> ........................................................................................................128 9.3.2 CView ....................................................................................................................................129 9.3.3 BorderInView ....................................................................................................................129 9.3.4 JunctionView ......................................................................................................................130 9.3.5 RoadView.............................................................................................................................130 9.3.6 HideOutView ......................................................................................................................130 9.3.7 BorderOutView .................................................................................................................131 9.3.8 StopSignView .....................................................................................................................131 9.3.9 SemaphoreView ................................................................................................................132 9.3.10 NoRoadSignView ..........................................................................................................132 9.3.11 BunnyView .....................................................................................................................133 9.3.12 PoliceView ......................................................................................................................133 9.3.13 CivilianView ...................................................................................................................133 9.3.14 ThiefView ........................................................................................................................134 9.3.15 Road ..................................................................................................................................134 9.4 Kapcsolat az alkalmazói rendszerrel .................................................................................135 9.4.1 Napló .....................................................................................................................................138 10. Összefoglalás ...................................................................................................................................140 10.1 Projekt összegzés ..................................................................................................................140 10.1.1 Mit tanultunk .................................................................................................................140 10.1.2 Idő és pontszám ............................................................................................................140 10.1.3 Dokumentálás................................................................................................................141 10.2 A projektre fordított munkaidő.......................................................................................141 10.3 A feltöltött programok forrássorainak száma fázisonként ..................................142 10.4 Változtatási javaslatok ........................................................................................................142 10.5 Ajánlott feladat ......................................................................................................................143 10.6 Napló..........................................................................................................................................144
2010-05-12
5
Led Zeppelin
1. Követelmény, projekt, funkcionalitás 1.1 Követelmény definíció 1.1.1 A program célja, alapvető feladatai A tervezendő program egy játék, amelyben egy forgalmas várost modellező pályán kell a felhasználónak eljuttatnia a bankrabló autóját a banktól a rejtekhelyig, kikerülve a forgalom véletlenszerűen mozgó autóit és a rendőrautókat. A fejlesztőcsapat célja egy olyan program létrehozása, amely eleget tesz a specifikációban leírtaknak, és futtatható minden olyan gépen, ami megfelel a meghatározott minimum követelményeknek.
1.1.2 A felhasználói felület A program grafikus felhasználó felülettel (GUI) fog rendelkezni, mely egérrel kezelhető; a bankrabló autója pedig a billentyűzet kurzorgombjaival irányítható.
1.1.3 A program futtatásához szükséges követelmények A programot úgy készítjük el, hogy a HSZK laborban (R.4.K) lévő számítógépeken megfelelő sebességgel fusson. A fejlesztés során ügyelünk arra, hogy a kód lefordítható legyen az 1.6-os verziójú JDK java.exe fordítójával. Ehhez a szükséges minimumkonfigurációnak legalább 64 MB memóriával és 98 MB tárhellyel kell rendelkeznie.1
1.1.4 A szoftver fejlesztésével kapcsolatos alapkövetelmények, elvek, célok Teljesítmény: a program hardverigényét próbáljuk minél alacsonyabban tartani. Ennek főleg PC-nél gyengébb teljesítményű számítógépek (netbook, handheld eszközök) van komoly jelentősége, hiszen a Java fejlesztési platform miatt a kész program más platformokon is futtatható lesz. Modularitás: a külön funkciót ellátó programrészeket külön modulokban helyezzük el, így erősítve az újrafelhasználhatóságot. Felhasználóbarát felület: a program könnyen kezelhető, intuitív grafikus felhasználói felülettel rendelkezzen. Bővíthetőség: az objektumorientált modellt úgy alkotjuk meg, hogy utólag bővíthető legyen, pl. egy új jármű felvétele esetén a régiekben csak az új járművel való interakciót kelljen megvalósítani, más módosítást ne igényeljen. Funkcionalitás, kis hardverigény: mivel a projekt célja nem egy látványos grafikai felület elkészítése, ezért programunkban a modellalkotásra, a letisztult és átlátható kódolásra koncentrálunk. A kis hardverigény biztosítja, hogy a játék szinte minden konfiguráción élvezhető sebességgel fusson.
1
http://www.java.com/en/download/help/6000011000.xml
2010-05-12
6
Led Zeppelin
1.2 Projekt terv 1.2.1 A felhasznált fejlesztőeszközök A fejlesztéshez a csapat az Eclipse IDE for Java Developerst választotta, annak robosztussága és ergonómiája miatt. Az UML diagramok elkészítéséhez a Visual Paradigm UML modellező szoftvert használjuk, amely képes a diagramokból Java kód generálására is. A szöveges állományok szinkronizálása egy Eclipse SVN beépülő modult, a subclipse-et2 használtuk. A dokumentáció Microsoft Word 2007-tel készült, a tantárgy honlapján elérhető sablonok módosításával.
1.2.2 A fejlesztőcsapat tagjai, azok feladatkörei név Bodó Péter Pál Tamás Szárnyas Gábor
Neptun-kód MKA2DY UVKSGJ U944EQ
feladatok dokumentáció, kódolás, tesztelés UML, kódolás, tesztelés csapatvezetés, dokumentáció, kódolás
Mivel csapatunk három főből áll, természetesen nagyobb átfedések vannak a feladatkörökben, mint egy négyfős csapat esetén. A felosztás nem végleges, a feladatok nehézsége és az egyes tagok egyetemi elfoglaltsága miatt időközben változhat.
1.2.3 Kommunikációs modell A csapattagok úgy kerültek kiválasztásra, hogy mindenki a Schönherz Zoltán kollégium lakója legyen, ami hétköznap jelentősen megközelíti a kapcsolattartást. Minden héten megbeszélést tartunk az egyik tanulószobában az adott heti teendők megbeszélése és kiosztása ügyében. Hétvégén és kisebb ügyekben interneten keresztül, Windows Live Messengerrel és e-mailen tartjuk a kapcsolatot. A csapat kis létszáma és a találkozások egyszerűsége miatt nem éreztük szükségét levelezőlista létrehozásának.
1.2.4 Fejlesztési mérföldkövek, ütemterv A fejlesztés mérföldköveit a tárgy honlapjának definíciója alapján készítjük el: Szkeleton A szkeletonnal vizsgálható a feladat modellezésének helyessége. A szkeletonban már valamennyi, a végső rendszerben szereplő objektum szerepel, azonban csak interfészük definiált. Minden metódus az indulás pillanatában a karakteres kimenetre írja a nevét és meghívja azokat a metódusokat, amelyeket a kész szoftverben is használni fog. Feltételes hívás esetén a karakteres bemeneten keresztül felhasználói beavatkozás dönti el, hogy melyik metódus hívódjon meg. A szkeleton segítségével ellenőrizhetők a forgatókönyvek és a szekvencia diagramok. Prototípus A prototípus egy kész, működő program, a grafikus felületet kivéve. Tervezési szempontból késznek tekinthető, az ütemezés és az objektumok kezelése megoldott. Az 2
http://subclipse.tigris.org/
2010-05-12
7
Led Zeppelin objektumok (a megjelenítésre vonatkozó részeket kivéve) metódusai a végleges algoritmusokat tartalmazzák. A működés karakteres kimeneten követhető és fájlba is menthető a tesztelés megkönnyítése érdekében. Grafikus felület (GUI) A grafikus felülettel rendelkező változat a prototípustól csak a felhasználó felületben tér el. Ez a szoftver végleges verziója, mely után csak apróbb javítások lehetnek szükségesek.
1.2.5 Határidők hét
dátum
feladat
1 2 3 4 5 6 7 8 9 10 11 12 13 14
febr.10. febr. 18. febr. 25. márc. 4. márc. 11. márc. 18. márc. 25. ápr. 1. ápr. 8. ápr. 15. ápr. 22. ápr. 29. máj. 6. máj. 13.
14 h - csapatok regisztrációja Követelmény, projekt, funkcionalitás - beadás Analízis modell kidolgozása 1. - beadás Analízis modell kidolgozása 2. - beadás Szkeleton tervezése - beadás Szkeleton - beadás Prototípus koncepciója - beadás Részletes tervek - beadás Prototípus - beadás Grafikus felület specifikációja - beadás Grafikus változat - beadás Összefoglalás - beadás
1.2.6 Átadás A heti aktuális nyomtatott dokumentációt a követelményeknek megfelelően átlátszó műanyag irattartóban, fedőlappal adjuk le. A már elkészült forráskódokat a Hercules feladatbeadó rendszeren keresztül töltjük fel.3
1.2.7 Szükséges dokumentációk 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 3
Követelmény, projekt, funkcionalitás Analízis modell kidolgozása 1. Analízis modell kidolgozása 2. Szkeleton tervezése Szkeleton Prototípus koncepciója Részletes tervek Prototípus Grafikus felület specifikációja
http://kfarkas.iit.bme.hu/hercules/
2010-05-12
8
Led Zeppelin 12. 13. Grafikus változat 14. Összefoglalás
1.3 Feladatleírás A játék Verkehrsmeldungen am Uml városka életét eleveníti meg. A városban van egy bank, ahol a lakosok vagyonának egy részét őrzik. Egy tolvaj szemet vet erre a vagyonra, és ki akarja rabolni a bankot. A bank kirablása után autójába pattan, és a közlekedési szabályokra fittyet hányva a rejtekhelye felé veszi az irányt. A tolvaj dolgát nehezítik a városban járőröző rendőrök. A városi forgalomban az ütközések elkerülése, és a menekülés a rendőr elől ügyességi, és logikai próbatételt jelent a felhasználó számára. A világ egyirányú és egy autó széles utakból áll, amelyeken stoptáblák és szemaforok határozzák meg a közlekedési szabályokat. A járművek mindig betartják ezeket a szabályokat. Stop táblánál a járművek megállnak és megnézik, hogy folytathatják-e tovább útjukat. A szemaforoknak kétféle jelzésük van: piros és zöld. Ezek a jelzések bizonyos időközönként váltják egymást. Ha egy autó piros jelzést kap, megáll, és megvárja, míg a szemafor zöld jelzésre nem vált. Zöld jelzés esetén folytatja tovább az útját. Ha egy autó a másik előtt lassít, akkor a hátsó is lelassít az ütközés elkerülése érdekében. Ha egy járművet nem akadályoz semmi, akkor maximális sebességével halad az utakon. Minden útkereszteződésben vannak útjelzők. A városunk nem más, mint egy kétdimenziós úthálózat. A felhasználó a billentyűzet segítségével irányíthatja a tolvaj autóját a városban. Két mező közt átjárás van, ha nincs ott egy másik jármű. A játékos nem hagyhatja el a várost, amennyiben a határhoz ér, veszít. Ez nem vonatkozik a többi járműre (civilek és rendőrök), ők a megfelelő helyeken elhagyhatják a várost. Ekkor azonnal egy bemenő útra kerülnek, így a járművek száma a városban állandó. A járművek meghatározott közlekedési szabályok alapján közlekednek, amelyeket a rendőr és a játékos nem köteles betartani, ezzel növelve az ütközés valószínűségét. A játék célja az, hogy a felhasználó épségben elirányítsa a tolvaj járművét a banktól a rejtekhelyre. A bank és a rejtekhely a városban jól látható módon meg van jelölve. A tolvaj autója egy helyben áll vagy állandó sebességgel mozog, de nem gyorsabb a rendőrök járműveitől. Az tolvaj járművét a WASD vagy a kurzorgombokkal lehet irányítani a városban. A tolvajjal nem lehet falnak ütközni. A játék akkor tekinthető sikeresnek, ha biztonságban eljutott a tolvaj járműve a rejtekhelyre. A felhasználó dolgát nehezíti, az őt üldöző rendőr és a város forgalma. Ha a rendőr utoléri a tolvaj autóját, vagy ha a tolvaj személyautóba ütközik, akkor elveszíti a játékot. Ekkor a játék újrakezdhető, megnyerésére korlátlan számú próbálkozás áll rendelkezésre. Új játék egy gombbal indítható. A játékot akármikor befejezhetjük. A város térképe téglalap alakú, egyértelműen látszanak a térképen a járművek, a rendőrök valamint az útjelző táblák helyzete. A tolvaj sikeres eljuttatása a rejtekhelyre, a felhasználó ügyességén, gyors helyzetfelismerésén alapszik. A járművek és a rendőrök teljesen a felhasználó mozgásától függetlenül mozognak. A felhasználónak figyelnie kell rá, hogy ne kapja el a rendőr, és kerülnie kell az ütközéseket a többi járművel. A program indításakor a felhasználót a főmenü fogadja. Itt kezdhető új játék, ill. lehetőség van a játék elhagyására is. A megjelenített felület nagy részét a város adja. A felületen még figyelhetjük a játék kezdetétől eltelt időt. A játék valós időben fut, a járművek folyamatosan, véletlenszerűen mozognak a város útjain.
2010-05-12
9
Led Zeppelin
1.4 Szótár felhasználó
Aki kezeli a programot
jármű
Gépkocsik, melyek a városban közlekednek a szabályokat betartva
tolvaj rendőr
Jármű, melyre nem vonatkoznak a közlekedési szabályok, a felhasználó irányítja Jármű, melyre nem vonatkoznak a közlekedési szabályok, és el tudja kapni a tolvajt
város
A játék helyszín, utakból és kereszteződésekből áll
út
A város olyan része, ahol autók haladhatnak
kereszteződés A város olyan része, ahol több út találkozik városhatár
Olyan utak ahol a járművek elhagyhatják a várost
elhagy
Amikor egy jármű a városhatárnál megszűnik létezni
elsőbbség
Kereszteződéseknél meghatározza, hogy milyen sorrendben léphetnek be a járművek
szemafor
Jelzőlámpa, mely piros és zöld jelzésekkel irányítja a forgalmat
stop tábla
Az autókat megállásra kötelezi
bank
Az az épület, amely melletti úton kezdődik a játék
rejtekhely
A tolvaj rejtekhelye, ahova ha eljut megnyeri a játékot
megáll
A jármű sebességét nullára csökkenti, azaz 1 helyben áll az úton
lassít
A sebesség csökkentése
gyorsit
A sebesség növelése
sebesség
Egységnyi idő alatt megtett utak
ütközés
Ha két jármű (beleértve tolvajt és rendőrt is) ugyanarra az útra érkezik
elkap
A rendőr a tolvaj járművébe ütközik
2010-05-12
10
Led Zeppelin
1.5 Essential use-case-ek 1.5.1 Use-case diagram
1.5.2 Use-case leírások Use-case neve Rövid leírás Aktorok Forgatókönyv
Játék indítása A játékos új játékot kezd Játékos Betöltődik a pálya
Autó mozgatása A játékos vezérli az autót Játékos A leütött billentyűknek megfelelően mozog az autó
1.6 Napló Kezdet 2010. 02. 02. 13:00
Időtartam 0,5 óra
2010. 02. 14. 20:00
2 óra
2010. 02. 14. 22:00
1 óra
Szárnyas
2010. 02. 15. 17:15
1,5 óra
2010. 02. 15. 22:00 2010. 02. 15. 21:00
2 óra 2 óra
Bodó Pál Szárnyas Bodó Pál
2010. 02. 17. 21:00
2 óra
Szárnyas
2010. 02. 18. 09:00
-
Szárnyas
2010-05-12
Résztvevők Bodó Pál Szárnyas Bodó Pál Szárnyas
Leírás Csapatjelentkezés leadása, online konzultáció a csapatnévvel kapcsolatban. Értekezlet. Döntések: Bodó készíti a szótárat és a specifikációt. Pál készíti a use case diagramokat. Szárnyas készíti a projekt tervet. Dokumentációhoz sablon készítése, formázási beállítások. Projekt terv elkészítése. Konzultáció (R.4.K)
Specifikáció elkészítése. Use-case diagram és követelmény definíció elkészítése. Elkészült anyagrészek összerendezése, kiegészítések. nyomtatás
11
Led Zeppelin
2. Analízis modell kidolgozása 2.1 Napló Kezdet Időtartam 2010.02.21. 20:00 3 óra
2010.02.24. 10:00 7 óra 2010.02.24. 12:00 7 óra 2010.02.24. 12:00 6 óra
Résztvevők Bodó Pál Szárnyas Bodó Pál Szárnyas Bodó Pál Szárnyas Bodó Pál Szárnyas
2010.02.24. 20:00 1 óra
Szárnyas
2010.02.22. 20:00 3 óra
2010.02.23. 16:00 8 óra
2010-05-12
Leírás Értekezlet. Objektummodell felvázolása papíron, felkészülés a konzultációra Értekezlet. Konzultáción szerzett ismeretek megvitatása. Feladatok szétosztása. Első analízis modell megalkotása
Szekvenciadiagramok megrajzolása Dokumentáció elkészítése Osztálydiagram, state chartok és az időzítési szekvenciadiagram megrajzolása Dokumentáció finomítása, nyomtatás
12
Led Zeppelin
3. Analízis modell kidolgozása 3.1 Objektum katalógus 3.1.1 City A várost megvalósító objektum, tartalmazza a város mezőit, a járműveket és a Timer objektumot. példányszám 1 ősosztályok
nincs
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek Timer
timer
Az időzítő objektum
Vehicle[0..*]
vehicles
A járműveket tartalmazó tömb
Field[0..*]
fields
A mezőket tartalmazó tömb
void
addVehicle(v:V)
Jármű hozzáadása a tömbhöz
void
removeVehicle(v:V)
Jármű törlése a tömbből
void
win()
Játék megnyerése
void
gameOver()
Játék elvesztése
szolgáltatások
változók
nincs
3.1.2 Timer Az időzítőjelet kiadó objektum. példányszám
1
ősosztályok
nincs
perzisztencia
dinamikus
konkurencia
aktív
felelősségek
nincs
komponensek ITickable[0..*]
2010-05-12
tickables
A tickelhető objektumok heterogén kollekciója 13
Led Zeppelin szolgáltatások void void void
változók
tick()
A tickelhető objektumok onTick függvényeinek meghívása addTickable(t:ITickable) Tickelhető objektum hozzáadása a kollekcióhoz removeTickable(t:ITickable) Tickelhető objektum törlése a kollekcióból nincs
3.1.3 Field A város mezőit megvalósító objektumok. példányszám
n
ősosztályok
nincs
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
nincs
szolgáltatások
nincs
változók
nincs
3.1.4 ITickable <> A tickelhető objektumok közös interfésze. példányszám
-
ősosztályok
nincs
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
nincs
szolgáltatások void
változók
2010-05-12
onTick()
A tick hatására végbemenő eseményeket valósítja meg
nincs
14
Led Zeppelin
3.1.5 Vehicle A járműveket megvalósító objektum. példányszám
-
ősosztályok
ITickable <>
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek Road[0..1]
r
Az az útszakasz, amin a jármű van.
szolgáltatások void
onTick()
void
Timer által meghívott időzítő függvény, ami a leszármazottakban felül van definiálva accept(r:Road) Meghívja a Road removeVehicle függvényét, a következő Road setVehicle függvényét, és a Vehicle setRoad függvényét choose(j: Junction, A kapott irányokból választ egyet, majd directions: enum[]) azzal meghívja a Junction osztály megfelelő exit függvényét incoming(v: Vehicle) -
void
setRoad(r:Road)
Beállítja a Vehicle r értékét
void
catch()
-
int
frequency
int
state
A jármű frekvenciája, ennyi tick telik el két lépés között Az előző lépés óta eltelt idő
void
void
változók
3.1.6 Police A rendőrt megvalósító objektum. példányszám
n
ősosztályok
Vehicle, ITickable <>
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
2010-05-12
15
Led Zeppelin komponensek
nincs
szolgáltatások void
onTick()
void
incoming(v:Vehicle)
void
choose(j: Junction, directions: enum[])
void
catch()
változók
Növeli a state változó értékét eggyel, ha egyezik a frekvenciával, akkor nullázza és meghívja a Road objektum forwardPolice függvényét saját magával. Üres függvény A kapott irányok közül választ, majd meghívja a Junction exitPolice függvényét Üres függvény
nincs
3.1.7 Civilian A civil járművet megvalósító objektum. példányszám
n
ősosztályok
Vehicle, ITickable <>
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
nincs
szolgáltatások void
onTick()
void
incoming(v:Vehicle)
void
choose(j: Junction, directions: enum[])
void
catch()
változók
Növeli a state változó értékét eggyel, ha egyezik a frekvenciával, akkor nullázza és meghívja a Road objektum forwardCivilian függvényét saját magával. Üres függvény A kapott irányok közül választ, majd meghívja a Junction exitCivilian függvényét Üres függvény
nincs
3.1.8 Thief A civil járművet megvalósító objektum. példányszám
1
ősosztályok
Vehicle, ITickable <>
2010-05-12
16
Led Zeppelin perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
szolgáltatások void
onTick()
void
incoming(v:Vehicle)
void
choose(directions:enum[])
void
hide()
void
exit()
A tolvaj irányát a játékos választja ki a kereszteződésben, majd azzal meghívja a Junction exitThief függvényét Meghívja a Road removeVehicle függvényét, a HideOut setVehicle függvényét, a Thief setRoad függvényét, és a City win függvényét Meghívja a City gameOver függvényét
void
catch()
Meghívja a City gameOver() függvényét
változók
Meghívja a Road objektum forwardThief függvényét saját magával A City gameOver függvényét hívja
nincs
3.1.9 Road A város útjait megvalósító objektumok példányszám
n
ősosztályok
Field
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek Vehicle
v
Az úton tartózkodó jármű
Roadsign
rs
Útjelző
stepPolice(p:Police)
Ha a Road üres, akkor a Police accept függvényét hívja, ha nem üres, akkor a rajta levő jármű catch függvényét hívja
szolgáltatások void
2010-05-12
17
Led Zeppelin void
stepCivilian(c:Civilian)
void
stepThief(t:Thief)
void
setVehicle(v:Vehicle)
void
removeVehicle()
void
forwardPolice(p:Police)
void
forwardCivilian(c:Civilian)
void
forwardThief(t:Thief)
void
addRoad(r:Road, rs:Roadsign)
változók enum[]
Ha a Roadon nincs jármű, akkor a Civilian accept függvényét hívja Ha a Roadon nincs jármű, akkor a Thief accept függvényét híjva, ha van, akkor a Thief incoming függvényét hívja Beállítja a Road v értékét A Road v értékét nullra állítja, és meghívja a RoadSign reset függvényét Meghívja a következő RoadSign enterPolice függvényét Meghívja a következő RoadSign enterCivilian függvényét Meghívja a következő RoadSign enterThief függvényét Beállítja a Road rs értékét, és meghívja a A RoadSign setNextRoad függvényét r-rel
nincs direction
3.1.10 HideOut A rabló búvóhelyét megvalósító osztály példányszám
1
ősosztályok
Field, Road
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
nincs
szolgáltatások void
változók
2010-05-12
stepThief(t:Thief)
Ha a HideOut üres, meghívja a Thief hide függvényét, ha a HideOut-on jármű van, meghívja a Thief incoming függvényét
nincs
18
Led Zeppelin
3.1.11 BorderIn A városba bemenő utat megvalósító objektum példányszám
n
ősosztályok
Field, Road
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
nincs
szolgáltatások
nincs
változók
nincs
3.1.12 BorderOut A városból kivezető utakat megvalósító objektum példányszám
n
ősosztályok
Field, Road
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
nincs
szolgáltatások void
forwardThief(t:Thief)
változók
Meghívja a Thief exit függvényét
nincs
3.1.13 Junction A városban levő útkereszteződéseket megvalósító objektum példányszám
n
ősosztályok
Field, Road
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
2010-05-12
19
Led Zeppelin komponensek
nincs
szolgáltatások void void void void void void
változók
forwardPolice(p:Police)
Meghívja a Police choose függvényét forwardCivilian(c:Civilian) Meghívja a Civilian choose függvényét forwardThief(t:Thief) Meghívja a Thief choose függvényét exitCivilian(c:Civilian,dir:enum) Meghívja a RoadSign enterCivilian függvényét exitPolice(p:Police,dir:enum) Meghívja a RoadSign enterPolice függvényét exitThief(t:Thief,dir:enum) Meghívja a RoadSign enterThief függvényét nincs
3.1.14 RoadSign A forgalmat szabályozó útjelzéseket megvalósító objektum. A Roadok közötti csatoló osztály, amely összeköthet utat úttal (pl. gyalogos-átkelőhely) és utat kereszteződéssel is (pl. jelzőlámpa, STOP tábla). példányszám n ősosztályok
ITickable <>
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek Road
r
A következő út
void
onTick()
-
void
reset()
-
void
enterPolice(p:Police)
-
void
enterCivilian(c:Civilian)
-
void
enterThief(t:Thief)
-
void
setNextRoad(r:Road)
Beállítja a RoadSign r változóját
szolgáltatások
változók
2010-05-12
nincs
20
Led Zeppelin
3.1.15 StopSign A stop táblát megvalósító osztály példányszám
n
ősosztályok
ITickable <>, RoadSign
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
nincs
szolgáltatások void
onTick()
Üres függvény
void
reset()
Countdown változót 0-ra állít
void
enterPolice(p:Police)
void
void void void
Meghívja a következő Road stepPolice függvényét enterCivilian(c:Civilian) Alapállípotban meghívja a startCountdownt, visszaszámlálás állapotban a decCountdownt, átenged állípotban pedig a következő Road stepCivilian függvényét enterThief(t:Thief) Meghívja a következő Road stepThief függvényét startCountdown() A countdown értékét kezdőértékre állítja decCountdown() A countdown értékét csökkenti
változók int
countdown
számláló
3.1.16 Semaphore A jelzőlámpát megvalósító osztály. példányszám
n
ősosztályok
ITickable <>, RoadSign
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
nincs
szolgáltatások 2010-05-12
21
Led Zeppelin void
onTick()
A color változót változtatja
void
reset()
Üres függvény
void
enterPolice(p:Police)
void void enum
Meghívja a következő Road stepPolice függvényét enterCivilian(c:Civilian) Ha a lámpa zöld meghívja a következő Road stepCivilian függvényét enterThief(t:Thief) Meghívja a következő Road stepThief függvényét getColor() A color értékével tér vissza
változók int
period
A Semaphore periódusideje.
int
a
int
b
A periódusban [a, b] részén zöld a lámpa, különben piros.
int
i
A periódusban eltelt idő.
enum
color
A Semaphore színe
3.1.17 NoRoadSign Üres útjelzés, ami minden forgalmat átenged. példányszám
n
ősosztályok
ITickable <>, RoadSign
perzisztencia
dinamikus
konkurencia
passzív
felelősségek
nincs
komponensek
nincs
szolgáltatások void
onTick()
Üres függvény
void
reset()
Üres függvény
void
enterPolice(p:Police)
void void
változók
2010-05-12
Meghívja a következő Road stepPolice függvényét enterCivilian(c:Civilian) Meghívja a következő Road stepCivilian függvényét enterThief(t:Thief) Meghívja a következő Road stepThief függvényét nincs
22
Led Zeppelin
3.2 Osztályok leírása City: A játéktérként szolgáló várost valósítja meg. Ez tartalmazza a várost alkotó mezőket, a járműveket és az időzítő objektumot. Timer: Egy meghatározott frekvenciával vezérli az engedélyező jeleket, amely a játék eseményeinek időzítéséért felelős. Field: A várost alkotó mezők. Road: Egy speciális mező, amely a város útjának egy darabját szimbolizálja. Ismeri az őt követő útszakaszt, ill. a köztük lévő útjelző táblát (STOP táblát vagy jelzőlámpát). Egyszerre egy jármű tartózkodhat rajta. Megvizsgálhatja a következő útszakaszt, és továbbküldheti a rajta levő járművet az időzítőjel hatására. BorderIn: A városba belépő útszakaszok BorderOut: A városból kilépő útszakaszok Junction: Kereszteződés, egy vagy több bejárattal és kijárattal. HideOut: Rejtekhely, a tolvaj célja ennek elérése, ha sikerül, megnyeri a játékot. RoadSign: Útjelzés, ami stop tábla vagy szemafor lehet. Ezek felelősek a forgalom irányításáért. Megmondja, hogy adott irányból behajthat-e jármű a kereszteződésbe. StopSign: Állj, elsőbbségadás kötelező tábla. Az érkező járművet megállásra készteti, majd tovább engedi. Semaphore: Jelzőlámpa, piros vagy zöld állapottal. Csak akkor enged tovább járművet, ha zöld. Vehicle: Az utakon közlekedő járművek ősosztálya. Police: A jármű egyik speciális változata a rendőr, nem vonatkoznak rá a szabályok, a kereszteződésekben pedig a véletlen irányítja. Thief: A játékos által irányított jármű, amire nem vonatkoznak a szabályok. Civilian: A város lakóinak járművei, szabályosan közlekednek, és a véletlen irányítja őket a kereszteződésekben. ITickable: Időtől függő objektumokat összefogó interfész, amelyen keresztül a Timer az objektumok időzítését végzi.
2010-05-12
23
Led Zeppelin
3.3 Statikus struktúra diagramok
2010-05-12
24
Led Zeppelin
3.4 Szekvencia diagramok
2010-05-12
25
Led Zeppelin
2010-05-12
26
Led Zeppelin
2010-05-12
27
Led Zeppelin
2010-05-12
28
Led Zeppelin
2010-05-12
29
Led Zeppelin
2010-05-12
30
Led Zeppelin
2010-05-12
31
Led Zeppelin
2010-05-12
32
Led Zeppelin
2010-05-12
33
Led Zeppelin
2010-05-12
34
Led Zeppelin
2010-05-12
35
Led Zeppelin
2010-05-12
36
Led Zeppelin
2010-05-12
37
Led Zeppelin
2010-05-12
38
Led Zeppelin
2010-05-12
39
Led Zeppelin
3.5 State-chartok
Stop tábla működése
Szemafor működése
3.6 Napló Kezdet Időtartam 2010.03.01. 20:00 2 óra
2010.03.02. 19:00 2 óra
2010.03.03. 10:00 2 óra
2010.03.03. 10:00 8 óra 2010.03.03. 10:00 8 óra 2010.03.03. 10:00 8 óra 2010-05-12
Résztvevők Bodó Pál Szárnyas Bodó Pál Szárnyas Bodó Pál Szárnyas Bodó Pál Szárnyas
Leírás Értekezlet. Konzultáción hallottak megbeszélése, objektummodell átalakítása Szekvencia-diagramok rajzolása, modell letisztázása Objektummodell finomítása, csatoló osztály bevezetése Szekvencia-diagramok megrajzolása Dokumentáció elkészítése Osztálydiagram, state chartok és az 40
Led Zeppelin
2010.03.04. 10:00 2 óra
2010-05-12
Szárnyas, Bodó
néhány szekvenciadiagram megrajzolása Dokumentáció finomítása, nyomtatás
41
Led Zeppelin
4. Szkeleton tervezése 4.1 A szkeleton modell valóságos use-case-ei 4.1.1 Use-case diagramok
Játékos use case-ei
2010-05-12
42
Led Zeppelin
Óra use case-ei
2010-05-12
43
Led Zeppelin
4.1.2 Use-case leírások Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás
Játék indítása A pálya inicializálása, létrehozása és beállítása Játékos
mezők,
járművek,
útjelzők
Tolvaj mozgatása foglalt útra A tolvaj összeütközik az úton levő járművel, a játékot elveszítjük Játékos Rendőr van az úton A tolvaj összeütközik az úton levő rendőrrel, a játékot elveszítjük Játékos
Aktorok
Civil van az úton A tolvaj összeütközik az úton levő civillel, a játékot elveszítjük Játékos
Use-case neve Rövid leírás Aktorok
Tolvaj mozgatása szabad útra A tolvaj átkerül az új útszakaszra Játékos
Use-case neve Rövid leírás Aktorok
Rejtekhelyre lép A tolvaj megmenekül, a játékot megnyerjük Játékos
Use-case neve Rövid leírás Aktorok
Városból kilép A tolvaj elhagyja a játékteret, a játékot elveszítjük Játékos
Use-case neve Rövid leírás Aktorok
Útról útra vagy kereszteződésbe lép A tolvaj átkerül az új útra vagy kereszteződésbe Játékos
Use-case neve Rövid leírás Aktorok
Kereszteződésből útra lép (irányt választ) A tolvaj a választásunknak megfelelő útra lép Játékos
Use-case neve Rövid leírás
Idő léptetése Üzenetet küldése minden időre cselekvő dolognak a pályán Óra
Aktorok 2010-05-12
44
Led Zeppelin
Use-case neve Rövid leírás Aktorok
Útjelzők működtetése Minden útjelző idejének léptetése Óra
Use-case neve Rövid leírás
Szemafor működtetése A szemaforok idejének léptetése, színeiknek beállítása a paramétereiknek megfelelően Óra
Aktorok Use-case neve Rövid leírás Aktorok
Stop tábla működtetése A stop táblák idejének léptetése, belső állapotaik beállítása Óra
Use-case neve Rövid leírás Aktorok
Járművek léptetése Minden jármű idejének léptetése Óra
Use-case neve Rövid leírás
Civil léptetése A civil járművek idejének léptetése, és a jármű továbbküldése a következő útra Óra
Aktorok Use-case neve Rövid leírás
Aktorok Use-case neve Rövid leírás
Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás
Aktorok
2010-05-12
Civil útról lámpás kereszteződésbe A szemafor állapotának és a kereszteződés foglaltságának megfelelően a civil jármű áthelyezése a kereszteződésbe, vagy az úton hagyása Óra Civil útról stop táblás kereszteződésbe A civil jármű várakozásra késztetése, majd kereszteződés foglaltságának megfelelően kereszteződésbe léptetése Óra
a a
Civil útról útra Civil jármű következő útra léptetése, ha az szabad, egyébként helyben hagyása Óra Civil kereszteződésből útra Civil jármű áthelyezése a kereszteződés egyik véletlenszerűen kiválasztott kijáratára, ha az szabad, egyébként helyben hagyása Óra
45
Led Zeppelin Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás
Civil határon ki és be Civil jármű áthelyezése egy város kijáratról egy bejáratra ha az szabad, egyébként helyben hagyása Óra Tolvaj léptetése A tolvaj következő útra léptetése az irányításnak megfelelően Óra Tolvaj útról rejtekhelyre Ha a rejtekhely foglalt a játékot elveszítjük, ha szabad, akkor megnyerjük Óra Tolvaj kereszteződésből útra Az irányításnak megfelelő útra lép a tolvaj, ha az foglalt, akkor a játékot elveszítjük Óra Tolvaj útról kereszteződésbe Tolvaj belép a kereszteződésbe, ha az foglalt, akkor a játékot elveszítjük Óra
Aktorok
Tolvaj útról útra Tolvaj a következő útra lép az irányításnak megfelelően, ha az foglalt, a játékot elveszítjük Óra
Use-case neve Rövid leírás Aktorok
Tolvaj határon ki A tolvaj kilép a városhatáron, a játkot elveszítjük Óra
Use-case neve Rövid leírás Aktorok
Rendőr léptetése A rendőr a következő útra lép Óra
Use-case neve Rövid leírás Aktorok
Rendőr határon ki és be A rendőr kilép a városhatáron és belép egy bejáraton Óra
Use-case neve Rövid leírás
Rendőr kereszteződésből útra A rendőr a kereszteződés egy véletlenszerűen választott útjára lép, ha civil van rajta, akkor helyben marad, ha pedig tolvaj, akkor elkapja Óra
Aktorok 2010-05-12
46
Led Zeppelin
Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok
Rendőr útról kereszteződésbe A rendőr a kereszteződésbe lép, ha azon civil van, akkor helyben marad, ha tolvaj, akkor elkapja Óra Rendőr útról útra A rendőr a következő útra lép, ha azon civil van, akkor helyben marad, ha pedig tolvaj, akkor elkapja Óra
4.2 Architektúra A szkeleton az egyes use-casek bemutatására szolgál, mely során meggyőződhetünk a szekvencia diagramjaink helyességéről. Az egyes eseteket előre megtervezett, lekódolt tesztpályákon ellenőrizhetjük. A szkeleton futása során megfigyelhetjük, hogy a függvényeink a szekvencia diagramokban feltüntetett sorrendben hívódnak-e meg. A hasonló eseteknek nem készítettünk külön tesztkörnyezetet. A pályák leírásában szerepel, hogy milyen a pálya felépítése, milyen járművek találhatók rajta és mely esetek tesztelésére szolgál. Az egyes esetek tesztelésére a lehető legkisebb tesztpályát hoztuk létre. 1. Tesztpálya Roadok száma: 2 Civilian száma: 1 Ez a tesztpálya az egyes Civilian mozgását mutatja be Roadról üres Roadra. Ugyanígy mozog a Police is. 2. Tesztpálya Roadok száma: 3 Civilian száma: 2 A tesztpálya az ütközések elkerülését szimulálja. A Policeok is így kerülik el az ütközést. 3. Tesztpálya Roadok száma: 3 Junctionok száma: 1 Roadsign száma: 1 Civilian száma: 1 A teszpályán kiválasztható, hogy milyen útjelzı legyen az útkeresztezıdésben. Megfigyelhetı, hogyan viselkedik a civil jármő a jelzıtábláknál, és az útválasztás. 4. Tesztpálya Borderin száma: 1 Road száma: 1 Borderout száma: 1 Civilian száma: 1 Megfigyelhetı a város elhagyásának, valamint az érkezésnek a módja. Ez vonatkozik a Civilianra és a Policera is. 5. Tesztpálya 2010-05-12
47
Led Zeppelin Roadok száma: 3 Junctionok száma: 1 Borderoutok száma: 2 Thiefek száma: 1 A tesztpályán a thief mozgása tesztelhetı (mozgás, útválasztás, Roadsignok figyelmen kívül hagyása), valamint a pályaelhagyás thief esetén. 6. Tesztpálya Roadok száma: 3 Thiefek száma: 1 Civilianok száma: 1 Thieffel történı ütközések szimulálására szolgál. Ez két esetre bontható szét, amikor Policeba vagy Civilianba ütközünk. 7. Tesztpálya Roadok száma: 1 Hideoutok száma: 1 Thiefek száma: 1 Ezen a tesztpályán figyelhetı meg, hogy mi történik mikor a Thief a Hideotra lép. 8. Tesztpálya Roadok száma: 2 Thiefek száma: 1 Police száma: 1 A pálya azt szimulálja, amikor egy Police elkapja a Thiefet. 9. Tesztpálya Roadok száma: 3 Junctionok száma: 1 Policeok száma: 1 Megfigyelhetı, hogy a rendır milyen módon lép be a keresztezıdésekbe és az útválasztás.
4.3 A szkeleton kezelői felületének terve, dialógusok A szkeleton célja annak bizonyítása, hogy a program képes-e az elvárt működést biztosítani, vagyis ellenőrizhető vele a szekvencia diagramok működőképessége. A szkeletonban már minden objektum a végleges interfészével szerepel, de algoritmusokat még nem tartalmaznak. Egy metódus meghívásakor a konzolra írja a következőket: • az őt tartalmazó objektum neve, osztálya, hashcode-ja, • metódus neve és paraméterlistája Az indentálás jelzi, hogy hány metódus „fut” az adott pillanatban. Ezután a metódus meghívja az általa használt többi metódust. A döntéseket a végleges programmal ellentétben nem a saját logikája alapján végzi, hanem a konzolon keresztül megkérdezi a felhasználót. A felhasználó kérdésre adott válasza (egész szám) után annak megfelelően folytatódik a program futása. Példa: Civil útról útra lép Program inditasa... { szglab4.City@14318bb letrehozva.
2010-05-12
48
Led Zeppelin { szglab4.Timer@10b30a7 letrehozva. } Kezdo use-case-ek: 1. civil 2. rendor 3. tolvaj Valassz a fentiek kozul: 1 { szglab4.Civilian@530daa letrehozva. } 1. utrol utra 2. utrol lampas keresztezodesbe 3. utrol stopstablas keresztezodesbe 4. keresztezodesbol utra 5. hataron ki es be Valassz a fentiek kozul: 1 { szglab4.Road@89ae9e letrehozva. } { szglab4.Road@60aeb0 letrehozva. } { szglab4.Road@89ae9e --> [email protected]() } { <-- setVehicle() } { <-- setRoad() } szglab4.City@14318bb --> szglab4.Civilian@530daaonTick() { szglab4.Civilian@530daa --> [email protected]() (szglab4.C ivilian@530daa) { szglab4.Road@89ae9e --> [email protected]()(szglab4 .Civilian@530daa) { szglab4.NoRoadSign@16caf43 --> [email protected]() (szgla b4.Civilian@530daa) { Legyen jarmu elotte(1. igen, 2. nem): 2 szglab4.Road@60aeb0 --> [email protected](szglab4.Road@60 aeb0) { szglab4.Civilian@530daa --> [email protected]() { szglab4.Road@89ae9e --> [email protected]() <-- removeVehicle } szglab4.Civilian@530daa --> [email protected]() (szglab 4.Civilian@530daa) { <-- setVehicle()
2010-05-12
49
Led Zeppelin } szglab4.Civilian@530daa --> [email protected]() (szgla b4.Road@60aeb0) { <-- setRoad() } <-- accept() } <-- stepCivilian() } <-- enterCivilian() } <-- forwardCivilian() } <-- onTick() } } Kilepes a programbol...
2010-05-12
50
Led Zeppelin
4.4 Szekvencia diagramok a belső működésre 4.4.1 Civil határon ki / Rendőr határon ki és be
2010-05-12
51
Led Zeppelin
4.4.2 Civil kereszteződésből útra
2010-05-12
52
Led Zeppelin
4.4.3 Civil útról útra
2010-05-12
53
Led Zeppelin
4.4.4 Civil útról lámpás kereszteződésbe
2010-05-12
54
Led Zeppelin
4.4.5 Civil stoptáblás kereszteződésbe
2010-05-12
55
Led Zeppelin
4.4.6 Rendőr kereszteződésből útra lép
2010-05-12
56
Led Zeppelin
4.4.7 Rendőr útról keresztezősbe lép
2010-05-12
57
Led Zeppelin
4.4.8 Rendőr útról útra lép
2010-05-12
58
Led Zeppelin
4.4.9 Tolvaj kereszteződésből útra lép
2010-05-12
59
Led Zeppelin
4.4.10 Tolvaj határon ki
2010-05-12
60
Led Zeppelin
4.4.11 Tolvaj útról rejtekhelyre
2010-05-12
61
Led Zeppelin
4.4.12 Tolvaj útról kereszteződésbe lép
2010-05-12
62
Led Zeppelin
4.4.13 Tolvaj útról útra
2010-05-12
63
Led Zeppelin
4.4.14 Játék indítása
2010-05-12
64
Led Zeppelin
4.4.15 Idő léptetése
2010-05-12
65
Led Zeppelin
4.5 Napló Kezdet 2010.03.10. 12:00
Időtartam 5 óra
Résztvevők Pál
2010.03.10. 12:00
4 óra
Szárnyas
2010.03.10. 12:00
6 óra
Bodó
2010.03.10. 23:00
1 óra
Szárnyas
2010-05-12
Leírás Use-case-ek dokumentálása és rajzolása Inicializálás és idő léptetése szekvendiagramok elkészítése, kezelői felület kialakítása Szekvenciadiagramok use-case-ekhez társítása, apróbb módosítások, tesztpályák Dokumentum összerendezése, nyomtatás
66
Led Zeppelin
5. Szkeleton beadása 5.1 Fordítási és futtatási útmutató Az szglab4.zip állomány tartalmazza a program forráskódját, a fordításhoz, futtatáshoz és a dokumentáció generálásához szükséges parancsfájlokat. A futtatható állományok és a dokumentáció elkészítéséhez az első lépés a .zip fájl kicsomagolása. Az így kapott állományok és mappák listája az alábbiakban látható.
5.1.1 Fájllista A forrásállományokat tartalmazó ./szglab4 mappa tartalma: Fájl neve BorderIn.java BorderOut.java City.java Civilian.java Direction.java EnumColor.java HideOut.java ITickable.java Logger.java Junction.java Main.java NoRoadSign.java Police.java Road.java RoadSign.java Semaphore.java StopSign.java Thief.java Timer.java User.java Vehicle.java
Méret 62 321 5 830 1 987 73 59 583 104 2 755 1 081 239 1 398 2 082 4 397 1 141 1 722 2 266 3 552 636 596 2 201
Keletkezés ideje 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.17. 10:34 2010.03.16. 19:21 2010.03.16. 11:12 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.16. 19:21 2010.03.17. 10:50 2010.03.16. 19:21
Tartalom Bemenő út osztály Kimenő út osztály Város osztály Civil jármű osztály Irány enumeráció Szín enumeráció Rejtekhely osztály Időzíthető interfész Naplózó osztály Kereszteződés osztály Main osztály, belépési pont Üres útjelző osztály Rendőr osztály Út osztály Útjelző tábla absztrakt osztály Jelzőlámpa osztály Stoptábla osztály Tolvaj osztály Időzítő objektum Felh. interakció osztály Jármű absztrakt osztály
A futtatáshoz szükséges parancsfájlokat tartalmazó ./ mappa tartalma: Fájl neve compile.bat doc.bat run.bat set_java_home.bat szglab4.manifest
2010-05-12
Méret 145 308 72 166
Keletkezés ideje 2010.03.17. 13:30 2010.03.17. 13:52 2010.03.17. 13:46 2010.03.17. 12:51
26 2010.03.17. 13:23
Tartalom Fordítás Dokumentáció generálása Futtatás JAVA_HOME környezeti változó beállítása A fordításhoz szükséges manifest állomány
67
Led Zeppelin
5.1.2 Fordítás A fordítás a compile.bat állomány futtatásával végezhető. A fordítás előfeltétele, hogy a JAVA_HOME környezeti változó az 1.6-os Java JDK könyvtárának helyét tartalmazza. Amennyiben ez nincs beállítva,4 a set_java_home.bat állományban a REM SET JAVA_HOME="C:\Program Files\Java\jdk1.6.0_17" parancs előtti kommentjelzés (REM) megszüntetésével állítható be. A pontos cím és a jdk utáni verziószám természetesen függ a használt konfigurációtól. Sikeres fordítás esetén a ./szglab4 mappában létrejönnek a .class állományok, a ./ mappában pedig az szglab4.jar állomány.
5.1.3 Futtatás Sikeres fordítás után a kapott szglab4.jar állomány a run.bat futtatásával indítható. A java.exe is a JDK része, ezért a JAVA_HOME környezeti változó beállítására a fordításnál leírtak ide is érvényesek. Futtatáskor a program felajánlja a kezdeti use-case-eket, amelyekből a felhasználó számmal választhat. Hibás választás esetén a program futása véget ér. Ha egy metódus döntésre kényszerül, felhasználói beavatkozás dönti el, hogy mi történjen. Ehhez is egy számot kell beírnia a felhasználónak. Természetesen minden use-case tartalmazza (<>) az init use-case-t, amiben létrejönnek a felhasznált objektumok és egymással kapcsolatba kerülnek (pl. a jármű az útra kerül, két út egy útjelző csatoló osztályon keresztül összekötődik). A kért use-case kiválasztása után először az init use-case működése figyelhető meg, utána fut le a konkrét use-case szekvenciája. A szkeleton elkészítésénél egy utólag vitatható tervezési döntést hoztunk, miszerint a függvények hívása előtt hívjuk meg a Logger osztály Log metódusát és kiírjuk a hívó objektum és a hívott objektum típusát és hashcode-ját, valamint a meghívott metódust és annak paramétereit. Így szemléletesebben látható, hogy melyik objektum melyik másik objektumot hívja, ugyanakkor minden hívásnál oda kell figyelni ennek beszúrására. Persze az is jó megoldás lenne, ha minden metódus meghíváskor kiírná az őt tartalmazó objektum típusát, hashcode-ját és a saját paramétereit – ekkor az indentáció segítségével lehetne eldönteni, hogy melyik objektum hívta a metódust. Mivel ez a szkeleton használhatóságát nem befolyásolja, úgy döntöttünk, megtartjuk az eredeti megoldásunkat.
5.1.4 Dokumentáció generálása A Javadoc dokumentáció a doc.bat futtatásával készíthető el. A javadoc.exe is a JDK része, ezért a JAVA_HOME környezeti változó beállítására a fordításnál leírtak ide is érvényesek. Sikeres futtatás esetén a dokumentáció a docs mappába kerül, ahonnan az index.html-t megnyitva tekinthető meg.
4
Parancssorban (Start menü | Futtatás | cmd) a
SET
%JAVA_HOME%
paranccsal
ellenőrizhető. 2010-05-12
68
Led Zeppelin
5.1.5 Értékelés Tapasztalatlanságunkból fakadóan sok nehézséggel szembesültünk az IDE környezet beállítása, az SVN rendszer telepítése és a batch fájlok készítése során is. A csapatmunkát nagyban segítette, hogy mindhárman kollégisták vagyunk, így a közös értekezletek megszervezése nagyon egyszerű volt. A munkából a csapat minden tagja legjobb képességeinek megfelelően kivette részét, a feladatokat sikerült egyenletesen felosztanunk és a munkafolyamatokat a lehetőségeknek megfelelően párhuzamosítanunk. Tag neve Bodó Péter Pál Tamás Szárnyas Gábor
Munka százalékban 33 33 34
5.2 Napló Kezdet 2010.03.15. 18:00
Időtartam 3 óra
Résztvevők Szárnyas
2010.03.15. 21:00 2010.03.15. 21:00 2010.03.16. 18:00
2 óra 2 óra 2 óra
Bodó Pál Szárnyas
2010.03.16. 22:00
2 óra
2010.03.17. 10:00
2 óra
Bodó Pál Szárnyas Szárnyas
2010.03.17. 12:00
3 óra
Szárnyas
2010.03.17. 12:00
8 óra
Bodó Pál
2010.03.17. 20:00 2010.03.17. 22:00
2 óra 2 óra
Szárnyas Bodó Pál Szárnyas
Leírás SVN repository létrehozása Subclipse beállítása SVN beállítása Osztálydiagramnak megfelelő .java állományok legenerálása SVN tesztelése, feladatok felosztása Main, Logger és User osztály implementálása Fordítás, futtatás és dokumentációgenerálás batch fájljainak elkészítése Szekvenciadiagramok implementálása, Javadoc dokumentáció készítése CLI elkészítése Tesztesetek végigfuttatása, javítások
5.3 Statisztika A munkaórák összege a 6. beadandó elkészítésével bezárólag. Tag neve Bodó Péter 2010-05-12
Munkaórák 47 69
Led Zeppelin Pál Tamás Szárnyas Gábor
2010-05-12
46 47
70
Led Zeppelin
6. Prototípus koncepciója 6.1 Prototípus interface-definíciója A program prototípusa konzolos felületen keresztül lesz irányítható előre specifikált parancsok segítségével. A prototípus tesztelési célokat lát el, hiszen képet kapunk a program belső működéséről. A tesztelést előre megírt parancssorozatokkal és tesztpályákkal végezzük, majd a kapott eredményt összehasonlítjuk az elvárt kimenettel, így a hibás működés kiszűrhető.
6.1.1 Az interfész általános leírása A prototípus input és output felületnek csak a szabványos be- és kimenetet használhatja, ill. fájlból olvashatónak és fájlba menthetőnek kell lennie. Utóbbi beállításokra külön parancsokat hoztunk létre, így az prototípus tesztelése kötegelt állománnyal egyszerűen végezhető.
6.1.2 Paraméterek A prototípus működését batch állománnyal való tesztelés segítésére paraméterezhetően valósítottuk meg. A prototípus meghívásának módja: java -jar szglab4.jar inputfile outputfile
6.1.3 Bemeneti nyelv loadmap map.txt Betölti és felépíti a map.txt állományban található pályát exit Kilép a programból tick [tickcount] tickcount számút lép, ha nincs megadva, 1-et showmap Kiírja a pályán található utak és járművek mátrixait. deterministic on|off Beállítja, hogy a történések véletlenszerűek vagy determinisztikusak legyenek. nextdirection id TOP|RIGHT|BOTTOM|LEFT Csak deterministic on esetén alkalmazható. A következő döntési helyzetben az id azonosítójú jármű a specifikált irányba fog mozogni. movethief TOP|RIGHT|BOTTOM|LEFT A játékos figuráját a specifikált irányba mozgatja // [komment] Komment (a // után szóköz szükséges). 2010-05-12
71
Led Zeppelin
6.1.4 Pályaformátum A program a pálya konfigurálását külön a pályát leíró fájl alapján végzi. Ez három fő részből fog állni: utakat, járműveket, és útjelzőket tartalmazó rész. A fájl első N sora tartalmazza a város felépítéséhez szükséges útszakaszokat leíró információkat. Minden sor M karakterből áll, egy karakter egy útszakasznak felel meg, így ez az N×M karakter méretű mátrix a város térképe. A különböző útszakaszokat a következő karakterek írják le: [R] útszakasz [J] kereszteződés [I] városba belépő útszakasz [O] városból kilépő útszakasz [H] rejtekhely [-] üres mező Példa: ----O-------R---IRRRJRRRO ----R-------I---Az utak irányát később állítjuk be az utak egymás közötti kapcsolataiból (JOIN). A következő N sor az úthálózaton levő járműveket tartalmazza az előzőek szerinti NxMes elrendezés alapján. A járműveket a következő karakterek írják le: [T] tolvaj (csak egy lehet belőle a pályán) [P] rendőr [C] civil [-] jármű nélküli mező Példa: ------------C-----C----P— ----T-----------A fájl további részében utasítások találhatóak a pálya felépítésére és a járművekre vonatkozóan. Egy JOIN X1 Y1 X2 Y2 TIPUS [INTA INTB PERIOD] sor ír le egy összeköttetést két útszakasz között a megfelelő szabályok szerint. Egy sor szóközökkel elválasztva a következő információkat tartalmazza: • az első útszakasz első koordinátája (egész szám) • az első útszakasz második koordinátája (egész szám) 2010-05-12
72
Led Zeppelin • a második útszakasz első koordinátája (egész szám) • a második útszakasz második koordinátája (egész szám) • az útszakaszok közötti útjelző típusa (szemafor: [S], stop tábla: [T], útjelző nélküli: [N]) Szemafor esetén a sor végén további három elem található: • a szemaforra jellemző intervallum kezdete (egész szám) • a szemaforra jellemző intervallum vége (egész szám) • a szemafor periódusideje (egész szám) Az útszakaszok első koordinátája a sorának száma, a második pedig az oszlopának száma. A bal felső útszakasz koordinátái [0, 0], a jobb alsóé [N, M]. Példa: JOIN 2 3 2 2 N JOIN 1 1 1 2 S 5 8 10 Egy VEHICLE N M F sorral az [N, M] koordinátákon szereplő autó F frekvenciája állítható be. Példa: VEHICLE 1 2 9
6.1.5 Kimeneti nyelv A program indításakor az alábbi üzenet jelenik meg: Program loaded. Ezután a program felhasználói utasításra vár. Az egyes utasítások eredménye a következő lehet: input inputfile • "inputfile" does not exist. • "inputfile" loaded. output mode [outputfile] • • • •
Output Output Output Cannot
mode set to 0. mode set to 1. mode set to 2. access "outputfile".
loadmap map.txt • "map.txt" does not exist. • "map.txt" loaded. exit • Goodbye. 2010-05-12
73
Led Zeppelin
tick [tickcount] • <<Tick>> • Civilian [id] moved from [X1, Y1] to [X2, Y2]. • Civilian exited the city [X1, Y1], entered the city [X2, Y2]. • Police [id] moved from [X1, Y1] to [X2, Y2]. • Police exited the city [X1, Y1], entered the city [X2, Y2]. • Thief moved from [X1, Y1] to [X2, Y2]. • Thief reached the hideout. • Thief exited the city [X, Y]. • Thief crashed with vehicle [id]. • Police [id] caught the Thief. • Semaphore changed color to [piros/zold]. • StopSign changed state to [alap/visszaszamol/beenged]. showmap • Roads: ----O-------R---IRRRJRRRO ----R-------I---Vehicles: ------------C-----C----P— ----T-----------deterministic on|off • Game logic is set to deterministic. • Game logic is set to random. nextdirection id TOP|RIGHT|BOTTOM|LEFT • Vehicle [id]'s next direction is TOP|RIGHT|BOTTOM|LEFT.
6.2 Összes részletes use-case 6.2.1 Játékos use-case-ei Use-case neve Rövid leírás 2010-05-12
Játék indítása A pálya inicializálása,
mezők,
járművek,
útjelzők 74
Led Zeppelin
Aktorok Use-case neve Rövid leírás
létrehozása és beállítása Játékos
Aktorok
Tolvaj mozgatása foglalt útra A tolvaj összeütközik az úton levő járművel, a játékot elveszítjük Játékos
Use-case neve Rövid leírás Aktorok
Tolvaj mozgatása szabad útra A tolvaj átkerül az új útszakaszra Játékos
Use-case neve Rövid leírás Aktorok
Rejtekhelyre lép A tolvaj megmenekül, a játékot megnyerjük Játékos
Use-case neve Rövid leírás Aktorok
Városból kilép A tolvaj elhagyja a játékteret, a játékot elveszítjük Játékos
Use-case neve Rövid leírás Aktorok
Útról útra vagy kereszteződésbe lép A tolvaj átkerül az új útra vagy kereszteződésbe Játékos
Use-case neve Rövid leírás Aktorok
Kereszteződésből útra lép (irányt választ) A tolvaj a választásunknak megfelelő útra lép Játékos
6.2.2 Óra use-case-ei Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás
Idő léptetése Üzenetet küldése minden időre cselekvő dolognak a pályán Óra Szemafor működtetése A szemaforok idejének léptetése, színeiknek beállítása a paramétereiknek megfelelően Óra
Aktorok
Stop tábla működtetése A stop táblák idejének léptetése, belső állapotaik beállítása Óra
Use-case neve Rövid leírás Aktorok
Járművek léptetése Minden jármű idejének léptetése Óra
2010-05-12
75
Led Zeppelin
Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás
Aktorok Use-case neve Rövid leírás
Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás
Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás
2010-05-12
Civil léptetése A civil járművek idejének léptetése, és a jármű továbbküldése a következő útra Óra Civil útról lámpás kereszteződésbe A szemafor állapotának és a kereszteződés foglaltságának megfelelően a civil jármű áthelyezése a kereszteződésbe, vagy az úton hagyása Óra Civil útról stop táblás kereszteződésbe A civil jármű várakozásra késztetése, majd kereszteződés foglaltságának megfelelően kereszteződésbe léptetése Óra
a a
Civil útról útra Civil jármű következő útra léptetése, ha az szabad, egyébként helyben hagyása Óra Civil kereszteződésből útra Civil jármű áthelyezése a kereszteződés egyik véletlenszerűen kiválasztott kijáratára, ha az szabad, egyébként helyben hagyása Óra Civil határon ki és be Civil jármű áthelyezése egy város kijáratról egy bejáratra ha az szabad, egyébként helyben hagyása Óra Tolvaj léptetése A tolvaj következő útra léptetése az irányításnak megfelelően Óra Tolvaj útról rejtekhelyre Ha a rejtekhely foglalt a játékot elveszítjük, ha szabad, akkor megnyerjük Óra Tolvaj kereszteződésből útra Az irányításnak megfelelő útra lép a tolvaj, ha az foglalt, akkor a játékot elveszítjük 76
Led Zeppelin Aktorok
Óra
Use-case neve Rövid leírás
Tolvaj útról kereszteződésbe Tolvaj belép a kereszteződésbe, ha az foglalt, akkor a játékot elveszítjük Óra
Aktorok Use-case neve Rövid leírás Aktorok
Tolvaj útról útra Tolvaj a következő útra lép az irányításnak megfelelően, ha az foglalt, a játékot elveszítjük Óra
Use-case neve Rövid leírás Aktorok
Tolvaj határon ki A tolvaj kilép a városhatáron, a játkot elveszítjük Óra
Use-case neve Rövid leírás Aktorok
Rendőr léptetése A rendőr a következő útra lép Óra
Use-case neve Rövid leírás Aktorok
Rendőr határon ki és be A rendőr kilép a városhatáron és belép egy bejáraton Óra
Use-case neve Rövid leírás
Rendőr kereszteződésből útra A rendőr a kereszteződés egy véletlenszerűen választott útjára lép, ha civil van rajta, akkor helyben marad, ha pedig tolvaj, akkor elkapja Óra
Aktorok Use-case neve Rövid leírás Aktorok Use-case neve Rövid leírás Aktorok
Rendőr útról kereszteződésbe A rendőr a kereszteződésbe lép, ha azon civil van, akkor helyben marad, ha tolvaj, akkor elkapja Óra Rendőr útról útra A rendőr a következő útra lép, ha azon civil van, akkor helyben marad, ha pedig tolvaj, akkor elkapja Óra
6.3 Tesztelési terv 6.3.1 Tesztelés menete A prototípus fordítása és indítása a szkeletonhoz hasonlóan kötegelt állományokkal (compile.bat és run.bat) lehetséges. 2010-05-12
77
Led Zeppelin A prototípus alapértelmezésben a szabványos ki- és bemenetet használja, de a megfelelő parancsok segítségével átirányíthatóak fájlba írása, ill. fájlból olvasásra. Mindkét esetben csak a 7.1.2 pontban specifikált utasítások használhatóak és egy sor egy utasítást tartalmazhat. A kért tesztesek lefuttatása után a program összehasonlítja a kapott kimenetet az elvárt kimenettel és kiírja, hogy ezek megegyeznek-e.
6.3.2 Teszt-esetek Teszt-eset neve Rövid leírás
Teszt célja
Teszt-eset neve Rövid leírás
Teszt célja
Teszt-eset neve Rövid leírás Teszt célja
Teszt-eset neve Rövid leírás
Teszt célja
Teszt-eset neve Rövid leírás
Teszt célja
2010-05-12
Civilian (Police) mozgása Roadról Roadra Civilianok száma: 1 Policok száma: 1 Civilianok száma : 1 Roadok száma: 4 A tesztpályán megfigyelhető a Civil jármű mozgása útról útra. A Police is ugyanígy lép útról útra Város elhagyása, érkezés Civilianok száma: 1 BorderInek száma: 1 BorderOutok száma: 1 Azt szimulálja, hogyan hagyja el a várost a civil jármű és hogyan érkezik oda meg Ütközés elkerülés Roadok száma: 3 Civilianok száma: 2 Megfigyelhető, hogy hogyan kerülik el az ütközést a civil járművek, és a Rendőrök Civilian útról szemaforos kereszteződésbe Roadok száma: 4 Junction száma: 2 Stopsignok száma: 1 Semaphorok száma: 1 Civilek száma: 1 Civil járműnek a viselkedését figyelhetjük meg útjelzőnél, és az irányválasztást. Thief mozgása Roadok száma: 4 Junctionok száma: 2 Borderoutok száma: 2 Stopsignok száma: 1 Semaphorok száma: 1 Thiefek száma: 1 A tesztpályán a thief mozgása tesztelhető (mozgás, útválasztás, Roadsignok figyelmen kívül hagyása), valamint a pályaelhagyás Thief esetén. 78
Led Zeppelin
Teszt-eset neve Rövid leírás
Teszt célja
Teszt-eset neve Rövid leírás
Teszt célja
Teszt-eset neve Rövid leírás
Teszt célja
Teszt-eset neve Rövid leírás
Teszt célja
2010-05-12
Elkapás Roadok száma: 2 Policok száma: 1 Thiefek száma: 1 A pálya azt szimulálja, amikor egy Police elkapja a Thiefet. Ütközés Roadok száma: 3 Junctionok száma: 1 Civilian száma: 1 Policeok száma: 1 Thiefek száma : 1 Ez a tesztpálya szimulálja a Thief ütközését Civiliannal vagy Police-szal Győzelem Roadok száma: 1 Hideoutok száma: 1 Thiefek száma: 1 Megfigyelhető, hogy mi történik, ha a tolvaj eléri a Hideoutot Police Roadról Junctionba Roadok száma: 3 Junctionok száma: 1 Policeok száma: 1 Megfigyelhető, hogy a rendőr milyen módon lép be a kereszteződésekbe és az útválasztás.
79
Led Zeppelin
6.4 Napló Kezdet 2010.03.24. 14:00
Időtartam 3 óra
Résztvevők Bodó Pál Szárnyas
2010.03.24. 17:00
2 óra
Szárnyas
2010.03.24. 17:00
2 óra
Bodó
2010.03.24. 17:00
2 óra
Pál
2010.03.24. 18:00
4 óra
Bodó Pál Szárnyas
2010-05-12
Leírás Prototípus koncepciójának kidolgozása, feladatok kiosztása, use-case-ek kitöltése cmp.exe használata, tesztelés menete tesztesetek dokumentálása pályaformátum megalkotása Bemeneti és kimeneti nyelv megalkotása és dokumentálása
80
Led Zeppelin
7. Részletes tervek 7.1 Osztályok és metódusok tervei 7.1.1 City A várost megvalósító objektum, tartalmazza a város mezőit, a járműveket és a Timer objektumot. • Felelősség A City hozza létre és tárolja a játék objektumait. A járműveket a vehicles tömbben, az utakat a roads tömbben. Ez az osztály felelős a játék végéért, ha nyerünk vagy vesztünk. • Ősosztályok Nincs • Interfészek Nincs • Attribútumok -timer: Timer referencia a Timer objektumra -vehicles: ArrayList a járműveket tartalmazó tömb -roads: Road[][] a pálya mezőit tartalmazó kétdimenziós tömb -thiefID: int A tolvaj azonosítója -view: View A megjelenítőosztályok interfésze -gameRunning: boolean A játék futásának állapota -inputFileName: String A térképállomány neve -outputFileName: String A kimeneti állomány neve • Metódusok -void loadMap(mapFilename: String, view: View_) Betölti a térképet, a járműveket, összekapcsolja az utakat, és beállítja a járművek frekvenciáit. +void win() A játék megnyerése, leállítja a timert. +void gameOver() A játék elvesztése, eállítja a timert. +void actionPerformed(ActionEvent e) Lekezeli az eseményeket. +void keyPressed(KeyEvent e) 2010-05-12
81
Led Zeppelin Gomb nyomvatartásakor lefutó függvény. +void keyReleased(KeyEvent e) Gombfelengedés esetén lefutó függvény. +void rePaint() Újrarajzolja az utakat, útjelzőket, és a járműveket. +void exit() Kilépés a programból.
7.1.2 Timer Az időzítőobjektum. • Felelősség Tartalmaz egy tömböt az összes tickelhető objektumról, amiknek meghatározott időnként meghívja az onTick metódusait. • Ősosztályok Nincs • Interfészek Nincs • Attribútumok -tickables: ArrayList a tickelhető objektumok heterogén kollekciója -t: javax.swing.Timer beépített timer objektum • Metódusok +void tick() Meghívja a tickables elemeinek onTick metódusait. +void addTickable(t: ITickable) A kapott objektumot hozzáadja a tickables tömbhöz. +void removeTickable(t:ITickable) A kapott objektumot törli a tickables tömbből. +void start() Elindítja a timer objektumot. +void stop() Megállítja a timer objektumot.
7.1.3 ITickable <> A tickelhető objektumok közös interfésze. Minden osztály megvalósítja, ami az időtől függően változik. • Felelősség Nincs
2010-05-12
82
Led Zeppelin • Ősosztályok Nincs • Interfészek Nincs • Attribútumok Nincs • Metódusok +void onTick() A tick hatására végbemenő eseményeket valósítja meg.
7.1.4 Vehicle A járműveket megvalósító osztály. • Felelősség Azokat az attribútumokat és metódusokat tartalmazza, amik minden járműre jellemzőek. • Ősosztályok Nincs • Interfészek ITickable • Attribútumok #r: Road referencia az adott járművet tartalmazó útra #frequency: int a jármű frekvenciája, ennyi tick telik el két lépés között #state: int az előző lépés óta eltelt idő #view: IView referencia a megjelenítő osztályok interfészére #nextDirection: Direction a következő kereszteződésnél ebbe az irányba fog továbbmenni a jármű ha lehetséges -id: int a jármű azonosítója • Metódusok +void onTick() Timer által meghívott időzítő függvény, ami a leszármazottakban felül van definiálva +void choose(j: Junction, directions: Direction[])
2010-05-12
83
Led Zeppelin A kapott irányokból választ egyet, majd meghívja a Junction osztály megfelelő exit függvényét. +void incoming(v: Vehicle) +void catchVehicle() +void stepOnPolice() +void stepOnCivilian() +void stepOnThief(t: Thief) +void stepOnBunny() +void accept(r: Road) A járművet áthelyezi a következő útra úgy, hogy meghívja a Road removeVehicle() függvényét, a következő Road setVehicle(v: Vehicle) függvényét saját magával, és a Vehicle setRoad(r: Road) függvényét a következő úttal. +void setRoad(r: Road) A Vehicle r referenciáját állítja be a kapott útra. +void setFrequency(int f) A frekvenciát állítja be. +int getId() Az id-t adja vissza. +void setId(int id) Az id-t állítja be. +void setNextDirection(nextDirection: Direction) Beállítja a nextDirection értékét. +Direction getNextDirection() A nextDirection értékével tér vissza. +Road getRoad() Az r értékével tér vissza. +void setView(view: IView) Beállítja a view értékét.
7.1.5 Bunny A húsvéti nyuszit megvalósító objektum. • Felelősség Időnként megjelenik a pályán. Ha rendőr vagy civil üti el, a nyuszi eltűnik; ha tolvaj, a nyuszi eltűnik és a tolvaj bizonyos ideig halhatatlan lesz. • Ősosztályok Vehicle • Interfészek ITickable 2010-05-12
84
Led Zeppelin • Attribútumok -frequency: int a nyuszi pályán tartózkodásának idejét határozza meg -state: int a nyuszi pályán tartózkodásának idejét méri -live: boolean Ha a nyuszi él igaz, egyébként hamis. • Metódusok +void onTick() Növeli a state értékét eggyel, ha egyezik a frequency-vel, akkor leveszi magát az útról.
+void choose(j: Junction, directions: Direction[]) Üres függvény. +void incoming(v: Vehicle) Meghívja a paraméterként kapott jármű stepOnBunny() metódusát, majd törli magát az útról. +void stepOnPolice() Üres függvény. +void stepOnCivilian() Üres függvény. +void stepOnThief(t: Thief) Üres függvény. +void stepOnBunny() Üres függvény. +void reBorn() Újjáéleszti a nyuszit. +void catchVehicle(v: Vehicle) 2010-05-12
85
Led Zeppelin Meghívja a paraméter incoming(v: Vehicle) függvényét.
7.1.6 Police A rendőrt megvalósító objektum. • Felelősség Az útjelzőket figyelmen kívül hagyja, civillel nem ütközik, és a tolvajt elkaphatja, ha nekimegy. • Ősosztályok Vehicle • Interfészek ITickable • Attribútumok -notdestroyed: boolean Ha a rendőr elpusztult, az értéke hamis lesz. • Metódusok +void onTick() Növeli a state értékét eggyel, ha egyezik a frequencyvel, akkor nullázza és meghívja a Road objektum forwardPolice(p: Police) függvényét saját referenciáját átadva paraméterként.
+void choose(j: Junction, directions: Direction[])
2010-05-12
86
Led Zeppelin A kapott irányok közül véletlenszerűen választ, majd meghívja a Junction exitPolice(p: Police, dir: Direction[]) függvényét saját magával és a választott iránnyal. +void incoming(v: Vehicle) A paraméterül kapott jármű stepOnPolice() függvényét hívja meg. +void stepOnPolice() Üres függvény. +void stepOnCivilian() Üres függvény. +void stepOnThief(t: Thief) Meghívja a Thief catchVehicle() függvényét. +void stepOnBunny() Üres függvény. +void catchVehicle(v: Vehicle) Üres függvény. +boolean getDestroyed() A notdestroyed változó értékével tér vissza. +void Destroyed() A notdestroyed értékét hamisra állítja.
7.1.7 Civilian A civil járművet megvalósító objektum. • Felelősség Más járműnek nem megy neki mozgása során. • Ősosztályok Vehicle • Interfészek ITickable •
Attribútumok
• Metódusok +void onTick() Növeli a state értékét eggyel, ha egyezik a frequencyvel, akkor nullázza és meghívja a Road objektum forwardCivilian(c: Civilian) függvényét saját referenciáját átadva paraméterként.
2010-05-12
87
Led Zeppelin
+void choose(j: Junction, directions: Direction[]) A kapott irányok közül véletlenszerűen választ, majd meghívja a Junction exitCivilian(c: Civilian, dir: Direction[]) függvényét saját magával és a választott iránnyal. +void incoming(v: Vehicle) A paraméterül kapott jármű stepOnCivilian() függvényét hívja meg +void catchVehicle(v: Vehicle) Üres függvény +void stepOnPolice() Üres függvény. +void stepOnCivilian() Üres függvény. +void stepOnThief(t: Thief) Üres függvény. +void stepOnBunny() Üres függvény.
7.1.8 Thief A tolvajt megvalósító objektum. • Felelősség A játékos irányítja, az útjelzőket figyelmen kívül hagyja, ha más járművel ütközik vége a játéknak, ha a nyuszit elüti védelmet kap egy időre. • Ősosztályok Vehicle
2010-05-12
88
Led Zeppelin • Interfészek ITickable • Attribútumok +invulnerable: int() Ha az értéke nem nulla, akkor sebezhetetlen a tolvaj a rendőr által annyi ideig amennyi az értéke.
• Metódusok +void onTick() Meghívja a Road objektum forwardThief(t: Thief) függvényét saját magával. Ha az invulnerable értéke nem nulla, akkor csökkenti.
+void choose(j: Junction, directions: Direction[]) Meghívja a Junction exitThief(t: Thief, dir: Direction[]) függvényét saját magával és a nextDirectionnel. +void incoming(v: Vehicle) Meghívja a Vehicle steponThief függvényét. +void exit() Meghívja a City gameOver() függvényét. +void hide(h: HideOut) Meghívja a HideOut accept() függvényét, majd a City win() függvényét. +void stepOnPolice() 2010-05-12
89
Led Zeppelin Ha a tolvaj sebezhető, akkor meghívja a City gameOver() függvényét. Ha sebezhetetlen, akkor elpusztítja a rendőrt, és átteszi magát a következő útra. +void stepOnCivilian() Meghívja a City gameOver() függvényét.. +void stepOnThief(t: Thief) Üres függvény. +void stepOnBunny() Az invulnerable értékét 15-re állítja. +void catchVehicle() Ha a tolvaj sebezhető, rálépteti a rendőrt, ha sebezhetetlen, meghívja a City gameOver() függvényét.
7.1.9 Road A város útjait megvalósító osztály. • Felelősség A rajta levő járművet továbbküldi a következő útra a jármű kérésére. • Ősosztályok Nincs • Interfészek Nincs • Attribútumok #v: Vehicle referencia az úton levő járműre #roads: RoadSign[] azon utakhoz tartozó útjelzők referenciája, amelyekre az adott útról lépni lehet #view: IView referencia a megjelenítő osztályok interface-ére #x: int az út egyik koordinátája #y: int az út egyik koordinátája • Metódusok +void stepPolice(p: Police) Ha a Road üres, akkor a Police accept(r: Road) függvényét hívja saját magával, ha nem üres, akkor a rajta levő jármű incoming(v: Vehicle) függvényét hívja a kapott paraméterrel.
2010-05-12
90
Led Zeppelin
+void stepCivilian(c: Civilian) Ha a Road üres, akkor a Civilian accept(r:Road) függvényét hívja saját magával, ha nem üres, akkor a rajta levő jármű incoming(v: Vehicle) függvényét hívja a kapott paraméterrel.
+void stepThief(t: Thief) Ha a Road üres, akkor a Thief accept(r: Road) függvényét hívja saját magával, ha nem üres akkor a rajta levő jármű incoming(v: Vehicle) függvényét hívja a kapott paraméterrel.
2010-05-12
91
Led Zeppelin
+void setVehicle(v: Vehicle) Beállítja a Road r referenciáját a kapott paraméterre. +void removeVehicle() A Road értékét nullra állítja, és meghívja a RoadSign-ok reset() függvényeit. Notify()-t hív. +void forwardPolice(p: Police) Meghívja a RoadSign enterPolice(p: Police) függvényét a kapott paraméterrel. +void forwardCivilian(c: Civilian) Meghívja a RoadSign enterCivilian(c: Civilian) függvényét a kapott paraméterrel. +void forwardThief(t: Thief) Meghívja a RoadSign enterThief(t: Thief) függvényét a kapott paraméterrel. +void addRoad(r: Road, roads: RoadSign) Beállítja a roads értékét a kapott paraméterre, és meghívja a RoadSign setNextRoad(r: Road) függvényét r-rel. +void setVehicleFrequency(int f) A jármű sebességét állítja be. +int getX() Az út x koordinátáját adja vissza. +int getY() Az út y koordinátáját adja vissza. +void setX() Az út x koordinátáját állítja be. +void getY() Az út y koordinátáját állítja be. +void setView(view: IView) A view referencia értékét állítja be. +Color color() Az út színét adja vissza. +void notifyRoadSigns() Az úthoz tartozó útjelzőket rajzolja újra. 2010-05-12
92
Led Zeppelin +boolean getVehicle() Ha az úton van jármű igazzal tér vissza, egyébként hamissal. +void ArrayList getDirections() Visszaadja, hogy milyen irányokba lehet továbbhaladni.
7.1.10 HideOut A tolvaj búvóhelyét megvalósító osztály. • Felelősség Ha a tolvaj rálép, amikor üres, megnyeri a játékot. • Ősosztályok Road • Interfészek Nincs •
Attribútumok
• Metódusok +void stepThief(t: Thief) Ha a HideOut üres, meghívja a Thief hide() függvényét, ha nem üres, meghívja a Thief incoming() függvényét.
7.1.11 BorderIn A városba bemenő utat megvalósító osztály. • Felelősség A városból kilépő, majd a városba belépő járművek itt jelennek meg. • Ősosztályok Road • Interfészek Nincs • Attribútumok Nincs • Metódusok Nincs
7.1.12 BorderOut A városból kivezető utakat megvalósító osztály. 2010-05-12
93
Led Zeppelin • Felelősség Az innen továbbhaladó járművek egy bejáraton jelennek meg, kivéve a tolvaj, ami veszíti a játékot, ha kilép. • Ősosztályok Road • Interfészek Nincs • Attribútumok Nincs • Metódusok +void forwardThief(t: Thief) Meghívja a Thief exit() függvényét.
7.1.13 Junction A városban levő útkereszteződéseket megvalósító osztály. • Felelősség A rajta levő járműveket kérésükre továbbküldi a kivezető utak valamelyikére. • Ősosztályok Road • Interfészek Nincs • Attribútumok Nincs • Metódusok +void forwardPolice(p: Police) Meghívja a Police choose(j: Junction, dir: Direction[]) függvényét saját magával, és a válaszható irányok tömbjével +void forwardCivilian(c: Civilian) Meghívja a Civilian choose(j: Junction, dir: Direction[]) függvényét saját magával, és a válaszható irányok tömbjével. +void forwardThief(t: Thief) Meghívja a Thief choose(j: Junction, dir: Direction[]) függvényét saját magával, és a válaszható irányok tömbjével. +void exitPolice(p: Police, dir: Direction) Meghívja a megfelelő irányhoz tartozó RoadSign enterPolice(p: Police) függvényét a kapott paraméterrel. +void exitCivilian(c: Civilian, dir: Direction)
2010-05-12
94
Led Zeppelin Meghívja a megfelelő irányhoz tartozó RoadSign enterCivilian(c: Civilian) függvényét a kapott paraméterrel. +void exitThief(t: Thief, dir: Direction) Meghívja a megfelelő irányhoz tartozó RoadSign enterThief(t: Thief) függvényét a kapott paraméterrel.
7.1.14 RoadSign A forgalmat szabályozó útjelzéseket megvalósító osztály. • Felelősség A Roadok közötti csatoló osztály, amely összeköthet utat úttal (pl. gyalogos-átkelőhely) és utat kereszteződéssel is (pl. jelzőlámpa, STOP tábla). • Ősosztályok Nincs • Interfészek ITickable • Attribútumok #r: Road referencia a következő útra #view: IView referencia a megjelenítőosztályok interfészére -x: int az útjelzőhöz tartozó út egyik koordinátája -y: int az útjelzőhöz tartozó út egyik koordinátája -direction: Direction az útjelző iránya • Metódusok +void onTick() A tick hatására végbemenő eseményeket valósítja meg. +void reset() Absztrakt függvény +void enterPolice(p: Police) Absztrakt függvény +void enterCivilian(c: Civilian) Absztrakt függvény +void enterThief(t: Thief) Absztrakt függvény +void setNextRoad(r: Road) Beállítja a RoadSign r értékét a kapott paraméterre. +void setView(view: IView) Beállítja a view attribútumot a kapott paraméterre. +void setX(x: int) 2010-05-12
95
Led Zeppelin Beállítja az x koordináta értékét. +void setY(y: int) Beállítja az y koordináta értékét. +void setDirection(direction: Direction) Beállítja a direction értékét. +int getX() Az x koordinátát adja vissza. +int getY() Az y koordináta értékét adja vissza. +Direction getDirection() A direction értékét adja vissza.
7.1.15 StopSign A stop táblát megvalósító osztály. • Felelősség Az állapotától függően átengedi, vagy megállítja az előtte levő járművet. • Ősosztályok RoadSign • Interfészek ITickable • Attribútumok -countdown: int számláló, ami tárolja a stop tábla állapotait (0: alap, 1: átenged, 3,2: visszaszámlál)
2010-05-12
96
Led Zeppelin • Metódusok +void onTick() Üres függvény. +void reset() A countdown változót 0-ra állítja. +void enterPolice(p: Police) Meghívja a Road stepPolice(p: Police) függvényét a kapott paraméterrel. +void enterCivilian(c: Civilian) A countdown értékétől függően alapállapotban meghívja a startCountdown()-t, visszaszámlálás állapotban a decCountdown()-t, átenged állapotban pedig a Road stepCivilian(c: Civilian) függvényét a kapott paraméterrel.
+void enterThief(t: Thief) Meghívja a Road stepThief(t: Thief) függvényét a kapott paraméterrel. +void startCountdown() A countdown változó értékét kezdőértékre állítja. +void decCountdown() A countdown változó értékét csökkenti.
7.1.16 Semaphore A jelzőlámpát megvalósító osztály. • Felelősség Az állapotától függően átengedi, vagy megállítja az előtte levő járművet. Tick szabályozza az állapotait. 2010-05-12
97
Led Zeppelin • Ősosztályok RoadSign • Interfészek ITickable • Attribútumok -period: int a szemafor periódusideje -a: int a szemafor zöld intervallumának kezdete -b: int a szemafor zöld intervallumának vége -color: EnumColor a szemafor színe -i: int a periódus eleje óta eltelt tickek száma
• Metódusok +void onTick() Az i változót növeli, ha egyezik a periódusidővel 0-ra állítja. Ha i a zöld intervallumon belül van, akkor a color változót zöldre állítja, egyébként pirosra. +void reset() Üres függvény +void enterPolice(p: Police) Meghívja a Road stepPolice(p: Police) függvényét a kapott paraméterrel. +void enterCivilian(c: Civilian) Ha a color változó zöld, meghívja a Road stepCivilian(c: Civilian) függvényét.
2010-05-12
98
Led Zeppelin
+void enterThief(t: Thief) Meghívja a Road stepThief(t: Thief) függvényét. +EnumColor getColor() A color értékével tér vissza.
7.1.17 NoRoadSign Üres útjelzés • Felelősség Minden forgalmat átenged. • Ősosztályok RoadSign • Interfészek ITickable • Attribútumok Nincs • Metódusok +void onTick() Üres függvény. +void reset() Üres függvény. +void enterPolice(p: Police) Meghívja a Road stepPolice(p: Police) függvényét a kapott paraméterrel. +void enterCivilian(c: Civilian) Meghívja a Road stepCivilian(c: Civilian) függvényét a kapott paraméterrel 2010-05-12
99
Led Zeppelin +void enterThief(t: Thief) Meghívja a Road stepThief(t: Thief) függvényét a kapott paraméterrel
7.2 A tesztek részletes tervei, leírásuk a teszt nyelvén 7.2.1 Civilian (Police) mozgása Roadról Roadra 7.2.1.1 Leírás A tesztpályán megfigyelhető a Civil jármű mozgása útról útra. A Police is ugyanígy lép útról útra Ellenőrzött funkcionalitás, várható hibahelyek 7.2.1.2 A járművek alapvető mozgását teszteljük. 7.2.1.3 Bemenet A test01.txt tartalma: loadmap map01.txt tick exit A map01.txt tartalma: 1 RRRR C-PJOIN 1 1 1 2 N JOIN 1 2 1 3 N JOIN 1 3 1 4 N VEHICLE 1 1 1 VEHICLE 1 3 1 7.2.1.4 Elvárt kimenet Program loaded. "test01.txt" loaded. "map01.txt" loaded. <<Tick>> Civilian [1] moved from [1, 1] to [1, 2]. Police [2] moved from [1, 3] to [1, 4]. Goodbye.
7.2.2 Város elhagyása, érkezés 7.2.2.1 Leírás Azt szimulálja, hogyan hagyja el a várost a civil jármű és hogyan érkezik oda meg. 7.2.2.2 Ellenőrzött funkcionalitás, várható hibahelyek BorderIn és BorderOut osztályok működése.
2010-05-12
100
Led Zeppelin 7.2.2.3 Bemenet A test02.txt tartalma: loadmap map02.txt tick 4 exit A map02.txt tartalma: 1 IO CJOIN 1 1 1 2 N JOIN 1 2 1 1 N VEHICLE 1 1 1 7.2.2.4 Elvárt kimenet Program loaded. "test02.txt" loaded. "map02.txt" loaded. <<Tick>> Civilian [1] moved from <<Tick>> Civilian [1] moved from <<Tick>> Civilian [1] moved from <<Tick>> Civilian [1] moved from Goodbye.
[1, 1] to [1, 2]. [1, 2] to [1, 1]. [1, 1] to [1, 2]. [1, 2] to [1, 1].
7.2.3 Ütközés elkerülés 7.2.3.1 Leírás Megfigyelhető, hogy hogyan kerülik el az ütközést a civil járművek. 7.2.3.2 Ellenőrzött funkcionalitás, várható hibahelyek A gyorsabb autó utoléri az előtte haladó lassabb autót. Ha hibás a működés, akkor az 1. jármű hamarabb lépne, mint a 2. jármű. 7.2.3.3 Bemenet A test03.txt tartalma: loadmap map03.txt tick 3 exit A map03.txt tartalma: 1 RRR CCJOIN 1 1 1 2 N JOIN 1 2 1 3 N 2010-05-12
101
Led Zeppelin VEHICLE 1 1 1 VEHICLE 1 2 2 7.2.3.4 Elvárt kimenet Program loaded. "test03.txt" loaded. "map03.txt" loaded. <<Tick>> <<Tick>> Civilian [2] moved from [1, 2] to [1, 3]. <<Tick>> Civilian [1] moved from [1, 1] to [1, 2]. Goodbye.
7.2.4 Civilian útról kereszteződésbe 7.2.4.1 Leírás Civil járműnek a viselkedését figyelhetjük meg útjelzőnél, és az irányválasztást. 7.2.4.2 Ellenőrzött funkcionalitás, várható hibahelyek A gyorsabb autó utoléri az előtte haladó lassabb autót. Ha hibás a működés, akkor az 1. jármű hamarabb lépne, mint a 2. jármű. 7.2.4.3 Bemenet A test04.txt tartalma: loadmap map04.txt deterministic on tick 6 nextdirection 1 RIGHT tick 5 nextdirection 1 BOTTOM tick exit A map04.txt tartalma: 2 RJRJR ---RC-------JOIN 1 1 1 2 T JOIN 1 2 1 3 N JOIN 1 3 1 4 S 1 2 5 JOIN 1 4 1 5 N JOIN 1 4 2 4 N VEHICLE 1 1 1 7.2.4.4 Elvárt kimenet Program loaded. 2010-05-12
102
Led Zeppelin "test04.txt" loaded. "map04.txt" loaded. StopSign changed state to [alap]. Semaphore changed state to [piros]. Game logic is set to deterministic. <<Tick>> Semaphore changed state to [zold]. StopSign changed state to [visszaszamol]. <<Tick>> <<Tick>> Semaphore changed state to [piros]. <<Tick>> <<Tick>> <<Tick>> StopSign changed state to [beenged]. Semaphore changed state to [zold]. Civilian [1] moved from [1, 1] to [1, 2]. StopSign changed state to [alap]. Vehicle [1]'s next direction is RIGHT. <<Tick>> Civilian [1] moved from [1, 2] to [1, 3]. <<Tick>> Semaphore changed state to [piros]. <<Tick>> <<Tick>> <<Tick>> Semaphore changed state to [zold]. Civilian [1] moved from [1, 3] to [1, 4]. Vehicle [1]'s next direction is BOTTOM. <<Tick>> Civilian [1] moved from [1, 4] to [2, 4]. Goodbye.
7.2.5 Tolvaj mozgása 7.2.5.1 Leírás A tesztpályán a tolvaj mozgása tesztelhető (mozgás, útválasztás, Roadsignok figyelmen kívül hagyása), valamint a pályaelhagyás Thief esetén. 7.2.5.2 Ellenőrzött funkcionalitás, várható hibahelyek A gyorsabb autó utoléri az előtte haladó lassabb autót. Ha hibás a működés, akkor az 1. jármű hamarabb lépne, mint a 2. jármű. 7.2.5.3 Bemenet A test05.txt tartalma: loadmap map05.txt deterministic on nextdirection 0 RIGHT tick 2010-05-12
103
Led Zeppelin nextdirection tick nextdirection tick nextdirection tick nextdirection tick exit
0 RIGHT 0 RIGHT 0 BOTTOM 0 BOTTOM
A map05.txt tartalma: 2 RJRJ -O-O T-----JOIN 1 1 1 2 T JOIN 1 2 1 3 N JOIN 1 3 1 4 S 1 2 5 JOIN 1 2 2 2 N JOIN 1 4 2 4 N VEHICLE 1 1 1 7.2.5.4 Elvárt kimenet Program loaded. "test05.txt" loaded. "map05.txt" loaded. StopSign changed state to [alap]. Semaphore changed state to [piros]. Game logic is set to deterministic. Thief's next direction is RIGHT. <<Tick>> Semaphore changed state to [zold]. Thief moved from [1, 1] to [1, 2]. StopSign changed state to [alap]. Thief's next direction is RIGHT. <<Tick>> Thief moved from [1, 2] to [1, 3]. Thief's next direction is RIGHT. <<Tick>> Semaphore changed state to [piros]. Thief moved from [1, 3] to [1, 4]. Thief's next direction is BOTTOM. <<Tick>> Thief moved from [1, 4] to [2, 4]. Thief's next direction is BOTTOM. <<Tick>> Thief exited the city [2, 4]. Goodbye.
2010-05-12
104
Led Zeppelin
7.2.6 Elkapás 7.2.6.1 Leírás A pálya azt szimulálja, amikor egy Police elkapja a Thiefet. Ellenőrzött funkcionalitás, várható hibahelyek 7.2.6.2 A Police és a Thief ütközésének megvalósítását ellenőrzi. Bemenet 7.2.6.3 A test06.txt tartalma: loadmap map06.txt tick exit A map06.txt tartalma: 1 RR PT JOIN 1 1 1 2 N VEHICLE 1 1 1 VEHICLE 1 2 2 7.2.6.4 Elvárt kimenet Program loaded. "test06.txt" loaded. "map06.txt" loaded. <<Tick>> Police [1] moved from [1, 1] to [1, 2]. Police [1] caught the Thief. Goodbye.
7.2.7 Ütközés 7.2.7.1 Leírás Ez a tesztpálya szimulálja a Thief ütközését Civiliannal vagy Police-szal 7.2.7.2 Ellenőrzött funkcionalitás, várható hibahelyek A Civilian és a Police olyan úton áll, ami nem vezet sehova, ők nem léphetnek. 7.2.7.3 Bemenet A test07.txt tartalma: loadmap map07.txt deterministic on nextdirection 0 RIGHT tick nextdirection 0 RIGHT tick exit 2010-05-12
105
Led Zeppelin
A map07.txt tartalma: 2 RJR -RT-C -PJOIN 1 1 1 2 N JOIN 1 2 1 3 N JOIN 1 2 2 2 N VEHICLE 1 1 1 VEHICLE 1 3 1 VEHICLE 2 2 1 7.2.7.4 Elvárt kimenet Program loaded. "test07.txt" loaded. "map07.txt" loaded. Game logic is set to deterministic. Thief's next direction is RIGHT. <<Tick>> Thief moved from [1, 1] to [1, 2]. Thief's next direction is RIGHT. <<Tick>> Thief crashed with vehicle [2]. Goodbye.
7.2.8 Győzelem 7.2.8.1 Leírás Megfigyelhető, hogy mi történik ha a tolvaj eléri a Hideoutot. 7.2.8.2 Ellenőrzött funkcionalitás, várható hibahelyek Ellenőrizhető, hogy valóban vége van-e a játékban a tolvaj győzelmével. 7.2.8.3 Bemenet A test08.txt tartalma: loadmap map08.txt nextdirection 0 RIGHT tick exit A map08.txt tartalma: 1 RH TJOIN 1 1 1 2 N VEHICLE 1 1 1
2010-05-12
106
Led Zeppelin 7.2.8.4 Elvárt kimenet Program loaded. "test08.txt" loaded. "map08.txt" loaded. Thief's next direction is RIGHT. <<Tick>> Thief moved from [1, 1] to [1, 2]. Thief reached the hideout. Goodbye.
7.2.9 Police Roadról Junctionbe 7.2.9.1 Leírás Megfigyelhető, hogy a rendőr milyen módon lép be a kereszteződésekbe és az útválasztás. Ellenőrzött funkcionalitás, várható hibahelyek 7.2.9.2 A gyorsabb autó utoléri az előtte haladó lassabb autót. Ha hibás a működés, akkor az 1. jármű hamarabb lépne, mint a 2. jármű. 7.2.9.3 Bemenet A test09.txt tartalma: loadmap map09.txt deterministic on tick nextdirection 1 BOTTOM tick exit A map09.txt tartalma: 2 RJR -RP---JOIN 1 1 1 2 T JOIN 1 2 1 3 N JOIN 1 2 2 2 N VEHICLE 1 1 1 7.2.9.4 Elvárt kimenet Program loaded. "test09.txt" loaded. "map09.txt" loaded. StopSign changed state to [alap]. Game logic is set to deterministic. <<Tick>> Police [1] moved from [1, 1] to [1, 2]. 2010-05-12
107
Led Zeppelin StopSign changed state to [alap]. Vehicle [1]'s next direction is BOTTOM. <<Tick>> Police [1] moved from [1, 2] to [2, 2]. Goodbye.
7.2.10 A tolvaj felveszi a nyuszit és a rendőr nekiütközik 7.2.10.1 Leírás Megfigyelhető, hogy a tolvaj felveszi a nyuszit és halhatatlanságot szerez. 7.2.10.2 Ellenőrzött funkcionalitás, várható hibahelyek A rendőr nem tudja elkapni a tolvajt. 7.2.10.3 Bemenet A test10.txt tartalma: loadmap map10.txt nextdirection 0 RIGHT tick nextdirection 0 RIGHT tick exit A map10.txt tartalma: 2 RRJ --R TB--P JOIN 1 1 1 2 N JOIN 1 2 1 3 N JOIN 2 3 1 3 N VEHICLE 1 1 1 VEHICLE 2 3 2 7.2.10.4 Elvárt kimenet Program loaded. "test10.txt" loaded. "map10.txt" loaded. Thief's next direction is RIGHT. <<Tick>> Thief gained invulnerability. Thief moved from [1, 1] to [1, 2]. Thief's next direction is RIGHT. <<Tick>> Thief moved from [1, 2] to [1, 3]. Police [3] moved from [2, 3] to [1, 3]. Police [3] crashed. Goodbye. 2010-05-12
108
Led Zeppelin
7.2.11 A tolvaj felveszi a nyuszit és a rendőrnek ütközik 7.2.11.1 Leírás Megfigyelhető, hogy a tolvaj felveszi a nyuszit és halhatatlanságot szerez, de nekiütközik egy rendőrnek. 7.2.11.2 Ellenőrzött funkcionalitás, várható hibahelyek A tolvaj tud karambolozni a rendőrrel. 7.2.11.3 Bemenet A test11.txt tartalma: loadmap map11.txt tick nextdirection 0 RIGHT tick tick nextdirection 0 RIGHT tick exit A map11.txt tartalma: 2 RRJ --R TB--P JOIN 1 1 1 2 N JOIN 1 2 1 3 N JOIN 2 3 1 3 N VEHICLE 2 3 3 VEHICLE 1 1 2 7.2.11.4 Elvárt kimenet Program loaded. "test11.txt" loaded. "map11.txt" loaded. <<Tick>> Thief's next direction is RIGHT. <<Tick>> Thief gained invulnerability. Thief moved from [1, 1] to [1, 2]. <<Tick>> Police [3] moved from [2, 3] to [1, 3]. Thief's next direction is RIGHT. <<Tick>> Thief destroyed vehicle [3]. Thief moved from [1, 2] to [1, 3]. Goodbye.
2010-05-12
109
Led Zeppelin
7.3 A tesztelést támogató programok tervei A tesztadatokat és az elvárt kimeneteket egyszerű ASCII szövegszerkesztő programmal állítjuk elő (Notepad). A tesztelést úgy végezzük, hogy egy kötegelt állomány lefuttatja a prototípust a megfelelő paraméterekkel, majd a saját készítésű Java-ban írt Komparator programmal összehasonlítja a kapott kimenetet az elvárt kimenettel. Amennyiben a két állomány nem egyezik, megadja, hogy hányadik sorban van az első különbség és 1 visszatérési értéket ad. Amennyiben nincs különbség, 0 visszatérési értéket ad. A Komparator két paramétert kap: a kapott kimenetet és az elvárt kimenetet tartalmazó szöveges állományok neveit. Az egyes tesztpályák batch állományai természetesen meghívhatók egymás után is, így az egész program egyetlen batch állomány futtatásával tesztelhető.
7.4 Változtatások a követelmények módosulása miatt A feladat specifikációjában az alábbi változtatás jelent meg: A húsvéti nyuszi időnként feltűnik az utakon. Ha a rabló elüti a nyuszit, akkor rövid időre immunitást élvez, vagyis a rendőrök ekkor nem tudják elkapni, bárhogyan próbálkoznak is. A változtatást az alábbi elvek szerint készítjük el: • A nyuszi olyan jármű, ami nem mozog. • A civil és a rendőrautó elüti a nyuszit, de ez semmilyen hatással nincs rájuk. • Ha a tolvaj elüti a nyuszit, halhatatlan lesz. Ennek megfelelően a modellben az alábbi változások történtek: • A Vehicle osztályból származtattuk a Bunny osztályt • Az „útról útra” lép szekvenciákat átdolgoztuk. Ha v1 jármű az R1 útról az R2 útra lép: o Ha az R2 út üres, rálép. o Ha az R2 úton van jármű (v2), meghívódik incoming(v Vehicle) metódusa, ami v2 típusától függően visszahívja v1 stepOnBunny(), stepOnCivilian(), stepOnPolice(), stepOnThief() metódusát. • A nyuszi csak bizonyos ideig szerepel a térképen, ezért egy belső változóban tároljuk, hogy mennyi ideig van még fenn, ami minden onTick()-re folyamatosan csökken. A nyuszinak létrehoztunk két tesztesesetet is, amelyekben a tolvaj elüti a nyuszit és ezután ütközik rendőrrel, ill. megpróbálja elkapni egy rendőr.
2010-05-12
110
Led Zeppelin
2010-05-12
111
Led Zeppelin
2010-05-12
112
Led Zeppelin
2010-05-12
113
Led Zeppelin
2010-05-12
114
Led Zeppelin
7.5 Napló Kezdet 2010.03.30.19:00
Időtartam 2 óra
Résztvevők Bodó Szárnyas
2010.03.31.10:00
2 óra
Szárnyas
2010.03.31.12:00
5 óra
2010.03.31.12:00
7 óra
Bodó Szárnyas Pál
2010.03.31.16:00
3 óra
2010.04.01.10:00
1 óra
2010-05-12
Bodó Szárnyas Szárnyas
Leírás Feladatváltoztatás miatti módosítások kitalálása Tesztelést támogató programok tervei Tesztesetek Osztályok és metódusok tervei Activity és szekvenciadiagramok Javítások, napló, nyomtatás
115
Led Zeppelin
8. Prototípus beadása 8.1
Fordítási és futtatási útmutató
Az szglab4_proto.zip állomány tartalmazza a program forráskódját, a fordításhoz, futtatáshoz és a dokumentáció generálásához szükséges parancsfájlokat. A futtatható állományok és a dokumentáció elkészítéséhez az első lépés a .zip fájl kicsomagolása. Az így kapott állományok és mappák listája az alábbiakban látható.
8.1.1
Fájllista
A batch mappa tartalma: Fájl neve 1-compile.bat 2-proto.bat 3-doc.bat compile_komparator.bat run.bat run_komparator.bat set_java_home.bat
Méret 322 566 340 190 83 92 66
Keletkezés ideje 2010.04.15. 02:43 2010.04.15. 02:35 2010.04.15. 02:44 2010.04.15. 02:32 2010.04.15. 02:30 2010.04.15. 02:31 2010.04.15. 02:34
A proto mappa tartalma: Keletkezés ideje Fájl neve Méret map01.txt 93 2010.03.17. 00:44 map02.txt 58 2010.04.14. 10:32 map03.txt 75 2010.04.08. 18:04 map04.txt 132 2010.04.08. 18:04 map05.txt 128 2010.04.08. 18:06 map06.txt 57 2010.04.08. 18:06 map07.txt 116 2010.04.08. 18:08 map08.txt 42 2010.04.08. 18:09 map09.txt 86 2010.04.14. 18:30 map10.txt 101 2010.04.14. 18:54 map11.txt 101 2010.04.14. 19:27 result01.txt 157 2010.04.14. 19:35 result02.txt 270 2010.04.15. 02:43 result03.txt 177 2010.04.15. 02:43 result04.txt 817 2010.04.15. 02:43 result05.txt 659 2010.04.15. 02:43 result06.txt 144 2010.04.15. 02:43 result07.txt 253 2010.04.15. 02:43 result08.txt 170 2010.04.15. 02:43 result09.txt 308 2010.04.15. 02:43 result10.txt 310 2010.04.15. 02:43 result11.txt 337 2010.04.15. 02:43 test01.txt 164 2010.04.15. 02:43 test02.txt 282 2010.04.08. 18:03 test03.txt 186 2010.04.08. 18:04 2010-05-12
Tartalom Prototípus fordítása Prototípus futtatása Dokumentáció generálása Komparator fordítása Teszteset futtatása Komparator futtatása JAVA_HOME beállítása
Tartalom Térkép Térkép Térkép Térkép Térkép Térkép Térkép Térkép Térkép Térkép Térkép Elvárt kimenet Elvárt kimenet Elvárt kimenet Elvárt kimenet Elvárt kimenet Elvárt kimenet Elvárt kimenet Elvárt kimenet Elvárt kimenet Elvárt kimenet Elvárt kimenet Teszteset Teszteset Teszteset 116
Led Zeppelin test04.txt test05.txt test06.txt test07.txt test08.txt test09.txt test10.txt test11.txt Az szglab4 mappa tartalma: Fájl neve szglab4.manifest
850 684 151 264 178 320 323 352
2010.04.08. 2010.04.14. 2010.04.14. 2010.04.08. 2010.04.14. 2010.04.14. 2010.04.14. 2010.04.14.
18:05 21:43 21:45 18:08 21:44 21:35 21:42 21:33
Teszteset Teszteset Teszteset Teszteset Teszteset Teszteset Teszteset Teszteset
Méret Keletkezés ideje 26 2010.04.15. 02:15
Az szglab4\szglab4 mappa tartalma: Fájl neve Méret Keletkezés ideje BorderIn.java 117 2010.04.14. 00:35 BorderOut.java 365 2010.04.14. 18:21 Bunny.java 1421 2010.04.14. 20:05 City.java 9108 2010.04.14. 20:07 Civilian.java 1876 2010.04.14. 19:19 Deterministic.java 488 2010.04.14. 00:09 Direction.java 73 2010.03.17. 00:44 EnumColor.java 59 2010.03.17. 13:11 HideOut.java 477 2010.04.14. 20:11 ITickable.java 104 2010.03.17. 00:44 Junction.java 1907 2010.04.14. 18:54 Logger.java 880 2010.04.14. 20:10 Main.java 155 2010.04.13. 19:35 NoRoadSign.java 832 2010.04.14. 19:22 Police.java 1821 2010.04.14. 19:43 Road.java 3154 2010.04.14. 20:01 RoadSign.java 1141 2010.03.17. 21:08 Semaphore.java 2489 2010.04.14. 19:23 StopSign.java 1924 2010.04.14. 21:38 Thief.java 2871 2010.04.14. 19:53 Timer.java 869 2010.04.14. 17:41 Vehicle.java 3051 2010.04.14. 21:40
Tartalom Bemenő út osztály Kimenő út osztály Húsvéti nyuszi osztály Város osztály Civil jármű osztály Determinisztikusság osztály Irány enumeráció Szín enumeráció Rejtekhely osztály Időzíthető interfész Naplózó osztály Kereszteződés osztály Main osztály, belépési pont Üres útjelző osztály Rendőr osztály Út osztály Útjelző tábla osztály Jelzőlámpa osztály Stoptábla osztály Tolvaj osztály Időzítő objektum Jármű osztály
A komparator mappa tartalma: Fájl neve Méret Keletkezés ideje komparator.manifest 29 2010.04.14. 21:05 A komparator\komparator mappa tartalma: Fájl neve Méret Keletkezés ideje Main.java 1731 2010.04.14. 21:37
2010-05-12
Tartalom manifest állomány
Tartalom manifest állomány
Tartalom Java osztály
117
Led Zeppelin
8.1.2
Fordítás
A fordítás a batch mappában található 1-compile.bat állomány futtatásával végezhető. A JAVA_HOME környezeti változó értéke a set_java_home.bat állományban a SET JAVA_HOME="C:\Program Files\Java\jdk1.6.0_17" parancs megfelelő módosításával állítható be. A pontos elérési út és a jdk utáni verziószám természetesen függ a használt konfigurációtól. Sikeres fordítás esetén létrejönnek a class fájlok, az szglab4.jar és a komparator.jar állomány.
8.1.3
Futtatás
Sikeres fordítás után a kapott szglab4.jar állomány a run.bat, a komparator.jar a run_komparator.jar futtatásával indítható. A java.exe is a JDK része, ezért a JAVA_HOME környezeti változó beállítására a fordításnál leírtak ide is érvényesek. A prototípussal szemben támasztott elvárás, hogy az összes tesztesetet képes legyen ellenőrizni, ezt szintén egy batch fájllal valósítottuk meg: a 2-proto.bat futtatásával minden tesztesetre meghívódik a run.bat és a run_komparator.bat megfelelő paraméterekkel. A futtatás végén látható, hogy mely tesztesetek futottak le sikeresen, ill. melyekben van különbség és ez a kimenet hányadik sorában jelentkezik először. Javadoc dokumentáció a 3-doc.bat futtatásával generálható.
8.2
Tesztek jegyzőkönyvei
Először a Komparator program esett át alapos tesztelésen, különböző méretű, különböző számú sorból álló és különféle helyeken álló állományokkal. A Komparator tesztelése különösen fontos, hiszen a többi teszteset tesztelése az összehasonlítás helyes működését feltételezi. A tesztelés során fellelt hibák javításra kerültek és nekiláttunk a prototípus tesztelésének. A tesztelést a csapat közösen végezte, a javításokhoz mindenki hozzájárult az ötleteivel és közösen dolgoztuk ki a javítást is.
8.2.1
Civilian (Police) mozgása Roadról Roadra
8.2.1.1 Leírás A tesztpályán megfigyelhető a Civil jármű mozgása útról útra. A Police is ugyanígy lép útról útra 8.2.1.2 Ellenőrzött funkcionalitás, várható hibahelyek A járművek alapvető mozgását teszteljük. 8.2.1.3 Kapott kimenet Program loaded. 2010-05-12
118
Led Zeppelin "test01.txt" loaded. "map01.txt" loaded. <<Tick>> Civilian [1] moved from [1, 1] to [1, 2]. Police [2] moved from [1, 3] to [1, 4]. Goodbye. Tesztelő neve Teszt eredménye Lehetséges hibaok Változtatások
8.2.2
Bodó Péter, Pál Tamás, Szárnyas Gábor A teszteset helyesen működött. -
Város elhagyása, érkezés
8.2.2.1 Leírás Azt szimulálja, hogyan hagyja el a várost a civil jármű és hogyan érkezik oda meg. 8.2.2.2 Ellenőrzött funkcionalitás, várható hibahelyek BorderIn és BorderOut osztályok működése. Kapott kimenet 8.2.2.3 Program loaded. "test02.txt" loaded. "map02.txt" loaded. <<Tick>> Civilian [1] moved from <<Tick>> Civilian [1] moved from <<Tick>> Civilian [1] moved from <<Tick>> Civilian [1] moved from Goodbye. Tesztelő neve Teszt eredménye Lehetséges hibaok Változtatások
8.2.3
[1, 1] to [1, 2]. [1, 2] to [1, 1]. [1, 1] to [1, 2]. [1, 2] to [1, 1].
Bodó Péter, Pál Tamás, Szárnyas Gábor A teszteset helyesen működött. -
Ütközés elkerülés
8.2.3.1 Leírás Megfigyelhető, hogy hogyan kerülik el az ütközést a civil járművek. 8.2.3.2 Ellenőrzött funkcionalitás, várható hibahelyek A gyorsabb autó utoléri az előtte haladó lassabb autót. Ha hibás a működés, akkor az 1. jármű hamarabb lépne, mint a 2. jármű. 2010-05-12
119
Led Zeppelin 8.2.3.3 Kapott kimenet Program loaded. "test03.txt" loaded. "map03.txt" loaded. <<Tick>> <<Tick>> Civilian [2] moved from [1, 2] to [1, 3]. <<Tick>> Civilian [1] moved from [1, 1] to [1, 2]. Goodbye. Tesztelő neve Teszt eredménye Lehetséges hibaok Változtatások
8.2.4
Bodó Péter, Pál Tamás, Szárnyas Gábor A teszteset helyesen működött. -
Civilian útról kereszteződésbe
8.2.4.1 Leírás Civil járműnek a viselkedését figyelhetjük meg útjelzőnél, és az irányválasztást. 8.2.4.2 Ellenőrzött funkcionalitás, várható hibahelyek A gyorsabb autó utoléri az előtte haladó lassabb autót. Ha hibás a működés, akkor az 1. jármű hamarabb lépne, mint a 2. jármű. 8.2.4.3 Kapott kimenet Program loaded. "test04.txt" loaded. "map04.txt" loaded. StopSign changed state to [alap]. Semaphore changed state to [piros]. Game logic is set to deterministic. <<Tick>> Semaphore changed state to [zold]. StopSign changed state to [visszaszamol]. <<Tick>> <<Tick>> Semaphore changed state to [piros]. <<Tick>> <<Tick>> <<Tick>> StopSign changed state to [beenged]. Semaphore changed state to [zold]. Civilian [1] moved from [1, 1] to [1, 2]. StopSign changed state to [alap]. Vehicle [1]'s next direction is RIGHT. <<Tick>> Civilian [1] moved from [1, 2] to [1, 3]. <<Tick>> 2010-05-12
120
Led Zeppelin Semaphore changed state to [piros]. <<Tick>> <<Tick>> <<Tick>> Semaphore changed state to [zold]. Civilian [1] moved from [1, 3] to [1, 4]. Vehicle [1]'s next direction is BOTTOM. <<Tick>> Civilian [1] moved from [1, 4] to [2, 4]. Goodbye. Tesztelő neve Teszt eredménye
Lehetséges hibaok
Változtatások
8.2.5
Bodó Péter, Pál Tamás, Szárnyas Gábor 1. A Semaphore és a StopSign üzenetei fordítva érkeztek, és apróbb eltérések voltak a kimenetben az elvárthoz képest. 2. A StopSign működése eltért a várttól. 3. A Semaphore rosszkor váltott színt. 1. Kiderült, hogy a kapott működés helyes, mert az tickables : ITickable heterogén kollekció bejárásakor először az útjelzők onTick() metódusát hívjuk meg (ekkor hívódik meg a Semaphore-é), majd a járművekét (ekkor hívódik meg a StopSign-é, amikor egy jármű be akar lépni egy kereszteződésbe). Gépelési hibák voltak az elvárt kimenetben: a Tickeket összesítő számok ottmaradtak. 2. A StopSign metódusai onTick() metódusa hibásan volt implementálva. 3. A specifikáció szerint a Semaphore az [a, b] intervallumon zöld, itt az [a, b-1] intervallumon volt az. 1. Javítottuk az elvárt kimenetet. 2. Javítottuk a StopSign onTick() metódusát. 3. A Semaphore színváltására óraaritmetikás (modulo, %) összehasonlítást vezettünk be.
Tolvaj mozgása
8.2.5.1 Leírás A tesztpályán a tolvaj mozgása tesztelhető (mozgás, útválasztás, Roadsignok figyelmen kívül hagyása), valamint a pályaelhagyás Thief esetén. 8.2.5.2 Ellenőrzött funkcionalitás, várható hibahelyek A gyorsabb autó utoléri az előtte haladó lassabb autót. Ha hibás a működés, akkor az 1. jármű hamarabb lépne, mint a 2. jármű. 8.2.5.3 Kapott kimenet Program loaded. "test05.txt" loaded. "map05.txt" loaded. StopSign changed state to [alap]. 2010-05-12
121
Led Zeppelin Semaphore changed state to [piros]. Game logic is set to deterministic. Thief's next direction is RIGHT. <<Tick>> Semaphore changed state to [zold]. Thief moved from [1, 1] to [1, 2]. StopSign changed state to [alap]. Thief's next direction is RIGHT. <<Tick>> Thief moved from [1, 2] to [1, 3]. Thief's next direction is RIGHT. <<Tick>> Semaphore changed state to [piros]. Thief moved from [1, 3] to [1, 4]. Thief's next direction is BOTTOM. <<Tick>> Thief moved from [1, 4] to [2, 4]. Thief's next direction is BOTTOM. <<Tick>> Thief exited the city [2, 4]. Goodbye. Tesztelő neve Teszt eredménye Lehetséges hibaok
Változtatások
8.2.6
Bodó Péter, Pál Tamás, Szárnyas Gábor Nem kaptuk meg az elvárt kimenetet, a végén a tolvaj nem hagyta el a várost. Figyelmetlenségből lemaradt egy tick utasítás a bemeneti állományból. A tolvaj ugyanis akkor veszít, ha egy BorderOut mezőről továbblépne Javítottuk a bemeneti állományt.
Elkapás
8.2.6.1 Leírás A pálya azt szimulálja, amikor egy Police elkapja a Thiefet. 8.2.6.2 Ellenőrzött funkcionalitás, várható hibahelyek A Police és a Thief ütközésének megvalósítását ellenőrzi. 8.2.6.3 Kapott kimenet Program loaded. "test06.txt" loaded. "map06.txt" loaded. <<Tick>> Police [1] moved from [1, 1] to [1, 2]. Police [1] caught the Thief. Goodbye. Tesztelő neve 2010-05-12
Bodó Péter, Pál Tamás, Szárnyas Gábor 122
Led Zeppelin Teszt eredménye Lehetséges hibaok Változtatások
8.2.7
A teszt helyesen működött. -
Ütközés
8.2.7.1 Leírás Ez a tesztpálya szimulálja a Thief ütközését Civiliannal vagy Police-szal 8.2.7.2 Ellenőrzött funkcionalitás, várható hibahelyek A Civilian és a Police olyan úton áll, ami nem vezet sehova, ők nem léphetnek. Kapott kimenet 8.2.7.3 Program loaded. "test07.txt" loaded. "map07.txt" loaded. Game logic is set to deterministic. Thief's next direction is RIGHT. <<Tick>> Thief moved from [1, 1] to [1, 2]. Thief's next direction is RIGHT. <<Tick>> Thief crashed with Vehicle [2]. Goodbye. Tesztelő neve Teszt eredménye
Lehetséges hibaok Változtatások
8.2.8
Bodó Péter, Pál Tamás, Szárnyas Gábor Több eltérést is tapasztaltunk az elvárt kimenettől: 1. A hibás frekvenciák miatt a rendőr lépett először, mi pedig nem ezt a működést akartuk tesztelni. 2. Vehicle [0] helyett Thief jelent meg 3. Vehicle [2] helyett Vehicle [1] jelent meg 4. „crashed” helyett „moved” a kimenetben. A be- és kimeneti fájlok figyelmetlenségből fakadó, több apró hibája. Javítottuk a tesztállományt, a térképállományt és az elvárt kimenetet.
Győzelem
8.2.8.1 Leírás Megfigyelhető, hogy mi történik ha a tolvaj eléri a Hideoutot. 8.2.8.2 Ellenőrzött funkcionalitás, várható hibahelyek Ellenőrizhető, hogy valóban vége van-e a játékban a tolvaj győzelmével. 8.2.8.3 Kapott kimenet Program loaded. 2010-05-12
123
Led Zeppelin "test08.txt" loaded. "map08.txt" loaded. Thief's next direction is RIGHT. <<Tick>> Thief moved from [1, 1] to [1, 2]. Thief reached the hideout. Goodbye. Tesztelő neve Teszt eredménye Lehetséges hibaok
Változtatások
8.2.9
Bodó Péter, Pál Tamás, Szárnyas Gábor 1. Első próbálkozásra Exceptiont kaptunk. 2. A tolvaj nem mozgott 1. A térkép sorainak száma hibás volt a térképállományban. 2. Hiányzott a tolvajt determinisztikusan mozgató utasítás a tesztállományból. 1. Javítottuk a térképállományt. 2. A megfelelő utasítást pótoltuk a tesztállományban
Police Roadról Junctionbe
8.2.9.1 Leírás Megfigyelhető, hogy a rendőr milyen módon lép be a kereszteződésekbe és az útválasztás. 8.2.9.2 Ellenőrzött funkcionalitás, várható hibahelyek A gyorsabb autó utoléri az előtte haladó lassabb autót. Ha hibás a működés, akkor az 1. jármű hamarabb lépne, mint a 2. jármű. 8.2.9.3 Kapott kimenet Program loaded. "test09.txt" loaded. "map09.txt" loaded. StopSign changed state to [alap]. Game logic is set to deterministic. <<Tick>> Police [1] moved from [1, 1] to [1, 2]. StopSign changed state to [alap]. Vehicle [1]'s next direction is BOTTOM. <<Tick>> Police [1] moved from [1, 2] to [2, 2]. Goodbye. Tesztelő neve Teszt eredménye
Lehetséges hibaok
2010-05-12
Bodó Péter, Pál Tamás, Szárnyas Gábor 1. A StopSign és a deterministic sor eredménye felcserélődött. 2. A StopSign kétszer állt alapállapotba. 1. Ez nem a program hibája, hanem a StopSign állapotát a konstruktor a létrehozáskor alapállapotba állítja, a determinisztikusságot pedig csak a pályafelépítés után, a 124
Led Zeppelin
Változtatások
következő utasítás állítja be. 2. A kétszeri meghívást a removeVehicle() metódus hibás implementációja okozta. Megváltoztattuk az elvárt kimenetet, javítottuk a metódust.
8.2.10 A tolvaj felveszi a nyuszit és a rendőr nekiütközik 8.2.10.1 Leírás Megfigyelhető, hogy a tolvaj felveszi a nyuszit és halhatatlanságot szerez. 8.2.10.2 Ellenőrzött funkcionalitás, várható hibahelyek A rendőr nem tudja elkapni a tolvajt. 8.2.10.3 Kapott kimenet Program loaded. "test10.txt" loaded. "map10.txt" loaded. Thief's next direction is RIGHT. <<Tick>> Thief gained invulnerability. Thief moved from [1, 1] to [1, 2]. Thief's next direction is RIGHT. <<Tick>> Thief moved from [1, 2] to [1, 3]. Police [3] moved from [2, 3] to [1, 3]. Police [3] crashed. Goodbye. Tesztelő neve Teszt eredménye Lehetséges hibaok Változtatások
Bodó Péter, Pál Tamás, Szárnyas Gábor 1. A Police sorszáma nem 3, hanem 1 volt. 2. Az ütközés nem ment végbe megfelelően. 1. Rosszul határoztuk meg az elvárt kimenetet. 2. A stepOnThief() metódus nem működött helyesen. 1. Megváltoztattuk az elvárt kimenetet. 2. Javítottuk a metódust.
8.2.11 A tolvaj felveszi a nyuszit és a rendőrnek ütközik 8.2.11.1 Leírás Megfigyelhető, hogy a tolvaj felveszi a nyuszit és halhatatlanságot szerez, de nekiütközik egy rendőrnek. 8.2.11.2 Ellenőrzött funkcionalitás, várható hibahelyek A tolvaj tud karambolozni a rendőrrel. 8.2.11.3 Kapott kimenet Program loaded. "test11.txt" loaded. 2010-05-12
125
Led Zeppelin "map11.txt" loaded. <<Tick>> Thief's next direction is RIGHT. <<Tick>> Thief gained invulnerability. Thief moved from [1, 1] to [1, 2]. <<Tick>> Police [3] moved from [2, 3] to [1, 3]. Thief's next direction is RIGHT. <<Tick>> Thief destroyed vehicle [3]. Thief moved from [1, 2] to [1, 3]. Goodbye.
8.3
Értékelés
Tag neve Bodó Péter Pál Tamás Szárnyas Gábor
8.4
Munka százalékban 33 33 34
Napló
Kezdet 2010.04.13. 18:00
Időtartam 4 óra
Résztvevők Szárnyas
2010.04.13. 18:00
3 óra
2010.04.14. 10:00 2010.04.14. 10:00 2010.04.14. 10:00 2010.04.14. 16:00
2 óra 3 óra 6 óra 4 óra
2010.04.14. 20:00
5 óra
Bodó Pál Szárnyas Bodó Pál Bodó Pál Szárnyas Szárnyas
8.5
Leírás Parancsnyelv-értelmező, Pályafelépítés elkészítése Belső algoritmusok implementálása Komparator elkészítése Belső algoritmusok implementálása Belső algoritmusok implementálása Tesztesetek ellenőrzése, javítások
Dokumentáció, batch fájlok, feltöltés
Statisztika
A munkaórák összege a 10. beadandó elkészítésével bezárólag: Tag neve Bodó Péter Pál Tamás Szárnyas Gábor
2010-05-12
Munkaórák 76 75 82
126
Led Zeppelin
9. Grafikus felület specifikációja 9.1
A grafikus interfész
A felhasználói felület AWT-vel készült terve az alábbi képen látható.
1. 2. 3. 4.
9.2 9.2.1
Start Game: elindítja a játékot. Exit Game: kilép a játékból. Játéktér: itt látható a város képe, az utak, az útjelzők és a járművek. Állapotsor: a játékkal kapcsolatos információk helye.
A grafikus rendszer architektúrája A felület működési elve
A grafikus megjelenítéshez push alapelvű architektúrát készítettünk. Ennek a módszernek a lényege, hogy változás esetén a modell értesíti a felületet, ami elvégzi az
2010-05-12
127
Led Zeppelin újrarajzolást. Amennyiben az ablak letakarásra, majd újra megjelenésre kerül, az összes felületelemet újrarajzoljuk. Minden business objektumhoz tartozik egy megjelenítő objektum, ami az IView interfészt valósítja meg (pl. a Roadhoz az IView-t megvalósító RoadView). A business objektum és a megjelenítő objektum kölcsönösen tartalmaznak egymásra referenciát: a RoadView a –road : Road tagváltozóján keresztül le tudja kérdezni az út koordinátáit, és irányát. A Road ugyanakkor egy –view : IView referenciát tartalmaz, tehát nem függ a RoadView osztály implementációjától. A RoadView osztályt bármikor lecserélhetjük egy másik osztályra, amennyiben az is megvalósítja az IView interfészt. Amennyiben változás történik, pl. meghívódik a Road +removeVehicle() : void metódusa, értesíti a hozzá tartozó megjelenítő osztályt annak +notify() : void metódusának meghívásával. A notify() metódus a megfelelő getter metódusok (getX(), getY(), getDirection()) meghívásával lekérdezi az út paramétereit és kirajzolja azt. Inicializáláskor, ill. a z-order megváltozása esetén minden megjelenítő osztály notify() metódusa meghívódik, először az utakat, aztán az útjelzőket, végül a járműveket rajzoljuk ki.
9.2.2
A felület osztály-struktúrája
A frissített, grafikus osztályokat is tartalmazó osztálydiagramot a dokumentum végén mellékeltük.
9.3 9.3.1
A grafikus objektumok felsorolása IView <>
• Felelősség A megjelenítő osztályok megjelenítéséért felelős.
interfésze.
Az
összes
osztály
megvalósítja,
ami
a
• Ősosztályok Nincs • Interfészek Nincs •
Attribútumok
• Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
2010-05-12
128
Led Zeppelin
9.3.2
CView
• Felelősség A megjelenítő osztályok közös absztrakt őse. • Ősosztályok IView • Interfészek Nincs • Attribútumok #View v megjelenítő osztályra mutató referencia • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja. +void setView(View v) megjelenítő osztály beállítása +View getView() megjelenítő osztály lekérdezése
9.3.3
BorderInView
• Felelősség A városba bemenő út megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -borderin: BorderIn Referencia a BorderIn osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
2010-05-12
129
Led Zeppelin
9.3.4
JunctionView
• Felelősség A kereszteződés megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -junction: Junction Referencia a Junction osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.5
RoadView
• Felelősség Az út megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -road: Road Referencia a Road osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.6
HideOutView
• Felelősség A búvóhely megjelenítő osztálya. • Ősosztályok CView 2010-05-12
130
Led Zeppelin • Interfészek <> • Attribútumok -hideout: HideOut Referencia a HideOut osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.7
BorderOutView
• Felelősség A városból kivezető út megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -borderout: BorderOut Referencia a BorderOut osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.8
StopSignView
• Felelősség A stop tábla megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -stopsign: StopSign Referencia a StopSign osztályra.
2010-05-12
131
Led Zeppelin • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.9
SemaphoreView
• Felelősség A szemafor megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -semaphore: Semaphore Referencia a Semaphore osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.10 NoRoadSignView • Felelősség Az üres útjelző megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -noroadsign: NoRoadSign Referencia a NoRoadSign osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
2010-05-12
132
Led Zeppelin
9.3.11 BunnyView • Felelősség A nyuszi megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -bunny: Bunny Referencia a Bunny osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.12 PoliceView • Felelősség A rendőr megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -police: Police Referencia a Police osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.13 CivilianView • Felelősség A civil megjelenítő osztálya. • Ősosztályok CView 2010-05-12
133
Led Zeppelin • Interfészek <> • Attribútumok -civilian: Civilian Referencia a Civilian osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.14 ThiefView • Felelősség A tolvaj megjelenítő osztálya. • Ősosztályok CView • Interfészek <> • Attribútumok -thief: Thief Referencia a Thief osztályra. • Metódusok +void notify() Lekéri a megfelelő attribútumokat a kirajzolandó objektumból, majd ezek alapján kirajzolja.
9.3.15 Road A Road osztály x, y, direction metódusai getter és setter metódusokat kaptak.
2010-05-12
134
Led Zeppelin
9.4
Kapcsolat az alkalmazói rendszerrel
2010-05-12
135
Led Zeppelin
2010-05-12
136
Led Zeppelin
2010-05-12
137
Led Zeppelin
9.4.1 Napló Kezdet 2010.04.20. 19:00
Időtartam 3 óra
Résztvevők Bodó Pál Szárnyas
2010.04.21. 13:00
4 óra
Bodó
2010.04.21. 13:00 2010.04.21. 13:00
4 óra 4 óra
Pál Szárnyas
Leírás Értekezlet. Grafikus architektúra kidolgozása, feladatok kiosztása. Szekvencia diagramok, grafikus felület Objektumkatalógus Működési elv, osztálydiagram, init szekvencia összefűzés
A végleges megvalósításnál úgy döntöttünk, hogy a kódduplikálás minimalizálása érdekében az IView-ből egy CView absztrakt osztályt származtatunk, mely tartalmaz egy referenciát az MVC View osztályára és az ehhez tartozó getter/setter metódusokat is implementálja.
2010-05-12
138
Led Zeppelin
2010-05-12
139
Led Zeppelin
10. Összefoglalás 10.1 Projekt összegzés 10.1.1 Mit tanultunk A tárgyból sok, a későbbiekben is használható ismeretre tettünk szert és elmélyítettük korábbi szoftvertechnológiai és programozásai ismereteinket. Minden bizonnyal az egyetemen és a való világban is használható majd az itt gyakorolt UML modellezés és a Java programozás. Megtanultunk csapatban dolgozni, a feladatokat az egyéni képességeknek és időbeosztásnak megfelelően kiosztani és közös verziókezelő rendszeren (SVN) keresztül szinkronizálni. Ez volt az első próbálkozásunk egy nagyobb probléma modellezésével és ez nem mindig ment könnyen. Ebben nagy segítségnek bizonyult konzulensünk, Budai Péter, akihez konzultáción és e-mailben is mindig fordulhattunk kérdéseinkkel. A gyakorlatban is megismertük a forward és reverse engineering előnyeit, hátrányait és felhasználási lehetőségeit. Az egyik legnagyobb kihívást a dokumentáció elkészítése és hatékony karbantartása okozta, mely során rengeteg tapasztalatot szereztünk. Mostani szemmel nézve már van egy-két dolog, amit megváltoztatnánk a modellben (pl. virtuális függvények további kihasználása), de alapvetően elégedettek vagyunk vele.
10.1.2 Idő és pontszám Mint minden másik csapat, a mi csapatunk is gyakran soknak érezte az elvégzendő teendők mennyiségét a tantárgy kreditszámához képest. Véleményünk szerint komoly szoftverfejlesztési tapasztalatok nélkül se három-, se négyfős csapatban nem lehet fejenként 60 munkaórával teljesíteni a tárgyat. Háromfős csapat esetén a csapattagoknak több munkát kell vállalniuk, négyfős csapat esetén pedig az adminisztrációs és a kommunikációs folyamatok több időt igényelnek. A „Változtatási javaslatok” pontban javaslunk pár előtanulmányi változtatást, amelyekkel a hallgatók felkészültebben érkezhetnek a tárgyra és így hatékonyabban végezhetik a feladatokat és mélyebben is elsajátíthatnak egyes részeket (pl. SVN működése). Általánosságban elmondható, hogy a projekt a félév vége felé egyre kevesebb teendőt jelentett, így a többi tantárgy számonkéréseire is tudtunk koncentrálni. Ebben szerepet játszik az is, hogy sokkal rutinosabbak lettünk a feladatok menedzselésében és kiépítettünk egy ergonomikus és hatékony informatikai „infrastruktúrát” is (batch szkriptek, SVN verziókezelő-rendszer, Java fejlesztőkörnyezet, UML modellező környezet). A pontszámok összhangban álltak az elvégzendő feladatokkal, egyedül a „Prototípus koncepciója” c. részre sokalltuk a 35 pontot, ez a feladat sokkal kevesebb munkát igényelt, mint a következő heti „Részletes tervek” c. 30 pontos munka. Mindkét feladatot jól teljesítettük, így ez nem okozott gondot, csak nem éreztük indokoltnak az elérhető maximális pontszámokat.
2010-05-12
140
Led Zeppelin
10.1.3 Dokumentálás A dokumentálást Microsoft Worddel végeztünk, ami utólag egy jó döntésnek bizonyult. Bár a LaTeX tördelőnyelv használatával tipográfiailag kifogástalanabb dokumentációt állíthattunk volna elő és lehetővé vált volna a képek és a fájllisták automatizált beillesztése, a LaTeX-et csak olyan csapatoknak javasoljuk, ahol minden csapattag készített már komolyabb lélegzetvételű munkát a segítségével.
10.2 A projektre fordított munkaidő A projektre fordított összes munkaidő személyenként és összesen az alábbi táblázatban látható. Bodó Péter Pál Tamás Szárnyas Gábor összesen szkeleton 47 46 47 140 prototípus 76 75 82 233 grafikus 93 90 100 283 összefoglalás 99 97 104 300
Mint az adatokból és a diagramból is látható, sikerült a csapaton belül kiegyensúlyozottan elosztani a feladatokat és mindenki legjobb képességei szerint kivette részét a munkából és hatékonyan töltötte munkáóráit. Ezért úgy érezzük, hogy a hasznos munka is egyenletes eloszlást mutat.
2010-05-12
141
Led Zeppelin
Tag neve Bodó Péter Pál Tamás Szárnyas Gábor
Munka százalékban 33 33 34
10.3 A feltöltött programok forrássorainak száma fázisonként A programsorok számolását az NLOC nyílt forráskódú5 programmal végeztük. feladat szkeleton prototípus grafikus
összes 1466 1667 2857
sorok száma kód komment 764 332 852 421 1321 868
üres 285 278 396
komment (%) 23% 25% 30%
Látható, hogy a beadott állományok mindhárom feladatrészben tartalmaztak legalább 20% kommentet, melynek meglétét mi is igen hasznosnak találtuk a későbbi fejlesztés során.
10.4 Változtatási javaslatok Véleményünk szerint a Szoftver laboratórium 3 tárgyban nagyobb hangsúlyt kellene fektetni az ebben a tárgyban alkalmazott technológiák egyszerű példán keresztül történő bemutatására. Pl. SVN rendszer használata, UML modellező eszköz használata, 5
http://nloc.sourceforge.net/
2010-05-12
142
Led Zeppelin Java projekt fordítása parancssorból (.manifest állomány készítése), Javadoc dokumentáció generálása. A fentiek könnyen megvalósíthatók lennének, ha a jelenlegi 5 helyett hetente lenne laborgyakorlat a tárgyból. Ezeknek a rövid bemutatása és gyakorlása nagyon nagy előnyt jelentene jelen tárgy során, mert nem „élesben”, határidőre kellene ezeknek a működését – sokszor empirikus úton – megtanulni. SVN és UML alapokat ugyan tanultuk Szoftvertechnológiából, de a gyakorlati megvalósításnál sokszor nehezen leküzdhető nehézségekbe ütköztünk. Persze tudjuk, a tárgynak egyik fő célja az, hogy az önálló munkával és a más fejlesztők dokumentációiból történő tanulással megismertessen, mégis úgy éreztük, hogy jól jött volna több segítség is ezekhez.
10.5 Ajánlott feladat Megvalósítandó feladatnak egy One Button Bobhoz6 hasonló ügyességi játékot javaslunk. Ebben a játékban az egyetlen bemenet az egér balgombos kattintása lehet, a figura mozgása az időzítésen, esetleg a gomb nyomva tartásának hosszán múlik. A pályákon interakcióba kerülhet a környezettel is (akadályok, ellenséges szörnyek). A játékos teljesítménye könnyen mérhető a kattintások számán – minél kevesebbet kattint, annál jobb eredményt ért el.
6
http://armorgames.com/play/5286/one-button-bob
2010-05-12
143
Led Zeppelin
10.6 Napló Kezdet 2010.05.12. 12:00
Időtartam 4 óra
Résztvevők Bodó
2010.05.12. 12:00
7 óra
Pál
2010.05.12. 12:00
3 óra
Szárnyas
2010.05.12. 20:00
1 óra
Szárnyas
2010-05-12
Leírás Szekvenciadiagramok frissítése Objektumkatalógus frissítése, tesztesetek javítása Összefoglaló elkészítése Aktualizált dokumentáció összefűzése, hibajavítások
144