• Ei tuloksia

Improving and Documenting the Emergency Information Publishing System

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Improving and Documenting the Emergency Information Publishing System"

Copied!
72
0
0

Kokoteksti

(1)

Kalle Korpijoki

Tilannetietojen julkaisujärjestelmän tekninen parantaminen ja dokumentointi.

Työn valvoja Prof. Tomi Männistö

Työn ohjaaja FK Ari Rosenberg

r ^

HANTI .UNEN KORK*'ARO"' M TIHTOlfcKN IIKAN TAI-ON k::.:»V>10 K!)NhMIFIIliNTlB ?

U2O0 LiHOO

(2)

Tekijä

Kalle Korpijoki

Päiväys

23.1.2006

Sivumäärä

61+5

Työn nimi

Tilannetietojen julkaisujärjestelmän tekninen parantaminen ja dokumentointi

Professuuri

Ohjelmistotuotanto ja liiketoiminta

Koodi

T-76

Työn valvoja

Prof. Tomi Männistö

Työn ohjaaja

FK Ari Rosenberg

Työn tarkoituksena oli parantaa olemassa olevan tilannetietojen julkaisujärjestelmän si­

säistä rakennetta siten, että järjestelmän WWW-käyttöliittymä pysyy mahdollisimman samanlaisena kuin ennen. Lisäksi haluttiin järjestelmälle dokumentaatio, koska nykyisestä järjestelmästä ei ollut dokumentaatiota.

Työn alussa kuvattiin nykyisen järjestelmän rakenne ja päätettiin mitä parannuksia järjes­

telmään tehtäisiin. Tämän jälkeen suunniteltiin ja toteutettiin uusi järjestelmä. Toteutuksen jälkeen tutkittiin järjestelmän huonoja rakenteita menetelmällä, jossa etsitään lähdekoodis­

ta huonoja hajuja eli yleisiä huonoja ohjelmointikäytäntöjä. Lopuksi huonoksi havaitut kohdat korjattiin ja kuvattiin järjestelmän suunnitelmaan tehdyt muutokset.

Muutokset sisälsivät siirtymisen oliopohjaiseen ohjelmointiin sekä tietokantarakenteen muuttamisen joustavammaksi. Nämä muutokset todettiin tarpeellisiksi ja hyviksi valin­

noiksi. Parannetun järjestelmän lähdekoodista löydettiin joitakin huonoja hajuja ja nämä kohdat korjattiin siinä määrin kuin nähtiin tarpeelliseksi.

Avainsanat

refaktorointi, WWW-ohjelmointi, PHP, julkaisujärjestelmä, UML, koodin haju

(3)

Department of Computer Science and Engineering

THESIS

Author Date

Kalle Korpijoki January 23,2006

Pages

61+5

Title of thesis

Improving and Documenting the Emergency Information Publishing System

Professorship Professorship Code

Software Engineering and Business T-76

Supervisor

Prof. Tomi Männistö

Instructor

FK Ari Rosenberg

The purpose of this master’s thesis was to improve the functionality of an existing emer­

gency information publishing system without changing the user interface drastically. Also the new documentation was seen important since the current system is not documented.

First the structure of the current system was described and it was decided which improve­

ments were to be implemented. According to the improvements the new system was then designed. After the implementation phase the system was checked for bad code smells.

Finding bad code smells is a method used to find bad programming practices in the source code. Then these problem points were fixed and the changes made to the design were documented.

The implemented improvements include changing to object oriented programming and more flexible database structure. These improvements were found necessary and that they were the right choices. Some bad smells were found in the source code after implementing the improvements. These problems found were fixed if they were seen to be severe

enough.

Keywords

refactoring, web programming, PHP, publishing system, UML, code smell

(4)

julkaisujärjestelmän kehitystä. Kehitys alkoi vuonna 2002 ja jatkuu edelleen. Tarkoitukse­

na on, että Säteilyturvakeskus voisi tarjota yhteistyökumppaneilleen mahdollisimman hy­

vää palvelua.

Kiitokset tämän työn valvojille Casper Lasseniukselle ja Tomi Männistölle sekä ohjaajal­

leni Ari Rosenbergille. Heiltä sain työhöni tarvittua opastusta ja apua. Kiitos myös työni aikana eläkkeelle jääneelle Säteilyturvakeskuksen ATK-päällikölle Kalevi Hokkiselle, sekä kaikille muille, jotka ovat työtäni tavalla tai toisella auttaneet.

Lopuksi vielä kiitos vanhemmilleni, jotka ovat avustaneet minua opintojeni aikana. Ilman heidän apuaan olisi lähtö pääkaupunkiseudulle opiskelemaan jäänyt tekemättä.

Vantaalla 23.1.2006

Kalle Korpijoki

(5)

1 JOHDANTO... 1

1.1 Taustaa...1

1.2 Tavoitteet ja rajoitukset...3

1.3 Menetelmät... 5

2 JÄRJESTELMÄN NYKYTILAN KUVAUS... 7

2.1 Yleistä... 7

2.2 Tärkeimmät käyttötapaukset... 7

2.3 Tarkempi kuvaus...9

2.3.1 Palvelinohjelmistot... 9

2.3.2 Tiedostojärjestelmä...10

2.3.3 Toiminnallisuus... 11

2.3.4 Tietokanta... 19

3 TEORIATAUSTAA PARANNUKSILLE... 21

3.1 Yleistä... 21

3.2 WWW-ohjelmointi...21

3.3 Lähdekoodin parantaminen... 23

4 JÄRJESTELMÄÄN TEHTÄVÄT PARANNUKSET...24

4.1 Yleistä... 24

4.2 Tärkeimmät parannusten kohteet...24

4.3 Parannukset... 25

4.3.1 Tietokantarakenne... 25

4.3.2 Olio-ohjelmointi ja järjestelmän rakenne...28

4.3.3 Luokkien tarkempi kuvaus...31

4.3.4 Tiedostojärjestelmän muutokset ja ulkoasun muokattavuus...37

4.4 Testauksesta... 38

5 PARANNETUN JÄRJESTELMÄN KUVAUS... 39

5.1 Yleistä... 39

5.2 Parannuksien tarkempi kuvaus...39

5.2.1 Tietokanta...39

5.2.2 Toiminnallisuus... 42

(6)

6 MUUTOSTEN TARKASTELU... 53

6.1 Yleistä...53

6.2 Lähdekoodi ja tietokannanrakenne...53

6.3 Ulkonäön muokattavuus ja kieliversiot... 53

6.4 Uuden järjestelmän dokumentaatio...54

6.5 Muutokset käyttäj ien näkökulmasta... 55

6.6 Väärinkäytön estäminen... 55

6.7 Tulevaisuuden kehityskohteita... 57

7 YHTEENVETO... 58

LÄHDELUETTELO... 60

LIITTEET:

LIITE 1: Ruudunkaappauksia uudesta ja vanhasta järjestelmästä

LIITE 2: SLOCCount-ohjelman tulokset vanhalle ja uudelle järjestelmälle LIITE 3: Ruudunkaappaus NOTE-projektin järjestelmästä

(7)

1 JOHDANTO

1.1 Taustaa

Säteilyturvakeskus (STUK) on turvallisuutta valvova viranomainen, tutkimuslaitos ja asi­

antuntijaorganisaatio [www.stuk.fi 2004], STUK:lla on oma valmiusyksikkö, joka valvoo mahdollisia säteilyyn liittyviä vaara- ja onnettomuustilanteita. Valmiustilanteessa valmius- yksikkö muun toimintansa ohella julkaisee tilannetietoja yhteistyökumppaneilleen Interne­

tissä olevan tilannetietojen julkaisujärjestelmän kautta. Tästä julkaisujärjestelmästä käyte­

tään nimeä FINRI, joka rakentuu englanninkielisistä sanoista ”Finnish Emergency Respon­

se Information”. Vastaavia järjestelmiä on käytössä tai suunnitteilla myös muiden maiden säteilyä valvovilla viranomaisilla mm. Ruotsissa ja Norjassa sekä kansainvälisellä ato­

mienergiajärjestöllä IAEA:lla.

FINRI

Tilannetiedot poikkeavista tapahtumista

Finnish Emergency Response Information

9>STUK

In English Haku otsikoista Etusivu Aikajärjestys Tapahtumajärjestys

♦ Tilannekuva ja suositukset

♦ Säätiedot ja leviämlsennusteet

♦ Säteilytilanne Suomessa

♦ Säteilytilanne ulkomailla

♦ Lehdistötiedote

♦ Pressmeddelande Taustatietoja

(yleista, karttoja..,)

Tapahtuma-arkisto Palaute

Usein kysyttyjä kysymyksiä

Tapahtuma-arkisto

Tapahtuma: Kaikki tapahtumat ▼ Näytä: Kaikki j Päivitänäkymäi~|

Tapahtuma Otsikko Alaotsikko/Tiedostot Julkaistu

Suomen aikaa Loviisa2003 Tilannekuva ja

suositukset

Harjoitus on päättynyt, täytä palautelomake 2003-11-25 15:57 Lovilsa2003 Tilannekuva ja

suositukset

Kotieläintuotannon ja juomaveden suojaaminen

2003-11-25 15:52 Loviisa2003 Tilannekuva ja

suositukset

Slsällesuojautumis- ja jodinottosuositukset (kartta)

2003-11-25 15:33 Loviisa2003 Pressmeddelande Läget vid Lovisa kärnkraftverk är allvarligt 2003-11-25

15:30 Loviisa2003 Lehdistötiedote Loviisan ydinvoimalaitoksen päästön suunta

muuttuu 2003-11-25

15:29 Loviisa2003 Tilannekuva ja

suositukset

Joditabletit Kymenlaakson, Etelä-Karjalan ja Päijät-Hämeen maakunnissa

2003-11-25 15:24 Lovlisa2003 Säätiedot ja

leviämlsennusteet

Päivitetty leviämisanlmaatio 25.-27.11. (gif, 2 MB)

2003-11-25 15:20

Lovilsa2003 Pressmeddelande Vindens riktning 2003-11-25

