% .tex-tiedosto projektin dokumenttien latomiseksi.

% Kirjoitelmaluokka, tässä käytetään projektien projdoc-luokkaa.
%\documentclass[twoside]{projdoc}
\documentclass[report]{projdoc}

\usepackage{paralist} % siistimmät lista-alkiot
\usepackage{makecell} % taulukkoon monta riviä
\renewcommand\cellalign{ll}
\usepackage{multirow} % monen rivin lista-alkiot

% Projektin nimi
\def \pname {Groundhog} % käytä \pname projektin nimenä
\newcommand{\lpname}{\MakeLowercase{\pname}} % projektin nimi pienellä
\project{\pname}

% Luottamuksellisuus: käytä termiä 'Luottamuksellinen' tai 'Julkinen'
\publicity{Julkinen}

% Versionumero: numerointikäytäntö on projektikohtainen
\version{1.0.0}

% Päivämäärä: ylikirjoittaa automaattisen päiväyksen
\date{15.6.2021}

% Dokumentin nimi
\title{Projektisuunnitelma}

\def \jobname {projektisuunnitelma} % tämän tiedoston nimi ilman .tex

% Tekijät: huomaa aakkosjärjestys sukunimen mukaan
\author{Iiro Iivanainen}{Harri Linna}{Jere Pakkanen}{Riikka Vilavaara}
% Puhelinnumerot: tekijöitä vastaava järjestys!
\authorphones{}{}{}{}
% Sähköpostiosoitteet: tekijöitä vastaava järestys!
\authoremails{iiro.h.iivanainen@student.jyu.fi}{harri.s.linna@student.jyu.fi}{jere.j.pakkanen@student.jyu.fi}{riikka.k.vilavaara@student.jyu.fi}
% Etu- ja sukunimen alkukirjaimet: tekijöitä vastaava järjestys!
\authorinitials{II}{HL}{JP}{RV}

% Tiivistelmä dokumentista: tämä ei siis ole tiivistelmä projektista,
% vaan tämän ko. dokumentin tarkoituksesta. 
\docabstract{{\pname}-projekti kehittää ohjelmiston Geologian tutkimuskeskukselle tomograﬁalaboratorion näytteiden analyysiä tukemaan. Ohjelmisto helpottaa erityyppisten tutkimusdatojen yhdistämistä, hallintaa ja visualisointia. Dokumentissa kuvataan {\pname}-projektin suunniteltua läpivientiä tavoitteiden ja tulosten, tehtävien ja työmäärän, prosessin ja aikataulun sekä riskien hallinnan osalta.}

% Tiivistelmä projektista
\projectabstract{{\pname}-projekti suunnittelee ja toteuttaa Geologian tutkimuskeskukselle (GTK) multimodaalisen tutkimusdatan hallintaohjelmiston kevätlukukaudella 2021.}

% Avainsanat: dokumentin sisältöön liittyviä olennaisia asiasanoja: aakkosjärjestys, ensimmäinen sana isolla alkukirjaimella ja piste loppuun.
\keywords{Aikataulu, projektisuunnitelma, prosessimalli, resurssit, riskiarviot, tavoitteet, tulokset, työmäärät, työvaiheet.}

% juoksevan numeroinnin asetukset
\newcounter{vaatimuslaskuri}
\setcounter{vaatimuslaskuri}{0}
\newcommand{\laskuri}{\arabic{vaatimuslaskuri}.\stepcounter{vaatimuslaskuri}}

% Varsinainen tulosteessa näkyvä ladonta alkaa
\begin{document}

% Tämä latoo versiohistorialle ympäristön, sen alapuolelle ladotaan
% versiohistoriataulukko. Esimerkin vuoksi tehty. 
\versionhistory

%\begin{tabular}{|c|r|p{7cm}|p{3.5cm}|}
\begin{tabular}{|c|r|p{11.5cm}|c|}
\hline
\textbf{Versio} & \textbf{Päivämäärä} & \textbf{Muutokset} & \textbf{Tekijät}\\
\hline
0.0.1 & 9.2.2021  & {\LaTeX}-dokumenttiluokka muokattiin projektia vastaavaksi. & HL\\
\hline
0.0.2 & 23.2.2021 & Kirjoitettiin johdanto ja hallintatavat. & HL\\
\hline
0.1.0 & 23.2.2021 & Versio 0.0.2 numeroitiin uudelleen julkistamista varten & RV\\
\hline
0.1.1 & 24.2.2021 & Luonnosteltiin työvaiheita 1. palaverin pöytäkirjan ja sähköpostilistan mukaan. & HL\\
\hline
0.1.2 & 1.3.2021  & Muokattiin dokumenttia ohjaajan palautteesta. & HL\\
\hline
0.2.0 & 3.3.2021  & Versio 0.1.2 numeroitiin uudelleen julkistamista varten. & HL\\
\hline
0.2.1 & 23.3.2021 & Taustoja ja tarpeita kuvaava luku lisättiin. & HL\\
\hline
0.2.2 & 25.3.2021 & Tuloksia kuvaava luku lisättiin. & HL\\
\hline
0.2.3 & 27.3.2021 & Resursseja kuvaava luku lisättiin. & HL\\
\hline
0.3.0 & 27.3.2021 & Versio 0.2.3 numeroitiin uudelleen julkistamista varten. & HL\\
\hline
0.3.1 & 7.4.2021 & Päivitetty termilista. & RV\\
\hline
0.3.2 & 26.4.2021 & Termilistan päivitys. & RV\\
\hline
0.3.3 & 26.4.2021 & Muutettiin prosessin kuvausta ja aikataulua. & HL\\
\hline
0.3.4 & 30.4.2021 & Riskejä kuvaava luku lisättiin. & HL\\
\hline
0.3.5 & 1.5.2021 & Vastuualueita, hakemistorakennetta ja testausta kuvaavat luvut lisättiin. & HL\\
\hline
0.3.6 & 2.5.2021 & Korjattiin palautteen perusteella. & HL\\
\hline
0.3.7 & 3.5.2021 & Viimeisteltiin versioon 0.3.0 liittyvän palautteen mukaiset korjaukset. & HL\\
\hline
0.4.0 & 3.5.2021 & Versio 0.3.7 numeroitiin uudelleen julkistamista varten. & HL\\
\hline
0.4.1 & 7.5.2021 & Termit-lukuun muutoksia. & RV \\
\hline
0.4.2 & 9.5.2021 & Muokattiin dokumenttipohjaa ja kirjoitettiin uudelleen testausta käsittelevä luku. & HL \\
\hline
0.4.3 & 15.5.2021 & Muokattiin vastuualueita ja tehtäviä sekä prosessia ja aikataulua käsittelevät luvut. Kirjoitettiin muutosten hallintaa käsittelevä luku. & HL\\
\hline
0.4.4 & 16.5.2021 & Muokattiin tehtävien työmääriä sekä riskejä ja niiden hallintaa käsittelevät luvut. Kirjoitettiin dokumentin yhteenveto ja muokattiin tekstiä version 0.4.0 palautteen perusteella. & HL\\
\hline
\end{tabular}

\begin{tabular}{|c|r|p{11.5cm}|c|}
\hline
\textbf{Versio} & \textbf{Päivämäärä} & \textbf{Muutokset} & \textbf{Tekijät}\\
\hline
0.5.0 & 16.5.2021 & Versio 0.4.4 numeroitiin uudelleen julkistamista varten. & HL\\
\hline
0.5.1 & 18.5.2021 & Päivitettiin dokumentoinnin vastuualueet. & HL\\
\hline
0.5.2 & 21.5.2021 & Päivitettiin vastuualueet, hakemistorakenne, tehtävät ja työmäärät. & HL\\
\hline
0.6.0 & 21.5.2021 & Versio 0.5.2 numeroitiin uudelleen julkistamista varten. & HL\\
\hline
0.6.1 & 2.6.2021 & Termilistan päivitys. & HL\\
\hline
0.7.0 & 7.6.2021 & Korjattiin versioiden 0.5.0 ja 0.6.0 sisällön virheet. & HL\\
\hline
1.0.0 & 15.6.2021 & Versio 1.0.0 numeroitiin uudelleen hyväksymisen jälkeen. & HL\\
\hline
1.0.1 & 6.7.2021 & Asemoitiin kansilehti uudelleen. & HL\\
\hline
1.0.2 & 7.7.2021 & Siirrettiin tietoa projektista dokumenttiluokkaan ja päivitettiin termilistaa. & HL\\
\hline
\end{tabular}

% \projectinfo latoo ympäristön projektin tiivistelmälle, joka on 
% projektikohtainen.
% Projektin tiivistelmä ja tekijöiden tiedot ladotaan automaattisesti sivun
% alkuun. Eli lisättävä projektiorganisaation tiedot muiden kuin tekijäiden
% osalta sekä tarvittavat yhteystiedot. Alla tämä on tehty esimerkin vuoksi.
\projectinfo

%----------------------------------------------------------------------------
% \mainmatter latoo automaattisesti sisällysluettelon ym. alkusivut, ja 
%% sen jälkeen alkaa dokumentin sisällysluettelossa näkyvät luvut.
\mainmatter

