Formaalit menetelmät ja testaus: Abstraktien tietotyyppien käyttö yksikkötestauksessa

Koko: px
Aloita esitys sivulta:

Download "Formaalit menetelmät ja testaus: Abstraktien tietotyyppien käyttö yksikkötestauksessa"

Transkriptio

1 Formaalit menetelmät ja testaus: Abstraktien tietotyyppien käyttö yksikkötestauksessa Tommi Kärkkäinen JYVÄSKYLÄN YLIOPISTO Informaatioteknologian tiedekunta Tietotekniikan laitos syksy 2006

2 Yleistä formaaleista menetelmistä Tässä luvussa esitellään formaaleihin menetelmiin liittyviä yleisiä asioita (lähinnä) lähteen [NASA] NASA RELEASE NOTES, Formal Methods Specification and Verification Guidebook for Software and Computer Systems; Volume I: Planning and Technology Insertion, NASA, Washington,! " #$% &" '()* +," -" 1998 pohjalta Käyttötarkoitukset Formaalien menetelmien käyttötarkoitus ohjelmistosuunnittelussa on pääasiassa ohjelmien vaatimusmäärittelyn toteuttaminen mahdollisimman selkeällä ja yksikäsitteisellä tavalla Tähän voi myös liittyä ohjelman toiminnan oikeellisuuden verifiointi eli varmistaminen joko teoreettisesti ja/tai kokeellisesti usein olemassaolevien työkalujen avulla Ohjelmistosuunnittelussa formaali lähestyminen on erityisen tärkeää rakenteeltaan monimutkaisia ja turvallisuuskriittisiä (ydinvoimaloiden ohjausjärjestelmät, sairaalavimpaimet, yms) järjestelmiä kehitettäessä Formaalin ohjelmankehityksen yhtenä ääritapauksena voidaan pitää ns Dijkstralaista koulukuntaa, jonka mukaan ohjelmalle annetut vaatimukset mallinnetaan matemaattisesti käyttäen jotain aksiomaattista menetelmää ja ohjelman toiminta todistetaan oikeaksi ennenkuin tehdään ensimmäistäkään riviä koodia! Etuja Formaali ajatusmalli Ohjelman toiminta kuvataan täsmällisesti ennen implementointia voi vain auttaa tulemaan paremmaksi ohjelmistokehittäjäksi tai testaajaksi! (vaikka et sitä pilkulleen noudattaisikaan) Käytettäessä formaaleja menetelmiä spesifikaatio pyritään tekemään täsmällisesti ja yksikäsitteisesti jo ohjelmiston elinkaaren alkupuolella, analyysi-/suunnitteluvaiheessa Siksi määrittelyn sisältämiä epätäsmällisyyksiä ja varsinaisia virheitä voidaan havaita jo elinkaaren tässä vaiheessa - toisin kuin käytettäessä epätäsmällisempiä menetelmiä Lisäksi on olemassa paljon esimerkkejä tapauksista, joissa formaalien menetelmien käyttö on paljastanut jo toiminnassa olevista ohjelmistoista virheitä, joita ei ole huomattu kehitys- ja testausvaiheissa Kun ohjelma tila ja sen muutokset on määritelty tarkasti, voidaan ohjelman toimintaa käydä läpi eli simuloida ja (esim tilastollisesti) testata täsmällisesti Simuloinnissa 2

3 etsitään erityisesti tilanteita, joissa jokin ohjelmalle etukäteen määrätty rajoite ei ole voimassa eli ohjelma toimii väärin Parhaassa tapauksessa voidaan jopa todistaa matemaattisesti, että ohjelma toimii eli tekee sen, mitä vaatimusmäärittely edellyttää Formaalien menetelmien avulla voidaan löytää määrittelyssä esiintyviä ristiriitoja varmemmin ja enemmän Lisäksi joissain tapauksissa voidaan taata (osoittaa), että ohjelma ei käyttäydy (tosin, NASA:ssa näitä tekniikoita sovelletaan ja avaruusteleskoopit ja -sukkulat senkun reistailevat ja avaruusluotaimet hukkuvat viimeistään määränpäässään ;-) Formaali mallitus Ohjelmistojen formaalilla mallituksella tarkoitetaan prosessia, jossa systeemin ei-matemaattinen, sanallinen tai vaikkapa tietorakenteiden ja objektien muutoksia kuvaava diagrammiesitys muunnetaan matemaattiseksi esitykseksi Formaaliin mallitukseen liittyviä perustermejä ovat mm Formaali määritys: ohjelmiston ominaisuuksien ja toiminnan kuvaaminen epätäsmällisten ilmauksien sijasta matemaattisten rakenteiden avulla mahdollisimman abstraktilla tasolla Formaali todistus: matemaattinen, usein työkaluavusteisesti kehitetty todistus sille, että ohjelma toimii vaatimusten määräämällä tavalla Abstrahointi: ohjelmiston toiminnan kuvaaminen mahdollisimman yleisellä tasolla, jossa tarkemmat yksityiskohdat määritetään vasta kehitysprosessin myöhemmässä vaiheessa Vaatimusten animointi (emulointi, simulointi): Formaalia määritysprosessia tuetaan usein ohjelmankehitystyökaluilla, joiden avulla määritys muutetaan toimivaksi ohjelmaksi ja järjestelmän toimintaa jäljitellään tämän avulla Tällaisiin malleihin on suoraviivaista lisätä ohjelman tilaa ja sen muutoksia kuvaavia testitapauksia, joita voidaan käyttää esim (osana) regressiotestauksessa Formaali mallitus voi muodostua esimerkiksi seuraavien askeleiden kautta: Formaali määritys Tyyppien tarkistus: Ohjelman sisältämille muuttujille valittujen tyyppien oikeellisuuden varmistaminen (tyypit ja niiden muunnokset (tai näiden puuttuminen) ovat tyypilliä virhelähteitä heikosti tyypitetyille kielille) Ominaisuuksien määritys: Systeemin halutun toiminnan identifiointi ja (formaali) määrittely (ominaisuuksien ja toiminnan testaus) Loogisten ehtojen todistus: Systeemin haluttua toimintaa kuvaavien loogisten lausekkeiden todistaminen oikeaksi (ja varmennus testaamalla)