14:44 Loviisa2003 Säteilytilanne Suomessa Mittauspartioiden tuloksia 12:15 UTC (kuva) 2003-11-25

14:36 Loviisa2003 Pressmeddelande Utsläppet från Lovisa har inte kunnat

stoppas, INES 6

2003-11-25 14:28

<< Edelliset 10 Seuraavat 10 >>

Copyright STUKi FINRI - Säteilyturvakeskuksen tilannetiedot poikkeavista tapahtumista

Kuva 1 Ruudunkaappaus yhteistyökumppaneiden FINRI-näkymästä. Näkymässä olevat tilannetiedot liittyvät valmiushaijoitukseen.

(8)

dottamisessa. Se on WWW-selaimella käytettävä sivusto, jonka päätavoite on mahdollistaa nopea tiedon jakaminen STUK:n yhteistyökumppaneille. Sisäänpääsy on rajoitettu käyttä­

jätunnuksella ja salasanalla. Tämä mahdollistaa julkaistujen tilannetietojen lukemisen miltä tahansa Intemet-yhteydellä, WWW-selaimella ja dokumenttien lukemiseen sopivilla oh­

jelmilla varustetulta laitteelta, kunhan käyttäjällä on palvelun vaatima käyttäjätunnus ja salasana.

Tilannetietojen julkaisuun tarvitaan myös PDF-dokumenttien tekemiseen vaadittava oh­

jelmisto. Tämä ei ole järjestelmän asettama vaatimus vaan STUK:ssa sovittu tapa, jotta dokumenttien avaus onnistuisi mahdollisimman useassa paikassa ja dokumenttien ulkoasu pysyisi samana. Julkaisemispuolelle pääsemiseen vaaditaan käyttäjätunnuksen ja salasanan lisäksi myös työasemakohtaiset erillisoikeudet, eli pääsyä on rajoitettu myös työasemien IP-osoitteen mukaan. Sivusto on sijoitettu ulkoisen palveluntarjoajan palvelimelle, jotta sen aiheuttama tietoliikennekuorma ei hidasta STUK:in käyttäjien toimintaa valmiustilan- teissa.

Ylläpitäjä:

- VWWV-selain - PDF-dokumenttien

valmistamiseen sopiva ohjelmisto

Yhteistyökumppani:

- VWWV-selain - PDF-dokumenttien

lukuohjelma

Luku:

- käyttäjätunnus - salasana

Kaavio 1 FINRI:n toiminta yksinkertaistettuna.

(9)

FINRI kehitettiin vuonna 2002. Osittain lyhyestä kehitysajasta johtuen järjestelmän raken­

teesta ei ole olemassa dokumentointia. Järjestelmään on tämän jälkeen tehty myös lisäyksiä ja muutoksia, jotka ovat tehneet sen rakenteesta hyvin epäselvän. Dokumentoinnin puute vaikeuttaa ylläpitoa huomattavasti, eikä alkuperäinen rakenne ole suunniteltu muutostar­

peita huomioon ottaen.

Järjestelmässä on kaksi kieliversiota: suomi ja englanti. Käyttäjän näkymät (Kuva 1) sivus- tolla ovat suurimmaksi osaksi taulukkoja, joissa on lueteltu tapahtuman nimi, siihen liitty­

vä otsikko, alaotsikko ja julkaisuaika. Tapahtuman nimellä ryhmitellään samaan tapahtu­

maan liittyvät tilannetiedot ja otsikolla kerrotaan tarkempi kategoria. Alaotsikkoja voi olla useampi ja ne ovat hyperlinkkejä dokumentteihin.

Viime aikoina on ilmennyt joitakin tarpeita saada vastaava järjestelmä hieman erilaiseen tarkoitukseen, kuten tiettyyn projektiin liittyvien dokumenttien jakamiseen. Tästä on he­

rännyt ajatus, voitaisiinko FINRLssä käytettävää järjestelmää saada muokattua näihinkin tarpeisiin sopivaa. Tämä on luultavasti hyvin työlästä juuri sen takia, ettei järjestelmää suunniteltaessa ole otettu huomioon mahdollista rakenteen suurempaa muokkausta.

1.2 Tavoitteet ja rajoitukset

Tämän diplomityön tärkein tavoite on helpottaa nykyisen järjestelmän lähdekoodin ylläpi­

dettävyyttä. Samalla on tarkoitus parantaa järjestelmän muokattavuutta toiminnallisuuden lisäksi myös ulkonäöllisesti. Työssä keskitytään lähinnä järjestelmän sisäiseen toimintaan.

Lähdekoodin ylläpidettävyyden helpottamiseksi järjestelmästä tehdään dokumentaatio ja järjestelmän osien rakennetta parannetaan mm. siirtymällä olio-ohjelmointiin ja uusimalla tietokantarakenne. Olio-ohjelmointiin siirryttäessä on tarkoituksena kerätä samaan asiaan liittyvät toiminnallisuudet luokiksi, jolloin rakenteen hahmottaminen helpottuu. Samalla muutosten tekeminen yksinkertaistuu, koska nykyisen järjestelmän useassa eri paikassa olevat samat toiminnallisuudet kerätään yhteen.

Nykyisessä tietokantarakenteessa on redundanssia eli turhaa toistoa, sillä molemmilla kie­

liversioilla on omat taulunsa tietojen tallentamiseen ja jokainen julkaistu tilannetieto varaa aina tietyn määrä tilaa liitetiedostojen tiedoille. Edellä mainituista syistä johtuen mm. sa­

mojen funktioiden käyttäminen tietokannan muokkaamiseen eri kieliversioissa on moni­

(10)

ta tulisi normalisoida, eli poistaa ylimääräinen toisto ja jakaa taulu loogisiin kokonaisuuk­

siin [Ullman & Widom 2002], Rakenteen jakaminen pienempiin loogisiin kokonaisuuksiin helpottaa tietokannan muuttamista, koska tällöin mahdolliset myöhemmät muutokset vai­

kuttavat pienempään osaan järjestelmän toiminnallisuuksista.

Järjestelmän ulkonäöllisen muokkauksen helpottamiseksi on tarkoitus erottaa toiminnalli­

suus ja kieliversiot ns. sivupohjista. Tällä hetkellä jokainen toiminnon osa on oma sivunsa, joka sisältää sekä toiminnallisuuden että ulkonäön määrittelyt. Tämän lisäksi on myös kak­

si kieliversiota jokaisesta sivusta. Jos jotakin ulkonäköön liittyvää seikkaa haluttaisiin muuttaa, jouduttaisiin käymään jokainen sivu läpi ja tekemään halutut muutokset niihin.

Uudessa järjestelmässä tulisi olla sivupohja, johon staattinen teksti lisätään käytössä olevan kielen mukaan ja toiminnallisuus tuottaa muuttuvan sisällön. Näin voidaan muuttaa ulko­

näköä muokkaamalla sivupohjaa, kieliversioita muokkaamalla kielitiedostoja ja toiminnal­

lisuutta muokkaamalla järjestelmän lähdekoodia.

Tapahtumien ja otsikoiden muokkaaminen on lisättävä uuteen järjestelmään siten, että jul­

kaisija voi tehdä kyseiset toiminnot itse. Vanhassa järjestelmässä julkaisija voi lisätä ja poistaa tapahtumia, mutta etenkin tapahtuman nimen vaihtaminen on monimutkaista. Otsi­

koiden käsittelyn joutuu tekemään järjestelmän ylläpitäjä, koska käsittely vaatii tietokan­

nan suoraa muokkausta. Nämä toiminnot nopeutuisivat huomattavasti jos julkaisijalla olisi mahdollisuus tehdä ne itse käyttöliittymän kautta.

Koska järjestelmä sijaitsee julkisessa verkossa, tulee järjestelmän toteutuksessa ottaa huo­

mioon mahdolliset väärinkäyttöyritykset. Vaikka yhteys FINRIm ja käyttäjän välillä on suojattu salasanalla ja salauksella, voi salasanat jotenkin päästä ulkopuolisten tietoon. Jos ulkopuolinen käyttäjä pääsee järjestelmään, hänen ei pitäisi päästä häiritsemään muita jär­

jestelmän käyttäjiä.

Diplomityössä ei keskitytä järjestelmän käyttöliittymään tai käytettävyyteen. Nykyisen järjestelmän käytettävyydestä saatu palaute on ollut suurimmaksi osaksi positiivista, joten käytettävyystutkimus voidaan rajata tämän työn ulkopuolelle. Uuden järjestelmän oletus- käyttöliittymä on tarkoitus toteuttaa mahdollisimman samankaltaiseksi nykyisen järjestel­

män kanssa. Myös tarkempi testaussuunnitelma tehdään erikseen, eikä näin ollen sisälly tähän työhön.

(11)

Tämän diplomityön tärkeimmät tavoitteet yhteenvetona:

• järjestelmän sisäisten rakenteiden parantaminen ja lähdekoodin ylläpidon helpotta­

minen käyttämällä olio-ohjelmointia ja selventämällä tietokantarakennetta

• järjestelmän muokattavuuden parantaminen erottamalla sivujen ulkonäkö, kieliver­

siot ja toiminnallisuus toisistaan

• ajan tasalla olevan dokumentaation laatiminen järjestelmälle

• julkaisijan työn nopeuttaminen mahdollistamalla tapahtumien ja otsikoiden muok­

kaaminen käyttöliittymän kautta

• sivuston väärinkäytön estäminen

Tavoitteiden toteutumiseen palataan työn loppuosassa (kappaleessa 6).

1.3 Menetelmät

Diplomityön tärkein tutkimusaineisto on nykyisen järjestelmän lähdekoodi, jota työn edis­

tyessä parannetaan. Järjestelmä on ohjelmoitu PHP-kielellä, jota voidaan käyttää suoraan HTML-sivuihin upotettuna, kunhan palvelinohjelmisto tukee tätä. Lisäksi valmista aineis­

toa ovat kahden vuoden aikana pidetyistä valmiusharjoituksista saatu palaute.

