08. Részletes tervek - AdjustmentBeaver/szoftlab GitHub Wiki

Részletes tervek

Javítások az interfész-definícióhoz

Bemeneti nyelv

new <palya_nev>

  • Leírás: Betölti a megadott pályát.

  • Opciók: <palya_nev>: a pálya xml fájl elérési útvonala.

load <mentes_nev>

  • Leírás: Betölti a megadott mentésnek megfelelő pályát, illetve játékállapotot.

  • Opciók: <mentes_nev>: a mentés azonosítója.

save <mentes_nev>

  • Leírás: Lementi az éppen betöltött pályát, illetve a jelenlegi játékállapotot. A pálya állapota szerializálva kerül mentésre.

  • Opciók: <mentes_nev>: a mentés azonosítója.

stop

  • Leírás: Szünetelteti az éppen futó játékot.

  • Opciók: -

start

  • Leírás: Folytatja a szüneteltetett játékot. Ilyenkor a játék folyamatosan szimulál, amíg a játék véget nem ér, vagy le nem szüneteltetjük.

  • Opciók: -

exit

  • Leírás: Kilép a játékból.

  • Opciók: -

step <lepes_szam>

  • Leírás: <lepes_szam> mennyiségű szimulációs lépést hajt végre.

  • Opciók: <lepes_szam>: Ennyiszer hívja meg az időzítő step() metódusát - amely a szimulációs lépést végzi.

activate <node_azon>

  • Leírás: Megváltoztatja az azonosítóval megadott Node állapotát, ha ez lehetséges.

  • Opciók: <node_azon>: A Node-hoz tartozó azonosító (a pálya fájlban szereplő neve)

listNodes

  • Leírás: Kilistázza a pályán található csomópontokat.

  • Opciók: -

listTrains

  • Leírás: Kilistázza a pályához tartozó vonatokat.

  • Opciók: -

Kimeneti nyelv

step <lepes_szam>

  • Ütközés esetén: EXPLODE

  • Vonat csomóponthoz érése: <train_azon> - <next_node>

  • Utasok leszállása: <traincart_azon> UNLOAD

  • Utasok felszállása: <traincart_azon> LOAD

  • Pálya teljesítése: MAP_COMPLETED

activate <node_azon>

  • Váltó esetén kiírja az aktív útvonalat: <node_azon> <aktiv_irany>

  • Alagútszáj esetén: <node_azon> CONSTRUCTED/DESTROYED

listNodes

  • Kilistázza a pályán található csomópontokat: <node_azon>

listTrains

  • Kilistázza a pályához kapcsolódó vonatokat: <train_azon>

stop

  • Sikeres végrehajtás esetén: STOP

start

  • Sikeres végrehajtás esetén: START

new

  • Sikeres létrehozás: MAP_CREATED

  • Sikertelen létrehozás: ERROR_AT_MAPCREATION

save

  • Sikeres végrehajtás esetén: MAP_SAVED

  • Sikertelen végrehajtás esetén: ERROR_AT_MAPSAVING

load

  • Sikeres beöltés: MAP_LOADED

  • Sikertelen betöltés: ERROR_AT_MAPLOADING

Osztályok és metódusok tervei

Color

  • Felelősség

    • A vonatelemek és az állomások (Station, LoaderStation) rendelkeznek színnel. Ezt reprezentálja ez az osztály. A kocsik rendelkeznek egy isEmpty metódussal, amivel lekérdezhető, hogy az adott kocsi üres-e.

    • A Color egy enumeráció, ami tartalmazza a színeket.

Coordinate

  • Felelősség

    • A pályán elhelyezett elemek helyzetét leíró osztály. A játék folytonosan van szimulálva, az elemek közötti távolság, az egyes kis időegységek alatt bekövetkezett elmozdulások számításában van szerepe. A szimulációs modell szerves részét képzi. (nem csak a grafikai megjelenéshez kapcsolódik)
  • Attribútumok

    • -x: int

    • -y: int

  • Metódusok

    • +Coordinate(x: int, y: int) - Konstruktor, megadott paraméterekkel létrehozza a korrdinátát

    • +getX() - Getter x koordinátához

    • +getY() - Getter y koordinátához

Game

  • Felelősség

    • Inicializálja a játékhoz szükséges objektumokat. Létrehozza a SimulationTimer és a MapManager objektumokat. Rajta keresztül állítható a játék állapota.
  • Attribútumok

    • -timer: SimulationTimer - Szimulációs időzítő, a Game hozza létre.

    • -mapManager: MapManager - A Game hozza létre, pályák menedzseléséhez.

  • Metódusok

    • +Main(args: string[]) - Létrehozza a SimulationTimer és a MapManager objektumokat.

    • +newGame(nextLevel: String):void - Megállítja a szumulációt, majd szól a MapManagernek, hogy hozzon létre egy új pályát, végül pedig elindítja azt.

    • +startGame(): void - Elindítja a szimulációt. A SimulationTimernek start üzenetet küld, aminek hatására elindul az időzítés.

    • +stopGame(): void - Megállítja a szimulációt. A SimulationTimernek stop üzenetet küld, aminek a hatására az időzítés megáll.

    • +resumeGame(): void - A játék előző állapota alapján dönt. Ha futott a játék akkor újra elindítja azt.

