tpatja / miinat

Minesweeper clone written in Java (university coursework)
0 stars 0 forks source link

Koodikatselmointi 2 #2

Closed Virta closed 11 years ago

Virta commented 11 years ago

Katselmoitava koodi: tpatja, miinat

Tutustuin koodiisi jo 7.6. 1200 alkaen.

Synkattu 9.6. 0830, jonka perusteella katselmointi tehty.

Koodisi on pääasiassa selkeää ja helposti luettavaa, paljon toiminnallisuuksia joita en ole käyttänyt enkä siksi voi ihan kaikkeen ottaa kantaa.

Luokista:

Testeistä:

Dokumentaatio ei kuulu katselmoinnin piiriin, mutta mainittakoon, että on aika hyvällä mallilla.

tpatja commented 11 years ago

(kohdat 1 ja 2): HighScoreEntry on simppeli datasäiliöluokka yhdelle high score tietueelle. Tarkoitatko HighScoreManager:ia?

Virta commented 11 years ago

Kohdissa 1 & 2 viittasin aiemmin HighScoreEntryyn, mutta katsoin ilmeisesti väärin. -Manager luokassa on toki levy IO:ta jonkin verran, mutta luokassa metodit nivoutuvat kyllä yhteen nätisti. Periaatteessa siitä voisi pilkkoa levyIO:n omaan luokkaansa, mutta ei sitä loppupeleissä paljoa ole. Toki olin omassa koodissani pilkkonut levyIO:n omaksi luokakseen vaikka se sisältääkin vain kaksi varsinaista levyIO metodia.

Pakettijaolla viittasin lähinnä HighScore- luokkien eriyttämiseen Square ja Engine- luokista.

Rajapintoja ei tosiaan voi suoraan testata, my bad. Onko väärin testata levyIO:ta yksikkötesteissä?

On 09.06.2013 19:06, tpatja wrote:

(kohdat 1 ja 2): HighScoreEntry on simppeli datasäiliöluokka yhdelle high score tietueelle. Tarkoitatko HighScoreManager:ia?

*

tämänhetkinen pakettijako engine & ui riittänee, kun luokkia on
noin vähän

*

Level ja GameState on nyt omissa tiedostoissaan

*

UiSquare on GUI luokan toteutuksen sisäinen osa (simppeli säiliö),
eikä sitä tarvita ulkopuolella, eli jätän sen nested luokaksi

*

GUI:n ja HighScoreDialogin pitkät metodit on nyt pilkottu lyhyemmiksi

*

testeistä sen verran että levy IO on tarkoituksella jätetty pois,
koska yksikkötestauksessa ei käytetä levy IO:ta. Comparator
luokkaa käytetään entryjen sorttaamiseen ja sille on testi
HighScoreManagerTest luokassa. HighScoreManagerAdapter on
interface jota ei siis suoraan voi testata, mutta sitäkin
käytetään HighScoreManagerTest:ssä.

— Reply to this email directly or view it on GitHub https://github.com/tpatja/miinat/issues/2#issuecomment-19168579.

Ystävällisin terveisin, Frans Ojala

tpatja commented 11 years ago

Yksikkötestauksessa jokaisen testin pitäisi olla "self contained", eli toimia aina samalla tavalla riippumatta ulkoisista tekijöistä (esim käyttöjärjestelmäkohtaiset erikoisuudet, levyn ja levyajurin tila jne). Jos ulkopuolisia tekijöitä on oltava, niitä pitää pystyä hallitsemaan. Esim. dependency injection ja mock luokat mahdollistavat sen.

Jos halutaan tehdä tallennus ja lataus testattavaksi tuossa minun HighScoreManager luokassa, se onnistuisi esim näin:

Kiitos muuten palauttesta. Ilman sitä olisi jäänyt varmaan siistimiset tekemättä.

Virta commented 11 years ago

Pitää varmaan kattoa omat tallennuksen testit ja ehkä muokata niitä.

Mutta ole hyvä vain, tätä varten katselmointeja on =).

Virta

On 09.06.2013 21:54, tpatja wrote:

Yksikkötestauksessa jokaisen testin pitäisi olla "self contained", eli toimia aina samalla tavalla riippumatta ulkoisista tekijöistä (esim käyttöjärjestelmäkohtaiset erikoisuudet, levyn ja levyajurin tila jne). Jos ulkopuolisia tekijöitä on oltava, niitä pitää pystyä hallitsemaan. Esim. dependency injection ja mock luokat mahdollistavat sen.

Jos halutaan tehdä tallennus ja lataus testattavaksi tuossa minun HighScoreManager luokassa, se onnistuisi esim näin:

  • annetaan konstruktorissa OutputStream ja InputStream oliot luokalle dependecynä
  • käytetään em streameja tallennukseen ja lataukseen -> nyt luokka ei enää ota kantaa siihen käyttääkö streamien toteutus ByteArray vai File IO:ta. Yksikkötestissä voi antaa ByteArray stream instanssit (ByteArrayInputStream ja ByteArrayOutputStream) ja enginestä luotaessa File stream instanssit.

Kiitos muuten palauttesta. Ilman sitä olisi jäänyt varmaan siistimiset tekemättä.

— Reply to this email directly or view it on GitHub https://github.com/tpatja/miinat/issues/2#issuecomment-19171239.

Ystävällisin terveisin, Frans Ojala