Järjestelmän kuvauksessa käytetään tarkoitukseen sopivilta osin UML-kuvauskieltä [OMG 2003; Booch et ai. 1999], Ainakin alkuvaiheessa tulee kuitenkin ottaa huomioon kuvaus­

kielen olio-ohjelmointikeskeisyys, sillä nykyisessä lähdekoodissa ei ole käytetty olioita.

Työn aikana on tarkoitus kuitenkin siirtyä olio-ohjelmointiin, koska PHP tukee sitä. Tieto­

kantarakenne on myös yksi parannus- ja dokumentointikohde. Rakenteen kuvaukseen ja suunnitteluun käytetään E/R-kaavioita.

Tarvittavien kaavioiden tekemiseen käytetään vapaasti saatavilla olevaa Dia-ohjelmaa, joka on tarkoitettu juuri kaavioiden piirtämiseen. Kaavioiden piirtämisessä noudatetaan mahdollisimman pitkälle aineistossa määriteltyjä UML- ja E/R-kaavioiden merkintätapoja [Booch et ai. 1999; Ullman & Widom 2002], mutta käytetyt ohjelmistot saattavat asettaa joitakin rajoituksia. Mahdolliset merkintätapoihin liittyvät eroavaisuudet, määritellään

erikseen kyseisessä kappaleessa.

(12)

tiedot lähdekoodiin [java.sun.com 2005], Javadoc-kommentointi käytetään Java- lähdekoodissa ja sille on työkalu, jolla luokkien toiminnallisuuden dokumentointi voidaan tehdä automaattisesti kommenttien pohjalta. Tämä työkalu ei toimi PHP-kielellä kirjoitet­

tujen luokkien kanssa, mutta kommentointitapa on käytännöllinen ja tunnettu. Kommen­

teissa kuvataan luokan, muuttujien ja funktioiden toiminnallisuudet sekä funktioiden mah­

dolliset parametrit ja palautusarvot.

Lisäksi apuna käytetään juuri PHP-kieltä ja WWW-ohjelmointia koskevia artikkeleja, jotka käsittelevät lähdekoodia tietoturvan näkökulmasta. Vaikka järjestelmään pääsy on käyttäjä­

tunnuksella ja salasanalla suojattu, on sivuston tietoturvaan kiinnitettävä huomiota.

(13)

2 JÄRJESTELMÄN NYKYTILAN KUVAUS

2.1 Yleistä

Tässä kappaleessa käydään läpi järjestelmän nykytila, eli FINRIin tämänhetkinen toiminta.

Ensin käydään läpi nykyisen järjestelmän tärkeimmät käyttötapaukset, joiden pohjalta teh­

dään kuvaukset, kuinka järjestelmä toimii näissä tapauksissa. Kuvaukset ovat niin sanottuja dynaamisia kuvauksia, eli niissä tarkastellaan järjestelmän eri osien yhteistoimintaa tietyis­

sä tapauksissa. Näiden kuvausten pohjalta voidaan myöhemmässä vaiheessa suunnitella järjestelmän parannuksia ja lähdekoodin muuntamista olio-ohjelmointimalliin.

Lopuksi tehdään kuvaus myös järjestelmän käyttämästä tietokantarakenteesta. Näihin ku­

vauksiin käytetään staattisia malleja, sillä tietokannan rakenne ei muutu käytön aikana, tietokantaan vain tallennetaan tietoa.

2.2 Tärkeimmät käyttötapaukset

Tärkeimpien käyttötapausten ja niiden välisten riippuvuuksien kuvaamiseen käytetään UML-kielessä määriteltyä käyttötapauskaaviota. Kaaviossa (Kaavio 2) on kuvattu eri käyt­

täjien kannalta kaikkein yleisimmät ja tärkeimmät käyttötapaukset, jotka järjestelmällä on.

(14)

Tilannetietojen suodatus

Tilannetietojen haku sanalla

«include»

«include»

Käyttäjä

Tilannetietojen listaus

«include»

Tilannetiedon poisto

Julkaisija

«include»

Tilannetiedon muokkaus

«include»

Tilannetiedon lisäys

«include»

Tapahtuman siirto arkistoon

Tapahtumien listaus

«include»

Tapahtuman palautus arkistosta

Kaavio 2 Järjestelmän tärkeimmät käyttötapaukset.

(15)

Ensimmäinen käyttötapaus jokaisella järjestelmän käyttäjällä on järjestelmään kirjautumi­

nen. Nykyisessä järjestelmässä kirjautuminen suoritetaan HTTP-palvelimen omalla käyttä­

jän tunnistusmenetelmällä, jossa tiettyjen hakemistojen alla oleviin sivuihin ja niiden tar­

joamaan toiminnallisuuteen vaaditaan toimiva käyttäjätunnus ja salasana.

Järjestelmällä on kahdenlaisia käyttäjiä eli käyttäjän ilmentymiä, lukijat ja julkaisijat. Luki­

jat ovat käyttäjiä, jotka voivat seurata millaista tietoa järjestelmän kautta julkaistaan eli FINRLn tapauksessa he ovat Säteilyturvakeskuksen valmiustilanteen aikaisia yhteistyö­

kumppaneita. Julkaisijat ovat niitä käyttäjiä, jotka voivat lukijan käyttötapausten lisäksi myös julkaista uusia tietoja järjestelmään, eli FINRl:ssä he ovat Säteilyturvakeskuksen valmiusorganisaation työntekijöitä. Lukijoille on kaksi kieliversiota: suomi ja englanti, mutta julkaisijoille on tällä hetkellä vain yksi, koska kaikki julkaisijat osaavat suomea.

Kaaviossa (Kaavio 2) keskeisin käyttötapaus on tilannetietojen listaus, jota suurin osa muista käyttötapauksista tarvitsee. Tilannetietojen haku sekä suodatus näyttävät siis tulok­

sensa samanlaisena listana. Lisäksi julkaisija käyttää muokatessa tai poistaessa tilannetieto­

ja suodatettua listaa, josta voidaan valita haluttu tilannetieto.

Julkaisija voi lisätä järjestelmään tapahtumia vain tilannetiedon lisäyksen yhteydessä, eli kyseistä toimintoa ei voi käyttää suoraan. Tapahtumien listausta voidaan pitää erillisenä käyttötapauksena, sillä listausta käytetään kaaviossa mainittujen käyttötapausten lisäksi myös mm. sivustolla olevassa valikossa.

2.3 Tarkempi kuvaus

2.3.1 Palvelinohjelmistot

FINRI koostuu PHP-ohjelmointikielellä kirjoitetuista sivuista, joiden esittämiseen käyte­

tään HTTP-palvelinohjelmistoa jossa on tuki PHP-kielelle. Tietovarastoina järjestelmä käyttää MySQL-palvelinohjelmistoa sekä käyttöjärjestelmän tarjoamaa tiedostojärjestel­

mää.

Ohjelmoinnin aikana testausjärjestelmänä käytettiin PC-tekniikkaan perustuvaa palvelinta, Linux-käyttöjärjestelmää ja Apache HTTP-palvelinohjelmistoa. Tuotantokäyttöön siirryt­

täessä järjestelmä asennettiin palveluntarjoajan palvelimelle, jossa on Netscape-Enterprise

(16)

olla mikä tahansa, kunhan MySQL toimii ja PHP-kielelle löytyy tuki.

2.3.2 Tiedostojärjestelmä

Järjestelmän käyttämän tiedostojärjestelmän rakenne on päätasoltaan melko yksinkertai­

nen. Rakenteessa on jaettu dokumentin julkaisijoiden ja lukijoiden käyttämät toiminnalli­

suudet omiin hakemistoihin sekä yhteiset kuvat omaan hakemistoon. Tämä päätason ra­

kenne johtuu täysin käytetystä käyttäjätunnistuksesta. Tunnistus perustuu hakemistokohtai­

siin oikeuksiin, kuten edellä (kappaleessa 2.2) mainittiin. Lukijoiden hakemiston alla oleva hakemistorakenne on monimutkaisempi.

Ö www-root

—Ö admin

—Pit pics

-HÖI users

•—tip en

—tp) data

