Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Samankaltaiset tiedostot
Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

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

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

Olio-ohjelmointi Javalla

1 Tehtävän kuvaus ja analysointi

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

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Rajapinta (interface)

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmistotekniikan menetelmät, kesä 2008

Testivetoinen ohjelmistokehitys

Ohjelmiston toteutussuunnitelma

Harjoitustyön testaus. Juha Taina

Ohjelmistotekniikan menetelmät, kevät 2008

Ohjelmistojen mallintaminen, sekvenssikaaviot

Testaustyökalut. Luento 11 Antti-Pekka Tuovinen. Faculty of Science Department of Computer Science

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

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

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

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

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

Ohjelmien testaustyökalut

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Ohjelmistotuotantoprojekti

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Javan perusteita. Janne Käki

Test-Driven Development

Tapahtuipa Testaajalle...

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

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

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmistotekniikan menetelmät, koe

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

Mikä yhteyssuhde on?

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Helia Ohjelmointitaito Tuomas Kaipainen Mermit Business Applications Oy Mermit Business Applications

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

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

Käyttötapausanalyysi ja testaus tsoft

Ohjelmistotestaus -09

Metodien tekeminen Javalla

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmistojen suunnittelu

Testiautomaatio tietovarastossa. Automaattisen regressiotestauksen periaate ja hyödyt

Automaattinen yksikkötestaus

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

2. Olio-ohjelmoinista lyhyesti 2.1

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Analyysi on tulkkaamista

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

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmistotekniikan menetelmät, arkkitehtuuria ja rajapintoja

Test-Driven Development

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Testaaminen ohjelmiston kehitysprosessin aikana

9. Periytyminen Javassa 9.1

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

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmistojen mallintaminen Ohjelmiston suunnittelu Model driven development Harri Laine 1

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

9. Periytyminen Javassa 9.1

JUnit ja EasyMock (TilaustenKäsittely)

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

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

Convergence of messaging

Ohjelmistotekniikan menetelmät, UML

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Osio 4: Graafinen käyttöliittymä

18. Abstraktit tietotyypit 18.1

Verifioinnin ja validoinnin ero. 7. Verifiointi ja validointi. Verifiointi- ja validointitekniikat. Verifiointi- ja validointitekniikat II

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

7. Oliot ja viitteet 7.1

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

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

Testaus käsite. Sekalaista testausasiaa. Testauksen käsitteestä. Kattavuusmitat. Jos ajatellaan, että testaus = V&V, voidaan erottaa:

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

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

TOIMINNALLINEN MÄÄRITTELY MS

UML ja luokkien väliset suhteet

Kontrollipolkujen määrä

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

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Ohjelmistotekniikan menetelmät, käyttötapauksiin perustuva vaatimusmäärittely

Ohjelmistojen mallintaminen. Luento 3, 9.11.

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

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

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

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

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Ohjelmiston testaus ja laatu. Testausmenetelmiä

Transkriptio:

582101 - Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta 1

Toteutuksesta ja testauksesta Suunnitteluprosessista Tarkan tason luokkasuunnittelu Siirtyminen UML-kaavioista Java-toteutukseen Yksikkötestaus ja testausohjattu kehitys (TDD) Hyväksymis- ja regressiotestaus 2

Yleistä suunnitteluprosessista Liiketoimintatason malli järjestelmän määrittelynä Karkean tason käyttötapaukset Liiketoiminta- oliot Käyttöliittymäsuunnitelma Arkkitehtuurimalli Kohdealuetason käsitteellinen malli Tarkat Analyysitason käyttötapaukset luokkamalli Suunnittelutason malli Vuorovaikutus- kaaviot Tarkan suunnit- telutason luokat Tietokantamalli 3

Erilaisia suunnittelutason olioiden lähtökohtia Käyttöliittymä- suunnitelma Arkkitehtuuri- malli Tarkat Analyysitason käyttötapaukset luokkamalli Tarkan suunnittelutason luokkamalli Käyttöliittymä- oliot (View) Kontrollioliot (Controller) Sisältöoliot (Model) 4

Käyttöliittymästä sisältöön Suunnittele käyttöliittymä ja valitse sovellettava arkkitehtuurimalli, esim. MVC Sisällytä suunnitelmaasi tarvittavat käyttöliittymäoliot ja luokat Sisällytä suunnitelmaasi kustakin käyttötapauksesta vastaava kontrolliolio (sama voi vastata useasta) Määrittele kontrollioliolle käyttötapauksen hoitamiseen tarvittavat operaatiot ja attribuutit Sisällytä suunnitelmaasi käyttötapauksessa tarvittavat sisältöoliot (vrt. analyysitason luokkamalli) Määrittele sisältöolioille käyttötapauksen hoitoon tarvittavat operaatiot (lisää tarvittaessa luokkia) 5

