COTOOL dokumentaatio SEPA: Refaktorointi
|
|
- Viljo Nieminen
- 6 vuotta sitten
- Katselukertoja:
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
Table of Contents Refaktorointi................................................................................ 1 1 Tehtävänanto.............................................................................
Lisätiedot4.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ätiedotOhjelmistojen 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ätiedotTest-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ätiedotCOTOOL dokumentaatio Testausdokumentit
Table of Contents Testausraportti.............................................................................. 1 1 Tiivistelmä...............................................................................
LisätiedotYksikkö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ätiedotTT00AA12-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ätiedotAutomaattinen 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ätiedotELM 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ätiedotTest-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ätiedotT 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ätiedotT 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ätiedotTarjolla 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ätiedotTestivetoinen 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ätiedotData Sailors - COTOOL dokumentaatio Riskiloki
Table of Contents 1 Johdanto.................................................................................... 1 1.1 Versiohistoria...........................................................................
LisätiedotSEPA 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ätiedotCOTOOL dokumentaatio Testitapaukset
Table of Contents Suite 1: Smoketestit......................................................................... 1 1 Johdanto.................................................................................
LisätiedotTestilä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ätiedotT 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ätiedotSEPA 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ätiedotCOTOOL dokumentaatio Riskiloki
Table of Contents 1 Johdanto.................................................................................. 1 1.1 Versiohistoria...........................................................................
LisätiedotJä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ätiedotMenetelmä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ätiedotT-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ätiedotPong-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ätiedotTik-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ätiedotEsimerkkiprojekti. 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ätiedotOhjelmoinnin 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ätiedotIDL - 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ätiedotWritten 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ätiedotArkkitehtuurikuvaus. 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ätiedotATK 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ätiedotOhjelmoinnin 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ätiedotUudelleenkä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ätiedot15. 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ätiedotOhjelmistojen 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ätiedotGood 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ätiedotP 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ätiedotTestausdokumentti. 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ätiedotOhjelmistojen 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ätiedotASCII-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ätiedotGood 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ätiedot4. 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ätiedotAJAX-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ätiedotAsko 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ätiedotPS-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ätiedot815338A 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ätiedotTestauksen 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ätiedotOnnistunut 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ätiedotTyö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ätiedotKuopio 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ätiedotJypelin 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ätiedotTESTIRAPORTTI - 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ätiedotOhjelmistojen 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ätiedotPurot.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ätiedotTutkittua 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ätiedotSEPA 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ätiedotdokumentin 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ätiedot58160 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ätiedotAlkuarvot 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ätiedotTeknillinen 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ätiedot9. 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ätiedot815338A 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ätiedotJUnit 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ätiedotTutoriaalilä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ätiedotKä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ätiedotKä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ätiedotTIE 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>
Käyttötapaukset Kurssin malli käyttötapauksille: Tila < List of users and the other systems that interacts directly with a system>
LisätiedotOhjelmoinnin 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ätiedotJReleaser 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ätiedotOhjelmoinnin 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ätiedotSYSTEEMITYÖ. 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ätiedotWeb-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ätiedotVersionhallintaa. 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ätiedotTestaussuunnitelma. 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ätiedotTaulukot. 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ätiedotSisä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ätiedotTä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ätiedotJä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ätiedotAutoCAD-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ätiedotYhteenvetodokumentti. 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ätiedotMaastotietokannan 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ätiedotApuja 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ätiedotTDD 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ätiedotOnnistunut 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ätiedotOliosuunnitteluesimerkki: 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ätiedotP2P (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ätiedotCase 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ätiedot11/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ätiedotKehitysohje. 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ätiedot1. 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ätiedotYllä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ätiedotOhjelmiston 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ätiedot815338A 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ätiedot15. 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ätiedotBlueJ 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ätiedotHarjoitus 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ätiedotTiedonhallinnan 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ätiedotOhjelmistojen 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