4 Formaalit menetelmät projektin osana Kun formaaleja menetelmiä on tarkoitus soveltaa jossakin ohjelmistoprojektissa, täytyy ottaa huomioon ainakin seuraavia asioita: Henkilökunta: Formaalien menetelmien yleistymisen suurin este on koulutetun henkilökunnan puute Koska menetelmien soveltaminen vaati aikalailla matemaattisia pohjia, on erityisesti jo alalle työskentelevien henkilöiden kouluttaminen aikaavievä projekti, joka yrityksissä usein jätetään tuottavuussyistä tekemättä ja ummistetaan raakasti silmät koko asialta Ei meillä ole ennenkään tuollaista tarvittu Prosessin integrointi: Olemassaolevian määrittelytapojen muuttaminen formaaliin suuntaan vaatii toisaalta hyvän yleisnäkemyksen alasta sekä myös tietoa menetelmien hyödyistä/rajoitteista, jotta ohjelmistoprosessia voidaan muokata hallitusti vanhoja tapoja uudistamalla ja parantamalla Projektin suunnittelu: Ne ohjelmistoprojektin osat, joissa formaalien menetelmien soveltamisesta saadaan paras mahdollinen hyöty, pitää pystyä tunnistamaan (elinkaaren mahdollisimman aikaisessa vaiheessa) Ohjelmistotyyppi: Useissa tapauksissa jokin muu, jo olemassaoleva tapa toteuttaa ohjelmistoprojekteja toimii tarpeeksi hyvin ilman sen kummempia muutoksia Erityisesti laajojen ohjelmistoprojektien täydellinen formalisointi voi tukehduttaa koko projektin tai ainakin viedä liikaa (työnantajalle) kallista aikaa Usein tyydytäänkin ratkaisuun, jossa tarvittaessa ohjelmiston kriittisimmät osaratkaisut esitetään formaalisti Lisäksi erityyppisten systeemien rakentamiseen soveltuvat luonnollisesti erilaiset työkalut, joten yhteen ratkaisuun kiinnittyminen voi pitkässä juoksussa tuoda hankaluuksia Formaalien menetelmien haittoja Listataanpas vielä osittain jo aikaisemmin mainittuja tekijöitä, jotka monesti estävät formaalien menetelmien soveltamisen: hankalia käyttää, vaativat liian paljon pohjatietoja liian vähän hyviä ja toisaalta liian paljon erilaisia työkaluja, joiden kaikkien hallitseminen liian työlästä yhdelle ihmiselle/projektiryhmälle/yritykselle ilman CASE-työkaluja osa tehosta menetetään sovelletaan, mutta esitietojen hallitsemattomuuden vuoksi väärin formaali spesifikaatio pitää erikseen suomentaa asiakkaalle (mutta niiden hyödyntäminen testauksessa tarjoaa mielenkiintoisia mahdollisuuksia, kts kuva 1) niin laaja alue, että niihin liittyen on mahdotonta (onko mikään?) muodostaa selkeää luentokokonaisuutta ;-)

5 ! (laatu) Testi(tapaus)! (täsmällisyys) Asiakas? Formaali Speksi Kuva 1: Formaalin spesifikaation rooli testauksessa Formaalien menetelmien sovelluskohteita Lopuksi listataan jo osittain aikaisemmin mainittuja formaalien menetelmien pääasiallisia sovelluskohteita: turvallisuuskriittiset järjestelmät: ydinvoimaloiden prosessinohjaus, lentokoneen ohjaus, sairaalalaitteistot, hankalasti korjattavat järjestelmät: avaruusluotaimet, piilastut, puhelinverkon protokollat, (virheiden korjaus joko mahdotonta tai älyttömän kallista, virheet nakertavat organisaation imagoa ja tiputtavat/romahduttavat pörssiarvon) reaktiiviset järjestelmät: monen käyttäjän järjestelmät, tietoliikenne, (rinnakkaisuuden hallinta ihmiselle vaikeaa, sopivasti ilmaistuna koneelle helppoa) 7+7 myyttiä ja 10 käskyä Formaaleista menetelmistä on 1960-luvulta lähtien käyty osin kiihkeätäkin keskustelua ohjelmistotekniikan piirissä Tämä keskustelu on suuresti vaikuttunut artikkeleista [Hal90] A HALL, Seven Myths of Formal Methods, IEEE Software, vol 7(5), pp 11 20, 1990, [BH95] J P BOWEN AND M G HINCHEY, Seven More Myths of Formal Methods, IEEE Software, vol 12(4), pp 34 41, 1995, joihin on koottu yhteensä 7+7 formaaleihin menetelmiin liitettyä "myyttiä"eli uskomusta eli syytä sille, miksi menetelmiä ei pidä ottaa vakavasti: 1 Formaalit menetelmät takaavat, että ohjelmisto on täydellinen 2 Formaalit menetelmät liittyvät pelkästään ohjelman oikeaksi todistamiseen 3 Formaalit menetelmät ovat tarpeellisia vain turvallisuuskriittisissä järjestelmissä 4 Formaalit menetelmät vaativat korkeasti koulutettuja matemaatikkoja soveltajikseen 5 Formaalit menetelmät kasvattavat kehityskustannuksia 6 Formaalit menetelmät eivät sovi asiakkaille

6 7 Formaaleja menetelmiä ei käytetä oikeiden, laajojen ohjelmistojen suunnittelussa 8 Formaalien menetelmien käyttö hidastaa ohjelmistoprosessin läpimenoaikaa 9 Formaalien menetelmien tueksi ei ole olemassa työkaluja 10 Formaalit menetelmät korvaavat perinteiset suunnittelumenetelmät 11 Formaalit menetelmät soveltuvat vain ohjelmistosuunnitteluun 12 Formaaleja menetelmiä ei tarvita 13 Formaaleja menetelmiä ei tueta 14 Formaalien menetelmien soveltajat käyttävät aina formaaleja menetelmiä Jälkimmäistä artikkelia seuranneessa julkaisussa [BH95b] J P BOWEN AND M G HINCHEY, Ten Commandments of Formal Methods, IEEE Computer, vol 28(4), pp 56 63, 1995, muotoiltiin sitten kymmenen formaaleihin menetelmiin liittyvää käskyä raamatullisessa hengessä ("Thou shalt"; käännös poikkeaa alkuperäisestä esityksestä (suom huom)): Käytä soveltuvaa notaatiota: Jokainen spesifiointimenetelmä on tarkoitettu tietyntyyppisten käsitteiden esittämiseen, ja luonnollisen sovellusalueensa ulkopuolella esityksistä tulee yleensä kohtuuttoman monimutkaisia ja hankalasti ymmärrettäviä Tyypillisenä esimerkkinä mainittakoon taas mallipohjaiset Z ja VDM sekä rinnakkaisuuden esittämisen vaikeus Muistetaan myös, että jonkun oudon notaatioläjän syntaksin ja semantiikan opettelu tarkasti on vaativa prosessi - erityisesti eri roolien (kehittäjä, asiakas, manageri) näkökulmasta Formalisoi, mutta älä yliformalisoi: Tosiasia on, että todella laajojen järjestelmien täydellinen formaali mallittaminen ja määrittäminen ei ole vielä nykypäivänä mahdollista tai edes tarpeellista Formaalit menetelmät liittyvät intiimisti järjestelmän toiminnallisuuteen, joten esim käyttöliittymän visuaalisen olemuksen kuvaamiseen ja testaamiseen kannattaa käyttää muita, käyttäjälähtöisempiä menetelmiä Siis (jos osaa) kannattaa soveltaa, mutta vain tarvittaessa Arvioi kulut: Tarvittavan osaamispääoman luominen yritykseen vaatii yleensä henkilöstön lisäkoulutusta, jonka kulut on pystyttävä kattamaan Lisäksi formaalejakin menetelmiä soveltavan asiakasprojektin kulut on pystyttävä arvioimaan etukäteen, ja tämä vaatii tietoa jo toteutuneista projekteista Tämmöistä tietoa on kuitenkin edelleenkin hyvin rajoitetusti saatavilla, joten kulujen arviointiin liittyvää kokemusta on vähän Hanki guru: Yhteistä onnistuneille formaaleja menetelmiä soveltaneille projekteille on ollut projektihenkilökunnan mahdollisuus korkealaatuiseen ammatilliseen ohjaukseen todellisen asiantuntijan toimesta Älä hylkää perinteisiä menetelmiä: Integroi (Tästä on puhuttu ja kirjoitettu jo tarpeeksi montaa kertaa tähän mennessä!) Dokumentoi riittävästi: Formaalit määritykset tulee täydentää dokumentoinnissa esitysmuodoilla, joita kaikki eri osapuolet ymmärtävät

