XML Ohjelmistokehityksessä



Samankaltaiset tiedostot
Harjoitus 2: Vaatimukset

Uutisjärjestelmä. Vaatimusmäärittely. Web-palvelujen kehittäminen. Versio 1.3

Harjoitus 3: Vaatimukset

Harjoitus 1: Vaatimukset

Javan asennus ja ohjeita ongelmatilanteisiin

Web Services tietokantaohjelmoinnin perusteet

Järjestelmäarkkitehtuuri (TK081702) SOA, Service-oriented architecture SOA,


käyttötapaukset mod. testaus

Kieliversiointityökalu Java-ohjelmistoon. Ohje

5. HelloWorld-ohjelma 5.1

Lohtu-projekti. Testaussuunnitelma

Linuxissa uusi elämä 1

Formaalit menetelmät: Kirjaston formalisointi Z-kuvauskielellä

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k

Rajapinta (interface)

1. KÄYTTÖKONTEKSTI. jamkad VAATIMUSMÄÄRITTELY. Liite1_Vaatimusmaarittely_Elainklinikka.doc Filename: Last saved:

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Ohjelmoinnin perusteet Y Python

C-kasetin digitointi Audacity-ohjelmalla

Toimintaympäristön kuvaus. LTC-Otso Myyjän työkalu (POC)

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

edocker PUBLISH! -paketinhallinnan käyttöohje 9/2015

LP-levyn digitointi Audacity-ohjelmalla

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

Tällä harjoituskerralla on tarkoituksena harjoitella käyttötapaus-, luokka- ja tapahtumasekvenssikaavioiden luontia.

XHTML - harjoitus. Tehtävä1: Tee xhtml tiedosto käyttäen notepad (muistio) ohjelmaa. Tiedoston tallennus notepad (muistio) ohjelmassa:

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

Järjestelmäarkkitehtuuri (TK081702)

Ohjelmistojen mallintaminen, mallinnustekniikat käytännössä

Kirjasto Relaatiotietokannat Kevät Auvinen Annemari Niemi Anu Passoja Jonna Pulli Jari Tersa Tiina

MagicDraw-pikaohje (VH5)

HSMT J2EE & EJB & SOAP &...

Ohje kehitysympäristöstä. Dokumentti: Ohje kehitysympäristöstä.doc Päiväys: Projekti : AgileElephant

P e d a c o d e ohjelmointikoulutus verkossa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

CVS. Kätevä väline usein päivitettävien tiedostojen, kuten lähdekoodin, hallitsemiseen

Varmennepalvelu Rajapintakuvaus Kansallisen tulorekisterin perustamishanke

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

Viestit-palvelun viranomaisliittymän ohjelmointiohje. Java-esimerkki

Liigan taulut ja attribuutit

Maha Eurosystem jarrulaskentaohjelman asennusohje versio

Ohjelmoinnin perusteet Y Python

Coolselector Asennusohje

Teknillinen korkeakoulu T Tietojenkäsittelyopin ohjelmatyö. Testitapaukset - Koordinaattieditori

Tiedonsiirto- ja rajapintastandardit

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

SAC RDS Futurline MAX Tupla-robotin ohjeet näytteenottoon ja päivämaidon lähetykseen

Windows Server 2012 asentaminen ja käyttöönotto, Serverin pyörittämisen takia tarvitaan

CSV - XML ohjelman käyttöohje

Laskuttajailmoituksen muutossanoman luonti ulkoisesti. Visma Fivaldi

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Amazon Web Services (AWS) on varmaankin maailman suosituin IaaS-tarjoaja. Lisäksi se tarjoaa erilaisia PaaS-kategoriaan kuuluvia palveluita.

SMART Board harjoituksia 17 - Notebook 10 Tiedostomuotoihin tallentaminen Yritä tehdä tehtävät sivulta 1 ilman että katsot vastauksia.

Tiedonsiirto helposti navetta-automaation ja tuotosseurannan välillä

VHOPE-sovelluksen ja VHOPE-kirjastotiedostojen asentaminen

Tietoturvan perusteet - Syksy SSH salattu yhteys & autentikointi. Tekijät: Antti Huhtala & Asko Ikävalko (TP02S)

