Tervetuloa kurssille

Samankaltaiset tiedostot
Ohjelmoinnin peruskurssien laaja oppimäärä

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

Luento 3. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Testivetoinen ohjelmistokehitys

Kurssin aloitus. AS XML-kuvauskielten perusteet Janne Kalliola

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

Ohjelmistojen mallintaminen. Luento 11, 7.12.

58160 Ohjelmoinnin harjoitustyö

Luento 2. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

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

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

Test-Driven Development

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmien testaustyökalut

Tentissä ratkaistaan neljä ohjelmointitehtävää Javalla. Tehdään sähköisesti mikroluokan Windows-koneilla.

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

Kurssin käytännön järjestelyt. Tuotantotalous 1 Tuomo Tanila

JUnit ja EasyMock (TilaustenKäsittely)

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

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

Test-Driven Development

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

T Projektikatselmus

Ohjelmoinnin perusteet Y Python

T Projektikatselmus

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

15. Ohjelmoinnin tekniikkaa 15.1

TIE Ohjelmistojen testaus Harjoitustyön esittely osa 1: Yleisinfo ja vaiheet 1 & 2. Antti Jääskeläinen Matti Vuori

19/20: Ikkuna olio-ohjelmoinnin maailmaan

T Ohjelmistojen määrittely- ja suunnittelumenetelmät

15. Ohjelmoinnin tekniikkaa 15.1

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmiston testaus ja laatu. Testaustasot

T harjoitustehtävät, syksy 2011

Eclipse ja JUnit-ohjelmoijatestit

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

T harjoitustyö, kevät 2012

Ohjelmointi 2 / 2011 Välikoe / 25.3

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

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

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

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

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


Ohjelmistotuotantoprojekti

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

Testaussuunnitelma Labra

Automaattinen yksikkötestaus

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

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin jatkokurssi, kurssikoe

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

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

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

Ohjelmoinnin perusteet, syksy 2006

Sopimuspohjainen olio-ohjelmointi

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Olio-ohjelmointi Javalla

Ohjelmoinnin perusteet Y Python

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

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

Testaussuunnitelma PULSU. Syksy 2008 Ohjelmistotuotantoprojekti. HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmoinnin perusteet Y Python

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

20. Javan omat luokat 20.1

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

1. Olio-ohjelmointi 1.1

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

Kurssin käytännön järjestelyt. Tuotantotalous 1 Jukka Kurki

Ohjelmoinnin peruskurssi Y1

18. Abstraktit tietotyypit 18.1

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

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

ITKP102 Ohjelmointi 1 (6 op)

Harjoitus 7: NCSS - Tilastollinen analyysi

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op)

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

Kurssin käytännön järjestelyt. Tuotantotalous 1 Tuomo Tanila

Javan perusteita. Janne Käki

Tässä tehtävässä käsittelet metodeja, listoja sekä alkulukuja (englanniksi prime ).

1. Omat operaatiot 1.1

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

17. Javan omat luokat 17.1

RINNAKKAINEN OHJELMOINTI A,

Ohjelmoinnin perusteet Y Python

Suoritusten seuranta ja opiskelijan edistyminen

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Johdanto. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Kurssijärjestelyt. ME-C2300 Verkkojulkaisemisen perusteet (5 op) Mari Hirvi Informaatioverkostot / Mediatekniikan laitos

Dynaaminen analyysi III

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

Transkriptio:

Tervetuloa kurssille T-106.1240 Ohjelmoinnin jatkokurssi T1 & T-106.1243 Ohjelmoinnin jatkokurssi L1 Luennoitsija: Otto Seppälä Kurssin WWW: http://www.cs.hut.fi/opinnot/t-106.1240/s2007

Foreign Students All lectures are in Finnish Supplementary material (links, literature pointers will be listed on the english website) http://www.cs.hut.fi/studies/t-106.1240/s2007 Foreign students should join the mailing list. Instructions on the website Exercises and the course project can be done using only english All instructions will be on the website on 14.9 noon. For now it is essential to sign up using wwwtopi and sign on the foreign student mailing list The first mail you receive will have all the relevant information for now.