7 Säilytä laatustandardit: Formaalit menetelmät eivät (yleensä, välttämättä) takaa ohjelman oikeellisuutta, joten muita laadun varmistusmenetelmiä (testaukset, katselmukset jne) ei pidä unohtaa tai poistaa käytöstä Älä ole dogmaattinen: Formaalit(kaan) menetelmät eivät ole ohjelmistokehityksen "hopealuoti" Esimerkiksi prosessia, jossa epäformaalit vaatimukset muutetaan formaaleiksi, ei voi itseään todistaa oikeaksi, joten ohjelmistoprosessin validoimiseksi tarvitaan muitakin menetelmiä (kts edellinen kohta) Lisäksi formaaleja menetelmiä tukevien työkalujen luotettavuutta on mahdoton todistaa Testaa, testaa, testaa: Ihmisten suunnittelemista, määrittelemistä ja toteuttamista ohjelmista löytyy aina bugeja ja virheitä, joten formaalit(kaan) spesifikaatiot eivät koskaan korvaa kattavan testauksen tarpeellisuutta Uudelleenkäytä: Formaali spesifikaatio perustuu korkeaan abstraktiotasoon ja täsmälliseen määritykseen, jonka vuoksi kerran kunnolla tehtynä se tarjoaa hyvät uudelleenkäyttömahdollisuudet sekä projektin sisällä että muissa projekteissa

8 Abstraktit tietotyypit ja yksikkötestaus Kappale pohjautuu (pääosin) lähteeseen [Vliet] H VAN VLIET, Software Engineering: Principles and Practice (2nd edition), John Wiley & Sons, New York, 2000 Tässä yhteydessä yksityiskohdat (erityisesti terminologia) ei ole merkityksellisessä roolissa, sillä päätarkoituksena on antaa konkreettinen tuntuma täsmällisten spesifikaatioiden olemuksesta ja käytöstä yksikkötestauksen suunnittelun apuna IEEE Standard Glossary of Software Engineering Terminology:n (1990) mukaan testitapaus (test case) määritellään (jotakuinkin) seuraavasti: Testitapaus muodostuu joukosta testisyötteitä, suoritusehtoja ja tavoiteltavia tuloksia, joiden avulla voidaan esim tarkastaa, toimiiko ohjelma tiettyjen määritysten mukaisesti Mistä nämä testitapaukset tulevat ja miten ne saadaan muotoiluiltaan sellaisiksi, että ei testata lillukanvarsia (Int: 1+1 <> 3, i+2 = 3)? Abstrakti tietotyyppi (abstract data type, ADT) on rakenteensa ja operaatioidensa suhteen täsmällisesti kuvattu ohjelmistokomponentti, joka on käytännössä hyvin läheistä sukua abstraktille luokalle (terminologian outouden ja ehkäpä hieman ristiriitaisuudenkin selittää se, että tässä esitettävät kuvaukset olivat käytössä jo ennen kuin olioparadigman valtakausi alkoi; itse asiassa ADT:t ovat vahvasti koko paradigman taustalla) Kappaletta läpikäydessä kannattaakin esitettyjä asioita koko ajan verrata luokkaan, sen rakenteeseen, rakenteen määrittämiseen ja luokan (rajapinnan) yksikkötestaukseen! ADT koostuu joukosta arvoja, "sortteja"(engl sort; ei taaskaan löydy hyvää suomennosta, mutta käytännössä nämä voidaan samaistaa luokan atribuutteihin), sekä joukosta operaatioita, joita voidaan kohdistaa "sortteihin"(metodit; vrt saantimetodit, tiedon piilotus, ei suoraa yhteyttä luokan atribuutteihin) Tyypillisiä esimerkkejä ADT:iden avulla määriteltävissä olevista tietorakenteista ovat vaikkapa: pino esim operaatioilla Create, Top, Pop, Push binääripuu esim operaatioilla Create, Insert, IsIn hierarkkinen taulukko esim operaatioilla Create, IncrLevel, DecrLevel, Add, IsIn, Retrieve Geneeriseksi rakenteet tekee se, että alkioiden tyyppiä muuttamalla sama toiminnallisuus voidaan kohdistaa esim int, float, string yms eri pinoille, puille ja taulukoille Lisäksi ADT:iden määrityksissä ei oteta mitään kantaa siihen, millä ohjelmointikielellä rakenne todellisuudessa implementoidaan, kunhan implementointi tarjoaa määritetyt operaatiot sitä 8