% \chapter{Pääluvun nimi} aloittaa pääluvun, \section{Alaluvun nimi} alaluvun,
% ja \subsection{Ala-alaluvun nimi} ala-alaluvun.
\chapter{Johdanto}

{\pname}-projekti\footnote{Groundhog Daytä vietetään Kanadassa vuosittain 2. helmikuuta.} kehittää Geologian tutkimuskeskukselle multimodaalisen tutkimusdatan hallintaohjelmiston kevätlukukaudella 2021. Projektin jäsenet kehittävät ohjelmiston osana Jyväskylän yliopiston informaatioteknologian tiedekunnan Sovellusprojekti-nimistä projektiopintojaksoa.

Dokumentissa kuvataan {\pname}-projektin suunniteltu läpivienti käsitellen tavoitteita, tuloksia, aikataulua ja resursseja sekä työmääräarvioita ja riskien hallintaa. Projektin taustoja, tarpeita ja tavoitteita kuvataan luvuissa \ref{ch:taustaa} ja \ref{ch:tulokset} sekä tilaajan edustajien laatimassa aihekuvauksessa \cite{aihekuvaus}. Dokumentin laatimisessa on hyödynnetty Peltihamsteri-, Potku- ja Liikkuva-projektien projektisuunnitelmia \cite{peltihamsteri} \cite{potku} \cite{liikkuva}.

Projektiorganisaation osapuolet kuvataan projektisopimuksessa \cite{projektisopimus}. Projektisopimuksessa mainitsemattomia resursseja ja käytänteitä ja käsitellään luvuissa \ref{ch:resurssit} ja \ref{ch:kaytanteet}. Prosessia ja työvaiheita kuvataan luvuissa \ref{ch:kaytanteet} ja \ref{ch:tyovaiheet}.

Sovelluksen suunnitteludokumenteista olennaisin on vaatimusmäärittely \cite{vaatimusmaarittely}. Muita suunnitteludokumentteja ovat arkkitehtuurisuunnitelma \cite{arkkitehtuurisuunnitelma}, käyttöliittymäsuunnitelma \cite{kayttoliittymasuunnitelma} sekä erinäiset työkulkua kuvaavat kaaviot.

\chapter{Termit}

\termit %komento projdoc-luokassa

\chapter{Taustaa ja tavoitteita} \label{ch:taustaa}

% Tiivistetty esitys, ei yksityiskohtia. Sivu tai korkeintaan kaksi.

Geologian tutkimuskeskuksella (GTK) on menetelmäkehityksen ja uudehkon tomografialaboratorion myötä noussut tarve ohjelmistolle, jolla voidaan helposti hallita usean mittalaitteen tutkimusdataa yhtäaikaisesti näiden keskinäiset suhteet hahmottaen. Ohjelmiston kehitystyön toteuttaa Jyväskylän yliopiston informaatioteknologian tiedekunta opintojaksona TIES405 Sovellusprojekti.

\section{Geologian tutkimuskeskus}

Vuonna 1885 perustettu GTK on työ- ja elinkeinoministeriön alainen kansainvälisesti suuntautunut asiantuntijaorganisaatio, joka kartoittaa ja tutkii maankamaraa, sen luonnonvaroja ja kestävää käyttöä. Geologisella osaamisella luodaan ratkaisuja, uutta elinkeinotoimintaa ja kestävämpää kasvua yhteiskunnan ja elinkeinoelämän tarpeisiin. GTK tarjoaa laaja-alaisia asiantuntija-, tutkimus- ja laboratoriopalveluita sekä jatkuvasti kehittyviä digitaalisia palveluita.

GTK:lla on kolme synergistä roolia:
\begin{compactitem}
    \item Geotieto tuottaa, kokoaa, jalostaa ja jakaa geotietoa. Ekosysteemitoimijana huolehtii tietopääoman kehittymisestä ja hyödyntämismahdollisuuksien parantamisesta.
    \item Tiede ja innovaatiot tuottaa aktiivisena ekosysteemitoimijana tieteellisiä tuloksia ja innovaatioita vastaamaan keskeisiin haasteisiin.
    \item Asiakastoimeksiannot tuottavat ja kehittävät korkeatasoiseen osaamiseen ja tietopääomaan perustuvia asiakasratkaisuja.
\end{compactitem}

Geofysiikan ratkaisujen tulosyksiköllä on käytössään tehokas ja nopea röntgensädeskanneri GE phoenix v|tome|x s 240, jonka muodostamaa 3D-tomograﬁadataa analysoidaan tehokkaalla FEI PerGeos -ohjelmistolla.

\section{Käyttäjien tarpeet ja sovelluksen tavoitteet}

Röntgentomografia on kolmiulotteista matriisimuotoista harmaasävykuvaa, jonka kuvakoot vaihtelevat sadoista megatavuista kymmeniin gigatavuihin. PerGeos-ohjelmiston vaatiman laskennan ja lisenssien rajallisen määrän seurauksena nykyiset prosessit asettavat rajoitteita perustietokoneiden käyttämiselle tutkimustyössä. Näistä syistä johtuen syntyi tarve korvaavan ohjelmiston kehittämiseen. Ohjelman kehitystyön katsottiin soveltuvan opiskelijaprojektiksi, sillä tomografiadatan käsittelyssä tarvittavat toiminnot rajoittuvat pääasiasiassa pääakselien XYZ vastaisiin 2D-kuvapinoihin. Käyttäjien tarpeista johdettuja kehitettävän sovelluksen tavoitteita kuvataan tarkemmin vaatimusmäärittelyssä \cite{vaatimusmaarittely}.

Kehitettävän sovelluksen osalta tavoitteena ja ohjelman uutuusarvona on liittää näytteeseen 3D-tomograﬁakuvan ohella muun tyyppistä tutkimusdataa sekä kyetä visualisoimaan näiden välisiä yhteyksiä samanaikaisesti. Liitettävä tutkimusdata voi olla esimerkiksi tekstimuistiinpano, mikroskooppikuva tai diffraktiospektri. Tutkimusdataa tulee voida liittää vähintään pisteeseen tai tasoon.

3D-kuvien selailuun on olemassa laajalti käytettyjä ohjelmia, mutta mitkään niistä eivät suoraan sovellu edellä kuvattuun käyttötarkoitukseen. Kehitettävä ohjelmisto tulee olemaan avointa lähdekoodia ja tulokset muutenkin julkisia. Projektiryhmä valitsee toteutusalustan ja käytettävän ohjelmointikielen.

Kuvan \ref{fig:maanayte} geologisen maaperänäytteen muuntaa kuvan \ref{fig:skanneri} laite tietokoneen ymmärtämään tiedostomuotoon, joka sisältää vokseleiksi muunnetun maaperä-näytteen. Kehitettävän sovelluksen tulee pystyä lukemaan vokselidataa eri tiedostomuodoista sekä visualisoimaan kuvan \ref{fig:naytekuva} harmaasävykuvana. Kuvakulman vapaa valinta on sovittu jatkokehitykseen. Projektissa riittää valita kuvakulma pääakselien XY, YZ ja XZ suunnista.

\begin{figure}
    \centering
    \includegraphics[width=\textwidth]{kuvat/projektisuunnitelma/sample1.png}
    \caption{Esimerkki näytteestä.}
    \label{fig:maanayte}
\end{figure}

\begin{figure}
    \centering
    \includegraphics[width=\textwidth]{kuvat/projektisuunnitelma/XCT.jpg}
    \caption{Röntgensädeskanneri.}
    \label{fig:skanneri}
\end{figure}

\begin{figure}
    \centering
    \includegraphics[width=\textwidth]{kuvat/projektisuunnitelma/sample2.png}
    \caption{Tomografiakuva skannattuna näytteestä.}
    \label{fig:naytekuva}
\end{figure}

\subsection{Datan lukeminen}
\label{ch:datan-lukeminen}

Tomografiakuvat tallennetaan monesti tiff-muodossa tai siivu kerrallaan. Jälkimmäisessä tavassa kukin 3D-matriisin 2D-leike on yksi kuvatiedosto, ja kaikki leikkeet ovat tyypillisesti samassa kansiossa. Toinen hyvin yleinen tomografiakuvien tiedostomuoto on raw, jossa tiedostoon tallennetaan vain kunkin pikselin arvo ja kuvan dimensiot mahdollisesti lisätään tiedostonnimeen.

\textbf{Liitettävää dataa} tulee laitteista ulos pääasiassa kahdessa tyypissä:

\begin{compactitem}
    \item Taulukot saa ulos xlsx-tiedostona kaikilta tilaajan käyttämiltä ohjelmistoilta, joten ohjelmiston tulisi kyetä lukemaan niitä. Vaihtoehtona
    on csv-tiedoston käsittely.
    \item Liitedatan kuvat (ts. muut kuin tomograﬁakuvat) ovat useissa tutuissa
    ja avoimissa formaateissa.
\end{compactitem}

\subsection{Datan näyttäminen}