—(p 2004 --£p 12_24

—G 12_36_21

“0 1 -Q 2

•Hp fi

—tp data

—Ip 2004

—tp 12_24

—tp 12_30_59

£5 i

^2 3

—Q pda

Kaavio 3 Tiedostojärjestelmän rakenne

Kuten yllä olevasta kaaviosta (Kaavio 3) näkyy, on lukijat jaettu kolmeen pääryhmään:

englanninkieliset, suomenkieliset ja pieninäyttöisten laitteiden esim. kämmentietokoneiden ja WWW-selaimella varustettujen puhelimien käyttäjät. Pieninäyttöisten laitteiden käyttä­

jät on yksi muutos, joka on tehty alkuperäiseen järjestelmään ja on erikoistapaus, joten tässä vaiheessa keskitymme enemmän suomen-ja englanninkielisten lukijoiden hakemisto­

jen rakenteisiin.

(17)

Molempien kieliversioiden hakemistot sisältävät samat toiminnallisuudet ja molemmissa on oma alihakemisto, johon järjestelmään lisätyt aineistot tallennetaan. Tämän aineistoha- kemiston alla olevat tiedostot jaetaan vielä omaan hakemistorakenteeseensa, jossa käyte­

tään kaavion (Kaavio 3) mukaista nimeämistä. Ylimmällä tasolla hakemiston nimi raken­

tuu julkaisuvuodesta, jonka jälkeen tulee kuukausi sekä päivä, kellonaika ja viimeisellä tasolla on järjestelmän sisäinen järjestysluku kyseiselle tiedostolle. Pieninäyttöisten laittei­

den hakemisto ei sisällä liitetiedostoja, vaan sieltä viitataan suoraan kieliversioiden alla oleviin tiedostoihin.

2.3.3 Toiminnallisuus

Seuraavaksi käydään läpi järjestelmän toiminnallisuutta tärkeimpien käyttötapausten kan­

nalta (kuvattu kappaleessa 2.2). Kuvauksessa käytetään UML-kielen sekvenssikaavioita, jotka kuvaavat järjestelmän ajon aikaista toimintaa [Booch et ai. 1999]. Toiminnallisuudet on jaettu moneen pieneen osaan, joista jokainen toteuttaa vain tietyn pienen osan koko jär­

jestelmän toiminnallisuudesta. Vaikka käyttötapauskaaviossa (Kaavio 2) on kuvattu, että tilannetiedon muokkaus ja poisto käyttävät tilannetietojen suodatusta, lähdekoodin tasolla tämä suodatustoiminnallisuus on toteutettu jokaiseen paikkaan erikseen. Tästä johtuen staattisen rakenteen kuvaaminen ei ole mielestäni tarkoituksenmukaista, vaan dynaaminen kuvaus selventää rakennetta paremmin.

Kaavioissa on käytetty olioiden nimien tilalla ko. toiminnallisuuden toteuttavien PHP- sivujen nimiä sekä järjestelmän osien yleisnimiä, kuten tietokanta ja tiedostojärjestelmä.

Lisäksi lähetettyjen ja vastaanotettujen viestien nimet on tehty selventämään mitä kyseises­

sä kohdassa tapahtuu. Tässä joudutaan hieman soveltamaan UML-kieltä kuvausten selven­

tämiseksi, koska järjestelmän rakenne ei koostu olioista.

Lukijan käyttötapauksista ei ole omia sekvenssikaavioita, koska kirjautuminen on toteutet­

tu HTTP-palvelinohjelmiston avulla ja tilannetietojen listaus sekä suodatus (tilannetietojen haku on suodatuksen erikoistapaus) sisältyvät muihin käyttötapauksiin. Loput tärkeimmistä käyttötapauksista, eli julkaisijan osuus, on kuvattu.

Kappaleen lopussa on lisäksi yhteenveto PHP-sivujen toiminnallisuuksista. Se koostuu taulukoista, joissa on lueteltu PHP-sivujen nimet sekä lyhyt kuvaus sivun sisältämästä toi­

minnallisuudesta.

(18)

Julkaisija linsert.php : tietokanta

haal kävql nm^l p __ lisäysLoraaLe _ _ _

lisäaTisdat

haeTnnahti imat

^ tap ah tn raa Lista

ra

lisätty____________

lisääTiatol antaan.

- onnistui_____

tallennjiTieciastot

-QDflistui

itiedostojärjestelmä

Kaavio 4 Tilannetiedon lisäys sekvenssikaavio

Kaaviossa (Kaavio 4) on kuvattu uuden tilannetiedon lisäys järjestelmään. Ensin julkaisija hakee lisäyslomakkeen, joka sisältää mahdollisuuden liittää tilannetieto jo olemassa ole­

vaan tapahtumaan. Tämä lomake sisältää mahdollisuuden tallentaa tilannetietoon liittyen seitsemän tiedostoa. Tämä seitsemän tiedostoa on järjestelmän sisältämä rajoitus.

Seuraavaksi lisäyslomakkeen tiedot ja siihen liittyvät tiedostot lähetetään palvelimelle.

Järjestelmä tallentaa syötetyt tiedot tietokantaan ja tallentaa tietoihin liittyvät tiedostot tie­

dostojärjestelmään. Lopuksi julkaisija saa näytölleen ilmoituksen tietojen tallennuksen onnistumisesta.

(19)

tietokanta

:selectmodify.php :modify.php

haeRaiausLomal.e

tapahtum dLisla El

haeTapahtiumatFN

___rajaus Le make_____ haeValintalomake

on tilannetietojen lisäys ja suodatus käyttötapauksia vastaava

haaBatati itPedot

_rmatua;ia£iQt _

Kaavio 5 Tilannetiedon muokkaus sekvenssikaavio osa 1

Tilannetiedon muokkauksen kuvaus on jaettu kahteen osaan (Kaavio 5 ja Kaavio 6). En­

simmäisessä osassa (Kaavio 5) rajataan tapahtumien ja otsikkojen avulla tilannetietolistaa, josta muokattava tilannetieto valitaan, ja näytetään julkaisijalle tämä lista. Rajauksessa näytetään molemmat kieliversiot, joten järjestelmä joutuu hakemaan eri kieliversiot eri tietokantatauluista. Tietokannan rakenteeseen palataan tarkemmin myöhemmin (kappa­

leessa 2.3.4).

Valintalomakkeessa haetaan ensin otsikko, jotta voidaan hakea tietokannasta rajausten mu­

kainen lista tapahtumia. Otsikon haku tarvitaan, koska otsikko lähetetään kutsussa nume­

rona (otsikon tunniste) ja hakemisessa tarvitaan otsikkoa. Tämä toiminnan epäloogisuus johtuu osittain juuri alkuperäiseen järjestelmään tehdyistä muutoksista. Kaavion osa, jossa rakennetaan valintalomake, kuvaa myös tilannetietojen näyttö-ja suodatuskäyttötapauksia.

(20)

:changefile.php : tietokanta

: modif y2.php :tiedostojärjestelmä

Julkaisija

baaMuoLLausi omaka

munii outoinako. -

hapJiftrinsrarjvaihfcfll m

hapTipdo«:fnnTiiadof ^

li od ostoni] edot _ .tiedosto ny4ihtc> lorulle

waihdaliadQsla.

nnisra\/anhaTiednsrn

tallfinnaUjisiTiPiInstii

___ onnistui____

haftMuinl.l.ansI n m ai .e.

jjiupLI ausLomai.o___

rallftnnaMmirnLsftt

näuitahaiU.iTiotlot

___ tallon ne ttu___

Kaavio 6 Tilannetiedon muokkaus sekvenssikaavio osa 2

Sekvenssikaavion toisessa osassa (Kaavio 6) kuvataan toiminta, kun muokattava tilannetie­

to on jo valittu ja siihen tehdään muutoksia tietoihin sekä vaihdetaan yksi siihen liittyvä tiedosto. Ensin julkaisija valitsee muokkauslomakkeesta tiedoston, jonka haluaa vaihtaa ja

(21)

saa lomakkeen, jolla tiedoston voi vaihtaa. Liitettyään lomakkeeseen uuden tiedoston, jul­

kaisija lähettää sen järjestelmään, joka poistaa vanhan tiedoston tiedostojärjestelmästä, tallentaa uuden ja päivittää tietokannassa olevan viittauksen tiedostoon.

Tämän jälkeen julkaisija saa ilmoituksen tiedoston onnistuneesta vaihdosta ja tämän ilmoi­

tuksen alla on painike, josta päästään takaisin tilannetiedon muokkauslomakkeeseen.

Muokkauslomakkeeseen voi vielä tehdä loput tarvittavat muutokset ja lähettää ne. Lopuksi järjestelmä päivittää muokatut tiedot tietokantaan ja näyttää julkaisijalle sivun, jolla kerro­

taan muokkauksen onnistuneen.

Kaavio 7 Tapahtuman siirto arkistoon sekvenssikaavio

Kaaviossa (Kaavio 7) kuvataan tapahtuman siirto arkistoon, mutta sama sekvenssikaavio sopii myös tapahtuman siirtoon takaisin arkistosta. Tällöin arkistointitila muutetaan tieto­

kannassa pois päältä.

Julkaisija hakee aluksi lomakkeen, josta voi valita joko suomen- tai englanninkielisen ta­

pahtuman. Tämä siirretään kokonaisuudessaan arkistoon eli siihen ei voi enää lisätä tilan­

netietoja. Kun tapahtuma on valittu ja tieto lähetetty, järjestelmä muuttaa kaikkien tapah­

tumaan liittyvien tilannetietojen arkistointitilan päälle tai pois.

(22)

iselectdelete.php :delete.php Julkaisija

h^oR.siAi Kl nm^il p

ta p^ hlu m £U,i 5taD

IwTanahrlimatFN

tapahtumalijs^aEN,

__ raja lis Up maLe____

haoRaiaP itTiprlnt-

_rajatutJia.doJ: _

hap\/ahvkki|isl omål

__ q£sikkfi___

hapRaiafi itTiprlnt-

_rajatutjispiQj; _ xabyistuskcmal^e

Kaavio 8 Tilannetiedon poisto sekvenssikaavio osa 1

Myös tilannetiedon poisto on jaettu kahteen sekvenssikaavioon (Kaavio 8 ja Kaavio 9).

Poistaminen aloitetaan samalla tavalla kuin tilannetiedon muokkaus, mutta valintalomak- keen jälkeen näytetään samanlainen lomake uudestaan, jossa valinta tulee vahvistaa.

(23)

:tietokanta tiedostojärjestelmä Julkaisija

nniskakaiU-iTipHnt-

nnkfafriprioqfn 1

Toistetaan tiedoston ja hakemiston poisto liitteille 1-7 nnistaKIhHal emistn

QJJOislui.

orioistui.

_ tiStbtEoist£ttu__

Kaavio 9 Tilannetiedon poisto sekvenssikaavio osa 2

Toisessa osassa (Kaavio 9) julkaisija on vahvistanut poiston, jolloin järjestelmä hakee en­

sin tietokannasta tilannetietoon liittyvien tiedostojen nimet muistiin, jonka jälkeen kyseisen tilannetiedon voi poistaa tietokannasta. Tämän jälkeen järjestelmä käy läpi kaikki liitetie­

dostot ja poistaa ne sekä niihin liittyvän hakemiston. Lopuksi poistetaan liitteiden hakemis- torakenne, joka on kuvattu aiemmin (kappaleessa 2.3.2), ja näytetään julkaisijalle ilmoitus poiston onnistumisesta.

Taulukko 1 Lukijan käyttämien PHP-sivujen toiminnallisuudet

display.php Näyttää kaikki tilannetiedot tai niistä suodatetun listan käyttäjäl­

le.

menu.php Näyttää valikon, jolla voidaan suodattaa tilannetietoja otsikoiden mukaan.

displayold.php Näyttää arkistoidut tilannetiedot tai niistä suodatetun listan käyt­

täjälle.

(24)

search.php Tilannetietojen hakulomake.

Taulukko 2 Julkaisijan käyttämien PHP-sivujen toiminnallisuudet