9 käyttävässä ohjelmassa valitulle tyypille Tämä on hyödyllistä esim koodigeneraattoreita ja korkeamman tason ohjelmointiympäristöjä rakennettaessa ADT:n määrityksessä ilmoitetaan sekä operaatioiden syntaksi (muoto) että niiden semantiikka (tulkinta) Mallipohjaisissa formaaleissa määrityksissä semantiikka kerrotaan eksplisiittisesti, mutta algebrallisessa spesifikaatiossa semantiikka esitetään implisiittisesti sitomalla määriteltyjen operaatioiden toiminta toisiinsa sopivien sääntöjen, aksioomien, avulla Otetaan esimerkiksi kokonaislukupinon algebrallinen määritys: type IntStack; functions Create : IntStack Push : IntStack Int IntStack Pop : IntStack IntStack Top : IntStack Int IsEmpty : IntStack Boolean axioms IsEmpty(Create) True IsEmpty(Push(s i)) False Pop(Create) Create Pop(Push(s i)) s Top(Create) 0 Top(Push(s i)) i end IntStack; Ja sitten muutamia huomioita ja kommentteja määrityksen suhteen: Pinon määrityksessä oletetaan, että ADT:t Boolean ja Int ovat jo valmiiksi määriteltyjä ja True ja False ovat Boolean-tyyppisiä vakioita Etsi-ja-korvaamalla pinon tyypin ilmaiseva Int yleiseen muotoon ( T ) tekee rakenteesta tyyppiriippumattoman Operaatioiden määritelmissä vastaa input-parametrilistan pilkkua ja :n jälkeen annetaan output:n tyyppi Pinon aksioomilla, joista jokainen on identiteetti, on seuraavat tulkinnat: 1 Create luo (alustaa) tyhjän pinon 2 pinoon lisääminen (Push) tekee pinosta välttämättä epätyhjän 3 tyhjästä nyhjääminen antaa edelleen tyhjän 4 pinoon lisääminen ja poistaminen antaa alkuperäisen pinon 5 Top täytyy määritellä erikseen tyhjälle pinolle (vrt ekvivalenssiluokat ja niiden rajat) palauttamaan jonkun oikeaa tyyppiä olevan arvon, vaikkapa nollan (tämä ei luonnollisesti riitä määrittämään tyhjää pinoa, koska luku "0"voi olla pinossa muutenkin) 6 pinoon lisäämisen jälkeen sen päällimmäisenä on lisätty luku Kaikkia operaatioita (katso erityisesti Create) on kuvattu niillä olevien ominaisuuksien ("mitä"), ei implementoinnin ("miten") kannalta (vrt mihin testauksella pyritään )

10 Annettu spesifikaatio vastaa hyvin konkreettista implementaatiota, jossa tyyppi IntStack vastaa kokonaislukuosoitinta ja esim Create palauttaa tyhjän osoittimen (siis lista) Toisaalta, aivan yhtä hyvin pino voidaan realisoida samaistamalla IntStack kokonaislukuvektorin kanssa (siis taulukko) Tällöin on luonnollista liittää ADT:hen mukaan tieto pinon koosta ja maksimikoosta, ja käyttää kokomuuttujaa esim tyhjän pinon indikaattorina Kuten jo aikaisemmin mainittiin, ADT:n alkuosa type- ja functions-klausien (avainsanojen) alaisuudessa vastaa suunnilleen normaalin luokan määrittelyä Tästä näkökulmasta aksioomissa esitettyjen ehtojen avulla voidaan luokan toteutusta yksikkötestata Erilaisten aksioomien tunnistaminen ja muodostaminen antaa näin ollen hyvät eväät myös yksikkötestauksen suunnitteluun ja toteutukseen (ilman, että termiä "formaali"tarvitsee edes mainita - ainakaan pomolle ;-) Laajoissa määrityskirjastoissa modulaarista rakennetta voidaan tukea esim seuraavasti: type Stack[Item]; imports True, False from Boolean, = from Item; exports Create, Push, Pop, Top, IsEmpty; Tämä määrittää ADT:n rajapinnan muihin ADT:ihin nähden (vrt esim Javan Interface) Huomaa, että imports- ja exports-listojen kautta kontrolloidaan operaatioita (lue: metodeja), joita toiset ADT:t käyttävät (vrt koostaminen ja yhden ADT:n sisältämien metodien näkyvyyden määrittäminen) Pinon algebrallinen spesifikaatio on loppujen lopuksi kohtuullisen suoraviivaista luettavaa, mutta laajojen tämänmuotoisten tyypinmäärityskirjastojen oikeellisuuden, kattavuuden ja ristiriidattomuuden tutkiminen on melkoisen matemaattista puuhastelua Tämän johdosta tarkastellaan myös jatkossa yksinkertaisiin esimerkkeihin liittyviä asioita Alla onkin annettu luonnollisten lukujen algebrallinen määritys (tämän esittäminen näissä yhteyksissä on lähes de facto -standardi, joka sitten kuitenkin johti lillukanvarsiin ;-): 1 type Nat; 2 functions 3 Null : Nat 4 Succ : Nat Nat 5 Add : Nat Nat Nat 6 axioms 7 Add(i Null) i 8 Add(i Succ(j)) Succ(Add(i j)) 9 end Nat; Ja sitten taas kommentteja määrityksen suhteen, johon rivinumerot on lisätty pelkästään selvyyden vuoksi: Määrityksen perustulkinta on selvä: Null on nolla-alkio, Succ viittaa annettua luonnollista lukua seuraavaan lukuun (Succ(1) 2 Succ(2) 3 jne) ja Add on luonnollisten lukujen yhteenlaskuoperaatio Määritys jakaantuu luonnollisesti kahteen osaan:

