• Ei tuloksia

Asiakastietojärjestelmä

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Asiakastietojärjestelmä"

Copied!
57
0
0

Kokoteksti

(1)

Janne Prokkola

ASIAKASTIETOJÄRJESTELMÄ

(2)

ASIAKASTIETOJÄRJESTELMÄ

Janne Prokkola Opinnäytetyö Syksy 2021

Tietotekniikan tutkinto-ohjelma Oulun ammattikorkeakoulu

(3)

TIIVISTELMÄ

Oulun ammattikorkeakoulu

Tietotekniikan tutkinto-ohjelma, ohjelmistokehityksen suuntautumisvaihtoehto

Tekijä: Janne Prokkola

Opinnäytetyön nimi: Asiakastietojärjestelmä Työn ohjaaja: Lasse Haverinen

Työn valmistumislukukausi ja -vuosi: Syksy 2021 Sivumäärä: 58

Tämän opinnäytetyön tavoitteina oli suunnitella ja toteuttaa asiakastilauksena Windows-sovellus, jota käytettäisiin yrityksen asiakastietojen ylläpitämisen avuksi. Sovellus toteutettiin käyttämällä C#-ohjelmointikieltä ja MVVM-arkkitehtuuria. Työssä tutkitaan myös muita arkkitehtuureja. Toisena tavoitteena oli luoda MySQL-tietokanta pilveen, suojata yhteys sovelluksen ja pilvessä olevan tietokannan välillä, sekä implementoida sovellukseen tietojen salaus ja salattujen tietojen purku, jotta mahdollisen tietomurron seurauksena tiedot eivät olisi selkotekstinä MySQL-tietokannassa.

Sovelluksen rakentaminen ja hahmottelu alkoi palaverilla, jonka pohjalta rakennettiin hahmotelma tarvittavasta tietokannasta. Sovelluksen toteutuksessa käytettiin C#- ja XAML- ohjelmointikieltä.

Ohjelmistoympäristönä käytettiin visual studiota. Kyselyt tietokantaan suoritettiin käyttämällä SQL- ohjelmointikieltä.

Lopputuloksena syntyi Windows-käyttöjärjestelmällä toimiva työpöytäsovellus, jolla työnantaja voi lisätä työntekijöitä, lisätä asiakkaita, seurata asiakkuuksia, luoda asiakaskohtaisia kirjauksia, tulostaa halutut kirjaukset PDF:nä ja tehdä yhteenvetoja.

Asiasanat: C#, Windows, Visual Studio, MySQL, Tietokannat

(4)

ABSTRACT

Oulu University of Applied Sciences

Degree Programme in Information Technology, Option of Software Development

Author: Janne Prokkola

Title of thesis: Customer information registery Supervisor: Lasse Haverinen

Term and year when the thesis was submitted: Fall 2021 Number of pages: 58

The main goal of this thesis was to develop a desktop application that which can be used to add employees, add customers, track customer relationships, create customer-specific entries, print desired entries as a PDF, and make summaries. Second goal was to design and implement a secure MySQL database for the data.

This desktop application was developed using C# and XAML programming languages, and IDE used in this project was Visual Studio 2019.

The result of the thesis was a desktop application that can be used by the employer, encrypt, and add the previously mentioned data to MySQL database.

(5)

SISÄLLYS

SANASTO...7

1 JOHDANTO ...8

2 VAATIMUSMÄÄRITTELY ...9

2.1 Alusta...9

2.2 Tietokanta...9

2.3 Tunnukset kirjautumista varten ... 10

2.4 Asiakaskohtaiset kirjaukset ... 11

2.5 Yhteenveto ... 11

3 TIETOKANTA ... 12

3.1 MySQL ... 12

3.2 MySQL Workbench ... 12

3.3 SQL ... 13

3.3.1 Tallennettu proseduuri ... 13

3.3.2 Taulu... 14

3.4 Palvelin ... 15

3.4.1 Amazon RDS ... 15

3.4.2 Google Cloud ... 16

3.4.3 Microsoft Azure ... 16

5 TIETOTURVA ... 17

5.1 Salaus – määritelmä ja merkitys ... 17

5.2 SSH ... 17

5.3 Tietojen salaus ... 17

5.3.1 Salauksen toiminta ... 17

5.3.2 Yleisiä salaustekniikoita... 18

5.4 Eri salausalgoritmeja ... 19

5.4.1 Salausalgoritmin valinta... 19

6 SOVELLUSKEHITYS ... 21

6.1 Ohjelmistokehitysmenetelmät ... 21

6.1.1 Vesiputous ... 21

6.1.2 Agile ... 21

(6)

6.2 Visual Studio 2019 ... 22

6.3 C# ... 23

6.4 WPF ... 23

6.5 .NET ... 24

6.6 XAML ... 24

6.7 Arkkitehtuurin valinta ... 24

6.7.1 MCV ... 24

6.7.2 MVP ... 26

6.7.3 MVVM ... 27

6.7.4 Johtopäätös ... 28

6.8 Versiohallinta... 28

7 KOODIN TESTAAMINEN ... 29

7.1 Mitä on koodin yksikkötestaaminen ... 29

7.2 Mihin yksikkötestaamista tarvitaan ... 29

8 SOVELLUKSEN TOTEUTUS ... 30

8.1 Tietokanta... 30

8.2 Yhdistäminen tietokantaan ... 30

8.2.1 Tallennettu proseduuri ... 31

8.3 Salauksen toteutus ... 32

8.4 Käyttöliittymä ... 33

8.4.1 Työntekijän lisääminen ... 35

8.4.2 Asiakkaan lisääminen ... 37

8.4.3 Kirjaukset... 40

8.4.4 Tiedostopankki ... 43

8.4.5 Asiakkuuksien seuranta... 47

8.4.6 Yhteenvedot ... 48

8.4.7 Salasanan vaihtaminen ... 51

9 TILAAJAN PALAUTE ... 53

10 JATKOKEHITTÄMINEN JA ITSEARVIOINTI ... 54

11 YHTEENVETO ... 55

LÄHTEET ... 56

(7)

SANASTO

C# Microsoftin kehittämä ohjelmointikieli .NET-alustalle

GUI Graafinen käyttöliittymä

IDE Integroitu kehitysympäristö

MVC Model-View-Controller ohjelmistoarkkitehtuuri MVP Model-View-Presenter ohjelmistoarkkitehtuuri MVVM Model-View-ViewModel ohjelmistoarkkitehtuuri.

MySQL Avoimeen lähdekoodiin perustuva relaatiotietokantaohjelmisto

PRISM C#-kirjasto

SSH Secure Shell, salattuun tietoliikenteeseen tarkoitettu protokolla SSL Secure Socket Layer, tietoverkkosalausprotokolla

SQL Standardoitu relaatiotietokantojen kyselykieli

UWP Universal Windows Platform

Windows Microsoftin kehittämä graafinen käyttöliittymä PC:lle

WPF Windows Presentation Foundation

XAML Extensible Application Markup Language

.NET Microsoftin kehittämä ohjelmistokomponenttikirjasto

(8)

1 JOHDANTO

Tämän opinnäytetyön tavoitteeina on suunnitella ja toteuttaa asiakastilauksena Windows-sovellus, jota käytettäisiin yrityksen asiakastietojen ylläpitämisen avuksi. Sovellus toteutetaan käyttämällä C#-ohjelmointikieltä ja MVVM-arkkitehtuuria. Työssä tutkitaan myös muita arkkitehtuureja.

Sovelluksessa on kahdenlaisia käyttäjiä: johtohenkilö ja alainen. Johtohenkilö voi lisätä uusia työntekijöitä ja nähdä kaikki meneillään olevat ja jo suljetut asiakkuudet, sillä nämä ovat tietoja jotka eivät ole alaisen nähtävissä. Loput sovelluksen toiminnallisuudesta ovat sekä alaisen että johtohenkilön käytössä, nämä toiminnallisuudet ovat asiakkaan lisääminen, tiedostojen lisääminen ja poistaminen sekä kuukausittaisten yhteenvetojen kirjaaminen.

Opinnäytetyön toisena tavoitteena on luoda MySQL-tietokanta joka sijaitsee pilvipalvelussa ja implementoida sovellukseen tietojen salaus ja salattujen tietojen purku, jotta mahdollisen tietomurron seurauksena tiedot eivät olisi selkotekstinä MySQL-tietokannassa.

(9)

2 VAATIMUSMÄÄRITTELY