insert.php Uuden suomenkielisen tilannetiedon tallennuslomake.

inserten.php Uuden englanninkielisen tilannetiedon tallennuslomake.

selectmodify.php Muokattavan tilannetiedon valintalistan suodatuslomake.

modify.php Muokattavan tilannetiedon valintalista.

modify2.php Tilannetiedon muokkauslomake.

changefile.php Tilannetietoon liittyvän tiedoston valintalomake.

selectdelete.php Poistettavan tilannetiedon valintalistan suodatuslomake.

delete.php Poistettavan tilannetiedon valintalista.

delete2.php Tilannetiedon poisto.

makeold.php Tapahtuman siirto arkistoon.

makenew.php Tapahtuman siirto takaisin arkistosta.

Vanhan järjestelmän lähdekoodin koko on 1950 koodiriviä laskettuna David A. Wheelerin SLOCCount-ohjelmalla (ohjelman tulokset liitteessä 1). Koodista hieman yli puolet eli 1031 koodiriviä on lukijan toiminnallisuutta ja loput 919 koodiriviä toteuttaa julkaisijan tarvitseman toiminnallisuuden. Koodirivien määrää lisää kieliversiot, koska samat toimin­

nallisuudet ovat sekä suomenkielisissä että englanninkielisissä sivuissa.

(25)

2.3.4 Tietokanta

Tilannetietoihin liittyviä tiedostoja lukuun ottamatta kaikki julkaisijan tallentamat tiedot ovat tietokannassa. Tietokannassa oli aluksi vain yksi taulu kieliversiota kohti, mutta jär­

jestelmän oltua käytössä jonkin aikaa huomattiin, että tarvittiin otsikkojen muokkaamista.

Tämä vaati järjestelmän eri osien muokkaamista, sillä otsikoiden nimet oli kirjoitettu suo­

raan lähdekoodiin. Tämän takia päätettiin, että olisi parempi, jos otsikoita pystyttäisiin muokkaamaan hieman helpommin. Näin ollen tehtiin tietokantaan uusi taulu, joka sisälsi otsikoiden nimet. Otsikoita ei kuitenkaan voi muokata suoraan käyttöliittymän kautta.

luokat

otsikko-on

aika

otsikko nimi?

tiedl

tapahtumat

tied:

tiedé

nimi 5

nimi 3

Kaavio 10 E/R-kaavio järjestelmän käyttämästä tietokantarakenteesta

(26)

tumat ja luokat. Englanninkielisille tilannetiedoille on omat vastaavat taulut, joiden nimet ovat events ja classes.

Järjestelmässä oleva tapahtumat-tanhx sisältää kaikki tilannetietoihin liittyvät tiedot. Jo tämän taulun nimi on epälooginen sillä se sisältää tilannetietoja, jotka liittyvät johonkin tapahtumaan. Jokaisella tilannetiedolla on yksilöllinen avain (id), jolla tilannetietoon voi viitata. Muut tiedot ovat tapahtuman nimi (tapahtuma), mihin luokkaan kyseinen tilanne- tieto liittyy (otsikko), julkaisuaika (aika) ja tieto siitä, onko kyseinen tieto arkistoitu (van­

ha). Lisäksi taulussa on paikka seitsemälle tiedostonimelle (tiedl-tiedT) ja viitatun tiedos­

ton kuvauksille (nimil-nimiT). Tämä menettely asettaa rajoitteen yhteen tilannetietoon liit­

tyvien tiedostoiden maksimimäärälle.

Luokat-ia\i\u sisältää tilannetietojen eri luokat (nimi) ja niiden yksilölliset avaimet (id).

Tapahtumat-taulussa ei kuitenkaan viitata luokkiin niiden yksilöllisellä avaimella vaan nimellä. Tämä on epäloogista, mutta näin säästyttiin muokkaamasta kaikkia järjestelmän osia, kun luokat-iauhx jouduttiin lisäämään.

(27)

3 TEORIATAUSTAA PARANNUKSILLE

3.1 Yleistä

Tässä kappaleessa käydään läpi aineistoa, jota käytetään parannuksien suunnittelussa ja toteutuksessa. Ensin käydään läpi WWW-ohjelmoinnin kehitystä, erikoispiirteitä ja mihin pitää erityisesti kiinnittää huomiota. Lopuksi käydään läpi myös perinteiseen ohjelmointiin liittyviä asioita ja keskitytään etenkin tarkastelemaan juuri olemassa olevan järjestelmän parantamista sekä suunnittelumalleja.

3.2 WWW-ohjelmointi

Ensimmäinen toteutus WWW:stä (World Wide Web) tehtiin vuonna 1990 ja toteuttajana oli Tim Bemers-Lee [www.w3.org 2005]. Seuraavan 15 vuoden aikana sen tekniikka on kehittynyt paljon ja käsite WWW-ohjelmointi on muuttunut samalla. Aluksi sivuilla oleva tieto oli staattista ja käyttäjiä vähän, eli WWW-ohjelmointi oli lähinnä HTML-kielellä ole­

vien dokumenttien kirjoittamista. Ajan kuluessa käyttäjämäärät ja samalla tiedon määrä on kasvanut, jonka takia on tarvittu monipuolisempia tapoja toteuttaa sivustoja. Dynaamisten sivustojen toteuttamiseen on useita tapoja, joita on tutkittu sekä vertailtu toisiinsa [Vajda

1998; Malinowski & Wilamowski 2001].

Viimeisen viiden vuoden aikana WWW-ohjelmoinnissa on keskitytty mm. parempaan yh­

teensopivuuteen, monikielisyyteen, uudelleenkäyttöön ja tietoturvaan [Tilley 2003]. Myös oliopohjaisuutta ja siihen liittyviä eri menetelmiä pidetään hyvinä toimintatapoina [Coda et ai. 1998; Gellersen & Gaedke 1999], Näihin keskitytään myös FINRI-järjestelmään tehtä­

vissä parannuksissa.

Toiminnallisuutta voidaan toteuttaa sekä palvelin- että asiakasohjelmistossa riippuen oh­

jelmiston tarpeista. FINRI-järjestelmän toteutukseen valittu PHP-kieli on palvelinohjelmis­

toon sisällytetty kieli, joka suoritetaan palvelimella. Tällä päätöksellä on haettu mahdolli­

simman hyvää yhteensopivuutta eri asiakasohjelmistojen kanssa. Jos käytettäisiin toista, asiakkaan ympäristössä suoritettavaa kieltä, olisi toiminnallisuuksien toteuttaminen vaike­

ampaa. WWW-selaimilla ja käyttöjärjestelmillä on eroavaisuuksia näiden kielien kohdalla,

(28)

mowski 2001],

Monikielisyys sekä uudelleenkäyttö liittyvät osittain toisiinsa, koska eri kieliversiot ovat saman toiminnallisuuden uudelleenkäyttämistä eri kielillä. Kuitenkin uudelleenkäytöllä on myös laajempi tarkoitus, kuten FINRI-järjestelmän tapauksessa järjestelmän käyttö muiden dokumenttien julkaisemiseen. Tarkoituksena on, että ulkonäön ja sivuilla olevan staattisen tiedon muokkaus olisi mahdollisimman helppoa.

PHP-kieli sisältää piirteitä, joilla olio-ohjelmointia voidaan toteuttaa. Tämän hetkisen pal­

veluntarjoajan palvelinohjelmisto sisältää PHP-kielestä version 4 (PHP4), jolla olio- ohjelmointi onnistuu, mutta tuki ei ole täydellinen. Uudempi versio 5 (PHP5) sisältää pa­

remman tuen olioille. Suurin puute vanhemmassa versiossa on muuttujien ja metodien nä­

kyvyyden rajoittaminen. PHP4:ssä näkyvyys on sama eli kaikki ovat julkisia ja näin ollen olioiden muuttujia voidaan muokata myös suoraan [Zandstra 2004], Tämä on vastoin yhtä keskeistä olio-ohjelmoinnin periaatetta, mutta johtuen nykyisen palveluntarjoajan rajoit­

teesta FINRI-järjestelmän parannukset tehdään yhteensopiviksi PHP4 kanssa.

Koska WWW-järjestelmien tiedetään olevan yleisesti turvattomia [Rubin & Geer 1998;

Joshi et ai. 2001], tulee tietoturvaan keskittyä jo suunnitteluvaiheessa. Myös juuri PHP- kielelle tarkoitettuja tietoturvaan liittyviä artikkeleja on runsaasti tarjolla [Dimov 2001;

Coggeshall 2003; Malcolm 2003] ja niissä mainitut yleiset virheet käydään läpi toteutus­

vaiheessa. Tärkeimpiä asioita artikkeleiden perusteella on varmistaa, ettei käyttäjä pääse lukemaan lähdekoodia tai syöttämään sellaisia arvoja, jotka saavat järjestelmän toimimaan väärin, esim. tyhjentämään koko tietokannan.

Selvin ominaispiirre WWW-ohjelmoinnille on sen tilattomuus eli sivua avatessa ympäristö on aina alkutilassa. Jokainen sivu on periaatteessa ohjelma, joka palauttaa joitakin arvoja, jotka sitten annetaan seuraavalle ohjelmalle parametreinä. Tästä johtuen sivut joutuvat en­

simmäisenä lukemaan koko järjestelmää koskevat asetukset, tämän jälkeen edellisen sivun palauttamat arvot ja näiden perusteella päättelemään, mitä edellisellä sivulla tehtiin sekä mitä seuraavaksi pitäisi tehdä.

(29)

3.3 Lähdekoodin parantaminen

Nykyisen FINRI-järjestelmän toiminnallisuutta parannetaan siten, että käyttäjät näkevät mahdollisimman vähän muutoksia nykytilaan verrattaessa. Tähän liittyy käsite refaktoroin- ti, joka on järjestelmän sisäisen toiminnallisuuden parantamista siten, ettei ulkoinen toi­

minnallisuus muutu [Fowler et ai. 1999], Samaan aiheeseen liittyy myös koodin haju eli menetelmä, jolla etsitään lähdekoodista sellaisia kohtia, jotka ovat tunnetusti huonoa oh­