Datan näyttäminen abstrahoidaan plugin-tyyppisesti, jotta datatyyppejä voidaan lisätä ohjelmistoon myöhemmin. Käyttäjän asettamat parametrit vaikuttavat ruudulla näkyvään kuvaan, joten tarvitaan tomograﬁakuvan käsittelyyn ainakin seuraavia apufunktioita:

\begin{compactitem}
    \item kirkkauden manuaalinen säätäminen,
    \item harmaasävyskaalan manuaalinen säätäminen,
    \item kuvakulman manuaalinen säätäminen.
\end{compactitem}

Erilaisia arvoja (kuten kirkkaus tai näytettävän tason kulma) tulisi pystyä muokkaamaan liukusäätimen lisäksi täsmällisillä numeerisilla arvoilla. Alkuperäistä kuvaa ei saa muokata.

Tomografiakuvaa tulisi pystyä katsomaan vähintään pääakselikoordinaattien vastaisesti. Vapaan kuvakulman valinta on tärkeä, mutta ei kriittinen toiminnallisuus. Kuvankäsittelyyn ja visualisointiin kannattaa käyttää valmiita kirjastoja.

\subsection{Datan liittäminen}

Pääasiassa ohjelmaa hyödynnetään piste- ja tasoanalyysissä, joten olennaisimmat liitoksen tyypit ovat piste ja taso. Tietoa tulee pystyä liittäämään kaksiulotteiselle alueelle kuvasta. Projektissa kehitettävässä sovellusversiossa tasot ovat pääakselikordinaattien suuntaisia, mutta projektin jälkeisessä jatkokehityksessä kehitetään kolmiulotteisten tasojen käsittely. Datan liittämistä varten käyttöliittymässä tulisi olla:

\begin{compactitem}
    \item Muokkaustyökalu liitosten ja niihin kirjattavien
    metatietojen määrittämiseen,
    \item katseluohjelma liitosten ja niihin kirjattujen metatietojen tarkasteluun sekä
    \item raportointityökalu datojen, niiden liitosten ja kirjatun metadatan sisältämän raportin muodostamiseen.
\end{compactitem}

\section{Dokumentit ja muut materiaalit}
\label{ch:tulokset}

Sovelluksen lisäksi projektiryhmä toteuttaa seuraavat tulokset:

\begin{compactitem}
    \item \textbf{Ajankäyttöraportti} sisältää ryhmän jäsenten työtunnit, sekä niiden jakautumisen eri tehtäväkokonaisuuksille ja tehtäville.
    \item \textbf{Arkkitehtuurisuunnitelma} sisältää korkean tason kuvauksen ohjelmiston rakenteesta.
     \item \textbf{Esittelymateriaali} sisältää väliesittelyn esitysgrafiikan.
     \item \textbf{Itsearvioinnit} sisältävät ryhmän jäsenten arviot omasta toiminnastaan, kokemuksistaan ja oppimisestaan projektin aikana.
    \item \textbf{Kehitysympäristön pystytysohjeet} sisältävät ohjeet ryhmän käyttämän kehitysympäristön muodostamiseen jatkokehityksen helpottamiseksi.
    \item \textbf{Käyttöliittymäsuunnitelma} sisältää sovelluksen päänäkymän ja sen sisältämien komponenttien rakenteet.
    \item \textbf{Käyttöohjeet} sisältävät kuvauksen käyttöliittymästä ja neuvovat, miten sovellusta käytetään.
    \item \textbf{Luokkadokumentaatio} sisältää matalan tason kuvauksen ohjelmakoodin rakenteesta ja ohjelmiston rajapinnoista jatkokehitystä ajatellen. Luokkadokumentaatio generoidaan automaattisesti ohjelmakoodin dokumentaatiokommenteista.
    \item \textbf{Luokkasuunnitelma} sisältää ohjelmiston sisäisen rakenteen kuvattuna UML-luokka\-kaaviona.
    \item \textbf{Lähdekoodi} sisältää sovelluksen lähdekoodin kommentteineen.
    \item \textbf{Palaverien dokumentit} sisältävät palaverien esityslistat, tilakatsaukset ja pöytäkirjat.
    \item \textbf{Projektiraportti} kuvaa projektin toteutunutta läpivientiä sekä vertaa toteumaa suunnitelmaan kuvaten mm. syitä ja vaikutuksia.
    \item \textbf{Projektisuunnitelma} on projektin läpivientiä kuvaava suunnitelma, jossa kuvataan muun muassa projektin termistö, tavoitteet, projektiorganisaatio ja resurssit, projektiryhmän jäsenten roolit, vastuualueet, tehtävät ja työmäärät sekä projektissa käytettävä prosessimalli, aikataulu ja riskien hallintaa.
    \item \textbf{Sovellusraportti} kuvaa toteutetun sovelluksen oleellisimmat toteutusratkaisut ja toiminnot, tavoitteiden toteutumista sekä mahdolliset puutteet, heikot toteutusratkaisut ja jatkokehitysideat.
    \item \textbf{Sähköpostiarkistot} sisältävät kaikki projektin kahdelle sähköpostilistalle lähetetyt sähköpostiviestit.
    \item \textbf{Testausraportit} kuvaavat kullakin testauskerralla suoritettujen testitapausten tulokset sekä havaitut virheet ja puutteet.
    \item \textbf{Testaussuunnitelma} kuvaa suoritettavat testitapaukset ja testausympäristön kokoonpanon.
    \item \textbf{Vaatimusmäärittely} sisältävät sovelluksen käyttäjilleen tarjoamat tiedot ja toiminnot.
    \item \textbf{Valmisohjelma} sisältää ajettavat binääritiedostot tai asennusohjelman.
    \item \textbf{Verkkoesite} sisältää projektin www-esittelyn.
\end{compactitem}

\section{Oppimistavoitteet}

Projekti toteutetaan osana Jyväskylän yliopiston informaatioteknologian tiedekunnan Sovellus\-projekti-nimistä projektiopintojaksoa. Projektin päättyessä projektiryhmän jäsenet tuntevat sovellusprojektin keskeiset projektinhallinnan menetelmät ja osaavat soveltaa niitä käytännön projektityössä.

Keskeiset projektinhallinnan menetelmät ovat:
\begin{compactitem}
    \item projektin suunnittelu, seuranta ja edistymisen raportointi,
    \item projektin ohjaus, johtoryhmätyöskentely ja viestintä,
    \item projektin virallisten dokumenttien tuottaminen ja niiden hallinta sekä
    \item projektin muutosten ja riskien hallinta.
\end{compactitem}

Kaikilla projektiryhmän jäsenillä on entuudestaan ohjelmointikokemusta. Projektin lopussa jäsenet osaavat valita tavoitteiden kannalta sopivimmat toteutustyökalut sekä käyttää niitä toteutusprojektin edellyttämässä laajuudessa.

% Harri Linnan tavoitteena on kehittyä projektin hallinnassa ja tietokonegrafiikassa. Jere Pakkasen tavoitteena on kehittyä ohjelmoinnissa, kommunikoinnissa ja projektityöskentelyssä. Iiro Iivanaisen tavoitteena on saada kokemusta verrattain laajan projektin läpiviennistä, ja kehittyä sitä vaativien työkalujen käytössä, ohjelmoinnissa sekä dokumenttien kirjoittamisessa.

\chapter{Resurssit} \label{ch:resurssit}

Projektin resurssit sisältävät projektiorganisaatioon kuuluvat ryhmän jäsenet, ohjaajat ja tilaajan edustajat. Tiimien edustajat muodostavat johtoryhmän, joka yhdistää projektiorganisaation hallinnollisesta näkökulmasta.

\section{Projektiorganisaatio}

Johtoryhmään kuuluvat
\begin{compactitem}
    \item Jukka Kuva,
    \item Harri Linna,
    \item Jukka-Pekka Santanen.
\end{compactitem}

Projektiorganisaation osapuolilla on edustaja johtoryhmässä, joka kutsutaan koolle tarvittaessa päättämään projektin läpivientiä koskevissa asioissa. Johtoryhmä kutsutaan projektin osapuolen pyynnöstä tarvittaessa koolle lähinnä ristiriitatilanteissa tai huomattavissa muutoksissa, jotka vaikuttavat projektisopimukseen.

Ryhmän jäsenet ovat
\begin{compactitem}
    \item Iiro Iivanainen,
    \item Harri Linna,
    \item Jere Pakkanen,
    \item Riikka Vilavaara.
\end{compactitem}

Ryhmän kaikki jäsenet ovat suorittaneet kurssin \textit{Aineopintojen projektityö}, joka on työmäärältään noin kolmannes sovellusprojektiin nähden. Iivanainen on toteuttanut myös monitieteellisen peliprojektin. Linna ja Vilavaara ovat aiemmin toimineet tuntiopettajina ohjelmointikursseilla.

Ohjaajat ovat
\begin{compactitem}
    \item Jukka-Pekka Santanen,
    \item Juuso Tuononen.
\end{compactitem}

Jukka-Pekka Santanen toimii lehtorina informaatioteknologian tiedekunnassa. Hänellä on projektikurssien ohjaamisesta kokemusta yli 20 vuotta.

Juuso Tuononen toimii teknisenä ohjaajana. Hän kertoi omaavansa erityisosaamista
erityisesti tietokonegrafiikasta sekä matalan tason ohjelmoinnista.