Ennen kuin aloitin sovelluksen kehittämisen, pidimme tilaajan kanssa palaverin, jossa teimme yhdessä sovelluksen vaatimusmäärittelyn. Vaatimusmäärittelyssä kävimme mahdollisimman yksityiskohtaisesti kaikki tilaajan toivomat sovelluksen toiminnallisuudet. Kävimme myös läpi asiakkaan kanssa miltä käyttöliittymä tulisi näyttää.

2.1 Alusta

Tilaajan kanssa käytyjen keskustelujen jälkeen tulimme siihen tulokseen, että sovellusta pitäisi pystyä käyttämään Windows-tietokoneilla. Sovellusta mahdollisesti halutaan tulevaisuudessa muuttaa selainpohjaiseksi.

2.2 Tietokanta

Sovelluksella tulisi olla tietokanta, joka on kaikkien sovellusta käyttävien saatavissa, eli tietokanta pitää olla tilaajan omalla palvelimella tai vuokrata palveluntarjoajalta. Näistä vaihtoehdoista tilaaja valitsi palveluntarjoajan.

Suunnittelimme tilaajan kanssa tietokantaa yhteistyöpalaverissa, jonka aikana ilmeni seuraavat tarpeet, toiveet ja sisällöt tietokantaan liittyen:

Tietokanta

• Tunnukset kirjautumista varten

• Asiakkaan tiedot o Etunimi o Sukunimi o Puhelinnumero o Osoite

o Sähköposti o Huoltajien tiedot

(10)

▪ Sukunimi

▪ Rooli (Esimerkiksi isä, äiti, edunvalvoja tai muu vastaava)

▪ Puhelinnumero

▪ Osoite

▪ Sähköposti

o Vastaavan sosiaalityöntekijän tiedot

▪ Etunimi

▪ Sukunimi

▪ Puhelinnumero

o PSOP-päätösnumero (Palveluseteli- ja ostopalvelujärjestelmä) o Lisätietoja

• Tiedostopankki

o Mahdollisuus tallentaa World-, PDF- ja Excel-dokumentteja

• Käyttöliittymä

o Kirjautuminen työntekijän tunnuksilla o Työntekijän lisääminen tietokantaan o Asiakkaan lisääminen tietokantaan o Asiakkuuksien seuranta

▪ Onko asiakkuus vielä voimassa kyllä/ei

▪ Päivämäärä milloin asiakkuus on aloitettu

▪ Päivämäärä milloin asiakkuus on lopettettu o Tiedostojen lisääminen/poistaminen

o Asiakaskohtaiset kirjaukset o Yhteenvedot

2.3 Tunnukset kirjautumista varten

Työntekijöille haluttiin omat tunnukset, jotka johtohenkilö tekee. Tunnuksesta tulisi käydä ilmi on tunnuksen omista johtohenkilö vai alainen.

(11)

asiakkuuden alkamisen päivämäärä, PSOP-numero (ei pakollinen), sähköposti (ei pakollinen). Osa kentistä pitää voida olla tyhjiä, koska PSOP-numeroa ei ole vielä saatavilla, ja kaikilla ei välttämättä ole sähköpostia. Tämän takia pitää myös olla mahdollista, että jo syötettyjä tietoja pystytään muuttamaan.

2.4 Asiakaskohtaiset kirjaukset

Käyttöliittymässä olisi mahdollista tehdä päiväkohtaisia kirjauksia. Kirjauksia tehdessä voisi nähdä asiakkaan seuraavat tiedot: nimi, osoite, puhelinnumero, PSOP-numero, vastaava työntekijä, sosiaalityöntekijä, päivämäärä milloin asiakkuus on alkanut, päivämäärä milloin asiakkuus on loppunut, asiakkuuden tila ja edelliset kirjaukset.

2.5 Yhteenveto

Yhteenveto-osio on asiakkaasta kirjoitettu kuukausiraportti, joka tilaajan tulee toimittaa palvelun ostajalla kuukausittain. Yhteenveto-osioon on suunniteltu asiakkaan kanssa tekstikentät valmiiksi, jotta yhteenvetoa kirjoittaessa asiateksti pysyisi tavoitteellisena jokaisen asiakkaan kohdalla.

Tekstikenttiin on luotu seuraavat aiheet: lähtötilanne, kuukaudelle asetetut työskentelyn tavoitteet, käytetyt keinot, ilonaiheet, huolenaiheet ja tavoitteet seuraavalle kuukaudelle. Tilaajalla oli myös toivomus, että yhteenveto tallentuisi suoraan tiedostopankkiin ja ennen tallennusta voisi syöttää asiakkaan nimen ja asiakkaan vastuutyöntekijän nimen ja valita kuukausi/vuosi. Kun yhteenveto on valmis ja se tallennetaan, tulisi se tallentua suoraan tiedostopankiin ja automaattisesti antaa tiedostolle nimen seuraavassa muodossa: asiakasnumero_yhteenveto_kuukausi_vuosi.pdf.

(12)

3 TIETOKANTA

3.1 MySQL

MySQL on suosituin avoimen lähdekoodin SQL-tietokannan hallintajärjestelmä, joka on Oracle Corporationin kehittämä, jakama ja tukema. Relaatiotietokanta tallentaa tiedot erillisiin tauluihin sen sijaan, että kaikki tiedot sijoitettaisiin samaan tauluun. (1.)

MySQL-tietokantapalvelin on nopea, luotetta, skaalautuva ja helppokäyttöinen. Tietokantapalvelin toimii hyvin pöytätietokoneella tai kannettavalla tietokoneella, muiden sovellusten, verkkopalvelinten ohella. (1.)

3.2 MySQL Workbench

Tietokannan suunnittelussa apuna käytettiin ohjelmaa nimeltä MySQL Workbench. MySQL Workbench on visuaalinen työkalu muun muassa tietokanta-arkkitehdeille ja ohjelmistokehittäjille.

Workbench tarjoaa datamallinnuksen, SQL-kehityksen ja kattavat työkalut palvelimen määrityksiin, käyttäjien hallintaan, varmuuskopiointiin. (2.)

(13)

3.3 SQL

SQL, Structured Query Language (kuva 2), on ohjelmointikieli, joka on suunniteltu relaatiotietokantoihin tallennettujen tietojen hallintaan. SQL toimii yksinkertaisesti lausekkeiden avulla. Tämä pitää tiedot tarkkoina ja turvallisina ja auttaa ylläpitämään tietokantojen eheyttä koosta riippumatta. (3.)

KUVA 2. SQL kysely

3.3.1 Tallennettu proseduuri

SQL-palvelimeen tallennettu toimenpide on yhden tai useamman Transact-SQL-käskyn ryhmä tai viittaus Microsoft .Net Frameworkin Common Runtime Language (CLR) -menetelmään.

Toimenpiteet muistuttavat muiden ohjelmointikielien rakenteita.

• Hyväksyä syöttöparametrin ja palauttaa useita arvoja kutsuvalle ohjelmalle.

• Sisältää ohjelmointilausekkeita, jotka suorittavat toimintoja tietokannassa. Näitä ovat muun muassa muiden proseduurien kutsuminen.

• Palauttaa tila-arvon kutsuvalle ohjelmalle osoittamaan onnistumista tai epäonnistumista (ja epäonnistumisen syy). (4.)

(14)

3.3.2 Taulu

Taulut (Tables) ovat tietokantaobjekteja, jotka sisältävät kaikki tietokannan tiedot. Taulukoissa tiedot on järjestetty loogisesti tauluko tapaan rivi- ja sarakemuotoon. Jokainen rivi edustaa ainutlaatuista tietuetta ja jokainen sarake edustaa tietueen kenttää. (4.)

KUVA 3. Kaksi taulua client ja clientpsop

Kuvassa 3 nähdään tietokannassa olevista tauluista kaksi kappaletta. Client-taulu sisältää seuraavat tiedot, clientID (asiakkaan numero), fname (asiakkaan etunimi), lname (asiakkaan sukunimi) ja clientpsop -taulussa on kentät id (asiakkaan numero) ja psopnumber (palveluseteli- ja ostopalvelujärjestelmän numero). Vihreällä värillä voi nähdä, että clientID ja ID ovat yhteydessä toisiinsa. Taulujen välillä on yhteystyyppi jota kutsutaan nimellä yhden suhde moneen. Tämä tarkoittaa sitä, että kunkin ensimmäisen taulun tietue on liitetty yhteen TAI useampaan toisen taulun tietueeseen. Tässä tapauksessa se tarkoittaisi, että clientID:llä voisi olla monta eri PSOP-numeroa, mutta samalla PSOP-numerolla ei voi olla montaa eri clientID:tä.