LoaderStation

  • Felelősség

    • Az ilyen típusú állomásokról az utasok felszállnak a felszállás szabályának megfelelő kocsiba.
  • Ősosztályok

    • Station
  • Attribútumok

    • -color: Color - Az állomás színe. Ilyen színű kocsikra szállhatnak fel az utasok az állomásról.
  • Metódusok

    • +LoaderStation(color: Color) - Konstruktor. Beállítja az állomás színét.

Map

  • Felelősség

    • A pálya tartalmazza a mindenkori játékállást. A pályán találhatóak meg a vonatok és a csomópontok, illetve a pálya adminisztrációjához szükséges objektumok (Statistics, TrainScheduler).
  • Attribútumok

    • -stat: Statistics - A játék közbeni statisztika. pl.: mennyi kocsi üres.

    • -trainList: List<Train> - A játékban részt vevő vonatok.

    • -nodeList: List<Node> - Adminisztrációs lista a csomópontokról.

    • -notifiableList: List<Notifiable> - Azok az objektumok találhatóak ebben a listában akik feliratkoztak az időzítőre (TrainScheduler, CollisisonCheck).

    • -trainScheduler: TrainScheduler - A vonatok elindításáért felelős objektum.

  • Metódusok

    • +Map(): - Konstruktor

    • +subscribe(timer: SimulationTimer):void - A maphoz tartozó vonatok, TrainScheduler feliratkoztatása az időzítőre.

    • +addNode(n: Node):void - Csomópont hozzáadása a nodeListhez.

    • +addTrainList(t: List<Train>): void - Trainlist hozzáadása a pályához.

    • +addStatistics(s: Statisctics): void - Statisztika hozzáadása a pályához.

    • +addNotifiable(n: Notifiable): void - Hozzáad egy értesítendő objektumot a pályához.

    • +getTrainList(): List<Train> - Visszaadja a vonatokat

    • +activateNode(c: Coordinate): void - Megkeresi ahhoz a koordinátához legközelebb eső Node-ot (egy környezeten belül), amit kapott. Ezen meghívja az activate() függvényt, amire az adott node logkája végrehajtódik

MapBuilder

  • Felelősség

    • Ő végzi az I/O műveleteket. Létrehozza magát a pályát és feltölti a rajta lévő, és a hozzá kapcsolódó elemekkel.
  • Metódusok

    • +MapBuilder(mapName: String): void - Konstruktor. Beállítja a felépíteni kívánt pálya nevét.

    • +buildMap(g: Game): Map - Létrehozza a pálya működéséhez szükséges összetevőket és elvégzi a fájl olvasás műveletet az adatok feldolgozásával.

MapManager

  • Felelősség

    • A pályák kezeléséért felelős. Képes menteni egy játékállást, betölteni egy korábban lementettet, vagy újat, és kezeli az ezzel járó feliratkoztatásokat (ld. subscription szekvencia). Tárolja a jelenlegi Map-ot.
  • Attribútumok

    • -timer: SimualtionTimer - A MapManager ezen az attribútumon keresztül éri el az időzítőt.

    • -map: Map - A létrehozott pálya.

  • Metódusok

    • +MapManager(timer: SimualtionTimer, g: Game): Konstruktor, amiben beállításra kerül az időzítő és a játék.

    • +newMap(mapName: String): void - Betölti a paraméterül kapott nevű pályát egy MapBuilder segítségével.

    • +saveMap(mapName: String): void - Lementi az aktuális játékállást a paraméterben kapott néven.

    • +loadMap(mapName: String): void - Betölt egy korábban lementett játékállást.

Node

  • Felelősség

    • A TrainPartok következő úticélját határozza meg. A csomópontok gráfot alkotnak.
  • Attribútumok

    • -neighborNodeList: List<Node> - A szomszédos csomópontokat tárolja.

    • -lastTrain: Train - A csomóponttal utoljára kapcsolatba lépett vonat.

    • -pos: Coordinate - A Node helyzetét adja meg.

  • Metódusok

    • +Node() - Konstruktor

    • +accept(te: TrainEngine): void - A csomópont irányítja a TrainEnginet a következő állomás felé, ha az létezik.

    • +accept(tc: TrainCart): void - A csomópont irányítja a TrainCartot a következő állomás felé, ha az létezik.

    • +accept(tc: TrainCoalWagon): void - A csomópont irányítja a TraiCoalWagont a következő állomás felé, ha az létezik.

    • route(): Node - Megnézi honnan jött az aktuális TrainPart, és a másik node felé irányítja, mint ahonnan jött.

    • +activate(): void - A felhaszáló ezzel tudja a node-hoz tartozó logikát aktiválni. Alapértelmezetten ugyan semmi nem történik, de a leszármazottak felüldefiniálják ezt.

    • checkForTrain(): boolean - Ellenörzi, hogy van-e a node-on vonat jelenleg.

    • A node minden parttal történt interakciónál megjegyzi, hogy mi volt a hozzá tartozó vonat. (lastTrain) Az ellenőrzésnél lekéri ennek a vonatnak az utolsó partját, és megnézi, annak a getNextNode() függvényével, hogy mi a következő célja. Ha nem a node saját maga, akkor már nincs rajta a vonat.

Notifiable

  • Felelősség

    • Interfész. Felületet nyújt az időzítőre feliratkozni kívánó osztályok számára.
  • Metódusok

    • +update(): boolean - Az időzítéskor meghívott metódus. A SimualtionTimer hívja meg a Notifiable-t megvalósító osztályoknak.