Tilaajan edustajat ovat
\begin{compactitem}
    \item Jukka Kuva,
    \item Arttu Miettinen.
\end{compactitem}

Jukka Kuva on ollut aiemmin Jyväskylän yliopistossa Miettisen kanssa samassa tutkimusprojektissa. Hän on nyt fyysikkona Geologian tutkimuskeskuksessa.

Arttu Miettinen toimii tällä hetkellä Jyväskylän yliopiston fysiikan laitoksella tutkijana kuvankäsittelyn ja röntgentomografian parissa.

\section{Tilat ja laitteet}

Projektin käytössä on WWW-sivusto ja verkkolevy sekä kaksi sähköpostilistaa. Projektiryhmälle varatut työhuoneet AgC417.1 ja AgC418.1 eivät ole olleet jäsenten käytettävissä. Ryhmän jäsenet toteuttavat sovelluksen etänä käyttäen henkilökohtaisia tietokoneitaan. Sovellusta kehitetään sekä Windows- että Linux-käyttöjärjestelmillä. Työpöytäsovelluksen tulee toimia millä tahansa perustietokoneella, johon on asennettu Windows-käyttöjärjestelmä.

\section{Luennot ja perehdytykset}

Ryhmän jäsenet suorittavat oheiskurssin \textit{Projektiviestintä IT-alalla}, jonka suoritettuaan opiskelija:

\begin{compactitem}
    \item ymmärtää viestinnän ja vuorovaikutuksen merkityksen projektityöskentelyssä,
    \item tuntee projektiviestintään liittyviä tekstilajeja ja niiden konventioita,
    \item osaa laatia keskeisimmät projektissa tarvittavat dokumentit,
    \item tuntee projektipalavereihin liittyviä käytänteitä,
    \item osaa valita tilanteeseen sopivan tavan viestiä projektin eri vaiheista sekä
    \item tuntee projektityöskentelyyn liittyviä ryhmä- ja vuorovaikutusilmiöitä.
\end{compactitem}

Ryhmän jäsenet suorittavat myös toisen oheiskurssin \textit{Sovellusprojektin hallintaa, viestintää ja työkaluja}, joka sisältää seuraavat luennot:

\begin{compactitem}
    \item aloitusluento,
    \item vaatimusmäärittely,
    \item versiohallinta,
    \item projektin hallinta ja johtaminen,
    \item tekijänoikeusluento.
\end{compactitem}

\section{Projektihallinnan ja dokumentoinnin työkalut}

Projektiryhmä merkitsee tuntikirjanpitonsa Excel-taulukkoon \cite{ajankaytto}, joka muodostaa tilakatsausten ajankäyttöseurannan kaaviot automaattisesti. Projektiryhmän tehtävähallinta ja työnositus tapahtuu Trello-palvelussa.

Versiohallintaan käytetään yliopiston GitLab-palvelua. Dokumentit ladotaan Overleaf-palvelussa käyttäen {\LaTeX}-ohjelmaa, Sovellusprojektien mallipohjia ja aiempien sovellusprojektien dokumentteja.

Viralliset tiedotuskanavat ovat projektin kaksi sähköpostilistaa. Projektiryhmä käyttää keskinäiseen viestintään Teams-kanavaa ja tiedostojen jakamiseen  Office 365 -palvelua. Projektin varsinaiset tulokset julkistetaan projektin WWW-sivuille. Tilaajan edustajat jakavat Nextcloud-palvelussa tutkimusdataa ja muuta materiaalia projektiryhmän käyttöön.

\section{Ohjelmointiympäristö}

Ohjelmistoa ajetaan graafisessa Windows-ympäristössä, joten ryhmä valitsi ohjelmointikieleksi C\#, ohjelmistokehykseksi .NET 5.0 ja käyttöliittymäksi WPF. Ohjelmointiympäristöinä käytetään Windowsilla Visual Studiota sekä Linuxilla Visual Studio Codea.

\textbf{WPF-ohjelmia ei voida kehittää tai ajaa Linuxilla.} Tämä otettiin huomioon suunnitellessa projektihakemiston rakennetta. Projektihakemisto koostuu kahdesta .NET-projektista: käyttöliittymä WPF sekä luokkakirjasto classlib, jotta luokkakirjastoa voidaan kehittää käyttöliittymästä erillään. Ohjelmiston luokkarakennetta voidaan kehittää Linux-koneella, mutta sovellusta ei voida ajaa Windows-koneen vaativan käyttöliittymän vuoksi. Luokkarakenteen toimivuutta testataan MSTest-kehyksen yksikkötesteillä.

\chapter{Käytänteet} \label{ch:kaytanteet}

Projektissa noudatettava ohjelmistokehitysprosessi koostuu toistuvista vaiheista. Projektissa noudatetaan takaisinkytkettyä vesiputousmallia osin vastaavaa kehitysprosessia ja luvussa kuvattuja käytänteitä. Viikkopalavereissa tiedotetaan projektin osallisia sekä päätetään projektin jatkotoimenpiteistä.

\section{Tiedotuskanavat ja viestinnän säännöllisyys}

Projektipäällikkö vastaa ryhmässä ensisijaisesti tiedotuksesta, mutta kukin ryhmän jäsenistä vastaa omien vastuualueittensa osalta tiedotuksesta. Olennaisimmat tiedotettavat asiat ovat tulosten julkistaminen, vaihtoehtoiset ja valitut toteutusratkaisut sekä kohdatut poikkeamat ja tehdyt muutokset.

Projektipäällikkö valmistelee myös viikottaisen tilakatsauksen, jolla havainnollistetaan projektin tulosten edistymistä ja valmiusastetta. Tilakatsaus lähetetään projektin sähköpostilistalle, ellei kyseisellä viikolla pidetä erillistä palaveria.

\section{Päätösvaltaiset viikkopalaverit}

Projektiorganisaation osapuolet kokoontuvat viikottain tai joka toinen viikko päätösvaltaiseen Teams-palaveriin, jonka ajankohta päätetään etukäteen edellisessä palaverissa. Projektiryhmän jäsenet huolehtivat esityslistojen ja pöytäkirjojen laatimisesta sekä jakamisesta projektiorganisaatiolle kukin vuorollaan. Pöytäkirjoihin tulee kirjata vähintään käsitellyt asiat tiivistetysti sekä tehdyt päätökset ja osallistujille sovitut toimenpiteet.

Ryhmän jäsenet kierrättävät palaverien puheenjohtajan tai sihteerin rooleja. Puheenjohtaja vastaa esityslistan mukaisesta palaverin läpiviennistä sekä tarkastaa ja toimittaa sihteerin laatiman pöytäkirjan.

\section{Tiedostojen nimeäminen}

Lähdekooditiedostojen nimeämisessä käytetään C\#-ohjelmointikielen yleisiä käytänteitä \cite{nimeamiskaytanteet}. Tiedostojen nimet ja hakemistojen nimet kirjoitetaan englanniksi.

Dokumenttitiedostot nimetään sisältöä kuvaavilla nimillä ja dokumentin kielen mukaisesti. Kussakin tiedostonimessä on ensiksi projektin nimi ja sen jälkeen dokumentin nimi. Juokseva numero ja päivämäärä lisätään toistuvien tapahtumien tiedostoihin, kuten palaverien pöytäkirjoihin. Jos nimi koostuu useammasta kuin yhdestä sanasta, käytetään välimerkkinä alaviivaa.

\section{Hakemistorakenne}
\label{ch:hakemistorakenne}

Projektin kirjalliset tulokset lähdekoodia lukuunottamatta sijoitetaan projektin WWW-sivulle. Sivuston hakemistorakenne on seuraava:

\begin{verbatim}
    dokumentit
        projektiraportti
        projektisuunnitelma
        sovellusraportti
        vaatimusmaarittely
        testausraportti
        testaussuunnitelma
    muut
        ajankayttoraportti
        itsearvioinnit
        esittelymateriaali
        verkkoesite
    palaverit
        esityslistat
        poytakirjat
        sähköpostiarkistot
        tilakatsaukset
    sovellus
        kayttoohjeet
        kehitysymparisto
        luokkadokumentaatio
        lähdekoodi
        valmisohjelma
    suunnitelmat
        arkkitehtuurisuunnitelma
        kayttoliittymasuunnitelma
        luokkasuunnitelma
\end{verbatim}

\section{Versionumerointi}

Sovelluksen lähdekoodin versiohallintaan käytetään Git-versiohallintaohjelmistoa. Lähdekoodi sijoitetaan GitLab-palveluun, jossa se on projektiryhmän ja ohjaajien sekä tilaajan edustajien nähtävissä projektin ajan. Julkistettavissa dokumenteissa käytetään kolmiportaista numerointia (i.j.k). Projektiryhmän sisäisiä versioita numeroidaan pienimmällä merkitsevällä numerolla paikassa k, kuten i.j.1. Projektiorganisaatiolle julkistettavat versiot numeroidaan toisella merkitsevällä numerolla paikassa j, kuten i.1.k. Ensimmäisen koko projektiorganisaation hyväksymän dokumentin versio on 1.0.0, ja tätä seuraavien hyväksyttyjen versioiden numerointia kasvatetaan toisen merkitsevän numeron osalta.

