COTOOL dokumentaatio SEPA: Refaktorointi

Samankaltaiset tiedostot
COTOOL dokumentaatio SEPA: Refaktorointi

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Data Sailors - COTOOL dokumentaatio Riskiloki

T Refaktorointi

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen

Automaattinen yksikkötestaus

Test-Driven Development

COTOOL dokumentaatio Testausdokumentit

Testivetoinen ohjelmistokehitys

SYSTEEMITYÖ. Tärkeitä sanoja

4. Lausekielinen ohjelmointi 4.1

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3

T SEPA päiväkirja

SEPA päiväkirja. BetaTeam. Juho Mäkinen, 57796V, Jari Leppä, 42710V, Versio Pvm Tekijä Kuvaus

Test-Driven Development

SEPA diary. Dokumentti: SEPA_diary_PK_RI.doc Päiväys: Projekti : AgileElephant Versio: V0.2

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi

Ohjelmistojen suunnittelu

Choose Finland-Helsinki Valitse Finland-Helsinki

Ohjelmistojen laadun parantaminen refaktoroinnilla Simo Mäkinen Tietojenkäsittelytieteen laitos Helsingin yliopisto

Ohjelmoinnin perusteet, syksy 2006

Avoimen lähdekoodin kehitysmallit

TDD Käytännössä Todellinen työkalu vai lehmipoikien laukkaa? Harri Kulmala Solita Oy

TAMPEREEN TEKNILLINEN YLIOPISTO

Koodaamme uutta todellisuutta FM Maarit Savolainen

Tapani Ahola. Lyhytterapiainstituutti Oy

Millainen on onnistunut ICT-projekti?

Ylläpito. Ylläpidon lajeja

UCOT-Sovellusprojekti. Testausraportti

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito

1 Sisällysluettelo 2 Johdanto 3 Menetelmän käyttö

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

T SEPA - STAATTISET MENETELMÄT Tuomas Tolvanen, 55382U Timo Töyry, 58578B

Ohjelmoinnin perusteet Y Python

15. Ohjelmoinnin tekniikkaa 15.1

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Purot.net Wiki. Tutkielma. Paavo Räisänen. Centria Ammattikorkeakoulu

ASCII-taidetta. Intro: Python

COTOOL dokumentaatio Riskiloki

Ketterä analytiikka mitä se voisi olla käytännössä? Case Katedata Delta Motor Group

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Arkkitehtuuritietoisku. eli mitä aina olet halunnut tietää arkkitehtuureista, muttet ole uskaltanut kysyä

ELM GROUP 04. Teemu Laakso Henrik Talarmo

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

You can check above like this: Start->Control Panel->Programs->find if Microsoft Lync or Microsoft Lync Attendeed is listed

Good Minton Sulkapalloliiton Kilpailujärjestelmä SEPA: Heuristinen arviointi

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Ohjelmistoprojektien hallinta Vaihejakomallit

Avoin lähdekoodi (Open Source) liiketoiminnassa

Dokumentin nimi LOGO:) Tampereen teknillinen yliopisto. Ryhmä XXX: Projektiryhmän nimi Projektin nimi

SEPA - Design Patterns

Santeri Saarinen Korjattu testaustasoja ja tehty tarkennuksia I1-testaukseen

Versionhallintaa. Versionhallinnan käyttöönotto SAS ympäristössä

Opas koulujen VALO-hankintaan. Elias Aarnio Avoimet verkostot oppimiseen -hanke Educoss Innopark Oy

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

TAMPEREEN TEKNILLINEN YLIOPISTO

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Kylänetti projektin sivustojen käyttöohjeita Dokumentin versio 2.10 Historia : 1.0, 1.2, 1.6 Tero Liljamo / Deserthouse, päivitetty 25.8.

Onnistunut SAP-projekti laadunvarmistuksen keinoin

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Ville Isomöttönen. Agile. Jyväskylän Yliopisto Sivu 1 Tietotekniikan laitos