Tietokannan suunnittelussa tulisi pyrkiä siihen, että taulujen välillä ei ole monesta moneen-yhteyttä, ja sama tieto tulisi esiintyä vain yhdessä paikassa. Kehitettävässä sovelluksessa clientID tulisi olla vain client -taulussa ja muut taulut, jotka käyttävät clientID:tä viittaavat tähän tauluun.

(15)

3.4 Palvelin

Palvelimella tarkoitetaan tietoliikenteen yhteydessä tietokoneessa suoritettavaa palvelinohjelmistoa sekä tällaista ohjelmistoa suorittavaa tietokonetta. Palvelinohjelmistojen tehtävänä on tarjota erilaisia palveluja muille ohjelmille joko tietokoneverkon välityksellä tai paikallisesti samassa tietokoneessa. Palvelinta käyttävää sovellusta tai tietokonetta nimitetään asiakkaaksi. Palvelin on internettiin liitetty tietokone mm. www-sivustojen säilytystä varten.

Palvelimella voi olla myös muita tehtäviä, kuten toimia sovellusalustana, yhteyslinkkinä ja niin edelleen. (5.)

Pieni yritys ei pysty hankkimaan omaa palvelinta tietokannalle, sillä tämä vaatisi osaamista muun muassa palvelimen tietoturvan ylläpitäminen, tietokantojen mahdollinen päivittäminen, verkon ylläpito ja palvelimesta tulisi myös ylimääräisiä kuluja.

Seuraavaksi käydään läpi eri palveluntarjoajia, joilta voi yritys halutessaan ostaa palvelimen tietokantaa varten.

3.4.1 Amazon RDS

Amazon on globaali suuryritys, joka tunnetaan parhaiten verkkokaupasta. Yritys aloitti nettikirjakauppana, mutta on laajentanut sittemmin myymään lähes kaikkia tuotteita. (6.) Valmista tuotetta esitellessä asiakkaalle, käytössä oli Amazon RDS (Relation Database Service) tietokanta.

Amazon Relation Database Service helpottaa relaationtietokannan määrittämistä, käyttöä ja skaalaamista pilvessä. Se tarjoaa kustannustehokasta ja muutettavissa olevaa kapasiteettia ja automatisoi aikaa vievät hallintatehtävät, kuten laitteiston valmistelun, tietokannan asennuksen, korjauksen ja varmuuskopioinnin. (7.)

(16)

3.4.2 Google Cloud

Marraskuussa 2011 käyttöön tullut Google Cloud koostuu joukoista fyysisiä resursseja, kuten tietokoneita, kiintolevyasemia sekä virtuaalisia resursseja, kuten virtuaalikoneita (VM) jotka sijaitsevat Google-konesaleissa ympäri maailmaa. Palvelinkeskukset ovat sijoitettu ympäri maapalloa. Palvelinkeskuksia on saatavana Aasiassa, Australiassa, Euroopassa, Pohjois- Amerikassa ja Etelä-Amerikassa. (8.)

Google Cloud SQL varmistaa automaattisesti, että tietokannat ovat luotettavia, suojattuja ja skaalautuvia, jotta voi jatkaa toimintaasa keskeytyksettä. Cloud SQL automatisoi kaikki varmuuskopiot, replikoinnin, salauskorjaukset ja kapasiteetin lisäämise ja samalla sillä varmistetaan yli 99,95 %:n saatavuus kaikkialla maailmassa. (8.)

3.4.3 Microsoft Azure

Azure pilvialusta sisältää yli 200 tuotetta ja pilvipalvelua, jotka on suunniteltu tuomaan uusia ratkaisuja elämään, ratkaisemaan tämän päivän haasteita ja luomaan tulevaisuutta.(9.)

(17)

5 TIETOTURVA

5.1 Salaus – määritelmä ja merkitys

Kyberturvallisuuden salaus on tietojen muuntamista luettavasta muodosta koodatuksi. Salatut tiedot voidaan lukea tai käsitellä vasta salauksen purkamisen jälkeen. Salaus on tietoturvan perusrakenne. Se on yksinkertaisin ja tärkein tapa varmistaa, että joku, joka haluaa käyttää niitä haitallisiin tarkoituksiin, ei voi varastaa ja lukea tietoja. (11.)

Yksittäiset käyttäjät ja suuret yritykset käyttävät laajalti tietoturvan salausta suojaamaan selaimen ja palvelimen välillä lähetettyjä käyttäjätietoja. Nämä tiedot voivat sisältää kaiken maksutiedoista henkilökohtaisiin tietoihin. Tietojen salausohjelmistoa, joka tunnetaan myös nimellä salausalgoritmi tai salaus, käytetään salausmenetelmän kehittämiseen, joka teoreettisesti voidaan rikkoa vain suurilla laskentatehoilla. (11.)

5.2 SSH

SSH, Secure Shell, on suosittu, tehokas, ohjelmistopohjainen lähestymistapa verkkotuvallisuuteen.

Aina kun tietokone lähettää tietoja verkkoon, SSH salaa (sekoittaa) ne automaattisesti. Kun data saavuttaa aiotun vastaanottajan, SSH purkaa salauksen automaattisesti. Tuloksena on läpinäkyvä salaus: käyttäjät voivat työskennellä normaalisti tietämättä, että heidän viestintänsä on turvallisesti salattu verkossa. Lisäksi SSH käyttää moderneja, suojattuja salausalgoritmeja ja on tarpeeksi tehokas, jotta suuretkin yritykset käyttävät tätä omissa sovelluksissaan. (10.)

5.3 Tietojen salaus 5.3.1 Salauksen toiminta

Kun tietoja tai dataa jaetaan internetin välityksellä, ne kulkevat maailmanlaajuisten verkkolaitteiden läpi, jotka ovat osa julkista internetiä. Kun data kulkee julkisen internetin kautta, hakkerit voivat vaarantaa tai varastaa sen. (11.)

(18)

Salaus sisältää ihmiselle luettavan selkeän tekstin muutamisen käsittämättömäksi tekstiksi, joka tunnetaan salauskirjoitustekstinä. Pohjimmiltaan tämä tarkoittaa luettavien tietojen ottamista ja muuttamista niin, että ne näyttävät satunnaisilta. Salaus sisältää salausavaimen käytön, joukon matemaattisia arvoja. Vastaanottaja käyttää avainta tietojen purkamiseen ja muuttaa ne takaisin luettavaksi tekstiksi. (11.)

Mitä monimutkaisempi salausavain, sitä turvallisempi salaus, koska kolmannet osapuolet eivät todennäköisesti saa purettua avainta raa’an voiman hyökkäyksillä (eli kokeilevat satunnaislukua, kunnes oikea yhdistelmä on arvattu). (11.)

Salausta käytetään myös salasanojen suojaamiseen. Salasanan salausmenetelmät sekoittavat salasanasi, joten hakkerit eivät voi lukea sitä. (11.)

5.3.2 Yleisiä salaustekniikoita

Kaksi yleisintä salausmenetelmää ovat symmetrinen ja epäsymmetrinen salaus. Nimet viittaavat siihen, käytetäänkö samaa avainta salaukseen ja salauksen purkuun. (11.)

• Symmetriset salausavaimet: Tätä kutsutaan myös yksityisen avaimen salaukseksi.

Koodauksessa käytetty avain on sama kuin purkamiseen käytetty avain, joten se on paras yksittäisille käyttäjille ja suljetuille järjestelmille. Muussa tapauksessa avain on lähetettävä vastaanottimelle. Tämä lisää kompromissiriskiä, jos kolmas osapuoli, kuten hakkeri, sieppaa sen. Tämä menetelmä on nopeampi kuin epäsymmetrinen menetelmä. (11.)

• Epäsymmetriset salausavaimet: Tämä tyyppi käyttää kahta eri avainta – julkista ja yksityistä – jotka on linkitetty toisiinsa matemaattisesti. Avaimet ovat olennaisesti suuria numeroita, jotka on yhdistetty toisiinsa, mutta eivät ole identtisiä, joten siksi käytetään termiä epäsymmetrinen. Omistaja pitää yksityisen avaimen salassa, ja julkinen avain joko jaetaan valtuutettujen vastaanottajien kesken tai asetetaan suuren yleisön saataville.

Vastaanottajan julkisella avaimella salatut tiedot voidaan purkaa vain vastaavalla yksittäisellä avaimella. (11.)

(19)

5.4 Eri salausalgoritmeja

On olemassa useita erityyppisiä salausalgoritmeja, jotka on suunniteltu eri tarkoituksiin. Uusia algoritmeja kehitetään, kun vanhemmat tulevat epävarmoiksi. Jotkut tunnetuimmista salausalgorimeista ovat: (11.)