12. Näppäimistöltä lukeminen 12.1

Varmuuskopiointi ja palauttaminen Käyttöopas

L models. Käyttöohje. Ryhmä Rajoitteiset

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

Puuhailua Android-sovellus

Ohjelmoinnin perusteet Y Python

Test-Driven Development

Johdatus ohjelmointiin

HOJ J2EE & EJB & SOAP &...

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

Kysymyksiä ja vastauksia Outlook 2007:stä

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

RATKI 1.0 Käyttäjän ohje

Ohjelmoinnin perusteet Y Python

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

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

Visma Nova Webservice Versio 1.1 /

Varmuuskopiointi ja palauttaminen Käyttöopas

Visma Software Oy

REST an idealistic model or a realistic solution?

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Ohjelmointi 2 / 2010 Välikoe / 26.3

Lohtu-projekti. Testiraportti. Versiohistoria: syklin toteutuksen testit. 1. ajo Virve

Seuraavat toiminnot suoritetaan käyttämällä LG- tallentimen kaukosäädintä.

8. Näppäimistöltä lukeminen 8.1

Tapahtumakalenteri & Jäsentietojärjestelmä Ylläpito

4. Lausekielinen ohjelmointi 4.1

Kuva 1. Jokaisen tavallisen kuvan tasotyökalussa näkyy vain yksi taso, tässä nimellä tausta.

Ohjeet asiakirjan lisäämiseen arkistoon

Harjoitus 2 (viikko 45)

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

Eclipse ja JUnit-ohjelmoijatestit

5. HelloWorld-ohjelma 5.1

NAVIGAATTORIN ASENNUS JA MUOKKAUS

Luento 3. Timo Savola. 7. huhtikuuta 2006

EMVHost Online SUBJECT: EMVHOST ONLINE CLIENT - AUTOMAATTISIIRROT COMPANY: EMVHost Online Client sovelluksen käyttöohje AUTHOR: DATE:

Kirjaudu sisään palveluun klikkaamalla Omat kartat -painiketta.

JOVISION IP-KAMERA Käyttöohje

TIETOKONE JA TIETOVERKOT TYÖVÄLINEENÄ

Tekstinkäsittelystä. H4: Tekstinkäsittelyn perusharjoitus. Toimisto ohjelmista

Transkriptio:

XML Ohjelmistokehityksessä 8105200 1/7 1 Yleistä XML Ohjelmistokehityksessä 1.1 Tavoitteet Harjoitustöiden tarkoituksena on tutustuttaa harjoitustyön tekijä XML:n käsittelyn perustekniikoihin ja rajapintoihin. Harjoitustyön sovellusalueena on äänilevyjen lainauspalvelu (yksinkertainen). Harjoitustyö jakaantuu kolmeen vaiheeseen: tiedon tallennus, palvelun rakentaminen ja asiakasliittymän rakentaminen. Ensimmäisen vaiheen tavoitteena on tutustuttaa XML:n käsittelyn perusteisiin: DOM- ja SAXrajapintoihin, lyhyesti XPath:iin sekä XML-Scheman kirjoittamiseen ja käyttöön. Perustekniikoita hyödynnetään yksinkertaisen XML-pohjaisen tietovaraston luomiseen. Toisessa vaiheessa toteutetaan ensimmäisen harjoituksen tietovarasota hyödyntävä yksinkertainen verkkopalvelu. Palvelun rajapinta tässä tapauksessa vain toistaa tietovaraston rajapinnan. Tietopalvelurajapinnan toteutuksen lisäksi luodaan rajapinta, jonka avulla harjoitustyössä luotu palvelu voidaan mm. julkistaa ja poistaa. Tämä palvelu tallennetaan paikalliseen UDDI-registeriin. Kolmannessa vaiheessa luodaan palvelua käyttävä asiakassovellus. Sovelluksen käyttöliittymä annetaan valmiina ja siihen on tarkoitus yhdistää sekä palvelun tunnistusrajapinta (UDDI) että palvelun käyttörajapinta (web service). Tämän lisäksi palveluun liitetään tietoturvaominaisuuksia. Harjoituksen ensimmäisessä vaiheessa ei saa hyödyntää JAXB tms. työkaluja, mutta muissa harjoituksen vaiheissa saa käyttää JDK:n ja JWSDP:n tarjoamia kirjastoja haluamallaan tavalla sekä ympäristön ulkopuolisia kirjastoja. Jos opiskelija käyttää ulkopuolisia kirjastoja, ne tulee toimittaa palautusten mukana. 1.2 Vaiheet ja aikataulu Harjoitus tehdään kolmessa vaiheessa. Vaiheessa yksi tuotetaan XML-pohjainen tietovarasto, joka hyödyntää XML:n perustekniikoita ja -teknologioita. Vaihessa kaksi tuotetaan palvelukokonaisuus tämän tietovaraston käyttöä varten. Vaiheessa kolme luodaan palvelua käyttävä asiakassovellus. Vaihe Alkaa Päättyy Käytössä oleva kalenteriaika Vaihe 1 / Varasto 20.01.05 14.02.05 3½ viikkoa Vaihe 2 / Palvelu 14.02.05 21.03.05 5 viikkoa Vaihe 3 / Asiakas 21.03.05 18.04.05 4 viikkoa Vaiheet päättyvät maanantaipäivisin klo 12.00. 1.3 Harjoitustyöympäristö Harjoitustyön tekemistä varten on Lintulaan (SUN+Linux) koneille rakennettu ympäristö (JWSDP), jossa pystyy harjoituksen tekemään (katso tarkemmin kurssin verkkosivuilta). Harjoitusten palautuksissa tulee ottaa erittäin vakavasti huomioon se seikka, että harjoitustyöt tullaan tarkastamaan joko Windows- tai Linux-koneella. Tästä syystä absoluuttisia polkuja EI saa laittaa ANT-käännösskripteihin vaan ulkoisiin property-tiedostoihin.