Versionumerointi toteutuu siten, että julkistettavaksi tarkoitettujen tulosten versionumerot päivitetään edellä kuvattujen käytänteiden mukaisesti. Julkistettavat tulokset sijoitetaan verkkolevylle projektiorganisaation palautetta varten. Samoin hyväksytyt versiot nimetään uudelleen. Versionumerosta on nopeasti nähtävissä, missä vaiheessa tarkistusprosessia se on.

\section{Lähdekoodin ja dokumenttien hyväksyminen}

Lähdekoodi kirjoitetaan ja kommentoidaan valitun ohjelmointikielen hyviä käytänteitä \cite{nimeamiskaytanteet} noudattaen. Ohjelmiston käyttökielen ja dokumentaatiokommenttien kielenä tulee olla englanti.

Tekninen ohjaaja katselmoi lähdekoodin projektiryhmän kanssa vähintään kahdesti projektin aikana. Katselmointien ajankohdat päätetään myöhemmin ja myös tilaajan edustajat voivat osallistua katselmointeihin. Teknisen ohjaajan lisäksi tilaajan edustajien tulee hyväksyä lähdekoodi.

Kaikki dokumentit kirjoitetaan suomeksi. Olennaisimmat dokumentit hyväksytetään sekä vastaavalla ohjaajalla että tilaajan edustajalla. Dokumentit voidaan hyväksyä palavereissa tai sähköpostitse. Hyväksyttäviä dokumentteja ovat:

\begin{compactitem}
    \item projektisuunnitelma,
    \item vaatimusmäärittely,
    \item projektiraportti,
    \item sovellusraportti.
\end{compactitem}

\section{Testaus}

Ohjelmoija suorittaa tarvittavat yksikkötestaukset kirjoittamalleen lähdekoodille. Sovelluksen käyttöliittymää testataan kehityksen aikana koko ajan jäsenten toimesta, jotta varmistutaan sen toiminnasta ja laadusta. Toteutetun sovelluksen laadunvarmistus tapahtuu järjestelmätestauksella, johon jäsenet laativat testitapaukset sekä suorittaa testauskerrat. \cite{peltihamsteri}

Järjestelmätestauksesta vastaava henkilö laatii testaussuunnitelman sekä vastaa testauksen läpiviennistä. Vastaavan henkilön lisäksi muut projektiryhmän jäsenet ovat mukana järjestelmätestauksen läpiviennissä. Testaussuunnitelma sisältää testauskerralla suoritettavat testitapaukset kuvattuina vaihe vaiheelta. \cite{peltihamsteri} Järjestelmää testataan käyttäen tilaajan toimittamaa tutkimusdataa, jota on muunnettu eri tiedostoformaatteihin Fiji-ohjelmistolla. Testiaineistona käytetään samaa tomografia-aineistoa, jota on käytetty testattavan ohjelmiston kehittämisessä.

Testauskerran suorittaneen jäsenen laatimassa testausraportissa kuvataan testauskerran havainnot sekä mahdolliset havaitut virhetilanteet ja puutteet \cite{peltihamsteri}. Lisäksi tilaajan edustajat tekevät vapaamuotoisen testauksen, jonka palautteesta ryhmän jäsenet laativat muistion. Testaussuunnitelman ja -raportin vastuuhenkilöt kuvataan luvussa \ref{ch:roolit-ja-vastuualueet}.

\section{Projektin muutosten hallinta}

Muutosten hallinnan tarkoituksena on hallita projektiin kohdistuvia muutoksia sekä tehdä päätös niiden toteuttamisesta. Muutoshallinnan tehtävänä on arvioida muutosehdotukset, hyväksyä muutokset ja hallita muutokset tuotoksiin ja projektidokumentteihin sekä viestiä muutokset projektiryhmälle.

Kuka tahansa projektiorganisaatiosta voi esittää muutospyynnön projektin aikana. Muutospyyntö on projektin hyväksyttyihin lopputuotteisiin liittyvän muutoksen kuvaus ja se sisältää seuraavat arviot:

\begin{compactitem}
    \item muutoksen hyödyt ja vaikutukset,
    \item muutoksen laajuus,
    \item vaikutus aikataulun ja resurssitarpeisiin sekä
    \item siihen sisältyvät riskit.
\end{compactitem}

Projektipäällikkö vie muutospyynnön johtoryhmälle, joka hyväksyy tai hylkää muutospyynnön.

\section{Tulosten koostaminen ja toimittaminen}

Projektiryhmä kokoaa luvussa \ref{ch:tulokset} kuvatut projektin tulokset tulostettuina sekä tulostettuina projektikansioon että tallennettuina CD-levylle luvussa \ref{ch:hakemistorakenne} kuvatun hakemistorakenteen mukaisesti. Vain hyväksytyt dokumentit koostetaan projektikansioon ja CD-levylle. Kaikki projektin jäsenten tulokset tulee tallentaa CD:lle. Projektikansioon tulee siis tulostaa kaikki luvussa \ref{ch:tulokset} projektin tulokset lähdekoodeja, luokkadokumentaatiota ja valmisohjelmaa lukuunottamatta.

Tilaajalle toimitetaan www-sivuston kautta pakattu tiedosto sisältäen kaikki projektin tulokset. Informaatioteknologian tiedekunnalle tulee toimittaa projektikansio ja kaksi CD-levyä. Yksi sijoitetaan projektikansion yhteyteen ja toinen on erillinen arkistokappale.

\chapter{Roolit, vastuualueet ja tehtävät} \label{ch:tyovaiheet}

Ryhmän jäsenten vastuualueet on jaettu sovelluksen tehtäväkokonaisuuksien perusteella. Tehtäväkokonaisuudet jakautuvat osatehtäviin, joihin kuuluu myös dokumenttien laatiminen. Pääosin tehtäväkokonaisuuden vastuuhenkilö on vastuussa siihen liittyvistä tuloksista.

\section{Roolit ja dokumentoinnin vastuualueet}
\label{ch:roolit-ja-vastuualueet}

Projektipäällikkönä toimii Harri Linna, jonka vastuulla on projektin suunnittelu, hallinta, raportointi ja seuranta. Varaprojektipäällikkönä toimii Jere Pakkanen, mikäli projektipäällikkö estyy suorittamasta velvoitteitaan.

Taulukossa kuvataan ryhmän jäsenten vastuualueet projektin kirjallisiin tuloksiin liittyen. Jokaiselle tulokselle määritetään yksi vastuuhenkilö. Vastuuhenkilö vastaa pääosin kyseisen tuloksen saattamisesta valmiiksi, sekä siihen liittyvästä viestinnästä projektiorganisaatioon kuuluvien henkilöiden ja sidosryhmien kanssa. Vastuualueen vastuuhenkilö ei välttämättä toteuta kyseistä vastuualuetta yksin. \cite{peltihamsteri}

\begin{table}[h!]
\centering
\begin{tabular}{ |p{7cm}|p{4cm}| }
 \hline
 \textbf{Vastuualueen kuvaus} & \textbf{Vastuuhenkilö}\\
 \hline
 Ajankäyttöraportti & Harri Linna\\
 \hline
 Arkkitehtuurisuunnitelma & Harri Linna\\
 \hline
 Esittelymateriaali & Harri Linna\\
 \hline
 Kehitysympäristön pystytysohjeet & Iiro Iivanainen\\
 \hline
 Käyttöliittymäsuunnitelma & Harri Linna\\
 \hline
 Käyttöohjeet & Iiro Iivanainen\\
 \hline
 Luokkadokumentaatio & Riikka Vilavaara\\
 \hline
 Luokkasuunnitelma & Iiro Iivanainen\\
 \hline
 Lähdekoodi & Iiro Iivanainen\\
 \hline
 Palaverien dokumentit & Harri Linna\\
 \hline
 Projektiraportti    & Harri Linna\\
 \hline
 Projektisuunnitelma & Harri Linna\\
  \hline
 Sovellusraportti & Riikka Vilavaara\\
  \hline
 Sähköpostiarkistot & Harri Linna\\
 \hline
 Testausraportti & Iiro Iivanainen\\
  \hline
 Testaussuunnitelma & Iiro Iivanainen\\
  \hline
 Vaatimusmäärittely  & Jere Pakkanen\\
  \hline
 Valmisohjelma & Jere Pakkanen\\
 \hline
 Verkkoesite & Riikka Vilavaara\\
 \hline
\end{tabular}
\caption{Dokumentoinnin vastuualueet.}
\end{table}

\section{Kehitettävät sovellusosiot ja työmäärät}

Projektin läpiviennin työmääräarvio on 1600 henkilötyötuntia \textbf{jakautuen tasan neljän opiskelijan välille}. Ohjelmointiin käytettävä aika on 200 tuntia per opiskelija. Kaikkiaan toteutuksen ohjelmointivaihe käsittää puolet sovelluksen kokonaisresursseista.