Returns to Scale II. S ysteemianalyysin. Laboratorio. Esitelmä 8 Timo Salminen. Teknillinen korkeakoulu

58160 Ohjelmoinnin harjoitustyö

T Testiraportti - järjestelmätestaus

Uudelleenkäytön jako kahteen

Matkustaminen Majoittuminen

Matkustaminen Majoittuminen

Testaussuunnitelma. Koskelo. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Kuopio Testausraportti Asiakkaat-osakokonaisuus

T Testiraportti - integraatiotestaus

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant

Capacity Utilization

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Apuja ohjelmointiin» Yleisiä virheitä

4.2 Sulkuyhtälöt ja joustavuus

response letter Jouko Miettunen

11/20: Konepelti auki

Työelämäyhteydet uudistuvassa korkeakoulutuksessa seminaari Sessio 3. Kirsti Keltikangas, Aalto-yliopiston Sähkötekniikan korkeakoulu

Projektityö

S11-09 Control System for an. Autonomous Household Robot Platform

P2P (ALUSTA) RAPORTOINNIN OHJEET (ANALYTICS)

9. Periytyminen Javassa 9.1

T Tietojenkäsittelyopin ohjelmatyö. Testiraportti, vaihe T1. Tietokonegrafiikka-algoritmien visualisointi. Testiraportti, vaihe T1

Menetelmäraportti Ohjelmakoodin tarkastaminen

Ohjelmointi 1 / syksy /20: IDE

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Metsälamminkankaan tuulivoimapuiston osayleiskaava

Ohjelmistotekniikka - Luento 3 Jouni Lappalainen

15. Ohjelmoinnin tekniikkaa 15.1

Käytettävyys ja käyttäjätutkimus. Yhteisöt ja kommunikaatiosuunnittelu 2012 / Tero Köpsi

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Ohjelmointi 1. Kumppanit

Ohjelmistotekniikka - Luento 3

Yhteenvetodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

14. Hyvä ohjelmointitapa 14.1

2.3 Virheitä muunnosten käytössä

Avoin lähdekoodi hankinnoissa Juha Yrjölä

Transkriptio:

Table of Contents Refaktorointi................................................................................ 1 1 Tehtävänanto............................................................................. 1 2 Johdanto................................................................................. 1 3 Refaktoroinnin taustaa...................................................................... 1 4 Menetelmä............................................................................... 1 5 Edut.................................................................................... 2 6 Haitat................................................................................... 2 7 Käytännön sovellutus....................................................................... 2 8 Kokemukset ja muutokset................................................................... 3 8.1 Toteutus 1........................................................................... 3 8.1.1 Toteutus 1a ja 1b.................................................................. 3 8.2 Toteutus 2a ja 2b...................................................................... 3 8.3 Yhteenveto........................................................................... 3 9 Viitteet.................................................................................. 3