SimulationTimer

  • Felelősség

    • A szimuláció időzítéséért felelős. Meghatározott időközönként értesíti a szimulációban részt vevő objektumokat.
  • Metódusok

    • +SimualtionTimer() - Inicializálja az időzítőt.

    • +start(): void - Elindítja az időzítőt.

    • +stop(): void - Megállítja az időzítőt.

    • +addSubscriber(sub: Notifiable): void - Az ütemezni kívánt objektumokhoz adja a paraméterül kapott Notifiable interfészt megvalósító interfészt.

    • +deleteSubscription(): void Törli a feliratkozásokat.

    • +step(): void - Lépteti a szimunálcót. Egy szimulációs lépést hajt végre.

SpecialPlace

  • Felelősség

    • Ezeken a speciális csomópontokon tud a felhasználó alagútszájakat építeni. A pályán maximum 2 alagútszáj lehet aktív, amiket alagút köt össze. Megépített alagútszájat le is lehet rombolni, ha nem tartózkodik az alagútban vonat.
  • Ősosztályok

    • Node
  • Attribútumok

    • -spList: List<SpecialPlace> - Az összes SpecialPlace-et tartalmazó lista.
  • Metódusok

    • +SpecialPlace(spList: List<SpecialPlace>) - Konstruktor. Beállítja, hogy az összes SpecialPlace ismerje az összes többi SpecialPlacet.

    • +activate(): void Elvégzi az alagútszáj építéséhez köthető logikát, ha az lehetséges. Egy privát statikus változóban tárolódik, hogy mely szájak vannak felépítve a pályán (maximum 2 lehetséges). Ez alapján eldönti, hogy lehetséges-e. Alagútszáj lerombolásánál gondoskodik róla, hogy csak akkor lehessen lerombolni, ha az alagútban nem tartózkodik vonat.

Speed

  • Felelősség

    • A vonat sebességét leíró osztály.
  • Attribútumok

    • speed: int - A sebesség
  • Metódusok

    • +Speed(speed:int) - Konstruktor

    • +getSpeed() - Getter a sebességhez

Station

  • Felelősség

    • Ezeken a helyeken tudnak leszállni az emberek a kocsiból, de csak akkor, ha az állomás színével megegyező az adott kocsi, és nincs előtte nem üres. Ha adott színű kocsiból több van egymás után, az összes kiürül.
  • Ősosztályok

    • Node
  • Attribútumok

    • -color: Color - Az állomás színe.
  • Metódusok

    • +Station(color: Color) - Konstruktor. Beállítja az állomás színét.

Statistics

  • Felelősség

    • A játékról vezet statisztikát. A TrainPart-ok őt értesítik, ha felrobbantak vagy kiürültek.
  • Attribútumok

    • -numberOfCarts: Integer - Az összes kocsi száma a pályán.

    • -emptyCarts: Integer - Üres kocsik száma.

    • -mapList: List<String> - Pályák hogyan következnek egymás után.

    • -currentLevel: String - Az aktuális szint.

    • -game: Game - Rajta keresztül módosítható a játék állapota. (pl. új játék indítása).

  • Metódusok

    • +Statistics(g: Game) - Konstruktor. Beállítja a game attribútumot.

    • +trainExplode(): void - Train hívja amikor felrobban. Kiadja a pálya újraindítása parancsot.

    • +cartUnloaded(): void - Egy TrainPart hívja, amikor kiürült. Vizsgálja, hogy sikerült-e teljesíteni a pályát.

    • +cartLoaded(): void - Egy TrainPart hívja, amikor utasok szálltak fel rá.

Switch

  • Felelősség

    • Egy kereszteződésben ezek segítségével állítható, merre szeretnénk, hogy a vonat továbbhaladjon. Ha a két irány, amelyek irányába állítható a váltó, egyikéből jön a vonat, mindig a harmadik irányba halad tovább. A váltó nem állítható, ha vonat tartózkodik rajta.
  • Ősosztályok

    • Node
  • Attribútumok

    • -rootNode: void - A váltó gyökércsomópontja, ahonnan az elágazás indul.

    • -activeNode: Node - A váltó aktív kimenete.

  • Metódusok

    • route(): void - Meghatározza a vonat továbbhaladási irányát. Ha a vonat a root felől jön, akkor az aktív node felé irányíja, ha pedig a másik irányok valamelyikéből, akkor a root felé fog vezetni az irány.

    • +activate(): void - Elvégzi a váltó állításhoz szükséges logikát. Kiválasztja a haladási irányt, ha a nem tartozkódik rajta vonat.