Testausta suoritetaan yleensä saman verran kuin toteutusta (tehtiin se järjestelmällisesti automaattisilla testeillä tai ilman). Suunnitteluun käytetään puolet toteutukseen varatusta ajasta ja määrittelyyn kymmenesosa suunnitteluun varatusta ajasta. Oheisessa kuvassa työmäärien jakauma projektin vaiheittain.

\begin{figure}[h!]
    \centering
    \includegraphics[width=\textwidth]{kuvat/projektisuunnitelma/vaiheet.png}
    \caption{Työmäärät vaiheittain.}
    \label{fig:tyomaarat-vaiheittain}
\end{figure}

\begin{figure}[h!]
    \centering
    \includegraphics[width=\textwidth]{kuvat/projektisuunnitelma/tehtavat.png}
    \caption{Työmäärät tehtävittäin.}
    \label{fig:tyomaarat-tehtavittain}
\end{figure}
\begin{table}[h!]
\centering
\caption{Kehitettävät sovellusosiot ja työmäärät.}
\begin{tabular}{ |l|l|l|p{1.7cm}| }
 \hline
 \textbf{Tehtävä} & \textbf{Lopputuote} & \textbf{Vastuuhenkilö} & \textbf{Työmää-räarvio}\\
 \hline
 \hline
 \multicolumn{3}{|l|}{\textbf{Esitutkimus}} & \textbf{20}\\
 \hline
 Aihekuvaus & & Kaikki & 20\\
 \hline
 \hline
 \multicolumn{3}{|l|}{\textbf{Määrittely}} & \textbf{40}\\
 \hline
 Tarpeet ja tavoitteet & Käsitekartat & Kaikki & 10\\
 \hline
 Vaatimukset & Vaatimusmäärittely & Jere Pakkanen & 30\\
 \hline
 \hline
 \multicolumn{3}{|l|}{\textbf{Suunnittelu}} & \textbf{400}\\
 \hline
 Arkkitehtuuri & Arkkitehtuurisuunnitelma & Harri Linna & 100\\
 \hline
 Kehitysympäristö & Kehitysympäristön pystytysohjeet & Iiro Iivanainen & 100\\
 \hline
 Käyttöliittymä & Käyttöliittymäsuunnitelma & Harri Linna & 100\\
 \hline
 Luokkarakenne & Luokkasuunnitelma & Iiro Iivanainen & 100\\
 \hline
 \hline
 \multicolumn{3}{|l|}{\textbf{Toteutus}} & \textbf{800}\\
 \hline
 Käyttöliittymä & \makecell{Lähdekoodi, \\ käyttöohjeet} & \makecell{Riikka Vilavaara, \\ Iiro Iivanainen} & 200\\
 \hline
 Luokkarakenne & \makecell{Lähdekoodi, \\ luokkadokumentaatio} & \makecell{Iiro Iivanainen, \\ Riikka Vilavaara} & 200\\
 \hline
 Tiedoston lukeminen & Lähdekoodi & Jere Pakkanen & 200\\
 \hline
 Yksikkötestaus & \makecell{Testausraportti, \\ sovellusraportti} & \makecell{Iiro Iivanainen, \\ Riikka Vilavaara} & 200\\
 \hline
 \hline
 \multicolumn{3}{|l|}{\textbf{Järjestelmätestaus}} & \textbf{100}\\
 \hline
 Järjestelmätestaus & Testausraportti & Iiro Iivanainen & 80\\
 \hline
 Testaussuunnittelu & Testaussuunnitelma & Iiro Iivanainen & 20\\
 \hline
 \hline
 \multicolumn{3}{|l|}{\textbf{Viimeistely}} & \textbf{50}\\
 \hline
 Versiohallinta & Lähdekoodi & Iiro Iivanainen & 10\\
 \hline
 Käyttöliittymä & Käyttöohjeet & Iiro Iivanainen & 10\\
 \hline
 Kehitysympäristö & Kehitysympäristön pystytysohjeet & Iiro Iivanainen & 10\\
 \hline
 Luokkarakenne & Luokkadokumentaatio & Riikka Vilavaara & 10\\
 \hline
 Sovellus & Sovellusraportti & Riikka Vilavaara & 10\\
 \hline
 \hline
 \multicolumn{3}{|l|}{\textbf{Projektin hallinta}} & \textbf{240}\\
 \hline
 Palaverit, katselmoinnit & Esitysmateriaali & Harri Linna & 20\\
 \hline
 Projektin hallinta & \makecell{Ajankäyttöraportti, palaverien \\ dokumentit, sähköpostiarkistot} & Harri Linna & 150\\
 \hline
 Projektin päättäminen & Projektiraportti & Harri Linna & 30\\
 \hline
 Projektin suunnittelu & Projektisuunnitelma & Harri Linna & 40\\
 \hline
 \hline
 \multicolumn{3}{|l|}{\textbf{Yhteensä}} & \textbf{1650}\\
 \hline
\end{tabular}

\end{table}

Työmääräarviot perustuvat asiantuntijoiden arvioihin. Käytetty arviointimenetelmä on kolmen pisteen työmääräarviointi yhdistettynä PERT projektin arviointi ja tarkastelutekniikkaan, jota kouluttaa esimerkiksi PMI Project Management -instituutti \cite{pert}. Kolmen pisteen työmääräarvioinnissa asiantuntijat, tässä tapauksessa projektiryhmän jäsenet, antoivat projektin tehtäville kolme eri työmääräarviota, optimistinen, pessimistinen ja todennäköinen. Lopullinen työmääräarvio on näiden kolmen todennäköisellä työmääräarviolla painotettu keskiarvo. Toteutuneista projekteista kerätyn kokemuksen perusteella todennäköistä työmääräarviota painotetaan kertoimella neljä, jolloin kaavaksi saadaan seuraava:

\[ L = \frac{( O + 4 \cdot T + P )}{6} \textrm{, missä} \]

\begin{compactitem}
    \item L = Lopullinen työmääräarvio,
    \item O = Optimistinen työmääräarvio,
    \item T = Todennäköinen työmääräarvio ja
    \item P = Pessimistinen työmääräarvio.
\end{compactitem}

Yllä kuvattu työmääräarvio antaa realistisen arvion projektin toteutuksen vaatimista resursseista. Jatkuvien tehtävien, kuten projektin hallinnan osalta parempi arvio saadaan arvioimalla kokousten ja edistymisraportoinnin vaatima aika kalenteriin suhteutettuna. Tyypillisesti projektin hallinnan vaatima aika on 10–20 prosenttia projektin kokonaistyömäärästä.

\chapter{Prosessi ja aikataulu}

Aikataulu esittää, kuinka vaiheet saadaan toteutettua valittua prosessia noudattaen määräajassa. Projektin aikataulu määräytyy pääosin tavoitteista ja käytettävistä resursseista. Kukaan projektin jäsenistä ei ole mukana täysipäiväisesti, mikä on huomioitu aikataulussa.

\section{Prosessi}

Määrittelyvaihe merkataan valmiiksi ja siirrytään seuraavaan suunnitteluvaiheeseen. Tarvittaessa voidaan suunnittelun ja toteutuksen yhteydessä täydentää ja muokata vaatimuksia. Sovellusprojektin läpiviennissä sovelletaan takaisinkytkettyä vesiputousmallia \cite{vesiputous}, johon liittyvät päävaiheet ovat määrittely, suunnittelu, toteutus, testaaminen ja viimeistely.

Suunnitteluvaiheessa laaditaan tilaajan edustajien kanssa keskustellen sovelluksen kehittämistä tukevia dokumentteja. Palavereissa keskustelluista asioista laaditaan vaatimusmäärittely, jota ylläpidetään koko sovellusprojektin ajan. Lisäksi toiminnalliset ja laadulliset vaatimukset priorisoidaan. Vaatimusmäärittely toimii työkaluna, jonka perusteella suunnittelun lisäksi arvioidaan projektin valmiusastetta. Suunnitteludokumentit kuvaavat tarkasti sovellukselle asetettuja tarpeita ja tavoitteita, arkkitehtuuria, luokkarakennetta ja käyttöliittymää. Suunnitteludokumentit esitellään tilaajan edustajille päätösvaltaisissa palavereissa, joista saadun palautteen perusteella dokumentteja muokataan.

Toteutusvaiheessa projektiryhmän jäsenten kesken sovitaan kullekin ryhmän jäsenelle selkeät vastuualueet, jotka määrittävät luonnollisesti tehtäväjakoa. Vastuualuiden tavoitteena on, että ryhmän jäsenet erikoistuvat itsenäisesti suoritettaviin ohjelmointitehtäviin. Vapaus tuo samalla vastuuta, joten on erityisen tärkeää, että jäsenet kokoontuvat säännöllisesti keskustelemaan sovelluksen tilanteesta. Tästä syystä ryhmän sisäisiä palavereja järjestetään säännöllisesti kolmesti viikossa. Projektin aikana kehitettävä sovellus on uusi, joten toteutusvaiheen alussa valitaan kehitysympäristö ja työkalut.

