TDD ja ATDD. Niklas Collin. Naulakatu 3, Tampere

Koko: px
Aloita esitys sivulta:

Download "TDD ja ATDD. Niklas Collin. Naulakatu 3, 33100 Tampere www.kilosoft.fi"

Transkriptio

1 TDD ja ATDD Niklas Collin Naulakatu 3, Tampere

2 Kilosoft Kilosoft on ohjelmistokehityksen, laadunvarmistuksen ja verkonhallintajärjestelmien asiantuntijayritys. Kilosoft Oy on perustettu vuonna 2002 Toimipaikkamme sijaitsevat Tampereella, Espoossa ja Jyväskylässä Toimimme myös kansainvälisesti yhteistyökumppaneidemme kautta Olemme kannattava kasvuyritys Palveluksessamme on vuoden 2010 syyskuussa noin 70 ohjelmistotuotannon ammattilaista Liikevaihtomme vuonna 2009 oli 2,1 M. Ennusteemme vuodelle 2010 on 3,7 4 M

3 Luennoija Niklas Collin Ohjelmistoarkkitehti Kilosoftilla Siirtyi Kilosoftin palvelukseen 2010 alkuvuodesta Novaloc Oy:n liiketoiminnan myynnin myötä Myydyn Novaloc Oy:n osaperustaja TTY:n kasvatteja Tutkintouudistus painosti valmistumaan alkuvuodesta :) Menossa Australiaan APSEC 2010:een puhumaan TDD:stä ja CI:stä yhdessä prof. Tommi Mikkosen kanssa loppuvuodesta

4 Agenda 1) Motivaatio ja käytettyä sanastoa 2) Testiohjattu kehitys (TDD) 3) Hyväksymistestivetoinen kehitys (ATDD)

5 Olen koodari! Minäkö muka testaisin? Nykyaikaiseen ohjelmistokehitykseen kuuluu oleellisesti automatisoitu testaaminen Valtaosa automatisoiduista testeistä jää yleensä kehittäjien harteille Varsinaiset testaajat keskittyvät käyttöliittymän testaamiseen, suorituskykytesteihin, toiminnallisuuden vertaamiseen määrittelyä vasten jne On siis oleellista osata kirjoittaa hyviä automatisoituja testejä jos aikoo tehdä ohjelmointityötä työkseen nykyaikana Jos osaat kirjoittaa hyviä automatisoituja testejä, niin työpaikan saaminen on kokolailla varmaa

6 Hieman testaussanastoa Sekaannuksien välttämiseksi kerrataan testaussanastoa Yksikkötesti On yleistä, että kaikkea automatisoituja testejä kutsutaan yksikkötesteiksi Tämä EI pidä paikkaansa! Keskustellessa uuden henkilön kanssa testauksesta on hyvä aina varmistaa, että puhutte samoilla termeillä Testi, joka testaa yhtä koodiyksikköä, kuten esimerkiksi luokkaa Integraatiotesti Testi, joka testaa useamman yksikön yhteistoimintaa Järjestelmätesti Testi, joka testaa koko järjestelmää kerralla Yleensä käyttöliittymätason testi Oikealla esitetään tyypillisimmät automatisoidut testityypit

7 TDD Test-driven Development Testiohjattu kehitys

8 Mikä TDD? Test-driven development (TDD) eli testiohjattu kehitys on ohjelmistokehitysmenetelmä, jossa kehittäjä kirjoittaa testin ennen varsinaisen toteutuskoodin kirjoittamista TDD:llä on kahdenlainen tarkoitus: Toimia matalan tason suunnittelun lähtökohtana Taata kattava testaus yksikkö- ja integraatiotestaustasolla Pääasiallisena korkeamman tason motivaationa siis laadun varmistaminen Kattavan testipatteriston avulla minimoidaan regressio ja täten muutosten tekeminen on helpompaa

9 TDD:n suhtautuminen perinteiseen kehitykseen Perinteinen ohjelmistokehityssykli Suunnittele Toteuta Testaa Testiohjattu ohjelmistokehityssykli Testaa Toteuta Suunnittele Test Code Refactor

10 Test Code Refactor Toteutus etenee lyhyissä sykleissä Syklin pituus muutamasta kymmenestä sekunnista viiteen minuuttiin Ensin kirjoitetaan testi, joka testaa yksinkertaista osuutta toteutettavasta toiminnasta Tätä testiä vasten kirjoitetaan haluttu toiminnallisuus Lopuksi refaktoroidaan sekä testiä, että sovelluskoodia mikäli sille on tarvetta Refaktoroi Toteuta Testi on TDD:ssä tapa määritellä tulevan ohjelmakoodin sisältö Testillä on siis dualistinen luonne sovelluskoodiin: se sekä määrittelee, että testaa Testaa

