COTOOL dokumentaatio SEPA: Refaktorointi

Koko: px
Aloita esitys sivulta:

Download "COTOOL dokumentaatio SEPA: Refaktorointi"

Transkriptio

1

2 Table of Contents Refaktorointi Tehtävänanto Johdanto Refaktoroinnin taustaa Menetelmä Edut Teoria Todellisuus Haitat Teoria Todellisuus Käytännön sovellutus Kokemukset ja muutokset Toteutukset Toteutukset 1a ja 1b Toteutukset 2a ja 2b Refaktorointeja StructureLoaderin kutsuminen Vakiot Servlettien karsiminen Poikkeuskäsittely Parametrien yhdistäminen Kaksinkertaisen koodin poisto StructureLoader Arkkitehtuuri Refaktorointien vastaavuus suunnitelmiin ja sääntöihin Yhteenveto Viitteet

3 1 (7) Refaktorointi Autere Aleksi, 57412R Welin Jan, 49620N Versiohistoria Versio Pvm Tekijä Kuvaus AA & AA & AA & AA & Ensimmäinen versio Toinen versio Vain pieniä muutoksia Omat osuudet AA Omat osuudet AA & Muistiinpanot ja tehtävienjako Yhteenveto, oikoluku ja tarkistus 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. Legend: - BL - Businesslogiikka - DAO - Data Access Object, oliot joita tietokannan ja BL:n välillä vaihdetaan - XP - extreme Programming, ketterä ohjelmistokehitys metodologia 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

4 2 (7) 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 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 5.1 Teoria Tässä kappaleessa on pyritty miettimään menetelmän tuomia etuja. Etuja ovat ainakin: - Koodin ymmärettävyys ja ylläpidettävyys paranee. - Refaktoroidusta koodista saattaa olla helpompi löytää virheitä. 5.2 Todellisuus Huomasimme tietenkin, että koodin ymmärrettävyys ja ylläpidettävyys paranee, kun siitä refaktoroidaan bad-code-smellien perusteella. Sen sijaan virheiden helpompaa havaittavuutta refaktoroidusta koodista emme käytännössä huomanneet. Sen sijaan refaktoroinnin aikana koodin rakennetta tulee mietittyä uudelleen ja kyseenalaistettua aikaisemmin tehtyjä ratkaisuja. Siinä mielessä refaktoroinnin aikana löytyi kyllä virheitä. Lisäksi huomasimme, että oli kätevää projektin edistymisen kannalta, että saatiin toimivaa koodia aikaiseksi ilman, että tarvitsi pyrkiä täydellisyyteen. 6 Haitat 6.1 Teoria

5 3 (7) 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/, 6.2 Todellisuus Projektissa huomattiin että refaktorointi on todella hyödyllinen työkalu, mutta refaktorointia tulisi käyttää harkiten ja suunnitellusti. Refaktoroinnin suunnittelun tarpeellisuus oli se joka yllätti hieman. Jotta lopputulos olisi hyödyllisempi kuin refaktoroimaton koodi suunnittelu on tosissaan tarpeellista, huomasimme että vain ryhtymällä toimeen lopputulos on kutakuinkin samaa tasoa kuin lähtökohta. Esimerkiksi refaktorointi isoissa määrin osoittautui käytännössä mahdottomaksi, vaihtoehtona olisi ollut ottaa vain osa järjestelmästä huomioon jolloin vaikutukset kokonaisuuteen olisi jäänyt tuntemattomaksi. Tästä syystä StructureLoaderin refaktoroinnin viimeistely jouduttiin hylkäämään, aikaa ei olisi riittänyt enää lopuksi. Käytännössä jokainen edellisessä Teoria-kappaleessa mainittu kohta piti paikkansa projektissamme. Hyvä että nämä asiat olivat tiedossa. 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. - 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 Toteutukset Toteukset 1 ja 2 jaettiin ensimmäisen iteraation alussa alitoteutuksiin 1a, 1b, 2a ja 2b.

6 4 (7) Toteutukset 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 Toteutukset 2a ja 2b Iteraatioissa 2a ja 2b koodia syntyi huomattavasti nopeammalla vauhdilla 1a- ja 1b-iteraatioihin verrattuna. Lisäksi ohjelmointityöllä oli erittäin kiire. Nämä tekijät yhdessä vaikuttivat siihen, että ohjelmakoodista oli selvästi tunnistettavissa ongelmakohtia, jotka kaipasivat refaktorointia. Usein ongelmakohtia ei tarvinnut edes systemaattisesti etsiä, vaan ne hyppivät silmille etsimättäkin. Välillä huonoa koodia tuotettiin jopa siinä mielessä tarkoituksella, että uuden toiminnallisuuden tuottaminen nopeasti oli tärkeämpää kuin ohjelmakoodin oikeaoppisuus. Tästä hyvänä esimerkkinä oli poikkeuskäsittelyn epäyhtenäinen toteutus alussa, joka refaktoroitiin loppuvaiheessa yhtenäiseksi. Refaktorointia tehtiin määrällisesti eniten 2b iteraation aikana loppua kohti enenevissä määrin. Yksittäinen suurin refaktorointi oli arkkitehtuurin järjestely uudestaan aivan 2a iteraation alussa. Refaktorointeja suorittivat arkkitehti, kaikki kehittäjät ja testaaja. Kaiken kaikkiaan projektin aikana refaktoroitiin lähes joka toista luokkaa. 8.2 Refaktorointeja Alla on kuvattu joitain tehtyjä refaktorointeja StructureLoaderin kutsuminen StructureLoader on luokka, joka vastaa hierarkisen aluerakenteen rakentamisesta tietokannasta noudettujen tietojen mukaiseksi. Aluerakennetta tarvitaan sekä dynaamisen javascriptin luomiseen, että hierarkisen html-hakupuun luomiseen. Nämä ovat toisistaan riippumattomia tehtäviä, joita voidaan kutsua erikseen, joten ne myös kumpikin kutsuivat StructureLoaderia toisistaan riipumatta erikseen. Rakenteen luominen on kuitenkin varsin raskasta, sillä se aiheuttaa lukuisia tietokantakyselyjä. Tämän vuoksi päätettiin ladata rakenne vain kerran ja tallentaa rakenneolio sessioon, josta se voidaan tarvittaessa hakea. Tämän refaktoroinnin suoritti Aleksi ja Jani, eikä toteutuksessa törmätty ongelmiin. Eclipse ei tässä tapauksessa tarjonnut mitään hyödyllisiä aputoimintoja. Refaktorointi vaikutti kahteen luokkaan, jotka olivat pääkäyttöliittymän lataava servletti sekä hakupuun lataava servletti Vakiot COTOOL on Rauinfoon myöhemmin integroitava lisäominaisuus, ja alusta asti oli tiedossa, ettei integrointia tulla suorittamaan projektin aikana. Tämän vuoksi saatoimme asettaa vakioiksi tiettyjä arvoja, jotka Rauinfo-integroinnin jälkeen olisivat Rauinfon asettamia muuttujia. Alusta asti ei kuitenkaan ollut yhtenäistä käytäntöä eri vakioille. Tästä syystä vakioita oli luokissa siellä sun täällä, sekä jopa kovakoodattuina metodikutsuissa. Vakiot eriytettiin omaan luokkaansa 2a-iteraation alussa. Refaktoroijana oli pääasiassa Kimmo. Tämän refaktoroinnin jälkeen myös uusille vakioille oli luonnollinen paikka, eikä rumia kovakoodauksia enää ilmestynytkään Servlettien karsiminen

