% .tex-tiedosto projektin dokumenttien latomiseksi.

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

\usepackage{paralist}
\usepackage{alltt}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{enumitem}
\usepackage{tikz}
\usepackage{gensymb}
\usepackage{comment}
\usetikzlibrary{positioning,shapes,shadows,arrows}

\setlist[enumerate]{leftmargin=2cm}


\newcommand{\note}[1]{\emph{{\bf Huom.:} {\small#1}}}
\newcommand{\transl}[1]{(engl. \emph{#1})}
\newcommand{\refwithpage}[1]{
	\ref{#1}
	\ifthenelse{\equal{\arabic{page}}{\pageref{#1}}}
	{}
	{sivulla \pageref{#1}}
}


% Projektin nimi
\project{Kepler}

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

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

% Dokumentin nimi
\title{Vaatimusmäärittely}

% Tekijät: huomaa aakkosjärjestys sukunimen mukaan
\author{Joonas Konki}
    {Anu Koskela}
    {Mikko Kuhno}
    {Henrik Paananen}
    {Atte Räty}
% Puhelinnumerot: tekijöitä vastaava järjestys!
\authorphones{044-9975150}{040-7255948}{040-9105675}{044-5885874}{040-5734898}
% Sähköpostiosoitteet: tekijöitä vastaava järestys!
\authoremails{joonas.konki@jyu.fi}
    {anu.k.koskela@student.jyu.fi}
    {mikko.kuhno@gmail.com}
    {henrik.j.paananen@student.jyu.fi}
    {atte.t.raty@student.jyu.fi}
% Etu- ja sukunimen alkukirjaimet: tekijöitä vastaava järjestys!
\authorinitials{JK}{AK}{MK}{HP}{AR}

% Tiivistelmä dokumentista: tämä ei siis ole tiivistelmä projektista,
% vaan tämän ko. dokumentin tarkoituksesta.
\docabstract{Kepler-projekti kehittää Jyväskylän yliopiston fysiikan laitokselle WWW-sovelluksen oppilaslaboratorion töiden
mittausvuorojen varaamiseen. Vaatimusmäärittelyssä esitetään kehitettävän sovelluksen tarpeet, rakennetta ja vaatimukset.
}

% Tiivistelmä projektista
\projectabstract{Projekti kehittää oppilaslaboratorion varausjärjestelmän Jyväskylän yliopiston fysiikan laitokselle.}

% Avainsanat: dokumentin sisältöön liittyviä olennaisia asiasanoja: aakkosjärjestys, ensimmäinen sana isolla alkukirjaimella ja piste loppuun.
\keywords{Aikataulu, ajanvaraus, järjestelmän kuvaus, kalenteri, mittausvuoro, oppilaslaboratorio,
    tietokanta, tuettava prosessi, vaatimusmäärittely, varausjärjestelmä, WWW-sovellus.}

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

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

\begin{tabular}{|c|r|p{9.0cm}|p{1.2cm}|}
\hline
\textbf{Versio} & \textbf{Päivämäärä} & \textbf{Muutokset} & \textbf{Tekijät} \\
\hline \hline
\versionrow{0.0.1}{16.2.2015}{Alustava versio vaatimusmäärittelystä luotiin.}{HP}
\versionrow{0.0.2}{24.2.2015}{Vaatimusten prioriteetti- ja tilaikonit lisättiin.}{HP}
\versionrow{0.0.3}{25.2.2015}{Tekstiä ja dokumentin rakennetta muokattiin.}{HP}
\versionrow{0.0.4}{7.3.2015}{Tekstiä ja dokumentin rakennetta muokattiin palautteen mukaan.}{HP}
\versionrow{0.0.5}{9.3.2015}{Vaatimuksia tarkennettiin ja jaettiin useampaan ryhmään.}{HP}
\versionrow{0.0.6}{10.3.2015}{Lisäyksiä termeihin ja korjauksia vaatimuksiin tehtiin.}{HP}
\versionrow{0.1.0}{11.3.2015}{Käytettävien sovelluskehyksien alalukua muokattu, laboratoriotyö lisätty termiksi.}{HP}
\versionrow{0.1.1}{12.3.2015}{Tekstiä ja vaatimuksia muokattiin ja korjattiin saadun palautteen perusteella.}{HP}
\versionrow{0.1.2}{17.3.2015}{Tekstiä muokattiin ja korjattiin saadun palautteen perusteella.}{HP}
\versionrow{0.2.0}{24.3.2015}{Vaatimuksia muokattiin, korjattiin ja lisättiin saadun palautteen perusteella.}{HP}
\end{tabular}
\newpage


% \projectinfo latoo projektin tiivistelmän.
% Projektin tiivistelmä ja tekijöiden tiedot ladotaan automaattisesti sivun
% alkuun. Eli lisättävä projektiorganisaation tiedot muiden kuin tekijöiden
% osalta sekä tarvittavat yhteystiedot.
\projectinfo


% infotable ympäristö helpottaa hieman henkilö- ja muiden tietojen listausta
\newenvironment{infotable}[1]{
    \textbf{#1:} \\
    \begin{tabular}{p{5cm}p{9cm}}
}{
    \end{tabular}
    \vspace{1truecm}
}

% \infoitem helpottaa henkilö- ja muiden tietojen listausta
\newcommand{\infoitem}[2]{~$\bullet$~~#1 & \texttt{#2}\\}
\newcommand{\infoitemx}[3]{~$\bullet$~~#1 & \texttt{#2} ja\\ \ & \texttt{#3}\\}

\begin{infotable}{Tilaaja}
\infoitem{Sakari Juutinen}{sakari.juutinen@phys.jyu.fi}
\infoitem{Panu Rahkila}{panu.rahkila@jyu.fi}
\end{infotable}

\begin{infotable}{Ohjaajat}
\infoitem{Petri Partanen}{petri.m.partanen@student.jyu.fi}
\infoitem{Jukka-Pekka Santanen}{santanen@mit.jyu.fi}
\end{infotable}

\begin{infotable}{Yhteystiedot}
\infoitemx{Sähköpostilistat:}{keplerit@korppi.jyu.fi}{keplerit\_opetus@korppi.jyu.fi}
\infoitemx{Sähköpostiarkistot:}
    {http://korppi.jyu.fi/kotka/servlet/ list-archive/keplerit/}
    {http://korppi.jyu.fi/kotka/servlet/ list-archive/kepler\_opetus/}
~$\bullet$~~Työhuone: & Agora C226.4, puh. 040-3573826
\end{infotable}

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


%---------------------------------------------
% Johdanto
%---------------------------------------------
\chapter{Johdanto}\label{chptr:johdanto}

Kepler-projekti kehittää kevään 2015 Sovellusprojekti-kurssilla WWW-sovelluksen Jyväskylän yliopiston fysiikan laitoksen
oppilaslaboratorion laboratoriotöiden mittausvuorojen varaamiseen. Uusi varausjärjestelmä tulee korvaamaan edeltävän
Brahe2007-järjestelmän. Brahe on toiminut laitoksen tarpeissa hyvin ainakin oppilaiden näkökulmasta, mutta järjestelmässä ei ole
pääkäyttäjälle omaa näkymää, jonka kautta hallita laboratoriotöiden, laboratoriovuorojen ja ohjaajien tietoja.

Uuteen järjestelmään kehitettäviä ominaisuuksia ovat opiskelijan ja ohjaajan näkymien ohella aiemmasta järjestelmästä puuttuvat
kalenterinäkymä sekä pääkäyttäjän näkymä. Lisäksi järjestelmän tulee tukea ainakin kahta kieltä: suomi ja englanti.
Mahdollisuuksien mukaan on myös tarkoitus ottaa huomioon muidenkin yliopiston laitosten tarpeita jatkokehitystä varten.

Dokumentti kuvaa projektissa kehitettävän järjestelmän tarpeita, rakennetta ja vaatimuksia.
Luku \ref{chp:termit} kuvaa dokumntissa käytettäviä aihealueen, tietojärjestelmän ja toteutustekniikoiden
termejä. Luku \ref{chp:taustaa} kuvaa järjestelmällä tuettavia prosesseja. Luku \ref{chp:kayttajat} esittää järjestelmän
käyttäjäroolit ja kuvaa heidän tarpeitaan. Luvussa \ref{chp:jarjestelma} esitetään järjestelmän kokonaisrakenne ja suhteet
muihin tietojärjestelmiin. Luvussa \ref{chp:priotilat} esitetään käytetyt merkinnät vaatimuksien prioriteeteille ja tiloille.
Luvussa \ref{chp:vaatimukset} luetellaan järjestelmän toiminnalliset vaatimukset sekä luvussa
\ref{chp:rajoitteet} järjestelmän tekniset vaatimukset ja rajoitteet.

Projektin projektisuunnitelmassa \cite{projsuunnitelma} kuvataan projektin läpivientiä, tavoitteita ja taustaa. Lisäksi
projektisuunnitelmassa esitetään tarkemmin kehitettävällä järjestelmällä tuettavia prosesseja.

% !!! Hyödynnetyt dokumentit

%---------------------------------------------
% Termit
%---------------------------------------------
\chapter{Termit}\label{chp:termit}

Luvussa kuvataan projektissa ja dokumentissa käytettäviä aihealueen, tietojärjestelmän ja teknisiä termejä.


\section{Aihealueen termejä}
Projektin aihealueen termejä ovat seuraavat:

% Termilistat ladotaan Ventry-ympäristöllä, parametrina pisin termi,
% jolloin sisentyy oikein:
\begin{Ventry}{Oppilaslaboratorio}
\item[Assistentti] on fysiikan laboratoriotöiden ohjaajalle käytetty nimitys. Hän on perus-, aine- ja syventäviin opintoihin liittyvien
kurssien laboratoriotöitä laboratoriovuoron aikana ohjaava henkilö.
\item[Laboratoriotyö] on mittausvuorolla tehtävä johonkin kurssiin liittyvä työ.
\item[Laboratoriovuoro] on yleensä neljän tunnin mittainen assistentin ohjaama tilaisuus, jossa laboratoriotöihin liittyvät mittaukset
voidaan suorittaa.
\item[Mittauslaitteisto] on yhdestä tai useammasta mittalaitteesta koostuva laitteisto, jolla laboratoriotyön mittaukset suoritetaan.
\item[Mittausryhmä] on opiskelijajoukko, joka on varannut ajan laboratoriotyön mittaamiselle jollekin ohjatulle laboratoriovuorolle.
\item[Mittausvuoro] on opiskelijan jollekin laboratoriovuorolle varaama aika jonkin tietyn laboratoriotyön mittaamiseen.
\item[Ohjaaja] on assistentin käyttäjäroolin nimi kehitettävässä varausjärjestelmässä.
\item[Ohjausvuoro] on ohjaajan laboratoriovuoro, jolle hänet on asetettu ohjaajaksi.
\item[Opiskelija] on mittausvuoroja varaavan opiskelijan käyttäjäroolin nimi kehitettävässä varausjärjestelmässä.
\item[Oppilaslaboratorio] on fysiikan laitoksen oppilaslaboratorio, jonka vuorojen varaukseen järjestelmä kehitetään.
\item[Pääkäyttäjä] on pääkäyttäjän käyttäjäroolin nimi kehitettävässä varausjärjestelmässä. Pääkäyttäjä on henkilö, joka hallitsee
toisten käyttäjien rooleja ja lisää laboratoriotöitä järjestelmään.
\end{Ventry}


\section{Ohjelmistoja ja teknisiä termejä}
Dokumentissa käytettyjä teknisiä termejä ovat seuraavat:

\begin{Ventry}{WWW-sovelluskehys}
\item[Back end] on ohjelmiston se osa, joka on kauimpana ohjelmiston käyttäjästä. WWW-sovelluksessa se on palvelinpuolen ohjelmisto.
\item[Bootstrap] on WWW-dokumenttien ulkoasun muokkausta helpottava, HTML-kuvauskieltä ja CSS-tyylikieltä käyttävä kirjasto.
\item[CSS] on tyylikieli WWW-dokumenttien ulkoasun määrittämiseen.
\item[Front end] on ohjelmiston se osa, joka on lähimpänä ohjelmiston käyttäjää. Käytännössä front end sisältää sovelluksen käyttöliittymän ja
sen toimintalogiikan.
\item[HTML5] on uusin versio WWW-dokumenttien HTML-kuvauskielestä.
\item[ICal] on kalenteritiedostomuoto, jolla kalenterisovellukset pysyvät vaihtamaan kalenteritietoja keskenään.
\item[JavaScript] on WWW-sovelluksissa käytetty ja WWW-selaimissa toimiva dynaamisesti tyypitetty ohjelmointikieli.
\item[jQuery] on WWW-dokumenttien dynaamisen sisällön käsittelyä helpottava avoimen lähdekoodin lisenssin alainen JavaScript-kirjasto.
\item[JYU-tunnukset] ovat Jyväskylän yliopiston IT-palveluiden käyttäjän henkilökohtaiset käyttäjätunnukset.
\item[Korppi] on Jyväskylän yliopiston opintotietojärjestelmä.
\item[Käyttöliittymä] on ohjelmiston osa, jonka kautta käyttäjä käyttää ohjelmistoa.
\item[OAuth2] on sovelluksessa autentikointiin käytettävä protokolla.
\item[ORM] on tekniikka, jolla tietokannan tietoja pystytään helposti käsittelemään suoraan ohjelmointikielen olioiden kautta.
\item[Pyramid] on Python-ohjelmointikielellä toteutettu WWW-sovelluskehys.
\item[Python] on dynaamisesti tyypitetty korkeantason ohjelmointikieli.
\item[Sovelluskehys] on ohjelman rungon muodostava teknologia.
\item[SQL] on yleisesti käytetty relaatiotietokantastandardi.
\item[SQLAlchemy] on avoimen lähdekoodin SQL- ja ORM-kirjasto Python-kielelle.
\item[Tietokanta] on tietovarasto, joka tyypillisesti mallintaa jollain tapaa tiedon yhteyksiä toisiin tietoihin. Tällöin puhutaan relaatiotietokannasta.
\item[WWW-sovellus] on WWW-tekniikoita hyödyntävä ja selaimella käytettävä sovellus.
\item[WWW-sovelluskehys] on sovelluskehys, joka on suunniteltu nopeuttamaan WWW-sovellusten kehittämistä.
\end{Ventry}


%---------------------------------------------
% Taustaa ja tuettava prosessi
%---------------------------------------------
\chapter{Taustaa ja tuettava prosessi}\label{chp:taustaa}

Jyväskylän yliopiston fysiikan laitoksen kursseihin liittyy usein laboratorio-osuus, jolla sovelletaan kurssilla opittua käytännössä.
Laboratoriossa tehtäviä töitä voi kurssilla olla useita, joista osa on vaihtoehtoisia. Oppilaat varaavat mittausvuoron
ja suorittavat laboratoriossa mittauksia yksin tai parin kanssa. Laboratoriotöitä ohjaamassa on laboratorio-ohjaaja.
Kyseinen assistentti on opiskelija, tohtorikoulutettava tai tutkija, joka on itse suorittanut kyseisen työn ja on siten
valmis ohjaamaan toisia työn suorittamisessa.

Laboratoriovuorot alkavat yleensä kello 8.00, 12.00 tai 16.00, ja kestävät neljä tuntia. Laboratoriovuorolla tehtävät
työt on jaettavissa kahdella tapaa: kurssin tason mukaan perusopinto- tai aineopintotyöksi, ja lappu- tai selostustyöksi.
"Lapputyö" on työ, jonka opiskelija suorittaa vuoron aikana täyttäen valmiin kaavakkeen. Vuoron päätteeksi assistentti
tarkistaa kaavakkeen. Selostustyö mitataan vuorolla, jonka jälkeen opiskelija kirjoittaa työstä raportin ja palauttaa
sen työstä vastaavalle assistentille tarkastettavaksi.

Laboratoriovuorojen saatavuudesta päättää fysiikan laitoksen oppilaslaboratorion johtaja, joka on kehitettävän
järjestelmän pääkäyttäjä. Hän lisää laboratoriovuorot varattavaksi ja määrää niille ohjaajat. Pääkäyttäjä pyrkii ottamaan
huomioon opiskelijoiden aikataulun ja kurssien luentojen ajankohdat lisätessään vuoroja järjestelmään. 
%Joskus järjestelmässä olevien töiden tekemistä joudutaan rajoittamaan johtuen rikkoutuneista mittauslaitteistosta.
%Tällöin pääkäyttäjä joutuu muokkaamaan työn tietoja rajoittaen sen varaamista.

Kehitettävällä varausjärjestelmällä tuettavia prosesseja kuvataan tarkemmin Kepler-projektin projektisuunnitelmassa \cite{projsuunnitelma}.


%---------------------------------------------
% Järjestelmän käyttäjät
%---------------------------------------------
\chapter{Järjestelmän käyttäjäroolit ja toiminnot}\label{chp:kayttajat}

Järjestelmän käyttäjillä on erilaisia rooleja, joiden mukaan heidän oikeutensa eri toimintojen suorittamiseen
järjestelmässä määräytyvät. Käyttäjällä voi olla yhtäaikaa useita käyttäjärooleja. 
Alaluvuissa on kuvattu kyseiset käyttäjäroolit ja heidän suhteensa järjestelmään.

\section{Kaikki käyttäjät}

Kaikille käyttäjille yhteisenä järjestelmässä on ilmoitustaulu, jonka avulla varausjärjestelmän käyttäjille pystytään
tiedottamaan oppilaslaboratorioon liittyvistä asioista. Ilmoitustaulu on järjestelmän ensimmäinen sivu sisäänkirjauksen
jälkeen. Kaikilla käyttäjillä on käyttäjäroolina oletusarvoisesti opiskelija.
%Joissain tapauksissa ilmoitustaulusivulla on myös henkilökohtaisia ilmoituksia, joihin käyttäjä pystyy reagoimaan.
%Esimerkiksi opiskelijan varaaman mittausvuoron peruuntumisesta näytetään opiskelijalle viesti ilmoitustaululla. Samoin
%ohjaajalle näkyy ilmoitustaululla mahdollinen tieto hänen ohjausvuoronsa peruuntumisesta.

\section{Opiskelija}

Opiskelija on fysiikan laitoksen opinto-oikeuden omaava opiskelija, joka varaa järjestelmästä mittausvuoroja.
Hänen pääasiallisena toimenpiteenään järjestelmässä on siis valita laboratoriotyö ja etsiä kalenterista varattava aika,
jolloin kyseisen työn voi mitata. Opiskelija varaa sopivan ajan, jonka jälkeen hän näkee vuoron omassa järjestelmän
sisäisessä kalenterissaan. Opiskelija pystyy perumaan varaamansa vuoron, jos vuoron alkuun on vielä riittävästi
aikaa. Yleensä peruminen tulee tapahtua vähintään kaksi työpäivää ennen vuoron alkua.

Opiskelija pystyy myös luomaan mittausryhmiä ja lisäämään näihin toisia opiskelijoita jäseniksi. Mittausryhmän jäsen pystyy
varaamaan mittausvuoron koko ryhmälle.

\section{Ohjaaja}

Ohjaaja on henkilö, joka ohjaa opiskelijoita laboratoriovuorolla. Ohjaaja voi olla, ja usein onkin, oppilas. Ohjaajan
perusoikeudet ovat siis samat kuin opiskelijan. Tämän lisäksi ohjaaja pystyy tarkastelemaan kaikkia laboratoriovuoroja,
joilla hän on ohjaajana. Vuorojen tiedoista ohjaaja pystyy näkemään vuorolle ilmoittautuneiden opiskelijoiden listan.
Jos joku opiskelijoista jättää tulematta vuorolle, pystyy ohjaaja tallentamaan tästä merkinnän järjestelmään. Samoin jos
opiskelijan mittaukset jäävät laboratoriovuorolla kesken, voi ohjaaja laittaa tästä merkinnän järjestelmään.

Koska ohjaajat voivat pyytää ohjattavan laboratoriovuoron vaihtoa pääkäyttäjältä, on ohjaajien myös hyvä nähdä
toisten ohjaajien laboratoriovuorot. Tällöin ohjaajat voivat sopia vuorojen vaihdosta ja pyytä pääkäyttäjältä, että tämä
tekee vaihdon järjestelmään.
%Koska ohjaajat voivat halutessaan vaihtaa ohjattavia laboratoriovuoroja keskenään, täytyy ohjaajan nähdä myös muiden
%ohjaajien ohjausvuorot. Ohjaaja pystyy ehdottamaan laboratoriovuoron vaihtoa toisen ohjaajan kanssa. Ohjausvuoron vaihtoehdotus
%Tällöin ehdotus
%näkyy sen ohjaajan ilmoitustaululla, jolle toinen ohjaaja ehdotuksen teki. Ilmoituksen kautta ohjaaja pystyy hyväksymään
%ohjausvuorojen vaihdon.

\section{Pääkäyttäjä}

Pääkäyttäjä on henkilö, jolla on oikeus hallita järjestelmän laboratoriotöitä, niihin liittyviä resursseja (mittalaitteet)
sekä varattavia laboratorio- ja mittausvuoroja. Pääkäyttäjällä on myös samat oikeudet kuin ohjaajalla.

Pääkäyttäjä pystyy lisäämään, poistamaan ja muokaamaan laboratoriotöitä. Työlle hän määrää sen tason ja kurssin, johon
se liittyy. Hän pystyy lisäämään ja poistamaan työstä sen vaatimia resursseja, joita ovat yleensä mittalaitteet sekä työpisteet ja -tilat.

Pääkäyttäjä pystyy myös lisäämään järjestelmään uusia resursseja ja muokkaamaan olemassa olevien resurssien lukumääriä ja tiloja.
Tila voi olla esimerkiksi \emph{varattavissa}, \emph{huollossa} tai \emph{pois käytöstä}. Vain varattavissa olevat resurssit otetaan huomioon
tietyn laboratoriotyön varausaikoja etsittäessä ja varausta tehtäessä.

Pääkäyttäjä lisää järjestelmään varattavaksi laboratoriovuoroja. Vuorolle hän määrittää sen tason ja vuoron ohjaajan.
Vuoron taso voi olla esimerkiksi \emph{perusopinto} tai \emph{aineopinto}. Tällöin vuorolle voi varata vain mittausvuoroja
laboratoriotöille, joiden taso on sama kuin laboratoriovuoron.

Pääkäyttäjällä on myös mahdollisuus perua mittausvuoroja tai kokonaisia laboratoriovuoroja. Laboratoriovuoron peruuntuessa
kaikki sille tehdyt varaukset peruuntuvat.

Pääkäyttäjällä on lisäksi oikeutena muuttaa muiden käyttäjien rooleja ja muokata eri rooleihin liittyviä oikeuksia.
Eri oikeuksia ovat esimerkiksi \emph{vuoron varaus}, \emph{perusopintotyön ohjaaja}, \emph{aineopintotyön ohjaaja},
\emph{laboratoriovuorojen hallinta} ja \emph{resurssien hallinta}.

Pääkäyttäjä pystyy muokkaamaan järjestelmän etusivun ilmoitustaulun ilmoituksia ja tallentamaan muutokset.


%---------------------------------------------
% Järjestelmän kuvaus
%---------------------------------------------
\chapter{Järjestelmän kokonaisrakenne ja toteutusratkaisut}\label{chp:jarjestelma}

Luvussa kuvataan kehitettävän varausjärjestelmän kokonaisrakennetta ja yleisimpiä toteutusratkaisuja.

\section{Järjestelmän rakenne}

Varausjärjestelmä on WWW-sovelluksille tavanomaisesti kolmitasoinen \transl{three-tiered}. Nämä tasot ovat
esitys, ohjelma ja tallennus \transl{presentation, application, storage}. Esitystaso toteutetaan WWW-sovelluksissa
luonnollisesti käyttäen HTML-, CSS- ja JavaScript-tekniikoita. Ohjelmataso on yleensä palvelinsovellus, joka on toteutettu
käyttäen jotain sopivaa teknologiaa ja tallennustaso on toteutettu tietokantana.

Esitystaso vastaa sovelluksen front endiä sisältäen siis käytännössä sen käyttöliittymän ja käyttöliittymälogiikan.
Ohjelma- ja tallennustaso vastaavat sovelluksen back endiä sisältäen ohjelman varsinaista toimintalogiikan.
Kuvassa \refwithpage{fig:rakenne} on esitetty järjestelmän kokonaisrakenne.

\begin{figure}[h!]
\includegraphics[width=\textwidth]{images/kokonaisrakenne.png}
\label{fig:rakenne}
\caption{Varausjärjestelmän kokonaisrakenne ja yhteys muihin järjestelmiin.}
\end{figure}

\section{Hyödynnettävät sovelluskehykset ja teknologiat}

Varausjärjestelmä toteutetaan käyttäen Python-kieltä ja Pyramid-nimistä WWW-sovelluskehystä. Pyramid sisältää kaiken
oleellisen järjestelmän kehittämiseen. Front end -puolella WWW-sivujen laatimista nopeuttavat mallisivut \transl{template},
joiden avulla eri sivuille on helppo saada yhtenäinen ulkoasu ja toiminnallisuus. Back end -puolella Pyramid käyttää
SQLAlchemy-nimistä ORM-kirjastoa, joka helpottaa tietokannan käsittelyä Python-koodissa.

Järjestelmän lopullisena tallennustasona toimivaa tietokannan hallintajärjestelmää ei tarvitse päättää vielä järjestelmän kehityksen alussa,
koska SQLAlchemy pystyy toimimaan useimpien SQL-tietokantajärjestelmien kanssa. Valinta riittää siten suorittaa vasta, kun varausjärjestelmä
asennetaan käyttöön. Tällöin tulee kuitenkin huomioida eri tietokantaratkaisujen rajoitteet ja poikkeavuudet standardista, joita ei SQLAlchemyn
tasolla pystytä yhtenäisesti toteuttamaan. Toteutuksessa tulisi siis käyttää vain SQL-standardin määrittelemiä ja kaikkien mahdollisten
tietokannan hallintajärjestelmien tukemia ominaisuuksia. Tällöin projektin loppuvaiheessa ja järjestelmää asennettaessa tarvitsee tehdä minimaalinen
määrä työtä tietokantaratkaisun valitsemisen yhteydessä.

%Hyviä vaihtoehtoja järjestelmän tietokannaksi ovat esimerkiksi PostgreSQL ja MariaDB. PostgreSQL:n toteutus on hyvin standardia
%seuraava, joten se toimisi järjestelmän kanssa hyvin.

%tietokannan valinnassa, että sen lisenssi on yhteensopiva sekä
%projektin lisenssin kanssa. Projektin kanssa yhteensopivia ovat esimerkiksi PostgreSQL ja MariaDB-tietokannat.

\section{Autentikointi ja Korppi-integraatio}

Järjestelmä hyödyntää Jyväskylän yliopiston olemassa olevaa OAuth2-autentikointipalvelua ja tietojärjestelmien yleisiä rajapintoja.
Rajapinnan kautta on tarkoitus saada käyttäjien tietoja, kuten nimi ja sähköpostiosoite.
%Järjestelmän on tarkoitus hyödyntää olemassa olevan Korppi-järjestelmän rajapintoja ainakin käyttäjän autentikointiin ja
%kalenterinäkymän toteuttamiseen. Autentikointi tapahtuu käyttäen OAuth2-protokollaa, jonka avulla Korppi-järjestelmästä
%saadaan myös tarpeellisia käyttäjän tietoja, kuten nimi ja sähköpostiosoite.

Kalenteri-integraation tarkoituksena on pystyä esittämään varausjärjestelmän kalenterissa käyttäjän Korppi-kalenterissa
olevat tapahtumat ja myös tarjota Korppi-kalenterin esitettäväksi varausjärjestelmässä olevat käyttäjän mittausvuorovaraukset
ja laboratoriovuoron ohjaukset. Toiminnallisuus on toteutettavissa kaksisuuntaisilla ICal-syötteillä. Tällä hetkellä Korppi tarjoaa
kalenteristaan ICal-syötteen, jota varausjärjestelmä pystyisi hyödyntämään suoraan.

Korppiin ei vielä ole toteutettu mahdollisuutta saada ulkopuolista syötettä näkyviin Korppi-kalenteriin.
Varausjärjestelmään voidaan toteuttaa ICal-syötteen muodostus, jotta se on Korpin käytettävissä heti, kun tuki sille on toteutettu.
Toisaalta varausjärjestelmän tarjoamaa kalenterisyötettä olisi mahdollista tulevaisuudessa käyttää myös muista järjestelmistä,
jotka sitä tukevat. Samoin jatkokehityksessä olisi mahdollista lisätä järjestelmään tuki muille ulkopuolisille ICal-kalenterisyötteille.

%\section{Muut järjestelmät ja jatkokehitys}

% !!!! ROTI?


% Komennot ja laskurit vaatimusten listausta varten
\newcounter{groupcount}
\setcounter{groupcount}{0}
\newcounter{reqcount}
\setcounter{reqcount}{0}

% Vaihtaa vaatimusryhmän numeroa
\newcommand{\newgroup}{
	\setcounter{reqcount}{0}
	\stepcounter{groupcount}
}

% Muokkaa description-ympäristöä vaatimusten esittämistä varten
\renewcommand{\descriptionlabel}{
	\hspace{\labelsep}
	\stepcounter{reqcount}
	\arabic{chapter}.\arabic{groupcount}.\arabic{reqcount}
}

% Komennot vaatimusten tila- ja prioriteettikuvakkeita varten
\newcommand{\prioicon}[1]{\includegraphics[width=1.4em]{images/prio#1.png}}
\newcommand{\progressicon}[1]{\includegraphics[width=1.4em]{images/progress#1.png}}

% Tekee uuden vaatimuksen description-ympäristössä. Ensimmäinen parametri kertoo
% vaatimuksen prioriteetin ja toinen tilan. Molemmat ovat lukuja väliltä 1 - 5.
\newcommand{\req}[2]{
	\item[\prioicon{#1}\progressicon{#2}]
}

\newcommand{\TARK}{\textbf{(tarkennettava)}}


%---------------------------------------------
% Vaatimusten prioriteetit ja tilat
%---------------------------------------------
\chapter{Vaatimusten prioriteetit ja tilat}\label{chp:priotilat}

Luvuissa \ref{chp:vaatimukset} ja \ref{chp:rajoitteet} on lueteltu kehitettävän sovelluksen vaatimukset.
Vaatimukset on priorisoitu asteikolla 1--5 seuraavasti:
\begin{list}{}
\item \prioicon{1} Pakollinen
\item \prioicon{2} Tärkeä
\item \prioicon{3} Mahdollinen
\item \prioicon{4} Idea
\item \prioicon{5} Ei toteuteta
\end{list}

Vaatimusten tilat esitetään seuraavasti:
\begin{list}{}
\item \progressicon{5} Hyväksytty
\item \progressicon{4} Testattu
\item \progressicon{3} Toteutettu
\item \progressicon{2} Osittain toteutettu
\item \progressicon{1} Toteuttamatta
\end{list}


%---------------------------------------------
% Vaatimukset
%---------------------------------------------
\chapter{Toiminnalliset vaatimukset}\label{chp:vaatimukset}

Luvussa kuvataan kehitettävän järjestelmän toiminnalliset vaatimukset. Nämä on jaettu eri alalukuihin ohjelman eri
osien ja käyttäjien mukaan.

\section{Käyttäjän toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{2} Käyttäjä pystyy kirjautumaan järjestelmään käyttäen JYU-tunnuksia.
\req{3}{1} Käyttäjä näkee kalenterinäkymässä omat Korppi-kalenterin tapahtumansa.
\req{1}{2} Käyttäjä näkee järjestelmän etusivulla laboratoriota koskevat ilmoitukset.
\end{description}


\section{Opiskelijan toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Käyttäjä pystyy näkemään valitsemaansa kurssiin liittyvien töiden varattavissa olevia laboratoriovuoroja kalenterinäkymässä.
\req{1}{1} Käyttäjä pystyy varaamaan mittausvuoron valitulta laboratoriovuorolta.
\req{1}{1} Käyttäjä ei pysty varaamaan mittausvuoroa, jos vuoron alkuun ei ole tarpeeksi aikaa.
\req{1}{1} Käyttäjä ei pysty varaamaan useampia mittausvuoroja samalta laboratoriovuorolta.
\req{1}{1} Käyttäjä ei saa olla ilmoittautuneena useammalle tulevalle mittausvuorolle, jotka liittyvät samaan työhön.
\req{1}{1} Käyttäjän yhdenaikaisten tulevien vuorojen varausten määrä on rajoitettu.
\req{1}{1} Käyttäjä näkee kalenterinäkymästä sekä menneet että tulevat vuorot, joille on ilmoittautunut.
\req{1}{2} Käyttäjä näkee listanäkymästä sekä menneet että tulevat vuorot, joille on ilmoittautunut.
\req{1}{1} Käyttäjä pystyy perumaan ilmoittautumisensa vuorolle, jolloin varattua mittausvuoroa ei enää näytetä kalenterissa.
\req{2}{1} Vuorolle ilmoittautumisen perumisella on takaraja, jonka jälkeen ilmoittautumista ei voida perua.
\end{description}


\section{Mittausryhmän toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{3}{1} Käyttäjä pystyy luomaan itselleen mittausryhmän.
\req{3}{1} Käyttäjä pystyy lisäämään omaan mittausryhmäänsä toisia käyttäjiä jäseniksi.
\req{3}{1} Käyttäjä näkee mittausryhmät, joihin hän kuuluu.
\req{3}{1} Mittausryhmän jäsen pystyy poistumaan ryhmästä.
\req{3}{1} Mittausryhmän luoja pystyy poistamaan ryhmän.
\req{3}{1} Mittausryhmän jäsen pystyy varaamaan vuoron mittausryhmälle, jos vuoron mittaustyö voidaan suorittaa kyseisellä ryhmällä.
\req{3}{1} Mittausryhmän jäsen pystyy perumaan mittausryhmän vuoron.
\end{description}


\section{Ohjaajan toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Käyttäjä pystyy näkemään ohjaamalleen vuorolle osallistuvien henkilöiden listauksen.
\req{2}{1} Käyttäjä pystyy kirjaamaan järjestelmään, jos laboratoriovuorolle ilmoittautunut henkilö ei ole saapunut.
\req{2}{1} Käyttäjä pystyy näkemään tulevat ohjausvuoronsa kalenterinäkymässä.
\req{2}{1} Käyttäjä pystyy näkemään tulevat ohjausvuoronsa listanäkymässä.
\req{2}{1} Käyttäjä pystyy näkemään toisten ohjaajien ohjaamat laboratoriovuorot kalenterinäkymässä.
\req{2}{1} Käyttäjä pystyy näkemään toisten ohjaajien ohjaamat laboratoriovuorot listanäkymässä.
%\req{4}{1} Käyttäjä pystyy ehdottamaan ohjausvuorojen vaihtoa toisen ohjaajan kanssa, jos ohjattavien vuorojen opintotaso on sama.
%\req{4}{1} Käyttäjä näkee ohjausvuorojen vaihtoehdotuksen etusivun ilmoitustaululla.
%\req{4}{1} Käyttäjä pystyy hyväksymään tai hylkäämään ehdotetun ohjausvuorojen vaihdon.
%\req{4}{1} Käyttäjä saa sähköpostilla linkin, jonka kautta hän pystyy hyväksymään tai hylkäämään ehdotetun ohjausvuorojen vaihdon.
\end{description}


\section{Pääkäyttäjän toiminnalliset vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{2}{1} Käyttäjä pystyy lisäämään ilmoituksia järjestelmän etusivun ilmoitustaululle.
\req{4}{1} Käyttäjä pystyy saamaan tilastoja järjestelmästä ja sen käyttäjistä. \TARK
\end{description}


\section{Laboratoriovuorojen hallinnan toiminnalliset vaatimukset}

Vain pääkäyttäjä pystyy suorittamaan seuraavia toimenpiteitä järjestelmässä.

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Käyttäjä pystyy lisäämään uuden laboratoriovuoron, jolle hän asettaa
\begin{itemize}
	\item aloitus- ja lopetusajan,
	\item opintotason,
	\item ohjaajan/ohjaajat ja
	\item mittausvuorovarauksien maksimimäärän.
\end{itemize}
\req{1}{1} Käyttäjä pystyy perumaan laboratoriovuoron.
\req{1}{1} Käyttäjä pystyy vaihtamaan laboratoriovuoron ohjaajan.
\req{1}{1} Käyttäjä näkee listanäkymässä kaikki tai vaihtoehtoisesti vain tulevat vuorot, joita järjestelmässä on.
\end{description}


\section{Laboratoriotöiden hallinnan toiminnalliset vaatimukset}

Vain pääkäyttäjä pystyy suorittamaan seuraavia toimenpiteitä järjestelmässä.

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Käyttäjä pystyy lisäämään uuden laboratoriotyön, johon liittyy seuraavat tiedot:
\begin{itemize}
	\item nimi
	\item kuvauksen (ei pakollinen tieto)
	\item opintotaso
	\item kurssi, johon työ liittyy, tai muu ryhmittelyperuste.
\end{itemize}
\req{1}{1} Käyttäjä pystyy poistamaan laboratoriotöitä.
\req{1}{1} Käyttäjä pystyy lisäämään ja poistamaan laboratoriotyön vaatimia resursseja.
\req{2}{1} Käyttäjä pystyy lisäämään uuden resurssin, johon liittyy resurssin nimi, kuvaus ja lukumäärä.
\req{2}{1} Käyttäjä pystyy poistamaan resurssin.
\req{2}{1} Käyttäjä pystyy muuttamaan resurssien lukumääriä.
\req{2}{1} Käyttäjä pystyy muuttamaan resurssien tilaa. Tila voi olla \emph{käytettävissä}, \emph{rikki} tai \emph{pois käytöstä}.
\end{description}


\section{Käyttäjäroolien hallinnan toiminnalliset vaatimukset}

Vain pääkäyttäjä pystyy suorittamaan seuraavia toimenpiteitä järjestelmässä.

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{2}{1} Käyttäjä pystyy lisäämään käyttäjille uusia rooleja.
\req{2}{1} Käyttäjä pystyy poistamaan käyttäjiltä rooleja.
\req{4}{1} Käyttäjä pystyy asettamaan takarajan, jonka jälkeen käyttäjälle lisätty rooli poistuu.
\end{description}

\section{Käyttöliittymän vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{2} Käyttöliittymän kieli on vaihdettavissa.
\req{1}{2} Käyttöliittymän kielivaihtoehtoina ovat vähintään suomi ja englanti.
\req{2}{2} Etusivulla on ilmoitustaulu oppilaslaboratorioon liittyvää tiedottamista varten.
\req{2}{1} Käyttöliittymä skaalautuu opiskelijan toiminnallisuuksien osalta mobiililaitteille.
\req{3}{1} Käyttöliittymä skaalautuu ohjaajan ja pääkäyttäjän toiminnallisuuksien osalta mobiililaitteille.
\end{description}


\section{Kalenterinäkymän vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{2} Kalenterinäkymässä tiedot näytetään viikkokalenterimuodossa.
\req{1}{1} Kalenterin eri tapahtumilla, laboratorio- ja mittausvuoroilla on selkeä väriteema.
\req{3}{1} Kalenterinäkymässä on viikkopalkki, jonka kautta viikkojen välillä pystyy siirtymään.
\req{3}{1} Mittausvuoron varausnäkymässä viikkopalkissa ne viikot on korostettu, joilla on valitun laboratoriotyön varattavia mittausvuoroja.
\req{3}{1} Pääkäyttäjän peruma laboratoriovuoro näkyy ilmoittautuneiden ja vuoron ohjaajien kalentereissa peruttuna vuorona.
\end{description}


\section{Tietokannan vaatimukset}

\newgroup
\begin{description}
\req{3}{2} Tietokannassa oleville käyttäjän syöttämille tai käyttäjälle näkyville merkkijonoille on mahdollista olla käännöksiä useille kielille.
\req{3}{2} Tietokannan tiedoille on käännökset kielillä suomi ja englanti.
\end{description}


\section{Järjestelmän sähköposti-ilmoitusten vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{1} Mittausvuoron varaamisesta lähetetään mittausryhmälle sähköposti-ilmoitus.
\req{1}{1} Mittausvuoron perumisesta lähetetään mittausryhmälle sähköposti-ilmoitus.
%\req{2}{1} Vuorolle ilmoittautumisesta lähetetään vuoron ohjaajalle sähköposti-ilmoitus.
%\req{2}{1} Vuorolle ilmoittautumisen perumisesta lähetetään vuoron ohjaajalle sähköposti-ilmoitus.
\req{1}{1} Jos pääkäyttäjä peruu laboratoriovuoron, lähetetään mittausvuoron varanneille sähköposti-ilmoitus asiasta.
\req{1}{1} Jos pääkäyttäjä peruu laboratoriovuoron, lähetetään vuoron ohjaajille sähköposti-ilmoitus asiasta.
%\req{3}{1} Mittausryhmän ilmoittautumisesta vuorolle lähetetään ryhmän jäsenille sähköposti-ilmoitus.
%\req{3}{1} Mittausryhmän ilmoittautumisesta vuorolle lähetetään vuoron ohjaajalle sähköposti-ilmoitus, jossa on listaus ryhmän jäsenistä.
%\req{3}{1} Mittausryhmän vuorolle ilmoittautumisen perumisesta lähetetään ryhmän jäsenille sähköposti-ilmoitus.
%\req{3}{1} Mittausryhmän vuorolle ilmoittautumisen perumisesta lähetetään vuoron ohjaajalle sähköposti-ilmoitus, jossa on listaus ryhmän jäsenistä.
\req{4}{1} Arvostelluista töistä lähetetään sähköposti-ilmoitus opiskelijalle. Imoitus sisältää arvostelun tiedot, kuten pisteytyksen.
\req{4}{1} Arvostelluista töistä lähetetään sähköposti-ilmoitus oppilaslaboratorion sähköpostilistalle
\req{4}{1} Arvostelluista töistä lähetetään sähköposti-ilmoitus arvostelun tehneelle ohjaajalle, joka vastaa kyseisestä työstä.
\end{description}


\section{Laboratoriotyön selostuksen vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
	\req{4}{1} Opiskelija pystyy tallentamaan järjestelmään tarkastettavaksi laboratoriomittauksista tehdyn selostuksen. \TARK
	\req{4}{1} Ohjaaja pystyy tarkastamaan laboratoriomittauksista tehdyn selostuksen. \TARK
	\req{4}{1} Ohjaaja pystyy arvostelemaan laboratoriomittauksista tehdyn selostuksen. \TARK
\end{description}


\chapter{Tekniset vaatimukset ja rajoitteet}\label{chp:rajoitteet}

Luvussa esitetään kehitettävän järjestelmän tekniset vaatimukset ja rajoitteet.

\setcounter{groupcount}{0}
\section{Järjestelmän rajapintojen vaatimukset}

\newgroup
\begin{description}%[leftmargin=5.4em]
\req{1}{2} Autentikointi tapahtuu OAuth2-protokollalla.
\req{1}{2} Järjestelmän vaarimat käyttäjän henkilötiedot haetaan Jyväskylän yliopiston tietojärjestelmien rajapinnan kautta.
\req{2}{1} Kalenterinäkymän tuontiin Korpista käytetään ICal-muotoa.
\req{2}{1} Kalenterinäkymän Korppiin vientiin käytetään ICal-muotoa.
\end{description}



%---------------------------------------------
% Yhteenveto
%---------------------------------------------
\chapter{Yhteenveto}\label{chp:yhteenveto}

Kepler-projekti kehittää Jyväskylän yliopiston fysiikan laitokselle laboratoriovuorojen varausjärjestelmän.
Dokumentissa esiteltiin varausjärjestelmän eri käyttäjien tarpeita, järjestelmän kokonaisrakennetta ja sen vaatimuksia.
Kehitettävän järjestelmän käyttäjiä ovat fysiikan laitoksen opiskelijat ja oppilaslaboratorion johtaja. Heillä on
järjestelmässä eri käyttäjärooleja, jotka ovat opiskelija, ohjaaja ja pääkäyttäjä. Kehitettävä järjestelmä mahdollistaa
opiskelijoille mittausvuorojen varaamisen ja pääkäyttäjälle uusien varattavien laboratoriovuorojen lisäämisen järjestelmään. Laboratoriovuorojen ohjaajat pystyvät näkemään laboratoriovuorot, joita he ohjaavat, ja vuorolle osallistujat. Lisäksi ohjaajat pystyvät näkemään vuorolla ohjattavien varaamat laboratoriotyöt etukäteen järjestelmästä.



% LÄHTEET
\begin{thebibliography}{1}
%Katso kirjoitusohjeen luku 2.3 ja 2.4.

\bibitem{projsuunnitelma}
  Joonas Konki, Anu Koskela, Mikko Kuhno, Henrik Paananen ja Atte Räty,
  "Kepler-projekti, Projektisuunnitelma",
  saatavilla PDF-muossa
  <URL: \texttt{http://sovellusprojektit.it.jyu.fi/kepler/dokumentit/\\projektisuunnitelma/kepler\_projektisuunnitelma\_1.0.0.pdf}>,
  Jyväskylän yliopisto,
  tietotekniikan laitos, 2015.
\end{thebibliography}



% LIITTEET
%\begin{appendix}

%\chapter{Ensimmäinen liite}

%Tänne tarvittaessa liitteitä.

%\end{appendix}

% Dokumentin  lopetus
\end{document}