XML Ohjelmistokehityksessä 8105200 2/7 Harjoitustyön tekemiseksi opiskelija voi ladata omalle kotikoneelleen SUN:in JWSDP-paketin (version 1.5) tai käyttää vastaavaa pakettia Lintulan SUN tai Linux koneilta. Tämän JWSDP-paketin lisäksi opiskelija tarvitsee Java JDK:n version (vähintään 1.4.2., 1.5. versiota ei suositella käytettäväksi). Käännösrakentamiseen ja käännöksen hallintaan käytetään Apachen ANT työkalua (version 1.5.). Ant toimitetaan JWSDP:n mukana. Jokaisen harjoitustyön mukana opiskelijan pitää toimittaa täydennetyt käännöskuvaukset, joiden avulla käännetään, ajetaan ja lopuksi siivotaan jäljet. Harjoitustyön ohessa tarjotaan ensimmäiseen harjoitustyöhön tarkastustyökalua, joka koostuu Junitkirjastosta sekä Inspector-rungosta (lisää myöhemmin). Tarkastusrunko on otettu käyttöön siksi, jotta vältytään harjoituksen kannalta turhan käyttäjäsyötteen jäsentämiseltä ja tutkimiselta. JUnit-kirjasto on käyttökelpoinen ja toimiva kirjasto harjoitustyön tarpeisiin. Ja ketterien menetelmien matraa noudattaen, tekijä todistakoon tekemisensä oikeellisuuden. 1.4 Tuotteenhallinta Polkumäärittelyt tulee tuottaa ant property-mekanismin kautta siten, että kaikki omaan käyttöjärjestelmään ja asennukseen liittyvät polut tulevat käyttäjän kotihakemistoon sijoitetusta property-tiedostosta. <!-- set properties for the build --> <property environment="env"/> <property name="src" location="src" /> <property name="build" location="build" /> <property name="dist" location="dist" /> <property file="${user.home}/xmlohj.properties" /> <!-- setting up classpath --> <path id="base.libs"> <pathelement path="${myclasspath}" /> <fileset dir="lib"> <include name="**/*.jar" /> </fileset> <pathelement path="${env.classpath}" /> </path> <property name="classpath" refid="base.libs"/> #kotihakemiston xmlohj.properties tiedosto username=jjokunen jwsdp.home=/home/jjokunen/xmlohj/jwsdp xmlohj.common=/home/jjokunen/xmlohj/123456/common #harjoitustyön hakemiston proj.properties tiedosto my.name.first=jaska my.name.last=jokunen my.name.tag=${my.name.last}${my.name.first} my.op.num=123456 myclasspath=${build} Oheinen taulukko kuvaa osan Inspector-ohjelman käännöskuvauksesta sekä käyttäjän kotiympäristöön ja harjoitustyöympäristöön liittyvät ominaisuudet. Oheisissa property-tiedostoissa ilmenevät polkurakenteet ovat ohjeellisia, mutta esitettyjen ominaisuuksien esiintyminen ko. tiedostoissa on välttämätöntä. Ainoa poikkeus on myclasspathominaisuus, joka on mukana vain esimerkin vuoksi.