11 signature-osassa (allekirjoitus) riveillä 1-5 luetellaan "sortit"(näitä voi olla useampiakin type-avainsanan jälkeen) sekä näihin kohdistuvat funktiot tyyppeineen (Null on tyyppiä Nat oleva vakio, funktio Succ ottaa inputiksi ja myös palauttaa tyyppiä Nat olevan alkion, Add kohdistuu kahteen tyyppiä Nat olevaan alkioon ja palauttaa yhden samantyyppisen elementin) Esitysjärjestys määräytyy yleensä lähtöjoukon laajuuden mukaan equation-osassa (identiteetit) riveillä 6-8 listataan allekirjoituksessa esitettyjä vakioita ja funktioita sitovat ja yhdistävät päättelysäännöt, joiden täytyy olla voimassa tyypin varsinaisessa implementaatiossa Annetuissa esimerkeissä on rajoituttu pelkästään identiteetteihin, mutta yleensä aksioomissa voidaan käyttää myös epäyhtälöitä ja ehto-lauseita Allekirjoitus voidaan nähdä kontekstittomana (määrittely-ympäristöstään riippumattomana) kielioppina lausekkeille, jotka sen avulla määritellään Esimerkiksi luonnollisten lukujen määrittely sallii syntaksia Null Succ(Succ(Add(Succ(Null) Succ(Null)))) Add(Succ(Null) Succ(Succ(Null))) i Add(Succ(i) j) olevien lausekkeiden esittämisen Näistä kolmen ensimmäisen sanotaan olevan suljettuja (closed), koske ne sisältävät pelkästään vakioita (Null) ja funktioita Muuttujia i ja j sisältävien kahden viimeisen lausekkeen sanotaan olevan avoimia (Pilkuntarkasti: syntaksin oikeellisuuden tarkistamiseksi meidän tulisi tietää myös, mitkä ovat avoimissa lausekkeissa käytettäville muuttujille sallitut merkinnät) Täsmällisesti ilmaistuna allekirjoitus annetulle tyypille T määrittelee sallittujen lausekkeiden joukon seuraavien sääntöjen mukaan: 1 Tyyppiä T olevat vakiot ja muuttujat ovat tyypin peruslausekkeita 2 Jos l 1 l n ovat tyyppiä t 1 t n olevia lausekkeita ja f on funktio tyyppiä t 1 t n olevian muuttujien joukosta tyyppiä T olevien muuttujien joukkoon, niin f (l 1 l n ) on tyyppiä T oleva lauseke Tämä tekee algebrallisesta spesifikaatiosta täysin formaalin systeemin, jonka muutokset perustuvat identiteetti-osassa annettujen päättelysääntöjen käyttämiseen uusien lausekkeiden muodostamiseksi "Sortin"Nat määritelmän perusteella esimerkiksi seuraavanlainen päättelyketju on täysin sallittu (ja todistaa aukottomasti, että 1+2=3 on validi testitapaus ;-): Add(Succ(Null) Succ(Succ(Null))) (sääntö rivillä 8) Succ(Add(Succ(Null) Succ(Null))) (sääntö rivillä 8) Succ(Succ(Add(Succ(Null) Null))) (sääntö rivillä 7) Succ(Succ(Succ(Null)))

12 Kuinka rakentaa algebrallinen ADT? ADT:n määräämisen suurin hankaluus on jo edeltä käynyt selväksi: kuinka löytää rakenteelle sopiva tulkinta eli sopiva semantiikka eli sopiva joukko rakennetta sitovia päättelysääntöjä? (Vertaapa tätä kattavan mutta minimimääräisen testitapausten joukon muodostamisen vaikeuteen) Käydään seuraavassa läpi jotain yleisiä suuntaviivoja tutunoloisen esimerkin valossa type IntStack; functions Create : IntStack Push : IntStack Int IntStack Pop : IntStack IntStack Top : IntStack Int Size : IntStack Int IsEmpty : IntStack Boolean Tässä uusi muuttuja Size kertoo pinon kyseisellä hetkellä sisältämien kokonaislukujen määrän eli pinon koon Annetut funktiot voidaan jakaa 2*2 = neljään eri luokkaan: 1 Konstruktorit (constructors): Funktiot, joiden arvojoukkona (f : X Y :lle X on lähtö- eli määrittelyjoukko ja Y on tulo- eli arvojoukko) on määriteltävänä oleva tyyppi, esimerkissä IntStack 11 Peruskonstruktorien avulla muodostetaan kaikki ADT:n määrittämät tietorakenteet Esimerkissä peruskonstruktoreja ovat Create ja Push, joiden avulla voidaan rakentaa mikä tahansa pino puhtaalta pöydältä 12 Ylimääräisten konstruktorien avulla voidaan muuttaa määritettävää rakennetta; esimerkissä Pop 2 Havainnoijat (observers): Funktioita, jotka kohdistuvat johonkin muuhun tyyppiin kuin määriteltävään rakenteeseen 21 Perushavainnoijat ovat primitiivisiä rakenteen "tutkijoita", joita ei voida ilmaista muiden havainnoijien avulla Esimerkissä Top ja Size ovat perushavainnoijia, sillä IsEmpty(s) on ekvivalentti (= tarkoittaa samaa eli sillä on sama tulkinta) Size(x) 0 :n kanssa 22 Ylimääräiset havainnoijat ovat havainnoijia, jotka eivät ole perushavainnoijia; esimerkissä siis IsEmpty Jotta algebrallisesti määritellyllä ADT:llä olisi halutut ominaisuudet, täytyy spesifikaation olla tarpeeksi kattava Esitetään lopuksi heuristiikka, joka (yleensä) johtaa tarpeeksi kattavaan joukkoon funktioita ja niitä sitovia aksioomia: 1 Määritä peruskonstruktorit; esimerkissä Create ja Push 2 Määritä ylimääräiset konstruktorit, jotka siis käytännössä "vähentävät"rakennetta - Pop Lisää jokaiselle ylimääräiselle konstruktorille sen kaikkiin peruskonstruktoreihin liittämä, muotoa Pop(Create)

13 ja Pop(Push(s i)) oleva aksiooma Identiteettien oikea puoli täytyy itse osata kehittää semanttisesti järkeväksi Tarkasti tämä vaatii aksiooman todistamisen oikeaksi jo muodostettujen aksioomien suhteen edellä luonnollisille luvuille esitetyn päättelyketjun mukaisesti, mutta meille riittää hakea täsmällisessä esitysmuodossa vastaukset kysymyksiin Pop(Create) "Mitä tapahtuu, kun tyhjästä pinosta yritetään napata alkio ja muistetaan, että operaation tuloksen tyypin pitää myös olla pino?" ja Pop(Push(s i)) "Mitä tapahtuu, kun pinoon lisätään ja poistetaan alkio?" 3 Myös jokaiseen perushavainnoijaan liitetään aksioomat, jotka liittävät ne peruskonstruktoreihin: Top(Create) Top(Push(s i)) Size(Create) Size(Push(s i)) "Mikä alkio saadaan nyhjäistyä tyhjän pinon päältä?" "Mikä alkio löytyy pinon päältä, kun sinne on lisätty alkio i?" "Minkä kokoinen on tyhjä pino?" "Mitä tapahtuu pinon koolle, kun sinne lisätään alkio i?" 4 Lopuksi jokainen ylimääräinen havainnoija liitetään sopivan aksiooman avulla perushavainnoijiin: IsEmpty(s) "Mikä ehto pinon koon suhteen kuvaa tyhjää pinoa?" Näin muodostetun aksioomajärjestelmän "riittävyys"on siis vaikea kysymys (Gödel) Yleensä on syytä tarkastella myös niitä tyyppiyhteensopivia tapauksia, joissa muodostettu aksiooma voidaan esittää myös käänteisessä järjestyksessä tyyliin Push(s Pop(s)), Push(s Top(s)) jne

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita! Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita! eli... Hyvä kaava sanoo enemmän kuin,... tuhat riviä koodia!... sata riviä tekstiä!... kymmenen diagrammia! YLEISTÄ FORMAALEISTA

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen

