TEKNINEN MÄÄRITTELY Edited by Checked by Approved by Tuomo Marttila Luonnos 1
Tekninenmäärittely i Sisällysluettelo 1. JOHDANTO 2 1.1. Tarkoitus ja kattavuus 2 1.2. Tuote ja ympäristö 2 1.3. Määritelmät, merkintätavat ja lyhenteet 2 1.4. Viitteet 3 1.5. Yleiskatsaus dokumenttiin 3 2. JÄRJESTELMÄN YLEISKUVAUS 4 2.1. Sovellusalueen kuvaus 4 2.2. Järjestelmän liittyminen ympäristöönsä 4 2.3. Laitteistoympäristö(n kuvaus) 4 2.4. Ohjelmistoympäristö(n kuvaus) 4 3. ARKKITEHTUURIN KUVAUS 5 3.1. Ratkaisun "filosofia" (suunnitteluperiaatteet) 5 3.2. Tietokanta-arkkitehtuuri 6 3.3. Ohjelmistoarkkitehtuuri, moduulit ja prosessit 6 4. MODUULI (JA PROSESSI) KUVAUKSET 7 4.1. AMOK-moduuli 7 4.1.1 amok_portal 7 4.1.2 amok_admin 7 4.1.3 amok_user 8 4.1.4 amok_service 8 4.1.5 amok_community 9 4.1.6 amok_db 9 4.1.7 amok_vym 9 4.2. VYM 10 4.2.1 vym_amok 10 4.2.2 vym_db 10 4.2.3 calc 10 4.3. Admin-sovellus 11 4.3.1 base_ui 11 4.3.2 user_ui 11 4.3.3 service_ui 11
Tekninenmäärittely ii Sisällysluettelo 4.3.4 community_ui 11 5. HYLÄTYT RATKAISVAIHTOEHDOT 12
1(2) Dokumentin versiot Vers Muuttaja Pvm Muutos Tarkastanut Hyväksynyt 1.0 Tuomo Marttila 3.11.2000 Ensimmäinen luonnos. Luonnos 1 1.0 Harri Kauhanen 7.11.2000 Kirjoitusvirheiden korjausta. Luonnos 2
2(3) 1. JOHDANTO 1.1. Tarkoitus ja kattavuus Tässä dokumentissa määritetään VYMin rakenne moduulitasolla. 1.2. Tuote ja ympäristö Tuotteen kuvaus on määritetty dokumentissa vaatimusmäärittely kohdassa 1.5. 1.3. Määritelmät, merkintätavat ja lyhenteet AMOK Käyttäjäprofiili Sääntö VYM VYMK Virtuaaliyhteisö Adapterikomponentti. AMOK on järjestelmän osa, joka tarjoaa rajapinnat ulkoisille liittymille järjestelmään ja ohjaa asiakkassovelluksen pyynnöt joko suoraan kantaan tai VYMille, riippuen pyynnön laadusta. Käyttäjäprofiili sisältää yhden käyttäjän tiedot. Profiili määritellään ensisijaissesti käyttäjän syöttämien tietojen mukaan, mutta se saattaa myös muuttua oppiessaan käyttäjän toimista. Käyttäjäprofiili on ohjelmiston kannalta ekvivalentti käyttäjän kanssa. Virtuaaliyhteisöjä muodostetaan sääntöjen avulla. Sääntöä ei tule ymmärtää välttämättä predikaattilogiikan avulla muodostettuna, vaan sääntö on mikä tahansa rajoite, jonka avulla voidaan tutkia käyttäjäprofiileja ja määrittää, kuuluuko henkilö profiilinsa perusteella ryhmään vai ei. Virtuaaliyhteisöjen muodostajakone. Keskeisin osa sovellusta, joka muodostaa virtuaaliyhteisöt käyttäjäprofiileista sääntöjen perusteella. VYMin osa, joka laskee varsinaiset yhteisöt. Virtuaaliyhteisö muodostuu joukosta käyttäjiä (käyttäjäprofiileja), joilla on samanlaisia harrastuksia ja kiinnostuksen kohteita. Virtuaaliyhteisön jäsenten tulee voida kommunikoida keskenään. Lisäksi jokaisen yhteisön jäsenen tulee voida ottaa selville, mihin yhteisöihin hän kuuluu. Sääntöjen avulla voidaan profiileista muodostaa virtuaaliyhteisöjä. Jotta virtuaaliyhteisö voisi kommunikoida, tulee virtuaaliyhteisön määrittää media ja protokolla, joiden avulla kommunikaatio voidaan suorittaa. Lisäksi tulee määrittää tapa, jolla henkilö voi ottaa selville, mihin yhteisöihin hän kuuluu. Määritelmä, joka toteuttaa edellä mainitut ehdot, on nelikko (A,B,C,D), jossa A on osajoukko kaikista käyttäjäprofiileista. A:n alkiot toteuttavat säännöstön B, joka on määritelty kullekin virtuaaliyhteisölle erikseen. C on joukko, joka koostuu kommunikaatiotavoista. C siis toisin sanoen määrittelee, millä tavoilla yhteisön sisällä kommunikoidaan. D on toiminto, jonka avulla käyttäjä voi ottaa selville, mihin yhteisöihin hän kuuluu.
3(4) 1.4. Viitteet Viittaukset muihin lähteisiin (dokumentit, standardit, käsikirjat). Viitteen mukaan aakkosjärjestyksessä Ne dokumentit joihin on viitattu tai jotka liittyvät systeemiin tai sen rakentamiseen, mikäli tarpeen (nimi, versio, päiväys, mistä löydettävissä). Lisätietoja. Koodaustyyliohje merkittäisiin tähän. Se tämän järjestelmän määrittelydokumenttihan on tärkein lisätietojen ja selvennysten lähde. Mikäli suunnittelu ei kata koko määrittelyä tulee se mainita tässä (eli mitä muita suunnitteluvaiheen dokumentteja on olemassa, jos on; esim. jos käyttöliittymän tai tietokannan suunnittelu on irrotettu omiksi dokumenteikseen). Luettelo aakkosjärjestyksessä. 1.5. Yleiskatsaus dokumenttiin Rakenteen kuvaus; sisältö ja organisointi; mitä missäkin luvussa käsitellään, tärkeää varsinkin mikäli lukija ei ole tottunut lukemaan em. sisällysluettelon mukaisia määrittelyjä. Mikäli ensimmäinen luku on kokonaisuudessaan samalla sivulla kuin tämä kohta (1.6 yleiskatsaus) tai jos 1. luku on muutoin kovin lyhyt, ei sitä tarvitse tässä kohdassa (1.6 yleiskatsaus) mainita vaan voidaan aloittaa 2. luvun asioista. Tässä mainitaan kustakin luvusta hieman enemmän kuin mitä pelkkä sisällysluettelon selaaminen kertoo.
4(5) 2. JÄRJESTELMÄN YLEISKUVAUS 2.1. Sovellusalueen kuvaus VYM on virtuaaliyhteisöjä muodostava kone, joka liittyy johonkin sitä tarvitsevaan palveluun. 2.2. Järjestelmän liittyminen ympäristöönsä VYM liittyy portaaliin AMOKin rajapinnan kautta. Käytännössä ensivaiheessa on kyseessä Java luokkarajapinta. 2.3. Laitteistoympäristö(n kuvaus) VYM on täysin palvelinsovellus ja vaatii toiminnallisessa määrittelyssä kuvatun laitteiston. 2.4. Ohjelmistoympäristö(n kuvaus) VYM kirjoitetaan Javalla, ja sen tulisi toimia missä tahansa käyttöjärjestelmässä, jossa on JDK 1.2.2
5(6) 3. ARKKITEHTUURIN KUVAUS Arkkitehtuuriksi on valittu modulaarinen rakenne, jotta VYM voidaan helposti vaihtaa sopivampaan mahdolliseen. Eri osat toteutetaan Javaluokkina. Seuraavat moduulit ovat välttämättömiä VYMin toiminnalle. AMOK hoitaa Admin-sovelluksen ja portaalin yhteydet varsinaiseen VYMiin ja tietokantaan. AMOKin rajapinnat: 1. Rajapinta portaaliin 2. Rajapinta Admin-sovellukseen 3. Rajapinta VYM-koneeseen 4. Rajapinta tietokantaan VYM-kone sisältää kaiken älykkyyden mitä tarvitaan virtuaaliyhteisöjen muodostamiseen. Tietokanta sisältää käyttäjäprofiilit, palveluprofiilit ja yhteisöprofiilit, sekä näiden väliset suhteet. Admin-sovelluksessa on käyttöliittymä jolla voidaan lisätä ja päivittää käyttäjä-, palvelu- ja yhteisöprofiileja. 3.1. Ratkaisun "filosofia" (suunnitteluperiaatteet) VYM tehdään oliopohjaisena. Eri komponentit ovat Java-luokkia. Vaikka AMOK ja VYMK esitetään eri osina, ne toimivat käytännössä samassa koneessa, ja keskustelevat keskenään Java-luokkarajapinnan yli. Javan käyttö on asiakkaan vaatimus ja toteutuksen kannalta on helpompaa tehdä AMOKista ja VYMKista yhtenäinen. VYM on palvelinsovellus, eikä sillä ole varsinaista käyttöliittymää. Adminsovellus tulee palvelemaan VYMin käyttöliittymänä ylläpidolle, ja ulkoinen portaali tarjoaa käyttöliittymän käyttäjälle. Kaikki tieto moduulien välillä välitetään parametreina. Globaaleja muuttujia ei tulla käyttämään. Myös AMOKin ja VYMKin välillä tieto siirretään parametreina. Tietokantana on Oraclen relaatiokanta. Se on kuvattu toiminnallisen määrittelyn luvussa 3.
6(7) 3.2. Tietokanta-arkkitehtuuri Tietokannan rakenne on kuvattu toiminnallisen määrittelyn luvussa 3. Koska kyseessä on tutkimusprojekti emme tässä projektissa tee suojattua ja varmistettua kantaa. Tuotantoympäristössä VYM-palvelun tarjoaja määrittää muunmuassa käytettävyystason. Käytännössä VYMin tulee toimia 24h/vrk, mikä tarkoittaa kahdennettua palvelinta. Koska kanta tulee käytännössä kasvamaan melko nopeasti, on kannan tilaa tarkkailtava, ja tarpeen vaatiessa on kanta järjestettävä uudelleen, jotta kannan rakenne pysyisi tehokkaana. 3.3. Ohjelmistoarkkitehtuuri, moduulit ja prosessit HUOM! Luokkien nimeäminen muuttunee jatkossa, kunhan sovimme nimeämiskäytännöistä. VYM jakaantuu kahteen varsinaaiseen osaan AMOK ja VYMK sekä Adminsovellukseen, joka on ylläpitäjän graafinen käyttöliittymä järjestelmään. Portaali on ulkoinen VYMin asiakas. AMOK-moduuli vastaa kaikista ulkoisista rajapinnoista portaaliin ja Adminsovellukseen, ja välittää näiden lähettämän tiedon joko suoraan kantaan, tai VYMKille. AMOK koostuu rajapintaluokista joita ovat amok_portal, amok_admin, amok_db ja amok_vym, sekä käsittely luokista amok_user, amok_service ja amok_community. VYMK-moduuli vastaa virtuaaliyhteisöjen muodostamisesta. Käyttäjien, palveluiden ja yhteisöjen tiedot kierrätetään syöttö- ja muutosvaiheissa VYMKin kautta, jotta VYMK voidaan myöhemmin muuttaa oppivaksi. VYMK koostuu rajapinta luokista vym_amok ja vym_db sekä varsinaisen laskennan suorittavasta luokasta vym_calc. Admin-sovellus on ylläpitäjän käyttöliittymä. Se koostuu luokista base_ui, user_ui, service_ui, community_ui.
7(8) 4. MODUULI (JA PROSESSI) KUVAUKSET amok_portaali login() new_user() amok_user new_user() get_userdata() change_userdata() vym_amok new_user() change_ user() new_commu nity() change_ community() new_service() change_ service() vym_amok new_user() change_user() new_community() change_community() new_service() change_service() amok_admin get_userdata() change_user() get_community() change_community() get_service() change_service() amok_service get_service() new_service() change_service() amok_community new_community() get_community() cha nge_community() amok_db login() get_userdata() get_communitydata() get_servicedata() vym_db new_user() change_user() new_community() change_community() new_service() change_service() user_community() service_community() name calc calc_all() calc_user() calc_community() calc_service() 4.1. AMOK-moduuli 4.1.1 amok_portal Tarjoaa rajapinnan portaalille, ja välittää tiedot eteenpäin amok_user moduliin. userdata login(username, password) tarkistaa onko käyttäjätunnussalasanapari kunnossa ja palauttaa käyttäjän profiilin, tai tyhjän profiilin jos kirjautuminen epäonnistui. Kutsuu amok_db.login() funktiota. boolean new_user(userdata) lisää uuden käyttäjän kantaan. Palauttaa true jos operaatio onnistui. Kutsuu amok_user.new_user() funktiota. 4.1.2 amok_admin Tarjoaa rajapinnan Admin-sovellukselle, ja välittää tiedot eteenpäin amok_user, amok_service tai amok_community moduliin. userdata userdata get_userdata(username) hakee käyttäjän tiedot. Kutsuu funktiota amok_user.get_userdata(). boolean change_userdata(userdata) muuttaa käyttäjän tietoja. Kutsuu funktiota amok_user.change_userdata().
8(9) communitydata get_community(communityname) hakee yhteisön tiedot. Kutsuu funktiota amok_community.get_community(). boolean change_community(communitydata) muuttaa yhteisönn tietoja. Kutsuu funktiota amok_community.change_community(). servicedata get_service(servicename) hakee palvelun tiedot. Kutsuu funktiota amok_service.get_service(). boolean change_service(servicedata) muuttaa palvelun tietoja. Kutsuu funktiota amok_service.change_service(). 4.1.3 amok_user Vastaa käyttäjätietojen käsittelystä ja ohjaa pyynnöt joko VYMKiin amok_vym moduulin kautta tai suoraan tietokantaan amok_db modulin kautta. boolean new_user(userdata) lisää uuden käyttäjän kantaan. Palauttaa true jos operaatio onnistui. Kutsuu amok_vym.new_user() funktiota. userdata get_userdata(username) hakee käyttäjän tiedot. Kutsuu funktiota amok_db.get_userdata(). boolean change_userdata(userdata) muuttaa käyttäjän tietoja. Kutsuu funktiota amok_vym.change_userdata(). 4.1.4 amok_service Vastaa palvelutietojen käsittelystä ja ohjaa pyynnöt joko VYMKiin amok_vym moduulin kautta tai suoraan tietokantaan amok_db modulin kautta. boolean new_service(servicedata) luo uuden palvelun. Kutsuu funktiota amok_vym.new_service(). servicedata get_service(servicename) hakee palvelun tiedot. Kutsuu funktiota amok_db.get_servicedata(). boolean change_service(servicedata) muuttaa palvelun tietoja. Kutsuu funktiota amok_vym.change_service().
9(10) 4.1.5 amok_community Vastaa yhteisötietojen käsittelystä ja ohjaa pyynnöt joko VYMKiin amok_vym moduulin kautta tai suoraan tietokantaan amok_db modulin kautta. new_community(communitydata) luo uuden palvelun. Kutsuu funktiota amok_vym.new_community(). get_community(communityname) hakee palvelun tiedot. Kutsuu funktiota amok_db.get_communitydata(). change_community(communitydata) muuttaa palvelun tietoja. Kutsuu funktiota amok_vym.change_community(). 4.1.6 amok_db boolean login(username, password) palauttaa true jos tietokannasta löytyy vastaava käyttäjätunnus-salasana pari. get_userdata(username) hakee kannasta käyttäjän profiilin. get_communitydata(communityname) hakee kannasta yhteisön profiilin. get_servicedata(servicename) hakee kannasta palvelun profiilin. 4.1.7 amok_vym new_user(userdata) lisää käyttäjän järjestelmän. Kutsuu funktiota vym_amok.new_user(). change_user(userdata) muuttaa käyttäjän tietoja. Kutsuu funktiota vym_amok.change_user(). new_community(communitydata) lisää yhteisön järjestelmään. Kutsuu funktiota vym_amok.new_community(). change_community(communitydata) muuttaa yhteisön tietoja. Kutsuu funktiota vym_amok.change_community(). new_service(servicedata) lisää palvelun järjestelmään. Kutsuu funktiota vym_amok.get_service(). change_service(servicedata) muuttaa palvelun tietoja. Kutsuu funktiota vym_amok.change_service().
10(11) 4.2. VYM 4.2.1 vym_amok new_user(userdata) lisää käyttäjän järjestelmän. Kutsuu funktiota vym_db.new_user() ja calc.calc_user(). change_user(userdata) muuttaa käyttäjän tietoja. Kutsuu funktiota vym_db.change_user() ja ja calc.calc_user(). new_community(communitydata) lisää yhteisön järjestelmään. Kutsuu funktiota vym_db.new_community()ja calc.calc_community(). change_community(communitydata) muuttaa yhteisön tietoja. Kutsuu funktiota vym_db.change_community() ja calc.calc_community(). new_service(servicedata) lisää palvelun järjestelmään. Kutsuu funktiota vym_db.get_service() ja calc.calc_service(). change_service(servicedata) muuttaa palvelun tietoja. Kutsuu funktiota vym_db.change_service() ja calc.calc_service(). 4.2.2 vym_db 4.2.3 calc new_user(userdata) lisää käyttäjän järjestelmän. change_user(userdata) muuttaa käyttäjän tietoja. new_community(communitydata) lisää yhteisön järjestelmään. change_community(communitydata) muuttaa yhteisön tietoja. new_service(servicedata) lisää palvelun järjestelmään. change_service(servicedata) muuttaa palvelun tietoja. user_community(user, community) lisää käyttäjä-yhteisö relaation kantaan service_community(service, community) lisää palvelu-yhteisö relaation kantaan calc_all() laskee kaikkien käyttäjien, palveluiden, ja yhteisöjen suhteet. calc_user() laskee käyttäjälle yhteisöt ja lisää ne kantaan kutsumalla funktiota vym_db.user_community()
11(12) calc_service() laskee palvelulle yhteisöt ja lisää ne kantaan kutsumalla funktiota vym_db.service_community() calc_community() laskee yhteisölle käyttäjät ja palvelut ja lisää ne kantaan kutsumalla funktiota vym_db.user_community() ja vym_db.service_community() 4.3. Admin-sovellus 4.3.1 base_ui Piirtää perus käyttöliittymän ja kutsuu sitten muita käyttöliittymä komponentteja. 4.3.2 user_ui Käyttäjätietojen muokkaamiseen tarkoitettu käyttöliittymä. Kutsuu vym_admin luokan funktioita. 4.3.3 service_ui Palvelutietojen muokkaamiseen tarkoitettu käyttöliittymä. Kutsuu vym_admin luokan funktioita. 4.3.4 community_ui Yhteisötietojen muokkaamiseen tarkoitettu käyttöliittymä. Kutsuu vym_admin luokan funktioita.
12(13) 5. HYLÄTYT RATKAISVAIHTOEHDOT VYMKiä ei tehdä ainakaan tässä vaiheessa neuroverkkona, sillä ei olla varmoja tulisiko se toimimaan.