jelmointitapaa. Koodin hajun toimivuus riippuu ihmisestä, joka tarkastaa lähdekoodin ja näin ollen ei ole täysin yksiselitteinen mittari lähdekoodin toimivuudelle [Mäntylä et ai.

2003; Mäntylä et ai. 2004], Näitä menetelmiä voidaan käyttää apuna uuden järjestelmän toteutuksessa.

On mahdollista, että järjestelmään tehtävät muutokset ovat kuitenkin niin suuria verrattuna järjestelmän kokoon, että on kannattavampaa aloittaa alusta. Nykyisen järjestelmän lähde­

koodi on todella sekavaa, koska sen sisäinen rakenne ei ole jaettu edes funktioihin ja eri sivut sisältävät paljon paikasta toiseen kopioitua lähdekoodia. Alusta aloitettaessa voidaan kuitenkin käyttää nykyisen järjestelmän toiminnallisuuden kuvausta (kuvattu kappaleessa 2) apuna. Lisäksi huonoja hajuja [Fowler et ai. 1999] voidaan käyttää tarkistettaessa uuden järjestelmän rakennetta.

Suunnitteluvaiheessa perehdytään myös suunnittelumalleihin [Gamma et ai. 1995] ja eten­

kin niiden käyttöön PHP-kielessä [Zandstra 2004], Suunnittelumallit ovat periaatteessa päinvastainen menetelmä kuin koodin haju, eli siinä yritetään soveltaa hyväksi todettuja suunnittelumalleja järjestelmän rakenteeseen.

(30)

4.1 Yleistä

Tässä kappaleessa keskitytään järjestelmään tehtävien parannusten suunnitteluun. Suunnit­

telussa käytetään apuna järjestelmän nykytilan kuvausta (kuvattu kappaleessa 2), nykyisen järjestelmän ylläpidossa saatua asiantuntemusta sekä julkaisijoilta saatua palautetta. Lisäk­

si suunnittelussa otetaan huomioon ilmennyt tarve saada järjestelmä helpommin muokattua muuhun vastaavanlaiseen käyttöön.

4.2 Tärkeimmät parannusten kohteet

Edellä tehdyn järjestelmän nykytilan kuvauksen perusteella selkein parannuskohde on tie­

tokantarakenne. Alkuperäinen tietokantarakenne koostui ainoastaan yhdestä taulusta kieli­

versiota kohden ja näin ollen rakenne on ollut hyvin rajoittunut ja sekava. Myöhemmin lisätyt Luokat- ja C/asses-taulut ovat sekoittaneet rakennetta entisestään. Näistä syistä joh­

tuen koko tietokantarakenne vaihdetaan.

Toinen parannuskohde, joka toteutetaan, on siirtyminen lähdekoodissa oliopohjaisuuteen.

Tämä päätös johtuu osittain tietokantarakenteen täydellisestä vaihdosta, koska kyseisen muutoksen takia kaikki tietokantaa käyttävät järjestelmän osat joudutaan joka tapauksessa korjaamaan. Lisäksi tällä hetkellä järjestelmän toiminnallisuudet sijaitsevat erillään toisis­

taan, eikä rakenteesta saa kunnon kokonaiskuvaa.

Kolmas parannuskohde on tiedostojärjestelmän rakenne ja ulkoasun muokattavuus. Tie­

dostojärjestelmää muokataan yksinkertaisemmaksi ja tähän liittyvät myös kieliversiot ja ulkoasun muokkaus yleensä.

Kaikkiin näihin parannuskohteisiin liittyy myös lähdekoodin ja tietokannan muuttujien yms. nimeäminen. Tällä hetkellä lähdekoodissa ja tietokantarakenteessa on joitakin suo­

menkielisiä nimityksiä, esim. Luokat-iauhx. Ymmärrettävyyden takia olisi parasta päästä niistä kokonaan eroon. Tästä johtuen uudessa rakenteessa ja lähdekoodissa käytetään aino­

astaan englanninkielisiä nimityksiä.

(31)

4.3 Parannukset

4.3.1 Tietokantarakenne

Hyvien suunnitteluperiaatteiden mukaan [Ullman & Widom 2002]:

• tietokannan elementtien tulisi vastata todellisuutta

• pitäisi välttää toistoa

• rakenne tulisi pitää mahdollisimman yksinkertaisena

• valita juuri oikeat yhteydet

• valita oikean tyyppiset elementit

Vanhan rakenteen osat, kuten tapahtuma, otsikko, aika jne., vastaavat todellisuutta, vaik­

kakin niiden nimeämisessä ja elementtien valinnassa on parantamista. Näin ollen vanhoja rakenteen elementtejä voidaan käyttää pohjana uuden suunnittelulle.

Ensin täytyy päättää, mitkä elementit toistuvat useasti eri paikoissa. Rakenteen selvyyden takia kannattaa eri kieliversiot laittaa samoihin tietokantatauluihin ja eritellä ne lisäämällä jokaiseen viittaus siitä, mihin kieliversioon kyseinen tieto kuuluu. Tämän perusteella en­

simmäinen taulu olisi Language eli eri kieliversiot. Kielellä tarvitsee olla nimi (name) ja viittausta varten tunniste (id).

Kaavio 11 E/R-kaavio Zangwage-taulusta

Järjestelmän keskeinen käsite on tilannetieto, joiden jakelemista varten järjestelmä on kehi­

tetty. Toinen taulu on siis Information, joka sisältää tilannetietoon liittyvät asiat: tunniste (id), julkaisuaika (time), tila (status), luokka (class), tapahtuma (event) sekä kieli (langu­

age). Tilannetietojen tilaa (status) käytetään määrittämään, onko kyseinen tilannetieto jo julkaistu. Viittaukset tilannetietoon liittyviin tiedostoihin eivät kuulu tähän tauluun, vaan

toiminnallisuuden kannalta on helpompaa, jos tiedostoista viitataan tilannetietoon.

(32)

Information

language

Kaavio 12 E/R-kaavio Information-taulusta

Tilannetietoihin liittyvistä tiedoista toistuvia ovat luokka ja tapahtuma. Tämän perusteella tehdään kaksi taulua: Class ja Event. Molemmilla on tunniste (id), nimi (name) sekä kieli (language). Lisäksi tapahtumilla (Event) on myös tila (status), jota käytetään samalla taval­

la kuin vanhassa järjestelmässä eli ilmoittamaan onko kyseinen tapahtuma arkistoitu.

language

Kaavio 13 E/R-kaavio Ctos-taulusta

language

Event

status

Kaavio 14 E/R-kaavio £Vezi/-taulusta

Jotta tilannetietokohtaisesta tiedostojen maksimimäärästä päästään eroon, tehdään tietokan­

taan taulu File, joka sisältää tiedostonimen (filename), kuvauksen (description), tunnisteen (id) sekä viittauksen siitä, mihin tilannetietoon tiedosto liittyy (information). Kaikkien tiet­

tyyn tilannetietoon liittyvien tiedostoiden haku on yksinkertaista, koska tämä tieto on tal­

lennettu F//e-tauluun.

(33)

description

File

information

Kaavio 15 E/R-kaavio F/Ve-tauIusta

Lopuksi edellä mainitut kaaviot yhdistetään ja saadaan kuvaus uudesta tietokantarakentees­

ta. Rakenne on edelleen yksinkertainen, mutta kuitenkin vanhaa rakennetta joustavampi.

Language

"Language

"Language

Has-Language

Class Event

status

Has-cLass Has-event

status

Information class

language event

Belongs-to

filename

description information

Kaavio 16 E/R-kaavio suunnitellusta tietokantarakenteesta

(34)

hyviin suunnitteluperiaatteisiin, vaikuttaa se sopivalta tähän tarkoitukseen. Se sisältää sa­

mat tiedot kuin vanha rakenne, on yksinkertainen eikä sisällä turhaa toistoa. Taulujen väli­

set yhteydet sekä elementtityypit on suunniteltu sen perusteella, mitä järjestelmän toimin­

nallisuus vaatii. Samalla on myös varmistettu, että rakenteet ovat Boyce-Coddin normaa­

limuodossa (BCNF), eli attribuuteilla ei ole riippuvuuksia muihin kuin avain attribuuttiin [Ullman & Widom 2002]. Palaamme myöhemmin (kappaleessa 5.2.1) siihen, tarvitseeko suunnitelman mukaiseen rakenteeseen tehdä muutoksia toteutusvaiheessa.

4.3.2 Olio-ohjelmointi ja järjestelmän rakenne

Siirryttäessä järjestelmässä oliopohjaisuuteen täytyy järjestelmän rakenne suunnitella uu­

delleen. Tässä kappaleessa käydään läpi suunnitelma, jonka pohjalta järjestelmän rakenne toteutetaan. Järjestelmän toiminnot pysyvät pitkälti samoina kuin vanhassa järjestelmässä, mutta ne jaetaan olio-ohjelmointiparadigman mukaisesti siten, että samoihin asioihin liitty­

vät toiminnallisuudet ja muuttujat ovat samoissa luokissa.

Järjestelmän jako eri osiin eli luokkiin perustuu osittain sen tietokantarakenteeseen (kuvat­

tu kappaleessa 4.3.1). Tietokannassa tiedot on jaettu loogisiin osiin, joita voi käyttää myös luokkarakenteessa. Nämä osat ovat toiminnallisuudeltaan hyvin samankaltaisia, joten jotta vältyttäisiin toistolta, toteutetaan yhteiset toiminnallisuudet abstraktiin luokkaan. Kun tie­

tokannan eri tauluissa olevat osat ovat tämän abstraktin luokan aliluokkia, ne perivät yhtei­

sen toiminnallisuuden.

Yhteisiä toiminnallisuuksia ovat tietyn tietokantarivin lisäys, valinta, poisto sekä attribuut­

tien arvojen luku ja muokkaus. Lisäksi kaikista tauluista täytyy saada lista, jota voidaan tarvittaessa myös suodattaa. Tätä listaustoimintoa tarvitaan useimmissa käyttöliittymän näkymissä.