Tarkan tason luokkasuunnittelu Tarkentaa alkuperäistä luokkamallia Syötteet (analyysitason luokkamallin lisäksi) käyttötapausmalli määrittelee toiminnallisuuden, joka on toteutettava valittu arkkitehtuurimalli (architectural framework) asettaa tiettyjä rajoitteita Tuottaa suunnittelutason luokat ja rajapinnat yksityiskohtineen (erityisesti operaatiot) Etenee yleensä rinnakkain vuorovaikutussuunnittelun kanssa ja liittyy siihen kiinteästi 6

Palvelujen jakaminen luokkien operaatioiksi Lähtökohtana tietojärjestelmälle määritellyt palvelut (käyttötapaukset) Palvelut toteutetaan olioiden yhteistyönä (olioiden verkkona) Tavoitteena haluttujen palveluiden toteuttaminen selkeän ja ylläpidettävän olioverkon avulla Oliolle (tai luokalle) voidaan antaa vastuu jostakin palvelukokonaisuudesta ja operaatiot määräytyvät tämän vastuun puitteissa 7

Palvelujen jakaminen luokkien operaatioiksi Palvelua määriteltäessä, on selvitettävä pystyykö luokan olio hoitamaan sen itsenäisesti oman tietosisältönsä avulla; ja ellei pysty millaista yhteistyötä muiden olioiden kanssa tarvitaan Kumpikin selvityksistä voi tuottaa uusia attribuutteja tai operaatioita 8