Train

  • Felelősség

    • A vonat felrobbantásáért felelős, ekkor hívja a Statistics osztály figyelő függvényét. Tárolja a kocsikat, mozdonyt. Mozgatja saját magát.
  • Interfészek

    • Notifiable
  • Attribútumok

    • -trainPartList: List<TrainPart> - Tartalmazza, hogy milyen egységekből áll a vonat.

    • -trainList: List<Train> - Vonatok listája, ütközésvizsgálathoz.

    • -colorToUnload: Color - A következő színű kocsi, amit ki lehet üríteni.

    • -running: Boolean - A vonat a pályán van-e.

    • -stat: Statisctics - Statisztikát kezelő objektum.

  • Metódusok

    • +Train(s: Staistics, trainList: List<Train>) - Konstruktor. Beállítja a statistics attribútumot.

    • +move(): void - Mozgatja a vonatelemeket.

    • +explode(): void - Felrobbantja a vonatot, megsemmisíti a vonatelemeket, triggereli Statistics-ot.

    • +isRunning(): boolean - Visszadja, hogy a vonat a pályán van-e már.

    • +addPart(p: TrainPart): void - Hozzáad egy kocsit a vonathoz.

    • +getColor(): Color - Visszaadja az utolsó nem üres vonatelem színét.

    • +startTrain(): void - Elindítja a vonatot.

    • +checkCollision(): void - Ütközés vizsgálata a vonatok között. A vonat minden TrainPart-ját összehasonlítja a az összes többi vonat TrainPart-jával. Minden szimulációs lépésben végrehajtódik.

    • +getPartList(): List<TrainPart> - Visszaadja a Train-hez tartozó TrainPartok listáját.

    • +update(): void - A Notifiable interfész megvalósításából származik. Ezen belül történik a mozgatás (move()) és az ütközésvizsgálat (checkCollision()) műveletek hívása.

TrainCart

  • Felelősség

    • A vonat része a kocsi, utasokat szállít, meghatározott színe van.
  • Ősosztályok

    • TrainPart
  • Attribútumok

    • -color: Color - A kocsi színe.

    • -stat: Statistics - Statisztika a játékról.

    • -train: Train - Megadja melyik vonat része a kocsi.

  • Metódusok

    • +TrainCart(t: Train, st: Statistics, color: Color) - Konstruktor, a Statistics osztályt ismeri, itt kapja meg. Beállításra kerül még, hogy melyik vonathoz tartozik.

    • +getColor(): Color - Visszaadja a kocsi színét.

    • +unload(): void - Kiüríti a kocsit. Ha szükséges beállítja semleges színűre és triggereli a Statistics osztály ürítéseket számláló függvényét.

    • +load(): void - A kocsiba új utasok szállnak fel. Triggerelni a Statistics osztály beszállásokat számontartó metódusát.

TrainCoalWagon

  • Felelősség

    • Szeneskocsi, amit figyelmen kívül kell hagyni az utasok fel- és leszállásánál.
  • Ősosztályok

    • TrainPart
  • Attribútumok

  • Metódusok

TrainEngine

  • Felelősség

    • A vonat része a mozdony, meghatározza a vonat sebességét. Ha több mozdony lenne, tetszőleges logika szerint lehetne vonat eredő sebességét számolni.
  • Ősosztályok

    • TrainPart
  • Attribútumok

    • -speed: Speed - A mozdony sebességét adja meg.
  • Metódusok

    • +TrainEngine(t: Train, s: Speed) - Konstruktor, beállítja a sebességet.

    • +getSpeed(): Speed - Visszaadja a mozdony sebességét.

TrainPart

  • Felelősség

    • Absztrakt bázisosztály vonatelemekhez. A vonatok TrainPartokból állnak, a vonatok mozgatása a TrainPartok mozgatására vezethetö vissza, ezért minden TrainPart mozgatja saját magát. Mozgatáskor érheti el a célpontjául szolgáló adott állomást, és visitor minta szerint meglátogatja, azaz triggereli a node-okat ha elért hozzájuk.
  • Attribútumok

    • -nextNode: Node - Következő cél Node-ja, ahová tart.

    • -prevNode: Node - A Node, amit a TrainPart utoljára elhagyott.

    • -pos: Coordinate - A TrainPart helyzetét határozza meg.

    • -train: Train - A vonat, amihez a TrainPart tartozik.

  • Metódusok

    • +TrainPart(t: Train) - Konstruktor, beállítja, hogy a TrainPart melyik vonathoz tartozik.

    • +move(): void - Mozgatja a TrainPartot. Absztrakt, a leszármazottak valósítják meg.

    • +setNextNode(n: Node): void - Beállítja a kapott Node-ot az adott kocsi következő céljának.

    • +getTrain(): Train - Visszaadja a Vonatot aminek a TrainPart a része.

    • +checkCollision(tp: TrainPart): Boolean - Megvizsgálja, hogy a paraméterül kapott másik trainParttal összeütközött-e.

    • +getPrevNode(): Node - Visszaadja, hogy melyik csomóponton volt utoljára a TrainPart.

    • +getNextNode(): Node - Visszaadja, hogy melyik csomópont felé halad a TrainPart.

    • +isEmpty(): Boolean - Visszaadja, hogy a kocsi üres-e.

TrainScheduler

  • Felelősség

    • Vonatok indításának ütemezéséért felelős osztály. A SimulationTimer triggereli, ekkor ha szükséges indítja a következő vonatot.
  • Interfészek

    • Notifiable
  • Attribútumok

    • -trainList: List<Train> - Vonatok listája.
  • Metódusok

    • +TrainScheduler(list: List<Train>) - Konstruktor, itt kapja meg a vonatok listáját, innen keres vonatot, amit tud indítani.

    • +update(): void Notifiable interfész megvalósítása, itt történik a vonatindítási logika.

A tesztek részletes tervei, leírásuk a teszt nyelvén

Vonatok ütköznek

  • Leírás Vonatok ütközésének vizsgálata. Az ütközés sikeres lezajlásának vizsgálata. Az ütközés utáni műveletek végrehajtása. Két vonat játszik szerepet, egymással összeütköznek. Kereszteződés erre a legalkalmasabb, mivel tetszőlegesen alakítható. Konkrétan: (1,1) koordinátákon a vonatok ütközni fognak.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    Egy vonat kocsija összeüközik egy másik vonat kocsijával. Hiba lehet: Egymáshoz képest tetszőleges pozíciót felvett vonatok esete.

  • Bemenet

    • User input