7 5 (7) COTOOL:n arkkitehtuuri suunniteltiin siten, että servletteihin tulisi mahdollisimman vähän logiikkaa - niiden tarkoitus on vain välittää businesslogiikan tuottamaa dataa JSP-sivuille. Sen takia alussa käytetty dynaamisen Javascriptin palauttava GetJavascript-servletti todettiin turhaksi, koska sen tehtävänä oli vain IEJavascriptLoaderin muodostaman merkkijonon tulostaminen HTTP-streamiin. Servlettien karsintaan vaikuttaneet bad code smellit olivat "duplicate code" sekä "shotgun surgery", sillä kaikki servletit olivat hyvin samanlaisia. Dynaaminen Javascript yhdistettiin suoraan pääkäyttöliittymän servletin kautta HTML-koodiin. Myös tämän refaktoroinnin suoritti Kimmo 2a-iteraation alussa. Aivan projektin lopussa saimme asiakkaan oman toteutuksen SVG-kuvien lataamisesta tietokantaan. Tätä myötä siirryimme käyttämään myös Rauinfon omaa download-komponenttia, joka palauttaa kuvan URL-parametrina annetun kuva-id:n perusteella. Tämä muutos vaati uuden tietokantametodin luomista, jotta kuvanlatausservletille saatiin välitettyä halutun kuvan id HTML:n läpi, sillä vanhassa servletissä oikea kuva valittiin rakennuksen id:n perusteella Poikkeuskäsittely Projektin alkuvaiheessa käytettiin CotoolExceptionia yleisesti lähes kaikissa poikkeustilanteissa. Rauinfon käytäntö on valuttaa poikkeukset servleteille asti ja kirjoittaa virhesanoma lokiin sekä näyttää käyttäjälle ylimalkaisempi virheilmoitus. Asiakkaan kanssa todettiin, ettei Cotoolin omaan poikkeusluokkaan ole mitään tarvetta, vaan RauinfoException ja RauinfoDbException riittävät täydellisesti tarpeisiimme. Oman poikkeusluokan käyttäminen aiheutti "shotgun surgery smellin". CotoolExceptionien refaktoroinnin Rauinfon exceptioneiksi suoritti Matti. Tässä refaktoroinnissa ei ollut kyse pelkästään viittausten muuttamisesta, vaan koodi vaati paikoin laajempaakin uudelleen strukturointia, sillä poikkeuskäsittelyn yhdenmukaisuus oli kärsinyt kovassa kiireessä, ja monesti kehittäjien tavoitteena oli ollut saada vain koodi kääntymään välittämättä poikkeuskäsittelyn konsistenssista. Poikkeuskäsittelyn refaktorointi kosketti 33 tiedostoa ja vei aikaa noin kahdeksan tuntia. Pääosin tehtävä suoritettiin käyttäen Eclipsen rename-toimintoa, ja loput tarkistukset ja siivoukset tehtiin käsin ja search/replace-toiminnolla Parametrien yhdistäminen BL-luokissa sekä tietokantarajapinnassa käytettiin aluksi vain muutamaa argumenttia metodeissa. Järjestelmän kehittyessä ja toiminnallisuuden lisääntyessä metodien argumenttien määrä moninkertaistui nopeasti. Tässä vaiheessa oli tarve miettiä ongelmalle ratkaisu. Päätettiin että luodaan Parameters-luokka johon laitetaan argumentit jotka ovat käytössä näissä metodeissa. Tämän jälkeen lähes jokainen metodi saa parametrikseen Parameters-luokan instanssin ja käyttää tästä vain niitä kenttiä joita tarvitsee. Tietysti tälläkin päätöksellä oli kauaskantoisia vaikutuksia. Esimerkiksi tarkistusten määrä lisääntyi, tarpeesta tarkistaa onko tiettyjä kenttiä asetettu parametreissä. Kaiken kaikkiaan parametrien yhdistäminen selkeytti BL-kerroksen ja tietokantarajapinnan toimintaa ja nopeutti kehitystyötä, mutta toisaalta lisäsi hieman yksikkötestien määrää, kun testattavia variaatioita tuli hieman lisää Kaksinkertaisen koodin poisto Koska ensimmäisen iteraation jälkeen oltiin jäljessä tavoitteista oli toisen iteraation alussa tärkeämpää saada jotain näkyvää aikaiseksi. Usein tämä tapahtui suunnittelun kustannuksella. Kaksinkertaista koodia oli tässä tapauksessa järkevämpää vain tehdä ja luottaa siihen että lopuksi voidaan koodit lajitella uudelleen. Device-luokan metodi hasmeasurement(string) on yksi esimerkki refaktoroidusta kaksinkertaisesta koodista. Metodi palauttaa totuusarvon liittyen siihen onko laitteella annetun tyyppistä mittaustulosta. Ennen refaktorointia koodia oli kahdessa metodissa yhteensä 30 riviä. Refaktoroinnin jälkeen ko. metodi käytti jo olemassa olevaa metodia hyväksi jolloin koodin määrä laski 20 riviin. Lisäksi koodin luettavuus ja ylläpidettävyys paranivat StructureLoader Kahdella viimeisellä viikolla oli tarkoitus tehdä viimeiset silaukset koodille sekä refaktoroida viimeisimmät koodit. Kuitenkin ylläpitokäyttöliittymä vei enemmän resursseja kuin olimme suunnitelleet. Tämän johdosta StructureLoaderiin (SL) suunniteltu iso refaktorointi jouduttiin jättämään tekemättä.

