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

Samankaltaiset tiedostot
Test-Driven Development

Test-Driven Development

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

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

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

Matematiikan opetuksen kehittäminen avoimen lähdekoodin ohjelmistojen avulla Petri Salmela & Petri Sallasmaa

Testilähtöinen ohjelmistokehitys. Testilähtöinen ohjelmistokehitys. TDD Testilähtöinen ohjelmistokehitys. Testi! Testi. Test-Driven Development, TDD

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

T Refaktorointi

Automaattinen yksikkötestaus

Uudelleenkäytön jako kahteen

Kertaus: yleistys-erikoistus ja perintä

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

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

8/20: Luokat, oliot ja APIt

SYSTEEMITYÖ. Tärkeitä sanoja

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

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

OHJEET WORDPRESS-BLOGIN LUOMISEEN JA TAVALLISIMPIIN BLOGITOIMINTOIHIN

13. Hyvä ohjelmointitapa (osa 1) 13.1

COTOOL dokumentaatio SEPA: Refaktorointi

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Pauliina Munter / Suvi Junes Tampereen yliopisto/tietohallinto 2013

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

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

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

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

Ohjelmistojen suunnittelu

Eclipse ja JUnit-ohjelmoijatestit

OPETTAJA VERKOSSA: Koodaaminen

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

AutoCAD-natiiviobjektin toteutus

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

5. HelloWorld-ohjelma 5.1

Ei raportteja roskiin

Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu

Koodaamme uutta todellisuutta FM Maarit Savolainen

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

IT2015 EKT ERITYISEHTOJA OHJELMISTOJEN TOIMITUKSISTA KETTERIEN MENETELMIEN PROJEKTEILLA LUONNOS

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

Pakkauksen kokoaminen

Rajapinta (interface)

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

ADE Oy Hämeen valtatie TURKU. Tuotekonfigurointi. ADE Oy Ly Tunnus:

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

14. Hyvä ohjelmointitapa 14.1

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Sähköisten viranomaisaineistojen arkistoinnin ja säilyttämisen palvelukokonaisuus

T SEPA päiväkirja

EUREFin vaikutukset organisaatioiden tietojärjestelmiin

HOPS-työkalun lisäksi SoleOPSiin on kytketty vuotuisia kehityskeskusteluja varten kyselypohjat.

11/20: Konepelti auki

Testaussuunnitelma. PUSU-ryhmä. Helsinki Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmoinnin perusteet Y Python

tsoft Tarkastusmenettelyt ja katselmukset Johdanto Vesa Tenhunen

Fiksumpi käyttöliittymä kuntaan. Miten kuntien tietojärjestelmät saadaan palvelemaan kuntalaisia? LapIT-päivät 2015

Pakkauksen kokoaminen

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

5. HelloWorld-ohjelma 5.1

Ylläpito. Ylläpidon lajeja

Ohjelmointi 2 / 2010 Välikoe / 26.3

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

Kokemuksia ohjelmistokehityksestä. Kai Kulju & Heikki Naski

3. Komponentit ja rajapinnat

Fronter Varauskalenteri-työkalu

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

Object Framework - One. OF-1 is a high-productive Multi-UI OpenEdge data driven development framework. Veli-Matti Korhonen

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VIII Suunnittelumallit Observer ja State

Ohjelmoinnin jatkokurssi, kurssikoe

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

VALO-ohjelmat ja LTSP kouluissa. Elias Aarnio Innopark, AVO-hanke

Alkukartoitus Opiskeluvalmiudet

Tuen tarpeen tunnistaminen. Lukemisen ja kirjoittamisen ryhmäarviointi. Esitysohjeet opettajalle. toinen luokka syksy

Käyttöohje alayksikkökoodiston tarkastamiseen ja täydentämiseen

P e d a c o d e ohjelmointikoulutus verkossa

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Antitammirobotti. Antti Meriläinen Martin Pärtel 29. toukokuuta 2009

10 teesiä verkko-opetuksen suunnittelusta. Leena Hiltunen Tutkijatohtori Tietotekniikan Aineenopettajankoulutus

Ohjeet. Ohjeita on kahdessa paikassa. Admin-näytön oikeassa ylänurkasta. Seura- sivuilta kohdasta Dokumentit

Johdantoluento. Ohjelmien ylläpito

Tietokanta.java Luokka tarjoaa välineet tietokannan lukemiseen. Haetuista tiedoista muodostetaan kurssi- ja opetus-olioita.

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaihe 3. Antti Jääskeläinen Matti Vuori

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

4. Luokan testaus ja käyttö olion kautta 4.1

Java-kielen perusteita

JUnit ja EasyMock (TilaustenKäsittely)

Osio 4: Graafinen käyttöliittymä

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Esityksen sisältö Määrittelyjen mukaisuudesta varmistuminen - PlugIT-leima

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Kieliversiointityökalu Java-ohjelmistoon. Ohje