Ilmoittautuminen Kurssille T-106.1240/1243 ilmoittaudutaan WWWTopin kautta Kursseilla on erilliset ilmoittautumissivut Ilmoittautuminen on pakollista Vain ilmoittautumalla ajoissa saa tarvittavat WebCAT-tunnukset WebCAT-tunnuksen salasana lähetetään TOPI-tietojen mukaiseen sähköpostiosoitteeseen tämän viikon loppupuolella. Pidä siis TOPI-tietosi ajan tasalla. Ilmoittautuminen sulkeutuu 21.9!

Päällekkäisyydet Kurssi on päällekkäinen seuraavien kurssien kanssa ts. Jonkin seuraavista jo suorittaneet eivät voi sisällyttää tätä kurssia opintoihinsa T-106.213/216/217 T-106.235 T-106.1240/1243 Ohjelmoinnin peruskurssit L1/Y1/ruotsink. Ohjelmoinnin jatkokurssi T1 Kurssi itse Jos olet jo suorittanut jonkin ohjelmoinnin peruskurssin javalla jossa oli ohjelmointiprojekti, tule luennon jälkeen kertomaan mikä se oli. T-osaston webisivuilla on lähes ajantasalla oleva korvaavuuskaavio ohjelmoinnin peruskursseille.

Esitiedot Kurssilla on kaksi esitietokurssia Ohjelmointikurssi T-106.1200/1203/1206/1207 tai T-93.211 (Java-versio) Puuttuvan ohjelmointikurssin tapauksessa pääsystä kurssille tulee neuvotella opettajan kanssa Kurssin suorittaminen esitietokurssin kanssa samanaikaisesti EI ole hyväksyttävää Tietorakenteet ja Algoritmit Tietorakennekurssin tuntemus selkiyttää asioita. Koska koko TRAK:in aluetta ei käsitellä, voivat vanhan tutkintorakenteen mukaankin suorittavat selvittää projektissa vaadittavat asiat itseopiskeluna.

Suorittaminen Kurssilla on kaksi pakollista osasuoritusta: Harjoitustehtävät (30% arvosanasta) 2 harjoituskierrosta Pääasiallinen tarkoitus on palauttaa koodausrutiini ennen projektin aloittamista Kurssilla on 6 harjoitusryhmää joissa voi vapaasti käydä hakemassa neuvoja harjoitusten avuksi. Toisella opetuskaudella vastaavasti ohjeistusta projektityöhön Projektityö (70% arvosanasta) Projektisuunnitelma Projektidokumentti Projektityön ohjelmakoodi

Suorittaminen Kaikki kurssin suoritukset ovat yksilösuorituksia! Plagiointi johtaa kurssilta poistamiseen ja jatkotoimenpiteisiin Luonnollisesti projektissa saa käyttää lähteitä (esim jokin tunnettu algoritmitoteutus) kunhan merkitsee ne oikein Olennaista on tietää minkä osan juuri SINÄ olet tehnyt.

Harjoitusryhmät Harjoitusryhmät aloittavat 17.9 Ma 8-10 Maari-C Ma 16-18 Maari-A Ti 12-14 Maari-C Ti 16-18 Maari-C To 14-16 Maari-A Pe 14-16 Maari-A Ryhmät ovat tauolla koeviikolla Viimeinen harjoitusryhmäviikko on marraskuun lopulla

Tiedotus Kurssilla on kotisivu http://www.cs.hut.fi/opinnot/t-106.1240/s2007 Sivulla on nyt kurssiesite Muu informaatio tulee sivulle pian. Topissa ilmoittautuneet saavat mailin kun kurssisivusto siirtyy esitetilasta kurssitilaan Kurssilla on myös uutisryhmä opinnot.tik.jatko-1 Kurssitiedotuksia, vapaata keskustelua, kysymyksiä aj vastauksia Ei aktiivista päivystystä kuten L-kurssilla IRC-kanava #ohj-jatko

Projekti

Projekti Projektin aikataulu karkeasti Aihevalinta avautuu 25.9 Suunnitelmat palautetaan 6.10 Yleissuunnitelma 12.10 Tekninen suunnitelma Suunnitelmademot 15.10 19.10 Aikaa koodata... Projektidemot Marras-joulukuun vaihde (todenn. Joulukuun puolella)