Eroa aliluokkien toiminnallisuudessa aiheuttavat tiedon tallennukseen käytettävät taulut sekä se, mitä tietoa tauluissa on. Nämä eroavaisuudet toteutetaan asettamalla kyseiset tie­

dot muuttujiin luokan konstruktorissa silloin, kun luokan ilmentymä luodaan. Lisäksi File- luokan täytyy toteuttaa omat lisäys-, muokkaus- ja poistometodit, koska nämä metodit käyttävät tietokannan lisäksi myös tiedostojärjestelmää tiedon tallentamiseen.

(35)

Jotta tietokantaliittymä voitaisiin tarvittaessa vaihtaa, toteutetaan tietokannan ja tietokantaa käyttävien luokkien väliin oma luokka, joka tarjoaa järjestelmälle pysyvän ja yksinkertai­

sen liittymän tietokantaan. Tärkeimmät toiminnot, jotka tietokantaan tarvitaan, ovat rivin lisäys, haku, muokkaus ja poisto. Näistä muokkaus ja poisto palauttavat joko arvon tosi tai epätosi, riippuen siitä onnistuiko tietokantakysely vai ei. Lisäys palauttaa lisätyn rivin tun­

nisteen ja hakulistan halutuista tietokantariveistä rivi kerrallaan.

Käyttöliittymään tarvittavat näkymät toteutetaan kahteen luokkaan, joista toinen on lukijaa varten ja toinen julkaisijaa varten. Käyttöliittymän näkymät on tarkoitus toteuttaa siten, että näkymien paikkaa sivulla on mahdollisimman helppo siirtää. Tarkoituksena olisi, että esim. tiedostojen listaus lukijaa varten voitaisiin sijoittaa sivulle lisäämällä seuraava lähde­

koodi haluttuun paikkaan sivua:

<?php

$uicomponent = new UI();

$uicomponent->show!nformationList();

?>

Järjestelmän yhteiset asetukset, joita ei voi muokata käyttöliittymän läpi (esim. tietokannan käyttäjät ja salasanat yms.), sijoitetaan omaan luokkaansa. Tämä luokka sisältää vain suo­

raan lähdekoodiin sijoitetut muuttujat sekä niiden arvon lukemiseen tarkoitetun metodin.

Muuttujien arvoa ei pysty muuttamaan muuttamatta lähdekoodia. Kirjan [Zandstra 2004]

mukaan asetusten käyttö pitäisi olla mahdollisimman yksinkertaista, koska selainkäyttöliit- tymällä toteutetut järjestelmät joutuvat lukemaan asetuksensa uudestaan joka kerta, kun niitä tarvitseva sivu ladataan. Tähän luokkaan tallennettuja asetuksia ei jouduta muokkaa­

maan usein, mutta järjestelmä lukee ne usein.

(36)

+setAttribute(name:string,value:string): boolean

•fdeleteO s boolean

Configuration-luokka sisältää järjestelmän asetuksia, joita ei voida muutaa järjestelmän kautta. Muutokset tulee tehdä suoraan luokan lähdekoodiin.

File-luokka sisältää omat totetutukset create-, setAttribute- ja delete-funk- tioista, koska ne käyttävät tietokannan lisäksi myös tiedostojärjestelmää tie­

don tallentamiseen.

+shovLanguageList() +shovEventList() +shovClassList() +shovInformationList() -mseLanguage(id:int): boolean -language: int

AdminUI-luokka tarkistaa jokaisen funktion alussa, että kyseessä on sallittu IR-osoite. Jollei kyseistä IR- osoitetta ei ole sallittu, keskeytetään suoritus ja palautetaan epätosi.

•fqetValue(name:string): string -dbHost: string {frozen) -dbName: string {frozen}

-dbUser: string {frozen}

-dbPassvord: string {frozen}

-dbAdminUser: string {frozen) -dbAdminPassword: string {frozen}

-allowedAdminIPs: string {frozen}

Configuration -♦■connect 0: boolean

+insertQuery(query-.string): int +selectQuery(query:string): boolean 4-fetchNextRovO: array

+updateQuery(query:string): boolean +deleteQuery(query:string): boolean +disconnect()

-link: resource -results: resource

DatabaseAccess

+showAddInformationForm(): boolean +shovModifyInformationForm(): boolean +showDeleteInformationForm(): boolean +shovAddEventForm(): boolean +shovModifyEventForm(): boolean +shovDeleteEventForm(): boolean +shovAddFileForm(): boolean +shovModifyFileForm(): boolean +shovDeleteFileForffi(): boolean

AdminUI +create(attributes:array): int +select(id:int): boolean

+getAttribute(name:string): string

+setAttribute(name:string,value:string): boolean -♦-update (): boolean

♦delete(): boolean

♦qetArrayOfAll(filter:string): array -attributes: array

-attributeTypes: array -table: string

Databaseitem

Kaavio 17 Luokkakaavio suunnitelman mukaisesta jäijestelmän rakenteesta

Luokkakaavio (Kaavio 17) kuvaa edellä suunniteltua rakennetta. Rakenne ei ole täydelli­

nen ja sitä luultavimmin muutetaan toteutusvaiheessa. Kaaviossa on kuitenkin kuvattu tär­

keimmät riippuvuudet ja toiminnallisuudet.

Toteutusvaiheessa täytyy kuitenkin huomioida myös nykyisen palveluntarjoajan asettamat vaatimukset (mainittu kappaleessa 3.1). Vanhempaa PHP4:ä käytettäessä kaikki muuttujat

(37)

ovat julkisia eli niitä voidaan käyttää suoraan metodien ohi. Tämä voisi aiheuttaa ongel­

mia, jos kyseessä olisi suurempi järjestelmä ja toteutukseen osallistuisi monta tekijää. Nyt toteutettavan järjestelmän kannalta tämän ei pitäisi olla ongelma, koska toteuttajia on vain yksi. Ongelma on kuitenkin tiedostettava ja tutkittava, onnistuisiko uudemman version käyttö jollain muulla palveluntarjoajalla.

4.3.3 Luokkien tarkempi kuvaus

Tässä kappaleessa käydään läpi tarkemmin, miten toiminnallisuus on jaettu uusien luokki­

en kesken. Tämä sanallinen kuvaus tarkentaa eri luokkien vastuunjakoa ja toimii rakennus­

ohjeena sekä muistilistana toteutusvaiheessa.

Configuration-luokka sisältää järjestelmän asetuksia. Koska asetuksia muokataan harvoin, mutta käytetään usein, on asetukset laitettu suoraan lähdekoodiin. Luokan ainoa metodi on getValue(name), joka palauttaa parametrina annetun asetuksen arvon. Luokan sisältämät vakiot ovat:

dbHost - Tietokantapalvelimen osoite

database - Käytetyn tietokannan nimi

dbUser ja dbPassword - Tietokannan lukemiseen tarkoitettu käyttäjätunnus ja sen salasana

dbAdminöser ja dbAdminPassword - Tietokannan muokkaamiseen tarkoitettu käyttäjätunnus ja sen salasana

allowedAdminIPs - IP-osoitteet, joista tietokannan muokkaus on sallittua

DatabaseAccess-luokka sisältää yksinkertaistetun liittymän tietokantaan. Tätä luokkaa voi­

taisiin pitää adapteri (adapter) suunnittelumallin mukaisena. Luokka ei kuitenkaan suora­

naisesti toimi adapterina kahden luokan välillä, vaan se tarjoaa oliopohjaisen yhteyden käytettyyn tietokantaan. Jos tietokanta vaihdetaan, tulee tämä luokka ohjelmoida uudes­

taan. Luokka sisältää seuraavat metodit:

(38)

linkin sisäiseen muuttujaan link ja palauttaa true, jos yhteyden avaus onnistui.

insertQuery(query) - Käytetään lisäämään rivejä tietokantaan. Ottaa parametrina li­

säykseen käytettävän SQL-lausekkeen ja palauttaa lisätyn tietueen tunnistenume­

ron.

selectQuery(query) - Hakee tietokannasta parametrina annetun SQL-lausekkeen mukaiset rivit. Tallentaa vastaukset luokan sisäiseen muuttujaan results ja palauttaa true, jos haku onnistui.

fetchNextRow() - Palauttaa selectQuery-melodiMa saadusta vastauksesta seuraavan rivin ja palauttaa sen joukkona (array). Jollei seuraavaa riviä ole, palauttaa tyhjän joukon.

updateQuery(query) - Päivittää tietokantaa parametrina olevan SQL-lauseen mu­

kaan. Palauttaa true, jos päivitys onnistuu.

deleteQuery(query) - Poistaa tietokannasta rivejä parametrina olevan SQL-lauseen mukaan. Palauttaa true, jos poisto onnistuu.

disconnectQ - Katkaisee yhteyden tietokantaan.

Abstrakti DatabaseltemAuokka sisältää tietokannassa olevien tietorakenteiden käsittelyyn tarvittavat metodit. Tätä luokkaa ei käytetä suoraan, vaan käytetään sen aliluokkia: Infor­

mation, Event, Class Language ja File. Abstraktiluokka sisältää seuraavat metodit:

• Aliluokkien konstruktorit asettavat sisäiset muuttujat table ja attributeTypes, jotka ovat taulun nimi sekä taulun sisältämien attribuuttien tyypit. •

create(attributes) - Ottaa parametrina attribuuttien arvot sisältävän joukon. Attri­

buuttien tyypit tarkistetaan, arvot sisältävä joukko tallennetaan sisäiseen muuttu­

jaan attributes ja tallennetaan tietokantaan. Palauttaa tehdyn tietokantarivin tunnis­

tenumeron tai -1, jos tallennus epäonnistui.

(39)

selected) - Hakee tietokantarivin sen tunnistenumeron perusteella ja asettaa saadun arvojoukon sisäiseen muuttujaan attributes.

getAttribute(name) - Palauttaa parametrina annetun attribuutin arvon.

setAttribute(name,value) - Ottaa parametrina attribuutin nimen ja sen uuden arvon.

Muutettavan attribuutin arvo tarkistetaan ennen asettamista sisäiseen muuttujaan.