XML Ohjelmistokehityksessä 8105200 3/7 2 Harjoitustyön kuvaus 2.1 Yleiskuvaus Harjoitustyön kokonaistavoitteena on tuottaa kokonainen järjestelmä, joka vastaa mahdollisimman paljon todellisuutta, mutta tietysti huomattavasti rajoitetumpana versiona. Työssä toteutetaan SOA:n mukainen (web-palvelu, UDDI-rekisteri, asiakassovellus) järjestelmä, joka koostuu kolmesta kerroksesta: tietovarastosta, sovelluslogiikasta ja käyttöliittymästä, joista myös harjoituksen vaiheet tulevat. esittää tavoitejärjestelmää. Kuvan oikeassa reunassa on kuvattuna opiskelijan tuostosten alue rajattuna ja vasemmassa reunassa tarkastajien alue. Tarkastajat tuottavat oman versionsa Inspectorista tarkastuksia varten, vaikkakin opiskelijan tulee myös luoda omia tarkastuksiaan ja sisällyttää niitä omaan Inspector versioonsa, joka palautetaan myös palautuksen yhteydessä. 'JSP User for Exercise 3' kuvaa JSP käyttöliittymää, joka annetaan opiskelijoille kolmanteen harjoitukseen. id System context Harjoitus 1 konteksti «xml» Get interface implementation ExerciseEngine1 «instantiate» Get client warehouse Inspector ItemManager LoanManager LoanManager ItemManager DataService InspectorsView InspectorsView ServicePublisher Get interface implementation ExerciseEngine2 «instantiate» Get client Harjoitus 2 konteksti LoanService ItemService «uses» «web service» Warehouse ServicePublisher UDDI server publish «uddi» «uddi» find service SOA triangle LoanService «soap» bind ItemService Harjoitus 3 konteksti JSP User for Exercise3 ExerciseEngine3 «instantiate» Get client «web client» WarehouseClient LoanManager ItemManager Kuva 1Harjoitustyön kontekstikaavio Harjoituksen 1 DataService-komponentin toteutus on opiskelijan tehtävä. Ainoa vaatimus on se, että DataServicen toteuttavat luokat implementoivat kolme rajapintaa: LoanManager, ItemManager ja InspectorsView (tarkemmat kuvakset harjoitustyö 1:n vaatimuksissa). ExerciseEngine1 on yksinkertainen tehdasluokka, joka osaa vain luoda ja palauttaa em. rajapinnat toteuttavan luokan, kun rajapinnan toteutusta pyydetään. Harjoituksessa 2 julkaistaan palvelu UDDI-palvelimeen sekä tehdään muutama operaatio webpalvelun etsintään ja poistoon. Itse web-palvelu Warehouse toteuttaa kaksi toimintorajapintaa