new utkozes
listTrains
step 2
-   *Pálya*
<level>
  <nodes>
      <node>
          <type>node</type>
          <name>node1</name>
          <position>
              <x>1</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node2</name>
          <position>
              <x>1</x>
              <y>2</y>
          </position>
          <neighbours>
              <neighbour_name>node1</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node3</name>
          <position>
              <x>0</x>
              <y>1</y>
          </position>
          <neighbours>
              <neighbour_name>node4</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node4</name>
          <position>
              <x>2</x>
              <y>1</y>
          </position>
          <neighbours>
              <neighbour_name>node3</neighbour_name>
          </neighbours>
      </node>
  </nodes>
  <trains>
      <train>
          <trainPart>
              <type>engine</type>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>0</startTime>
      </train>
      <train>
          <trainPart>
              <type>engine</type>
          </trainPart>
          <startNode>node3</startNode>
          <startTime>0</startTime>
      </train>
  </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
train1 train2
EXPLODE

Vakvágányra futás

  • Leírás
    Egy vakvágányra futott vonat felrobbanása. A vonatot vakvágányra terelve, az valóban felrobban, a játék véget ér. A test 2 node-ból áll, node1-en kezd, majd átlép node2-re a vonat, következö lépés semmibe vezet, ezért fel kell robbanjon.

  • Ellenőrzött funkcionalitás, várható hibahelyek

  • Bemenet

    • User input
new vakvaganyra_futas
step 2
-   *Pálya*
<level>
    <nodes>
        <node>
            <type>node</type>
            <name>node1</name>
            <position>
                <x>0</x>
                <y>0</y>
            </position>
            <neighbours>
                <neighbour_name>node2</neighbour_name>
            </neighbours>
        </node>
        <node>
            <type>node</type>
            <name>node2</name>
            <position>
                <x>0</x>
                <y>1</y>
            </position>
            <neighbours>
                <neighbour_name>node1</neighbour_name>
            </neighbours>
        </node>
    </nodes>
    <trains>
        <train>
            <trainPart>
                <type>engine</type>
            </trainPart>
            <startNode>node1</startNode>
            <startTime>0</startTime>
        </train>
    </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
train1 node2
EXPLODE

A váltó helyes működése

  • Leírás
    A váltó állapotát megváltoztatjuk, ezzel más irányba tereljük a vonatot. Teszteljük a váltás sikerességét és azt, hogy a váltás sikertelen lesz, ha a vonat a váltón tartózkodik.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    A teszt ellenőrzi, hogy a vonat a váltást követően a váltó által meghatározott irányban halad tovább továbbá, hogy a váltás meghíusul, amikor a vonat rajta tartózkodik. Hibát eredményezhet a váltás, a váltón tartózkodó vonat esetén.

  • Bemenet

    • User input
new valto_mukodes
activate switch1
step 3
activate switch1
-   *Pálya*
<level>
  <nodes>
      <node>
          <type>node</type>
          <name>node1</name>
          <position>
              <x>1</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node2</name>
          <position>
              <x>2</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node1</neighbour_name>
              <neighbour_name>switch1</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>switch</type>
          <name>switch1</name>
          <position>
              <x>3</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
              <neighbour_name>node3</neighbour_name>
              <neighbour_name>node4</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node3</name>
          <position>
              <x>3</x>
              <y>1</y>
          </position>
          <neighbours>
              <neighbour_name>switch1</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node4</name>
          <position>
              <x>4</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>switch1</neighbour_name>
          </neighbours>
      </node>
  </nodes>
  <trains>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>0</startTime>
      </train>
  </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
switch1 node4
train node2
train switch1
train node4

Az alagút helyes működése

  • Leírás
    A tesztben az alagutak helyes működését vizsgáljuk. A felépített pályán található 3 alagútszáj, amiket egymás után aktiválunk, ezekből az első kettő lesz az aktív, mert csak 2 építhető fel. Miután az alagutat elirányítottuk az első alagútszájhoz megpróbáljuk lerombolni az alagutat, ami sikertelen lesz, mert tartózkodik benne vonat.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    Ellenőrzi, hogy a megengedett számú alagútszáj építhető fel és, hogy az alagút nem rombolható le, amíg vonat tartózkodik benne. Hiba lehet az alagútszáj lerombolásának vizsgálatánál, amikor az alagútban tartózkodik vonat.

  • Bemenet

    • User input
new alagut_mukodes
activate specialPlace1
activate specialPlace2
activate specialPlace3  // Tesztelni, hogy nem lehet 3 aktív.
step 3
activate specialPlace1  // Rombolás próba
-   *Pálya*
<level>
  <nodes>
      <node>
          <type>node</type>
          <name>node1</name>
          <position>
              <x>1</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node2</name>
          <position>
              <x>2</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node1</neighbour_name>
              <neighbour_name>specialPlace1</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>specialPlace</type>
          <name>specialPlace1</name>
          <position>
              <x>3</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
              <neighbour_name>specialPlace2</neighbour_name>
              <neighbour_name>specialPlace3</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>specialPlace</type>
          <name>specialPlace2</name>
          <position>
              <x>3</x>
              <y>1</y>
          </position>
          <neighbours>
              <neighbour_name>specialPlace1</neighbour_name>
              <neighbour_name>specialPlace3</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>specialPlace</type>
          <name>specialPlace3</name>
          <position>
              <x>4</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>specialPlace1</neighbour_name>
              <neighbour_name>specialPlace2</neighbour_name>
          </neighbours>
      </node>
  </nodes>
  <trains>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>0</startTime>
      </train>
  </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
