Kurssiesittely | Luennot | Harjoitukset |
---|
Pariohjelmointi on hyvä tapa oppia toisilta ohjelmoijilta ja kokemuksien mukaan se soveltuu hyvin myös TDD:n opetteluun. Esimerkiksi ensin TDD:n suhteen kokeneempi kirjoittaa yhden testitapauksen ja hänen parinsa kirjoittaa testin läpäisevän koodin. Näppäimistöä pallotellaan parin kesken ja flow pysyy päällä. Kokeneempi voi neuvoa pariaan refaktoroimaan ja kirjoittamaan hyviä testejä. Kun parista molemmat ovat yhtä taitavia, niin yhdessä he pystyvät tukemaan toisiaan ja kirjoittamaan parempaa koodia kuin yksinään.
Valitettavasti tämän kurssin vetäjillä ei ole riittävän monta persoonallisuutta, jotta pystyisimme pariohjelmoimaan teidän kaikkien kanssa. Tämän vuoksi olemme valmistaneet Tetris-aiheisen harjoitystyön, jossa testitapaukset on annettu valmiina (mutta pois kommentoituna). Tehtävänänne on kirjoittaa koodia, joka läpäisee annetut testit yksi testitapaus kerrallaan. Kun ensimmäinen testi menee läpi, niin ota seuraava testitapaus esiin kommenttien alta ja kirjoita sen läpäisevä koodi (mutta ei yhtään enempää kuin vaaditaan testien läpäisyyn - muista TDD:n kolme sääntöä). Refaktoroi koodia paremmaksi aina, kun testit menevät läpi, jotta seuraavien muutosten tekeminen olisi helpompaa.
Tetris-harjoitustyön testitapaukset tätä ja tulevia harjoitusviikkoja varten voit imeä tästä: tdd-tetris-tutorial.zip
Tai jos käytät Gitiä, niin voit kloonata sen GitHubista: orfjackal/tdd-tetris-tutorial, "tutorial" branch.
Tetris-harjoitustyön vaiheet on numeroitu "Tetris #1", "Tetris #2" jne. Tällä tarkoitetaan toteutuksen olevan niin pitkällä, että seuraavassa listassa olevat testiluokat menevät kyseiseen numeroon asti läpi:
FallingBlocksTest
RotatingPiecesOfBlocksTest
RotatingTetrominoesTest
FallingPiecesTest
MovingAFallingPieceTest
RotatingAFallingPieceTest
Testit läpäisevä koodi on tarkoitettu kirjoitettavaksi juuri yllä mainitussa järjestyksessä, koska myöhemmät testit pohjautuvat aiempien testien määrittelemään toiminnallisuuteen.
max 6 pistettä
1 piste: Pystyt ajamaan Tetris-harjoitustyön testit Mavenilla harjoitusryhmäsi käyttämässä tietokoneluokassa.
P.S. Tämä funktio on peräisin Gun-Tactyx -tekoälyohjelmointipelistä ja on yksi funktioista, joita robottien tekoälyskriptit voivat kutsua (koko tiedosto on täällä).
1 piste: Löydetty yksi esimerkki duplikoidusta koodista.
2 pistettä: Löydetty kaksi tai useampi esimerkkiä duplikoidusta koodista.
FallingBlocksTest
läpäisevä koodi käyttäen TDD:tä. Testitapaukset on annettu valmiiksi, joten sinun tarvitsee vain poistaa kommentit niistä yksi kerrallaan, sitä mukaa kuin saat kirjoitettua testit läpäisevää tuotantokoodia.
Kannattaa lukea seuraavat artikkelit TDD:stä, jotta tietäisit TDD:n idean ja osaisit tehdä näiden harjoitusten seuraavan tehtävän. Samat asiat käydään läpi kurssin ensimmäisellä luonnolla, mutta jos haluat aloittaa tehtävien teon hyvissä ajoin tai et pääse luennolle, niin näillä pääset alkuun. Muussa tapauksessa voit kerrata luentojen asiat näistä.
http://www.butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd
http://www.butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata (linkki PPT-esitykseen on sivun alussa)
http://www.agiledata.org/essays/tdd.html (luvut 4 ja 5 voit hypätä yli)
http://agileinaflash.blogspot.com/2009/03/unclebobs-three-rules-of-tdd.html
http://agileinaflash.blogspot.com/2009/02/red-green-refactor.html
http://agileinaflash.blogspot.com/2009/02/first.html
1 piste: Luokan FallingBlocksTest
10 testistä 3 menee läpi.
2 pistettä: Luokan FallingBlocksTest
10 testistä 6 menee läpi.
3 pistettä: Luokan FallingBlocksTest
10 testistä 10 menee läpi.
Harjoitustilaisuudessa varmistetaan, että kehitysympäristö toimii kaikilla, keskustellaan duplikaatiosta ja parikoodataan Tetris #2 lähtien.