Projektityön suunnitelma Suunnitelma palautetaan kahdessa erässä 6.10 Yleistason suunnitelma Ohjelman sisältämät toiminnot Käyttöliittymän ulkoasu ja toiminnallisuus Ulkoisiin tiedostoihin tallennettu data ja näiden tiedostojen formaatti Järjestelmätestaussuunnitelma 12.10 Tekninen suunnitelma Ohjelman käyttämät algoritmit ja tietorakenteet Kuvaus ohjelmaan tulevista luokista ja haluttaessa myös luokkakaavio Työsuunnitelma, erityisesti etenemisjärjestys Yksikkötestaussuunnitelma

Projektityön suunnitelma Keskeisimmät suunnitelmassa tarvittavat asiat käsitellään ensimmäisellä kolmella luennolla Projektiaiheiden valinta avautuu kolmannen luennon jälkeen. Aiheen saa valita kun ensimmäisen kierroksen minimipisteet ovat kasassa Mahdolliset omat aiheet hyväksytetään luennoitsijalla Luennolla 24.9 annetaan tarkat ohjeet suunnitelman kirjoitukseen Julkaistaan myös WWW:ssä

Projektityön suunnitelma Suunnitelma (sisältäen molemmat osat) esitellään assistentille suunnitelmademossa (15-20min.) Assistentti on tutustunut suunnitelmaan ennalta ja antanut sille alustavan arvosanan. Suunnitelmademossa opiskelija esittää suullisesti suunnitelmansa pääkohdat assistentille Assistentti antaa ohjeita mahdollisista puutteista tai ongelmista suunnitelmassa Kysymyksiä voi (ja ehkä kannattaakin) esittää Liian huono tai puuttuva suunnitelma voi johtaa työn hylkäämiseen Hyvin tehty suunnitelma on itsessään hyvä projektidokumentin pohja Suunnitelmademot pidetään välillä 15.10...19.10.

Projektityön dokumentti Dokumentti sisältää seuraavat osat Ohjelman käyttöohjeet Lista ohjelman sisältämistä ominaisuuksista Lista ohjelman tunnetuista bugeista / puutteista Luokkakaavio tms. Kuvaus ohjelman rakenteesta Tiedostoformaattien kuvaukset Toteutunut työjärjestys ja aikataulu Testit Itsearviointi 1-3 Mielestäni onnistuneinta osaa ohjelman rakenteessa/koodissa 1-3 Mielestäni heikointa osaa ohjelman rakenteessa/koodissa (parannusehdotukset)

Arvosteluperusteet Koodin dokumentointi Ohjelman rakenne ja laatu Jako luokkiin Jako metodeihin Laajennettavuus Uudelleenkäytettävyys Yleinen ratkaisu > Erikoistapaus Valitut algoritmit, tietorakenteet ja perustelut Toteutettujen piirteiden laatu ja vaikeus Bugilistan kattavuus Tiedostetut puutteet eivät ole yhtä pahoja kuin tiedostamattomat

Harjoitukset

Harjoitukset Kurssilla on kaksi harjoituskierrosta Molemmat ensimmäisellä opetuskaudella Molemmilla kierroksilla on minimipistemäärä Ensimmäinen harjoituskierros julkaistaan loppuviikosta Kierros on auki n. 2,5 viikkoa

WebCAT Kurssin kaikki tehtävät palautetaan WebCAT järjestelmään Linkki järjestelmään tulee kotisivulle kun tehtäväkierros 1 avataan. WebCAT Automaattinen tehtäväpalautusten arvostelujärjestelmä Kehittäjä Stephen Edwards, Virginia Tech Toimintamalli Opiskelija palauttaa tehtävään sekä ratkaisun annettuun tehtävään, että testit jotka kattavasti testaavat ratkaisun sisältämän koodin Koodin testaamiseen käytetään JUnit testauskirjastoa

Arvostelukriteerit Code correctness (oikeellisuus) Palautuksen arvostelu opiskelijan itse luomia testejä vastaan Kuinka suuri osa opiskelijan testeistä menee läpi Test completeness (kattavuus) Kuinka suuri osa palautetun ohjelman koodista käydään läpi opiskelijan omissa testeissä Test validity Testaavatko opiskelijan testit oikeita asioita Käytännössä opiskelijan ohjelman testaaminen opettajan määrittelemällä testisetillä Staattinen koodianalyysi Etsii koodaus-, kommentointi- yms. virheitä