• DES -salaus: DES on lyhenne sanoista Data Encryption Standard. Tämä on vanhentunut symmetrinen salausalgoritmi, jota ei pidetä sopivana nykypäivän käyttöön. Siksi muut salausalgoritmit ovat syrjäyttäneet DES:n. (11.)

• 3DES -salaus: 3DES tarkoittaa Triple Data Encryption Standardia. Tämä on symmetrinen avainalgoritmi, ja sanaa ”kolminkertainen” käytetään, koska tiedot kulkevat alkuperäisen DES -algoritmin läpi kolme kertaa salausprosessin aikana. Triple DES käyttö ollaan lopettamassa hiljalleen, mutta onnistuu silti suomaan luotettavan laitteistosalausratkaisun rahoituspalveluille ja muille toimialoille. (11.)

• AES -salaus: AES on lyhenne sanoista Advanced Encryption Standard ja kehitettiin päivittämään alkuperäinen DES -algoritmi. Joitakin yleisimpiä AES -algoritmin sovelluksia ovat viestisovellukset, kuten Signal tai WhatsApp, ja tiedostojen arkistointiohjelma WinZip.

• RSA -salaus: RSA oli ensimmäisiä yleisesti saatavilla oleva epäsymmetrinen salausalgoritmi. RSA on suosittu avaimenpituutensa vuoksi, ja siksi sitä käytetään laajalti suojatussa tiedonsiirrossa. RSA on lyhenne sanoista Rivest, Shamir ja Adleman – matemaatikkojen sukunimet, jotka kertoivat tästä algoritmista. RSA:ta pidetään epäsymmetrisenä algoritmina, koska se käyttää avainpareja. (11.)

5.4.1 Salausalgoritmin valinta

Tietoni salausalgoritmeistä ei ole kovin laaja, joten kun olin tutkinut eri salausalgoritmeja, tulin siihen tulokseen, että tällaisessa sovelluksessa salausavain voi olla symmetrinen, koska kommunikaatio on sovelluksen ja tietokannan välillä. Valitsin Advanced Encryption Standardin koska tämä on laajasti käytetty, hyvin testattu, luotettava ja tarvittaessa saa hyvin apua erilaisissa tilanteissa. Tämän symmetrisellä salausvaimella toteutetun salauksen voisi tehdä usealla tavalla, esimerkiksi tieto lähetettäisiin tietokataan, ja tietokannassa tapahtuisi salaus ja salauksen purku, mutta tässä olisi useampi eri haavoittuvuus. Koska salaus tapahtuisi vasta tietokannassa, voisi

(20)

kolmas osapuoli päästä tietoihin käsiksi sovelluksen välittäessä niittä tietokannalle. Salausavain pitäisi joko tallentaa tietokantaan tai lähettää aina viestin mukana, mutta myös tässä avain voisi helposti joutua vääriin käsiin.

Olen siis toteuttanut salauksen seuraavalla tavalla. Sovellus käyttää yhtä avainta salatakseen kaiken tiedon. Salaus taphtuu sovelluksen sisällä ennen kuin tieto lähetetään tietokantaan. Näin ollen jos kolmas osapuoli pääsee tietoihin käsiksi, ei hänellä ole tietoa siitä millaista salausta on käytetty, ja mitä tieto mahdollisesti sisältäisi. Tässä tavassa on kuitenkin huono puoli se, että kaikki tiedot ovat yhden avaimen takana. On siis mahdollista, että avain menisi hukkaan ja tietoja ei saa- taisi enää auki. Avaimen voi kuitenkin antaa asiakkaalle ja hänelle kerrotaan kuinka se toimii, ja että se tulisi pitää varmasti tallessa.

(21)

6 SOVELLUSKEHITYS

6.1 Ohjelmistokehitysmenetelmät

Ohjelmistokehitys viittaa loogiseen prosessiin, jonka tarkoituksena on luoda ohjelmoitu ohjelmisto, joka täyttää ainutlaatuiset liiketoiminnalliset tai henkilökohtaiset tavoitteet tai prosessit. Tavoite saavutetaan ohjelmistokehittäjällä, joka kirjoittaa tietokonekoodia. Se sisältää kuitenkin myös muita vaiheita, kuten tutkimusta, tietojen ja prosessivirran suunnittelua, teknisten asiakirjojen kirjoittamista, kattavaa testausta ja virheenkorjausta.(12.)

6.1.1 Vesiputous

Vesiputousmalli (Waterfall) edistää lineaarista ja peräkkäistä lähestymistapaa ohjelmistokehitykseen. Seuraavat vaiheeta suoritetaan perkkäin vesiputouksessa:

• Vaatimukset: Kerää, analysoi, dokumentoi.

• Suunnittelu: Ohjelmistoarkkitehtuurin suunnittelu ja valinta.

• Koodi: Ohjelmiston kehittäminen ja integrointi.

• Testaus: Vikojen järjestelmällinen löytäminen ja vianetsintä.

• Käyttö: Järjestelmien asennus, tuki ja ylläpito.

Todellisuudessa vesiputous-toteutuksessa jokainen yllä olevista vaiheista edustaa erilaista ohjelmistokehityksen vaihetta, ja jokainen vaihe päättyy yleensä ennen seuraavaan vaiheen alkua.

Jokaisen välillä on portaat: esimerkiksi ennen suunnitteluvaiheen aloittamista on saatava asiakkaan hyväksyntä. (12.)

6.1.2 Agile

Ketterä (Agile) metofologia kehittyi erilaisista kevyistä ohjelmistomenetelmistä 1990 -luvulla, ja se on vastaus joihinkin tilanteisiin, missä ei haluta käyttää jäykkää, lineaarista vesipustousmenetelmää. Se keskittuu joustavuuteen, jatkuvan parantamiseen ja nopeuteen.

Ketterässä menetelmässä noudatetaan inkrementaalista lähestymistapaa.(12.)

(22)

Kehittäjät aloittavat yksinkertaisella projektisuunnittelulla ja alkavat sitten työskennellä pienten moduulien parissa. Näiden moduulien työ suoritetaan viikoittain tai kuukausittain, ja jokaisen sprintin lopussa arvioidaan projektin prioriteetit. Siten vesiputousmallin vastaavat vaiheet suoritetaan jokaisessa sprintissä. Nämä sprintit mahdollistavat vikojen tutkimisen ja asiakkaiden palautteen sisällyttämisen suunnitteluun ennen seuraavan sprintin alkua. (12.)

Prosessia on kuitenkin hallittava hyvin ja dokumentointia on valvottava, koska nopea kehitys voi johtaa epäjärjestykseen. Oiken toteutettuna tuloksena on kuitenkin nopea, vähäriskinen ja tehokas työkalu. (12.)

6.1.3 Kehitysmenetelmän valinta

Koska työskentelin projektissa yksin ja monesti tilaaja ohjelmaa tilatessa ja vaatimusmäärittelyitä luodessaan ei tiedä kaikkia yksityiskohtia mitä ohjelmaltaan haluaa, tulisi kehityksen olla Ketterä, tai ketterästä tehty hybridi.

Prosessi eteni opinnäytetyössä kuin ketterä-mallissa yleensä, mutta dokumentaatiota ei vaadita.

Korkeintaan käyttöohjeet, jota ei vaatimusmäärittelyssä ole noussut esille. Asiakkaan kanssa keskustelimme noin kahden viikon välein, tai tiheämpään. Keskustelun aikana joko tilaaja testasi ohjelmaa ja kertoi miten haluaisi asioita muutettavan, tai mitkä asiat ovat hänen mielestään hyvin, tai minä esitän kysymyksiä, jotka ovat nousseet kehityksen aikana.

Ketterä menetelmä tässä projektissa on hyvä, koska sovelluksen kehityksen aikana saadaan tilaajalta nopeasti palautetta, ja tilaaja näkee mitä tulee saamaan. Lisäksi siinä tilanteessa voi huomata, että jokin asia kannattaa tehdä eri tavalla, vaikka tilaaja itse on halunnut ensin sen tehtävän toisin.

6.2 Visual Studio 2019

Visual studio on integroitu kehitysympäristö (IDE), jonka Microsoft on kehittäny kehittämään

(23)

kirjoittamiseen C#:ia, C++:ia, VB:ia (Visual Basic), Python:ia, JavaScript:ia ja se tukee yhteen 36:ta eri ohjelmointikieltä. Visual studio on saatavana Windowsille ja macOS:lle. (13.)

6.3 C#

C# (lausutaan “see sharp”) on moderni, olio- ja tyyppikohtainen ohjelmointikieli. C# antaa kehittäjille mahdollisuuden rakentaa monenlaisia suojattuja ja vankkoja sovelluksia, jotka toimivat .NET ekosysteemissä. C#:n juuret ovat C-kieliperheessä, ja se on heti tuttu C, C++, Java ja JavaScript ohjelmoijille. (14.)