8 6 (7) SL-luokassa rakennetaan Javascriptiä varten näytettävä alue alialueineen sekä liitetään jokaiseen (ali)alueeseen niiden laitteet sekä virtuaaliset laitteet (laitteet jotka ovat alialueiden "varjoja"). Tällä hetkellä SL:n metodi getarea(parameters) on todella pitkä ja ulottaa lonkeronsa melko pitkälle muiden bean-luokkien syövereihin (Message Chains). Toinen ongelma metodin kanssa on sen if-lauseviidakko (Switch Statements, mutta if-lauseilla toteutettuna). Tällä hetkellä if-lauseita ei ole kuin yksi haara jossa tarkistetaan onko laitteen tyyppi lämpötilamittari. Mutta koska tiedettyjä eri mittarityyppejä on n. 20 ja näillä tällä hetkellä jokaisen mittarityypin 3-4 eri mittausdatatyyppiä käydään läpi jokaiselle mittarityypille erikseen. Jokainen mittausdatatyypin tarkistus vie n. 30 riviä koodia, nopeasti laskettuna tällä tavalla saataisiin yli 2000 riviä lähes identtistä koodia! Refaktoroinnille olisi siis todellakin tilausta, kutenkin tehtävän laajuus suunnitteluineen - kaikkineen on valitettavasti liian laaja jotta sitä enää oltaisiin projektin lopuksi voitu totetuttaa. Tulevaisuudessa olisikin siis tärkeää saada jaettua SL:n ko. metodin tehtävien vastuuta jaettua hieman uudelleen (ei pitkiä lonkeroita) sekä switch-lauseen korvaaminen oliomalliin sopivalla rakenteella Arkkitehtuuri Ensimmäisen iteraation lopuksi tehdyn roolivaihdoksen jälkeen uusi arkkitehti Kimmo joutui suunnittelemaan arkkitehtuuria uudestaan, jotta ensimmäisen iteraation aikana tehdyt valinnat saataisiin yhtenäistettyä ja turvattua tuleva kehitystyö. Lisäksi DAO-luokan metodit olivat kasvaneet ja monimutkaistuneet ensimmäisen iteraation aikana ilman että muutoksia oli juurikaan suunniteltu, toisin sanoen ne olivat vain kasaantuneet. Tämän jälkeen arkkitehti teki päätöksen DAO:n yksinkertaistaistamisesta. Käytännössä yksinkertaistaminen tarkoitti logiikan siirtämistä DAO:sta BL:aan, jonne jouduttiin suunnittelemaan uusi arkkitehtuuri toiminnallisuuden säilyttämiseksi. Tämä refaktorointi oli koko projektin suurin niin ajallisesti kuin laajuudellisesti. Koko prosessiin meni n. neljä työpäivää, pelkästään refaktoroinnin suunnitteluun ja toteutukseen jouduttiin käyttämään aikaa kaksi työpäivää, toiset kaksi päivää menivät uusien toiminnallisuuksien suunnitteluun. Työkaluna refaktoroinnissa käytettiin Eclipseä, Borland Together Architect 2006:aa sekä kynää ja paperia. Eclipsellä hoidettiin verrattaen pienet muutokset kuten metodien siirrot ja uudelleen nimeämiset. Togetheriä, kynää ja paperia käytettiin lähinnä refaktoroinnin suunnitteluun vaikka mahdollisuus olisi ollut vaikka generoida koodia automaattisesti Togetherillä. Koska refaktorointi tehtiin vaiheessa jossa toteutusta ei kovin paljoa oltu tehty verrattuna lopulliseen toiminnallisuuden määrään, vaikutti tehty refaktorointi suureen osaa koodista, mutta vain kouralliseen luokkia. Tämä refaktorointi oli projektia ajatellen hyvin tärkeä, jopa pakollinen jotta projekti olisi pysynyt hanskassa. Tämä refaktorointi olisi varmasti suoritettu ilmankin SEPA-aihetta niin välttämätön tämä refaktorointi oli. 8.3 Refaktorointien vastaavuus suunnitelmiin ja sääntöihin Käytännössä kaikki refaktoroinnit noudattivat alussa valittuja menetelmä tapoja ks. kappale Toteutukset 2a ja 2b. Yksikkötestit oli kaikista refaltoroiduista tapauksista, eräissä yksittäisissä tapauksissa lisättiin muutama yksikkötesti jotta saatiin refaktorointi katetuksi. Toista sääntöä ei koskaan tarvinnut käyttää, koska jokainen tehty refaktorointi tehtiin niin pienin askelin ettei mitään mennyt huomattavasti rikki. Kolmas sääntö oli tuli tehdessä kuin itsestään, refaktorointi suurissa määrin projektilaisten kokemuksella ei vain käytännössä ollut mahdollista. 9 Yhteenveto