Testauksessa sovelletaan testauksen V-mallia, jonka mukaisesti vaatimuksista johdetaan testitapaukset. Vaatimusmäärittelyn toteutuminen todennetaan järjestelmätestillä, jolla varmistetaan myös luokkarakenteen yhteensopivuus. Yksittäiset aliohjelmat yksikkötestataan ja yksikkötestit pyritään resurssien puitteissa toteuttamaan ja suorittamaan heti ohjelmoinnin aikana. Testausvaiheessa suoritettava järjestelmätestaus toistetaan tarvittaessa, ellei ohjelma vastaa sille määriteltyjä vaatimuksia tai havaitaan häiriöitä. Viimeistelyvaiheessa järjestelmätestistä hyväksytysti suoriutunut ohjelma ja muut tulokset viimeistellään lopulliseen muotoonsa, minkä jälkeen tulokset kerätään kahteen projektikansioon. Toinen luovutetaan tilaajalle ja toinen arkistoidaan yliopiston toimesta.

\section{Aikataulu}

Kuva \ref{fig:aikataulu} esittää projektin suunnitellun aikataulun. Sovelluksen suunniteltiin valmistuvan toukokuun loppuun mennessä ja viimeistellyt tulokset luovutetaan tilaajalle kesäkuun 2021 aikana.

\begin{figure}[h!]
    \centering
    \includegraphics[width=1.0\textwidth]{kuvat/projektisuunnitelma/groundhog.png}
    \caption{Projektiaikataulu.}
    \label{fig:aikataulu}
\end{figure}

\chapter{Riskit ja niiden hallinta}

Projektin hallintaan sisältyy olennaisena riskien kartoittaminen ja hallinta. \pname-projektin läpivientiin liittyy riskejä, joiden toteutumisen todennäköisyyksiä, vaikutuksia ja vakavuutta arvioidaan tässä luvussa nelikenttämallilla. Lisäksi esitellään keinoja kyseisten riskien ennakointiin, ehkäisyyn, toipumiseen ja seurantaan. Ennakoituihin riskeihin on osattava varautua, ellei niitä voida välttää kokonaan. Riskien haittavaikutuksiin varaudutaan varaamalla työvaiheisiin arvioitua enemmän aikaa, mutta suotavaa olisi ratkaista juuriongelmat ennen kuin riskit ehtivät realisoitua.

\section{Riskien todennäköisyydet ja vakavuudet}

Riskien toteutumisen todennäköisyys ja seurausten vakavuuksia on arvioitu luokilla suuri, kohtalainen ja pieni. Riskit järjestettiin ensisijaisesti vakavuuden tai toissijaisesti todennäköisyyden perusteella. Jos joko riskin vaikutus tai todennäköisyys ovat pieniä, kokonaisriski on pieni eikä se vaadi välittömiä toimenpiteitä. Jos sekä riskin vaikutus että todennäköisyys ovat suuria, myös kokonaisriski on suuri ja toimenpiteet riskin ehkäisemiseksi on välittömästi käynnistettävä ja laadittava toipumissuunnitelma riskin toteutumisen varalta. Kaikissa muissa tapauksissa riski on keskinkertainen ja edellyttää suunnitelman laatimista riskin ehkäisyksi. Oheinen riskimatriisi havainnollistaa riskien luokittelua.

\begin{figure}[h!]
    \centering
    \includegraphics{kuvat/projektisuunnitelma/riskimatriisi.png}
    \caption{Riskimatriisi.}
    \label{fig:riskimatriisi}
\end{figure}

Tunnistetuista riskeistä kuvataan seuraavat asiat:
\begin{compactitem}
    \item riskin nimi ja kuvaus,
    \item vaikutus projektiin toteutuessaan,
    \item luokittelu vaikuttavuuden ja todennäköisyyden mukaan,
    \item toimenpiteet riskin ennaltaehkäisyyn (jos kokonaisriski on kohtalainen tai suuri) ja
    \item toipumissuunnitelma riskin toteutumisen varalta (jos kokonaisriski on suuri).
\end{compactitem}

% Riskit arvioidaan projektin alussa ja kirjataan projektisuunnitelmaan sekä projektin riskilokiin, jota ylläpidetään projektikokouksissa.
Riskit arvioidaan projektin alussa ja kirjataan projektisuunnitelmaan. Taulukkoon valittiin vain merkittäviä riskejä, jotka toteutuessaan vaikuttavat projektin läpivientiin tai tuloksiin.

\begin{table}
\begin{tabular}{ |p{8cm}|l|l|l|  }
 \hline
 \textbf{Riskin kuvaus} & \textbf{Todennäköisyys} & \textbf{Vakavuus} & \textbf{Kokonaisriski}\\
 \hline
 Aikaresurssien rajallisuus & Suuri & Suuri & Suuri\\
  \hline
 Tilojen ja laitteiden puute & Suuri & Kohtalainen & Kohtalainen\\
  \hline
 Ryhmän tietotaitojen puutteet & Kohtalainen & Kohtalainen & Kohtalainen\\
  \hline
 Ryhmän jäsenten muut sitoumukset & Kohtalainen & Kohtalainen & Kohtalainen\\
  \hline
 Ominaisuuksien toteuttamisen vaikeus & Pieni & Kohtalainen & Pieni\\
 \hline
\end{tabular}
\caption{Riskien arviointi.}
\end{table}

\section{Riskien hallinta}

\subsection{Aikaresurssien rajallisuus}

\textbf{Kuvaus:} Aikaresurssien rajallisuus liittyy ohjelmiston laatutavoitteisiin. Hyvä ohjelmisto vaatii perusteellista suunnittelua, järjestelmällistä testaamista sekä runsaasti iteraatioita ohjelmakoodin refaktoroinnissa. Projekti toteutetaan annettujen aikaresurssien puitteissa.

\textbf{Vaikutus:} Projektia toteutetaan takaisinkytketyn vesiputousmallin mukaisesti. Vaikutus riippuu siitä, missä vaiheessa projektia riski toteutuu. Toteutusvaiheessa osa suunnitellusta toteutuksesta jää toteuttamatta ja myöhäisemmässä vaiheessa ei päästä tavoiteltuun laatutasoon.

\textbf{Toimenpiteet riskin ennaltaehkäisyyn:}
\begin{compactitem}
    \item Vaatimusmäärittelyssä priorisoidaan kriittisimmät toiminnallisuudet toteutettavaksi ensimmäisinä.
    \item Sovellusta kehitetään inkrementaalisesti lisäämällä uusia ominaisuuksia muokaten iteratiivisesti olemassaolevaa.
    \item Arkkitehtuuria ja luokkarakennetta suunniteltaessa hyödynnetään C\#-kielen standardikirjastoja sekä geneerisiä tyyppejä rajapinnoissa, jotta sovellus olisi joustavasti muokattavissa.
    \item Samasta syystä käyttöliittymän suunniteltiin käyttävän ikkunointia, jotta moduulien lisääminen tai korvaaminen olisi helppoa.
    \item Suunnittelu ja toteutusvaihe aloitetaan mahdollisimman varhaisessa vaiheessa, jotta aikaresurssit varmasti riittäisivät laadukkaan prototyypin toteuttamiseen.
    \item Yksikkötestaus aloitetaan samaan aikaan kuin toteutus, jotta niitä voisi suorittaa samanaikaisesti, esimerkiksi käyttäen TDD-mallia. Toisin sanoen yksikkötestaus sisältyy toteutusvaiheeseen, mikä huomioitiin kaksinkertaistamalla toteutukseen vaadittavat aikaresurssit (50\% toteutus ja 50\% testaus).
\end{compactitem}

\textbf{Toipumissuunnitelma riskin toteutumisen varalta:}
\begin{compactitem}
    \item Sovitaan toteutuksen rajaus niin, että projektin päättyessä voidaan silti toimittaa toimiva prototyyppi vaikkakin toiminnallisuudeltaan suunniteltua suppeampana.
    \item Varmistetaan dokumentaation laatu, jotta jatkokehittämiselle on hyvät lähtökohdat.
\end{compactitem}

\subsection{Tilojen ja laitteiden puute}

\textbf{Kuvaus:} Projektin käynnistysvaiheessa tavoitteena oli tehdä töitä yhteisissä tiloissa ja projektin tarjoamilla laitteilla. Covid19-pandemien takia tämä ei välttämättä ole mahdollista.

\textbf{Vaikutus:} Sovelluksen tulisi vaatimusmäärittelyn mukaan toimia millä tahansa perustason tietokoneella, joten laitteiden vaikutus projektiin ei ole suuri. Kaikilla projektilaisilla ei kuitenkaan ole samanlaista laitekokoonpanoa, mikä aiheuttaa pieniä viiveitä kehityksessä ja vaikeuttaa työnjakoa. Yhteisten tilojen puuttuminen vaikuttaa ryhmätyöskentelyyn, jolle on löydettävä korvaavia muotoja.

\textbf{Toimenpiteet riskin ennaltaehkäisyyn:}
\begin{compactitem}
    \item Riski toteutui jo ennen töiden käynnistymistä, joten ennaltaehkäisyä ei kyetty suunnittelemaan.
\end{compactitem}