C# on olio- ja komponentti ohjelmointikieli (kuvassa 4). C# tarjoaa kielirakenteita tukemaan näitä käsitteitä, mikä tekee C#:stä luonnollisen kielen, jolla voidaan luoda ja käyttää ohjelmistokomponentteja. (14.)

KUVA 4. Kuvakaappaus C# koodista 6.4 WPF

Windows Presentation Foundation (WPF) on käyttöliittymäkehys, jolla luodaan työpöytäsovelluksia. WPF-kehitysalusta tukee laajaa joukkoa sovelluskehitysominaisuuksia, mukaan lukien sovellusmalli, resurssit, hallintalaitteet, grafiikka, asettelu, tietojen sitominen, asiakirjat ja turvallisuus. Kehys on osa .NET- kehitysalustaa. (15.)

(24)

6.5 .NET

.NET(dotnet) on Microsoftin luoma avoimen lähdekoodin kehitysalusta monenlaisten sovellusten rakentamiseen. .NET:n avulla voidaan rakentaa muun muassa työpöytä- mobiili- tai IoT-sovelluksia (16.)

6.6 XAML

Extensible Application Markup Language (XAML) on deklaratiivinen merkintäkieli. XAML yksinkertaistaa käyttöliittymän luomista .Net Core-sovellukselle. XAML:llä voidaan luoda näkyviä käyttöliittymäelementtejä deklaratiivisessa XAML-merkinnässä ja erottaa siten käyttöliittymän määritelmän ajonaikaisesta logiikasta käyttämällä kooditiedostoja, jotka on liitetty merkintään osittaisten luokkamäärittelyjen avulla. (17.)

6.7 Arkkitehtuurin valinta

Koska ohjelmistokehityksessä ei ole kultaista keskitietä arkkitehtuurin suhteen, käyn läpi eri mahdollisuudet ja mitä minun kannataisi tässä projektissa käyttää.

6.7.1 MCV

MVC (Model-View-Controller)- arkkitehtuurimalli jakaa sovelluksen kolmeen pääryhmään: mallit, näkymät ja ohjaimet. Käyttämällä tätä mallia käyttäjäpyynnöt ohjataan ohjaimelle, joka vastaa mallin kanssa käyttäjän toimintojen suorittamisesta ja/tai kyselyiden tulosten noutamisesta. Ohjain valitsee käyttäjälle näytettävän näkymän ja toimittaa sille kaikki vaaditut mallitiedot. (18.)

Tämä vastuiden rajaaminen auttaa skaalaamaan sovelluksen monimutkaisuuden kannalta, koska on helpompaa koodata, korjata ja testata jotain (malli, näkymä, tai ohjain), jolla on yksi tehtävä. On vaikeampaa päivittää, testata, ja korjata koodia, joka on riippuvainen kahdesta tai useammasta näistä kolmesta alueesta. Esimerkiksi käyttöliittymälogiikka muuttuu yleensä useammin, kuin

(25)

aiheuttaa usein virheitä ja vaatii liiketoimintalogiikan uudelleen testaamista jokaisen pienen käyttöliittymämuutoksen jälkeen. (18.)

Mallin velvollisuudet

MVC -sovelluksen malli edustaa sovelluksen tilaa ja kaikkea sen suoritettavaa liiketoimintalogiikaa tai toimintoja. Liiketoimintalogiikka tulee sisällyttää malliin yhdessä minkä tahansa toteutuslogiikan kanssa sovelluksen tilan ylläpitämiseksi. Vahvasti kirjoitetuissa näkymissä käytetään yleensä ViewModel -tyyppejä, jotka on suunniteltu sisältämään kyseisessä näkymässä näytettävät tiedot.

Ohjain luo ja käyttää nämä ViewModel -ilmentymät mallista. (18.)

Näkymän vastuut

Näkymät on vastuussa sisällön esittämisestä käyttöliittymän kautta. Näkymissä tulisi olla minimaalinen logiikka, ja niiden logiikan tulisi liittyä sisällön esittämiseen. (18.)

Ohjaimen velvollisuudet

Ohjaimet ovat komponentteja, jotka käsittelevät käyttäjien vuorovaikutusta, toimivat mallin kanssa ja valitsevat lopulta renderöitävän näkymän. MVC-sovelluksessa näkymä näyttää vain tietoja;

ohjain käsittelee ja reagoi käyttäjän syötteisiin ja vuorovaikutukseen. MVC -mallissa ohjain on sovelluksen aloituskohta, ja ohjain on vastuussa siitä minkä mallityypin kanssa työskennellään ja mikä näkymä renderöidään. (18.)

KUVA 5. MVC-Kaava (22.)

(26)

6.7.2 MVP

MVP (Model-View-Presenter)- arkkitehtuurimalli on samanlainen kuin MVC -malli, jossa ohjain on korvattu esittelijällä. Tämä suunnittelumalli jakaa sovelluksen kolmeen pääosaan: malli, näkymä ja esittelijä. (19.)

Malli

Malli edustaa luokkajoukkoa, joka kuvaa liiketoimintalogiikkaa ja dataa. Siinä määritellään myös liiketoimintasäännöt tiedoille, eli miten tietoa voidaan muuttaa ja käsitellä. (19.)

Näkymä

Näkymä edustaa käyttöliittymäkomponentteja, kuten CSS, jQuery, html jne. Se on vastuussa vain esittäjältä saatujen tietojen näyttämisestä tuloksena. Tämä myös muuttaa mallin/mallit käyttöliittymäksi. (19.)

Esittäjä

Esittäjällä on vastuu kaikkien käyttöliittymätapahtumien käsittelystä näkymän puolesta. Tämä vastaanottaa syötteen käyttäjiltä näkymän kautta, käsittelee sitten käyttäjän tiedot mallin avulla ja välittää tulokset takaisin näkymään. Toisin kuin näkymä ja ohjain, näkumä ja esittelijä on täysin irroitettu toisistaan ja kumminikoivat toistensa kanssa käyttöliittymän avulla. (19.)

(27)

6.7.3 MVVM

MVVM tarkoittaa Model-View-ViewModel. Tämä malli tukee kaksisuuntaista tietojen sitomista näkymän ja view-mallin välillä. Tämä mahdollistaa muutosten automaattisen siirtymisen näkymän tilamallin sisällä näkymään. Yleensä näkymämalli käyttää tarkkailijakuvioita (eng. observer pattern) ilmoittaakseen muutoksista näkymämallissa. (19.)

Malli

Malli edustaa luokkajoukkoa, joka kuvaa liiketoimintalogiikkaa ja dataa. Siinä määritellään myös liiketoimintasäännöt tiedolle eli miten tietoja voidaan muuttaa ja käsitellä. (19.)

Näkymä

Näkymä edustaa käyttöliittymäkomponentteja, kuten CSS, jQuery, html jne. Se on vastuussa vain ohjaimesta saatujen tietojen näyttämisestä. Tämä myös muuttaa mallit käyttöliittymäksi. (19.)

Näkykämalli

Näkymämalli on vastuussa menetelmien, komentojen ja muiden ominaisuuksien paljastamisesta, jotka auttavat ylläpitämään näkymän tilaa, manipuloimaan mallia näkymän toimintojen seurauksena ja käynnistämään tapahtumia itse näkymässä. (19.)

KUVA 7. MVVM malli (24.)

(28)

6.7.4 Johtopäätös

Mielestäni projektiin sopii parhaiten MVVM-arkkitehtuuri, sillä tämä helpottaa koodin testaamista, ylläpitämistä, ja mahdollisen työpöytäsovelluksen muuttamisen web-sovellukseksi.

6.8 Versiohallinta

Versionhallinta, joka tunnetaan myös nimellä lähdevalvonta (engl. source control), on käytäntö ohjelmistokoodin muutosten suoraamiseen ja hallintaan. Versiohallintajärjestemät ovat ohjelmistotyökaluja, jotka auttavat ohjelmistotiimejä hallitsemaan lähdekoodin muutoksia ajan myötä. (20.)

Versiohanllintaohjelmisto seuraa kaikkia koodin muutoksia tietyn tyyppisessä tietokannassa. Jos tehdään virhe, kehittäjät voivat ”kääntää kellia taaksepäin” ja verrata koodin aiempaa versiota korjatakseen virheen. (20.)