specialPlace1 CONSTRUCTED
specialPlace2 CONSTRUCTED
train1 node2
train1 specialPlace1
train1 specialPlace2

Utasok felszállása

  • Leírás
    Elindítunk egy vonatota, aminek az első zöld kocsijából leszállnak az utasok az első állomáson, majd a rá következő állomáson ebbe a kocsiba újra fel fognak szállni utasok. A két kocsira azért van szükség, hogy a játék ne érjen véget az első kocsi kiürülésével.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    Az utasok felszállását végző logika tesztelése. Az utsok csak az állomással megegyező színű a vonat elejétől nézve első üres kocsiba szállhatnak fel.

  • Bemenet

    • User input
new utasok_felszallasa
step 3
-   *Pálya*
<level>
  <nodes>
      <node>
          <type>node</type>
          <name>node1</name>
          <position>
              <x>1</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>stationGreen</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>station</type>
          <name>stationGreen</name>
          <position>
              <x>2</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node1</neighbour_name>
              <neighbour_name>loaderStationGreen</neighbour_name>
          </neighbours>
          <color>GREEN</color>
      </node>
      <node>
          <type>loaderStation</type>
          <name>loaderStationGreen</name>
          <position>
              <x>3</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>stationGreen</neighbour_name>
              <neighbour_name>node2</neighbour_name>
          </neighbours>
          <color>GREEN</color>
      </node>
      <node>
          <type>node</type>
          <name>node2</name>
          <position>
              <x>4</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>loaderStationGreen</neighbour_name>
          </neighbours>
      </node>
  </nodes>
  <trains>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <trainPart>
              <type>trainCart</type>
              <color>GREEN</color>
          </trainPart>
          <trainPart>
              <type>trainCart</type>
              <color>BLUE</color>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>0</startTime>
      </train>
  </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
train1 stationGreen
trainCartGreen1 UNLOAD
train1 loaderStationGreen
trainCartGreen1 LOAD
train1 node2

Utasok leszállása

  • Leírás
    A pályán található egy piros állomás és egy piros és kék kocsiból álló vonat. A vonat az állomás irányába tart. Teszteljük, hogy a piros kocsiból leszállnak-e az utasok az állomáshoz érve.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    A teszt ellenőrzi, hogy az utasok leszálnnak-e a szabálynak megfelelően (A piros kocsiból leszállnak viszont a kékből nem.). Hiba lehet, hogy a leszállás nem történik meg.

  • Bemenet

    • User input
new utasok_leszallasa
step 2
-   *Pálya*
<level>
  <nodes>
      <node>
          <type>node</type>
          <name>node1</name>
          <position>
              <x>1</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>stationRed</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>station</type>
          <name>stationRed</name>
          <position>
              <x>2</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node1</neighbour_name>
              <neighbour_name>node2</neighbour_name>
          </neighbours>
          <color>RED</color>
      </node>
      <node>
          <type>node</type>
          <name>node2</name>
          <position>
              <x>3</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>stationRed</neighbour_name>
          </neighbours>
      </node>
  </nodes>
  <trains>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <trainPart>
              <type>trainCart</type>
              <color>RED</color>
          </trainPart>
          <trainPart>
              <type>trainCart</type>
              <color>BLUE</color>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>0</startTime>
      </train>
  </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
train1 stationRed
traincartRed1 UNLOAD
train1 node2

Játék megnyerése

  • Leírás
    A pályán található egy piros és egy zöld állomás valamint egy vonat piros és zöld kocsikkal. A vonatot elindítjuk a pályán, amin érinteni fogja az állomásokat, ezzel sorban kiürülnek a kocsik, amikor mindegyik leszállás végbement a játékos teljesítette a pályát.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    Statistics osztály megfelelő működését vizsgálja. Feladatai közé tartozik az üres kocsik számának nyilvántartása és a felhasználó értesítése a játék megnyeréséről. A kocsi a kiürülés után értesíti a Statistics osztályt az eseményről. Hiba merülhet fel az értesítés során vagy a nyilvántartásban.

  • Bemenet

    • User input
new jatek_megnyeres
step 3
-   *Pálya*
<level>
  <nodes>
      <node>
          <type>node</type>
          <name>node1</name>
          <position>
              <x>1</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>stationRed</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>station</type>
          <name>stationRed</name>
          <position>
              <x>2</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node1</neighbour_name>
              <neighbour_name>stationGreen</neighbour_name>
          </neighbours>
          <color>RED</color>
      </node>
      <node>
          <type>station</type>
          <name>stationGreen</name>
          <position>
              <x>2</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>stationRed</neighbour_name>
          </neighbours>
          <color>GREEN</color>
      </node>
  </nodes>
  <trains>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <trainPart>
              <type>trainCart</type>
              <color>RED</color>
          </trainPart>
          <trainPart>
              <type>trainCart</type>
              <color>GREEN</color>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>0</startTime>
      </train>
  </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
