120 likes | 222 Views
T-76.115 Henkilökohtainen SE-harjoitus. Pariohjelmointi Mika Lindroos mklindro@cc.hut.fi. Valittu aihe/menetelmä(1/2). Aihe pariohjelmointi Menetelmä pari-implementointi (joissain lähteissä mukaan lasketaan myös parimäärittely, -suunnittelu ja -testaus)
E N D
T-76.115Henkilökohtainen SE-harjoitus Pariohjelmointi Mika Lindroos mklindro@cc.hut.fi
Valittu aihe/menetelmä(1/2) • Aihe • pariohjelmointi • Menetelmä • pari-implementointi (joissain lähteissä mukaan lasketaan myös parimäärittely, -suunnittelu ja -testaus) • pari-implementoinnilla tarkoitetaan tässä yhteydessä pelkkää koodinkirjoitusvaihetta • pari voi käytännössä joutua tekemään myös joitain esim. teknisen tason suunnittelupäätöksiä tai yksinkertaista testausta koodatessaan, mutta näitä menettelyjä ei käytetä tai seurata systemaattisesti (näiden ajatustyöpainotteisten menetelmien mittaaminen olisi huomattavan vaikeaa)
Valittu aihe/menetelmä(2/2) • Tehtävä • Käyttää pariohjelmointia systemaattisesti projektin 1. toteutusvaiheessa ja tämän jälkeen mahdollisuuksien mukaan. • Kerätä tietoa pariohjelmoinnin käytöstä ja sen vaikutuksesta tuotteen laatuun ja kehitysnopeuteen. Lisäksi kerätään ryhmäläisten kokemuksia ja mielipiteitä menetelmästä. • Motivaatio • kiinnostus nähdä pariohjelmoinnin käytön vaikutus ”oikeassa” projektissa • tähän mennessä käytetty erinäisissä projekteissa kontrolloimatta -> ei käsitystä hyödyistä/haitoista • ryhmän jäsenillä erilainen kokemustausta ja lähtötaso • pitäisi helpottaa vähemmän kokemusta omaavien ryhmäläisten sisäänpääsyä projektiin
Menetelmän esittely • ”Pariohjelmoinnissa kaksi ohjelmoijaa työskentelee yhteistyössä, rinnakkain yhdellä koneella, saman suunnitelman, algoritmin, koodin tai testin parissa.” [1](mukaillen) • tässä projektissa menetelmää sovelletaan (järjestelmällisesti) ainoastaan ohjelmoinnin yhteydessä kooditasolla • Ohjelmoijilla on eri roolit, joita voidaan vaihtaa jatkuvasti tilanteen mukaan. Lisäksi pareja vaihdetaan säännöllisesti. • Toinen ohjelmoija on ”ajaja”, joka varsinaisesti käyttää näppäimistöä ja kirjoittaa koodia • Toinen ohjelmoija on ”tarkkailija”, joka seuraa jatkuvasti ”ajajan” työskentelyä ja huomauttaa välittömästi havaitsemistaan virheistä/puutteista sekä epäselvistä ratkaisuista • Tarvittaessa ohjelmoijat voivat miettiä yhdessä ratkaisua haastavaan ongelmaan
Menetelmän toteutus/soveltaminen(1/2) • Pariohjelmoinnin käyttö projektin aikana • pariohjelmointia käytetään systemaattisesti 1. toteutusvaiheessa ja tämän jälkeen mahdollisuuksien mukaan • käyttö järjestelmään tutustuttamisen kannalta kriittistä alkuvaiheessa • myöhemmissä vaiheissa suurin hyöty saataneen “vaikeiden” toiminnallisuuksien toteutuksessa • Parien muodostus • parit muodostetaan aina tilanteen mukaan, koska aikataulujen ja työskentelytilavaatimusten yhteensovittaminen on kurssilla vaikeampaa kuin “oikeassa” työympäristössä (pyritään tekemään viikkopalaverin yhteydessä) • parissa kokenut+kokematon ohjelmoija -> hyvä opettamisessa • parissa 2 kokematonta ohjelmoijaa -> yhdessä selviävät vaikeammistakin ongelmista
Menetelmän toteutus/soveltaminen(2/2) • Roolien jako • parin jäsenet saavat itse päättää roolien vaihtelemisesta ohjelmointikertansa aikana tilanteen mukaan • kokenut+kokematon ohjelmoija-parissa suosituksena on, että kokeneempi toimisi enemmän tarkkailijana (tekemällä itse kokemattomampikin oppii paremmin) • tarkoituksena on, että kummatkin parin jäsenet toimivat molemmissa rooleissa vähintään kerran jokaisen ohjelmointikerran aikana (eli käytännössä rooleja vaihdetaan ainakin kerran jokaisen ohjelmointikerran aikana)
Menetelmän arviointi(1/2) • pariohjelmoinnilla on Trapolissa oma työlajinsa (work type), jonka alle tehdyt tunnit kirjataan • pariohjelmoinnin osalta parin molemmat jäsenet kirjaavat omat tuntinsa normaalisti pariohjelmoinnin alle • saadaan suoraan käytetyt pariohjelmoinnin ja perinteisen ohjelmoinnin kokonaistyömäärät käyttötapauksen toteutusta kohden • edellisen pohjalta saadaan laskettua missä suhteessa pariohjelmointia ja perinteistä ohjelmointia on käytetty yksittäisten käyttötapausten toteutuksessa • laadullista vertailua tehdään verraten bugi-raporttien määrää pariohjelmoidun ja ei-pariohjelmoidun koodin suhteen • verrataan käyttötapaukseen liittyvien löydettyjen bugien määrää käyttötapauksen toteutuksessa käytettyyn pariohjelmoinnin käyttösuhteeseen (selitetty edellisessä kohdassa) tutkitaan vaikuttaako korkeampi pariohjelmoinnin käyttöaste bugien lukumäärään
Menetelmän arviointi(2/2) • lisäksi kerätään ryhmäläisiltä kurssin loppupuolella henkilökohtaisia mielipiteitä mm. työskentelyn miellyttävyyden ja oppimiskokemuksen suhteen • esitettäviä kysymyksiä voisivat olla esim. arvioinnit asteikolla 1-5 (täysin samaa mieltä-täysin eri mieltä): • pariohjelmointi on miellyttävämpää kuin yksin ohjelmoiminen • pariohjelmoinnista oli hyötyä asioiden oppimiseni kannalta • uskon tuottaneeni parempilaatuista koodia ohjelmoidessani parin kanssa • kaveri kommentoimassa virheitäni häiritsi ohjelmointiani • vastauksista voidaan tutkia mm. vaikuttiko ohjelmoijan aiempi kokemustausta suhtautumiseen pariohjelmointia kohtaan
Hyödyt projektille ja itselle(1/2) • Projektille [2] • pariohjelmointi tuottaa parempilaatuista koodia • keskimäärin parempi design • keskimäärin vähemmän bugeja • projektin riippuvuus yksittäisistä henkilöistä pienenee, koska tuotetun koodin tuntee vähintään yksi toinenkin ohjelmoija • nopeampi kehitys ilman merkittävästi suurempaa kokonaistyömäärää • toisin kuin voisi luulla pariohjelmointi ei tutkimuksen mukaan [2, s. 3-4] kaksinkertaista kokonistyömäärää, vaan aiheuttaa keskimäärin vain 15 % suuremman kokonaistyömäärän (totutteluaikana tosin n. 60 %) • käytetty “ylimääräinen” aika voitetaan takaisin mm. vähentyneinä testauskuluina
Hyödyt projektille ja itselle(2/2) • Itselle/ryhmälle [3](osittain) • työskentely parin kanssa on miellyttävämpää kuin yksin • jaetut vaikeudet vähentävät stressiä • jaettu onnistumisen ilo vielä suurempi kuin yksin • ryhmähenki paranee, kun tutustuu ryhmäläisiin • tiedonvälitys koodin ja arkkitehtuurin osalta toimii ryhmän sisällä tehokkaammin • ryhmän sisäinen oppiminen tehostuu • parin kanssa onnistuu ratkaisemaan ongelmia, joihin ei yksin pystyisi ainakaan yhtä hyvin • parin työskentelyä tarkkaillessa on mahdollista oppia jopa kokonaan uusia toimintatapoja tai ratkaisumalleja
Viitteet [1] Pair programming web page, viitattu 26.11.2003, http://www.pairprogramming.com/ [2] Strengthening the Case for Pair-Programming, Williams, Kessler, Cunningham, Jeffries, viitattu 26.11.2003, http://www.cs.utah.edu/~lwilliam/Papers/ieeeSoftware.PDF [3] The Costs and Benefits of Pair Programming, Cockburn, Williams, viitattu 26.11.2003, http://collaboration.csc.ncsu.edu/laurie/Papers/XPSardinia.PDF