Sovelluksen kehityksen aikana haluttiin minimoida mahdolliset tiedon menetykset, eli omalla työasemalla tiedostojen korruptoituminen, tai vaikkapa huonossa tapauksessa kovalevyn rikkoutuminen. Ohjelmistokehityksen aikana syntyneet eri versiot pidettiin tallessa versionhallintatyökalussa nimeltä GitHub.

(29)

7 KOODIN TESTAAMINEN

7.1 Mitä on koodin yksikkötestaaminen

Ohjelmistokehitysprosessissa Unit Testit, eli yksikkötestaukset testaavat periaatteessa yksittäisiä koodin osia. Yksikkötesti on minkä tahansa ohjelmoijan kirjoittama koodi, joka testaa suurten ohjelmien pieniä toimintoja. Yksikkötestien suorittaminen on aina suunniteltu yksinketaiseksi,

”UNIT” on tässä mielessä pienin osa suurta koodiosaa, joka on järkevää testata, lähinnä menetelmä jonkin luokan monista menetelmistä. Yleensä testitapaukset kirjoitetaan funktioiden muodossa, jotka arvioivat ja määrittävät, onko palautettu arvo yksikötestin suorittamisen jälkeen sama kuin arvo, jotka odotit funktion kirjoittamisen aikana. Yksikkötestauksen päätavoite on eristää yksikön osa koodista ja vahvistaa sen oikeellisuus ja luotettavuus. (21.)

7.2 Mihin yksikkötestaamista tarvitaan

Yksi arvokkaimmista eduista yksikkötestien käytöstä kehitykseesi on se, että se voi antaa positiivisen luottamuksen siihen, että koodisi toimii odotetulla tavalla sen kehittämisprosessissa.

Yksikkötestit antavat aina varmuuden siitä, että se johtaa pitkän aikavälin kehitysvaiheeseen, koska yksikkötestien avulla voi helposti tietää, että peruskoodilohko on täysin luotettava siihen. (21.)

On muutamia syitä, miksi kehittäjän on suunniteltava ja kirjoitettava testitapauksia varmistaakseen, että moduulin tärkeimmät vaatimukset validoidaan testauksen aikana.

• Yksikkötestaus lisää luottamusta ja varmuutta koodin muuttamiseen ja ylläpitoon kehitysprosessissa.

• Yksikkötestauksella on aina mahdollista löytää ongelmia kehitysvaiheen alkuvaiheessa.

• Koodit ovat uudelleenkäytettäviä ja luotettavia.

• Kehitys nopeutuu.

• Helppo automatisoida. (21.)

(30)

8 SOVELLUKSEN TOTEUTUS

8.1 Tietokanta

8.2 Yhdistäminen tietokantaan

Jotta tietokantaan pästään käsiksi, pitää luoda yhteys tietokannan ja sovelluksen välillä. Yhteyden luomiseen käytämme MySQL:n omaa kirjastoa nimeltä MySQL Connector. MySQL connector tarvitsee merkkijonon (string), jossa pitää olla kuvan 6 tarvitsemat tiedot. Server on osoite, jossa tietokanta sijaitsee. Tämän osoitteen saa palveluntarjoajalta, kun tietokanta on luotu. Uid on käyttäjätunnus, mikä pitää erikseen luoda sen jälkeen, kun tietokanta on luotu. Pwd on käyttäjätunnuksen salasana, ja database on luodun tietokannan nimi.

Tietokantaan yhdistäminen tulee tapahtumaan monessa eri luokassa ja metodissa, joten on viisasta, että yllä mainitut tiedot olisivat vain yhdessä paikassa. Näin vältetään turhalta työltä ja virheiltä, jos tiedot muuttuvat. Kuvassa 6 on tiedot syötetty app.config-tiedostoon ja merkkijonolle annettu nimeksi myDatabaseConnectionString.

KUVA 8. App.config tiedosto

Kuvassa 9 ConfigurationManager luokka osaa automaattisesti etsiä app.config tiedostosta tarvittavat tiedot.

KUVA 9. ConnectionString merkkijono

(31)

KUVA 10. MySQL connection -olio

Kuvassa 11 yhteys luodaan tietokantaan, ja yhteyden luonti on sijoitettu try-catch lohkoon, joka nimensä mukaan yrittää (try) suorittaa toimintoa koodissa, ja jos koodia suorittaessa tulee virhe, ottaa kiinni (catch) haara tämän virheen.

KUVA 11. Try-catch

8.2.1 Tallennettu proseduuri

Kuvassa 12 on tallennettu proseduuri, jolla lisätään asiakkuus tietokantaan. Proseduurin nimi on InsertClientCustomership, ja parametreina annetaan etunimi, sukuninmi, osoite, suuntanumero, asunnon numero, kaupunki, puhelinnumero, sähköposti, PSOP-numero, vastaavan työntekijän nimi, sosiaalityöntekijän nimi ja aloituspäivämäärä. Kun transaktio aloitetaan, ensimmäisenä syötetään asiakaan etunimi ja sukunimi. Tämän jälkeen jos tiedot on syötetty onnistuneesti, otetaan viimeisin syötetty ID talteen, joka on siis tämän lisätyn asiakkaan ID. Loput tiedoista syötetään omaan tauluun, ja linkitetään asiakkaaseen käyttämällä tallennettua ID:tä.

(32)

KUVA 12. Tallennettu proseduuri asiakkuuden aloittamiseen

Koska jokaiseen tauluun tallentaminen tapahtuu tietokannan puolella, tämä tekee siitä toiminnallisesti varmempaa, koska ei tarvitse jokaiseen tauluun erikseen tehdä tallentamista C#:n puolella, vaan voi lähettää kaikki tiedot kerran, ja tietokanta hoitaa loput. Tällä tavalla voidaan myös mahdollisen virheen tullessa helposti palauttaa tietokanta siihen pisteeseen, missä tietokanta oli ennen transaktion aloitusta ja jolla estetään, että vain osa tiedoista menisi tauluihin.

KUVA 13. Tallennetun proseduurin kutsu C#:lla 8.3 Salauksen toteutus

Tässä kappaleessa käyn läpi AES salauksen toteutuksen sovelluksen puolella. Kuvassa 10 on itse tekemäni HelperFuntions-luokan metodi nimeltä EncryptString. Tein luokan HelperFunctions, koska tämän luokan kautta voidaan käyttää samaa koodia sovelluksen eri osissa, eikä täten tarvitse

(33)

EncryptString tarvii toimiakseen kaksi parametria: merkkijono key, jota käytetään salausavaimena ja merkkijonon plainText joka on tietoa mitä halutaan salata. Aes aes = Aes.Create() tässä kutsutaan .NET:n asennuksen mukana tulleesta Security.Cryptograpgy kirjastosta luokan Aes metodia Create(), metodi palauttaa salausobjectin jota käytetään symmetrisen algoritmin suorittamiseen.

KUVA 14. EncryptString metodi

KUVA 15. DecryptString metodi 8.4 Käyttöliittymä

Käyttöliittymässä käytetyt elementit ovat sidottu (eng. binding) koodiin. Kuvassa 16 on kuvakaappaus XAML-koodista joka on MVVM:n View osiossa, jossa tekstikentän Text-muuttuja on sidottu muuttujaan Kirjaaja.

(34)

KUVA 16. ViewModel XAML

Kuvassa 17 voimme nähdä kuinka C#:lla ViewModelissa pääsemmen käsiksi sidottuun kirjaajaan.

KUVA 17. C# sidottu kirjaaja

Kuvassa 18 näemme kuinka VievModelilta saatua tietoa voidaan nyt käyttää esimerkiksi SQL- kyselyssä

KUVA 18. Sidotun muuttujan käyttö

Käyttöliittymä on tällä hetkellä pelkkä prototyyppi, jolla näytetään asiakkaalle toiminnallisuus.

Käyttöliittymä tulee muuttumaan, kunhan asiakkaalta saadaan tarvittavat tiedot, kuten väriteema, logot jne.

(35)

KUVA 19. Ohjelman käynnistys

Kuvassa 19 nähdään, että ohjelman käynnistyessä aukeaa ikkuna, jota käytetää kirjautumiseen.

8.4.1 Työntekijän lisääminen

KUVA 20. Lisää työntekijä

(36)

Kuvassa 20 näkymänä on lisää työntekijä. Tässä voidaan tietokantaan lisätä työtekijän tiedot ja valita, onko hän normaali työntekijä vai johtotehtävässä. Tätä tietoa tullaan käyttämään jatkokehityksessä, kun kirjautuminen on tehty, ja näkymä muuttuu työntekijän statuksen mukaan.

KUVA 21. Täytetyt tiedot