train1 stationRed
trainCartRed1 UNLOAD
train1 stationGreen
trainCartGreen1 UNLOAD
MAP_COMPLETED

Hosszú vonat a csomópontokon

  • Leírás
    A több csomóponton átívelő vonatok megfelelően lesznek-e elirányítva. Adott 3 hosszú vonat, 4 node 1 váltó, úgy hogy egyszerre a váltó és egy másik node felett is lesz a vonat.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    Váltót ne lehessen állítani ha rajta van a vonat. Megfelelöen irányítsák a node-ok a vonatokat. Hiba lehet ha akkor is lehet váltani ha rajta van a vonat.

  • Bemenet

    • User input
new hosszu
step 2
activate switch1
step 2
-   *Pálya*
<level>
      <nodes>
          <node>
              <type>node</type>
              <name>node1</name>
              <position>
                  <x>0</x>
                  <y>0</y>
              </position>
              <neighbours>
                  <neighbour_name>switch1</neighbour_name>
              </neighbours>
          </node>
          <node>
              <type>switch</type>
              <name>switch1</name>
              <position>
                  <x>1</x>
                  <y>0</y>
              </position>
              <neighbours>
                  <neighbour_name>node1</neighbour_name>
                  <neighbour_name>node2</neighbour_name>
                  <neighbour_name>node3</neighbour_name>
              </neighbours>
          </node>
          <node>
              <type>node</type>
              <name>node2</name>
              <position>
                  <x>2</x>
                  <y>0</y>
              </position>
              <neighbours>
                  <neighbour_name>switch1</neighbour_name>
                  <neighbour_name>node4</neighbour_name>
              </neighbours>
          </node>
          <node>
              <type>node</type>
              <name>node3</name>
              <position>
                  <x>1</x>
                  <y>1</y>
              </position>
              <neighbours>
                  <neighbour_name>switch1</neighbour_name>
              </neighbours>
          </node>
          <node>
              <type>node</type>
              <name>node4</name>
              <position>
                  <x>3</x>
                  <y>0</y>
              </position>
              <neighbours>
                  <neighbour_name>node2</neighbour_name>
              </neighbours>
          </node>
      </nodes>
      <trains>
          <train>
              <trainPart>
                  <type>engine</type>
              </trainPart>
              <trainPart>
                  <type>cart</type>
              </trainPart>
              <trainPart>
                  <type>cart</type>
              </trainPart>
              <startNode>node1</startNode>
              <startTime>0</startTime>
          </train>
      </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
train1 node1
train1 switch1
train1 node2
train1 node4

Vonatok elindítása

  • Leírás
    A pályán két vonat indul el, különböző időkben, azonos belépési ponton. A vonatok az időkülönbség miatt nem fognak ütközni, a pályán haladnak. A pályán 4 csomópont található, amik között a vonatok haladni fognak.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    A teszt ellenőrzi a vonatok indításáért felelős logika működését. Hiba lehet a funkcionalitás nem megfelelő működése.

  • Bemenet

    • User input
new vonatok_inditasa
step 6
-   *Pálya*
<level>
  <nodes>
      <node>
          <type>node</type>
          <name>node1</name>
          <position>
              <x>1</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node2</name>
          <position>
              <x>2</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node1</neighbour_name>
              <neighbour_name>node3</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node3</name>
          <position>
              <x>3</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
              <neighbour_name>node4</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node4</name>
          <position>
              <x>4</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node3</neighbour_name>
          </neighbours>
      </node>
  </nodes>
  <trains>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>3</startTime>
      </train>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>5</startTime>
      </train>
  </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
train1 node2
train1 node3
train2 node2
train1 node4
train2 node3

Pálya betöltése

  • Leírás
    A pályákat leíró XML fájlból olvassuk be a pályát. A teszthez készített pálya 3 csomópontból (2db node, 1db switch) és 2 vonatból áll. Minden egység betöltődését vizsgáljuk.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    A teszt ellenőrzi, hogy a pálya a megfelelő csomópontokkal és vonatokkal jött létre, nézi az összes egység létrejöttét. Hiba lehet, hogy nem minden csomópont vagy vonat töltődik be.

  • Bemenet

    • User input
new palya_betoltese
listNodes
listTrains
-   *Pálya*
<level>
  <nodes>
      <node>
          <type>node</type>
          <name>node1</name>
          <position>
              <x>1</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node2</name>
          <position>
              <x>2</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node1</neighbour_name>
              <neighbour_name>switch1</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>switch</type>
          <name>switch1</name>
          <position>
              <x>3</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
          </neighbours>
      </node>
  </nodes>
  <trains>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>0</startTime>
      </train>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <startNode>node3</startNode>
          <startTime>0</startTime>
      </train>
  </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
node1, node2, switch1
train1, train2

Játékállás mentése

  • Leírás
    Játékállás mentése szerializálásból áll. Ellenörizni úgy lehet hogy lementjük a játékot, majd betöltjük, ahogy az a következö tesztesetnél is történik.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    Mentés sikeressége. Hiba lehet a file i/o esetén szokásosan elöfordulató hibák.

  • Bemenet

    • User input