11 Refaktorointi Oleellinen osa TDD:tä on refaktorointi Refaktoroinnilla tarkoitetaan toimintaa, jolla muutetaan olemassaolevan sovelluskoodin sisäistä rakennetta muuttamatta kuitenkaan ulospäin näkyvää toiminnallisuutta public int calculatevalue(int start) { if (start < 0) { throw new InvalidParameterException(); else if (start == 0) { return 0; return (somevalue * myattributevalue) / start; public int calculateanothervalue(int start) { if (start < 0) { throw new InvalidParameterException(); else if (start == 0) { return 0; return (someanothervalue * myattributevalue) / start; Refaktorointi public int calculatevalue(int start) { if (checkstartvaluevalidity()) { return (somevalue * myattributevalue) / start; return 0; public int calculateanothervalue(int start) { if (checkstartvaluevalidity()) { return (someanothervalue * myattributevalue) / start; return 0; private boolean checkstartvaluevalidity(int value) { if (value < 0) { throw new InvalidParameterException(); else if (value == 0) { return false; return true;

12 Aieperustainen ohjelmointi Aieperustainen ohjelmointi (Programming by Intention) on oleellinen osa TDD:tä, vaikka ei suoraan liitykään mitenkään testaukseen Tarkoituksena on lähestyä ohjelmakoodin kehitystä black-box -ajattelulla Rajapintoja tehdessä ei mietitä toiminnallisuutta, vaan sitä miten kyseistä rajapintaa haluttaisiin käyttää Pyritään jakamaan ohjelmakoodi useisiin metodeihin/funktioihin, joiden nimet ovat mahdollisimman kuvaavia Jaottelua ei tehdä jälkikäteen, vaan ennen varsinaisen toteutuskoodin kirjoittamista Tarkoituksena on esittää ohjelmoijan aie tulevaisuuden toiminnallisuudsta

13 TDD:n historiaa Nykymuotoisen TDD:n alkujuuret löytyvät Extreme Programming -metodologian määritelmistä Ensimmäisen kerran esitetty erillään XP:stä Kent Beckin kirjassa Test-Driven Development by Example (Addison Wesley, 2003) TDD:n mukaista kehitystä on kuitenkin tehty jo paljon kauemmin Beck toi TDD:n uudestaan esille yhdistäessään sen osaksi XP:tä Samalla TDD sai tarkemman määrittelyn Nykyään TDD on saanut paljon huomiota myös XP:n harrastajien ulkopuolella

14 TDD:n monet kasvot TDD terminä on nykyisellään hyvin monikäsitteinen Aina kun puhutaan TDD:stä, täytyy myös tietää että mitä muotoa TDD:stä tarkoitetaan Roy Osherov esittää TDD:n esiintyvän neljässä eri muodossa: 1) Testiohjattu kehitys: Ajatus siitä, että kirjoitetaan testi ennen sovelluskoodia. Voidaan noudattaa olemassaolevaa arkkitehtuurisuunnitelmaa. 2) Testisuuntautunut kehitys: Testejä kirjoitetaan paljon, mutta ei välttämättä ennen sovelluskoodia. Arkkitehtuuri on yleensä selvillä ennen testin kirjoittamista. 3) Testiohjattu suunnittelu (alkuperäinen XP-tapa): Käytetään TDD:tä kokonaisvaltaisena suunnittelutyökaluna. Testit ohjaavat koko suunnitteluprosessia ja käytännössä sovellusarkkitehtuuri suunnitellaan lennossa testien ohjaamana. 4) Testiohjattu kehitys ja suunnittelu: Käytetään testit-ensin -periaatetta uuden ohjelmakoodin tuottamisen lähteenä ja samalla annetaan sen muuttaa olemassaolevaa arkkitehtuuria. Suuren linjan arkkitehtuuri on kuitenkin erikseen päätettynä paikallaan ja evolutionääriset muutokset suuntautuvat pienemmän skaalan asioihin.

15 TDD ja kritiikki TDD on saanut osakseen huomattavan paljon kritiikkiä Suurin osa tästä kritiikistä koskee juurikin alkuperäistä XP:n esittelemää muotoa TDD:stä Ehkä tunnetuin arvostelija on James Cope Coplien. Alkuperäinen XP:n määritelmä TDD:stä määrittelee termin emerging design, joka käytännössä tarkoittaa arkkitehtuurin kasvamista kehityksen myötä ilman etukäteissuunnittelua Tällaisella lähestymistavalla on lähinnä heikentävä vaikutus arkkitehtuuriin ja mm. VTT:llä ovat Abrahamsson ja Sinisalo tehneet tutkimusta aiheesta

16 Esimerkki: CurrencyConverter package fi.kilosoft.tdd; import java.math.bigdecimal; public class CurrencyConverter { public static void main (String[] args) { String amountstr = args[0]; String startingcurrency = args[1]; String targetcurrency = args[2]; CurrencyConverter converter = new CurrencyConverter(startingCurrency, targetcurrency); BigDecimal amount = converter.converttotargetcurrency(amountstr); System.out.println(amount + " " + converter.gettargettype()); private CurrencyType startingtype; private CurrencyType targettype; public CurrencyConverter(String startingcurrency, String targetcurrency) { startingtype = new CurrencyType(startingCurrency); targettype = new CurrencyType(targetCurrency); Toteutetaan CurrencyConverter -luokan käyttämä CurrencyType testiohjatusti public BigDecimal converttotargetcurrency(string amount) { BigDecimal startingamount = new BigDecimal(amount); return targettype.calculateamount(startingamount, startingtype); public CurrencyType gettargettype() { return targettype;

17 Esimerkki, public void testcreatingeuro() { String eur = "EUR"; CurrencyType type = new CurrencyType(eur); assertequals(eur, type.gettypeasstring()); public CurrencyType(String type) { public String gettypeasstring() { return public void testcreatingusdollar() { String eur = "USD"; CurrencyType type = new CurrencyType(eur); assertequals(eur, type.gettypeasstring()); private String type; public CurrencyType(String type) { this.type = type; public String gettypeasstring() { return type; private static ResourceBundle public static void setupclass() { currencies = ResourceBundle.getBundle("currencies"); /** * public void testvalidiso4217currenciesareaccepted() { Enumeration<String> keys = currencies.getkeys(); while (keys.hasmoreelements()) { new CurrencyType(keys.nextElement()); currencies.properties, sisältää validit valuuttatunnukset Vihreä palkki ei muutoksia toteutukseen luodaan uusi testi

18 Esimerkki jatkuu = CurrencyConversionException.class) public void testinvalidcurrencystring() { new CurrencyType("foo"); public CurrencyType(String type) { if (type.equals("foo")) { throw new public void testinvalidcurrenciesthrowexception() { Enumeration<String> keys = ResourceBundle.getBundle("currencies").getKeys(); while (keys.hasmoreelements()) { String elem = keys.nextelement(); try { new CurrencyType(elem.concat("A")); fail("invalid currency type accepted"); catch (CurrencyConversionException cce) { /* all well, we got here */ try { new CurrencyType(elem.substring(1).concat("Ö")); fail("invalid currency type accepted"); catch (CurrencyConversionException cce) { /* all well, we got here */ private static final ResourceBundle currencies; Huono ratkaisu, miksi? Refaktoroidaan seuraavalla kalvolla paremmaksi static { currencies = ResourceBundle.getBundle("currencies"); public CurrencyType(String type) { if (!currencies.containskey(type)) { throw new CurrencyConversionException(); this.type = type;

19 Esimerkki: refaktorointia Final pois ja setter staattisen rakentajan tilalle private static ResourceBundle currencies = null; public static void setcurrencies(resourcebundle currencies) { CurrencyType.currencies = currencies; public CurrencyType(String type) { if (currencies == null) { currencies = ResourceBundle.getBundle("currencies"); if (!currencies.containskey(type.touppercase())) { throw new CurrencyConversionException(); this.type = type; NullPointerExceptionin välttämiseksi alustetaan currencies jos setteriä ei ole kutsuttu ennen olion luontia Muutos mahdollistaa joustavamman testauksen, sillä nyt CurrencyType ei ole kiinteästi riippuvainen currencies.properties -tiedoston sisällöstä voidaan simuloida helpommin niin virhetilanteita kuin oikeaa toiminnallisuuttakin

20 ...ja esimerkin public void testeurotoeuroconversion() { CurrencyType start = new CurrencyType("EUR"); CurrencyType target = new CurrencyType("EUR"); BigDecimal value = target.calculateamount(new BigDecimal("100"), start); assertequals(new BigDecimal("100"), value); value = target.calculateamount(new BigDecimal("10"), start); assertequals(new BigDecimal("10"), value); public BigDecimal calculateamount(bigdecimal startingamount, CurrencyType startingtype) { if (startingtype.gettypeasstring().equals(this.gettypeasstring())) { return startingamount; return new public void testeurotousdconversion() { CurrencyType start = new CurrencyType("EUR"); CurrencyType target = new CurrencyType("USD"); BigDecimal usdamount = new BigDecimal("100"); BigDecimal expected = usdamount.multiply(new BigDecimal(currencies.getObject("USD").toString())); BigDecimal value = target.calculateamount(usdamount, start); assertequals(expected, value); Duplikoi sovelluslogiikkaa testeihin, hyvä refaktorointikohde! Ja niin poispäin...

21 TDD ja CI ne yhteen sopii Jatkuva integraatio (Continuous Integration, CI) on TDD:n tehokkaalle hyödyntämiselle lähes pakollinen CI on hyödyllinen vasta jos on testejä ajettavaksi ja TDD on hyödyllinen vain jos kirjoitettuja testejä ajetaan Luonnollinen yhdistelmä Käytännössä jossain vaiheessa täysien testisettien ajaminen jatkuvasti osana TDD-sykliä muuttuu mahdottomaksi Suoritusaika kasvaa liian pitkäksi Järjestelmä/hyväksymistestivaiheen testejä ei välttämättä edes haluta tai voida ajaa kehityskoneella

22 ATDD Acceptance Test-driven Development Hyväksymistestivetoinen kehitys

23 Perinteiset määrittelyt eivät toimi Tiukat vesiputousmallin mukaiset etukäteismäärittelyt eivät ikinä kuvaa täysin sitä, mitä oikeasti halutaan Ideoita tulee matkan varrella lisää niin kehitystiimin kuin asiakkaankin suunnalta Kaikkea ei vain osata ottaa huomioon Ristiriitaisuuksia määrittelyn eri osien kohdalla on lähes aina Eri ihmiset tulkitsevat saman asian eri tavalla Ketterät menetelmät yrittävät vastata tähän ja onnistuvat osittain

24 Mihin agile ei sitten vastaa? Ketterät menetelmät tuovat määrittelyyn iteratiivisuuden TDD tuo iteratiivisuuden varsinaiseen kehitysprosessiin! Ketterät menetelmät eivät tuo yksikäsitteisiä määritelmiä Päinvastoin, kun määritellään vähemmän asioita kerralla joudutaan myöhemmin muuttamaan asioita Pääsääntöisesti tämä on ihan OK ja hyväksyttävää: sovelluksen laatu paranee kun hyväksytään muutoksien mahdollisuus Suureksi ongelmaksi jää kuitenkin inhimilliset tulkintaerot Tämän ongelman ratkaisemiseksi on yritetty vuosien varrella suurinpiirtein kaikkea: tiukat taulukkomuotoiset käyttötapaukset, käyttötarinat jne jne Ketterät menetelmät (varsinkin Scrum) painottavat valmiuden määritelmää antamatta kuitenkaan mitään eväitä sen määrittelemiseksi!

25 Vaatimukset ja testit kohtaavat Vaatimus Hyväksymistesti Toteutus Palaute Ohjataan toteutusprosessia joukolla automatisoituja ja suoritettavia hyväksymistestejä

26 Hyväksymistestit määrittelynä Hyväksymistestivetoinen kehitys (ATDD) on keino tehdä sovellukselle määrittely, jota vasten sovelluksen toiminnallisuus voidaan automaattisesti todeta Tulkintaeroja ei käytännössä voi tulla Perusideana on tehdä automaattisesti suoritettava testi ennen toiminnallisuuden toteuttamisen aloittamista Toiminnallisuus tehdään hyväksymistestiä vasten Kun testi menee läpi toiminnallisuus on tehty Hyväksymistestit tekee asiakas Hetkonen? Miten ei-tekninen ihminen voi tehdä teknisiä automaattisesti suoritettavia testejä?

27 Asiakas osana hyväksymistestausta On oleellista, että hyväksymistestien pääpihvi on nimenomaan asiakkaan tekemää Asiakas itse (yleensä) tietää parhaiten mitä haluaa Käytännössä lopullista suoritettavaa testiä ei kuitenkaan asiakas voi tehdä Työ tehdään tiiviissä yhteistyössä toimittajan määrittelijän kanssa, aivan kuten ennenkin! Asiakas voi kuitenkin tehdä perinteistä taulukkomuotoista määrittelyä vastaavan ohjeistuksen, jonka tietojen perusteella automaattinen testi voidaan suorittaa Tämän asiakas voi naputella vaikkapa tutulla ja turvallisella Wordillä tai vastaavalla työkalulla

28 ATDD:n prosessi Määrittelytyöryhmä luo sekä vaatimukset, että suoritettavat hyväksymistestit lyhyiden käyttötarinoiden kautta (User Stories) Mukana liiketoimintaympäristöstä, sekä teknisistä asioista ymmärtäviä henkilöitä Prosessi on jatkuva ja tapahtuu läpi projektin Suoritettavat testit määrittelevät Scrumin Product Backlogin Oleellisena erona perinteiseen hyväksymistestaukseen on asiakkaan suora osallistuminen testien tekemiseen Määrittelytyöryhmä Projektipäällikkö Asiakas Pääsuunnittelija Testausvastaava Määrittelevät Hyväksyy Toteuttaa Vaatimukset Suoritettavat testit Perusteella

29 ATDD:n työkalut Jotta ATDD:tä voisi käyttää tehokkaasti on sitä varten käytettävä siihen sopivia työkaluja Erilaisiin sovellusympäristöihin on olemassa omia spesifejä työkalujaan Fit, SLIM, Robot Framework... Suurimmalle osalle työkaluista yhteistä on se, että testien syötemateriaali kuvataan taulukoina Helppo lukea Helppo tulkita testikoodissa

30 Esimerkki (Fit) fi.kilosoft.acceptance.examplefixture change 100 from USD to EUR result should be change 50 from SEK to EUR result should be 5.37 public boolean changefromtoresultshouldbe(int amount, String fromtype, String totype, BigDecimal shouldbe) { CurrencyConverter converter new CurrencyConverter(fromType, totype); return shouldbe.equals(converter.converttotargetcurrency(amount)); Työkalut tulkitsevat testisivujen taulukoiden sisällön Kaikki muu sisältö on vapaamuotoista Esimerkki vain yksi tapa käyttää Fit-frameworkia

31 Miten perustella tiimille? ATDD tuo näennäistä lisätaakkaa tiimille Todellisuudessa työmäärä pienenee koko projektin aikana Ei enää arpomista sen suhteen, että mitä tietyt lausemuodot määrittelyssä oikeasti tarkoittavat Ei enää miettimistä, että tulikohan nyt varmasti tehtyä kaikki vaadittu Kun testi menee läpi, niin vaatimuksen ominaisuudet on tehty Scrum: Definition of Done Ei enää kädenvääntöä asiakkaan kanssa, että mikä on määriteltyä toiminnallisuutta ja mikä on muutospyyntö Yhdessä ketterien menetelmien kanssa todella vahva työkalu!

32 Miten perustella asiakkaalle? Yhdistettynä jatkuvaan integraatioon on asiakkaalla mahdollisuus nähdä koska tahansa projektin todellinen tila Testit ovat asiakkaan itsensä hyväksymiä Testit eivät valehtele Lisää luottamusta projektin etenemiseen Väärinymmärryksien mahdollisuus pienenee koska määrittelyssä on yksi vaihe lisää, jolla varmistetaan että vaatimus on ymmärretty oikein: suoritettavan hyväksymistestin kirjoittaminen Todennäköisempää saada mitä haluaa

33 Ongelmat Asiakkaan opettaminen testilähtöiseen lähestymiseen voi olla työn ja tuskan takana Käytännössä asiakkaalla on pakko olla edes hitusen teknistä ymmärrystä Valitettavan usein ATDD:tä ei voida käyttää täysipainoisesti koska asiakas ei siihen suostu Tällöin määrittelyprosessi menee asiakasrajapinnassa kuten ennenkin ja määrittely muunnetaan suoritettaviksi hyväksymistesteiksi Tällöin asiakkaan varmistus testin oikeellisuudesta jää pois Eroavaisuudet perinteiseen hyväksymistestaukseen enää hyvin pienet Riippuen sovellusalustasta voi automatisoitujen järjestelmätason testien kirjoittaminen olla hyvin työlästä Esim. sulautetut järjestelmät

34 Luettavaa Test-Driven Development by Example, Kent Beck (Addison Wesley, 2003) Test Driven, Lasse Koskela (Manning, 2007) Bridging the Communication Gap, Gojko Adzic (Neuri Limited, 2009) Ja tietysti Google :)

35 Kysymyksiä, kommentteja, muita murheenaiheita?

36 Kiitos mielenkiinnostanne! Niklas Collin Software Architect Kilosoft Oy

TDD Tarina käyttöönotosta

TDD Tarina käyttöönotosta TDD Tarina käyttöönotosta Näkemys onnistuneeseen käyttöönottoon Novaloc Oy - Hermiankatu 6-8 H 33720 Tampere info@novaloc.fi - +358 (0)50 544 5421 Taustaa Novaloc oy Novaloc Oy on vuoden 2007 alussa perustettu

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

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

Tapahtuipa Testaajalle...

Tapahtuipa Testaajalle... Tapahtuipa Testaajalle... - eli testaus tosielämässä 09.10.2007 Juhani Snellman Qentinel Oy 2007 Agenda Minä ja mistä tulen Testauksen konteksti Tapauksia tosielämästä ja työkaluja 2 Minä Juhani Snellman

Lisätiedot

Metodien tekeminen Javalla

Metodien tekeminen Javalla 1 Metodien tekeminen Javalla Mikä metodi on? Metodin syntaksi Metodi ja sen kutsuminen Parametreista Merkkijonot ja metodi Taulukot ja metodi 1 Mikä metodi on? Metodilla toteutetaan luokkaan toiminnallisuutta.

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmointi 2 / 2010 Välikoe / 26.3 Ohjelmointi 2 / 2010 Välikoe / 26.3 Välikoe / 26.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään

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

Olio-ohjelmointi Javalla

Olio-ohjelmointi Javalla 1 Olio-ohjelmointi Javalla Olio-ohjelmointi Luokka Attribuutit Konstruktori Olion luominen Metodit Olion kopiointi Staattinen attribuutti ja metodi Yksinkertainen ohjelmaluokka Ohjelmaluokka 1 Olio-ohjelmointi

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta 582101 - Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta 1 Toteutuksesta ja testauksesta Suunnitteluprosessista Tarkan tason luokkasuunnittelu Siirtyminen UML-kaavioista Java-toteutukseen

Lisätiedot

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta 582101 - Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta 1 Toteutuksesta ja testauksesta Suunnitteluprosessista Tarkan tason luokkasuunnittelu Siirtyminen UML-kaavioista Java-toteutukseen

Lisätiedot

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma. Välikoe / 20.3 Vastaa neljään (4) tehtävään. Jos vastaat 5:een, 4 huonointa arvostellaan. Kunkin tehtävän vastaus eri konseptille. 1. Pöytätesti Pöytätestaa seuraava ohjelma. Tutki ohjelman toimintaa pöytätestillä

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

Ohjelmistotekniikan menetelmät, koe 2.5.2014

Ohjelmistotekniikan menetelmät, koe 2.5.2014 Ohjelmistotekniikan menetelmät, koe 2.5.2014 Vastaa tehtävään 3 erilliselle konseptille. Tehtävät 1 ja 2 saavat olla samalla konseptilla. Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen

Lisätiedot

Rajapinta (interface)

Rajapinta (interface) 1 Rajapinta (interface) Mikä rajapinta on? Rajapinta ja siitä toteutettu luokka Monimuotoisuus ja dynaaminen sidonta Rajapinta vs periytyminen 1 Mikä rajapinta on? Rajapintoja käytetään, kun halutaan määritellä

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa 812341A Olio-ohjelmointi 2106 Peruskäsitteet jatkoa Luokkakohtaiset piirteet n Yhteisiä kaikille saman luokan olioille n Liittyvät luokkaan, eivät yksittäiseen olioon n Kaikki ko. luokan oliot voivat käyttää

Lisätiedot

Mikä yhteyssuhde on?

Mikä yhteyssuhde on? 1 Yhteyssuhde Mikä yhteyssuhde on? Yhteyssuhde Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä yhteyssuhde on? Tili - : String - : double * 1 Asiakas - hetu: String - : String

Lisätiedot

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi 1 Javan perusteet Ohjelmointi IPO-malli Java lähdekoodista suoritettavaksi ohjelmaksi Vakio Muuttuja Miten Javalla näytetään tietoa käyttäjälle, miten Javalla luetaan käyttäjän antama syöte Miten Javalla

Lisätiedot

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi

Lisätiedot

20. Javan omat luokat 20.1

20. Javan omat luokat 20.1 20. Javan omat luokat 20.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.2 Java API Java-kielen Application Programming Interface (API)

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

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang Sisällys 20. Javan omat luokat Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 20.1 20.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki Tehtävä 1 Koherentti selitys Koherentti esimerkki ½p ½p Tehtävä 2 Täysiin pisteisiin edellytetään pelaajien tulostamista esimerkin järjestyksessä. Jos ohjelmasi tulostaa pelaajat jossain muussa järjestyksessä,

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

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Harjoitus 7. 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: Harjoitus 7 1. Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti: class Lintu //Kentät private int _siivenpituus; protected double _aivojenkoko; private bool _osaakolentaa; //Ominaisuudet public int

Lisätiedot

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä LUOKAN MÄÄRITTELY Luokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion muodostimet ja luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Olion kopioiminen

Lisätiedot

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

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

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 811122P (5 op.) 12.12.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

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

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

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

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

Lisätiedot

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä. Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä. JUnit-ympäristö 1. Luo tests -pakkaukseen uusi luokka. Nimeä VHTestit. 2. Laita VHTestit periytymään TestCase:sta

Lisätiedot

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen Sisällys 6. Metodit Oliot viestivät metodeja kutsuen. Kuormittaminen. Luokkametodit (ja -attribuutit).. Metodien ja muun luokan sisällön järjestäminen. 6.1 6.2 Oliot viestivät metodeja kutsuen Oliot viestivät

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

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. 1 Luokka Murtoluku uudelleen Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista. Sievennettäessä tarvitaan osoittajan ja nimittäjän suurin yhteinen tekijä (syt).

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

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisältö. 2. Taulukot. Yleistä. Yleistä Sisältö 2. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.1 2.2 Yleistä

Lisätiedot

KOHDELUOKAN MÄÄRITTELY

KOHDELUOKAN MÄÄRITTELY KOHDELUOKAN MÄÄRITTELY Kohdeluokka, mitä se sisältää Luokan määrittely Olion ominaisuudet eli attribuutit Olion metodit Olion luonti Olion tuhoutuminen Metodin kutsu luokan ulkopuolelta Taulukon alkiona

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Kompositio Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma 1 Mikä kompositio on? Tili - : String - : double 1 1 Kayttoraja

Lisätiedot

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public) Tietorakenteet JAVA-OHJELMOINTI Osa 5: Tietorakenteita Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto Olioita ja tietoja voidaan organisoida määrämuotoisiksi tietorakenteiksi Hyödyllisiä

Lisätiedot

Scrumin käyttö ketterässä sovelluskehityksessä

Scrumin käyttö ketterässä sovelluskehityksessä Scrumin käyttö ketterässä sovelluskehityksessä 9.4.2008 Janne Kuha Manager, Java Services Descom Oy Janne Kuha Manager, Java Services janne.kuha@descom.fi Kuka? Descom Oy:llä, sitä ennen Wanadu Inc., Mountain

Lisätiedot

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma. 2. Taulukot 2.1 Sisältö Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko operaation parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 2.2 Yleistä

Lisätiedot

Ohjelmistotuotanto. Luento 6 28.3.

Ohjelmistotuotanto. Luento 6 28.3. Ohjelmistotuotanto Luento 6 28.3. Testaus ketterissä menetelmissä Testauksen automatisointi Ketterien menetelmien testauskäytänteet Testauksen rooli ketterissä menetelmissä poikkeaa huomattavasti vesiputousmallisesta

Lisätiedot

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen (package). Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa (import). Pakkaukset ja näkyvyys. 13.2 Pakkauksen kokoaminen

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

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

Scrumjatkuvan palvelun DWprojektissa-case. Niina Mäkiranta & OP-scrum-tiimi Aureolis Oy

Scrumjatkuvan palvelun DWprojektissa-case. Niina Mäkiranta & OP-scrum-tiimi Aureolis Oy Scrumjatkuvan palvelun DWprojektissa-case OP-Pohjola Niina Mäkiranta & OP-scrum-tiimi Aureolis Oy Agenda Scrum lyhyesti Jatkuvan palvelun DW-projekti- Case OP-Pohjola Lähtötilanne ennen Scrumia Scrumin

Lisätiedot

Luokan sisällä on lista

Luokan sisällä on lista 1 Luokan sisällä on lista Luokan sisällä lista Listan sisältävä luokka Konstruktorit get-metodi Lista muissa metodeissa addxx-metodi Yksinkertainen pääohjelma Kertauksen List-luokan metodeja 1 Luokan sisällä

Lisätiedot

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla poikkeuksella? Poikkeusten heittäminen.

Lisätiedot

T Ohjelmistotuotannon seminaari. Agile Processes. XP:n hyväksymistestit

T Ohjelmistotuotannon seminaari. Agile Processes. XP:n hyväksymistestit T-76.650 Ohjelmistotuotannon seminaari Agile Processes XP:n hyväksymistestit 15.4.2002 Mikko Pasanen 49159H Tik N mspasane@cc.hut.fi Tiivistelmä 2 Extreme Programming on kevyt ohjelmistokehityksen metodologia,

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

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

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä

Lisätiedot

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

Java-API, rajapinnat, poikkeukset, UML,... Java-API, rajapinnat, r poikkeukset, UML,... Janne Käki 12.10.2006 Keskeisimmät Java-API:n pakkaukset API = Application Programming Interface eli sovellusohjelmointirajapinta (!) pakkaus (engl. package)

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

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

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

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

Helia Ohjelmointitaito 14.3.2005 Tuomas Kaipainen Mermit Business Applications Oy. 2005 Mermit Business Applications

Helia Ohjelmointitaito 14.3.2005 Tuomas Kaipainen Mermit Business Applications Oy. 2005 Mermit Business Applications Helia Ohjelmointitaito 14.3.2005 Tuomas Kaipainen Mermit Business Applications Oy Esityksen sisältö Mermit yrityksenä Perustiedot Toimintamalli Mermit työpaikkana ohjelmistoinsinöörille Esimerkkiprojekti

Lisätiedot

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

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki Sisällys JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta Abstrakti luokka ja metodi Rajapintamäärittely (interface) Eero Hyvönen Tietojenkäsittelytieteen laitos Helsingin yliopisto 13.10.2000 E.

Lisätiedot

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen

Yksikkötestaus. Kattava testaus. Moduulitestaus. Ohjelman testaus. yksikkotestaus/ Seija Lahtinen Yksikkötestaus Kattava testaus Moduulitestaus Ohjelman testaus 1 Kattava testaus Testauksen perimmäinen tarkoitus on LÖYTÄÄ VIRHEITÄ Testaus pitäisi olla täydellinen: - Jokainen pyydetty arvo pitäisi testata

Lisätiedot

public static void main (String [] args)

public static void main (String [] args) HAAGA-HELIA OHJELMOINTI 1(5) OHJELMALUOKKA Ohjelma-luokan käynnistää public static void main (String [] args) main-metodiin voi koodata 1. ohjelman logiikan tai 2. luoda ohjelma-olion ja kutsua metodia,

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

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 81122P (4 ov.) 30.5.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

Ohjelmointi 2 / 2011 Välikoe / 25.3

Ohjelmointi 2 / 2011 Välikoe / 25.3 Välikoe / 25.3 Vastaa neljään (4) tehtävään ja halutessa bonustehtäviin B1 ja/tai B2, (tuovat lisäpisteitä). Bonustehtävät saa tehdä vaikkei olisi tehnyt siihen tehtävään liittyvää tehtävää. Aikaa 4 tuntia.

Lisätiedot

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2 Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2 Viikon 2 laskareita ei pidetä mikrosaleissa, käytössä ovat opetusohjelmaan merkatut salit. Tämän viikon tehtävistä 1-6 tehdään etukäteen kotona.

Lisätiedot

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 26. Tiedostot 26.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja

Lisätiedot

YHTEYSSUHDE (assosiation)

YHTEYSSUHDE (assosiation) YHTEYSSUHDE (assosiation) -Mikä on yhteyssuhde? -Miten toteutan yhteyssuhteen? 1 Mikä on yhteyssuhde? Yhteyssuhde kuvaa kahden olion välistä suhdetta: Esim. Auto Henkilö, omistussuhde Tili Asiakas, omistussuhde

Lisätiedot

Pakkauksen kokoaminen

Pakkauksen kokoaminen 13. Pakkaukset 13.1 Sisällys Pakkauksen kokoaminen package-määrettä käyttäen. Pakkaukset ja hakemistorakenne. Pakkauksen luokkien käyttö muissa pakkauksissa importlauseen avulla. Pakkaukset ja näkyvyys.

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

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

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto Sisällys 14. Poikkeukset Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöteja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmointi 1 / 2009 syksy Tentti / 18.12 Tentti / 18.12 Vastaa yhteensä neljään tehtävään (huomaa että tehtävissä voi olla useita alakohtia), joista yksi on tehtävä 5. Voit siis valita kolme tehtävistä 1 4 ja tehtävä 5 on pakollinen. Vastaa JOKAISEN

Lisätiedot

Javan perusteita. Janne Käki

Javan perusteita. Janne Käki Javan perusteita Janne Käki 20.9.2006 Muutama perusasia Tietokone tekee juuri (ja vain) sen, mitä käsketään. Tietokone ymmärtää vain syntaksia (sanojen kirjoitusasua), ei semantiikkaa (sanojen merkitystä).

Lisätiedot

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena Ohjelmointikielet ja -paradigmat 5op Markus Norrena Kotitehtävä 6, toteuttakaa alla olevan luokka ja attribuutit (muuttujat) Kotitehtävä 6, toteuttakaa alla olevan luokka ja attribuutit (muuttujat) Huom!

Lisätiedot

Kokemuksia eri projektityyppien haasteista/sudenkuopista toimittajayhteistyön näkökulmasta. Pekka

Kokemuksia eri projektityyppien haasteista/sudenkuopista toimittajayhteistyön näkökulmasta. Pekka Kokemuksia eri projektityyppien haasteista/sudenkuopista toimittajayhteistyön näkökulmasta Pekka Kimpimäki @PKimpimaki Pekka Kimpimäki, @PKimpimaki DI, KTM Softa/ICT/digi hankkeiden johtamista +20 vuotta

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ä. Metodien korvaaminen ja super-attribuutti. Attribuutin peittäminen periytymisen kautta. Rakentajat

Lisätiedot

14. Poikkeukset 14.1

14. Poikkeukset 14.1 14. Poikkeukset 14.1 Sisällys Johdanto. Tarkistettavat ja tarkistamattomat poikkeukset. Miten varautua poikkeukseen metodissa? Poikkeusten tunnistaminen ja sieppaaminen try-catchlauseella. Mitä tehdä siepatulla

Lisätiedot

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 6. Tiedostot 6.1 Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2 Johdanto Tiedostoja on käsitelty uudelleenohjattujen standardisyöte- ja tulostusvirtojen avulla. Tiedostoja voidaan

Lisätiedot

Ohjelmointi 2, välikoe

Ohjelmointi 2, välikoe Ohjelmointi 2, välikoe 21.3.2014 Vastaa neljään tehtävään kuudesta siten, että jokainen tehtävä tulee omalle konseptilleen. Mikäli vastaat useampaan kuin neljään tehtävään, pisteiden laskussa huomioidaan

Lisätiedot

T Henkilökohtainen harjoitus: FASTAXON

T Henkilökohtainen harjoitus: FASTAXON T-76.115 Henkilökohtainen harjoitus: FASTAXON Suunnittelumallit Group: Muuntaja Pentti Vänskä 52572W 2 1. Toteutus Tämä henkilökohtainen harjoitustyö käsitteli suunnittelumallien (Design Patterns) käyttöä

Lisätiedot

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004 Vertailulauseet Ehtolausekkeet Ehdot, valintalausekkeet Boolean-algebra == yhtäsuuruus!= erisuuruus < pienempi suurempi >= suurempi tai yhtäsuuri Esimerkkejä: int i=7; int j=10;

Lisätiedot

Ohjelmistoprosessit ja ohjelmistojen laatu Ohjelmistoprosessit ja ohjelmistojen laatu (4op)

Ohjelmistoprosessit ja ohjelmistojen laatu Ohjelmistoprosessit ja ohjelmistojen laatu (4op) 581361 Ohjelmistoprosessit ja ohjelmistojen laatu (4op) Ohjelmistojärjestelmien syventävien opintojen kurssi Myös ohjelmistotekniikan profiilin pakollinen kurssi eli ohjelmistotekniikka-aiheisen gradun

Lisätiedot

KOODAAKO PROJEKTIPÄÄLLIKKÖ?

KOODAAKO PROJEKTIPÄÄLLIKKÖ? KOODAAKO PROJEKTIPÄÄLLIKKÖ? - ROOLIODOTUKSET KETTERISSÄ OHJELMISTOPROJEKTEISSA Mikko Viskari Development Manager Ohjelmistoprojektikokemusta vuodesta 2005 Teknisen projektipäällikön roolissa vuodesta 2011

Lisätiedot

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 6. Metodit 6.1 Sisällys Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2 Oliot viestivät metodeja kutsuen Olio-ohjelmoinnissa ohjelma

Lisätiedot

Listarakenne (ArrayList-luokka)

Listarakenne (ArrayList-luokka) Listarakenne (ArrayList-luokka) Mikä on lista? Listan määrittely ArrayList-luokan metodeita Listan läpikäynti Listan läpikäynti indeksin avulla Listan läpikäynti iteraattorin avulla Listaan lisääminen

Lisätiedot

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa(); Sisällys 7. Oliot ja viitteet Olio Java-kielessä. Olion luominen, elinikä ja tuhoutuminen. Viitteiden käsittelyä: sijoitus, vertailu ja varautuminen null-arvoon. Viite metodin paluuarvona.. 7.1 7.2 Olio

Lisätiedot

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla Lasse Leino ja Marko Kahilakoski Helsingin Yliopisto Tietojenkäsittelytieteen laitos Rinnakkaisohjelmointi 18. joulukuuta 2006 Sisältö 1 Säikeet

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

Tietokannat II -kurssin harjoitustyö

Tietokannat II -kurssin harjoitustyö Tietokannat II -kurssin harjoitustyö Jyri Lehtonen (72039), jkoleh@utu.fi Azad Hajipour (72187), azhaji@utu.fi 10.6.2007 Sisältö 1. Tietokannan kuvaus... 1 1.1 Tietokannan rakenne... 1 1.2 Relaatiokaava

Lisätiedot

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) 1(37) PERIYTYMINEN (inheritance) YLILUOKKA (superclass) ALILUOKKA (subclass) A) on käytännöllinen ohjelmointitekniikka = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys) B) on käsitteiden

Lisätiedot