9 7 (7) Refaktoroinnin vaikutus servletteihin projektin lopussa Projektin aikana tuli selväksi että refaktorointi on välttämätöntä projektin edetessä. Refaktorointi parantaa oikein toteutettuna oikeasti koodin ymmärrettävyyttä. Se vaatii tosin ennalta suunnittelua ja järjestelmällisyyttä. Muuten projektin lopulla päädytään liian suuriin muutoksiin yhdellä kertaa, joka aiheuttaa kiusauksen jättää refaktorointi pois tai aiheuttaa koodin rikkoontumisen ja vaikean korjausprosessin. Vaikka refaktorointi oli tiedostettua ja suunniteltua tässä projektissa olisi käytännössä ollut hyödyllisempää jos refaktorointi olisi ollut vieläkin tiukemmin kontrolloitua. Tällöin refaktorointia olisi tullut tehtyä vielä tiuhemmin joka puolestaan olisi vähentänyt refaktoroinnin tarvetta projektin lopulla. Lisäksi refaktorointi pienissä määrin on kokemustemme mukaan hyödyllisempää kuin suurissa määrin yhdellä kertaa toteutettuna. Totuus on että refaktoroinninkin osalla aika ja resurssit loppuivat projektissa kesken. Yksi refaktoroinnin suunnittelua hankaloittanut asia oli järjestelmän tulevaisuuden epävarmuus. Koska asiakas ei ollut projektin aikana missään vaiheessa oikein varma tarpeistaan liian moni asia jouduttiin vain tekemään panostamatta asiaan enempää, luottaen siihen että myöhemmin tämäkin asia voidaan refaktoroida ja uudelleen suunnitella paremmin. 10 Viitteet Kaikki internet-viittaukset avautuvat uuteen ikkunaan

COTOOL dokumentaatio SEPA: Refaktorointi

COTOOL dokumentaatio SEPA: Refaktorointi Table of Contents Refaktorointi................................................................................ 1 1 Tehtävänanto.............................................................................

Lisätiedot

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

4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T 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

Lisätiedot

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmistojen mallintaminen. Luento 11, 7.12. Ohjelmistojen mallintaminen Luento 11, 7.12. Viime viikolla... Oliosuunnittelun yleiset periaatteet Single responsibility eli luokilla vain yksi vastuu Program to an interface, not to concrete implementation,

Lisätiedot

Test-Driven Development

Test-Driven Development Test-Driven Development Ohjelmistotuotanto syksy 2006 Jyväskylän yliopisto Test-Driven Development Testilähtöinen ohjelmistojen kehitystapa. Tehdään ensin testi, sitten vasta koodi. Tarkoituksena ei ole

Lisätiedot

COTOOL dokumentaatio Testausdokumentit

COTOOL dokumentaatio Testausdokumentit Table of Contents Testausraportti.............................................................................. 1 1 Tiivistelmä...............................................................................

Lisätiedot

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

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } } Yksikkötestauksella tarkoitetaan lähdekoodiin kuuluvien yksittäisten osien testaamista. Termi yksikkö viittaa ohjelman pienimpiin mahdollisiin testattaviin toiminnallisuuksiin, kuten olion tarjoamiin metodeihin.

Lisätiedot

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

Lisätiedot

Automaattinen yksikkötestaus

Automaattinen yksikkötestaus Teknillinen Korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Automaattinen yksikkötestaus Ryhmä Rajoitteiset Versio Päivämäärä Tekijä

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

Test-Driven Development

Test-Driven Development Test-Driven Development Syksy 2006 Jyväskylän yliopisto Test-Driven Development Testilähtöinen ohjelmistojen kehitystapa. Tehdään ensin testi, sitten vasta koodi. Tarkoituksena ei ole keksiä kaikkia mahdollisia

Lisätiedot

T Refaktorointi

T Refaktorointi T-76.115 SEPA päiväkirja Refaktorointi Jani Heikkinen Kim Nylund 15. maaliskuuta 2005 1 Sisältö 1 Esittely 3 2 Menetelmä projektikäytössä 3 3 Kokemukset ja muutokset suunnitelmaan 4 3.1 Suunnitteluvaihe...........................

Lisätiedot

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

T Tietojenkäsittelyopin ohjelmatyö. Testiraportti, vaihe T1. Tietokonegrafiikka-algoritmien visualisointi. Testiraportti, vaihe T1 T-76.115 Tietojenkäsittelyopin ohjelmatyö Sisältö Tästä dokumentista ilmenee T1-vaiheessa suoritettu testaus, sen tulokset ja poikkeamat testisuunnitelmasta. Päivämäärä 1.12.2002 Projektiryhmä Keimo keimo-dev@list.hut.fi

Lisätiedot

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

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

Lisätiedot

Testivetoinen ohjelmistokehitys

Testivetoinen ohjelmistokehitys Testivetoinen ohjelmistokehitys Ohjelman luominen pienin askelin 1. Kirjoita testi, joka testaa ohjelmalle myöhemmin lisättävää toiminnallisuutta. 2. Suorita testi. Testin ei tule mennä läpi. Mikäli testi

Lisätiedot

Data Sailors - COTOOL dokumentaatio Riskiloki

Data Sailors - COTOOL dokumentaatio Riskiloki Table of Contents 1 Johdanto.................................................................................... 1 1.1 Versiohistoria...........................................................................

Lisätiedot

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

SEPA päiväkirja. BetaTeam. Juho Mäkinen, 57796V, Jari Leppä, 42710V, Versio Pvm Tekijä Kuvaus SEPA päiväkirja BetaTeam Juho Mäkinen, 57796V, jvmakine@cc.hut.fi Jari Leppä, 42710V, jleppa@cc.hut.fi Versio Pvm Tekijä Kuvaus 0.1 10.11.2005 Juho Mäkinen Johdanto 1. 0.2 11.11.2005 J.Mäkinen, Käytäntöön

Lisätiedot

COTOOL dokumentaatio Testitapaukset

COTOOL dokumentaatio Testitapaukset Table of Contents Suite 1: Smoketestit......................................................................... 1 1 Johdanto.................................................................................

Lisätiedot

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

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi Testilähtöinen ohjelmistokehitys Kevät 2008 Jonne Itkonen Jyväskylän yliopisto Testilähtöinen ohjelmistokehitys Test-Driven Development, TDD Tehdään ensin testi, sitten vasta koodi. TDD Testilähtöinen