Lisätiedot

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus FORMAALI SYSTEEMI (in Nutshell): Formaali kieli: aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus esim. SSM:n tai EBNF:n avulla Semantiikka:

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin

Lisätiedot

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

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausdokumentti Kivireki Helsinki 17.12.2007 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Anu Kontio Ilmari

Lisätiedot

7/20: Paketti kasassa ensimmäistä kertaa

7/20: Paketti kasassa ensimmäistä kertaa Ohjelmointi 1 / syksy 2007 7/20: Paketti kasassa ensimmäistä kertaa Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007

Lisätiedot

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit Ohjelmiston testaus ja laatu Ohjelmistotekniikka elinkaarimallit Vesiputousmalli - 1 Esitutkimus Määrittely mikä on ongelma, onko valmista ratkaisua, kustannukset, reunaehdot millainen järjestelmä täyttää

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Tieto- ja tallennusrakenteet

Tieto- ja tallennusrakenteet Tieto- ja tallennusrakenteet Sisältö Tyyppi, abstrakti tietotyyppi, abstraktin tietotyypin toteutus Tallennusrakenteet Taulukko Linkitetty rakenne Abstraktit tietotyypit Lista (Puu) (Viimeisellä viikolla)

Lisätiedot

Algoritmit 1. Luento 3 Ti Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien

Lisätiedot

Todistusmenetelmiä Miksi pitää todistaa?

Todistusmenetelmiä Miksi pitää todistaa? Todistusmenetelmiä Miksi pitää todistaa? LUKUTEORIA JA TO- DISTAMINEN, MAA11 Todistus on looginen päättelyketju, jossa oletuksista, määritelmistä, aksioomeista sekä aiemmin todistetuista tuloksista lähtien

Lisätiedot

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo 15.2.2006 TURUN YLIOPISTO DEMO III Informaatioteknologian laitos tehtävät Olio-ohjelmoinnin perusteet / Salo 15.2.2006 1. Tässä tehtävässä tarkastellaan erääntyviä laskuja. Lasku muodostaa oman luokkansa. Laskussa

Lisätiedot

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen, mallintaminen ja UML 582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti

Lisä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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Pino Pinon määritelmä Pinon sovelluksia Järjestyksen kääntäminen Palindromiprobleema Postfix-lausekkeen laskenta Infix-lausekkeen muunto postfix-lausekkeeksi Sisäkkäiset funktiokutsut

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

UML-kielen formalisointi Object-Z:lla

UML-kielen formalisointi Object-Z:lla UML-kielen formalisointi Object-Z:lla Kalvot ja seminaarityö WWW:ssä: http://users.jyu.fi/~minurmin/opiskelu/form/ UML UML == Unified Modelling Language. OMG:n standardoima kieli ohjelmistojärjestelmien,

Lisätiedot

Algoritmit 1. Luento 4 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,

Lisätiedot

18. Abstraktit tietotyypit 18.1

18. Abstraktit tietotyypit 18.1 18. Abstraktit tietotyypit 18.1 Sisällys Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

Lisätiedot

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

Lisätiedot

Tietorakenteet ja algoritmit - syksy 2015 1

Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisä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

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen

List-luokan soveltamista. Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen 1 List-luokan soveltamista List-luokan metodeja Listaan lisääminen Listan läpikäynti Listasta etsiminen Listan sisällön muuttaminen Listasta poistaminen Listan kopioiminen 1 List-luokan metodeja List-luokan

Lisätiedot

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Copyright by Haikala. Ohjelmistotuotannon osa-alueet Copyright by Haikala Ohjelmistotuotannon osa-alueet Ohjelmiston elinkaari 1. Esitutkimus, tarvekartoitus, kokonaissuunnittelu, järjestelmäsuunnittelu (feasibility study, requirement study, preliminary

Lisätiedot

Testaaminen ohjelmiston kehitysprosessin aikana

Testaaminen ohjelmiston kehitysprosessin aikana Testaaminen ohjelmiston kehitysprosessin aikana 04.02.2004 http://cs.joensuu.fi/tsoft/ Sisällys 1. Johdanto 2. Yksikkö- ja integrointitestaus 3. Järjestelmätestaus 4. Hyväksymistestaus http://cs.joensuu.fi/tsoft/

Lisätiedot

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

Johdanto II. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos. TIE303 Formaalit menetelmät, kevät 2005 Johdanto II Antti-Juhani Kaijanaho antkaij@mit.jyu.fi Jyväskylän yliopisto Tietotekniikan laitos TIE303 Formaalit mentetelmät, 2005-01-20 p. 1/21 Luento2Luentomoniste

Lisätiedot

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit: Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) Push(alkio)

Lisätiedot

Rekursiiviset tyypit

Rekursiiviset tyypit Rekursiiviset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 20. helmikuuta 2007 Hiloista Kiintopisteet (Ko)rekursio Rekursiiviset

Lisätiedot

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

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes) Kääreluokista Javan alkeistietotyypit ja vastaavat kääreluokat Autoboxing Integer-luokka Double-luokka Kääreluokista Alkeistietotyyppiset muuttujat (esimerkiksi

Lisätiedot

Matematiikan tukikurssi, kurssikerta 1

Matematiikan tukikurssi, kurssikerta 1 Matematiikan tukikurssi, kurssikerta 1 1 Joukko-oppia Matematiikassa joukko on mikä tahansa kokoelma objekteja. Esimerkiksi joukkoa A, jonka jäseniä ovat numerot 1, 2 ja 5 merkitään A = {1, 2, 5}. Joukon

Lisätiedot

Käyttötapausanalyysi ja testaus tsoft

Käyttötapausanalyysi ja testaus tsoft Käyttötapausanalyysi ja testaus tsoft 15.09.2004 http://cs.joensuu.fi/tsoft/ Johdanto Use Case analyysi (käyttötapausanalyysi) on yleisesti käytetty järjestelmälle asetettujen toiminnallisten vaatimusten

Lisätiedot

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

Verifioinnin ja validoinnin ero. 7. Verifiointi ja validointi. Verifiointi- ja validointitekniikat. Verifiointi- ja validointitekniikat II 7. Verifiointi ja validointi Verifiointi ja validointi (V&V) on ohjelmistotuotannon työvaihe, missä varmistetaan, että ohjelmisto täyttää sille asetetut implisiittiset ja eksplisiittiset vaatimukset ja

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

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

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto Sisällys 18. bstraktit tietotyypit Johdanto abstrakteihin tietotyyppeihin. Pino ja jono. Linkitetty lista. Pino linkitetyllä listalla toteutettuna. 18.1 18.2 Johdanto Javan omat tietotyypit ovat jo tuttuja:

Lisätiedot

Johdatus rakenteisiin dokumentteihin

Johdatus rakenteisiin dokumentteihin -RKGDWXVUDNHQWHLVLLQGRNXPHQWWHLKLQ 5DNHQWHLQHQGRNXPHQWWL= rakenteellinen dokumentti dokumentti, jossa erotetaan toisistaan dokumentin 1)VLVlOW, 2) UDNHQQHja 3) XONRDVX(tai esitystapa) jotakin systemaattista