XML Ohjelmistokehityksessä 8105200 4/7 LoanManager ja ItemManager. Nämä kaksi rajapintaa tulee reitittää DataService:n vastaaviin rajapintoihin (eli rajapintojen läpi näkyvä toiminnallisuus on sama). Harjoituksessa 3 käytetään yksinkertaista käyttöliittymää luomaan oikean palvelunkäytön tuntua harjoitustyöhön. Paitsi, että luodaan web-palvelulle asiakassovellus, niin tässä vaiheessa lisätään palveluun tietoturvaominaisuuksia. 2.2 Tarkastusympäristö Inspector Inspector-luokka toimii harjoitustöiden yhteisenä pääohjelmana. Inspector käyttää hyväkseen Junitkirjastoa. Tästä syystä omien tarkastusten tekeminen on melko yksinkertaista: 1. Luo haluamaasi tarkastustavoitetta kohden yksi Test-loppuinen tiedosto esim. ManageLoansTest.java ja sinne luonnollisesti ManageLoansTest-niminen luokka Harjoitus1/src/xmlohj/inspector-hakemistoon. 2. Lisää luokkaan setup ja teardown-nimiset metodit, jos tarkastuksesi vaatii jotain alustuksia esim. luodaan tyhjä varasto ja lisätään tuotenimike sinne setupissa ja palautetaan alkuperäinen puu teardownissa 3. Luodaan N kappaletta test-alkuisia metodeja, jotka suorittavat haluttuja tarkastuksia esim. testsingleloan() ja testmultipleloans() 4. Luodaan luokkaan staattinen suite-metodi, joka palauttaa instanssin juuri luodusta luokasta. 5. Lisätään suite.addtest(manageloanstest.suite() )-tyylinen rivi jokaista testiluokkaa kohden StudentTest::suite-metodiin ( Harjoitus1/src/xmlohj/inspector/StudentTest.java). Katso esimerkkiä ExampleTest.java ja StudentTest.java tiedostoista (Harjoitus1/src/xmlohj/inspector). Tämä toimii pääohjelmana. Inspectorin testien ajo vaatii aina sen, että Inspector on käännetty ensin.opiskelijan tulee luoda omia testiluokkia, joiden avulla opiskelija voi varmistua koodinsa toimivuudesta. 2.3 Palvelunkuvaus 2.3.1 Yleinen kuvaus Harjoitustehtävänä on kuvata yksinkertainen äänitevarasto, joka tarjoaa varastoinnin sekä lainauksen. Äänitevarastossa voi olla äänitteitä eri muodoissa: kasetti (MC), vinyylilevy (LP), CD-levy (CD) tai DVD-levy. Jokaisella levyllä on nimi (label) ja uniikki tunniste (identifier), jonka perusteella levyt yksilöidään. Näiden tietojen lisäksi levylle on vapaamuotoinen sijainti sekä kokonaislukumäärä (0 <= lkm), joka kertoo kuinka monta kappaletta yksittäistä tuotetta kaikkiaan on. 2.3.2 Varastonhallinta Toteutettava osuus on alijärjestelmä, joka tarjoaa äänivarastopalvelun. Varaston perustoimintoja ovat: Lisää (add), Poista (remove), Muokkaa (change), Etsi (find) ja Näytä (show). add-operaatiolla voidaan lisätä uusi nimike varastoon. Varastoon ei voida lisätä nimikettä, jolla on sama tunniste kuin jo varastossa olevalla nimikkeellä (ReservedIdentifierException). Varastoon ei voida lisätä tyhjää tai muuten viallista nimikettä (InvalidItemException). Tunnisteen pitää olla oikean muotoinen (InvalidIdentifierException). Nimikkeen lukumäärä voi olla 0 tai positiivinen