new jatekallas_mentes
step 1
save save1
-   *Pálya*
<level>
    <nodes>
        <node>
            <type>node</type>
            <name>node1</name>
            <position>
                <x>0</x>
                <y>0</y>
            </position>
            <neighbours>
                <neighbour_name>node2</neighbour_name>
            </neighbours>
        </node>
        <node>
            <type>node</type>
            <name>node2</name>
            <position>
                <x>1</x>
                <y>0</y>
            </position>
            <neighbours>
                <neighbour_name>node1</neighbour_name>
            </neighbours>
        </node>
    </nodes>
    <trains>
        <train>
            <trainPart>
                <type>engine</type>
            </trainPart>
            <startNode>node1</startNode>
            <startTime>0</startTime>
        </train>
    </trains>
</level>
  • Elvárt kimenet
MAP_LOADED
train node1
MAP_SAVED

Játékállás betöltése

  • Leírás
    A játékállás betöltődésének vizsgálatához először elindítunk egy pályát, futtatjuk a szimulációt, mentést hajtunk végre, majd betöltjük az előbb lementett játékállást és folyatjuk a szimulációt. Ellenőrizn tudjuk, hogy a játék abból a helyzetből folytatódik, ahol lementettük. A pályán találhatóak speciális helyes is, ezek állapota is betöltésre kerül.

  • Ellenőrzött funkcionalitás, várható hibahelyek
    A teszt ellenőrzi, hogy egy korábban mentett állás betöltése helyesen működik és minden elem továbbra is létezik a pályán. Hibák lehetnek, hogy a vonat nem onnan folytatja a futását, ahol abbahagyta, ezen kívük az elemek betöltődésének a hiánya is hibát okoz.

  • Bemenet

    • User input
new jatekallas_betoltes
activate specialPlace1
activate specialPlace2
step 2
save save1
load save1
listNodes
listTrains
step 1
-   *Pálya*
<level>
  <nodes>
      <node>
          <type>node</type>
          <name>node1</name>
          <position>
              <x>1</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>specialPlace1</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>specialPlace</type>
          <name>specialPlace1</name>
          <position>
              <x>2</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node1</neighbour_name>
              <neighbour_name>specialPlace2</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>specialPlace</type>
          <name>specialPlace2</name>
          <position>
              <x>3</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>node2</neighbour_name>
              <neighbour_name>specialPlace1</neighbour_name>
          </neighbours>
      </node>
      <node>
          <type>node</type>
          <name>node2</name>
          <position>
              <x>4</x>
              <y>0</y>
          </position>
          <neighbours>
              <neighbour_name>specialPlace2</neighbour_name>
          </neighbours>
      </node>
  </nodes>
  <trains>
      <train>
          <trainPart>
              <type>engine</type>
              <speed>1</speed>
          </trainPart>
          <startNode>node1</startNode>
          <startTime>3</startTime>
      </train>
   </trains>
</level>
  • Elvárt kimenet
MAP_CREATED
specialPlace1 CONSTRUCTED
specialPlace2 CONSTRUCTED
train1 specialPlace1
train1 specialPlace2
MAP_SAVED
MAP_LOADED
node1, specialPlace1, specialPlace2, node2
train1
train1 node 2

Kereszteződésben történő ütközés

  • Leírás
    A vonatok ütközhetnek kereszteződésekben is. A teszt ennek a sikerességét vizsgálja. Ez a teszt megegyezik a legelsö, vonat ütközésre vonatkozó tesztesettel. Az vizsgálja ezt az esetet is.

A tesztelést támogató programok tervei

A teszteket a tesztelő program szöveges bemenetként várja, ezeket előre elkészítve egy-egy szövegfájlban tároljuk.
A tesztelés ellenőrzése szövegösszehasonlításon alapul, ehhez az előre megírt teszteket futtatjuk, majd az összehasonlító programmal összevetjük őket egy előre elkészített szövegfájllal, amiben az elvárt kimenetet listázzuk. Ahol a két fájl között eltérés van, ott a tesztelt működés hibásnak bizonyul. A tesztelést ellenőrző programnak tehát két paramétere van, az első a teszt futása során kapott kimenet szövegfájl elérési útvonala, a második pedig az elvárt kimenet szövegfájl elérési útvonala.
A program a nem egyező sorokat kiírja a standard kimenetre (ha van ilyen), valamint kiírja, hogy hány sor nem egyezett meg az elvárt kimenettel. A tesztelés teljesen automatizálható parancssori szkripttel, amiben lefuttatjuk a teszteket, majd a kapott kimeneteket fájlba írva, azokat az összehasonlító programnak átadva ellenőrizzük az eredményt.

Napló

Kezdet Időtartam Résztvevők Leírás
március 29. 14:30 1 óra Földvári András Osztályok metódusok terveri frissítés, tesztek elkezdése
március 30. 23:00 1 óra Dömötör Szilárd Tesztek: vakvágány, ütközés. IDEA file template: level xml.
március 30. 13:00 1 óra Dömötör Szilárd Tesztek: hosszú vonat, mentés, keresztezödés ütközés. Osztályleírások: coordinate, speed.
április 1. 12:00 2.5 óra Földvári András Tesztek: utasok felszállása, játékállás betöltés, pálya betöltés, vonatok indítása, alagút működés, játék megnyerés, utasok leszállása, váltó működés. Osztályleírások: Color, LoaderStation
április 2. 17:00 1 óra Telek Javítások az interfész-definíciókhoz, elírások javítása
április 3. 13:00 0.5 óra Telek Tesztelést támogató programok tervei, dokumentum összeállítása
⚠️ **GitHub.com Fallback** ⚠️