Lisätiedot

UCOT-Sovellusprojekti. Testausraportti

UCOT-Sovellusprojekti. Testausraportti UCOT-Sovellusprojekti Testausraportti Ilari Liukko Tuomo Pieniluoma Vesa Pikki Panu Suominen Versio: 0.02 Julkinen 11. lokakuuta 2006 Jyväskylän yliopisto Tietotekniikan laitos Jyväskylä Hyväksyjä Päivämäärä

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

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

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Abstraktit tietotyypit. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Abstraktit tietotyypit TIEA341 Funktio ohjelmointi 1 Syksy 2005 Data abstraktio Abstraktio on ohjelmoinnin tärkein väline Data abstraktio abstrahoi dataa Abstrakti tietotyyppi Koostuu kolmesta asiasta:

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

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

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton 2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et.

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:

Lisätiedot

Suunnitteluvaihe prosessissa

Suunnitteluvaihe prosessissa Suunnittelu Suunnitteluvaihe prosessissa Silta analyysin ja toteutuksen välillä (raja usein hämärä kumpaankin suuntaan) Asteittain tarkentuva Analyysi -Korkea abstraktiotaso -Sovellusläheiset käsitteet

Lisätiedot

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

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen Taulukot: Array Taulukko Javassa pitää aina perustaa (new) Yksinkertaisessa tilanteessa taulukon koko tiedetään etukäteen ja

Lisätiedot

TIETORAKENTEET JA ALGORITMIT

