Arkkitehtuurikuvaus Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy Ryhmä 14
Muutoshistoria Versio Pvm Päivittäjä Muutos 1.0 19.10.2007 Suanto 0.3 18.10.2007 Matti Eerola 0.2 17.10.2007 Matti Eerola 0.1 15.10.2007 Matti Eerola Esitetty iteraatiodemossa, muutettu versioksi 1.0 Katselmoinnissa löytyneiden virheiden korjauksia Poistin tietokannan jakamisen tuotehierakian mukaan. Olisi ollu teknisesti lähes mahdotonta. Lisää näkymiä ja muita parannuksia 0.02 8.10.2007 Matti Eerola Lisätty käyttötapauksia 0.01 5.10.2007 Matti Eerola Ensimmäinen versio
Sisällysluettelo 1. Johdanto...1 1.1 Järjestelmän kuvaus...1 2. Järjestelmän suurimmat vaatimukset...1 3. Skenaario...1 3.1 Kontekstidiagrammi...1 3.2 Editorin käyttötapaukset...2 3.2.1 Kehittäjä...2 3.2.2 Projektipäällikkö...4 3.2.3 Kääntäjä...5 4.1 Yhteensopivuus vanhan kielitermijärjestelmän kanssa...5 5. Arkkitehtuuriset näkymät...6 5.1 Fyysinen näkymä...6 5.4 Informaationäkymä...7
1. Johdanto Juha Kauppi on diplomityössään "Ohjelmistotuotelinjan monikielisyyden arkkitehtuuri ja hallinta" jo kuvaillut ja suunnitellut toteutettavaa järjestelmää. Siinä keskitytään enimmäkseen uudistetun tietomallin ominaisuuksiin ja termien hallintaan. Tämän arkkitehtuuridokumentin tarkoitus on taas kuvailla niitä arkkitehtuurisia ratkaisuja, joilla pyritään täyttämään ohjelmistolle asetetut erilaiset laadulliset vaatimukset. 1.1 Järjestelmän kuvaus Suunniteltava järjestelmä koostuu ohjelmistokomponentista ja kielitermieditorista. Ohjelmistokomponentti vastaa ohjelmistotuotelinjan monikielisyydestä. Editorilla voidaan hallita monikielisyyttä. 2. Järjestelmän suurimmat vaatimukset Järjestelmän vaatimuksia on käsitelty tarkemmin vaatimustenmäärittelydokumentissa. Arkkitehtuuria suunniteltaessa vaatimuksista on poimittu muutama järjestelmälle tärkein ominaisuus, jotka järjestelmän täytyy uuden tietorakenteen lisäksi toteuttaa. Niitä ovat suorituskyky, skaalautuvuus, editorin käytettävyys ja ylläpidettävyys. 3. Skenaario 3.1 Kontekstidiagrammi 1 / 7
Kielitermijärjestelmä on ohjelmistokomponentti, joka sijoittuu samaan sovellukseen kuin kohdejärjestelmä. Se tarjoaa kohdejärjestelmälle ohjelmallisen rajapinnan, jolla kohdejärjestelmä voi käsitellä kielitermejä. Suurin osa liikenteestä kohde- ja kielitermijärjestelmän välillä tulee olemaan kielitermien hakuja. Kielitermit ladataan pääasiassa yhteisestä termitetokannasta, joka sisältää kaikille yhteisiä termejä. Yhteisiä termejä on tuotehierarkian juuresta installaatiotasoon. Samaa termitietokantaa käyttävät kaikki järjestelmät, joten se muodostaa komponentin, josta kaikkien järjestelmien toiminta riippuu. Tietokanta voi tosin olla kokonainen tietokantaklusteri, joten sen aiheuttamaa riskiä voidaan pienentää tarvittaessa. On mahdollista tallentaa myös vain tiettyyn järjestelmään liittyviä termejä. Ne tallennetaan omaan tietokantaan, koska niitä ei tarvita missään muussa järjestelmässä. Vain tiettyyn järjestelmään liittyviä termejä ovat esimerkiksi organisaatiokohtaiset termit. Installaatiokohtaisessa eli paikallisessa termikannassa olevia sisältöjä ei voi käyttää uudelleen muissa installaatioissa tehtävissä käännöksissä. Hakujen tulokset täytyy tallentaa välimuistiin, koska suorituskyvyn täytyy olla hakujen osalta hyvä. Välimuistilla saadaan myös skaalautuvuutta, koska se vähentää liikennettä yhteisestä tietokannasta sovelluksiin. Välimuistiin ei voi kuitenkaan tallentaa kovin paljoa tietoa, eikä mielellään ainakaan sellaista tietoa, jota ei sovelluksessa tarvita. Palvelimella ajetaan usein monia sovelluksia, joissa kaikissa käytetään kielitermijärjestelmää. Tuhlaileva resurssienkäyttö kuluttaisi palvelimen resurssit nopeasti loppuun. Arkkitehtuuri tukee useampaa välimuistikerrosta, jotka voivat käyttää eri menetelmiä tiedontallentamiseen esimerkiksi muistia tai kovalevyä. Kovalevyn käyttäminen välimuistina voisi vähentää yhteisen termitietokannan kuormaa huomattavasti, koska tietoa voitaisiin tallettaa jopa päiviksi kovalevyn välimuistiin. Kielijärjestelmän ja käyttäjien välisenä rajapintana toimii editori, joka on web-pohjainen sovellus muun järjestelmän rinnalla. Sillä käyttäjät voivat hallinnoida kielitermejä. Editori ei käytä välimuistia, koska sen suorituskyky ei ole olennainen osa koko järjestelmän suorituskykyä. Editoria käsitellään enemmän käyttötapauksien yhteydessä. Lopullisessa tuotteessa käyttöliittymäsivuilta voi saada listauksia sivun termeistä ja päästä muokkaamaan niitä. 3.2 Editorin käyttötapaukset Editorin tulisi auttaa käyttäjää käyttämään uudelleen jo olemassa olevia sisältöjä. Siksi kehittäjänkin tapauksessa lähdetään liikkeelle etsimällä sanastosta jo olemassa olevia sisältöjä. Vasta sen jälkeen yhdistetään sisältö tunnisteeseen. Tunnisteen syöttäminen suoraan johonkin tekstikenttään ei saisi myöskään olla edellytys jonkin toiminnon tekemiseen. Yksi uuden järjestelmän tarkoitus on siirtää kääntämistä pois kehityksestä vastaavilta. Tunnisteen voi tietää vain kehittäjä eli pitäisi olla mahdollista löytää tunniste sisältöön ja metatietoihin perustuvan haun kautta. 3.2.1 Kehittäjä Luo kielitermi yhteen uuteen tunnisteeseen 2 / 7
Kehittäjä on tehnyt uuden kielitermipaikan ja luonut siihen uuden tunnisteen jollain oletussisällöllä. Kehittäjä tietää tunnisteen ja sen mikä sisältö juuritasolle pitäisi asettaa jollain tietyllä kielellä. Alkuehto: Tunniste on olemassa ja sillä on jokin oletussisältö. Tunnisteesta ei kuitenkaan ole yhtään linkkiä käsitteisiin. Perussekvenssi: 1. Kehittäjä hakee olemassa olevaa sisältöä valitulla kielellä 2. Sisältö löytyi ja editori näyttää tietoja liittyvistä tunnisteista ja käsitteistä 3. Sisältöön liittyy jo juuritason käsite. Kehittäjä liittää uuden tunnisteen kyseiseen käsitteen. Poikkeukset: Kohta 2: Jos sisältöä ei löytynytkään, kehittäjää pyydetään luomaan uusi sisältö haetulle kielelle Kohta 2: Löytyi useampi samanlainen sisältö. Näin voi ehkä käydä siirtymävaiheessa, koska vanhasta tietomallista tulee duplikaatteja. Oletuksena sisällöt yhdistetään. Kohta 3: Sisältöön ei liity juuritason käsitettä. Kehittäjän täytyy luoda uusi käsite eli luoda juuritasolla liitos uuden tunnisteen ja löytyneen sisällön välille. Loppuehto: Tunnisteesta on liitos käsitteeseen, josta on liitos haluttuun sisältöön. 3 / 7
Yhden kielitermin tarkentaminen jollekkin hierarkiatasolle Kehittäjä on saanut tehtäväksi muuttaa yksittäisen kielitermin jollekkin asiakkaalle hieman tarkemmaksi. Kehittäjä tietää siis tunnisteen ja tarkennetun sisällön. Alkuehto: Tunniste on olemassa ja sillä on juuritasolla käsite, johon liittyy erikielisiä sisältöjä. Perussekvenssi: 1. Kehittäjä hakee tarkennettua sisältöä valitulla kielellä 2. Sisältö löytyi ja editori näyttää tietoja liittyvistä tunnisteista ja käsitteistä 3. Mikään käsitteistä ei ole oikealla hierarkiatasolla. Kehittäjä luo uuden käsitteen ja liittä siihen metatiedot ja tunnisteen. Poikkeukset: Kohta 2: Jos sisältöä ei löytynytkään, käyttäjää pyydetään luomaan uusi sisältö haetulle kielelle Kohta 3: Sisältöön liittyy jo juuri sopiva käsite. Kehittäjä liittää olemassa olevan käsitteen tunnisteeseen. Loppuehto: Sama kuin alussa ja lisäksi tunnisteeseen liittyy nyt asiakaskohtainen käsite. 3.2.2 Projektipäällikkö Keskeisen termin tarkentaminen asiakkaalle Asiakas haluaa tarkentaa termiä, joka liittyy useaan muuhun termiin, ja ilmoittaa siitä projektipäällikölle. Esimerkiksi halutaan muuttaa "työntekijä" termiksi "myyjä". Kyseistä termiä on käytetty muissakin termeissä kuten esimerkiksi "Valitse työntekijä" ja "Työntekijä on lomalla". 4 / 7
Projektipäälliköllä ei ole aikaa kääntää kaikkia liittyviä termejä kerralla vaan hän joutuu jatkamaan hommaa myöhemmin. Sisältöjen syöttäminen uusille tunnisteille Tuotteeseen on tehty täysin uusi toiminnallisuus ja sen takia järjestelmässä on paljon tunnisteita, joissa on vain oletussisältö. Projektipäällikön täytyy syöttää tunnisteisiin liittyvät termit jollakin kielellä, jotta kääntäjä voi myöhemmin kääntää ne toiselle kielelle. 3.2.3 Kääntäjä Uuteen toiminnallisuuten liittyvien termien kääntäminen Tuotteeseen on tehty täysin uusi toiminnallisuus ja se pitää kääntää uudelle kielelle Sisältöön liittyvien aiempien käännösten tarkastelu Käyttötapaus liittyy yhteen kehittäjän käyttötapauksista. Kehittäjä on päättänyt tarkentaa erästä termiä tietylle asiakkaalle. Hän on luonut uuden käsitteen, joka liittyy tarkennettuun sisältöön. Käsitteeseen liittyy siis vain yks sisältö yhdellä kielellä ja kääntäjän pitäisi nyt kääntää se eri kielille. Koska sisältö oli jo järjestelmässä kun kehittäjä liitti siihen käsitteen, sille voi olla olemassa käännöksiä muiden käsitteiden kautta. Kääntäjä haluaa nähdä ne ja käyttää niitä mahdollisesti hyväksi kääntämisessä. 4. Arkkitehtuurisesti olennaiset oletukset ja rajoitteet 4.1 Yhteensopivuus vanhan kielitermijärjestelmän kanssa Uuden tietorakenteen pitää olla sellainen, että vanhat kielitermit voidaan siirtää uuteen kielitermijärjestelmään. Ohjelmistorajapintojen tulee toimia niin, ettei se vaadi laajoja muutoksia kohdejärjestelmän koodiin. Vanhat kielitermit sisältävät esimerkiksi tietyillä merkkijonoilla merkittyjä paikkoja, joihin tulostetaan dynaamista sisältöä kuten numeroita jne. Uuden kielitermijärjestelmän pitää säilyttää kyseiset merkkijonot, koska niiden muuttaminen vaatisi laajoja muutoksia kohdejärjestelmään. 5 / 7
5. Arkkitehtuuriset näkymät 5.1 Fyysinen näkymä Fyysisestä näkymästä voi nähdä, että kielitermijärjestelmää voidaan ajaa hyvin erilaisissa ympäristöissä. Suoritettavien palvelinohjelmistojen määrä palvelinta kohden vaihtelee paljon ja joskus ohjelmistoa suoritetaan palvelinklusterissa. Jotta kielitermijärjestelmä toimisi klusterissa, ohjelmiston tilaa ylläpitävien tietorakenteiden täytyy olla serialisoituvia. Kielitermit voivat olla jaettu useampaan tietokantaan ja järjestelmän tarvitsemien tietokantojen määrä voi vaihdella. Lisäksi on mahdollista, että ohjelmisto asennetaan palvelimelle, jolta ei saa olla tietokantayhteyksiä muihin koneisiin. Silloin tarvittavista kielitermeistä otetaan kopio ja ne sijoitetaan tietokantaan samalle palvelimelle kuin sovellus. 6 / 7
5.4 Informaationäkymä Editor Core Core.CacheHandler Core.Model Core.Data Editori käsittelee termejä suoraan Core.Model tietomallien avulla. Se ohittaa välimuistin, joten muutokset näkyvät muussa sovelluksessa vasta kun muutetun termin sisältö poistuu välimuistista. Muodostaa oman assemblyn. Se sisältää termien käsittelyyn tarvittavat toiminnot. Hallinnoi termien tallentamista välimuistiin. Vaikka tämän modulin avulla haetaankin yksittäisiä termejä, se käsittelee termejä paketteina, joista se lopultaa etsii haetun termin ja palauttaa sen sisällön. Termejä käsitellään paketteina, jotta niiden lataus tehostuisi. Tavoitteena on, että kaikille paketin termeille tulee käyttöä jossain vaiheessa. Sisältää parannetun tietomallin. Tieto on paketoitu olioihin, joiden avulla sitä voi helposti manipuloida jne. Hoitaa tiedon lataamisen ja päivittämisen tietokantaan. Luo tiedoista tietomallin mukaisia olioita. Tieto käsitellään lähinnä taulukkoina. 7 / 7