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



Samankaltaiset tiedostot
COTOOL dokumentaatio SEPA: Refaktorointi

Ohjelmistojen mallintaminen. Luento 11, 7.12.

11/20: Konepelti auki

T SEPA - päiväkirja: Design Patterns. ETL työkalu

SEPA päiväkirja. Aihe: Suunnittelumallit Tekijät: Tuukka Laakso ja Antti Kettunen

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

SEPA - Design Patterns

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

T SEPA - päiväkirja: Design Patterns. ETL työkalu

T Refaktorointi

Automaattinen yksikkötestaus

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

Javan perusteita. Janne Käki

SEPA päiväkirja. Aihe: Suunnittelumallit Tekijät: Tuukka Laakso ja Antti Kettunen Ryhmä: Neptune T Ohjelmistoprojekti I

13/20: Kierrätys kannattaa koodaamisessakin

Test-Driven Development

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

8/20: Luokat, oliot ja APIt

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

Java kahdessa tunnissa. Jyry Suvilehto

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

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

P e d a c o d e ohjelmointikoulutus verkossa

Kieliversiointityökalu Java-ohjelmistoon. Ohje

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

Osoitin ja viittaus C++:ssa

Muusta kuin vesisioista

Ohjelmointi 2 / 2010 Välikoe / 26.3

Rajapinta (interface)

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

Eclipse ja JUnit-ohjelmoijatestit

T Henkilökohtainen harjoitus: FASTAXON

COTOOL dokumentaatio SEPA: Refaktorointi

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Testivetoinen ohjelmistokehitys

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Test-Driven Development

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

Metodien tekeminen Javalla

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

4. Lausekielinen ohjelmointi 4.1

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Ohjelmistotuotanto. Luento

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Hirviö. Design Patterns

15. Ohjelmoinnin tekniikkaa 15.1

Kiipulan ammattiopisto. Liiketalous ja tietojenkäsittely. Erja Saarinen

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Taulukot. Jukka Harju, Jukka Juslin

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Eclipse & WindowBuilder

Ohjelmoinnin peruskurssien laaja oppimäärä

UML Luokkakaavio 14:41

Ohjelmointi 1 / syksy /20: IDE

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

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

CoMa - Ohjelmoinnin tyyliohje

Ohjelmoinnin peruskurssien laaja oppimäärä

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

P e d a c o d e ohjelmointikoulutus verkossa

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Ohjelmoinnin perusteet Y Python

Hirviö. Design Patterns

Java-API, rajapinnat, poikkeukset, UML,...

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

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmoinnin jatkokurssi, kurssikoe

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

Ohjelmistojen mallintaminen. Luento 3, 9.11.

Kehyksillä toteuttettujen tuotelinjojen rakenteellinen optimointi

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistotekniikan menetelmät, suunnittelumalleja

2. Olio-ohjelmoinnin perusteita 2.1

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Ohjelmistojen suunnittelu

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin perusteet, syksy 2006

Muutamia peruskäsitteitä

Groovy. Niko Jäntti Jesper Haapalinna Group 31

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Ohjelmistojen mallintaminen. Luento 10, 3.12.

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Transkriptio:

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

SEPA: REFAKTOROINTI 2 (9)

SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen versio 0.2 Antti Ahvenlampi Lisättiin käytäntöjä ja menetelmän käyttö ensimmäisessä iteraatiossa ja johdanto

SEPA: REFAKTOROINTI 4 (9) SISÄLTÖ 1. JOHDANTO...5 2. MENETELMÄN KÄYTTÖÖNOTTO...6 2.1. Erota metodiksi (Extract method)...6 2.2. Esittele selittävä muuttuja (Introduce explaining variable)...6 2.3. Säilytä olio kokonaisena (Preserve whole object)...6 2.4. Avaa metodi (Inline method)...6 2.5. Erota rajapinnaksi (Extract Interface)...6 2.6. Esittele johtaja (Introduce a controller)...6 2.7. Kavenna muutujan näkyvyyttä (Reduce scope of variable)...7 3. KOKEMUKSET JA MUUTOKSET...8 3.1. Projektin suunnittelu...8 3.2. Iteraatio 1...8 3.3. Iteraatio 2...8 3.4. Yhteenveto...8 4. LÄHTEET...9

SEPA: REFAKTOROINTI 5 (9) 1. JOHDANTO Refaktorointi tarkoittaa koodin muokkaamista askeleittain vaikuttamatta sen toiminnallisuuteen. Muokkauksen jälkeen yksikkötestit ajetaan uudestaan varmistukseksi siitä ettei muokkaus vaikuttanut mihinkään. Näillä muokkausaskelilla parannetaan koodin luettavuutta, selkeyttä ja yksinkertaistetaan monimutkaisia rakenteita. Refaktorointia tehdään ohjelmoinnin yhteydessä ja sitä tehdään helposti huomaamatta, koska refaktorointikäytännöt ovat osa hyviä ohjelmointitapoja. Refaktorointikäytännöt on otetaan huomioon myös koodikatselmoinnissa, koska katselmoinnissa etsitään koodista osia joita pitäisi refaktoroida.