Transkriptio:

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 Ohjelmiston toteuttaminen vaatii ohjelmointia. Sitä voi oppia ohjelmoimalla ja Class, Responsibility, Collaboration, eli Luokka, Vastuut, Yhteistyö http://c2.com/cgi/ wiki?crccard Class Responsibility 1 Responsibility 2 Collab. class 1 Collab. class 2 lukemalla toisten kirjoittamia ohjelmia. ideoiden, toimintojen ja rakenteiden kokeiluun

CRC-kortit Testilähtöinen kehitys Test-driven development (TDD) Ohjelmaa kehitetään testaillen: ensin testi, sitten toteutus. Voidaan käyttää myös mm. ohjelmaan tutustuttaessa, virheitä korjatessa, ohjelman rakennetta parannettaessa ja uusia ominaisuuksia toteutettaessa. Hyödyt ja haitat Vaiheet Ohjelma kehittyy käytettäväksi myös ohjelmoijan näkökulmasta! Ohjelmasta tiedetään, että se toimii niinkuin on vaadittu. Onko kaikki vaatimukset selvillä? Testien ylläpito voi olla työlästä. Tee testi. Aja testi; oletettavasti se ei mene läpi. Tee ja muokkaa toteutusta ajellen testiä uudelleen ja uudelleen kunnes testi menee läpi. Käytä valmiita työkaluja tai tee ne itse (mm. *Unit-työkalut, yleensä editorissa mukana)

Keilailu-kata Uudelleenrakentaminen Robert C. Martin (Uncle Bob) ja Robert S. Koss: http://www.objectmentor.com/resources/ articles/xpepisode.htm http://www.butunclebob.com/files/ downloads/bowling%20game%20kata.ppt Martin Fowler: Refactoring (1999, AW) Muokataan ohjelmiston sisäinen rakenne paremmaksi muuttamatta ohjelmiston ulkoista toimintaa. Ohjelmaa muokatessa sille suunniteltu selkeä rakenne häviää. Uudelleenrakentaminen selkeyttää rakenteen. Kyseessä ei ole virheiden korjaaminen! Milloin? Ongelmia Kolmannella kerralla Virhettä korjatessa Uutta toimintoa lisätessä Katselmoinnin yhteydessä Älä uudelleenrakenna, jos koodi ei toimi, tai aikatakaraja on lähellä Tietokannat rakenna väliin rajapinta käytä oliotietokantoja oliokoodille Rajapinnat ja kutsumuodot Älä julkaise rajapintoja ennenaikaisesti! Helpota siirtymää työkaluin.

Ongelmia Uudelleenrakentamisen vaiheet Tunnistetaan uudelleenrakentamisen kohde. Suunnitteluvirheet ovat suunnitteluvirheitä! Kirjoitetaan testit uudelleenrakennettavalle kohteelle Uudelleenrakentaminen (testit!) Varmistetaan toiminta (testit!) Kohteen tunnistaminen Suunnittelumallien perusteella Pahan hajun perusteella koodiduplikaatit, pitkät metodit, suuret luokat, pitkät parametrilistat, jatkuva muutos, haulikkokirurgia, ominaisuuskateus, dataklöntit, primitiivipakkomielle, switchlauseet,, viestiketjut, välimies,, kommentti Tunnistettujen kohteiden korjaus Kutakin hajua vastaa joukko uudelleenrakentamismalleja jatkuva muutos: irrota luokka primitiivipakkomielle: korvaa tietoarvo oliolla; irrota luokka; korvaa tyyppitieto luokalla; kommentti: uudelleenrakenna niin, ettei kommenttia tarvita

Miksi testit ensin? Uudelleenrakentaminen Jotta voidaan olla varmoja, etteivät muokkaukset muuta (ulkoista) toimintaa. Jotta opitaan ymmärtämään muokattavan kohteen toiminta. Sovelletaan uudelleenrakentamismallia. Testejä ajamalla voidaan koko ajan olla varmoja siitä, ettei toimintaa ole muutettu. Lopuksi vielä testien ajo jotta varmistutaan siitä, ettei mikään ole mennyt rikki. Ajetaan kaikki testit. Varoitus! Nykyään ohjelmaeditoreissa on valmiina uudelleenrakentamistoimintoja, jotka tekevät monimutkaisiakin muunnoksia lähdekoodille. Testit on silti syytä tehdä ensin ja ajaa! Kyllä, se harmittaa ensin, mutta ei enää sen jälkeen kun on tuhlannut aikansa testaamattoman muokkauksen tekosia korjaillessa.

What is software design? Jack W. Reeves (C++ Journal, Fall 1992) http://www.developerdotstar.com/mag/ articles/reeves_design_main.html