Arvostelukriteerit Arvostelukaava oikeellisuus*kattavuus*validiteetti + staattinen testaus Staattisen testauksen painoarvo vaihtelee tehtävittäin Kurssilla voi olla tehtäviä joissa opiskelijan ei tarvitse palauttaa testejä. Näistä on erillinen maininta tehtävänannossa. Palautustapa Jos palautettavia tiedostoja on vain yksi, se palautetaan sellaisenaan. Jos tiedostoja on monta, palautetaan JAR-paketti jar cvf paketti.jar tiedosto1.java tiedosto2.java...jne!! Älä unohda paketin nimeä paketti.jar!! Muuten jar ylikirjoittaa tiedosto1.java:n Demo luennon loppupuolella

Testaus "Program testing can be used to show the presence of bugs, but never to show their absence!" Edsger Dijkstra

Testaus Testaus vertaa ohjelman toimintaa sen oletettuun toimintaan (spesifikaatio) Poikkeamaa spesifikaatiosta kutsutaan virheeksi Spesifikaatio ei aina ole täydellinen Speksin tulkinnat on hyvä merkitä testin yhteyteen Testaus pyrkii osoittamaan virheiden olemassaolon Mutta ei voi todistaa virheettömyyttä Paitsi jos kaikki mahdolliset tilat ja syötteet käydään läpi jolloin kyseessä onkin jo mallintarkistus Hyvä testi pystyy näyttämään aiemmin tuntemattoman virheen olemassaolon Testaus pyrkii testaamaan ohjelmaa tai sen osaa tietoisesti sekä perustapauksilla, että spesifikaation rajoilla ja erikoistapauksissa

Testaus Testijoukon tulisi olla kattava Testaus ei ole helppoa Olion sisäinen tila riippuu suoritushistoriasta, yksittäinen testi voi mennä läpi, mutta seuraava epäonnistua Rinnakkaisohjelmoinnissa suoritushistorian rooli korostuu vielä enemmän Tietyn virheen tuottavan suoritushistorian luominen voi olla hyvinkin hankalaa

Helpompaa testausta Määrittele luokkien väliset rajapinnat yksinkertaisiksi ja selkeiksi Monimutkaiseen rajapintaan on vaikea kirjoittaa tynkäluokkia Enkapsulaatio Mitä vähemmän olion sisäinen tila riippuu muusta maailmasta, sitä helpompaa sitä on testata Lisäksi virheitäkin tulee todennäköisesti vähemmän Metodien ja luokkien jako pienempiin, hallittavampiin osiin Pieniä luokkia on helpompi testata Kaikki mainitut ovat muutenkin hyvän koodin tunnusmerkkejä

Testauksen tasoja Järjestelmätestaus (System testing) (suoritetaan viimeiseksi) Koko järjestelmän testaaminen järjestelmän spesifikaatiota vastaan Integraatiotestaus (Integration testing) Ohjelman osien testaaminen yhdessä Erityisesti ohjelman osien välinen tiedonvaihto Yksikkötestaus (Unit testing) (tästä aloitetaan) Yksikkötestauksessa ohjelmasta testataan pientä osaa, usein yksittäistä metodia tai luokkaa Verrataan tekniseen spesifikaatioon Testaus pyritään yleensä suorittamaan riippumattomasti muista ohjelman osista

Yksikkötestaus Yksikkötestaus (Unit testing) Yksikkötestauksessa ohjelmasta testataan pientä osaa Verrataan tekniseen spesifikaatioon Testaus pyritään yleensä suorittamaan riippumattomasti Monesti joudutaan toteuttamaan ns. Testipeti Simuloi muita ohjelman osia Sisältää usein tynkäluokkia, oikeiden luokkien sijaan Helpottaa testausta Muut luokat saadaan toimimaan tarkalleen speksin mukaan ennenkuin niitä on olemassakaan Erikoistapaukset on monesti helpompi generoida näin, kuin käyttämällä muita luokkia normaalisti Muista luokista voidaan kaivaa tietoja jotka eivät muuten olisi saatavilla

Yksikkötesti Yksikkötestin kuvaus sisältää Sanallisen kuvauksen siitä mitä testi testaa Ohjelmalle testissä annettavat syötteet, tai miten ne muodostetaan Esim tiettyjen metodien kutsuminen tietyssä järjestyksessä, esim: Add(0), Add(1), Delete(0) Ohjelman (olioiden) tila ennen testiä Odotetut tulosteet (ja olioiden tila) joihin verrataan Yksikkötesti Yrittää varmistaa että jokin koodin osa toimii niin kuin kehittäjä luulee sen toimivan.