1 (3) Refaktorointi Autere Aleksi, 57412R Welin Jan, 49620N Versiohistoria Versio Pvm Tekijä Kuvaus Hyväksyjä 0.1 04.12.2005 AA & 0.2 05.12.2005 AA & 0.3 05.12.2005 AA & Ensimmäinen versio - Toinen versio - Vain pieniä muutoksia - 1 Tehtävänanto Refactoring means improvement of source code without adding any functionality. The purpose of refactoring is to guard the code against decay that is typical to any software developed for a longer time. Assignment: Plan how and when you will do refactoring, and how you decide when refactoring is necessary, e.g., based on the occurrence of bad code smells. [Fowler and Beck] 2 Johdanto Valitsimme refaktoroinnin SEPA aiheeksi koska projektissamme tultaisiin joka tapauksessa käyttämään ko. tekniikkaa, koska otimme käyttöön kesken projektin evolutiivisen kehityksen ja yksinkertaisen suunnittelun ja refaktoroinnin. Tekniikka on suurimmalle osalle projektilaisista uusi, tosin muutamat ryhmän jäsenet ovat käyttäneet refaktorointia järjestelmällisesti myös aikaisemmissa projekteissasaan. 3 Refaktoroinnin taustaa Refaktorointi (eng. refactoring) tarkoittaa suomeksi tekijöihin jakamista uudelleen eli tekijöiden yhdistämistä, mutta tietotekniikassa puhuttaessa tarkoitetaan lähdekoodin rakenteen muokkaamista siten että ohjelman tominnallisuus ei muutu. Tarkoituksena on saada koodista selkeämpää ja ymmärrettävämpää. Tekniikan tutkimus ja systemaattinen käyttö on melko uutta ohjelmistotuotannossa. Näkemyksiä refaktoroinnista näyttää olevan monia, aina DO-NOT-FIX-IT-IF-IT-IS-WORKING näkemyksestä "refaktoroi kunnes ei ole enää refaktoroitavaa" ideologiaan. Huomattavaa on että refaktorointia tapahtuu jokaisessa ohjelmistokehtiysprojektissa vaikka tekniikkaa ei systemaattisesti tai tiedostaen käytettäisi. Armoton refaktorointi (engl. Refactor Mercilessly) on yksi XP-metodologian menetelmä, joka lähtee ajatuksesta "Refactor whenever and wherever possible.". / 1/, /4/ 4 Menetelmä Refaktorointia voidaan tehdä usealla eri tasolla. Alimmalla tasolla refaktoroitaessa toimitaan yksittäisten luokkien sisällä. Tällöin voidaan esimerkiksi vaihtaa muuttujien nimiä kuvaavimmiksi tai pilkkoa metodeja pienempiin kokonaisuuksiin jne. Seuraavalla tasolla, eli luokkatasolla refaktorointi tarkoittaa arkkitehtuurin selkeyttämistä luokkarakennetta muokkaamalla. Esimerkkejä luokkatason refaktoroinnista ovat luokkien yhdistäminen tai pilkkominen

