% !!! UTF-8 !!! Ks. Makefile jos ei kääntäminen onnistu.

% .tex-tiedosto projektin dokumenttien latomiseksi.

% Kirjoitelmaluokka, tassa kaytetaan projektien projdoc-luokkaa.
\documentclass[twoside,a4paper]{projdoc}
\usepackage[latin1]{inputenc}
\usepackage[finnish]{babel}
\usepackage[T1]{fontenc}
\usepackage[all]{hypcap}
\usepackage{graphicx}
\usepackage{verbatim} 
\usepackage{listings}
\usepackage{paralist} 

\lstset{showspaces=false, language=Python}

% Projektin nimi
\project{Verso}

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

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

% Dokumentin nimi
\title{Projektisuunnitelma}

% Tekijät: huomaa aakkosjärjestys sukunimen mukaan
\author{Tero Hänninen}{Juho Nieminen}{Marko Peltola}{Heikki Salo}
% Puhelinnumerot: tekijöitä vastaava järjestys!
\authorphones{0400-240468}{050-3831825}{041-4498622}{050-3397894}
% Sähköpostiosoitteet: tekijöitä vastaava järestys!
\authoremails{tejohann@jyu.fi}{juho.nieminen@jyu.fi}{marko.peltola@jyu.fi}{heikki.ao.salo@iki.fi}
% Etu- ja sukunimen alkukirjaimet: tekijöitä vastaava järjestys!
\authorinitials{TH}{JN}{MP}{HS}

% Tiivistelmä dokumentista: tämä ei siis ole tiivistelmä projektista,
% vaan tämän ko. dokumentin tarkoituksesta. 
\docabstract{Verso-projekti toteuttaa Jyväskylän yliopiston tietotekniikan
laitokselle lähdekoodin julkistamisjärjestelmän. Projektisuunnitelmassa
kuvataan projektin läpivientiä muun muassa projektin aikataulutuksen osalta.}

% Tiivistelmä projektista
\projectabstract{Verso-projekti toteuttaa Jyväskylän yliopiston
tietotekniikan laitokselle lähdekoodien julkaisujärjestelmän.}

% Avainsanat: dokumentin sisältöön liittyviä olennaisia asiasanoja: aakkosjärjestys, ensimmäinen sana isolla alkukirjaimella ja piste loppuun.
\keywords{aikataulu, tavoitteet, käytänteet, projektiorganisaatio,
projektisuunnitelma, riskit, työnjako, Git, versiohallinta}
%\keywords{aikataulu, tavoitteet}

% 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{9cm}|p{1.5cm}|}
\hline
\textbf{Versio} & \textbf{Päivämäärä} & \textbf{Muutokset} & \textbf{Tekijät} \\
\hline \hline
0.1.0    &  22.2.2010  & Dokumentin pohja luotu. & HS \\ \hline
0.1.1    &  24.2.2010  & Laadittu tavoitteita, taustaa, käytänteitä, riskejä ja prosessimallia kuvaavat luvut. & HS \\ \hline
0.2.0    &  8.3.2010   & Laadittu projektiorganisaatiota kuvaava luku. Korjauksia Santasen kommenttien pohjalta. & HS \\ \hline
0.2.1    &  9.3.2010   & Laadittu johdantoa ja taustoja kuvaavat luvut. Korjauksia Santasen kommenttien pohjalta. & HS \\ \hline
0.3.0    &  18.3.2010  & Lisätty Trac-käytänteitä kuvaava luku. Täydennetty taustaa ja riskejä kuvaavia lukuja. Korjauksia Leena Peltomaan kommenttien perusteella. & HS \\ \hline
0.4.0    &  24.3.2010  & Paavo Nieminen lisätty tilaajaksi. Korjauksia Santasen esitysten pohjalta. & HS \\ \hline
0.5.0    &  6.4.2010   & Päivitetty taustaa kuvaavaa lukua. Korjauksia Santasen esitysten pohjalta. & HS \\ \hline
0.5.1    &  7.4.2010   & Lisätty henkilökohtaiset oppimistavoitteet. Korjattu ilmaisuja. & HS \\ \hline
0.6.0    &  8.4.2010   & Lisätty luvut lähdekoodin käytänteistä, integraatiotestauksesta sekä yhteenveto. Korjattu kirjoitusvirheitä. & HS \\ \hline
\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

\textbf{Tilaaja:}

\begin{tabular}{p{5cm}p{7cm}p{3cm}}
~~$\bullet$~~Paavo Nieminen & \texttt{paavo.j.nieminen@jyu.fi} & 040-5768507  \\
~~$\bullet$~~Tapani Tarvainen & \texttt{tt@it.jyu.fi} & 050-3130446 \\
~~$\bullet$~~Ville Tirronen & \texttt{ville.e.t.tirronen@jyu.fi} & 014-2604987 \\
~~$\bullet$~~Tero Tuovinen & \texttt{Tero.Tuovinen@jyu.fi} & 050-4413685 \\
\end{tabular}

\vspace{1truecm}
\textbf{Ohjaajat:}

\begin{tabular}{p{6cm}p{6cm}p{3cm}}
~~~$\bullet$~~Jukka-Pekka Santanen & \texttt{santanen@mit.jyu.fi} & 014-2602756 \\
~~~$\bullet$~~Antti-Juhani Kaijanaho & \texttt{antkaij@jyu.fi} & 014-2602766 \\
\end{tabular}

\vspace{1truecm}
\textbf{Yhteystiedot:}