Kuvassa 21 on tiedot täytetty ja salasana on näkyvänä, koska tämän salasanan työnantaja antaa työntekijälle tiedoksi. Jatkokehityksen yhtenä osana on salasanan vaihtaminen, kun työntekijä kirjautuu ohjelmaan ensimmäistä kertaa.

KUVA 22. Työntekijä on olemassa

(37)

KUVA 23. Työntekijä lisätty onnistuneesti

Kun työntekijä on lisätty onnistuneesti tietokantaan, tulee siitä ilmotus, jossa näkyy vielä uudestaan mitkä tiedot on lisätty tietokantaan. Ilmotuksen näkee kuvassa 23.

8.4.2 Asiakkaan lisääminen

KUVA 24. Asiakkaan lisääminen

(38)

Kuvassa 24 nähdään Lisää asiakas -näkymä. Näkymässä on kaksi välilehteä: Lisää Asiakas ja Päivitä Asiakas. Asiakasta lisätessä kaikkia tietoja ei välttämättä tiedetä, siksi osa tiedoista on lisätietojen alla ja nämä voidaan jättää tyhjäksi. Asiakkuuden alkamisen ajankohta valitaan kalenterista.

KUVA 25. Asiakkuuden alku

KUVA 26. Asiakas lisätty

Kun asias on lisätty onnistuneesti, nähdään ikkunasta asiakkaan tiedot ja asiakasnumero.

Asiakkaan nimeä ei tulla käyttämään muissa tilanteissa, kuin asiakasta lisätessä, tai tietoja

(39)

KUVA 27. Päivitä asiakas

Asiakkaan tietoja pitää pystyä päivittämään asiakkuuden aikana. Tätä varten on tehty oma välilehti, missä etsitään asiakkaan tiedot asiakasnumerolla, jonka jälkeen haluttuja tietoja voidaan muuttaa.

Asiakkuus voidaan myös lopettaa valitsemalla Lopeta asiakkuus, jonka jälkeen on mahdollista valita päivämäärä.

KUVA 28. Tietojen päivitys

Asiakkaan tietojen päivytyksestä tulee samanlainen ilmoitus, kuin asiakkaan tietojen luodessa.

(40)

8.4.3 Kirjaukset

KUVA 29. Kirjausten luonti

Kun aloitetaan luomaan kirjauksia, haluttiin siinä näkyvän edelliset kirjaukset ja asiakkaan perustiedot. Asiakkan tiedot haetaan asiakasnumerolla. Työntekijä ladataan automaattisesti sen mukaan kuka on kirjautunut ohjelmaan, näin ei voida tehdä kirjauksia toisen nimellä.

KUVA 30. Asiakkaan tiedot

Asiakkaasta haetaan tiedot käyttämällä asiakasnumeroa. Kuvassa 30 on haettu kuvassa 26 luodun

(41)

KUVA 31. Edelliset kirjaukset

Jos asiakkaalle on luotu kirjauksia, tulevat edelliset kirjaukset näkyviin kuten kuvassa 31 voimme nähdä. Kirjauksesta näkee kuka kirjauksen on tehnyt sekä kirjauksen päivämäärän ja kelloajan.

(42)

KUVA 32. Tallenna PDF

Kuvassa 32 nähdään tulostettu PDF, jossa on kaikki asiakkaasta luodut kirjaukset. PDF:n tulotuksessa on käytetty kirjastoa nimeltä MirageDoc. Kuvassa 33 voidaan nähdä kuinka koodissa luodaan asetukset, jossa määritellään muunmuassa mitä fonttia käytetään, fontin väri, koko jne.

(43)

KUVA 33. MirageDoc asetukset 8.4.4 Tiedostopankki

KUVA 34. Tiedostot

Kuvassa 34 nähdään tietokannassa olevat tiedostot. Jokaisen tiedoston voi joko yksitellen poistaa tai ladata omalle tietokoneelle.

(44)

KUVA 35 Tiedoston lisäys

Tiedostoa lisättäessä aukeaa ikkuna, mistä voidaan valita haluttu tiedostot. Tiedostojen koneelle lataamisessa ja tiedostopankkiin tallennuksessa käytetään System.IO:n mukana tulevaa filestream-luokkaa.

KUVA 36. Tiedosto tallennettu tietokantaa

(45)

KUVA 37. Päivittynyt lista

Kun tiedosto on lisätty onnistuneesti tietokantaan, päivittyy lista tiedostoista automaattisesti.

KUVA 38. Poistettu tiedosto

Jos tiedosto poistetaan onnistuneesti, tulee siitä ilmoitus käyttäjälle.

(46)

KUVA 39. Kuvan tallennus

Kun kuva halutaan tallentaa tietokoneelle, painetaan Lataa-painiketta, ja valitaan minne tiedosto tallennetaan.

KUVA 40. Tallennettu tiedosto

Jos tiedosto on tallennettu onnistuneesti, tulee siitä ilmoitus käyttäjälle, jossa näkyy tiedoston nimi ja sijainti.

(47)

8.4.5 Asiakkuuksien seuranta

KUVA 41. Asiakkuudet

Kaikki päättyneet ja voimassaolevat asiakkuudet noudetaan tietokannasta ja näkyvät listana Kuvassa 41.

(48)

8.4.6 Yhteenvedot

KUVA 42. Yhteenveto

Kuukausittaisessa yhteenvedossa on tekstikenttä seuraaville tiedoille: lähtötilanne, työskentelyn tavoitteet, keinot ja metodit, ilonaiheet, huolenaiheet ja lopuksi tavoitteet seuraavalle kuukaudelle.

Tässä vastuutyöntekijä on se henkilö, joka on kirjautunut sisään. Tällä estetään muiden nimissä tehtyjä kirjauksia.

(49)

KUVA 43. Yhteenveto täytettynä

KUVA 44. Tietokannassa oleva tiedosto

Yhteenveto muutetaan PDF-tiedostoksi ja tallennetaan tietokantaan nimellä asiakasnumero_Yhteenveto_kuukausi_vuosi.

(50)

KUVA 45. Yhteenveto PDF

Kuvassa 45 voidaan nähtä tietokantaan tallennettu yhteenveto.

(51)

8.4.7 Salasanan vaihtaminen

Jos käyttäjä on luotu, mutta sillä ei ole kertaakaan kirjauduttu sisään, tulee sen salasana muuttaa, koska käyttäjän on luonut admin, joka siis tietää tämän salasanan.

KUVA 46. Tietokanta käyttäjä tiedoista

Kuvassa 46 voimme nähdä, että käyttäjän changepassword on 1. Tämä tarkoittaa sitä, että käyttäjän tulee vaihtaa salasanaa kun hän kirjautuu ensimmäisen kerran.

KUVA 47. Salasanan vaihtaminen

Kuvassa 47 pyydetään käyttäjää vaihtamaan salasana ja verrataan, että käyttäjän syöttämät salasanat täsmäävät.

(52)

KUVA 48. Salasana vaihdettu

Jos käyttäjä on kirjoittanut saman salasanan kahdesti ja se lisätty tietokantaa, tulee siitä ilmoitus käyttäjälle, ja ohjelma käynnistää itsensä uudestaan.

KUVA 49. Päivitetty salasana

Kuvassa 49 nähdää, että käyttäjän Admin correspondingPassword, correspondingSalt ovat vaihtuneet. Tämä tarkoittaa, että salasana on vaihdettu ja myös changepassword on nyt 0, eikä 1.

(53)

9 TILAAJAN PALAUTE

Tietokantaan on luotu vaatimusmäärittelyiden mukaan tarpeelliset toimenpiteet ja elementit.

Tietokanta on visuaalisesti yksinkertainen ja helppokäyttöinen, sekä projektin aikana on tehty sujuvaa yhteistyötä tilajaan ja opiskelijan välillä. Tavoitteena oli saada toimivat tunnukset työntekijöille, tarpeelliset asiakastiedot (mm. nimi, osoite- ja muut yhteystiedot) liitettyä asiakasrekisteriin sekä tehdä asiakaskirjauksia ja kuukausittaisia yhteenvetoja tietoturvallisesti.

Selkeä runko kuukausittaisille yhteenvedoille yhtenäistää työntekijöiden työskentelyä ja tavoitteiden tarkastelua. Lisäksi asiakasrekisteriin luodun Tiedostot-kansion avulla työskentelyyn liittyvät asiakirjat on helppo tallentaa sähköiseen järjestelmään. Vaatimusmäärittelyyn asetetut tavoitteet on siis saavutettu.

Asiakasrekisteri on ainutlaatuinen, sillä sosiaalialalla käytetään pääasiallisesti hoidolliseen tai laitostyöhön tarkoitettuja asiakas- ja kirjausalustoja. Nämä eivät palvele samalla tavalla yksityisen sosiaalialan sektoreita esimerkiksi avohuollon palveluissa.