Esimerkki: Luokan KingKX125 operaatio checkfrequency(double) boolean checkfrequency(double frequency) { // imaginary transmission test if(math.random() < 0.999999) { } return true; } return false; Itsenäinen, mutta ei kovinkaan älykäs Parempi toteutus voisi käyttää taajuuksia esittävää oliota taajuuden testaamiseen 9

Esimerkki: Luokan KingKX125 operaatio checkfrequency(double) boolean checkfrequency(double freq) { } Frequency f; f = FrequencyFactory.getFrequency(freq); return f.transmissiontest(); Toteuttaa palvelun toista oliota käyttäen Näin esiteltiin riippuvuus luokkaan Frequency; tuon luokan toiminnan muuttuessa vaihtuu myös tämän luokan toiminta 10

UML-kaaviosta toteutukseen UML-luokista puuttuu tyypillisesti yksityiskohtia, jotka on kiinnitettävä luokan toteuttamiseksi kooditasolla Olennaisinta on päättää yhteyksien toteuttamisesta 1-1-yhteydet toteutetaan tyypillisesti kohteen tyypin mukaisina tietokenttinä (data member, data field) 1-N- ja N-M-yhteydet toteutetaan usein kokoelmaluokkien avulla UML tarjoaa mahdollisuuden esittää luokat niin tarkalla tasolla, että niistä voidaan generoida luokkarungot metodien toteutuskoodia ei kuitenkaan yleensä anneta myöskään standardikirjastoihin kuuluvia kokoelma- ja vastaavia luokkia ei yleensä merkitä näkyviin 11

Esimerkki: analyysitason käsitteellisestä kaaviosta 12

Esimerkki:.. suunnittelutason kaavioon 13

Esimerkki: suunnittelutason luokasta.. 14

Esimerkki:.. vastaavaan Java-luokkaan Movie.java 7: public class Movie { 8: private String movietitle; 9: 10: private double moviecode; 11: 12: private String director; 13: 14: private Collection listedas; 15: 16: public Movie(double moviecode,string title,string director){ 17: this.moviecode = moviecode; 18: this.director = director; 19: this.movietitle = title; 20: listedas = new ArrayList(); 21: }... 15

Testaus ohjelmistoprosessin eri vaiheissa Käsitteellinen luokkamalli Luokkasuunnittelu ja koodaus Vikaraportit Käyttötapaukset Testausohjattu ohjelmistokehitys Hyväksymistestaus Ylläpito ja regressiotestaus Muut spesifikaatiot ja vaatimukset Arkkitehtuurimalli Päivityspyynnöt 16

Testaus ohjelmistoprosessin eri vaiheissa (vaihtoehtoinen jaoittelu) 17

Testausohjattu ohjelmistokehitys (Test-driven development, TDD) Ohjelmoija kirjoittaa testimäärittelyt ja testikoodin Testit laaditaan ennen koodattavan moduulin, luokan, tms. toteutusta (usein jo ennen lopullista suunnittelua) Sovelluskoodi kirjoitetaan täyttämään testien sisältämät vaatimukset (testit ovat moduulin spesifikaatio) Testaus ohjaa kehitystyötä (ei ole erillinen laadunvarmistusvaihe toteutuksen jälkeen) testien on aluksi (ennen toteutuksen valmistumista) epäonnistuttava (pyritään varmistamaan, että testit todella testaavat haluttua asiaa) toiminnallisuus katsotaan toteutetuksi, kun testit menevät läpi 18

Yksikkötestaus (unit testing) Testausohjattu kehitys alkaa yksikkötestauksella Yksikkötestin yksikkö on yleensä luokka testattava luokka eli testin kohde (voi olla myös luokan osa tai muutaman toisiinsa kiinteästi liittyvän luokan joukko) testiluokka eli testin suorituksen ja resurssit määrittelevä luokka (tai luokkajoukko) Pienin itsenäisesti suoritettava testin osa (yleensä testiluokan metodi) on testitapaus (test case) Testitapauksia kootaan tyypillisesti suuremmiksi kerralla suoritettaviksi testikokoelmiksi (test suite) 19

Mihin testikoodi sijoitetaan? Jokaisen testattavan yksikön (luokan) sisään esim. Javassa main-metodiin tai staattiseen sisäiseen luokkaan Erillisiin testiluokkiin yleensä käytetään geneeristä testauskehystä JUnit on (erityisesti XP:n muiden ketterien ohjelmisto-prosessien yhteydessä) suosittu testauskehys 20

JUnit Test run(testresult) * TestCase run(testresult) runtest() setup() teardown() TestSuite run(testresult) addtest(test) Account deposit(double) AccountTest setup() testdeposit() 21

Yksikkötestausesimerkki (black-box) 22

Yksikkötestaus oliojärjestelmässä Oliojärjestelmässä toiminnallisuus tyypillisesti toteutetaan olioverkon yhteistyönä Edellisen kalvon yksikkötestausesimerkki testaa olioverkkoa mustana laatikkona, joka joko toimii tai ei toimi Sana yksikkötestaus kuitenkin viittaa ajatukseen, jonka mukaan jokainen testattava yksikkö olisi itsenäisesti testattavissa Eräs ratkaisu on kehittää kullekin luokalle testausluokkien ympäristö (mock objects), jossa testattavat oliot voivat toimia yhteistyössä 23

MockFrequency Radioesimerkissä vaihdettiin radio kommunikoimaan radiotaajuutta simuloivan Frequency-luokan olioiden kanssa Radiotaajuus-olion tehtävänä saattaisi olla välittää oliolle lähetetyt viestit kaikille järjestelmän radioille, jotka ovat virittäytyneet kuuntelemaan ko. taajuutta Vrt. Observer-pattern Radiotaajuus-oliota testattaessa testataan siis viestinvälityksen toimivuutta; Radion check-metodia testattaessa tarkistaan, että radio testissään todellakin käy kaikilla kanavilla 24

MockFrequency Radion metodin check() yksikkötestiä varten tehdään uusi luokka, MockFrequency, jota käytetään yhdessä yksikkötestaavan luokan kanssa Radion metodin check() yksikkötesti onnistuu, mikäli radio metodissaan läpikäy jokaisen kanavan MockFrequency-luokkaan kirjoitetaan yksikkötestitapauksen kannalta olennainen toiminnallisuus Kaikkia Frequency-luokan toiminnallisuuksia / vastuita ei tarvitse (eikä edes pidä!) toteuttaa 25

MockFrequency.java public class MockFrequency implements Frequency { } private boolean checked = false; public MockFrequency(double d) { } public boolean transmissiontest() { return checked = true; } public boolean ischecked() { return checked; } public void transmit(string str) { /* NOOP */ } 26

Hyväksymistestaus (acceptance testing) Testataan toteutettu koodi erikseen toteutuksen jälkeen Kattaa usein laajempia toiminnallisuuskokonaisuuksia kuin yhden luokan (jopa koko järjestelmän) Tarkistetaan verifiointipisteissä (verification point), että käyttötapauksissa kuvatut vaatimukset toteutuvat Yleensä mustalaatikkotestausta (black-box testing) ei huomioida järjestelmän sisäistä toteutusta tai toimintaa, vaan verrataan ainoastaan syötteitä saatuihin tulosteisiin annetaan usein automaattisesti tuotettuina testiskripteinä testaaja suorittaa manuaalisesti käyttöliittymän kautta ne testit, joita ei voida automatisoida 27

Regressiotestaus Järjestelmän muutoksen jälkeen uudelleensuoritettavat relevantit hyväksymistestit koskevat muuttuneita osia ja niistä riippuvia osia Tarkoituksena varmistaa, että muutokset ja korjaukset on toteutettu oikein muutokset eivät ole aiheuttaneet ei-toivottuja sivuvaikutuksia Olennaista testien automatisointi mahdollisimman pitkälle turhan testauksen välttäminen, jos mahdollista Regressiotestiin (kuten hyväksymistestiinkin) liittyy testiskripti ja sen toteutus (tai testin suoritusjärjestelmä) syötteiden ja odotettujen tulosten spesifikaatiot testidokumentti, jossa raportoidaan testin tulokset 28