TIETORAKENTEET JA ALGORITMIT TIETORAKENTEET JA ALGORITMIT Timo Harju 1999-2004 1 typedef link List; /* Vaihtoehtoisia nimiä */ typedef link Stack; /* nodepointterille */ typedef link Queue typedef struct node Node; /* itse nodelle

Lisätiedot

Johdantoluento. Ohjelmien ylläpito

Johdantoluento. Ohjelmien ylläpito Johdantoluento Ylläpito-termin termin määrittely Ylläpito ohjelmistotuotannon vaiheena Evoluutio-termin määrittely Muita kurssin aiheeseen liittyviä termejä TTY Ohjelmistotekniikka 1 Ohjelmien ylläpito

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 4 Jatkuvuus Jatkuvan funktion määritelmä Tarkastellaan funktiota f x) jossakin tietyssä pisteessä x 0. Tämä funktio on tässä pisteessä joko jatkuva tai epäjatkuva. Jatkuvuuden

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

Luonnollisten lukujen ja kokonaislukujen määritteleminen

Luonnollisten lukujen ja kokonaislukujen määritteleminen Luonnollisten lukujen ja kokonaislukujen määritteleminen LuK-tutkielma Jussi Piippo Matemaattisten tieteiden yksikkö Oulun yliopisto Kevät 2017 Sisältö 1 Johdanto 2 2 Esitietoja 3 2.1 Joukko-opin perusaksioomat...................

Lisätiedot

Luku 3. Listankäsittelyä. 3.1 Listat

Luku 3. Listankäsittelyä. 3.1 Listat Luku 3 Listankäsittelyä Funktio-ohjelmoinnin tärkein yksittäinen tietorakenne on lista. Listankäsittely on paitsi käytännöllisesti oleellinen aihe, se myös valaisee funktio-ohjelmoinnin ideaa. 3.1 Listat

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

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

SEPA diary. Dokumentti: SEPA_diary_PK_HS.doc Päiväys: Projekti: AgileElephant Versio: V0.3 AgilElephant SEPA Diary Petri Kalsi 55347A Heikki Salminen 51137K Tekijä: Petri Kalsi Omistaja: ElectricSeven Aihe: PK&HS Sivu 1 / 7 Dokumenttihistoria Revisiohistoria Revision päiväys: 29.11.2004 Seuraavan

Lisä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

Uudelleenkäytön jako kahteen

Uudelleenkäytön jako kahteen Uudelleenkäyttö Yleistä On pyritty pääsemään vakiokomponenttien käyttöön Kuitenkin vakiokomponentit yleistyneet vain rajallisilla osa-alueilla (esim. windows-käyttöliittymä) On arvioitu, että 60-80% ohjelmistosta

Lisätiedot

2. Olio-ohjelmoinista lyhyesti 2.1

2. Olio-ohjelmoinista lyhyesti 2.1 2. Olio-ohjelmoinista lyhyesti 2.1 Sisällys Yleistä. Oliot ja luokat. Attribuutit. Olioiden esittely ja alustus. Rakentajat. Olion operaation kutsuminen. 2.2 Yleistä Olio-ohjelmointia käsitellään hyvin

Lisätiedot

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 2. Luento 2 To Timo Männikkö Algoritmit 2 Luento 2 To 14.3.2019 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2019 Luento

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Merkintöjen tulkintoja *++Pstack->top = item *Pstack->top++ = item (*Pstack->top)++ *(Pstack++)->top = item *(++Pstack)->top = item Lisää pinon toteutuksia Dynaaminen taulukko

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 4. Joukot, relaatiot ja funktiot Osa 3: Funktiot 4.3 Funktiot Olkoot A ja B joukkoja. Funktio joukosta A joukkoon B on sääntö, joka liittää yksikäsitteisesti määrätyn

Lisätiedot

Logiikka 1/5 Sisältö ESITIEDOT:

Logiikka 1/5 Sisältö ESITIEDOT: Logiikka 1/5 Sisältö Formaali logiikka Luonnollinen logiikka muodostaa perustan arkielämän päättelyille. Sen käyttö on intuitiivista ja usein tiedostamatonta. Mikäli logiikka halutaan täsmällistää esimerkiksi

Lisätiedot

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

Testausraportti. Orava. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Testausraportti Orava Helsinki 5.5.2005 Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Kurssi 581260 Ohjelmistotuotantoprojekti (6 ov) Projektiryhmä Juhani Bergström Peter

Lisätiedot

Reaalilukuvälit, leikkaus ja unioni (1/2)

Reaalilukuvälit, leikkaus ja unioni (1/2) Luvut Luonnolliset luvut N = {0, 1, 2, 3,... } Kokonaisluvut Z = {..., 2, 1, 0, 1, 2,... } Rationaaliluvut (jaksolliset desimaaliluvut) Q = {m/n m, n Z, n 0} Irrationaaliluvut eli jaksottomat desimaaliluvut

Lisätiedot

Alityypitys. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Alityypitys. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos Alityypitys TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 5. maaliskuuta 2007 Muistatko tietueet? {I 1 = E 1,..., I n = E n } : {I

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos Geneeriset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 6. maaliskuuta 2007 Kysymys Mitä yhteistä on seuraavilla funktioilla?

Lisätiedot

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Approbatur 3, demo 1, ratkaisut 1.1. A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat. Käydään kaikki vaihtoehdot läpi. Jos A on rehti, niin B on retku, koska muuten

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

Algoritmit 2. Luento 2 Ke Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö Algoritmit 2 Luento 2 Ke 15.3.2017 Timo Männikkö Luento 2 Tietorakenteet Lineaarinen lista, binääripuu Prioriteettijono Kekorakenne Keko-operaatiot Keon toteutus taulukolla Algoritmit 2 Kevät 2017 Luento

Lisätiedot

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista

Matematiikan johdantokurssi, syksy 2016 Harjoitus 11, ratkaisuista Matematiikan johdantokurssi, syksy 06 Harjoitus, ratkaisuista. Valitse seuraaville säännöille mahdollisimman laajat lähtöjoukot ja sopivat maalijoukot niin, että syntyy kahden muuttujan funktiot (ks. monisteen

Lisätiedot

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen Ohjelmistojen mallintaminen - Mallit - Ohjelmiston kuvaaminen malleilla 31.10.2008 Harri Laine 1 Malli: abstraktio jostain kohteesta Abstrahointi: asian ilmaiseminen tavalla, joka tuo esiin tietystä näkökulmasta

Lisätiedot

Testiautomaatio tietovarastossa. Automaattisen regressiotestauksen periaate ja hyödyt

Testiautomaatio tietovarastossa. Automaattisen regressiotestauksen periaate ja hyödyt Testiautomaatio tietovarastossa Automaattisen regressiotestauksen periaate ja hyödyt Sisältö 2 Testaus kiinteänä osana DW-toteutusta Regressiotestauksen merkitys Robot Framework Automatisoitu DW:n regressiotestaus:

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

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla Tietojen syöttäminen ohjelmalle Tähän mennessä on käsitelty Javan tulostuslauseet System.out.print ja System.out.println sekä ohjelman perusrakenneosat (muuttujat, vakiot, lauseet). Jotta päästään tekemään

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

Algoritmit 1. Demot Timo Männikkö

Algoritmit 1. Demot Timo Männikkö Algoritmit 1 Demot 2 1.-2.2.2017 Timo Männikkö Tehtävä 1 (a) Ei-rekursiivinen algoritmi: laskesumma(t, n) sum = t[0]; for (i = 1; i < n; i++) sum = sum + t[i]; return sum; Silmukka suoritetaan n 1 kertaa

Lisätiedot

Täydentäviä muistiinpanoja laskennan rajoista

Täydentäviä muistiinpanoja laskennan rajoista Täydentäviä muistiinpanoja laskennan rajoista Antti-Juhani Kaijanaho 10. joulukuuta 2015 1 Diagonaalikieli Diagonaalikieli on D = { k {0, 1} k L(M k ) }. Lause 1. Päätösongelma Onko k {0, 1} sellaisen

Lisätiedot

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Sisäänrakennettu tietosuoja ja ohjelmistokehitys Sisäänrakennettu tietosuoja ja ohjelmistokehitys Petri Strandén 8. kesäkuuta, 2018 Agenda Ohjelmistokehitys Ohjelmistokehitys vs. konsultointi Vaatimukset Tietosuoja Tietosuoja ohjelmistokehityksessä kiteytettynä

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n

Lisätiedot

TIEA341 Funktio-ohjelmointi 1, kevät 2008

TIEA341 Funktio-ohjelmointi 1, kevät 2008 TIEA341 Funktio-ohjelmointi 1, kevät 2008 Luento 5 Ympärysmitta. Puut. Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 21. tammikuuta 2008 CASE: YMPÄRYSMITTA Lasketaan kuvioiden ympärysmittoja

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)

TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

Onnistunut Vaatimuspohjainen Testaus

Onnistunut Vaatimuspohjainen Testaus Onnistunut Vaatimuspohjainen Testaus Kari Alho Solution Architect Nohau Solutions, Finland Sisältö Mitä on vaatimuspohjainen testaus? Vaatimusten ymmärtämisen haasteet Testitapausten generointi Työkalujen

Lisätiedot

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1 3. Komponentit ja rajapinnat 3.1 Komponenttien idea: ohjelmistotuotannon rationalisointi 3.2 Mikä on ohjelmistokomponentti? 3.3 Komponentit ohjelmistoyksikköinä 3.4 Rajapinnat 3.6 Komponenttien räätälöinti

Lisätiedot

Algoritmit 1. Luento 10 Ke Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot

Lisätiedot

Sisäänrakennettu tietosuoja ja ohjelmistokehitys

Sisäänrakennettu tietosuoja ja ohjelmistokehitys Sisäänrakennettu tietosuoja ja ohjelmistokehitys Petri Strandén 14. kesäkuuta, 2018 Petri Strandén Manager Cyber Security Services Application Technologies Petri.stranden@kpmg.fi Petri vastaa KPMG:n Technology

Lisätiedot

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

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen ohjelmointiin Jukka Talvitie Valvoja: Professori Jorma Jormakka Paikka: TietoEnator oyj Ongelma Ideologia Lifebelt

Lisätiedot

Ohjelmointi 1 Taulukot ja merkkijonot

Ohjelmointi 1 Taulukot ja merkkijonot Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko

Lisätiedot

The OWL-S are not what they seem

The OWL-S are not what they seem The OWL-S are not what they seem...vai ovatko? Verkkopalveluiden koostamisen ontologia OWL-S Seminaariesitelmä 15.4.2013 Emilia Hjelm Internet on hankala Nykyinternet on dokumenttien verkko Asiat, joita

Lisätiedot

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB Datatähti 2019 alku task type time limit memory limit A Kolikot standard 1.00 s 512 MB B Leimasin standard 1.00 s 512 MB C Taulukko standard 1.00 s 512 MB D Ruudukko standard 1.00 s 512 MB E Sanalista

Lisätiedot