XML Ohjelmistokehityksessä 8105200 5/7 lukumäärä (lkm < 0; InvalidCountException). Jos add-operaatio jostain syystä toimii virheellisesti, asiasta huomautetaan (FunctionAddException). Toteutus kannattaa tehdä DOM-puuna. remove-operaation poistaa halutun nimikkeen varastosta. Poistettavasta nimikkeestä riittää tunnistukseen nimi (label) ja/tai tunniste (identifier) tai molemmista säännöllisen lauseen kuvaama vastine (korvaa kaikki merkit on '*'). Poisto ei onnistu, jos nimikkeitä löytyy useampi kuin yksi (ItemsTooManyException). Poisto ei onnistu, jos nimikettä ei löydy (ItemUnknowException). Jos remove-operaatio jostain syystä toimii virheellisesti, asiasta huomautetaan (FunctionRemoveException). Toteutus kannattaa tehdä DOM-puuna. change-operaatiolla korvataan vanhan tuotteen tiedot uuden tuotteen tiedoilla. Vanha tuote tunnistetaan samoilla säännöillä kuin poistossakin. Muutettaessa kaikki vanhan nimikkeen tiedot, paitsi tunniste, korvautuvat uuden nimikkeen tiedoilla. Jos vanhan nimikkeen tiedoilla löytyy useampi kuin yksi vanha nimike, ei muokkausta toteuteta (ItemsTooManyException). Jos vanhaa nimikettä ei löydy ollenkaan, ei muokkausta voida suorittaa (ItemUnknownException). Jos muokkaa-toiminto jostain syystä toimii virheellisesti, asiasta huomautetaan (FunctionChangeException). Toteutus kannattaa tehdä DOM-puuna. find-operaatiolla haetaan annettua nimikettä. Nimikettä haetaan samojen sääntöjen pohjalta kuin poista-toiminnossa. Paluutietona palautetaan nimikkejoukko, jossa on nolla tai useampi nimike. Jos jostain muusta syystä etsi-toiminto toimii virheellisesti, huomautetaan asiasta (FunctionFindException). Toteutus kannattaa tehdä DOM-puuna ja käyttää XPath-moottoria haun suorittamiseen ('*': Jouko* -> (Jouko Touko, Jouko Kukka)). show-operaatiolla palauttaa nimikejoukon kaikista varastossa olevista nimikkeistä. Jos toiminto jostain syystä epäonnistuu, niin asiasta huomautetaan (FunctionShowException). Toteutus kannattaa tehdä SAX:lla. 2.3.3 Lainanhallinta Toteutettava osuus on alijärjestelmä, joka tarjoaa äänivarastoon lainauspalvelun. Varastosta voidaan Lainata (borrowitem), Palauttaa (returnitem), Etsi (findloan) ja Näytä (showloans). borrowitem-operaatiolla lainataan nimike (Item) jollekin lainaajalle. Lainauksesta kirjataan vapaamuotoinen lainaajan nimi ja nimikkeen tunniste (identifier). Lainauksen voi suorittaa tuotteelle, joka on olemassa (ItemUnknownException, jos ei olemassa) ja jota ei ole lainattu varastossa olevaa määrää (TooManyLoansException, jos liian monta lainaa). Yksi lainaaja ei voi lainata samaa nimikettä useaan kertaan (DubblicateLoanException, jos lainaaja on lainannut nimikkeen). Jos tulee joku muu virhe, niin siitä tulee ilmoittaa (FunctionBorrowException). returnloan-operaatiolla voidaan palauttaa laina. Annetulla lainaajan nimellä ja tuotetunnisteella löytyvä lainaus voidaan palauttaa, jos vain yksi lainaus annetuilla tiedoilla löytyy (ItemsTooManyException, jos liian monta lainausta löytyy). Palautusta ei voida suorittaa, jos nimike ei ole olemassa (ItemUnknownException) tai sitä ei ole lainattu (LoanUnknownException). Jos tulee joku muu virhe, niin siitä tulee ilmoittaa (FunctionReturnException). findloan-operaatiolla haetaan tietyn nimikkeen tunnisteen tai nimikkeen lainaajan perusteella. Operaatio palauttaa joukon, jossa on nolla tai useampi lainatieto. Jos tulee joku virhe, niin siitä tulee ilmoittaa (FunctionFindLoanException). showloans-toiminnolla haetaan kaikki lainat. Operaatio palauttaa joukon, jossa on nolla tai useampi lainatieto. Jos tulee joku virhe, niin siitä tulee ilmoittaa (FunctionFindLoanException). 2.3.4 Tietovarasto