2 (3) tarvittaessa mikäli luokissa on liikaa tai liian vähän toiminnallisuutta. Ylimmän tason refaktorointi koskee pakettirakennetta. Luokkia voidaan jakaa selkeämpään hierarkiaan niiden ominaisuuksien mukaan. Refaktorointi sekoitetaan monesti virheellisesti koodin uudelleenkirjoittamiseen. Tästä ei kuitenkaan ole varsinaisesti kysymys, vaan refaktorointi on koodin rakenteen muokkaamista. Refaktorointia tulisi tehdä ohjelmoinnin yhteydessä, eli ohjelmoijan pitäisi miettiä jatkuvasti tuottamaansa koodia ja parannella sitä vastaamaan hyviä ohjelmointikäytäntöjä. Monissa tapauksissa myös muut ohjelmoijat voivat refaktoroida toistensa koodia. Erityisesti tätä on rohkaistu tekemään XP-ohjelmointikäytännössä. Yleisesti tulisi välttää kerralla tehtäviä laajoja refaktorointeja, koska virheiden mahdollisuus kasvaa ja on mahdollista tehdä vaikeasti peruutettavia virheellisiä toimenpiteitä. Yksi tapa välttää virheitä laajaa refaktorointia tehtäessä, on ottaa refaktorointia varten kopio tarvittavasta koodista ja tehdä refaktorointi kopiolle. Tämän jälkeen muutokset tuodaan alkuperäiseen koodiin pienemmissä osissa. Jokaisen muutoksen jälkeen testataan toimivuus. /3/ 5 Edut Tässä kappaleessa on pyritty miettimään menetelmän tuomia etuja. - Koodin ymmärettävyys ja ylläpidettävyys paranee. - Refaktoroidusta koodista saattaa olla helpompi löytää virheitä. 6 Haitat Tässä kappaleessa on pyritty miettimään menetelmän mahdollisia haittoja. - Refaktoroimalla on mahdollista rikkoa ohjelman toimivuus. - Refaktorointi on työtä, joka ei varsinaisesti näy lopputuotteessa, eli käännetyssä ohjelmassa. - Refaktorointi saattaa sekoittaa "liian suurissa annoksissa" muiden projektilaisten käsitystä koodin rakenteesta. Ja aiheuttaa näin lisätyötä. - Jos refaktorointiin käyttää väärään aikaan liikaa resursseja, saattaa käsillä oleva työtehtävä kärsiä. - Jos refaktoroinnin jälkeen ei suoriteta regressiotestausta on vaarana että systeemi menee rikki. /2/, 7 Käytännön sovellutus Projektin kaikki ohjelmakoodi kirjoitetaan Eclipseä käyttäen. Eclipse tukee monia tyypillisimpiä refaktorointeja helpottaen niiden tekemistä huomattavasti. Esimerkiksi muuttujan tai metodin nimeä muutettaessa Eclipse korjaa kaikki projektissa esiintyvät viittaukset automaattisesti. Lisäksi metodien ja instanssimuuttujien siirtely perittävältä luokalta perijälle tai toiseen suuntaan onnistuu Eclipsen avustamana helposti. Myös muihin siirtoihin, kuten metodien siirtoon luokkien välillä ja luokkien siirtoon pakettien välillä löytyy Eclipsestä automatiikkaa. Refaktorointia kasittelevällä wiki-sivustolla /5/ esitellään tiettyjä refaktorointikäytäntöjä, joista käytämme ainakin seuraavia: - The First Refactoring Step Ennen refaktorointia tulee olla toimivat yksikkötestit valmiina muutettaville luokille. Tällä tavoin voidaan varmistua siitä, ettei refaktorointi aiheuta uusia virheitä. - Bodyguard Pattern Mikäli virheitä kuitenkin syntyy, varmistutaan siitä, että voidaan palata refaktorointia edeltävään tilanteeseen. Taaksepäin palaaminen on helppoa CVS-versionhallintaa käyttäen.

3 (3) - Refactoring In Very Small Steps Refaktorointi suoritetaan aina mahdollisimman pienissä erissä, ja testataan koodin toimivuus jokaisen refaktoroinnin jälkeen. Suuriin muutoksiin syntyy helpommin virheitä, ja virheiden löytäminen suuresta massasta on vaikeampaa kuin pienestä. 8 Kokemukset ja muutokset 8.1 Toteutus 1 Toteukset 1 ja 2 jaettiin ensimmäisen iteraation alussa alitoteutuksiin 1a, 1b, 2a ja 2b. 8.1.1 Toteutus 1a ja 1b Käytännössä systemaattista refaktorointia ei ensimmäisen a-iteraation aikana tapahtunut. Syynä tähän oli aikataulun venyminen kuten projektisuunnitelmasta käy ilmi. 1b-vaiheessa "refaktorointia" kuitenkin käytettiin lähes aina kun koodia tuotettiin tai muokattiin. Lienee kuitekin oikeaoppisempaa puhua jollain muulla termillä tästä iteratiivisesta koodin kehityksestä kuin termillä refaktorointi, koska koodi/luokkarakenne muuttui niin usein. 8.2 Toteutus 2a ja 2b Täydennetään myöhemmin 8.3 Yhteenveto 9 Viitteet Kaikki internet-viittaukset avautuvat uuteen ikkunaan. 1. http://www.extremeprogramming.org/rules/refactor.html, 4.12.2005 2. http://www.refactoring.com/, 4.12.2005 3. http://c2.com/cgi/wiki?whatisrefactoring, 4.12.2005 4. http://en.wikipedia.org/wiki/refactoring, 4.12.2005 5. http://c2.com/cgi/wiki?refactoringpatterns