\begin{tabular}{p{4,5cm}p{9cm}}
~~~$\bullet$~~Sähköpostilistat & \hbox{\texttt{verso@korppi.jyu.fi}} \hbox{\texttt{yousource-users.group@korppi.jyu.fi}} \\
~~~$\bullet$~~Sähköpostiarkistot & \texttt{https://korppi.jyu.fi/kotka/servlet/}
\hbox{\texttt{list-archive/verso/}}
\texttt{https://korppi.jyu.fi/kotka/servlet/}
\hbox{\texttt{list-archive/yousource-users.group/}} \\

~~~$\bullet$~~Työhuone & AgC 222.2, puh. 014-2604963.
\end{tabular}

%----------------------------------------------------------------------------
% \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}
% Mielellään korkeintaan yksi sivu.

Verso-projekti on Jyväskylän yliopiston tietotekniikan laitoksella keväällä 2010
toteutettava sovellusprojekti. Projekti määrittelee, suunnittelee ja toteuttaa
Jyväskylän yliopiston tietotekniikan laitokselle prototyypin lähdekoodin
julkistamisjärjestelmästä.

Yliopistolla ei tällä hetkellä ole käytössä yhtenäistä järjestelmää lähdekoodien
jakamista tai julkistamistamista varten. Jokainen lähdekoodia tuottava tutkimusryhmä
joutuu kehittämään omat käytänteensä lähdekoodin kanssa toimimiseen.

Lähdekoodin julkistamista varten Verso-projekti kehittää WWW-sovelluksen, jolla
käyttäjät voivat luoda tietovarastoja ja julkistaa lähdekoodeja. Tietovarastoja
voi ylläpitää käyttäen hajautetun versiohallinnan työkaluja.

Verso-projektin projektisuunnitelmassa kuvataan läpivientiä, tehtäviä, aikataulua,
prosessimallia, käytänteitä, työnjakoa, resursseja ja riskejä. Dokumentti on
tarkoitettu projektiryhmälle, tilaajan edustajille ja projektin ohjaajille.
Projektissa toteutettavan prototyypin ominaisuusvaatimukset on määritelty
erilliseen Trac-järjestelmään.

Luvussa~\ref{termit} kuvataan projektiin liittyviä termejä. Luvussa
~\ref{taustaa} tarkastellaan projektin taustaa. Luku~\ref{tavoitteet}
esittelee projektille asetetut tavoitteet ja tulokset. Luvussa
~\ref{organisaatio} esitellään projektiorganisaatio ja muita projektin
käytössä olevia resursseja. Luku~\ref{kaytanteet} määrittelee projektin
käytänteet. Luku~\ref{kaytanteettrac} määrittelee projektissa käytettävät
Trac-käytänteet. Luku~\ref{tehtavat} kuvaa suunniteltuja tehtäviä ja
työnjakoa. Luku~\ref{prosessimalli} määrittelee projektin prosessimallin
ja aikataulun. Riskejä on käsitelty luvussa~\ref{riskit}.

\chapter{Termit} \label{termit}

Dokumentissa esiintyvät aihealueen termit ovat seuraavat:

%Dokumentin \textbf{aihealueen termejä} ovat seuraavat:
\begin{Ventry}{Hajautettu versiohallinta}
\item[Git] on hajautetun versiohallinnan ohjelmisto.
\item[Gitorious] on WWW-sovellus Git-koodivarastojen selaamiseen ja hallintaan.
\item[Hajautettu versiohallinta] tarkoittaa ilman keskustietovarastoa tehtävää versiohallintaa.
\item[Julkistaminen] tarkoittaa materiaalien asettamista julkisesti saataville.
\item[Koodivarasto] on versioitu lähdekoodin tallennuspaikka (engl. \textit{repository}).
\item[Lokaali koodivarasto] on paikallinen, vain käyttäjän tietokoneella sijaitseva koodivarasto.
\item[Metatiedostot] ovat varsinaista sisältöä kuvailevaa tiedostoihin tallennettua lisätietoa.
\item[Palveluprosessi] tietyn palvelun tarjoava, taustalla suoritettava ohjelma (engl. \textit{daemon}).
\item[Projekti] on YouSource-järjestelmässä käyttäjän luoma sisältökokonaisuus, jolla voi olla monia koodivarastoja.
\end{Ventry}

%Dokumentissa esiintyviä \textbf{teknisiä termejä} ovat seuraavat:
%\begin{Ventry}{Sulautettu järjestelmä}
%\end{Ventry}


\chapter{Taustaa} \label{taustaa}

Luvussa käsitellään Verso-projektin taustaa.

\section{Taustalla olevat ongelmat ja tarpeet}

Jyväskylän yliopiston alaisuudessa toimii monenlaisia tutkimusryhmiä,
joissa tuotetaan lähdekoodia. Yliopistolla ei ole yhtenäisiä toimintatapoja
tai järjestelmiä lähdekoodin säilyttämiseen, mistä seuraa monenlaisia
ongelmia.

Hajanaisesti tallennettujen lähdekoodien takia tieto lähdekoodista
ei leviä välttämättä edes kehityksen aikana eri ryhmien välillä, mikä johtaa
mahdollisesti päällekkäisen työn tekemiseen. Työntekijän lähtiessä talosta hänen
yksin tuottamansa lähdekoodi käytännössä menetetään~\cite{lukemistoa}.

Osa tutkimusryhmistä ei käytä ollenkaan versiohallintaa, ja osa vain
paikallisesti. Ilman yhteisesti saatavissa olevaa lähdekoodin tallennuspaikkaa
itse lähdekoodin jakaminen eri tutkijoiden kesken vaatii jatkuvaa soveltamista,
ja kätevin ratkaisu voi lopulta olla lähdekoodin version siirtäminen muistitikulla
tai sähköpostilla~\cite{poytakirja1}.

\section{Git}

Git-ohjelmisto on Linus Torvaldsin kehittämä versiohallintaohjemisto.
Git kehitettiin alun perin Linux-ytimen kehittämistä varten ja se sopii
käytettäväksi kaikenkokoisten tietovarastojen kanssa. Git-valittiin
Verso-projektiin, koska se oli projektiorganisaatiolle tutuin
hajautetun versiohallinnan järjestelmä. 

\section{Gitorious}

Gitorious on sekä palvelu että avoimen lähdekoodin sovellus.
Internet-palvelu\\ \texttt{http://gitorious.org} tarjoaa tilaa ja
työkaluja avoimen lähdekoodin projekteille, jotka käyttävät
Git-versio\-hal\-lintaa. Gitorious-palvelussa
käytettävä Gitorious-sovellus käyttää AGPL-lisenssiä, joten sovelluksen
lähdekoodi on vapaasti käytettävissä ja muokattavissa omaan käyttöön,
kunhan muokkaukset ovat vapaasti saatavissa. ~\cite{gitoriousabout}

Wikipedian~\cite{gitoriouswiki} mukaan Gitoriousta käyttää moni suuri
avoimen lähdekoodin projekti, kuten Qt, Amarok, Maemo, Amarok ja
jatkossa koko KDE. Sovelluksen lähdekoodi on saatavilla
Gitorious-palvelussa. Gitoriousta kehittää norjalainen Shortcut AS.

Projektiryhmä vertaili erilaisia versiohallinnan tukijärjestelmiä
käytettäväksi sovelluksen alustana~\cite{alustavertailu}. Alustoista
valittiin Gitorious, koska se tarjosi vertailussa eniten tavoiteltuja
ominaisuuksia ja sen kehitys nähtiin aktiiviseksi.

Vaihtoehtona oli myös olla käyttämättä valmista sovellusta alustana
ja kehittää WWW-so\-vel\-lus käyttäen pohjalla WWW-ohjelmistokehystä.
Projektiryhmä tutustui alustavasti Django, TurboGears ja Ruby on Rails
 -ohjelmistokehyksiin. WWW-sovel\-lus\-ke\-hyk\-set olivat projektiryhmälle
pääosin vieraita ja ryhmä katsoi, että Ruby on Railsiin pohjautuvan 
Gitorious-järjestelmän opettelussa ja kehittämisessä ei ole suurempi
vaiva kuin täysin kehityksen aloittamisessa täysin uudella
ohjelmistokehyksellä.





\chapter{Tavoitteet} \label{tavoitteet}

Luvussa kuvataan projektin tavoitteita sekä oppimisen että kehitettävän
sovelluksen kannalta.

\section{Kehitettävä sovellus}

Projektiryhmä tuottaa prototyypin lähdekoodien julkistamisjärjestelmästä.

Projektissa toteutettavan prototyypin ominaisuusvaatimukset on määritelty
erilliseen Trac-järjestelmään ~\cite{trac}

\section{Tulokset}

Sovelluksen ohella projektiryhmä toteuttaa seuraavat tulokset:

\begin{Ventry}{Projektisuunnitelma}
\item[Asennusohje] sisältää sovelluksen asennusohjeet.
\item[Esittelymateriaali] sisältävät väli- ja loppuesittelyn materiaalit.
\item[Lähdekoodi] sisältää tuotetun lähdekoodin kommentteineen.
\item[Projektiraportti] kuvaa projektin läpiviennin ja asetettujen 
  tavoitteiden saavuttamista.
\item[Projektisuunnitelma]  kuvaa projektin tavoitteita, tehtäviä,
  aikataulua, yleisiä käytäntöjä ja riskien hallintaa.
\item[Sovellusraportti] kuvaa toteutetun sovelluksen osat ja toiminnot
  sekä jatkokehitysideat.
\item[Vaatimusmäärittely] kuvaa sovelluksen käyttäjille tarjoamia
  toimintoja.
\end{Ventry}

Edellä mainittujen dokumenttien lisäksi ryhmä laatii seuraavat tulokset:

\begin{Ventry}{Palaverien dokumentit}
\item[Ajankäyttöraportti] sisältää ryhmän jäsenten kirjaamat työtunnit.
\item[Itsearvioinnit]  sisältävät ryhmän jäsenten arvioinnit omasta
  panoksesta, onnistumisesta ja oppimisesta.
\item[Palaverien dokumentit] sisältävät palaverien esityslistat ja
  pöytäkirjat.
\item[Sähköpostiarkistot] sisältävät kaikki projektin sähköpostilistalla
  käydyt keskustelut.
\end{Ventry}

\newpage

\section{Oppimistavoitteet}

Ryhmän jäsenet saavat projektin kuluessa kokemusta projektin suunnittelusta
ja läpiviennistä sekä tarvittavien dokumenttien laatimisesta.
Jäsenet oppivat myös kokoustekniikkaa toimimalla projektipalavereissa
puheenjohtajana ja sihteerinä.

Projektiryhmä oppii käyttämään projektissa suuressa osassa olevaa
Git-versiohallintaa. Ryhmän jäsenet saavat kokemusta versiohallintaan
liittyvistä teknisistä järjestelyistä, mutta myös Gitin käyttöön
liittyvistä käytänteistä avoimen lähdekoodin ohjelmistoprojektissa.

Projektin ohjelmoinnin aikana jäsenet käyttävät lisäksi uusia uusia
ohjelmointikieliä. Ohjelmoinnissa käytetty Ruby-kieli ja Ruby on Rails
-sovelluskehys ovat koko projektiryhmälle ennalta vieraita, mutta
projektiryhmällä on ennen projektin aloittamista ollut kiinnostusta
perehtyä siihen.

Projektin vaatimuksia, kehitysideoita sekä löydettyjä virheitä
ylläpidetään Trac-projektinhallintasovelluksessa. Projektin aikana
projektiryhmä oppii perustaidot yleisen projektinhallintatyökalun
käytöstä.
 
Projektin aikana ryhmän jäsenet oppivat käyttämään
Linux-työpöytäympäristöä sekä esikäyttöä varten olevaa
Linux-virtuaalipalvelinympäristöä. Projektiryhmä oppii ylläpitämään
virtuaalipalvelinta sovellukseen liittyvien palveluiden osalta itse.
Ryhmä oppii myös toimimaan tietotekniikan laitoksen
ATK-käytänteiden kanssa halutessaan muutoksia työpöytäkoneille
esimerkiksi asennettavien sovellusten osalta.

Projektiryhmän jäsenillä on lisäksi henkilökohtaisia oppimistavoitteita:
\begin{itemize}
  \item Heikki haluaa oppia projektinhallintaa, projektin aikataulutusta
        sekä tilaajan kanssa toimimista.
  \item Juho haluaa oppia projektinhallintaa, ohjelmointia ja
        vastaanottamaan palautetta.
  \item Marko haluaa oppia ohjelmointia ja versiohallinnan käyttöä.
  \item Tero haluaa oppia terminaaliympäristön kanssa toimimista
        ja ohjelmointia.
\end{itemize}





\chapter{Organisaatio ja resurssit} \label{organisaatio}

Luvussa esitellään projektiorganisaatioon kuuluvat henkilöt, ryhmän
käytössä olevat tilat, laitteet ja ohjelmistot sekä jäsenille
järjestettävät perehdytykset.

\section{Projektiorganisaatio} \label{projektiorganisaatio}

Verso-projektiryhmään kuuluu neljä tietotekniikan opiskelijaa. Tero
Hänninen on 3. vuoden ja Marko Peltola 7. vuoden tietotekniikan
opiskelija. Juho Nieminen ja Heikki Salo ovat 4. vuoden tietotekniikan
opiskelijoita.

Tilaajana olevan tietotekniikan laitoksen edustajina toimivat
Paavo Nieminen, Tapani Tarvainen, Ville Tirronen ja Tero Tuovinen, joista
Ville Tirrosella on ylin päätösvalta.
Ryhmän vastaavana ohjaajana toimii Jukka-Pekka Santanen ja teknisenä
ohjaajana toimii Antti-Juhani Kaijanaho.

Projektiryhmän työkoneiden ohjelmistojen ja ylläpidon hoitaa 
Jyväskylän yliopiston ATK-lähituki. Projektiryhmän käytössä olevan
virtuaalipalvelimen ylläpidosta vastaa Harri Tuomi.

Lisäksi sovellusprojektikurssin aikana projektiryhmää auttaa
kirjoitusviestinnän opettaja Leena Peltomaa sekä
puheviestinnän opettaja Minna Koljonen.

\section{Projektin tilat, laitteet ja ohjelmistot}

Projektiryhmän huone AgC222.2 sijaitsee Agoran C-siivessä
toisessa kerroksessa sovellusprojektien tiloissa. Huoneen puhelinnumero
on 014-2604963.

Ryhmän käytössä on neljä tietokonetta, joista kolmessa on käyttöjärjestelmänä
Linux Fedora Core ja yhdessä Windows XP, jolla kirjataan ryhmän jäsenten työtunnit.
Projektiryhmällä on lisäksi verkon kautta käyttöoikeus myös erilliseen
testipalvelimeen.

\section{Ohjelmointi- ja dokumentointityökalut}

Ryhmän käytössä oleviin Fedora Core -tietokoneisiin on ATK-lähituen toimesta
asennettu palvelinohjelmistoina Apache, Git, MySQL sekä Ruby ja Ruby on Rails -ohjelmakirjastot,
jotka mahdollistavat Gitorious-sovelluksen kehittämisen. Windows XP
-tietokoneeeseen on ATK-tuelta pyydetty TortoiseGit-
ohjelmisto versiohallintaan ja Microsoft Office 2003 ajankäytön
merkitsemistä varten.

Työmäärien kirjaamiseen on käytössä Petri Heinosen kehittämä
Excel-pohjainen ajankäytönseurantasovellus.

Projektiorganisaation käytössä on myös Trac-sovellus, jota käytetään
sovelluksen vaatimusten ja projektin tehtävien hallintaan. Traciin
liittyvät käytänteet on kuvattu luvussa~\ref{kaytanteettrac}.


\section{Luennot ja perehdytykset}

Ohjelmointikielenä on Ruby ja alustana Ruby on Rails, jotka eivät ole
ryhmän jäsenille ennestään tuttuja. Ryhmä tutkii kirjallisuutta verkosta
ja tilaa tarvittaessa Santasen kautta käyttöönsä käyttökelpoiset kirjat.

Projektissa vaaditaan hyvää tuntemusta Git-versiohallinnasta,
joka ei ollut ryhmäläisille entuudestaan tuttu. Tekninen ohjaaja
Antti-Juhani Kaijanaho toimii asiantuntijana versiohallintaan liittyvissä
kysymyksissä ja järjestää ryhmälle ongelmalähtöistä perehdytystä.

Projektissa toteutettavan prototyypin ohjelmointiin tarvitaan tuntemusta
Rubystä, Ruby on Railsista sekä sovelluksen pohjana toimivan Gitoriouksen
toiminnasta. Projektiryhmä on perehtynyt Rubyyn ja Ruby on Railsiin
omatoimisesti tutkimalla Internetissä saatavilla olevia ilmaisia oppaita.
Gitoriouksen asentamiseen ja toimintaan projektiryhmä on tutustunut
lähdekoodeihin perehtymällä sekä tarvittaessa pyytämällä Gitoriouksen
kehitysyhteisöltä sen IRC-kanavalla apua.

Jukka-Pekka Santanen piti luennon projektin hallinnasta ja läpiviennistä.
Luennolla käsiteltiin myös ryhmän jäsenten keskinäistä viestintää.

Oheiskurssilla käytäviin asioihin kuuluvat
\begin{compactenum}
\item[-]{kokous- ja neuvottelukäytänteet}
\item[-]{esittely ja esiintyminen}
\item[-]{kirjoitusviestintä}
\item[-]{projektin johtaminen ja hallinta}
\item[-]{käytettävyyden luennot ja ryhmätyöt}
\item[-]{tekijänoikeus ja sopimukset}
\item[-]{versiohallinta sekä}
\item[-]{kaksi väliesittelyä.}
\end{compactenum}







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

Luvussa kuvataan projektissa käytettävät käytänteet.

\section{Tiedotus}

Projektiryhmän tiedotuksesta vastaa käsillä olevasta asiasta vastaava
henkilö tai projektipäällikkö.

Projektiryhmän jäsenten, tilaajan ja ohjaajien välinen tiedotus hoidetaan
sähköpostilla käyttämällä sähköpostilistaa \texttt{verso@korppi.jyu.fi}.
Sähköpostilista on pääasiallinen yhteydenpitoväline, mutta kiireellisistä
asioista voidaan myös soittaa.



Projektiryhmän jäsenten välinen tiedotus hoidetaan sähköpostilla käyttämällä
ryhmän jäsenten omaa sähköpostilistaa ja IRC-kanavaa.

\section{Palaverit}

Projektipalavereja pidetään 1--2 viikon välein. Projektipalavereihin
osallistuvat ryhmän jäsenet, ohjaajat ja tilaajan edustajat.
Ensimmäisen palaverin~\cite{poytakirja1} mukaisesti palaveri
on päätösvaltainen, kun projektiryhmästä ja tilaajista on paikalla
vähintään yksi edustaja sekä ohjaajista paikalla on vastaava ohjaaja
Santanen. Tilaaja voi nimittää
tarvittaessa myös ulkopuolisen edustajan. Palaveri on laillinen, kun
palaverikutsu ja esityslista on lähetetty vähintään vuorokautta ennen
palaveria.

Palaverin alussa projektiryhmä ehdottaa keskuudestaan puheenjohtajaa
ja sihteeriä. Projektiryhmä kierrättää puheenjohtajan ja
sihteerin rooleja siten, että kukin toimisi projektin aikana vähintään
kaksi kertaa puheenjohtajana ja sihteerinä. Palaverissa käydään läpi
kokouskutsussa ollut esitylista, johon kokoukseen osallistujat voivat
esittää palaverissa tarvittaessa lisäyksiä esityslistaa hyväksyttäessä.

Palaverissa edellisen palaverin puheenjohtaja käy läpi etukäteen
alustavasti hyväksytyn edellisen palaverin pöytäkirjan. Palaverissa
edellisen palaverin pöytäkirja voidaan hyväksyä tai se voidaan hyväksyä
muutoksin. Palaverin jälkeen sihteeri laatii palaverista pöytäkirjan,
josta hän pyytää kommentit ensin ryhmäläisiltä, minkä jälkeen sihteeri
lähettää pöytäkirjan kirjoitusviestinnän opettajalle ja
projektiorganisaatiolle.

\section{Lähdekoodin käytänteet}

Ohjelmoidessa noudatetaan ensimmäisen palaverin~\cite{poytakirja1} mukaisesti
Ruby-kielen~\cite{gitoriouscodingstyle}
Ruby on Rails -ohjelmistokehyksen ohjelmointityyliä sekä Gitorious-
ohjelmiston ohjelmointikäytänteitä~\cite{gitoriouscodingstyle}.
Ohjelmakomponentit pyritään pitämään mahdollisimman yhteensopivana
Gitorious-pääprojektin kanssa. Tavoitteena on tuottaa mahdollisimman
monesta Gitorioukseen projektia varten tehdystä muokkauksesta
muokkauspyyntö (engl. \textit{merge request}) Gitorious-pääprojektiin.

\begin{figure}[h!]
  \centering
  \begin{verbatim}
class Repository < ActiveRecord::Base
  include ActiveMessaging::MessageSender
  ...
  
  def can_view?(a_user)
    if REPO_VIEWABLE_EVERYONE
      return true
    else
      return viewer?(a_user)
    end
  end
  ...
  
end
  \end{verbatim}
  \caption{Lähdekoodiesimerkki.}
\end{figure}

\section{Versiohallinnan käytänteet} \label{versiohallintakaytanteet}

Sovellukseen liittyvä lähdekoodi tallennetaan Git-versiohallintaan.
Sovellusta kehitetään omaan tietovarastoonsa ja projektin dokumentteja,
kuten muistioita, palaverien pöytäkirjoja, väliesittelymateriaaleja
omaan tietovarastoonsa. Väliaikaishaaroja (engl. \textit{topic branch})
käytetään sekä projektitietovarastossa että etenkin sovelluksen
tietovarastossa. Väliaikaishaara sisältää esimerkiksi tiettyyn ominaisuuteen
tai asiakokonaisuuteen (kuten tiettyyn pöytäkirjaan) liittyvät päivitykset.

Sovelluksen osalta haarojen käyttäminen on tärkeää, koska sovelluksen
päähaaraara on yhtä aikaa julkaisuhaara esikäyttöä varten. Epävakaa
ohjelmakoodi on pidettävä omissa haaroissaan sen koekäyttöön valmistumiseen
asti. Kun sovellukseen liittyvän ominaisuus tulee valmiiksi, sen haara
yhdistetään päähaaraan (engl. \textit{master branch}) ja ominaisuuden
historian sisältävä haara jätetään versiohallintaan. Ominaisuuksien
tarjoaminen Gitorious-sovellukselle on helpompaa, kun projektissa
tuotettavien ominaisuuksien haarat ovat lähdekoodeja tarjotessa tallessa.

\section{Dokumentoinnin käytänteet}

Pääsääntönä on, että sovellukseen liittyvät dokumentit kirjoitetaan
englanniksi ja projektiin liittyvät dokumentit suomeksi.
Englanninkielisissä dokumenteissa käytetään amerikanenglantia.



\section{Julkistettujen dokumenttitiedostojen versionumerointi}

Dokumenteissa käytetään kolmitasoista versionumerointia ensimmäisen
palaverin~\cite{poytakirja1} mukaisesti.
Ensimmäinen versio on 0.1. Ryhmän sisäiseen käyttöön tarkoitettuja
versionumerot kasvatetaan 0.0.1:llä, ohjaajalle ja tilaajalle
versionumerot kasvatetaan 0.1:llä. Dokumentin ensimmäinen
hyväksytty versio on 1.0.0.

Sovelluksessa käytetään käyttöön innostavaa versionumerointia,
joten sovelluksen ensimmäinen projektiryhmän ulkopuolisille testaajille
julkinen versio on 1.0.

\section{Esikäyttäjien hyödyntäminen}

Projektin aikana sovellusta päästetään käyttämään kymmenkunta esikäyttäjää,
joilta pyydetään palautetta sovelluksen ominaisuuksista ja
käytettävyydestä. Esikäyttäjien käyttämisestä on laadittu erillinen
dokumentti ``Suunnitelma esikäyttäjien hyödyntämisestä''
\cite{testaajienkayttosuunnitelma}.









\chapter{Trac-käytänteet} \label{kaytanteettrac}

Projektissa käytetään vaatimusmäärittelyn hallintaan
Trac-ohjelmistoa. Koska erillistä vikojenseurantaohjelmistoa
(engl. \textit{bugtracker}) ei käytetä, projektiryhmän ja tilaajan
välisen tehtävänhallinnan lisäksi Traciin kirjataan myös käyttäjien
kautta tulevat vikailmoitukset ja toiveet.

\section{Luku- ja muokkausoikeudet}

Verso-projektin Tracin selaamiseen on järjestetty avoin pääsy, mutta
muokkaamista varten käyttäjän pitää kirjautua sisään. Muokkausoikeus
on kaikilla luvussa~\ref{projektiorganisaatio} mainituilla
projektiorganisaation jäsenillä.

Avoin pääsy antaa mahdollisuuden selata tehtäviä myös esikäyttäjille
ja muille projektista kiinnostuneille. Projektiorganisaation
ulkopuolisen tahon kanssa yhteyttä pitäessä voidaan siis viitata
suoraan Tracin tiketteihin.

\section{Traciin kirjattavat tehtävät}

Tracia ei käytetä koko Verso-projektin tehtävien hallintaan, vaan
ainoastaan siinä tuotettavan YouSource-sovelluksen tehtävien osalta.
Pääsääntönä on, että mikäli tehtävä tai idea liittyy sovellukseen,
sen voi kirjata Traciin.

\section{Kirjoitusasusta ja otsikoista}

Kuten muissakin sovellukseen liittyvissä dokumenteissa, Tracissa
käytetään kirjauskielenä englantia.

Tiketin tiivistelmäksi (engl. \textit{summary}) tiketin lisääjä kirjaa
mahdollisimman yksiselitteisen kuvauksen, koska tiivistelmä
toimii tiketin otsikkona. Selkeän otsikon avulla tiketti löytyy
tikettilistoista ja sähköpostikansioista helpommin.

Tiketin kuvausta (engl. \textit{summary}) käytetään selvittämään 
tarkemmin tiketissä käsiteltävä asia. Kuvaukseen voi kirjata esimerkiksi
tikettiin liittyviä kehitysratkaisuja tai sovellukseen lisättäviä 
tekstejä.

Tiketin luominen on samalla pienimuotoinen keskustelunavaus tiketissä
kuvattuun tehtävään liittyen. Tiketin kommenteissa
(engl. \textit{comment}) voi kysyä tarkennuksia tehtävään liittyen,
minkä perusteella sen lisääjä voi esimerkiksi muokata tiketin kuvausta
tarkemmaksi.

Tiketin otsikko ei ole muuttumaton. Mikäli Tracista löytyy tiketti,
jonka kuvaus ei projektiorganisaation jäsenen mielestä ole
tarpeeksi selkeä, hän voi vapaasti muokata siitä selkeämmän. Muokatessa
asiasisältö ei kuitenkaan saa muuttua, ellei siitä ole erikseen
sovittu.


\section{Sähköposti ja tiketit}

Trac-tiketteihin merkitään cc-kenttään eli muutosilmoitusten vastaanottajaksi
projektiorganisaation sähköpostilista. Lisäksi, jos ilmoitus tulee
projektiorganisaation ulkopuolelta (esimerkiksi esikäyttäjiltä)
jakelulistaan lisätään ilmoittajan sähköpostiosoite.

\section{Tikettityypit}

\begin{table}[ht]
\centering
\begin{tabular}{|c|c|c|}
\hline
\label{tractiketit}
\textbf{Tikettityyppi} & \textbf{Omistaja} & \textbf{Kuvaus} \\
\hline \hline
Feature & Tilaaja & Sovellukseen hyväksytty ominaisuus. \\ \hline
Chore & Tilaaja & Projektiryhmällä teetetty muu tehtävä. \\ \hline
Wish & Kuka tahansa & Kehitysidea tai muu toive.\\ \hline
Bug & Kuka tahansa & Sovelluksesta löytynyt vika. \\ \hline
task & Projektiryhmä & Pieni kehitystehtävä. \\ \hline
\end{tabular}
\caption{Trac-tikettien tyypit.} 
\end{table}

Taulukossa~\ref{tractiketit} on kuvattu erilaiset Tracissa
käytettävät tikettityypit. Taulukon termillä omistaja tarkoitetaan
sitä tahoa, jonka kommunikointivälineeksi tikettityyppi on tarkoitettu.

Verso-projektin Traciin on järjestetty lukuoikeus kaikille, mutta
tietojen muokkaamiseen ovat oikeutettuja vain projektiorganisaatioon
kuuluvat käyttäjät. Kehitysideoita ja bugeja tulee kuitenkin
mahdollisesti myös projektiorganisaation ulkopuolelta. Omistajalla
``Kuka tahansa'' tarkoitetaan kenen tahansa lähettämää huomiota, jonka
vastaanottaja projektiorganisaatiossa tekee siitä tiketin.

\section{Prioriteetit}

\begin{table}[ht]
\centering
\begin{tabular}{|c|c|}
\hline
\label{tracprioriteetit}
\textbf{Prioriteetti} & \textbf{Kuvaus} \\
\hline \hline
Mandatory & Pakolliseksi nähtävä, toteutetaan ensimmäisten joukossa \\ \hline
Important & Tärkeä, ei pakollinen, toteutetaan ajan salliessa \\ \hline
Useful & Hyödyllinen, ei käytön kannalta tärkeä, toteutetaan ajan salliessa \\ \hline
Left out & Projektin osalta tarpeettomaksi nähty \\ \hline
-- & Toistaiseksi priorisoimaton ominaisuus. \\ \hline
\end{tabular}
\caption{Trac-tikettien prioriteetit selityksineen.} 
\end{table}

Prioriteetit (engl. \textit{priorityt}) ovat tarkoitettu käytettäväksi
Feature-tyyppisten tikettien kanssa, muiden tikettityyppien kanssa niitä
voi käyttää suuntaa antavana lisätietona. Prioriteetti ei suoraan liity 
ominaisuuden kehitetyksi tulemiseen Verso-projektissa, vaan niitä
käytetään hyödyksi, kun iteraatioihin ollaan kiinnittimässä tehtäviä.

\section{Tarkistuspisteet ja versiot}

Tarkistuspiste (engl. \textit{milestoneilla}) viitataan projektin 
kehitysprosessin vaiheisiin eli \textit{iteraatioihin}. Iteraatioiden
aikataulut on kuvattu luvussa~\ref{iteraatioajat}.

Versioilla viitataan sovelluksen julkistettuihin kehitysversioihin.
Esimerkiksi versio 1.0 on ensimmäinen julkinen esikäyttöversio.










\chapter{Tehtävät, työmäärät ja vastuualueet} \label{tehtavat}

Luvussa kuvataan projektin tehtävät ja niiden jakautuminen ryhmän
kesken. Luvussa arvioidaan myös tehtävien työtuntimäärät.

\section{Vastuualueet dokumenttien osalta}

\begin{table}[ht]
\centering
\begin{tabular}{|c|c|c|c|c|}
\hline
\label{dokuvastuu}
\textbf{Tulos} & \textbf{Kieli} & \textbf{Vastuuhenkilö} & \textbf{Tarkastettavaksi} & \textbf{Hyväksytty} \\
\hline \hline
Projektisuunnitelma & suomi & HS & & \\ \hline
Vaatimusmäärittely & englanti & JN & & \\ \hline
Projektiraportti & suomi & & & \\ \hline
Sovellusraportti & englanti & & & \\ \hline
\end{tabular}
\caption{Dokumenttien kielet ja vastuualueet.} 
\end{table}

\section{Tehtävien työmäärät ja työnjako} \label{tehtavien}

\begin{figure}[h!] \label{ganttkaavio}
  \centering
  % TODO: korjaa luvut näyttämään suunniteltua
  \includegraphics[width=6in]{ajankayttosuunnitelma}
  \caption{Jäsenten työmääräarvio}
\end{figure}




\chapter{Prosessimalli ja aikataulu} \label{prosessimalli}

Projekti toteutetaan kevätlukukaudella 2010. Sovelluksen on määrä olla
valmis esiteltäväksi julkisesti toukokouun puolessa välissä. Projektin
uusien ominaisuuksien ohjelmoinnin tulee olla valmis neljännen
iteraation päättyessä 23.4.2010.

\section{Prosessimalli}

Projekti viedään läpi käyttäen ketterää ohjelmistokehitystä.
Ohjelmistokehitys jaetaan kahden viikon mittaisiin iteraatioihin,
joihin kiinnitetään käytettävissä oleviin resursseihin nähden järkevä
määrä tehtäviä. Kiinnittämättömien Trac-tikettien, palaverikeskutelujen
ja muun yhteydenpidon perusteella projektiryhmä tekee tilaajalle
ehdotuksen seuraavan iteraation sisällöstä ja sen tehtävät hyväksytään
projektipalaverissa.

\section{Sovelluksen ominaisuuksien hyväksyminen}

Kun ominaisuus eli vaatimusmäärittelyssä Trac-tikettityyppi Feature
valmistuu, se hyväksytetään tilaajalla. Hyväksyttäminen tehdään
tavallisesti siten, että projektiryhmä järjestää ominaisuuden
nähtäville ja ilmoittaa siitä projektin sähköpostilistalla. Jos tilaaja
ei hyväksy ominaisuutta, projektiryhmä korjaa ominaisuuteen liittyvät
puutteet.

Sovelluksen osalta projekti on hyväksytty viimeiseen 5. iteraatioon
kiinnitettyjen Feature, Chore ja Bug -tyyppisten tehtävien tultua hyväksytyksi.
Viimeiseen iteraatioon ei oteta Feature-tyyppisiä tehtäviä, ellei niiden
kehitystä ole jo aloitettu.

\section{Jatkuva integraatiotestaus}

Sovellukseen tuotettavan lähdekoodin laatua testataan jatkuvasti.
Kun uutta ominaisuutta kehitetään, sen lähdekoodi sijoitetaan omaan haaraansa
(engl. \textit{topic branch}) sovelluksen lähdekoodin tietovarastossa, kuten
luvussa Versiohallinnan käytänteet~\ref{versiohallintakaytanteet} kuvataan.
Kehityksen alla olevaa ohjelmakoodia testataan pelkästään kehitystyöasemilla sen
kehityksen ajan. Ominaisuuden ohjelmoinnin valmistuttua ja sen koodin
vakauduttua se yhdistetään sovelluksen versiohallinnan päähaaraan ja esitellään
tilaajalle virtuaalipalvelimella. Epävakaata ohjelmakoodia voidaan tarvittaessa
esitellä tilaajalle myös kehitystyöasemilta.

Kun ominaisuus yhdistetään päähaaraan, se tulee projektiorganisaation
ja esikäyttäjien käytössä olevaan testisovellukseen. Uusin vakaa ohjelmakoodi
on siis projektin ajan jatkuvassa integraatiotestauksessa.

\section{Aikataulu} \label{iteraatioajat}

Projektin tehtävien aikataulutus on esitetty kuvan~\ref{ganttkaavio} Gantt-kaaviossa.

\begin{figure}[h!] \label{ganttkaavio}
  \centering
  \includegraphics[width=3.5in]{gantt-kaavio-suunnitelmaan}
  \caption{Gantt-kaavio tehtävien aikataulutuksesta}
\end{figure}

\chapter{Riskit ja niiden seuranta} \label{riskit}

Luvussa kuvataan projektissa tiedostetut riskit sekä kuvataan
toimia niiden ennakoimiseksi ja ehkäisemiseksi.

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

Riskien todennäköisyydet ja niistä seuraavat haittavaikutukset on esitetty
taulukossa~\ref{riskitaulukko}. Todennäköisyyttä ja haittavaikutusta
arvioidaan asteikolla pieni, keskinkertainen ja suuri.

\begin{center}
\begin{table}[ht]
\centering
\begin{tabular}{| p{7cm} | c | c |}
\hline
\textbf{Riski} & \textbf{Todennäköisyys} & \textbf{Haittavaikutus}\\
\hline \hline
Muutostarve kehityskoneissa & suuri & keskinkertainen \\ \hline
Tavoitteiden rajaus & keskinkertainen & suuri \\ \hline
Valitun alustan ongelmat & keskinkertainen & suuri \\ \hline
Poissaolot & keskinkertainen & pieni \\ \hline
Testipalvelimen ongelmat & keskinkertainen & keskinkertainen \\ \hline
Motivaation puute & pieni & keskinkertainen \\ \hline
\end{tabular}
\caption{Arvioidut riskit, niiden todennäköisyys ja haittavaikutus.} \label{riskitaulukko}
\end{table}
\end{center}

\newpage

\section{Muutostarve kehityskoneissa}

Projektiryhmän käytössä oleviin kehityskoneisiin on asennettu ryhmän
toistaiseksi tarvitsemat kehitystyökalut ja sovelluskirjastot.
Projektin edetessä kehitetään kuitenkin toisistaan hyvin poikkeavia
kokonaisuuksia, joihin liittyy mahdollisesti tarve uusille
asennuksille tai kehitysympäristön asetusten muutoksille.
Projektiryhmä ei itse pysty toteuttamaan tarvittavia muutoksia, joten
projektiryhmä on riippuvainen yliopiston lähituen palvelusta. Riskinä
on, että jos vastaantullut ongelma on haastava ja vaatii selvittämistä
yhdessä lähituen kanssa, sen ratkaisuun kuluu kauan. Riskiä hallitaan
ennakoimalla muutostarpeita ja pyytämällä tarvittavat muutokset
etukäteen.

\section{Tavoitteiden rajaus}

Tähän juttua siitä, että vaikka periaatteessa Gitorioukselle näyttäisi
mahdolliselta toteuttaa kaavaillut ominaisuudet, sen käytön estyminen
tekee projektista todella suuritöisen. Lisäksi, vaikka pohjaksi
saataisiin toimiva alusta, ohjelmointitekniikat ovat uusia, ja
vaatimusten toteuttamiseen saattaa liittyä ennalta tuntemattomia
rajoitteita.

\section{Valitun alustan ongelmat}

Alustaksi valittu Gitorious valittiin, koska sen käyttöönoton estämiseen
ei ollut tiedossa syytä ja se vaikutti lupaavimmaksi tavoitteiden
saavuttamisen kannalta. On mahdollista, että ilmaantuu syy, joka estää
sen käytön toistaiseksi. Esimerkiksi Gitorious-projektissa vielä
toteutumattoman tietoturvariskin ilmeneminen, joka estää sen käytön
yhdessä yliopiston autentikointimenetelmien kanssa. Tämä riski koskee
kaikkea toimimista ulkopuolisten ohjelmaosien kanssa ja tätä voi
hallita vain seuraamalla Gitorious-kehittäjälistalta ilmoitettuja vikoja
ja niiden ratkaisuja.

\section{Poissaolot}

Ryhmän jäsenille voi tulla suunniteltuja poissaoloja, kuten matkat, ja
yllättäviä, kuten sairastuminen. Jos ryhmän jäsen jää yllättäen pitkäksi
aikaa pois, muu ryhmä joutuu ratkaisemaan tehtävät ilman poisjääneen
tietämystä. Tämän riski on pieni, koska suuri osa ohjelmoinnista tehdään
pariohjelmointina ja tietämys leviää sitä kautta hyvin.

\section{Testipalvelimen ongelmat}

Testipalvelimen ongelmilla tarkoitetaan odottamattomia tilanteita,
joissa esikäytössä oleva sovellus toimii tuntemattomasta syystä väärin.

Projektissa tuotettava sovellus sisältää paljon erilaisia komponentteja,
joiden yhteistoiminnasta sovellus on riippuvainen. Jos sovelluksen jokin
osa vikaantuu ja alkaa toimia väärin, tilanteen selvittäminen on
mahdollisesti haastavaa ja aikaavievää, mikä myöhästyttää kehitystyötä.

Riskin hallitsemiseksi projektiryhmä harjoittelee erillisellä
testipalvelimella erilaisten vikatilanteiden ratkaisua. Mahdollisia
vikatilanteita pyritään myös ennakoimaan ja niissä toimimiseen
määritellään selkeät käytänteet.

\section{Motivaation puute}

Tähän juttua siitä, että jos motivaatio laskee eikä intoa sovelluksen
tekemiseen ole, alkaa sovelluksen hommat kasaantua kohti toukokuuta,
mistä ei seuraa mitään hyvää. 






\chapter{Yhteenveto}

Verso-projekti toteuttaa Jyväskylän yliopiston tietotekniikan laitokselle
lähdekoodien julkistamisjärjestelmän prototyypin. Prototyyppi kehitetään
Ruby-kielellä Ruby on Railsia käyttävän Gitorious-sovelluksen päälle.

Projektin aikana ryhmä saa kokemusta työskentelystä ohjelmistoprojektissa,
useista eri työkaluista sekä projektin hallinnasta.

Projekti alkoi 3.2.2010 ja se päättyy 22.5.2010 mennessä. Projektin
projektin läpiviennissä noudatetaan iteratiivista prosessimallia ja
käytetään 5 iteraatiota.

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

\bibitem{ajanseuranta} Petri Heinonen, Ajankäytönseurantasovellus,
saatavissa Excel-muodossa <URL: \texttt{http://appro.mit.jyu.fi/tools/ajankaytto/\\
ajankaytonseuranta.xls}>, Jyväskylän yliopisto, informaatioteknologian
tiedekunta

\bibitem{testaajienkayttosuunnitelma} Heikki Salo, ``Suunnitelma esikäyttäjien
 käyttämisestä'' <URL: \texttt{http://versotest.it.jyu.fi/verso/verso-project\\/blobs/master/project\_docs\\/suunnitelma\_esikayttajien\_kayttamisesta.txt}>.

\bibitem{poytakirja1} Juho Nieminen, ``1. palaverin pöytäkirja'', saatavissa raakatekstimuodossa <URL: \texttt{http://versotest.it.jyu.fi/verso/verso-project\\/blobs/master/project\_docs\\/palaverit/poytakirja\_1\_palaveri.txt}>.

\bibitem{poytakirja2} Juho Nieminen, ``2. palaverin pöytäkirja'' <URL: \texttt{http://versotest.it.jyu.fi/verso/verso-project\\/blobs/master/project\_docs\\/palaverit/poytakirja\_2\_palaveri.txt}>.

\bibitem{lukemistoa} Ville Tirronen, ``Alustavaa lukemistoa projektiin liittyen''.

\bibitem{gitoriousabout} ``About Gitorious'', saatavissa HTML-muodossa <URL: \texttt{http://gitorious.org/about}>.

\bibitem{gitoriouswiki} Wikipedia, ``Gitorious'', saatavissa XHTML-muodossa <URL: \texttt{http://en.wikipedia.org/wiki/Gitorious}>.

\bibitem{gitoriouscodingstyle} ``Gitorious Coding Style Guide'', saatavissa HTML-muodossa <URL: \texttt{http://gitorious.org/gitorious/pages/CodingStyleGuide}>.

\bibitem{rubycodingstyle} ``Ruby Style Guide'', saatavissa raakatekstimuodossa <URL: \texttt{http://github.com/chneukirchen/styleguide/raw/master/RUBY-STYLE}>.

\bibitem{trac} Verso-projekti, ``Verso-projektin tehtävähallinta'', saatavissa HTML-muodossa <URL: \texttt{https://trac.cc.jyu.fi/projects/verso/}>.

\bibitem{alustavertailu} ``Vertailu alustoista'', saatavissa raakatekstimuodossa <URL: \texttt{http://versotest.it.jyu.fi/verso/verso-project\\/blobs/master/project\_docs\\/vertailu\_alustoista.txt}>.

\end{thebibliography}

\end{document}