Palauttaa true, jos tarkistus onnistui. Tietokantarivin tunnistenumeroa ei voi muo­

kata. Tallentaminen tietokantaan ei tapahdu vielä.

update() - Päivittää sisäiset arvot tietokantaa ja palauttaa true, jos päivitys onnistui.

delete() - Poistaa valittuna olevan tietokantarivin tietokannasta.

get Array Of All (filter) - Ottaa parametrina SQL-lausekkeeseen sopivan suodattimen (esim. ”WHERE id< 10 ORDER BY time”) ja palauttaa suodatetun joukon kyseisiä olioita.

Databaseitem-luokan aliluokka File toteuttaa omat versiot seuraavista metodeista:

create(attributes) - Kuten Databaseitem, mutta tallentaa attribuuttina saadun tie­

doston oikeaan paikkaa ja muuntaa tiedostonimen muotoon <id>_<filename>, esim. 31.1.2005 julkaistu, tunnistenumeron 323 saanut tilannetieto.pdf tallennetaan nimellä 2005/01 /31 Z323_tilannetieto.pdf. Tiedostojärjestelmän rakenne pysyy sel­

vänä ja samaan hakemistoon voi tallentaa tiedostoja, joilla on alun perin sama nimi.

setAttribute(name, value) - Kuten Databaseitem, paitsi silloin kun vaihdetaan attri­

buuttia filename. Tällöin joudutaan tallentamaan uusi tiedostoja poistamaan vanha.

deleteQ - Kuten Databaseitem, mutta poistaa myös tiedoston.

Käyttöliittymää varten toteutetaan luokka UI ja sen aliluokka AdminUI. Niiden sisältämät metodit toimivat käyttöliittymän rakennuspalikoina, jotka voidaan sijoittaa haluttuun koh­

taan sivua. Ul-luokka sisältää seuraavat metodit:

(40)

sää sivulle kielen valintaan tarvittavan muuttujan.

showEventList() - Näyttää listan, jolla voidaan rajata näytettävät tilannetiedot ta­

pahtuman mukaan, ja lisää sivulle tähän suodatukseen liittyvän muuttujan.

showClassList() - Näyttää listan, jolla voidaan rajata näytettävät tilannetiedot luo­

kan mukaan, ja lisää sivulle tähän suodatukseen liittyvän muuttujan.

showInformationList() - Näyttää tilannetietolistan, joka on suodatettu asetettujen suodattimien mukaan. Julkaisemattomassa tilassa olevia tilannetietoja ei näytetä lukijalle.

useLanguage(id) - Asettaa luokan sisäisen muuttujan language, jota järjestelmä käyttää muiden metodien tuottamiin käyttöliittymän osiin. Lisäksi lataa erillisen tiedoston, jossa sijaitsevat sivuilla tarvittavien staattisten tietojen kieliversiot. Tä­

hän asiaan palataan vielä myöhemmin (kappaleessa 4.3.4).

Ul-luokan AdminUI-aliluokka sisältää julkaisijalle näytettävien muokkaussivujen osat.

Kaikki AdminUI-luokan metodit tarkistavat jokaisen vaiheen alussa, onko käyttäjän IP- osoite sallittujen osoitteiden listalla (lista Configuration-luokassa). Jollei osoite ole sallittu, metodi lopettaa suorituksensa ja palauttaa false. Koska nämä muokkaukseen liittyvät toi­

minnot ovat moniosaisia ja WWW-ohjelmistot eivät tiedä, missä vaiheessa kyseinen toi­

minto aina on, joudutaan sivujen kutsuissa asettamaan tilamuuttuja. Tämä tilamuuttuja kertoo metodille, missä vaiheessa toimintoa ollaan, esim. ollaanko lisäämässä tilannetietoa tietokantaan vai liittämässä juuri lisättyyn tilannetietoon uutta tiedostoa. Jos toiminto on moniosainen, sen täytyy osien välissä asettaa sivuille tieto siitä, mihin vaiheeseen seuraa- vaksi siirrytään. AdminUI-luokka sisältää seuraavat metodit:

• showAddInformationForm() - Tilannetiedon lisäyslomake. Sisältää seuraavat vai­

heet:

1. Näyttää lisäyslomakkeen. Käyttäjä täyttää lomakkeen tiedot ja siirtyy seuraa- vaan vaiheeseen.

(41)

2. Lisää tiedot tietokantaan (jättää tilannetiedon tilamuuttujan julkaisemattomaan tilaan) ja näyttää tilannetietoon liitettävän tiedoston lisäyslomakkeen. Käyttäjä lisää tiedoston sekä sen kuvauksen ja siirtyy seuraavaan vaiheeseen. Yksi tie­

dosto on lisättävä.

3. Lisää tiedoston sekä sen tiedot tietokantaan ja näyttää uuden tiedoston lisäys- lomakkeen tai vaihtoehtona lisäämisen lopettamisen. Jos käyttäjä lisää tiedos­

ton, palataan uudestaan vaiheeseen 3. Muuten siirrytään seuraavaan vaiheeseen.

4. Muutetaan tilannetiedon tilamuuttuja julkaistuun tilaan ja näytetään ilmoitus li­

säyksen onnistumisesta.

showModifyInformationForm() - Tilannetiedon muokkauslomake. Sisältää seuraa- vat vaiheet:

1. Näytetään tilannetietolista, josta käyttäjä valitsee muokkauksen kohteen. Siirry­

tään seuraavaan vaiheeseen.

2. Näyttää muokkauslomakkeen. Käyttäjä muokkaa tietoja ja siirtyy vaiheeseen 5.

Vaihtoehtoisesti käyttäjä haluaa muokata tiedostoa, jolloin siirrytään seuraa­

vaan vaiheeseen.

3. Näytetään tiedoston muokkauslomake. Muokkauksen jälkeen siirrytään seuraa­

vaan vaiheeseen.

4. Muokataan tiedostoa tai sen tietoja. Palataan vaiheeseen 2.

5. Tallennetaan muutokset tietokantaan ja näytetään ilmoitus muokkauksen onnis­

tumisesta.

showDeleteInformationForm() - Tilannetiedon poistolomake. Sisältää seuraavat vaiheet:

1. Näytetään tilannetietolista, josta käyttäjä valitsee poiston kohteen. Siirrytään seuraavan vaiheeseen.

2. Näytetään tilannetietoon liittyvät tiedot ja varmistetaan poisto. Jos käyttäjä vah­

vistaa poiston, siirrytään seuraavaan vaiheeseen, muuten vaiheeseen 4.

(42)

Näytetään käyttäjälle ilmoitus, jossa kerrotaan tilannetiedon poiston onnistumi­

sesta. Suoritus loppuu.

4. Näytetään käyttäjälle ilmoitus poiston peruuntumisesta.

shoxvAddEventForm() - Tapahtuman lisäyslomake. Sisältää seuraavat vaiheet:

1. Näytetään lisäyslomake. Käyttäjä täyttää kentät ja siirtyy seuraavaan vaihee­

seen.

2. Tiedot tallennetaan tietokantaan. Näytetään ilmoitus tallennuksen onnistumises­

ta.

showModiJyEventForm() - Tapahtuman muokkauslomake. Sisältää seuraavat vai­

heet:

1. Näytetään lista tapahtumista, josta käyttäjä valitsee muokkauksen kohteen. Siir­

rytään seuraavan vaiheeseen.

2. Näytetään muokkauslomake (sisältää tapahtuman siirron arkistoon). Käyttäjä muokkaa tietoja ja siirtyy seuraavaan vaiheeseen.

3. Tallennetaan muutokset tietokantaan ja näytetään onnistumisilmoitus käyttäjäl­

le.

showDeleteEventForm() - Tapahtuman muokkauslomake. Sisältää seuraavat vai­

heet:

1. Näytetään lista tapahtumista, josta käyttäjä valitsee poistettavan. Siirrytään seu­

raavan vaiheeseen.

2. Näytetään tapahtuman tiedot ja varmistetaan poisto. Jos käyttäjä vahvistaa pois­

ton siirrytään seuraavaan vaiheeseen, muuten vaiheeseen 4.

3. Poistetaan tapahtuman tiedot tietokannasta. Näytetään käyttäjälle ilmoitus, jossa kerrotaan poiston onnistumisesta. Suoritus loppuu.

4. Näytetään käyttäjälle ilmoitus poiston peruuntumisesta.

Viittaukset

LIITTYVÄT TIEDOSTOT

Nykyään on myös paljon muita erilaisia ratkaisuja, joissa AV-logiikka ohjaa RS-232- sarjaliitännällä esimerkiksi erilaisten väylien kautta sähkökeskusta.. Väyläohjaus onkin

Moottoritehon laskemisen jälkeen lasketaan akustolta vaadittava teho, joka on taajuus- muuttajan välipiirin tarvitsema teho

ohjausjärjestelmän avulla on mahdollisuus suunnitella toimintaa siten, että voidaan vähentää kuljettajien ja metsäkoneiden siirtymisiä työmaalta toiselle ja vähentää

Tässä työssä on kartoitettu Andon - järjestelmän nykytilannetta, esitetty parannus- vaihtoehtoja, tarkasteltu muiden valmistajien järjestelmiä ja tehty käyttöohjeet jär-

Tämän opinnäytetyön tarkoituksena on tutkia yrityksen asiakkuudenhallinta järjestelmän tiedon laatua sekä tehdä siihen tarvittavia korjauksia järjestelmän vaihtuessa

Käytettävyyden huomioiminen järjestelmän kehityksessä tulisi olla sekä järjestelmän toimit- tajan että käyttäjän yhteinen intressi, sillä käytettävyydeltään

Tässä tutkielmassa tarkasteltavien Grayn temperamenttiteorian (1970, 1982) kahden hermostollisen järjestelmän, käyttäytymistä estävän (behavioral inhibition system,

Laajempien järjestelmien dokumen- taation olisi hyvä sisältää dokumentit, jotka kuvaavat järjestelmän vaatimukset perusteluineen, järjestelmäarkkitehtuurin, järjestelmän