Lisätiedot

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

T SEPA - STAATTISET MENETELMÄT Tuomas Tolvanen, 55382U Timo Töyry, 58578B T-76.5158 SEPA - STAATTISET MENETELMÄT Tuomas Tolvanen, 55382U Timo Töyry, 58578B T-76.5158 SEPA - Pariohjelmointi 2 (7) VERSION HALLINTA Versio Päivä Tekijä Kuvaus 0.1 5.12.2006 Tuomas Tolvanen Ensimmäinen

Lisätiedot

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

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3 AgilElephant SEPA Diary Petri Kalsi 55347A Heikki Salminen 51137K Tekijä: Petri Kalsi Omistaja: ElectricSeven Aihe: PK&HS Sivu 1 / 7 Dokumenttihistoria Revisiohistoria Revision päiväys: 29.11.2004 Seuraavan

Lisätiedot

COTOOL dokumentaatio Riskiloki

COTOOL dokumentaatio Riskiloki Table of Contents 1 Johdanto.................................................................................. 1 1.1 Versiohistoria...........................................................................

Lisätiedot

Järjestelmän kriittisimmille toiminnallisuuksille (listattu alla), toteutetaan 1

Järjestelmän kriittisimmille toiminnallisuuksille (listattu alla), toteutetaan 1 1. Testattavat asiat Järjestelmän kriittisimmille toiminnallisuuksille (listattu alla), toteutetaan 1 selainyhteensopivuustesti käyttäen Suomessa eniten käytössä olevia selaimia. Uuden keräyksen lisääminen

Lisätiedot

Menetelmäraportti - Konfiguraationhallinta

Menetelmäraportti - Konfiguraationhallinta Menetelmäraportti - Konfiguraationhallinta Päiväys Tekijä 22.03.02 Ville Vaittinen Sisällysluettelo 1. Johdanto... 3 1.1 Tärkeimmät lyhenteet... 3 2. Konfiguraationhallinnan tärkeimmät välineet... 4 2.1

Lisätiedot

T-76.5158 SEPA päiväkirja

T-76.5158 SEPA päiväkirja T-76.5158 SEPA päiväkirja Ryhmä 14 Automatisoitu yksikkötestaus Mikko Luukkonen, 60549T Lauri Helkkula, 62820H Matti Eerola, 60686A Versiohistoria Versio Pvm Tekijä(t) Kuvaus 0.3 25.11.2007 Luukkonen,