XML Ohjelmistokehityksessä 8105200 6/7 Varaston tiedot tallennetaan xml-tiedostoon (oletus warehouse.xml). Oheinen xml-kuvaus antaa esimerkin ko. Tallennuksesta. <?xml version= 1.0?> <warehouse> <storage> <item id= 123-ABZ-3 > <label>jukka Kukka</label> <type>cd</type> <location>tarja s room</location> <quantity>50</quantity> <borrowed>1</borrowed> </item> <item id= 042-QQQ-3 > <label>eino Vihree</label> <type>lp</type> <location>mika s room</location> <quantity>50</quantity> <borrowed>0</borrowed> </item> </storage> <loans> <loan> <borrower>john Doe</borrower> <itemid>123-abz-3</itemid> <loan> </loans> </warehouse> Opiskelijan odotetaan luovan XML-Schema (oletustiedosto warehouse.xsd) edellisestä kuvauksesta. ja käytä sitä tiedon oikeellisuuden tarkastamiseen eli xml-tiedon validointiin. Jos validointi epäonnistuu ja palauttaa poikkeuksen, tämä poikkeus tulee ottaa kiinni ja korvata se kyseisen metodin Function-alkuisella poikkeuksella. Nimikkeen (Item) tunniste (identifier) voidaan esittää oheisella BNF-kuvauksella: identifier := manufacturer + - + itemtype + - + index manufacturer := 3 {number} 3 // numeroita tasan kolme itemtype := 1 {alpha} 3 // kirjaimia yhdestä kolmeen index := alpha number // yksi kirjain tai numero number := [0-9] alpha := [A-Z] 2.4 Ulkoinen käyttäytyminen Tarkistusta varten järjestelmän ulkoinen käyttäytyminen kuvataan tilakoneilla sekvenssikaavioiden sijasta. Tämä siksi, että sekvenssikaaviolla yleensä pystytään kuvaamaan vain yksi vuorovaikutus järjestelmän ja ulkomaailman välillä, kun taas tilakoneella voidaan kompaktissa muodossa kuvata paljon suurempi joukko vuorovaikutteita. Ohessa pieni esimerkki ItemManager-rajapinnan oletetusta toiminnasta kun lisätään olemassa olevien nimikkeiden joukkoon lisää nimikkeitä ja poistetaan niitä. Oheinen tilakone (kuva 2) esittää ItemManager-rajapinnan oletetun toiminnallisuuden rajapinnan kahden operaation suhteen: add ja remove. Kuvan tilakone lähtee alkutilasta, jossa xml-tiedostossa on jo olemassa nimikkeitä tallennettuna. Tällöin voidaan olettaa, että remove-operaatiolla on jotain poistettavaa eikä vain tuntemattomia elemettejä. Toisaalta add-operaatio voi lisätä jo olemassa olevan nimikkeen kantaan (tai ainakin yrittää sitä).

XML Ohjelmistokehityksessä 8105200 7/7 IF foundcollection.count > 1, throw ItemsTooManyException IF foundcollection.count == 0, throw ItemUnknownException IF item.borrowed > 0, throw ItemBorrowedException OTHERWISE throw FunctionRemoveException Removing Error [remove == FAIL AND items.count > 0] Initial read XML [items.count > 0] *Exception remove( id, label ) Removing Idle Items [remove == OK AND items.count > 0] /store XML *Exception add( item ) [add == OK] /store XML Adding Adding Error [add == FAIL] IF item.id == RESERVED, throw ReservedIdentifierException IF item.id == BAD, throw InvalidIdentifierException IF item.quantity < 0, throw InvalidCountException IF item.borrowed!= 0, throw InvalidCountException IF item == INVALID, throw InvalidItemException OTHERWISE throw FunctionAddException Kuva 2Ulkoinen käytös: Lisää ja poista tilakone Kuvassa 3 on esitettynä eräs (pieni) otos tilakoneen esittämästä toiminnallisuudesta. Periaatteessa oheinen sekvenssi käy kaikkien tilojen kautta, mutta vain 4 vastetta 12 mahdollisesta käydään läpi (10 poikkeusta ja 2 ok tilannetta). sd Behaviour: Add and remove :Inspector 1.0 add(item1) 1.1 1.2 add(item2) «interface» :ItemManager {add == OK } 'Adding' state 1.3 1.4 add(item1) {add == OK } 'Adding' state 'Adding' state 1.5 reservedidentifiererrorhandler 1.6 [ReservedIdentifierException]: {add == FAIL } 'Adding Error' state 2.0 remove(item2) 2.1 2.2 remove(item2) {remove == OK } 'Removing' state 'Removing' state 2.3 unknownitemerrorhandler 2.4 [ItemUnknownException]: {remove == FAIL } 'Removing Error' state Kuva 3Ulkoinen käyttäytyminen: Lisää ja poista sekvenssi Oheinen kaavio esittää Inspector-luokan ja ItemManager-rajapinnan välistä kommunikoitia.