Opponointiraportti
Mikko Viljainen
Johdanto
Tämä on TIK-76.115 kurssiin Hayabusa -ryhmän työstä tehty opponointiraportti. Hayabusa ryhmän työ on palm ympäristössä toimiva roolipeli. Opponoinnin on tehnyt TeamAhman puolesta Mikko Viljainen ja Mickey Shroff.
Rajallisen ajan vuoksi ohjelman testauksessa keskityttiin virheiden löytämiseen ja ohjelman arviointiin järjestelmällisen testaamisen sijaan. Osa-alueina olivat käyttöohjeet, ylläpitäjän operaatiot ja pelailu.
Aiheeseen liittyvät dokumentit:
Opponointisuunnitelma
Testaus
Testaus toteutettiin suunnitelman mukaisesti. Varsinaisesta testauksesta ei tosin voida puhua koska suunnitelma on ylimalkainen ja keskityttiin vain virheiden löytämiseen, ei niitten eristämiseen tai toistettavuuteen. Yleisesti ohjelma toimi hyvin ja reagoi kunnolla älyttömiin syötteisiin ym. Testauksessa havaittiin kuitenkin joitakin puutteita joista seuraavassa:
Virheet saatiin aikaiseksi pelailemalla ja toteuttamalla ylläpitäjän toimintoja kovalla tahdilla sekä loggautumalla sisälle ja ulos tiuhaan. Virheistä lisää liitteenä olevassa lokissa.
Lisäksi alussa ilmeni useita häiriöitä, jotka johtuivat siitä, että emme olleet merkinneet jotain laatikkoa asetuksissa.
Arviointi
Seuraavassa ollaan arvioitu työn osia. Peli on vielä tässä vaiheessa varmasti karvalakkimalli ja antaa tästä syystä helposti selkeän ja yksinkertaisen vaikutelman sitä kenties lopullisesti olematta. Ohjelma selvisi myös hyvin virhetilanteista. Lokin raportointi ei kuitenkaan ole kovinkaan havainnollista.
Käyttöohjeet
Käyttöohjeet olivat lyhyitä ja selkeitä. Ohjelman käyttö sekä operaattorina että loppukäyttäjänä oli helppoa ohjeiden perusteella. Asennuskin oli dokumentoitu melko kattavasti, mutta siitä huolimatta saimme emulaattorin asennettua väärin aluksi. Sitä voisi näin ollen viellä selkeyttää.
Ylläpitäjän operaatiot
Operaatiot olivat selkeitä ja yksinkertaisia. Ylläpito oli helppoa ja ohjelma reagoi järjettömiinkin syötteisiin hallitusti. Ainoastaan yksi virhetilanne havaittiin, josta mainittiin jo aiemmin.
Käyttöliittymä
Käyttäjän operaatiota oli vähän ja ne toimivat hyvin ja olivat helppoja. Toimintojen sijoittelu oli myös hyvä. Grafiikka oli minimalistista, mutta toimivaa ja ihan hyvän näköistä. Kenties örkin hahmo oli hieman omituinen.
Ohjelma alkoi toimia kuitenkin kuormitettuna hieman omituisesti. Tästä mainittiin jo aimmin tässä luvussa. Häiriö saattaa johtua myös emulaattorista. Se poistui sammuttamalla ja käynnistämällä serveri.
Toiminta
Peli toimi yleisesti hyvin. Hahmot kehittyivät ja kaikki sujui kuten piti. Ohjelma kuitenkin tahmasi aika ajoin ja grafiikan päivittymisessä oli ongelmia. Tämä saattaa johtua emulaattorista.
Muita kommentteja
Peli on ilmeisesti karvalakkiversio. Se on kovin simppeli eikä jaksanut testiryhmää kauaa kiinnostaa. Tilanne on varmasti toinen kun käyttäjälle annetaan lisää toimintoja, maailmaa laajennetaan ja lisätään käyttäjiä ja erilaisia hirviöitä.
Liite 1: Loki
Kaikki testaukset on tehty palm-emulaatorilla.
5 [opponent@monrovia bin]$ monrovia shutdown
Shutdown the server? y
Shutdown started.
java.lang.NullPointerException
at monrovia.server.platform.map.PlayerCreature.sendUpdate(PlayerCreature.java:111)
at monrovia.server.platform.map.PlayerCreature.exit(PlayerCreature.java:174)
at monrovia.server.core.PlayerDataImpl.exit(PlayerDataImpl.java:120)
at monrovia.server.core.Starter$1.run(Starter.java:84)
[opponent@monrovia bin]$ monrovia shutdown
Error: Connection refused
Do you want to try to start the server? yes
Starting...
[opponent@monrovia bin]$
Myöhemmin selvisi, että osa alla esiintyvät virheet johtuivat uudesta KVM:n asentamisesta.
1. Kun clientit ottivat yhteyden serveriin.
[opponent@monrovia bin]$ java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
2. Ohjausnappuloita ei välillä näkynyt. Nappulat tulivat kuitenkin näkyviin, kun panettiin PC:llä nappulaa.
3. Fire ant:t ovat kimpussa, vaikka niitä ei näy, peliviestien perusteella
4. Stats- nappia ei näy lainkaan.
5. Viesteissä ei aina ole välttämättä mitään järkeä. Esimerkiksi silloin, jos kaveri sanoo jotain, näkyvät vanhat myös vanhat viestit.
6. Client:n pelisessio jumiutui: tappelu tilanne, say, paineli joitain nappuloita. Hetken päästä, 2 min, kuitenkin alkoi taas toimimaan.
7. Stats –nappia painettiin
tämän jälekeen liikuttelua ja ok useasti
8. Pelaajaa poistettaessa:
Player to remove: Mikko
Remove player 'Mikko'? yes
Exception in thread "main" java.lang.NullPointerException
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:245)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:220)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:122)
at monrovia.server.core.AppControlImpl_Stub.removePlayer(AppControlImpl_Stub.java:92)
at monrovia.server.control.MonroviaControl.removePlayer(MonroviaControl.java:118)
at monrovia.server.control.MonroviaControl.<init>(MonroviaControl.java:159)
at monrovia.server.control.MonroviaControl.main(MonroviaControl.java:232)
8. Pelisession aikaisista serverin ilmoituksista pieni katkelma:
[opponent@monrovia bin]$ java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
java.lang.NullPointerException
at monrovia.server.platform.commands.Say.tryExecution(Say.java:32)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
Sun Apr 08 12:18:27 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:18:31 EEST 2001 ALERT: Error: Command for creature not in the map
java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
Sun Apr 08 12:23:19 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:23:22 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:23:23 EEST 2001 ALERT: Error: Command for creature not in the map
java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
java.lang.ArrayIndexOutOfBoundsException
at monrovia.server.platform.MapArea.getGround(MapArea.java:82)
at monrovia.server.core.GameInterface.getGroundAt(GameInterface.java:45)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:42)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
java.lang.NullPointerException
at monrovia.server.platform.commands.Walk.tryExecution(Walk.java:22)
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:29)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
Sun Apr 08 12:29:19 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:21 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:26 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:30 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:32 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:34 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:40 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:45 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:49 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:55 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:57 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:29:59 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:01 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:02 EEST 2001 ALERT: Error: Command for creature not in the map
java.lang.NullPointerException
at monrovia.game.commands.GameWalk.tryExecution(GameWalk.java:30)
at monrovia.server.platform.MapArea.doCommands(MapArea.java:252)
at monrovia.server.platform.MapArea.doTurn(MapArea.java:358)
at monrovia.server.platform.MapArea.run(MapArea.java:375)
at java.lang.Thread.run(Thread.java:484)
Sun Apr 08 12:30:10 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:11 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:11 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:11 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:11 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:12 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:12 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:12 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:16 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:16 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:17 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:17 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:18 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:18 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:41 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:41 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:41 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:41 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:42 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:42 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:42 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:42 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:42 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:43 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:43 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:43 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:43 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:43 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:44 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:44 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:44 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:44 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:44 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:45 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:45 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:45 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:45 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:45 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:46 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:46 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:47 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:48 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:48 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:48 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:48 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:48 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:48 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:48 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:49 EEST 2001 ALERT: Error: Command for creature not in the map
Sun Apr 08 12:30:49 EEST 2001 ALERT: Error: Command for creature not in the map