Lisätiedot

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

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Muilla kielillä: English Suomi Pong-peli, vaihe 3 Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Jaetaan ohjelma pienempiin palasiin (aliohjelmiin) Lisätään peliin maila (jota ei voi vielä

Lisätiedot

Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu. LiKe Liiketoiminnan kehityksen tukiprojekti

Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu. LiKe Liiketoiminnan kehityksen tukiprojekti Tik-76.115 Tietojenkäsittelyopin ohjelmatyö Tietotekniikan osasto Teknillinen korkeakoulu TESTIRAPORTTI LiKe Liiketoiminnan kehityksen tukiprojekti Versio: 1.1 Tila: hyväksytty Päivämäärä: 13.2.2001 Tekijä:

Lisätiedot

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

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Written by Administrator Monday, 05 September 2011 15:14 - Last Updated Thursday, 23 February 2012 13:36

Written by Administrator Monday, 05 September 2011 15:14 - Last Updated Thursday, 23 February 2012 13:36 !!!!! Relaatiotietokannat ovat vallanneet markkinat tietokantojen osalta. Flat file on jäänyt siinä kehityksessä jalkoihin. Mutta sillä on kuitenkin tiettyjä etuja, joten ei se ole täysin kuollut. Flat

Lisätiedot

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

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14 Arkkitehtuurikuvaus Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy Ryhmä 14 Muutoshistoria Versio Pvm Päivittäjä Muutos 0.4 1.11.2007 Matti Eerola 0.3 18.10.2007 Matti Eerola 0.2

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Uudelleenkäytön jako kahteen

Uudelleenkäytön jako kahteen Uudelleenkäyttö Yleistä On pyritty pääsemään vakiokomponenttien käyttöön Kuitenkin vakiokomponentit yleistyneet vain rajallisilla osa-alueilla (esim. windows-käyttöliittymä) On arvioitu, että 60-80% ohjelmistosta

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien

Lisätiedot

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

Ohjelmistojen laadun parantaminen refaktoroinnilla Simo Mäkinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Ohjelmistojen laadun parantaminen refaktoroinnilla Simo Mäkinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Mäkinen / Ohjelmistojen laadun parantaminen / Ohjelmistoprosessit ja ohjelmistojen laatu

Lisätiedot

Good Minton QA Raportti Iteraatio 1 Sulkapalloliiton Kilpailujärjestelmä

Good Minton QA Raportti Iteraatio 1 Sulkapalloliiton Kilpailujärjestelmä Good Minton QA Raportti Iteraatio 1 Sulkapalloliiton Kilpailujärjestelmä Versiohistoria: Versio: Pvm: Laatijat: Muutokset: 0.1 2006 12 09 Jani Eränen Alustava DOKUMENTIN TILA: Alustava Valmis Tarkastettu

Lisätiedot

P e d a c o d e ohjelmointikoulutus verkossa

P e d a c o d e ohjelmointikoulutus verkossa P e d a c o d e ohjelmointikoulutus verkossa Java-kielen perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN

Lisätiedot

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

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausdokumentti Kivireki Helsinki 17.12.2007 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Anu Kontio Ilmari

Lisätiedot

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, mallintaminen ja UML 582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti

Lisätiedot

ASCII-taidetta. Intro: Python

ASCII-taidetta. Intro: Python Python 1 ASCII-taidetta All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/18cplpy to find out what to do.

Lisätiedot

Good Minton Sulkapalloliiton Kilpailujärjestelmä SEPA: Heuristinen arviointi

Good Minton Sulkapalloliiton Kilpailujärjestelmä SEPA: Heuristinen arviointi Good Minton Sulkapalloliiton Kilpailujärjestelmä SEPA: Heuristinen arviointi Versiohistoria: Versio: Pvm: Laatijat: Muutokset: 0.1 2006-11-25 Janne Mäkelä Alustava 1.0 2006-12-10 Janne Mäkelä Valmis 1.

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML AJAX-konsepti AJAX Asynchronous JavaScript And XML Viimeisin muoti-ilmiö web-ohjelmoinissa, termi Ajax tuli käyttöön vuoden 2005 aikana Joukko teknologioita, joiden avulla voidaan toteuttaa uudenlaisen

Lisätiedot

Asko Ikävalko, k0201291 22.2.2004 TP02S-D. Ohjelmointi (C-kieli) Projektityö. Työn valvoja: Olli Hämäläinen

Asko Ikävalko, k0201291 22.2.2004 TP02S-D. Ohjelmointi (C-kieli) Projektityö. Työn valvoja: Olli Hämäläinen Asko Ikävalko, k0201291 22.2.2004 TP02S-D Ohjelmointi (C-kieli) Projektityö Työn valvoja: Olli Hämäläinen Asko Ikävalko LOPPURAPORTTI 1(11) Ratkaisun kuvaus Käytetyt tiedostot Tietuerakenteet Onnistuin

Lisätiedot

PS-vaiheen edistymisraportti Kuopio

PS-vaiheen edistymisraportti Kuopio PS-vaiheen edistymisraportti Kuopio Kuopio, PS-vaiheen edistymisraportti, 30.10.2001 Versiohistoria: Versio Pvm Laatija Muutokset 1.0 30.10.2001 Ossi Jokinen Kuopio2001, vain kurssin T-76.115 arvostelun

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 6 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

Testauksen tuki nopealle tuotekehitykselle. Antti Jääskeläinen Matti Vuori

Testauksen tuki nopealle tuotekehitykselle. Antti Jääskeläinen Matti Vuori Testauksen tuki nopealle tuotekehitykselle Antti Jääskeläinen Matti Vuori Mitä on nopeus? 11.11.2014 2 Jatkuva nopeus Läpäisyaste, throughput Saadaan valmiiksi tasaiseen, nopeaan tahtiin uusia tuotteita

Lisätiedot

Onnistunut ohjelmistoprojekti

Onnistunut ohjelmistoprojekti Onnistunut ohjelmistoprojekti 2.12.2008 Hermanni Hyytiälä Reaktor Innovations Oy Agenda Yritysesittely Keinoja onnistuneeseen ohjelmistoprojektiin Ihmiset Menetelmät Käytännöt ja työkalut Tulevaisuuden

Lisätiedot

Työkalut ohjelmistokehityksen tukena

Työkalut ohjelmistokehityksen tukena 1 Työkalut ohjelmistokehityksen tukena Johdanto 2 Työkaluja eli ohjelmistotyötä tukevia ohjelmistoja käytetään ohjelmistoalan yrityksissä nykypäivänä paljon. Työkalut auttavat ohjelmistoalan ihmisiä suunnittelemaan

Lisätiedot

Kuopio Testausraportti Asiakkaat-osakokonaisuus

Kuopio Testausraportti Asiakkaat-osakokonaisuus Kuopio Testausraportti Asiakkaat-osakokonaisuus Kuopio, testausraportti, 25.3.2002 Versiohistoria: Versio Pvm Laatija Muutokset 0.1 11.2.2002 Matti Peltomäki Ensimmäinen versio 0.9 11.2.2002 Matti Peltomäki

Lisätiedot

Jypelin käyttöohjeet» Ruutukentän luominen

Jypelin käyttöohjeet» Ruutukentän luominen Jypelin käyttöohjeet» Ruutukentän luominen Pelissä kentän (Level) voi luoda tekstitiedostoon "piirretyn" mallin mukaisesti. Tällöin puhutaan, että tehdään ns. ruutukenttä, sillä tekstitiedostossa jokainen

Lisätiedot

TESTIRAPORTTI - XMLREADER LUOKKA Virtuaaliyhteisöjen muodostaminen Versio 1.0

TESTIRAPORTTI - XMLREADER LUOKKA Virtuaaliyhteisöjen muodostaminen Versio 1.0 TESTIRAPORTTI - XMLREADER LUOKKA i Sisällysluettelo 1. YLEISTÄ 2 1.1. Dokumentin tarkoitus ja yleisiä toimintaohjeita 2 1.2. Viittaukset muihin dokumentteihin 2 2. SUORITETTAVA TESTI 3 2.1. Testauksen

Lisätiedot

Ohjelmistojen suunnittelu

Ohjelmistojen suunnittelu Ohjelmistojen suunnittelu 581259 Ohjelmistotuotanto 154 Ohjelmistojen suunnittelu Software design is a creative activity in which you identify software components and their relationships, based on a customer

Lisätiedot

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

Purot.net Wiki. Tutkielma. Paavo Räisänen. Centria Ammattikorkeakoulu 24.10.2012 Purot.net Wiki Tutkielma Paavo Räisänen Centria Ammattikorkeakoulu 24.10.2012 Sisällysluettelo 1: Esittely 2: Perustaminen 3: Uuden sivun luonti 4: Kuvien lisääminen 5: Linkin lisääminen 6: Lopuksi 1:

Lisätiedot

Tutkittua tietoa. Tutkittua tietoa 1

Tutkittua tietoa. Tutkittua tietoa 1 Tutkittua tietoa T. Dybå, T. Dingsøyr: Empirical Studies of Agile Software Development : A Systematic Review. Information and Software Technology 50, 2008, 833-859. J.E. Hannay, T. Dybå, E. Arisholm, D.I.K.

Lisätiedot

SEPA päiväkirja. Aihe: Staattiset menetelmät Tekijät: Mikko Halttunen 58198B, Mikko Närjänen 58122B Ryhmä: Neptune T Ohjelmistoprojekti I

SEPA päiväkirja. Aihe: Staattiset menetelmät Tekijät: Mikko Halttunen 58198B, Mikko Närjänen 58122B Ryhmä: Neptune T Ohjelmistoprojekti I SEPA päiväkirja Aihe: Staattiset menetelmät Tekijät: Mikko Halttunen 58198B, Mikko Närjänen 58122B Ryhmä: Neptune T-76.4110 Ohjelmistoprojekti I Sisällysluettelo Sisällysluettelo...2 1. Johdanto...3 2.

Lisätiedot

dokumentin aihe Dokumentti: Testausraportti_I1.doc Päiväys: Projekti : AgileElephant

dokumentin aihe Dokumentti: Testausraportti_I1.doc Päiväys: Projekti : AgileElephant AgilElephant Testausraportti I1 Tekijä: Petri Kalsi Omistaja: ElectricSeven Aihe: Testausraportti Sivu 1 / 5 Dokumentti Historia Muutoshistoria Revision Numero Revision Päiväys Yhteenveto muutoksista Revision

Lisätiedot

58160 Ohjelmoinnin harjoitustyö

58160 Ohjelmoinnin harjoitustyö 58160 Ohjelmoinnin harjoitustyö Testaus 30.3.2009 Tuntiop. Sami Nikander sami.nikander@helsinki.fi 58160 Ohjelmoinnin harjoitustyö, Sami Nikander 30.3.2009 1 Testaus Ohjelman systemaattista tutkimista

Lisätiedot

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

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

Teknillinen korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö. Testitapaukset - Koordinaattieditori

Teknillinen korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö. Testitapaukset - Koordinaattieditori Testitapaukset - Koordinaattieditori Sisällysluettelo 1. Johdanto...3 2. Testattava järjestelmä...4 3. Toiminnallisuuden testitapaukset...5 3.1 Uuden projektin avaaminen...5 3.2 vaa olemassaoleva projekti...6

Lisätiedot

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset

815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset 815338A Ohjelmointikielten periaatteet 2014-2015. Harjoitus 7 Vastaukset Harjoituksen aiheena on funktionaalinen ohjelmointi Scheme- ja Haskell-kielillä. Voit suorittaa ohjelmat osoitteessa https://ideone.com/

Lisätiedot

JUnit ja EasyMock (TilaustenKäsittely)

JUnit ja EasyMock (TilaustenKäsittely) OHJELMISTOJEN TESTAUS JA HALLINTA Syksy 2015 / Auvo Häkkinen JUnit ja EasyMock (TilaustenKäsittely) Tehtävässä tarvittava koodi löytyy osoitteella http://users.metropolia.fi/~hakka/oth/mockesimerkki.zip

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä www.niksula.cs.hut.fi/~jjkankaa// Demosovelluksen tekninen määrittely v. 0.6 Päivitetty 11.12.2000 klo 20:26 Mickey Shroff 2 (12) Dokumentin versiohistoria Versio Päivämäärä Tekijä / muutoksen tekijä Selite

Lisätiedot

Käyttöohje. Ticket Inspector. Versio 1.0. Sportum Oy

Käyttöohje. Ticket Inspector. Versio 1.0. Sportum Oy Käyttöohje Ticket Inspector Versio 1.0 Sportum Oy 10.5.2017 Sivu 1 Sisällysluettelo 1. Yleistä... 2 2. Kirjautuminen ensimmäisellä kerralla / PIN-koodin unohtuessa... 3 3. Tunnistautuminen... 4 4. Päänäkymä...

Lisätiedot

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2

Lisätiedot

<e.g. must, essential, conditional>

<e.g. must, essential, conditional> Käyttötapaukset Kurssin malli käyttötapauksille: Tila < List of users and the other systems that interacts directly with a system>

Lisätiedot

Ohjelmoinnin perusteet, syksy 2006

Ohjelmoinnin perusteet, syksy 2006 Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen

Lisätiedot

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

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä 6.11.2002 JReleaser Yksikkötestaus ja JUnit Mikko Mäkelä 6.11.2002 Sisältö Johdanto yksikkötestaukseen JUnit yleisesti JUnit Framework API (TestCase, TestSuite) Testien suorittaminen eri työkaluilla Teknisiä käytäntöjä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 18.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 18.3.2009 1 / 51 Olioista (kertausta) Olioiden avulla voidaan kuvata useammasta arvosta koostuvaa kokonaisuutta

Lisätiedot

SYSTEEMITYÖ. Tärkeitä sanoja

SYSTEEMITYÖ. Tärkeitä sanoja SYSTEEMITYÖ Tärkeitä sanoja SYSTEEMITYÖN TÄRKEITÄ SANOJA Laatu (itse tuotteessa ja sen tekemisessä) Dokumentaatio Riskienhallinta Vaatimustenhallinta Uudelleenkäytettävyys Versionhallinta 2 LAATU Parityönä:

Lisätiedot

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k 1 Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa ko. toiminnallisuuden hyödyntämisen Web-palveluna.

Lisätiedot

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

Versionhallintaa. Versionhallinnan käyttöönotto SAS ympäristössä Versionhallintaa Versionhallinnan käyttöönotto SAS ympäristössä Sisältö Mitä on versionhallinta Rakenteet ja niiden oikeudet Repository Browserin käyttäminen Hakemistorakenteen luominen Metadatan tallettaminen

Lisätiedot

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

Testaussuunnitelma. Koskelo. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testaussuunnitelma Koskelo Helsinki 16.12.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Tom Bertell Johan

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely

Lisätiedot

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

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus: Dokumentaatio, osa 1 Tehtävämäärittely Kirjoitetaan lyhyt kuvaus toteutettavasta ohjelmasta. Kuvaus tarkentuu myöhemmin, aluksi dokumentoidaan vain ideat, joiden pohjalta työtä lähdetään tekemään. Kuvaus

Lisätiedot

Järjestelmäarkkitehtuuri (TK081702)

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri (TK081702) yleistyvät verkkopalveluissa Youtube Google... Avaavat pääsyn verkkopalvelun sisältöön. Rajapintojen tarjoamia tietolähteitä yhdistelemällä luodaan uusia palveluja,

Lisätiedot

AutoCAD-natiiviobjektin toteutus

AutoCAD-natiiviobjektin toteutus AutoCAD-natiiviobjektin toteutus Kontiotuote OY Maailman toiseksi suurin hirsitalotoimittaja Aloittanut toimintansa 70-luvulla Liikevaihto vuonna 2003-37,355 Milj. euroa josta vientiä 7,376 Milj. euroa

Lisätiedot

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

Yhteenvetodokumentti. Boa Open Access. Helsinki 5.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Yhteenvetodokumentti Boa Open Access Helsinki 5.5.2006 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Ilmari

Lisätiedot

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

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla Viimeksi muokattu 5. toukokuuta 2012 Maastotietokannan torrent-jakeluun sisältyy yli 5000 zip-arkistoa,

Lisätiedot

Apuja ohjelmointiin» Yleisiä virheitä

Apuja ohjelmointiin» Yleisiä virheitä Apuja ohjelmointiin» Yleisiä virheitä Ohjelmaa kirjoittaessasi saattaa Visual Studio ilmoittaa monenlaisista virheistä "punakynällä". Usein tämä johtuu vain siitä, että virheitä näytetään vaikket olisi

Lisätiedot

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

TDD Käytännössä Todellinen työkalu vai lehmipoikien laukkaa? Harri Kulmala Solita Oy www.solita.fi solita@solita.fi TDD Käytännössä Todellinen työkalu vai lehmipoikien laukkaa? Harri Kulmala Solita Oy 1 TDD Käytännössä Test Driven Development yleisesti Lupaukset Esimerkki Projektin ja

Lisätiedot

Onnistunut ohjelmistoprojekti

Onnistunut ohjelmistoprojekti Onnistunut ohjelmistoprojekti ICT-ajankohtaisseminaari 15.4.2009 Hermanni Hyytiälä Reaktor Innovations Oy Agenda Yritysesittely Keinoja onnistuneeseen ohjelmistoprojektiin Ihmiset Menetelmät Käytännöt

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

P2P (ALUSTA) RAPORTOINNIN OHJEET (ANALYTICS)

P2P (ALUSTA) RAPORTOINNIN OHJEET (ANALYTICS) Ostoreskontra P2P (Alusta) Raportointi Sivu 1 / 9 P2P (ALUSTA) RAPORTOINNIN OHJEET (ANALYTICS) Sisällys 1 Raporttien avaaminen... 2 2 Raportit... 2 2.1 Finanssiraportti\Maksuennuste... 5 1 Ostoreskontra

Lisätiedot

Case TUHTI. Projektin tunnuslukuja. ! Suuri perusjärjestelmäuudistus! Työt alkoivat kesällä 1999. ! Java luokkia n. 5000

Case TUHTI. Projektin tunnuslukuja. ! Suuri perusjärjestelmäuudistus! Työt alkoivat kesällä 1999. ! Java luokkia n. 5000 Case TUHTI 17.12.2002 1 TietoEnator 2002 Projektin tunnuslukuja! Suuri perusjärjestelmäuudistus! Työt alkoivat kesällä 1999! Otettu tuotantokäyttöön syksyllä 2001! Proof of Concept (5 henkilöä 4 kk) ->

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy Kehitysohje ETL-työkalu Versio Pvm Tekijä Kuvaus 0.1 15.1.2005 Timo Sallinen Ensimmäinen versio 0.2 26.1.2005 Timo Sallinen Täydenetty pohjaa 0.3 06.02.2005 Mika Suvanto Pieniä täydennyksiä ja oikolukua

Lisätiedot

1. Mitä tehdään ensiksi?

1. Mitä tehdään ensiksi? 1. Mitä tehdään ensiksi? Antti Jussi i Lakanen Ohjelmointi 1, kevät 2010/ Jyväskylän yliopisto a) Etsitään Googlesta valmis algoritmi b) Mietitään miten itse tehtäisiin sama homma kynällä ja paperilla

