Autopaikkojen vuokrasopimusten tulostusjärjestelmä
Autopaikkojen vuokrasopimusten tulostusjärjestelmä
Xxxx Xxxxx
Opinnäytetyö
Tietojenkäsittelyn koulutusohjelma 2020
Tiivistelmä
3.4.2020
Tekijä(t) Xxxx Xxxxx | |
Koulutusohjelma Tietojenkäsittelyn koulutusohjelma | |
Opinnäytetyön otsikko Autopaikkojen vuokrasopimusten tulostusjärjestelmä | Sivu- ja liitesi- vumäärä 24+9 |
Opinnäytetyön otsikko englanniksi System for Printing Rental Agreements of Parking Spaces | |
Tämä on produktityyppinen opinnäytetyö, jossa lopputuotoksena on MVP-ajattelumallia nou- dattaen tehty sovellus, josta voidaan tulostaa autopaikkojen vuokrasopimuksia. MVP eli Mi- nimun Viable Product tarkoittaa hyvin kevyttä ja minimalistista järjestelmää, jonka avulla saa- daan selvitettyä tehokkaasti sekä mahdollisimman pienellä työn määrällä ratkaiseeko järjes- telmä tarvittavan ongelman. Järjestelmä on rajattu siten, että siihen ei tallenneta vuokrasopi- musten, työntekijöiden ja asiakkaiden tietoja. Opinnäytetyössä esitellään web-ohjelmoinnin perusteet, johon sisältyvät Internet-sivujen te- keminen sekä erilaiset ohjelmointikielet ja tietoturvaan liittyvät perusasiat. Lisäksi opinnäyte- työssä on selvitetty, miten lopputuotoksena tehty sovellus on toteutettu. Opinnäytetyön tavoitteena on ollut selvittää, onko olemassa keinoa, jonka avulla saadaan ylläpidettyä autopaikkojen vuokrasopimusten yhdenmukaisuutta sekä vuokrasopimusten eh- tojen ajantasaisuutta reaaliajassa kaikkien tarvittavien henkilöiden ulottuvilla. | |
Asiasanat Web-ohjelmointi, järjestelmäsuunnittelu, web-sovelluskehitys |
Sisällys
2 Web-ohjelmoinnin perusteet 3
2.1 Internet-sivuston tekeminen 3
3 Autopaikkojen vuokrasopimusjärjestelmän toteuttaminen 9
3.1 Projektin työsuunnitelma 9
Liite 2. UML-käyttötapauskaaviot 25
Liite 3. Tietokannan relaatiomalli 28
Liite 4. Käyttöliittymäluonnokset 29
Liite 5. Testitapausten kuvaukset 32
1 Johdanto
Tässä opinnäytetyössä kehitetään selainpohjainen sovellus autopaikkojen vuokrasopi- musten tulostamista varten. Sovellus on tarkoitettu käytettäväksi kiinteistöalan yritykses- sä, joka vuokraa asuntoja sekä autopaikkoja vuokralaisille.
Mahdollisimman pitkälle kehitetyt resurssit sekä muut liiketoiminnan kannattavuutta lisää- vät tekijät aikaansaavat liiketoiminnalle tärkeän tuloksen kasvun. Kiinteistöalan palvelun- tarjoajalle on tärkeää tuntea tarjoamansa palvelut hyvin, ja pitää esimerkiksi autopaikkojen tai asuntojen vuokrauksessa käyttöaste mahdollisimman korkeana. Autopaikkoja saattaa vuokrata useampi erillinen toimija, joita ovat tässä opinnäytetyössä huoltoyhtiöt ja asunto- vuokrauksen työntekijät. Eri toimijoilla on käytössään erilaiset vuokrasopimuspohjat ja vuokrasopimusten ehdot voivat vaihdella paljon, joten tässä opinnäytetyössä ratkaista- vaksi ongelmaksi on nostettu vuokrasopimusten samankaltaisuus sekä sopimusehtojen päivittäminen siten, että ne ovat reaaliajassa kaikkien toimijoiden saatavilla.
Opinnäytetyön keskeisimpänä tavoitteena on tehdä kevyt järjestelmä autopaikkojen vuok- rasopimusten tulostamiseen. Järjestelmään tallennetaan eri taloyhtiöiden osoitteet, eri- tyisehdot sekä lisätiedot. Järjestelmään tehdään yksi yleinen käyttäjätunnus sekä salasa- na, joilla käyttäjät voivat tunnistautua palveluun. Järjestelmässä on yhdet yleiset sopimus- ehdot, joita voidaan tarvittaessa päivittää käyttäjien toimesta.
Järjestelmä on rajattu siten, että tietokantaan ei tallenneta vuokrasopimuksia eikä auto- paikkoja vuokraavien asiakkaiden tietoja. Järjestelmä toteutetaan MVP-ajattelumallia (Mi- nimum Viable Product) hyödyntämällä, joka tarkoittaa hyvin kevyttä ja minimalistista jär- jestelmää, jonka avulla saadaan selvitettyä tehokkaasti sekä mahdollisimman pienellä työn määrällä ratkaiseeko järjestelmä tarvittavan ongelman (Haapahovi 12.3.2017).
Tuotoksesta hyötyvät autopaikkoja vuokraavat työntekijät sekä huoltoyhtiössä että asun- tovuokrauksessa, koska järjestelmän avulla saadaan tulostettua yhdenmukainen autopai- kan vuokrasopimus. Lisäksi päivitetyt ehdot ovat kaikkien toimijoiden saatavilla reaaliajas- sa, ja ehtojen päivitys on helppoa järjestelmän avulla. MVP-ajattelumallin produkti mah- dollistaa hyvin yksinkertaisen tietokannan sekä käyttöliittymän tekemisen, joten opinnäyte- työssä kirjoitettavan ohjelmakoodin sekä tietoperustan avulla lukija saa hyvän johdatuksen järjestelmäkehitykseen, vaikka lukijoilla ei olisi aiempaa ohjelmointikokemusta.
Opinnäytetyön keskeisimpiä käsitteitä ovat web-ohjelmointi, järjestelmäsuunnittelu ja web- sovelluskehitys. Tärkeimmät käsitteet ovat web-ohjelmointi ja -sovelluskehitys, koska tar-
koituksena on toteuttaa selaimessa toimiva verkkosovellus, jota voivat käyttää fyysisesti eri paikoissa sijaitsevat toimijat siten, että järjestelmän tiedot ovat kaikkien käyttäjien saa- tavilla reaaliajassa. Web-sovellus tarkoittaa erilaisten ohjelmointi-, merkintä- ja tyylikielien avulla luotua käyttöliittymää, joka toimii tietokannan kanssa yhdessä tarjoten tietyn palve- lun käyttäjälle (Gibb 2016).
Järjestelmäsuunnittelu käsitteenä kuuluu oleellisena osana opinnäytetyöhön, koska työs- sä toteutetaan uusi järjestelmä. Järjestelmäsuunnittelu tarkoittaa sitä prosessia, jonka avulla suunnitellaan järjestelmän rakennetta sekä elementtejä, joita ovat mm. järjestelmä- arkkitehtuuri, erilaiset moduulit tai muut komponentit, rajapinnat sekä data, joka kulkee koko järjestelmän kautta (Didacus 2018).
2 Web-ohjelmoinnin perusteet
Web-ohjelmoinnilla tarkoitetaan selaimella suoritettavan sovelluksen tekemistä käyttäen apuna jotain ohjelmointikieltä. Sovelluskehityksessä käytettäviä ohjelmointikieliä on paljon ja niillä kaikilla on erilaisia ominaisuuksia. Ohjelmointikieliä valittaessa tulee ottaa huomi- oon sovelluksen ominaisuudet, ja valita käytettävät kielet siten, että niillä saadaan koodat- tua sovellukseen tarvittavat ominaisuudet. Lisäksi ohjelmoijan omat mieltymykset ovat suuressa roolissa ohjelmointikieliä valittaessa (Wodehouse a.) Web-ohjelmoinnissa front end -ohjelmointi tarkoittaa visuaalista, käyttäjille konkreettisesti näkyvää osuutta ja back end -ohjelmointi taas esimerkiksi tietokantojen luomista eli niin sanotusti käyttäjille näky- mätöntä puolta ohjelmoinnista (Stewart 14.1.2019).
2.1 Internet-sivuston tekeminen
Internet-sivut voivat sisältää hyvinkin monipuolista toiminnallisuutta. Sivujen tekemisessä voidaan käyttää esimerkiksi erilaisten lomakkeiden luonnissa ohjelmointikieliä kuten PHP:tä ja JavaScriptiä. Internet-sivut ovat yleensä myös selaimella suoritettavan sovel- luksen käyttöliittymä (Purely Branded).
Web-kehityksen opiskelu aloitetaan yleensä harjoittelemalla käyttämään HTML-kieltä. HTML eli Hypertext Markup Language ei ole varsinaisesti ohjelmointikieli, vaan merkintä- kieli, jonka perusteella selain esittää Internet-sivut käyttäjälle. HTML kirjoitetaan tekstiedi- torissa, ja tässä voidaan käyttää editorina esim. Notepad++ -ohjelmaa (kuva 1) (W3Schools a).
Kuva 1. Notepad++ -tekstieditori, johon on kirjoitettu yksinkertainen HTML-sivu.
Kun HTML-koodi on kirjoitettu tekstieditoriin, sitä voidaan testata avaamalla tiedosto verk- koselaimella (kuva 2).
Kuva 2. Verkkoselain muodostaa näytölle sisällön HTML-koodin rakenteen ja muotoilujen mukaisesti.
CSS (Cascading Style Sheets) on tyylikieli, jolla voidaan määrittää erilaisia muotoiluja sivuston elementeille (kuva 3). CSS-määritykset ovat yleensä omassa .css-päätteisessä tiedostossaan, mutta CSS voidaan kirjoittaa tarvittaessa kevyiden, hyvin suppeiden sivu- jen ollessa kyseessä myös HTML:n sekaan, kuten kuvassa 1. on tehty. CSS-tiedostossa käytettävät käsitteet ovat muuten melko samanlaiset kuin HTML:ssäkin, mutta muotoilut voidaan kohdistaa joko kehittäjän itse määrittelemiin luokkiin tai suoraan esimerkiksi kaik- kiin otsikoihin (W3Schools b.)
Kuva 3. Esimerkki CSS-muotoilusta.
Tyylitiedostoja on tehty myös valmiiksi ns. kehyksiksi, joihin on valmiiksi luotu erilaisia asettelumalleja, käyttöliittymäelementtejä sekä mm. gallerioiden tyylejä, jotka ovat va- paasti yhdisteltävissä. Tällaiset kehykset nopeuttavat sovelluskehitystä, sillä Internet- sivujen suunnittelijan ei tarvitse itse koodata kaikkea, vaan tämä voi käyttää suoraan val- miita komponentteja ja asettelumalleja. Näitä tyylikehyksiä ovat mm. Bootstrap, Foundati- on, Bulma CSS Framework ja Semantic UI. Kaikilla tyylikehyksillä on omat, hieman erilai- set ominaisuutensa, ja kehykset valitaan Internet-sivuille vaaditun tyylin sekä tarvittavan sivustopohjaratkaisun mukaan (Kim 2015).
2.2 Ohjelmoinnin perusteet
Web-ohjelmointi käsittää sekä selainohjelmoinnin että palvelinohjelmoinnin. Ohjelmakoodi suoritetaan joko asiakkaan selaimella tai palvelimella. Web-ohjelmointiin sisältyy palveli- mella suoritettava koodi, tietokantarajapinta sekä käyttäjälle näkyvä käyttöliittymä, johon koodataan valitulla ohjelmointikielellä erilaisia elementtejä, kuten esimerkiksi lomakkeita (Wodehouse b.)
PHP (kuva 4.) on yksi yleisimmistä web-ohjelmoinnissa käytetyistä ohjelmointikielistä. Itse koodi voidaan kirjoittaa joko suoraan HTML:n yläpuolelle, HTML:n sekaan tai eri tiedos- toon kokonaan. PHP-koodilla voidaan tuottaa eli generoida HTML-merkkikieltä silloin, kun tuotetaan esimerkiksi lista silmukalla tietokannan sisällön perusteella. Käytännössä PHP- esikääntäjä suorittaa koodin palvelimella, kun käyttäjä lataa sivun. Käyttäjä näkee vain tulosteen (output), mutta ei itse koodia. PHP-koodia ei voi testata avaamalla tiedosto suo- raan omalla selaimella, vaan se tulee ladata ensin palvelimelle ja suorittaa koodi suoraan palvelimelta käsin (xxx.xxx a). Tunnetuimpia PHP:llä toteutettuja sovelluksia ovat mm.
Facebook ja WordPress (Kim 2015).
Kuva 4. Yllä esimerkki PHP:llä koodatusta yhteydenottolomakkeen käsittelijästä.
Muita palvelimella suoritettavia ohjelmointikieliä ovat mm. Java, Python ja Ruby sekä Node.js ympäristö, joka sallii JavaScript-koodin suorittamisen palvelimella. Tällöin sekä selain- että palvelinohjelmointi voidaan tehdä samalla kielellä (Crampete 2020).
JavaScript on ohjelmointikieli, jonka avulla voidaan ohjata myös selaimen toimintaa. Koo- din voi suorittaa avaamalla tiedosto suoraan selaimella. Tästä syystä koodin testaaminen on suoraviivaisempaa, kuin palvelimella suoritettavilla ohjelmointikielillä (Peltomäki & Ny- känen 2006, 93-97). JavaScriptille on omat kirjastonsa, joita ovat mm. JQuery, Xxxxx, Vue.js sekä Ember.js. Näiden kirjastojen avulla saadaan tehtyä helpommin erilaisia ele- menttejä Internet-sivuille (Goel 27.1.2020.)
2.3 Sovellusten tietoturva
Sovellusten suojaaminen tarkoittaa järjestelmäsuunnittelussa huomioon otettavia erilaisia turvallisuuteen liittyviä toimenpiteitä ja menetelmiä siten, että estetään sovelluksessa ole- vien tietojen kaappaaminen tai varastaminen ulkopuolisen tahon toimesta. Näitä toimenpi- teitä voivat olla mm. sovelluspalomuuri ja laitteistotason suojauksena oleva reititin, joka estää tietokoneen IP-osoitteen näkemisen tai erilaisia protokollia sisältävä suojausrutiini, kuten säännöllinen sovelluksen testaaminen. Sovelluskehityksessä tulee ottaa huomioon tietoturvariskit sekä eri ohjelmistojen haavoittuvuudet, kun sovelluksia käytetään eri ver- koissa ja ne on yleensä yhdistetty suoraan pilvipalveluun. Sovellusten suojaamiseen käy- tetään erityyppisiä suojausominaisuuksia, joita ovat todennus, valtuutus, salaus, lokitiedot sekä sovellusten suojauksen testaus (WMware 2020.)
Sovellusten suojaamista voidaankin kuvailla erityiseksi prosessiksi, jonka avulla etsitään, korjataan sekä parannetaan sovellusten tietoturvaominaisuuksia erilaisten salassapitotek- niikoiden ja työkalujen avulla. Sovelluksiin voidaan jo kehittämisen aikana koodata erilai- sia tietoturvaominaisuuksia lisääviä elementtejä, jotta saadaan testattua varhaisessa vai- heessa sovelluksen mahdolliset haavoittuvuudet (Storm 2019.)
Todennuksella varmistetaan, että vain valtuutetut käyttäjät pääsevät kirjautumaan sovel- lukseen sekä se, että käyttäjä todella on, kuka hän sanoo olevansa. Tämä voidaan toteut- taa siten, että käyttäjältä vaaditaan käyttäjätunnus ja salasana sisäänkirjautumisen yhtey- dessä. Monitekijäisellä todennuksella tarkoitetaan sellaista varmennusta, jossa vaaditaan useampi kuin yksi todennuksen muoto. Näitä muotoja voivat olla salasanan lisäksi mm. mobiililaitteen avulla tehty tunnistautuminen tai biometrinen tunnistautuminen, joka voi olla esimerkiksi kasvojen tai sormenjäljen avulla tapahtuva tunnistus. Valtuutuksella tarkoite- taan sitä, että todennuksen jälkeen järjestelmä vahvistaa käyttäjän oikeuden käyttää so- vellusta vertaamalla käyttäjän henkilöllisyyttä järjestelmässä sijaitsevaan valtuutettujen henkilöiden luetteloon (WMware 2020.)
Kun käyttäjä on todennettu ja käyttää sovellusta, voidaan salauksen avulla suojata arka- luontoisia tietoja tietoverkkorikkomuksilta erilaisten tietoturvatoimenpiteiden avulla. Var- sinkin pilvipalvelupohjaisia sovelluksia käytettäessä käyttäjän ja palvelun välisen datan siirrossa voidaan käyttää salausta siirtyvien tietojen tietoturvan varmistamiseksi (WMware 2020.)
Lokitiedot tarkoittavat sovelluksen muodostamia aikaleimattuja tapahtumamerkintöjä, joi- den avulla voidaan mahdollisesti tunnistaa tietoturvarikkomuksien tekijä. Lokitiedostoista nähdään, kuka on päässyt tietoihin käsiksi, miten se on tapahtunut ja mihin sovelluksen osiin pääsy kohdistui (WMware 2020.)
Sovelluksen suojauksen testaus on välttämätöntä ohjelmistokehityksessä, koska sen avul- la varmistetaan, että kaikki tietoturvan hallintaan liittyvät tekniikat toimivat oikein ja sovel- lus täyttää tietoturvalle asetetut kriteerit. Läpäisytestauksessa ohjelmoijat testaavat sovel- lusta samankaltaisilla tekniikoilla, kuin hakkeroijat käyttävät ja tällä tavoin pääsevät kor- jaamaan sovelluksessa esiintyvät suojausheikkoudet (VMware 2020.) Staattinen testaus tarkoittaa koodin analysointia kiinteissä pisteissä sen kehittämisen aikana, jolloin ohjelmoi- ja voi tarkistaa koodinsa kirjoittaessaan sitä varmistaakseen tietoturvan käyttöönoton jo kehityksen aikana. Käynnissä olevaa koodia voidaan analysoida dynaamisella testauksel- la, jolloin voidaan simuloida järjestelmiin kohdistuvia hyökkäyksiä ja sitä kautta paljastaa monimutkaisempia hyökkäysmalleja. Interaktiivinen testaus tarkoittaa staattisen ja dy- naamisen testauksen elementtien yhdistämistä (Storm 2019.)
Yleisin tietoturvauhka web-sovelluskehityksessä on SQL-injektio. Tällä tarkoitetaan hyök- käystä, joka mahdollistaa haitallisten SQL-lauseiden suorittamisen web-sovelluksen tieto- kantapalvelimelle. SQL-injektion avulla hyökkääjä saa ohitettua sovelluksen suojaustoi- menpiteet ja kiertää verkkosivuston todennuksen sekä valtuutuksen. Injektion kautta hyökkääjän on mahdollista saada haltuunsa koko tietokannan sisältö sekä mahdollisuu- den lisätä, poistaa tai muokata tietokannassa olevia tietueita. SQL-injektiolla saadaan haavoitettua mitä tahansa suojaamatonta verkkosivustoa tai -sovellusta, joka käyttää SQL-tietokantaa. Näitä tietokantoja ovat mm. MySQL, jota käytetään tässä opinnäytetyös- sä sekä Oracle ja SQL Server (Acunetix.)
Tehdäkseen SQL-injektion, hyökkääjän tulee löytää haavoittuva käyttäjäsyöte verkkosivul- ta tai -sovelluksesta. Mikäli haavoittuvuus löytyy, voi hyökkääjä syöttää suoraan sisältöä SQL-kyselyn kautta tietokantaan. Tätä kutsutaan haitalliseksi hyötykuormaksi, joka on keskeinen osa hyökkäystä. Kun sisältö on lähetetty, voi hyökkääjä suorittaa haitalliset SQL-komennot suoraan tietokantaan. Ainoa varma tapa estää SQL-injektiohyökkäyksiä
on validoida syötteet sekä käyttää kyselyitä, joihin on määritetty parametrit. Ohjelmiston kehittäjän tulee siistiä kaikki syötteet, kuten mm. kirjautumislomakkeet sekä muut vastaa- vat sekä poistaa potentiaaliset koodielementit, joiden avulla SQL-injektio voidaan tehdä (Acunetix.)
Tietoturvan lisäämiseksi voidaan myös asentaa tietokanta palomuurin taakse erilliselle tietokantapalvelimelle sen sijaan, että tietokanta olisi samassa paikassa kuin web- sovelluksen palvelin. Web-sovelluksesta säilytettävät tiedostot sisältävät yleensä tiedot myös tietokannasta, johon sovellus ottaa yhteyttä. Tämän vuoksi tulisi salata kaikki sovel- luksessa tai tietokannassa säilytettävä tieto, joka on arvokasta sovelluksen käyttäjälle.
Lisäksi voidaan käyttää verkkosovellukselle tarkoitettua palomuuria, jonka avulla voidaan suojata myös sivustojen välisten komentosarjojen haavoittuvuuksia sekä mm. SQL- injektiohyökkäyksiä (Matelski 2015.)
Web-sivuilla sekä web-sovelluksissa tietoturvauhkana on myös istuntokaappaus, jossa hyökkääjä saa käynnissä olevan istunnon hallintaansa. Istuntokaappauksessa hyökkääjä varastaa käynnissä olevan istunnon istuntotunnisteen, jolloin web-sivusto luulee hyökkää- jän olevan luvallinen käyttäjä ja antaa hyökkääjälle oikeudet käyttää sivustoa. Istunto- kaappausta voidaan ehkäistä salausmenetelmien avulla. Istunnon hallinta tarkoittaa käyt- täjän, selaimen ja palvelimen välille muodostettua pidempikestoista yhteyttä. Istunto aloi- tetaan todennuksella ja istunnon elinkaari on se aika, jonka käyttäjä on kirjautuneena jär- jestelmään (Banach 22.8.2019.)
3 Autopaikkojen vuokrasopimusjärjestelmän toteuttaminen
Opinnäytetyön aiheena oleva sovellus kehitetään web-ohjelmoinnin keinoin, koska selain- sovellus sopii hyvin ympäristöön, jossa käyttäjät sijaitsevat fyysisesti eri paikoissa. Etuna on myös, ettei käyttäjien koneille tarvitse asentaa mitään, vaan käytön voi aloittaa heti omalla Internet-selaimella.
Tavoitteena on toteuttaa toimiva, mahdollisimman kevyt ja helppokäyttöinen autopaikko- jen vuokrasopimusten tulostusjärjestelmä, jota voidaan käyttää autopaikkojen vuokraso- pimusten tulostamiseen niin asukkaille kuin ulkopuolisillekin vuokralaisille. Autopaikkaso- pimus on autopaikkakohtainen, ja sopimuksen muoto on samanlainen sekä asukkaille että ulkopuolisille autopaikan vuokraaville henkilöille.
3.1 Projektin työsuunnitelma
Koska järjestelmän tarve ja toimivuus halutaan testata pienimmällä mahdollisella työllä sekä mahdollisimman nopeasti, tehdään työ MVP-toteutuksena (Minimum Viable Pro- duct). Näin saadaan validoitua, ratkaiseeko järjestelmä olemassa olevan tarpeen riittävällä tavalla. Ennen muita vaiheita järjestelmästä tehdään vaatimusmäärittely dokumentti, joka kuvaa järjestelmään kohdistuvia vaatimuksia sekä tavoitteita. Vaatimusmäärittelyssä ku- vataan erilaisin käyttötapauskaavioin sekä testitapauksin, miten järjestelmän tulisi toimia.
Toimenpiteet on jaettu kuuteen eri päävaiheeseen ja työskentely tapahtuu vesiputousmal- lin mukaisesti iteratiivisella periaatteella siten, että työvaiheiden sisällä testataan jatkuvasti tehdyn muutoksen toimivuus. Ensimmäisenä tehdään vaatimusmäärittely, jonka jälkeen suunnitellaan tietokanta. Suunnittelu aloitetaan tietokantaan lisättävien taulujen sekä tau- lujen suhteiden eli relaatioiden suunnittelulla. Tässä työvaiheessa hahmotellaan piirtämäl- lä tai käyttämällä esimerkiksi Excel-työkirjaa, taulujen relaatiot. Samalla hahmotetaan, mikä tieto on tietokannan osalta tärkeää ja karsitaan pois se tieto, mikä ei ole oleellista MVP-ajattelumalliin perustuvan järjestelmän toimivuuden kannalta. Taulujen välisiä re- laatioita luodessa merkitään myös taulujen pääavaimet, viiteavaimet sekä id, eli yksilölli- nen tunnistenumero.
Kun tietokanta on suunniteltu, siirrytään kolmanteen päävaiheeseen eli tietokannan toteu- tukseen, joka tarkoittaa taulujen ja relaatioiden luomista tietokantaan. Taulujen luominen tapahtuu manuaalisesti ensimmäisessä vaiheessa määritellyn suunnitelman perusteella. Taulujen luomisen jälkeen generoidaan SQL-lauseet käytettävässä editorissa.
Neljännessä vaiheessa syötetään tietokantaan dataa ja testataan kyselyillä tietokannan toimivuus. Tietokantaan syötettävä data on testidataa, joka ei sisällä henkilötietoja. Tässä vaiheessa laaditaan myös PHP:llä suoritettavat SQL-tietokantakyselyt.
Viidennessä vaiheessa suunnitellaan käyttöliittymän ulkoinen osa eli se osa, joka näkyy käyttäjille ja toteutetaan se. Viimeisessä vaiheessa testataan prototyyppiä ja korjataan mahdollisesti havaittavia virheitä.
Kuva 5. Työn suunnitelmakaavio.
3.2 Vaatimusmääritys
Vaatimusmäärityksessä kuvataan ensimmäisenä nykytila. Tällä hetkellä autopaikkasopi- muksia tekevät eri huoltoyhtiöt sekä asuntovuokraus. Sopimuspohja on kaikilla toimijoilla erilainen ja autopaikkojen vuokrasopimusten sopimusehdot voivat olla hyvin erilaiset riip- puen toimijasta. Erilaiset sopimusehdot voivat aiheuttaa autopaikkoja vuokraavilla vuokra- laisilla sekaannusta, jos ehdot ovat hyvin erilaiset eri vuokrasopimuksissa.
Seuraavaksi mietitään, mikä on toiminnallinen tavoite ja mitä hyötyjä tavoitellaan. Tavoit- teena on saada yhdenmukaiset sekä tarkempiehtoiset autopaikkojen vuokrasopimukset.
Lisäksi on tärkeää, että ehtoja voidaan päivittää helposti ja päivitetyt vuokrasopimukset ovat kaikkien käyttäjien ulottuvilla reaaliajassa. Vuokrasopimukset tulee voida tulostaa pdf-muodossa.
Tämän jälkeen päätetään, miten rajataan järjestelmä. Järjestelmässä ei tulla varastoi- maan vuokrasopimuksia eikä asiakkaiden tietoja ja autopaikan vuokrasopimus poistuu järjestelmästä automaattisesti, kun käyttäjä on tulostanut vuokrasopimuksen ja poistuu käyttöliittymän tulostusnäkymästä. Järjestelmään tallennetaan yleiset sopimusehdot sekä kohteiden tiedot, joissa autopaikat sijaitsevat. Käyttäjä voi tarvittaessa muokata yleisiä, kaikkia autopaikkoja koskevia sopimusehtoja sekä kohteiden tietoja. Tämän lisäksi järjes- telmään luodaan mahdollisuus lisätä eri kohteille erityisiä sopimusehtoja, jotka koskevat esimerkiksi tietyn taloyhtiön järjestyssääntöjä. Järjestelmään luodaan salasanan ja käyttä- jätunnuksen avulla tehtävä tunnistautuminen. Järjestelmä toimii työaseman verk- koselaimella, ja sitä käyttävät eri huoltoyhtiöt ja asuntovuokraajat. Aikataulurajoitteena on produktin valmistuminen opinnäytetyön aikataulun puitteissa.
Vaatimusmäärittely jatkuu toiminnankulkujen kuvaamisella siten, kuinka oikeat toimijat kokisivat käyttötilanteen ja tarinassa kuvataan joko nykytilaa tai tehdyn järjestelmän käyt- tötilannetta. Näiden kuvausten perusteella laaditaan vaatimuslista, johon poimitaan arvoa tuottavat tavoitteet ja analysoidaan sekä jaetaan tavoitteet tyypin mukaan joko ei- toiminnallisiin tai toiminnallisiin tavoitteisiin. Laadulliset vaatimukset sekä resurssivaati- mukset ovat ei-toiminnallisia vaatimuksia ja toiminnallisia vaatimuksia ovat käyttöön liitty- vät vaatimukset. Tämän jälkeen vaatimukset priorisoidaan eli laitetaan tärkeysjärjestyk- seen, jonka jälkeen valitaan, mitkä vaatimukset voidaan toteuttaa MVP-ajattelumalliin pe- rustuvassa järjestelmässä. Vaatimusluettelo on kuvattu liitteessä 1.
Seuraavaksi kuvataan valitut vaatimukset visuaalisesti siten, että toiminnalliset vaatimuk- set tehdään UML-käyttötapauskaavioina (liite 2) ja säilytettävät tiedot on kuvattu tietokan- nan relaatiomallissa (liite 3). Lisäksi piirretään käyttöliittymäluonnokset (liite 4) piirto- ohjelmalla. Lopuksi tehdään vaatimusten testaus, joka tarkoittaa käyttötapausten testaa- mista askel askeleelta siten, että testitapaukset kuvataan yksityiskohtaisesti (liite 5). Jär- jestelmän tietokantamallissa luodaan tietokantaan lisättävät taulut sekä tietokantataulujen relaatiot. Koko tietomallin luonti tapahtuu PhpMyAdminin avulla MySQL-tietokantaan.
3.3 Toteutus
Opinnäytetyön web-ohjelmointitekniikoiksi valittiin yleisimmin käytössä olevat ohjelmointi- ja merkintäkielet. Tyylien muotoilussa käytettiin myös CSS-tyylikehystä. Sivujen perusra- kenteen luomisessa käytettiin HTML5-merkintäkieltä (kuva 6.), koska HTML5 on standar- di, jonka etuja ovat sisältöä <div>-elementtiä kuvaavat semanttiset elementit, modernit lomake-elementit ja hyvä tuki erilaisille mediasisällöille (Techark 15.4.2014). HTML5- kielellä määritettiin käyttöliittymädokumentin rakenne ja elementtien asettelu määräytyy eri laitenäkymissä CSS-määrittelyjen mukaan. HTML5 toimii siten, että sovellusta voidaan käyttää myös muilta laitteilta, kuin tietokoneella. Tämä tarkoittaa sitä, että kielen avulla saatiin sivut tehtyä responsiivisiksi ja sivut mukautuvat automaattisesti käyttäjän laitteen näytön kokoon (Xxxxxx.xxx 2018).
Kuva 6. HTML5 <body>-elementin sisälle kirjoitetun navigointielementin koodi. Kuvassa on kirjoitettu lista navigointielementtiin, jossa aktiivisena on ”Tulosta vuokrasopimus” -sivu.
CSS-tyylikielen avulla määritettiin käyttöliittymän näkyvälle osalle erilaiset käytettävät fon- tit, värit sekä elementtien tyylit. CSS on riippuvainen HTML-merkintäkielestä, joten CSS- tiedosto linkitettiin HTML-tiedostoon, jotta muotoilut tulevat näkyviin sivuille (W3C 2016). Tyylikehyksenä opinnäytetyössä käytettiin Bootstrapia, jonka avulla saatiin luotua käyttö- liittymälle visuaalisesti sopiva asettelu helpommin. Jotta Bootstrap-tyylikehyksen ominai- suudet saatiin käyttöön, linkitettiin se HTML-tiedostoon.
Kuva 7. CSS ja Bootstrap linkitettynä HTML5-merkintäkielen header-osioon opinnäyte- työssä.
Näiden lisäksi lisättiin interaktiivisia elementtejä, kuten erilaisia painikkeita, käyttämällä JavaScript-ohjelmointikieltä (kuva 8.). JavaScript-koodi kirjoitetaan HTML5-kielessä
<script>-elementin sisälle tai se ladataan erillisestä .js-tiedostosta (Markupbox 2017). Selain suorittaa JavaScript-koodia selaimen eri tapahtumien yhteydessä, esimerkiksi hii- rellä klikattaessa tai dokumentin latauksen yhteydessä (JS).
Xxxx 0. Kuvassa näkyy opinnäytetyön Vuokrasopimuksen tulostus- sivun automaattisen täytön JavaScript-funktio, jossa on hyödynnetty jQueryä. Change ja ready ovat eventtejä, joiden tapahtuessa funktiot suoritetaan.
Sovelluksen tietokanta tehtiin SQL-kyselykielellä, jolla voidaan vaikuttaa myös tietokannan rakenteeseen. Tietokannan sisältöä voidaan mm. muuttaa, päivittää tai määritellä erilais- ten komentojen muodossa sekä ohjata tapahtumien käsittelyä erilaisten DML- ja DDL- kyselyiden avulla (Hovi 2013, 14-16.) Tietokantakyselyt muodostettiin käytössä olevan tietokanta-alustan (MySQL) ohjeen mukaan.
Kuva 9. PHP- elementin sisällä ladataan ensin ($config) erillisestä tiedostosta käyttäjätun- nus ja salasana. Sen jälkeen muodostetaan yhteys PDO:n avulla tietokantaan. PDO:n prepare-funktiota käyttäen tehdään parametroituja kyselyjä ja torjutaan tällä tavoin ainakin helpoimmin toteutettavat SQL-injektiohyökkäykset.
Tietokantapalvelimen pääsytiedot (käyttäjätunnus ja salasana) säilytetään erillisessä .ini- tiedostossa www-palvelimen public_html-hakemiston ulkopuolella, josta ne ladataan PHP:n avulla. Näin pääsytiedot eivät ole kenen tahansa ladattavissa palvelimelta, tai luet- tavissa ohjelmakoodista (Lionite.)
Opinnäytetyön palvelinkoodi toteutettiin PHP-kielellä, koska PHP:n kanssa voitiin käyttää helposti kaikkia muita työhön valittuja kieliä (xxx.xxx, B). PHP toimii hyvin MySQL:n kans- sa yhdessä mm. sen vuoksi, että siinä on hyvät tukikirjastot MySQL:lle (McLaughlin 2020). Lisäksi PHP:llä on hyvä saatavuus, koska se löytyy käytännössä kaikista hosting- palveluista. Opinnäytetyössä toteutettavan järjestelmän teossa käytettävä hosting-palvelu tukee PHP:ta, joka on myös yksi syy, miksi palvelinkoodiksi valikoitui PHP-kieli. Tietokan- nan ja PHP:n välisenä rajapintana käytetään yleensä kirjastoa, jonka avulla rakennetaan SQL-kyselyt ja otetaan yhteys tietokantaan. Tällainen kirjasto on PHP:n dataobjekti PDO, jonka avulla saadaan myös tietoturvaominaisuuksia vaivattomammin käyttöön, kuin esi- merkiksi sillä, että SQL-kyselyt rakennettaisiin käsin (xxx.xxx c.)
3.4 Tuotos
Tässä MVP-ajattelumallin vuokrasopimusjärjestelmässä ei ole tarvetta käyttäjän tunnis- tautumiselle, mutta luvaton käyttö tulee sen sijaan estää. Tämän toteuttamiseksi riittää Apache HTTP-palvelimen yksinkertainen autentikaatio (Basic HTTP autenthication) yh- teiskäyttöisellä käyttäjätunnuksella (kuva 10.). Tämä onnistuu luomalla .htpasswd-
tiedosto, joka sisältää käyttäjätunnukset ja salasanat salatussa muodossa, sekä
.htaccess-tiedosto, jossa määritellään Apachelle hakemiston suojausasetukset. Salasa- natiivisteet sisältävä .htpasswd-tiedosto sijoitetaan julkisen www-dokumenttihakemiston (publick_html) ulkopuolelle, jotta se ei joutuisi vääriin käsiin.
Koska kyseessä on MVP-ajattelumalliin perustuva minimalistinen sovellus, ei sovellukselle tehty uloskirjautumista. Apachen .htaccess pitää kirjautumisen yllä siihen asti, että selain suljetaan. Kun käyttäjä sulkee käytössään olevan selaimen, uloskirjautuminen tapahtuu automaattisesti.
Kuva 10. Näkymä kirjautumisesta, kun järjestelmä pyytää käyttäjätunnusta sekä salasa- naa.
Kun käyttäjä on kirjautunut järjestelmään, aukeaa käyttöliittymän etusivu (kuva 11.). Käyt- täjä voi valita haluamansa toimenpiteen yläpalkin navigoinnista tai sivun sisällön sinisillä merkityistä linkeistä. Kutakin linkkiä painamalla käyttäjä siirtyy linkin otsikkoa vastaavalle sivulle.
Kuva 11. Sovelluksen etusivu.
Klikkaamalla Tulosta vuokrasopimus -painiketta, aukeaa näkymä vuokrasopimuslomak- keelle. Kun käyttäjä valitsee sivun, käyttöliittymä hakee automaattisesti tietokannasta koh- teiden taulusta ensimmäisenä olevan kohteen tiedot. Käyttäjä voi valita haluamansa talo- yhtiön Taloyhtiö- kohdan pudotusvalikosta. Kun käyttäjä vaihtaa taloyhtiön, tietokannasta tulee automaattisesti halutun taloyhtiön tiedot vuokrasopimuslomakkeelle. Kun taloyhtiö on valittu ja autopaikkaa koskevat muut tiedot on valittu, syötetään lomakkeelle autopai- kan vuokraavan henkilön tai yrityksen tiedot.
Kuva 12. Vuokrasopimuslomakkeelle tulee automaattisesti kohteen tiedot.
Vuokralaisen tietojen syöttämisen jälkeen voidaan lisätä manuaalisesti Lisätiedot
-kohtaan, jos sopimukseen kohdistuu erityisiä lisätietoja. Vuokrasopimuksen erityisehdot tulevat lomakkeelle automaattisesti, kun taloyhtiö valitaan, jos taloyhtiöön kohdistuu eri- tyisehtoja. Mikäli taloyhtiöön ei kohdistu erityisehtoja, jää Erityisehdot -kenttä automaatti- sesti tyhjäksi. Tämän lisäksi vuokrasopimuslomakkeelle tulostuu automaattisesti yleiset sopimusehdot, kun sivu aukeaa.
Kuva 13. Lisätiedot ja sopimusehdot.
Vuokrasopimustuloste avautuu omaan näkymään, johon on jaettu vuokrasopimuslomak- keen tiedot omille paikoilleen. Tulostuksessa käytetään yleisimpien selainten tukemaa PDF-tulostusta ja käyttäjä voi palata etusivulle sivun alalaidassa olevan painikkeen avulla. Vuokrasopimus ei tallennu järjestelmään ja sopimus katoaa, kun käyttäjä palaa etusivulle tai istunto vanhenee.
Kuva 14. Kuvassa autopaikan vuokrasopimuksen tulostenäkymä.
Käyttäjä voi tarvittaessa muokata vuokrasopimuksen yleisiä sopimusehtoja Muokkaa so- pimusehtoja -sivun kautta. Kun sivu aukeaa, sopimusehdot latautuvat automaattisesti tie- tokannasta käyttöliittymän Sopimusehdot-kohtaan. Sopimusehtoja ei voi poistaa koko- naan, koska vuokrasopimuksia tehdessä tulee olla käytössä ennalta määritellyt vuokraso- pimusehdot, jotka ovat yhtenäiset kaikissa vuokrasopimuksissa.
Kuva 15. Yleisten sopimusehtojen muokkaaminen.
Käyttäjä voi tarvittaessa muokata kohteen tietoja tai poistaa kohteen Muokkaa kohteita- sivun kautta. Kun käyttäjä avaa sivun, latautuu sivulle suoraan tietokannasta kohteiden taulusta ensimmäisenä olevan taloyhtiön tiedot. Käyttäjä voi valita toisen taloyhtiön pudo- tusvalikon kautta ja valitun taloyhtiön tiedot avautuvat automaattisesti tekstikenttiin. Käyt- täjä voi lisätä järjestelmään uuden kohteen saman sivun kautta, mistä käyttäjä saa muo- kattua kohteiden tietoja tai poistaa kohteen. Käyttäjä syöttää uuden kohteen tiedot teksti- kenttiin ja tallentaa tiedot, jolloin uusi kohde tallentuu tietokantaan.
Kuva 16. Kohteen tietojen lisäys, muokkaus ja poisto.
Ohjelmakoodi on tämän opinnäytetyön julkaisuhetkellä tarkasteltavissa osoitteessa xxxxx://xxxxxx.xxx/Xxxxxxx/xxxxxxxxxx.
4 Pohdinta
Opinnäytetyön aiheen valitseminen oli yllättävän helppoa, mutta itse työn aloittaminen oli vaikeampaa, kuin olin kuvitellut. Työskentelen tällä hetkellä kiinteistöalalla, joten oli luon- tevaa valita aiheeksi järjestelmä, joka liittyy omaan alaani. Lisäksi halusin opiskelujeni päätteeksi koota yhteen opiskeluaikanani saavuttamani uudet taidot. Aloittaessani opiske- luni hieman yli kolme vuotta sitten minulla ei ollut mitään ohjelmointikokemusta enkä ollut kirjoittanut riviäkään koodia. Tässä opinnäytetyössä tehty järjestelmä on ensimmäinen laatuaan, jonka olen koskaan tehnyt alusta loppuun asti itse. Tämän vuoksi oli haasteellis- ta hahmottaa opinnäytetyön tehtävät oikeisiin ajanjaksoihin ja opinnäytetyösuunnitelma oli hieman puutteellinen aikataulullisesti. Opiskelun aikana käymäni kurssit olivat onneksi valmistaneet minua opinnäytetyötä varten, joten sain luotua itseäni varten suunnitelman sekä kokonaisuuden, joiden avulla pääsin aloittamaan myös produktin tekemisen varsi- naisen opinnäytetyön kirjoittamisen lomassa.
Tietoperustassa päädyin ohjelmoinnin perusteiden avaamiseen mahdollisimman yksinker- taisten esimerkkien avulla. Tarkoituksena oli ensin selventää lukijoita varten erilaisten ohjelmointikielien ominaisuuksia, jonka jälkeen opinnäytetyössä siirryttiin sovellukseen valittuihin ohjelmointikieliin sekä ominaisuuksiin. Tietoperustat oli tarkoitus pitää mahdolli- simman yksinkertaisina ajatellen myös sellaista lukijaa, jolla ei ole ohjelmointikokemusta siten, että lukija pystyisi kuitenkin ymmärtämään mahdollisimman pitkälle ohjelmoinnin perusteet sekä miten käytännössä sovellus tehdään.
Vaatimusmäärittelyn tekeminen sovelluksesta oli välttämätöntä, että saatiin määritettyä selkeämmin sovelluksen käyttöarvoa lisäävät ominaisuudet. Vaatimusmäärityksessä teh- tyjen käyttötapausten perusteella suoritettu sovelluksen testaaminen oli suhteellisen no- peaa ja helppoa. Tehdystä vaatimusmäärittelystä huolimatta työskentelyn edetessä pro- dukti muuttui sitä mukaa, kun järjestelmän rakenne hahmottui. Alkuperäisen suunnitelman mukaan käyttäjille tehtiin oma taulu tietokantaan, mutta työskennellessä huomasin, ettei käyttäjien tietoja välttämättä tarvita MVP-ajattelumalliin perustuvassa produktissa. Tämän vuoksi käyttäjien tietojen muokkaaminen sekä tallennus jätettiin kokonaan pois järjestel- män ominaisuuksista. Sovelluksen käyttäjille tehtiin tähän opinnäytetyön versioon yhtei- nen käyttäjätunnus ja salasana. Jos sovellus otetaan käyttöön, tulisi sovellukseen kuiten- kin lisätä kirjautuminen sekä käyttäjien tunnistus tietoturvasyistä. Xxxxxxxxx ja käyttäjä- tunnuksen omaava ilkeämielinen käyttäjä saattaa käydä turmelemassa tahallisesti tieto- kannan sisällön. Tätä voidaan ehkäistä sovellusta kehitettäessä siten, että asetetaan käyt- täjille erilaiset oikeustasot sekä varmuuskopioimalla tietokanta säännöllisesti.
Sovellusta testattaessa kävi hyvin nopeasti ilmi, että sovellus edesauttaisi yhdenmukais- ten autopaikkavuokrasopimusten tekemistä ja sopimusten ehtojen reaaliajassa tehtyä päivittämistä. Vuokrasopimuksen tulostaminen pdf-versioksi oli testattaessa huomattavasti helpompaa sovelluksesta, kuin nykyisen käytännön perusteella Excel-versiosta. Edellä mainittujen tulosten puitteissa voidaan todeta, että sovelluksella voisi olla myös tuotannol- lista arvoa, mutta tämänhetkinen testiversio vaatii vielä hieman jatkokehitystä. Mikäli so- vellusta jatkojalostetaan, tulee kuitenkin pohtia täyttääkö sovelluksen käyttöarvo todelliset kehityskustannukset. Vaikka sovelluksella todettiin olevan käyttöarvoa, saattaa sovellus- kehitys vaatia niin isot investoinnit, että tällä hetkellä sovelluksen jatkokehitys ei olisikaan taloudellisesti kannattavaa siitä saatuun hyötyyn nähden.
Bisneksen kannalta sovelluksella olisi kuitenkin entistäkin enemmän tällä hetkellä käyttö- arvoa, kun otetaan huomioon vallitseva COVID-19-kriisi. Etätyössä usein käytetyt VPN- yhteydet voivat olla vallitsevassa kriisitilanteessa hitaat käyttäjäkuormituksen vuoksi, joten käyttöpaikasta riippumaton selaimella suoritettava sovellus on tällä hetkellä arvokas työ- kalu, jonka avulla pidetään tärkeät tiedot reaaliajassa kaikkien niitä tarvitsevien henkilöi- den ulottuvilla.
Jatkokehitystä varten tulisi huomioida käyttäjien osalta käyttäjät-tietokantataulun käyt- töönotto siten, että saataisiin luotua kaikille käyttäjille omat tunnukset ja mahdollisuus ra- joittaa käyttäjäoikeuksia tarvittaessa. Sovelluksen käyttöoikeudet olisi järkevintä asettaa edellä mainitussa tapauksessa siten, että vain esimerkiksi yksi käyttäjä olisi pääkäyttäjä, jolla olisi oikeus lisätä, poistaa sekä muokata sovelluksessa olevia tietoja (käyttäjät, koh- teet yms.). Sovelluksen poisto-ominaisuus kannattaa kehittäessä muuttaa sellaiseksi, että käyttäjän tekemä poisto asettaa tietueeseen vain esimerkiksi poistettu=True- merkinnän ja piilottaa poistetun tiedon näkyvistä, mutta ei kokonaan tietokannasta. Tällöin vahingossa poistettu tieto on helposti palautettavissa takaisin käyttöön. Lisäksi jatkokehitystä ajatellen voisi sovellukseen lisätä myös mahdollisuuden tallentaa vuokrasopimukset ja esimerkiksi rajoittaa käyttäjien oikeuksia nähdä muiden tekemiä vuokrasopimuksia.
Sovellusta voisi myös jatkojalostaa siten, että sen saisi liitettyä jo tälläkin hetkellä käytös- sä olevaan järjestelmään. Vaihtoehtoina voisi tässä tapauksessa olla integrointi tai sitten sovelluksen koodeja voisi muokata toiseen järjestelmään sopivaksi, jolloin sovellus sulau- tuisi toisen järjestelmän sisällä olevaksi ominaisuudeksi. Tällainen järjestelmä voisi olla esimerkiksi FimX, josta löytyy jo työpaikallani mm. autopaikkojen varaukset sekä muut kohteisiin liittyvät asiat. FimX:n ominaisuuksiin ei kuulu tällä hetkellä vuokrasopimusten tallentaminen tai tulostaminen, mutta käytännössä se voisi olla mahdollista.
Lähteet
Acunetix. What is SQL Injection (SQLi) and How to Prevent it. Luettavissa: xxxxx://xxx.xxxxxxxx.xxx/xxxxxxxxxxxxxxx/xxx-xxxxxxxxx/. Luettu: 10.2.2020.
Xxxxxx, Xxxxxxxx. 22.8.2019. What Is Session Hijacking: Your Quick Guide to Session Hijacking Attacks. Luettavissa: xxxxx://xxx.xxxxxxxxxx.xxx/xxxx/xxx-xxxxxxxx/xxxxxxx- hijacking/. Luettu: 15.2.2020.
Crampete. 2020. Introduction To Server-Side Programming Languages. Luettavis- sa:xxxxx://xxx.xxxxxxxx.xxx/xxxxxxxxx/xxxxx/xxxxxxxxxxxx-xx-xxxxxx-xxxx-xxxxxxxxxxx- languages/. Luettu: 15.10.2019.
Xxxxxxx, X. 2018. System Design in Software Development. Luettavissa: xxxxx://xxxxxx.xxx/xxx-xxxxxx-xxx/xxxxxx-xxxxxx-xx-xxxxxxxx-xxxxxxxxxxx- f360ce6fcbb9. Luettu: 30.9.2019.
Xxxx, X. 2016. What is a Web Application? Luettavissa: xxxxx://xxxx.xxxxxxxxx.xxx/xxx- application/. Luettu: 20.1.2020.
Xxxx, X. 27.1.2020. 10 Best JavaScript Frameworks to Use in 2020. Luettavissa: xxxxx://xxxxx.xx/xxxx/xxxx-xxxxxxxxxx-xxxxxxxxxx. Luettu: 10.2.2020.
Xxxxxxxxx, X. 12.3.2017. Mikä on MVP eli Minimum Viable Product?
Luettavissa: xxxxx://xxx.xxxxxxxxx.xx/xxxx-xx-xxx-xxx-xxxxxxx-xxxxxx-xxxxxxx/. Luettu: 27.1.2020.
Xxxx, X. 2013. SQL-opas. 13. painos. Docendo Oy. Jyväskylä
JS. Introduction to browser events. Luettavissa: xxxxx://xxxxxxxxxx.xxxx/xxxxxxxxxxxx- browser-events. Luettu: 16.2.2020.
Xxx, X. 2015. 10 Most Popular Programming Languages Today. Luettavissa: xxxxx://xxx.xxx.xxx/xxxxx-xxx/00-xxxx-xxxxxxx-xxxxxxxxxxx-xxxxxxxxx-xxxxx.xxxx. Luet- tu: 30.9.2019.
Lionite. Using PHP with MySQL – The Right Way. Luettavissa: xxxxx://xxx.xxxxxxxx.xxx/xxxxx-xxx-xxxx-xxxxx/. Luettu: 16.2.2020.
Markupbox. 2017. Top 9 Advantages of JavaScript. Luettavissa: xxxxx://xxx.xxxxxxxxx.xxx/xxxx/xxxxxxxxxx-xx-xxxxxxxxxx/xxx/. Luettu: 15.11.2019.
Xxxxxxxx, X. 2015. IOUGHT Insight: 5 Best Practices for Securing Databases. Luettavissa: xxxx://xxx.xxxx.xxx/Xxxxxxxxx/Xxxx-Xxxxxxx/XXXX-Xxxxxxx-0-Xxxx-Xxxxxxxxx-xxx-Xxxxxxxx- Databases-101930.aspx. Luettu: 10.2.2020.
XxXxxxxxxx X. 2020. PHP&MySQL: The Missing Manual. Luettavissa: xxxxx://xxx.xxxxxxx.xxx/xxxxxxx/xxxx/xxx-xxxxx/0000000000000/xx00.xxxx. Luettu: 20.9.2019.
Xxxxxx.xxx. 2018. What is HTML5 and what can I do with it? Luettavissa: xxxxx://xxxxxx.xxx/xxxxxx/xxxx-xx-xxxx0-xxx-xxxx-xxx-x-xx-xxxx-xx-x0xx00xx0xx0. Luettu: 30.9.2019.
xxx.xxx a. What is PHP? Luettavissa: xxxxx://xxx.xxx.xxx/xxxxxx/xx/xxxxx-xxxxxx.xxx. Luettu: 15.11.2019.
xxx.xxx b. What can PHP do? Luettavissa: xxxxx://xxx.xxx.xxx/xxxxxx/xx/xxxxx- whatcando.php. Luettu: 15.11.2019.
xxx.xxx c. Introduction. Luettavissa: xxxxx://xxx.xxx.xxx/xxxxxx/xx/xxxxx.xxx.xxx. Luettu: 15.11.2019.
Xxxxxxxxx, X. & Nykänen O. 2006. Web-selainohjelmointi. Docendo.
Purely Branded. Web Design or Development, What’s the Difference? Luettavissa: xxxxx://xxx.xxxxxxxxxxxxx.xxx/xxxxxxxx/xxx-xxxxxx-xx-xxx-xxxxxxxxxxx-xxxxx-xxx- difference/. Luettu: 30.9.2019.
Xxxxx, X. 2019. What is application security? A process and tools for securing software. Luettavissa: xxxxx://xxx.xxxxxxxxx.xxx/xxxxxxx/0000000/xxxx-xx-xxxxxxxxxxx-xxxxxxxx-x- process-and-tools-for-securing-software.html. Luettu: 10.2.2020
Xxxxxxx, X. 14.1.2019. Front End vs Back End Development. Luettavissa: xxxxx://xxx.xxxxxxxxxxxx.xxx/xxxx/xxxxx-xxx-xxxxxxxxxxx-xx-xxxx-xxx-xxxxxxxxxxx- where-to-start. Luettu: 30.9.2019.
Techark. 15.4.2014. Advantages of HTML5. Luettavissa: xxxxx://xxxxxxxxx.xxx/xxxx/xxxxxxxxxx-xxxx0/. Luettu: 30.9.2019.
W3C. 2016. HTML & CSS. Luettavissa: xxxxx://xxx.x0.xxx/xxxxxxxxx/xxxxxxxxx/xxxxxxx. Luettu: 15.11.2019.
WMware. 2020. Application security. Luettavissa: xxxxx://xxx.xxxxxx.xxx/xxxxxx/xxxxxxxx/xxxxxxx/xxxxxxxxxxx-xxxxxxxx. Luettu: 10.2.2020.
Wodehouse, C a. 2016. Web Development Languages 101. Luettavissa: xxxxx://xxx.xxxxxx.xxx/xxxxxx/xxxxxxxxxxx/xxx-xxxxxxxxxxx-xxxxxxxxx-000/. Luettu: 8.10.2019.
Wodehouse, C b. 2015. Front-End Web Development: Client-Side Scripting & User Expe- rience. Luettavissa: xxxxx://xxx.xxxxxx.xxx/xxxxxx/xxxxxxxxxxx/xxx-xxxxxxxxx-xxxxxxxxx- work/. Luettu: 15.10.2019.
W3Schools a. What is HTML? Luettavissa: xxxxx://xxx.x0xxxxxxx.xxx/xxxxxx/xxxxxx_xxxx.xxx. Luettu: 30.9.2019.
W3Schools b. What is CSS? Luettavissa: xxxxx://xxx.x0xxxxxxx.xxx/xxxxxx/xxxxxx_xxx.xxx. Luettu: 30.9.2019.
Liitteet
Liite 1. Vaatimusluettelo
Liite 2. UML-käyttötapauskaaviot
Käyttötapauskaavio 1. Käyttäjä kirjautuu järjestelmään henkilökohtaisilla tunnuksillaan. Järjestelmä varmentaa käyttäjän ja käyttäjä pääse käyttämään järjestelmää.
Käyttötapauskaavio 2. Käyttäjä täyttää vuokrasopimuslomakkeen, muuntaa sen PDF- tiedostoksi ja tallentaa pdf-vuokrasopimuksen omalle työasemalleen. Vuokrasopimus ja sen tiedot tuhoutuvat automaattisesti, kun käyttäjä poistuu pdf-tiedoston tulostamissivulta.
Käyttötapauskaavio 3. Käyttäjä voi päivittää, muokata tai poistaa kohteita tarvittaessa käyttöliittymän kautta. Muutetut tai poistetut tiedot tallentuvat automaattisesti järjestel- mään.
Käyttötapauskaavio 4. Käyttäjä voi päivittää, muokata tai poistaa käyttäjien tietoja tarvitta- essa käyttöliittymän kautta. Muutetut tai poistetut tiedot tallentuvat automaattisesti järjes- telmään.
Käyttötapauskaavio 5. Käyttäjä voi muokata yleisiä sopimusehtoja tarvittaessa käyttöliit- tymän kautta. Muutetut ehdot tallentuvat automaattisesti järjestelmään.
Käyttötapauskaavio 6. Käyttäjä kirjautuu ulos järjestelmästä Kirjaudu ulos-napin kautta. Järjestelmä vahvistaa uloskirjautumisen, lopettaa käyttäjän istunnan ja avaa uloskirjautu- missivun, jossa on vahvistusviesti onnistuneesta uloskirjautumisesta.
Liite 3. Tietokannan relaatiomalli
Kuvassa näkyvä relaatiomalli on tehty Excelin avulla. Tähdellä merkityt tiedot ovat pakolli- sia tietoja, jotka tulee merkitä kohteita, sopimusehtoja tai käyttäjiä muokatessa. Kuvassa näkyy myös tietokantaulujen väliset relaatiot.
Liite 4. Käyttöliittymäluonnokset
Luonnos 1. Käyttäjä kirjautuu sisään järjestelmään omilla henkilökohtaisilla tunnuksillaan.
Luonnos 2. Sisäänkirjautumisen jälkeen käyttäjä siirtyy etusivulle. Käyttäjä voi valita ha- luamansa toiminnon yläpalkin linkeistä tai etusivun linkeistä, jotka näkyvät kuvassa sini- sellä.
Luonnos 3. Käyttäjä voi muokata, lisätä tai poistaa kohteita tarvittaessa.
Luonnos 4. Luonnos vuokrasopimuslomakkeesta.
Luonnos 5. Käyttäjä voi tarvittaessa muokata yleisiä sopimusehtoja, jotka tulostetaan au- tomaattisesti kaikille vuokrasopimuksille.
Luonnos 6. Käyttäjä voi tarvittaessa muokata käyttäjien tietoja tai poistaa sekä lisätä käyt- täjiä.
Luonnos 7. Järjestelmä ilmoittaa käyttäjälle uloskirjautumisen onnistuneen, kun käyttäjä kirjautuu ulos järjestelmästä.
Liite 5. Testitapausten kuvaukset
Testitapaus 1. Yleisten sopimusehtojen päivitys.
Testitapaus 2. Vuokrasopimuksen tulostaminen.
Testitapaus 3. Kohteiden muokkaus.