Testausvinkkejä Testaa aina: Sallituilla äärirajoilla Esim. Poista puusta alkio kun siellä on vain yksi alkio. Laittomilla äärirajoilla Esim. Katso tuleeko koodilta speksin mukainen poikkeus Normaaliarvoilla Esim. Hae puusta jossa on kymmenen alkiota alkiota joka ei ole puussa ja katso että paluuarvo on false. Jos käytät satunnaisuutta, alusta satunnaislukugeneraattori itse vakioarvolla Virhetilanteet voi tällöin toistaa ja debugata Tai tallenna käyttämäsi siemenluku, jotta voit toistaa testit

Testikattavuuden mittoja Testeille on olemassa joitakin kattavuusmittoja, esimerkkejä kontrollivuon kattavuusmitoista: Rivikattavuus, lausekattavuus (WebCAT) tutkivat kuinka suuri osa riveistä suoritetaan vähintään kerran testauksen aikana Ehtokattavuus Ehtolauseissa kaikkien ehtolauseiden ehtojen tulee saada kaikki arvonsa Polkukattavuus Ohjelman suoritus haarautuu ehtolauseissa. Polkukattavuus pyrkii mahdollisimman monen eri polun suorittamiseen. Jopa täydellinen rivikattavuus voi olla vaikea saavuttaa

Regressiotestaus Regressiotestaus tarkistaa että järjestelmään tehdyt muutokset eivät ole rikkoneet aiempaa toiminnallisuutta Jos yksikkötestit on rakennettu jollakin automatisoidulla testaustyökalulla, on regressiotestaus hoidettavissa kivuttomasti

Testaus ja Extreme Programming Test-first toteutusjärjestys Ohjelmointi aloitetaan testien suunnittelulla ja toteuttamisella Kun uusia ominaisuuksia toteutetaan, ne voidaan heti testata Jos ohjelma toimii väärin, kirjoitetaan ensin testi joka osoittaa virheen olemassaolon ja vasta sitten ryhdytään korjaamaan virhettä

Formaali verifiointi Ohjelman virheettömyyttä ei voi todistaa testaamalla Jos ohjelman on välttämätöntä olla virheetön, sen toiminnallisuus todistetaan formaalilla verifioinnilla Formaali verifiointi Formaali verifiointi pyrkii todistamaan ohjelman oikeellisuuden, joko : Tutkimalla kaikki ohjelman tilat : mallintarkistus Matemaattisella todistuksella : invariantit, temporaalilogiikka,jne. Käytännössä tämä on raskasta ja tehtävissä vain rajallisen kokoisille ohjelmille Esim: tiedonsiirtoprotokollat, hardware Ei käsitellä tällä kurssilla

JUnit Junit on helppokäyttöinen yksikkötestaustyökalu Vastaavat asiat saisi kyllä aikaan ilmankin JUnitia, etu tulee lähinnä tuesta eri IDE:issä (mm. Eclipse) ja standardista Testit kirjoitetaan omaksi luokakseen, sisältäen : Koodin joka pystyttää testitilanteen Esim luo tarvittavat oliot, avaa tiedostot jne. @Before public void doallnecessarythings() Koodin joka ajaa testit ja todentaa tulokset @Test public void issavingfilesworking() Koodin joka purkaa testitilanteen : sulkee tiedostot... @After public void cleanup()

JUnit Perustesti (JUnit versio 4) Ota JUnit-kirjaston nimistö käyttöön importeilla Päätä luokkasi nimi sanaan Test (Webcat) Testimetodien eteen annotaatio @Test Testattavat asiat tarkistetaan assertnnn komennoilla import org.junit.before; import static org.junit.assert.assertequals; public class BasicTest { } @Test public void addzero() { MyInteger value = new MyInteger(123); MyInteger zero = new MyInteger(0); } MyInteger expectedresult = new MyInteger(123); MyInteger result = value.add(zero); assertequals(expectedresult, result);

JUnit Perustesti (JUnit versio 3) Ota JUnit-kirjaston nimistö käyttöön importilla Periytä luokkasi luokasta TestCase Testimetodien nimet alkavat aina test... Testattavat asiat tarkistetaan assertnnn komennoilla import junit.framework.*; public class BasicTest extends TestCase{ } public void testaddzero(){ MyInteger value = new MyInteger(123); MyInteger zero = new MyInteger(0); } MyInteger expectedresult = new MyInteger(123); MyInteger result = value.add(zero); assertequals(expectedresult, result);