\textbf{Toipumissuunnitelman riskin toteutumisen varalta:}
\begin{compactitem}
    \item Projektiryhmä työskentelee kokonaan etänä henkilökohtaisilla tietokoneillaan. Tietotekniikan opiskelijoilla tulisi olla riittävät työvälineet työpöytäsovelluksen kehittämiseen.
    \item Perustetaan etätyöskentelyä tehostava \textit{Discord}-kanava, johon kuuluu ryhmän jäsenten lisäksi tekninen ohjaaja. Ryhmä kokoontuu puheyhteyden ylitse neuvottelemaan kolmesti viikossa (ma, ke ja pe) ajankohtaisista toimenpiteistä.
\end{compactitem}

\subsection{Ryhmän tietotaitojen puute}

\textbf{Kuvaus:} Projektiryhmän kokemus kyseessä olevan kokoluokan sovellusprojektista sekä siihen liittyvästä projektityöskentelystä on vähäistä.

\textbf{Vaikutus:} Resurssien käytön tehottomuus, jonka seurauksena osa sovelluksen ominaisuuksista joudutaan rajaamaan toteutuksen ulkopuolelle.

\textbf{Toimenpiteet riskin ennaltaehkäisyyn:}
\begin{compactitem}
    \item Tilaajan edustajilla on runsaasti tietotaitoa aihealueesta, joten projektiryhmä saa on saanut erinomaista ohjeistusta toteutusratkaisuihin.
    \item Projektiryhmä saa valita vapaasti ohjelmointikielen ja kehitysympäristön sekä sovittujen lisenssien puitteissa myös ulkoiset kirjastot.
    \item Teknisellä ohjaajalla on runsaasti kokemusta ohjelmistokehitysprojekteista, ohjelmoinnista ja kuvankäsittelyn ohjelman kehittämisestä.
\end{compactitem}

\textbf{Toipumissuunnitelma riskin toteutumisen varalta:}
\begin{compactitem}
    \item Laaditaan, jos arvioitu kokonaisriski nousee seuraavalle tasolle.
\end{compactitem}

\subsection{Ryhmän jäsenten muut sitoumukset}

\textbf{Kuvaus:} Projektiryhmän jäsenten muut sitoumukset saattavat viivästyttää projektin läpivientiä. Kaksi ryhmän jäsenistä kirjoittaa pro gradu -tutkielmaa samaan aikaan, mikä estää täysipäiväisen työskentelyn. Tilaajan edustajat eivät vaatineet projektin valmistuvan tietyssä aikataulussa, mutta projektisopimuksessa on määritetty ehdoton takaraja projektin valmistumiselle.

\textbf{Vaikutus:} Projektin viivästyminen.

\textbf{Toimenpiteet riskin ennaltaehkäisyyn:}
\begin{compactitem}
    \item Ryhmä on asettaanut itselleen viikoittaisen 70 tunnin tavoitteen, johon sovelluksen edistymistä peilataan viikoittaisessa tilakatsauksessa.
    \item Poissaoloista aiheutuvat vaikutukset pyritään ehkäisemään siten, että muista sitoumuksista ilmoitetaan ryhmälle etukäteen. Tällöin ryhmän muut jäsenet sopivat, ketkä suorittavat poissaolevan tehtäviä.
\end{compactitem}

\textbf{Toipumissuunnitelma riskin toteutumisen varalta:}
\begin{compactitem}
    \item Laaditaan, jos arvioitu kokonaisriski nousee seuraavalle tasolle.
\end{compactitem}

\subsection{Ominaisuuksien toteuttamisen vaikeus}

\textbf{Kuvaus:} Toteutettavat ominaisuudet ovat määritetty selkeästi, joten sovelluksen pitäisi olla toteutettavissa. Tästä huolimatta toteutus on osoittautunut haastavaksi aikataulujen viivästymisestä sekä versiohallinnan lukuisista \textit{fix}-alkuisista komennoista päätellen. Käsiteltävät tiedostot ovat suuria, joten niitä ei välttämättä voi lukea muistiin kerralla. Myös käsiteltäviä tiedostotyyppejä on erilaisia, mikä lisää toteutuksen vaikeutta.

\textbf{Vaikutus:} Projektin viivästyminen ja työmäärien kasvaminen. Äärimmäisessä tapauksessa osa toiminnallisuudesta voi jäädä toteuttamatta.

\textbf{Toimenpiteet riskin ennaltaehkäisyyn:}
\begin{compactitem}
    \item Haastavien toimintojen osalta toteuttajat ottavat yhteyttä tekniseen ohjaajaan tai tilaajan edustajiin tarpeen vaatiessa.
    \item Ryhmäpalavereissa tarkennetaan toteutusratkaisuja.
    \item Selvitetään mahdollisuuksia valmiskomponenttien käyttöön esimerkiksi datan lukemisen osalta.
\end{compactitem}

\textbf{Toipumissuunnitelma riskin toteutumisen varalta:}
\begin{compactitem}
    \item Laaditaan, jos arvioitu kokonaisriski nousee seuraavalle tasolle.
\end{compactitem}

\chapter{Yhteenveto}

{\pname}-projekti kehittää Geologian tutkimuskeskukselle tutkimusdatan hallintajärjestelmän tomografialaboratorion käyttöön. Kehitettävässä sovelluksessa yhdistetään kerättyjä mittaustuloksia kolmiulotteiseen röntgenkuvaan. Kolmiulotteista kuvaa esitetään ohjelmassa kolmella poikkileikkauskuvalla, jotka edustavat kolmea eri pääakselia. Liitettyä dataa visualisoidaan sovelluksessa graafisesti sekä esitetään listana.

Projektin päättyessä projektiryhmän jäsenet tuntevat sovellusprojektin keskeiset projektinhallinnan menetelmät ja osaavat soveltaa niitä käytännön projektityössä. Projektin lopussa jäsenet osaavat valita tavoitteiden kannalta sopivimmat toteutustyökalut sekä käyttää niitä toteutusprojektin edellyttämässä laajuudessa.

{\pname}-projekti aloitettiin 2. helmikuuta 2021 ja sovelluksen on määrä valmistua toukokuun loppuun mennessä. Projektin tulokset kerätään kahteen projektikansioon. Toinen luovutetaan tilaajalle kesäkuun 2021 aikana ja toinen arkistoidaan yliopiston toimesta.

%LÄHTEET
\begin{thebibliography}{1}
\makeatletter
\addtocounter{\@listctr}{0}
\makeatother

% TODO: Katso kirjoitusohjeen luku 2.3 ja 2.4.

\bibitem{ajankaytto} Ekonoja, Antti; Lahtonen, Tommi ja Mäntylä, Jukka. Ajankäytönseurantatyökaluja. Jyväskylän yliopisto. Viitattu 9.5.2021. \url{https://appro.mit.jyu.fi/tools/ajankaytto/}.

\bibitem{liikkuva} Koskenkorva, Erkki. Projektisuunnitelma. Liikkuva-projekti. 2014.

\bibitem{aihekuvaus} Kuva, Jukka ja Miettinen, Arttu. Aihekuvaus. Geologian tutkimuskeskus ja Jyväskylän yliopiston. 2020.

\bibitem{potku} Kärkkäinen, Samuli. Projektisuunnitelma. Potku-projekti. 2013.

\bibitem{arkkitehtuurisuunnitelma} Linna, Harri. Arkkitehtuurisuunnitelma. {\pname}-projekti. 2021.

\bibitem{kayttoliittymasuunnitelma} Linna, Harri. Käyttöliittymäsuunnitelma. {\pname}-projekti. 2021.

\bibitem{projektisopimus} Linna, Harri. Projektisopimus. {\pname}-projekti. 2021.

\bibitem{nimeamiskaytanteet} Microsoft Co. Nimeämiskäytänteet. Viitattu 2.5.2021. \url{http://msdn.microsoft.com/en-us/library/ms229043.aspx}.

\bibitem{peltihamsteri} Mustonen, Marina. Projektisuunnitelma. Peltihamsteri-projekti. 2019.

\bibitem{vaatimusmaarittely} Pakkanen, Jere. Vaatimusmäärittely. {\pname}-projekti. 2021.

\bibitem{pert} Project Management Institute. What is PERT?. Viitattu 16.5.2021. \url{https://project-management.info/three-point-estimating-pert/#1-what-is-pert}.

\bibitem{huomioitavaa} Santanen, Jukka-Pekka. Huomioitavaa. Jyväskylän yliopisto. 2021.

\bibitem{projohje} Santanen, Jukka-Pekka. Projektiohje. Jyväskylän yliopisto. 2017.

\bibitem{vesiputous} Santanen, Jukka-Pekka. Prosessit, projektin hallinta ja ryhmätyö. 2017.

\bibitem{resurssitmateriaalit} Santanen, Jukka-Pekka. ResurssitMateriaalit. Jyväskylän yliopisto. 2021.

\bibitem{yhteystiedot} Santanen, Jukka-Pekka. Yhteystiedot. Jyväskylän yliopisto. 2021.

% TODO: Uupuisiko luvuista lähdeviittauksia osaan lähteistä?

\end{thebibliography}

%LIITTEET
%\begin{appendix}

%\chapter{Ensimmäinen liite}

%Tänne tarvittaessa liitteitä.

%\end{appendix}

% Dokumentin  lopetus
\end{document}