Lisätiedot

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie

Ylläpitodokumentti. Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie Ylläpitodokumentti Ohjelmistotuotantoprojektin tietojärjestelmä OhtuTie Helsinki 16.7.2004 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti

Lisätiedot

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit Ohjelmiston testaus ja laatu Ohjelmistotekniikka elinkaarimallit Vesiputousmalli - 1 Esitutkimus Määrittely mikä on ongelma, onko valmista ratkaisua, kustannukset, reunaehdot millainen järjestelmä täyttää

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1 15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Geneerinen ohjelmointi. Lueteltu tyyppi enum. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien silmukoimiseen:

Lisätiedot

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

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä Pekka Ryhänen & Erkki Pesonen 2002 BlueJ:n käyttö Nämä ohjeet on tarkoitettu tkt-laitoksen mikroluokan koneilla tapahtuvaa käyttöä varten. Samat asiat pätevät myös muissa luokissa ja kotikäytössä, joskin

Lisätiedot

Harjoitus 2 (viikko 45)

Harjoitus 2 (viikko 45) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista lisätä static-määre operaatioidesi otsikoihin, jotta ohjelmasi kääntyvät. Muista noudattaa hyvän

Lisätiedot

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas

Tiedonhallinnan perusteet. Viikko 1 Jukka Lähetkangas Tiedonhallinnan perusteet Viikko 1 Jukka Lähetkangas Kurssilla käytävät asiat Tietokantojen toimintafilosofian ja -tekniikan perusteet Tiedonsäilönnän vaihtoehdot Tietokantojen suunnitteleminen internetiä

Lisätiedot

Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia

Ohjelmistojen mallintaminen, kurssikoe esimerkkivastauksia Ohjelmistojen mallintaminen, kurssikoe 15.12. esimerkkivastauksia Tehtävä 1 a: Ohjelmistotuotantoprosessi sisältää yleensä aina seuraavat vaiheet: määrittely, suunnittelu, toteutus, testaus ja ylläpito.

Lisätiedot