SEPA: REFAKTOROINTI 6 (9) 2. MENETELMÄN KÄYTTÖÖNOTTO 2.1. Erota metodiksi (Extract method) Koko ryhmä refaktoroi, käytännön mukaan, limittäin ohjelmoinnin yhteydessä. Käytännössä ohjelmoija refaktoroi pieniä paloja ohjelmakoodista aina, kun hän huomaa hankalia rakenteita tai näkee uudelleenmuokkauksen tarpeelliseksi. Usein hyvät ohjelmoijat refaktoroivat luonnostaan implisiittisesti, mutta kaikkia ryhmän jäseniä on pyydetty kiinnittämään erityistä huomiota refaktorointiin sekä raportoimaan käyttämistään menetelmistä. Molemmissa iteraatioissa refaktorointia tehdään ohjelmoinnin yhteydessä ja iteraatio 2:ssa kun koodia on enemmän suoritamme koodikatselmoinnin, jossa tarkastamme koodin refaktorointikäytäntöjen osalta. Refaktoroinnissa apuna käytetään Eclipse IDE:a. Jos sama koodi toistuu useasti ( yli 3 kertaa ), niin se kannattaa erottaa omaksi metodiksi. Tällä metodilla korvataan koodin vanhat esiintymät ja metodi tulisi nimetä koodia kuvaavaksi. Tämä menetelmä hyödyttää luettavuutta ja, jos koodia halutaan muuttaa, niin se tarvii tehdä vain yhdessä paikassa ja siten vähentäen mahdollisien bugien määrää. 2.2. Esittele selittävä muuttuja (Introduce explaining variable) Jos koodissa esiintyy monimutkaista koodia yhden arvon laskemiseksi, niin se kannattaa laskea etukäteen ja sijoittaa tulosta kuvaavasti nimettyyn muuttujaan. Nyt voidaan käyttää tätä muuttujaa monimutkaisen koodin sijaan samalla huomattavasti parantaen luettavuutta ja koodin selkeyttä. 2.3. Säilytä olio kokonaisena (Preserve whole object) 2.4. Avaa metodi (Inline method) 2.5. Erota rajapinnaksi (Extract Interface) 2.6. Esittele johtaja (Introduce a controller) Jos oliolta kysytään useita arvoja välitettäväksi parametrinä metodikutsussa, kannatta antaa parametrinä koko olio. Tämän avulla voidaan vähentää annettavien parametrien määrää ja selkeyttää koodia. Jos metodin runko on yhtä selkeä kuin sen nimi, niin liitetään runko osaksi kutsuvaa koodia ja metodi poistetaan. Tämä tehdään yleensä vain erittäin yksinkertaisille ja lyhyille metodeille. Tällä vähennetään turhien metodikutsujen määrää. Useat luokat käyttävät samaa osajoukkoa jonkun luokan toiminnoista, tai jos kahdella tai useammalla luokalla on sama osajoukko toimintoja. Tällöin toimintojen osajoukko erotetaan omaksi rajapinnaksi. Rajapintojen yhtenäistäminen helpottaa koodin uudelleen käyttöä ja muuttamista. Kerätään jonkun paketin tai ohjelman yhtenäisen osajoukon kontrolli yhden erityisen luokan toiminnoiksi. Kontrolliluokka on ikäänkuin julkisivu tietyn paketin toiminnallisuudelle. Pakettien uudelleenkäyttö selkeytyy ja yksinkertaistuu.

SEPA: REFAKTOROINTI 7 (9) 2.7. Kavenna muutujan näkyvyyttä (Reduce scope of variable) Paikallinen muuttuja jonka näkyvyysalue on suurempi kuin sen käyttöalue. Tällöin muuttujan näkyvyysaluetta kavennetaan siten että se on sama kuin sen käyttöalue. Tällä poistetaan turhat muuttujat joita ei koskaan käytetä ja estetään ylimääräisten nimien varaaminen nimiavaruudesta.

SEPA: REFAKTOROINTI 8 (9) 3. KOKEMUKSET JA MUUTOKSET 3.1. Projektin suunnittelu 3.2. Iteraatio 1 Taulukko 3.2a: Refaktoroinnin käyttö Käytäntö Erota metodi Esittele selittävä muuttuja Mihin käytettiin? Suunnitteluvaiheessa ei tuoteta koodia ollenkaan eli ei ole myöskään mitään refaktoroitavaa. Ohjelmoinnin yhteydessä tehtiin refaktorointia. Kappaleessa 2 kirjaamiamme refaktorointikäytäntöjä käytettiin ainakin taulukossa 3.2a esitetettyihin osiin. Ensimmäisessä iteraatiossa refaktoroinnin käyttö jäi vähäiseksi. Toisessa iteraatiossa pyrimme soveltamaan käytäntöjä paremmin projektin yhteydessä. Color schemessä pitää hakea oikeat pisteet värisuoralta ja tämä haku tehtiin kahdessa eri metodissa. Yhdistin ja erotin koodin omaksi metodiksi. Color schemessä laskettiin suoraan Color luokan konstruktoriin interpoloidut arvot, mutta eclipsen java standard autorivitys teki siitä aika sekavan. Joten laskin nämä ennakolta omiin muuttujiinsa ja käytin niitä vanhojen lauseiden sijaan Color luokan constructorissa. 3.3. Iteraatio 2 3.4. Yhteenveto

SEPA: REFAKTOROINTI 9 (9) 4. LÄHTEET Refactoring Home Page - www.refactoring.com Larman, Craig. 2004. Applying UML and patterns: an introduction to objectoriented analysis and design and iterative development 3 rd ed. Sivut 385 394.