Asiakasrekisterin kirjauksia ja yhteenvetoja olisi hyvä pystyä muokkaamaan jälkeen päin, mutta näitä tavotteita ei asetettu vaatimusmäärittelyyn suunnittelun alkuvaiheessa. Asiakasrekisterin jatkojalostamisella on rajattomia vaihtoehtoja, esimerkiksi mobiiliversion käyttöönotto tai asiakastuntien merkitseminen suoraan rekisteriin.

(54)

10 JATKOKEHITTÄMINEN JA ITSEARVIOINTI

Sovellus ei ole täysin MVVM-arkkitehtuurin mukainen, joten tässä on vielä parannettavaa.

Käyttöliittymästä voisi tehdä näyttävämmän, mutta jos sen alkaa tekemään ilman mitään valmiita kirjastoja, niin siinä menee aikaa opetellessa. Sovelluksen voisi myös muuttaa selain- tai mobiilisovellukseksi, jotta sen päivittäminen olisi helpompaa ja ei tarvitse erikseen asentaa mitään ohjelmia.

Sovelluksen kehittäminen C#:lla ja visual studiolla oli minulle luontainen ratkaisu, koska molemmat ovat minulle tuttuja. MVVM-arkkitehtuuri oli minulle ihan uusi juttu, ja arkkitehtuurin opettelemissa meni kauan. Opettelun jälkeen MVVM:n toteutus alkoi luonnistua. Tietokannan toteuttamiseen meni useampi kierros. Ajattelin sen aluksi olevan haastavampaa kun se on luotu pilveen, mutta sekin onnistui yllättävän helposti. Jos ohjelma otetaan pysyvästi käyttöön, niin aion opetella käyttöliittymän visuaalista toteutusta. Varmasti tulee myös uusia haasteita vastaan, mitä ei ole tullut koskaan edes mietittyä. Kokonaisuudessaan olen tyytyväinen opinnäytetyöhöni.

(55)

11 YHTEENVETO

Opinnäytetyön tavoitteena oli suunnitella ja toteuttaa tilaajan vaatimusten mukainen windows sovellus, jota voitaisiin käyttää yrityksessä asiakastietojen ylläpitämiseen ja asiakkuuksien seurantaan. Koska sovellusta tullaan käyttämään usealta eri PC:ltä, toisena tavoitteena oli tallentaa tiedot MySQL-tietokantaa, jossa tieto olisi salattu, mutta samalla kustannukset eivät nousisi kauhean korkeaksi. Minun mielestäni opinnäytetyö onnistui hyvin ja lopputuloksena on toimiva sovellus, joka vastaa tilaajan tarpeita. Yhteenvetoa kirjoittaessa kirjautuminen ei ole vielä täysin valmis, mutta se jääköön jatkokehitykseen.

(56)

LÄHTEET

1. What is MySQL? 2021 Saatavissa: https://dev.mysql.com/doc/refman/8.0/en/what-is- mysql.html Hakupäivä 20.7.2021.

2. Mysql Workbench. 2021 Saatavissa: https://www.mysql.com/products/workbench/

Hakupäivä: 22.7.2021

3. SQL Commands. 2021 Saatavissa: https://www.codecademy.com/articles/sql-commands Hakupäivä 22.7.1021.

4. Stored procedure (Database Engine). 2021 Saatavissa: https://docs.microsoft.com/en- us/sql/relational-databases/stored-procedures/stored-procedures-database-en-

gine?view=sql-server-ver15 Hakupäivä 15.8.2021.

5. Mikä on palvelin? 2020 Saatavissa: https://www.hostingpalvelu.fi/ohjeet/yleiset- ohjeet/mika-on-palvelin/ Hakupäivä 22.7.1021.

6. What is Amazon? 2021 Saatavissa: https://fi.wikipedia.org/wiki/Amazon.com Hakupäivä 5.8.2021.

7. Amazon RDS Saatavissa: https://aws.amazon.com/rds/ Hakupäivä 6.8.2021.

8. What is google cloud? https://cloud.google.com/sql Hakupäivä 31.8.2021.

9. what is Microsoft Azure? https://azure.microsoft.com/en-us/overview/what-is-azure/

Hakupäivä 31.8.2021.

10. Barrett, Daniel - Silverman, Richard - Brynes, Robert. 2005. SSH The Secure Shell https://www.oreilly.com/library/view/ssh-the-secure/0596008953/ch01s01.html

11. What is data encryption? Saatavissa: https://www.kaspersky.com/resource- center/definitions/encryption Hakupäivä 25.8.2021.

12. Software development processes https://www.browserstack.com/guide/learn-software-de- velopment-process#toc4 Hakupäivä 20.8.2021.

13. what is visual studio Saatavissa: https://www.geeksforgeeks.org/introduction-to-visual- studio/ Hakupäivä 1.9.2021.

14. A tour of the C# language. 2021. Microsoft Docs. Saatavissa:

https://docs.microsoft.com/en-us/dotnet/csharp/tour-of-csharp/ Hakupäivä 26.7.2021.

15. Getting started with WPF Saatavissa: https://docs.microsoft.com/en-

(57)

17. XAML overview (WPF.net). https://docs.microsoft.com/en-us/dotnet/desk- top/wpf/xaml/?view=netdesktop-5.0 Hakupäivä 6.8.2021.

18. What is the MCV pattern Saatavissa: https://docs.microsoft.com/en- us/aspnet/core/mvc/overview?WT.mc_id=dotnet-35129-website&view=aspnetcore-5.0 Hakupäivä 26.7.2021.

19. Understanding MVC, MVP and MVVM Design Patterns. Dotnettricks.com. Shailandra

Chauhan. 2014. Saatavissa:

https://www.dotnettricks.com/learn/designpatterns/understanding-mvc-mvp-and-mvvm- design-patterns Hakupäivä: Hakupäivä 26.7.2021.

20. What is git. Atlassian.com Saatavissa: https://www.atlassian.com/git/tutorials/what-is-git Hakupäivä 27.8.2021.

21. What is unit testing C# Saatavissa: https://www.c-sharpcorner.com/article/a-basic- introduction-of-unit-test-for-beginners/ Hakupäivä 25.8.2021.

22. Addy Osmani, 2021. Learning JavaScript Design patterns https://learning.oreilly.com/li- brary/view/learning-javascript-design/9781449334840/ch10s02.html#views Hakupäivä:

25.8.2021

23. Addy Osmani, 2021. Learning JavaScript Design patterns https://learning.oreilly.com/li- brary/view/learning-javascript-design/9781449334840/ch10s05.html#models-views-pre- senters Hakupäivä: 25.8.2021

24. Addy Osmani, 2021. Learning JavaScript Design patterns https://learning.oreilly.com/li- brary/view/learning-javascript-design/9781449334840/ch10s06.html#history-

1 Hakupäivä: Hakupäivä: 25.8.2021

Viittaukset

LIITTYVÄT TIEDOSTOT

Tasapainon varmuuden ja kehon huojunnan välillä onkin havaittu olevan yhteys siten, että kehon huojunta on pienempää niillä henkilöillä, joilla on parempi tasapainon

Tietokannan katselua varten käyttäjän täytyy ilmoittaa käyttäjätunnu (life.plan) sekä salasana (LifePlan). Toteutettu tietokanta tarjoaa mahdollisuuden

Lisäksi tarvittiin Joomla moduuli, joka lähettää sovelluksen saamat tiedot MySQL serverille.. Tämä opinnäytetyö on suunniteltu ja toteutettu järjestölle

Tämän avulla Redditin rajapinta tietää, minkä sovelluksen kanssa se kommunikoi, mikä mahdollistaa käyttäjän henkilökohtaisten tietojen hakemisen.. Sovelluksen

Opinnäytetyön tavoitteena oli luoda Savon koulutuskuntayhtymälle verkkosivuston sekä Android- sovelluksen kokonaisuus, jonka avulla käyttäjä voisi vastata mobiililaitteella helposti

ASP.NET Core:n voidaan lisätä Nuget-pakettina Entity Framework Core .NET -kirjasto, joka toimii rajapintana sovelluksen ja tietokannan välillä.. 3.1 Entity

API Application programming interface. Ohjelmallinen rajapinta jonka kautta palvelua tai järjestelmää voi käyttää. CRUD Create, read, update, delete. Tietokannassa

Tutkielmassa on selvitetty, voidaanko näillä moderneilla tietokannan hallintajärjestelmillä toteuttaa pilviympäristössä skaalautuva tuotekatalogin tietokanta, ja