@Test, @Before, @After @Test-annotaatiolla merkitään metodit jotka sisältävät testejä. JUnit suorittaa ne kaikki. Vaikkapa metodi joka kutsuu binäärisen hakupuun lisäysmetodia ja sitten hakee sen puusta contains-metodilla. Assert-metodilla vaaditaan että contains:in tulee palauttaa true. @Before-annotaatiolla merkitään metodit jotka suoritetaan ennen jokaista testiä. Kaikille testeille yhteisten muuttujien alustaminen, etteivät testit vaikuta toisiinsa jne... @After-annotaatiolla merkitään metodit jotka suoritetaan jokaisen testin jälkeen. Esim @Beforessa avattujen tiedostojen sulkeminen tms.

JUnit - Assert assertnnn-metodeilla jokin ehto jonka tulee olla totta. Jos ehto ei ole totta, testin kohta ei mene läpi. Assert-luokassa on paljon erilaisia assert-metodeja asserttrue(string message, boolean condition) Parametrin pitää olla true assertfalse(string message, boolean condition) Parametrin pitää olla false assertequals(string message, String a, String b) Parametrien pitää olla samat assertnull, assertnotnull jne.. käytännössä kaikki muut variaatiot voi kuitenkin rakentaa käyttämällä metodia asserttrue Koko lista löytyy API:sta http://junit.sourceforge.net/javadoc/junit/framework/assert.html

Junit ja Web-CAT...Kertaus on opintojen äiti... Web-CAT hyväksyy Minkä tahansa Junit3 testin Minkä tahansa Junit4 testin (luokan nimen pitää päättyä..test) Web-CAT suorittaa määrittelemäsi Junit-testit. Web-CAT laskee kuinka suuri osa testeistä läpäistään Web-CAT laskee testien rivi- tai lausekattavuuden Saadaksesi testin ja koodaamasi tehtävän palautettua Sinun pitää pakata kaikki koodit yhteen jar-ohjelmalla jar cvf paketinnimi.jar tiedosto.java toinen.java kolmas.java Tämän jälkeen palautat tekemäsi paketin

Esimerkkejä Junit-esimerkki Eclipsellä Koodataan luokka ja testataan se käyttäen JUnit:ia Esimerkin koodit ja ohjeet tulevat kurssin sivuille Palautetaan esimerkki Web-CAT:iin Katsotaan video..

Tulevia luentoja (alustava) 17.9 Rajapinnat, Generics, Design Patterns I Olioiden tyypeistä: Luokat, interfacet, geneeristen luokkien kirjoittaminen. Rajapinnat Java APIssa. Mikä on suunnittelumalli? Muutama suunnittelumalli. 24.9 Projektiohjeistusta Ohjeita projektin aihevalintaan ja suunnitelman kirjoitukseen. Projektin jakaminen hallittaviin ja testattaviin kokonaisuuksiin. Toteutusjärjestys. Tiedostoformaattien suunnitteluperiaatteita. 1.10. Design for re-use, Design Patterns II, kirjastot Ohjelmien rakentaminen tulevia muutoksia ajatellen, defensive programming, muunneltavuutta edistävät suunnittelumallit. Katsaus joihinkin Java API:n kirjastoihin ja ideoihin niiden suunnittelussa.

Tulevia luentoja (alustava) 8.10 Graafiset käyttöliittymät, Versionhallinta Tapahtumat ja tapahtumankäsittely, GUI:n perustoiminnallisuus, Grafiikan piirtäminen. Versionhallinta. 15.10 Rinnakkaisohjelmoinnin alkeet Javan rinnakkaisuusprimitiivit, Luokka Thread, Runnablerajapinta, Perus Producer-Consumer esimerkkitoteutus, blocking, potentiaaliset ongelmat kuten deadlock. Graafiset käyttöliittymät ja rinnakkaisuus 22.10 Vaihtelevia aiheita Esim. Ohjelmien profilointi ja profiilien tulkinta, asiaa koodin optimoinnista, Lisää kirjastoja, yleiskatsaus palautettuihin suunnitelmiin ja ohjeistusta projektiin.