582334 TDD-ohjelmointimenetelmä ja koodin suunnittelu (5 op), syksy 2009
582334 TDD programming technique and designing code (5 cr), autumn 2009

Kurssiesittely Luennot Harjoitukset

Harjoitus 3: Tetris #4-6 (omat testit). Funktion refaktorointi.

Tetris-harjoitustyö

Katso ohjeet ensimmäisistä harjoituksista.

Kotitehtävät

max 7 pistettä

  1. Refaktoroi tämän projektin metodia filelocator.FileLocator#findFile(File,String) siten, että sen koodi on itsensädokumentoivaa (self-documenting code), sen luettavuus on mahdollisimman hyvä ja se ei enää tarvitse kommentteja. Tulosta muutamia refaktorointisi välivaiheita ja lopputulos paperille, jotta tehtävää olisi helpompi käsitellä laskuharjoitustilaisuudessa.

    Ohjeita metodien refaktorointiin saa Clean Code -kirjan luvuista 3-5. Käytä hyviä nimiä ja Composed Method -patternia:

    "Divide your program into methods that perform one identifiable task. Keep all of the operations in a method at the same level of abstraction. This will naturally result in programs with many small methods, each a few lines long."
    - Kent Beck, Smalltalk Best Practice Patterns
    http://codebetter.com/blogs/jeremy.miller/archive/2006/12/03/Composed-Method-Pattern.aspx
    http://www.ibm.com/developerworks/java/library/j-eaed4.html

    1 piste: Muuttujat on nimetty järkevästi. Kaikki testit menevät läpi.
    2 pistettä: Muuttujat on nimetty järkevästi ja metodit on jaettu loogisesti pienemmiksi metodeiksi Composed Method -patternin mukaisesti. Kaikki testit menevät läpi.

  2. Tetris #4-6: Toteuta luokkien FallingPiecesTest, MovingAFallingPieceTest ja RotatingAFallingPieceTest testitapaukset sekä ne läpäisevä koodi käyttäen TDD:tä. Jatka toteutusta siitä, mihin jäit edellisissä harjoituksissa. Tästä lähtien sinun pitää kirjoittaa tarvittavat testit itse. Tämän kotitehtävän testiluokkien rungoissa on TODO-merkintöinä vihjeitä siitä, millaisia testitapauksia todennäköisesti kannattaa kirjoittaa (päätä itse, onko tarvetta muunlaisille testeille).

    1 piste: Kaikki aiemmat testit ja luokan FallingPiecesTest 5 testistä 1 menee läpi. Tähän sisältyy tarvittava koodin refaktorointi, jotta Board#drop-metodi voisi ottaa vastaan sekä Block- että Tetrominoe-olioita.
    2 pistettä: Kaikki aiemmat testit ja luokan FallingPiecesTest 5 testistä 5 menee läpi.
    3 pistettä: Kaikki kirjoitetut testit menevät läpi ja MovingAFallingPieceTest määrittää toiminnallisuuden: palikan siirtely pelialueella vasemmalle, oikealle ja alas.
    4 pistettä: Kaikki kirjoitetut testit menevät läpi ja MovingAFallingPieceTest määrittää toiminnallisuuden: palikkaa ei voi siirtää pelialueen reunojen yli eikä toisten palikoiden läpi.
    5 pistettä: Kaikki kirjoitetut testit menevät läpi ja RotatingAFallingPieceTest määrittää toiminnallisuuden: (1) palikan pyörittely pelialueella, (2) ei voi pyöritellä jos ei ole tilaa, (3) palikan pyöritys seinän/palikan vieressä työntää palikan pois seinästä mikäli toisella puolella on tilaa ("wallkick").

Harjoitustilaisuudessa keskustellaan Composed Methodista ja parikoodataan Tetrikseen toinen palikanpyörityslogiikka. Korvataan aiempi algoritminen pyöritys kovakoodatulla pyörityksellä (kunkin tetrispalikan jokainen asento on kovakoodattu), joka seuraa TGM:n pyörityssääntöjä. Poista kaikki sellainen koodi, jota ei tämän muutoksen vuoksi enää tarvita. Vertaile aiemman ja tämän myöhemmän pyörityslogiikan vaatiman koodin siisteyttä: Kannattiko tämä muutos?


Viimeksi muokattu 01.12.2010 21:04 Copyright © 2009 Esko Luontola