% Esimerkki oman komennon m��ritt�misest�. Jos komentoa tarvitaan useissa
% dokumenteissa, se kannattaa mielummin laittaa asetukset.tex-tiedostoon.
\newcommand{\tiedostonimi}[1]{\texttt{#1}}
\newcommand{\termi}[1]{\textit{#1}}

\section{Johdanto}

T�m� dokumentti k�sittelee asdf -ohjelmistotuotantoryhm�n pokeripalvelimen ja siihen liittyv�n asiakasohjelman testausta. Dokumentissa pyrit��n antamaan kuva k�ytett�vist� testausmenetelmist� ja -strategioista sek� m��ritt�� testien hyv�ksymiskriteerej� ja aikataulua.

\section{Sanasto}

\begin{quote}
\begin{tabular} {| l | p{5cm} |}
\hline
Junit & Javalle suunniteltu testauskehys, jonka avulla on helppo tehd� toistettavia yksikk�testauksia. \\ \hline
Tynk� (Stub) & Testauksessa k�ytett�v� komponentti, joka toteuttaa testiin vaaditun minimitoiminnallisuuden. Tynk� korvaa toisen yksik�n, jonka toiminnasta testattava yksikk� riippuu. \\ \hline
Yksikk� & Koodin selke�sti rajoittuva pieni kokonaisuus, esimerkiksi metodi tai luokka. \\ \hline
lasilaatikkotestaus (White box testing) & testaaja p��see k�siksi testattavan osan koodiin, ja tuntee sen rakenteen. Esimerkkin� yksikk�testaus. \\ \hline
\end{tabular}
\end{quote}

\section{Yksikk�testaus}

Yksikk�testauksella varmistetaan koodin pienimpien kokonaisuuksien, p��osin luokkien, toiminta. Tavoitteena on testata, ett� yksikk� toteuttaa silt� vaaditut teht�v�t, eik� sis�ll� virheellist� toiminnallisuutta. Testaus keskittyy siis metodien ja luokkien virheiden l�yt�miseen ja varmistumiseen, ett� ne toteuttavat halutun rajapinnan. Testauksessa apuna voidaan k�ytt�� JUnit-ty�kalua.

Koska yksikk�testaus perustuu l�hinn� koodin rakenteen tuntemiseen (lasilaatikkotestaus), sen voi parhaiten tehd� yksik�n toteuttaja. Testaus tehd��n yksik�n kehitt�misen yhteydess� heti sen valmistuessa. Testisy�ttein� k�ytet��n niin hyv�ksytt�vi� sy�tteit�, kuin kelvottomiakin sy�tteit�, jotta varmistutaan poikkeuksien k�sittelyst�. Sy�tteit� valittaessa pyrit��n etsim��n mahdollisesti ongelmia aiheuttavia arvoja.

Testausta varten kirjoitetaan testitapauksia kullekin yksik�lle erillisen� komponenttina, joilla kaikki luokan ei-triviaalit toiminnot saadaan testattua. Jos luokka on riippuvainen muista (viel� testaamattomista) komponenteista, k�ytet��n testaamiseen tynki�. Testitapaukset luodaan matalan tason suunnitelmien perusteella, ja tavalla joka tuottaa testin tulokseksi joko onnistumisen tai ep�onnistumisen ja tapausten kuvaukset kirjoitetaan koodiin kommentteina, jotka toimivat my�s yksikk�testauksen dokumentointina. Yksikk�testauksen kattavuutta pyrit��n mittamaan, jotta saada kuvaa testien kattavuudesta. 

\section{Integrointitestaus}

Integrointitestauksessa testaan j�rjestelm�n eri komponenttien yhteistoimintaa. Tarkoitus on selvitt��, ett� eri komponentit k�ytt�v�t oikein toistensa rajapintoja, eik� synny ylim��r�isi� sivuvaikutuksia. Kahden yksik�n integrointitesti on tehty, kun koko niiden v�linen toiminta ja sivuvaikutukset on testattu, ja mahdolliset poikkeukset on k�yty l�pi, ja koko j�rjestelm�n integrointitestaus on valmis kun kaikki yksik�t on liitetty n�in yhteen.

J�rjestelm�n testauksessa keskityt��n kriittisiin loppuk�ytt�j�llekin avoinna oleviin rajapintoihin sek� protokollaan asiakkaan ja palvelimen v�lill�. Protokollaa testataan suunnittelemalla erikoisia ja monella mahdollisella tavalla virheellisi� viestej� ja tutkimalla palvelimen toiminnan oikeellisuutta virheellisen viestin tilanteessa.

Rajapintoja testataan suunnitelluilla oikeilla ja virheellisill� arvoilla. Integrointitestien suoritus automatisoidaan, jotta voidaan saada v�litt�m�sti kiinni kehityksess� ilmenev�� regressiota. My�s integrointitestit toteutetaan kehitysvaiheessa. 

\section{J�rjestelm�testaus}

J�rjestelm�testauksessa varmistetaan, ett� j�rjestelm� t�ytt�� sille asetetut vaatimukset. Vaatimusm��rittelyn kohdat k�yd��n l�pi oikean j�rjestelm�n kanssa ajoittain ja virheet korjataan. J�rjestelm�testaukseen k�ytet��n my�s vaatimusm��rittelyn k�ytt�tapauksia, jotka kukin k�yd��n l�pi k�ytt�liittym�n avulla, ja varmistetaan, ett� kuvattu toiminto onnistuu.

\section{Testausaikataulu}

Yksikk�testit ajetaan kehitt�j�n toimesta heti yksik�n valmistuttua (my�s yksikk�testi on valmistunut). Integrointitestit py�riv�t automaattisesti �isin tai manuaalisesti k�ynnistettyn�. Automaattinen testij�rjestelm� pyrit��n k�ynnist�m��n 20.2 menness�. Automaattinen testiajo pyrit��n k�ynnist�m��n versionhallintaan tulleen muutoksen toimesta. J�rjestelm�testausta suoritetaan sopivaksi katsottuina ajankohtina.

\section{Liitteet}

\subsection{Testitapaukset}

\subsubsection{K�ytt�j�tunnuksen luonti}

\textbf{Kuvaus}\newline
K�ytt�j� aloittaa ohjelmiston k�yt�n ja luo itselleen salasanalla suojatun k�ytt�j�tunnuksen

\textbf{L�ht�tila}\newline
ei kirjautunut sis��n

\textbf{Sy�tteet}\newline
K�ytt�j�tunnus (merkkijono)\newline
salasana (merkkijono)\newline

\textbf{Tulosteet}\newline
Tieto luonnin onnistumisesta tai ep�onnistumisesta


\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & Tunnus & Toiminta \\ \hline
1 & Uusi & K�ytt�j�tili lis�t��n ja ilmoitetaan onnistuminen, ja k�ytt�j� kirjataan sis��n tunnuksella \\ \hline
2 & Olemassaoleva & K�ytt�j�tilej� ei muuteta, ilmoitetaan tunnuksen olevan varattu \\ \hline
\end{tabular}
\end{quote}

\subsubsection{Kirjautuminen tunnuksella}

\textbf{Kuvaus}\newline
K�ytt�j� kirjautuu sis��n k�ytt�j�tunnuksella

\textbf{L�ht�tila}\newline
ei kirjautunut sis��n

\textbf{Sy�tteet}\newline
K�ytt�j�tunnus (merkkijono)\newline
salasana (merkkijono)\newline

\textbf{Tulosteet}\newline
K�ytt�j�n tiedot n�kyv�t k�ytt�liittym�ss� tai ilmoitus ep�onnistumisesta

\begin{quote}
\begin{tabular} {| l | l | l | p{10cm} |}
\hline
Nro & Tunnus & Salasana & Toiminta \\ \hline

1 & Olemassaoleva & Oikea  & Kirjataan sis��n, k�ytt�j�n tiedot n�kyv�t ruudun yl�laidassa \\ \hline
2 & Olemassaoleva & V��r�  & Ilmoitetaan virheellisesta tunnuksesta tai salasanasta \\ \hline
3 & Uusi & -  & Ilmoitetaan virheellisesta tunnuksesta tai salasanasta \\ \hline
\end{tabular}
\end{quote}

\subsubsection{Pelip�yd�n luonti}

\textbf{Kuvaus}\newline
K�ytt�j� luo p�yd�n haluamaansa pelityyppiin

\textbf{L�ht�tila}\newline
Aulan�kym�, kirjautunut sis��n\newline
Ei olemassaolevia p�yti�\newline
muita p�yti� samasta tyypist�\newline
muita p�yti� eri tyypist�\newline

\textbf{Sy�tteet}\newline
Pelityyppi (valitaan palvelimelle toteutetuista peleist�)\newline
P�yd�n tunniste (merkkijono)\newline
Pelikohtaiset tiedot (valitaan pelin puitteissa)\newline

\textbf{Tulosteet}\newline
P�yt� lis�t��n aulaan

\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & Tunnus & Toiminta \\ \hline
1 & Olemassaoleva & Ilmoitetaan varatusta tunnuksesta \\ \hline
2 & Uusi & Lis�t��n p�yt� palvelimelle, ja siirryt��n p�yt��n \\ \hline
\end{tabular}
\end{quote}

\subsubsection{Texas Hold'em pelip�yd�n luonti}

\textbf{Kuvaus}\newline
K�ytt�j� luo p�yd�n Texas Hold'emille

\textbf{L�ht�tila}\newline
Aulan�kym�, kirjautunut sis��n(?)

\textbf{Sy�tteet}\newline
Pelityyppi (Texas Hold'em)\newline
P�yd�n tunniste (merkkijono)\newline
Pelaajien m��r� (2...10)\newline
Pelaajien minimim��r� (2...Pelaajien m��r�)\newline
pieni sokkopanos (lukuarvo)\newline
suuri sokkopanos (lukuarvo)\newline

\textbf{Tulosteet}\newline
P�yt� lis�t��n aulaan

\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & Tunnus & Toiminta \\ \hline
1 & Olemassaoleva & Ilmoitetaan varatusta tunnuksesta \\ \hline
2 & Uusi & Lis�t��n p�yt� palvelimelle, ja siirryt��n p�yt��n \\ \hline
\end{tabular}
\end{quote}

\subsubsection{P�yt��n siirtyminen}

\textbf{Kuvaus}\newline
K�ytt�j� siirtyy olemassaolevaan p�yt��n

\textbf{L�ht�tila}\newline
Aulan�kym�

\textbf{Sy�tteet}\newline
P�yt� (valitaan aulasta)

\textbf{Tulosteet}\newline
Siirryt��n aulasta p�yt�n�kym��n

\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & P�yt� & Toiminta \\ \hline
1 & Olemassaoleva & OK, siirryt��n p�yd�n seuraajiin \\ \hline
2 & Poistettu & Poistetaan p�yt� listalta, pysyt��n aulassa \\ \hline
\end{tabular}
\end{quote}

\subsubsection{Paikan varaaminen}

\textbf{Kuvaus}\newline
K�ytt�j� valitsee paikan seuraamassaan p�yd�ss� jotta voisi istua peliin mukaan

\textbf{L�ht�tila}\newline
P�yt�n�kym�, kirjautunut sis��n\newline
Tyhj� p�yt�\newline
Yksi vapaa paikka\newline
Muutama vapaa paikka\newline

\textbf{Sy�tteet}\newline
Paikka (valitaan p�yt�n�kym�st�)

\textbf{Tulosteet}\newline
Paikka merkit��n varatuksi, ja k�ytt�j�lle avataan dialogi tarvittaviin p��t�ksiin

\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & Paikka & Toiminta \\ \hline
1 & Vapaa & OK \\ \hline
2 & Varattu & Merkit��n paikka varatuksi \\ \hline
\end{tabular}
\end{quote}

\subsubsection{Useamman botin lis��minen}

\textbf{Kuvaus}\newline
K�ytt�j� lis�� useamman botin yhdell� kertaa pelip�yt��n

\textbf{L�ht�tila}\newline
Tilin hallintan�kym�\newline
Tyhj� p�yt�\newline
Muutama paikka vapaana p�yd�ss�\newline

\textbf{Sy�tteet}\newline
Paikat (valitaan p�yt�listauksesta)\newline
Botit (valitaan luoduistaboteista kullekin paikalle)\newline

\textbf{Tulosteet}\newline
Paikat merkit��n varatuksi, ja lis�t��n botit peliin

\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & Paikat & Toiminta \\ \hline
1 & Kaikki vapaana & OK \\ \hline
2 & Osa varattu & Varataan viel� vapaat paikat, ja merkit��n muut varatuiksi muille \\ \hline
\end{tabular}
\end{quote}

\subsubsection{Peliin liittyminen}

\textbf{Kuvaus}\newline
K�ytt�j� liittyy peliin varaamallaan paikalla

\textbf{L�ht�tila}\newline
P�yt�n�kym�, istu p�yt��n -dialogi

\textbf{Sy�tteet}\newline
Pelaajatyyppi (itse (vakio)/Botti (bottik�ytt�j�ll� valittavana))\newline
Pelinimi (Merkkijono/valitaan listalta)\newline
Peliin tuotavat rahat (lukuarvo>0)\newline

\textbf{Tulosteet}\newline
Pelaaja/botti merkit��n paikalle, tililt� v�hennet��n otetut rahat

\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & Tyyppi & Toiminta \\ \hline
1 & Itse & Pelaaja istuu p�yt��n, ja liittyy peliin \\ \hline
2 & Botti & Bottipelaaja lis�t��n paikalle \\ \hline
\end{tabular}
\end{quote}

\subsubsection{Texas Hold'em vuoron pelaaminen}

\textbf{Kuvaus}\newline
Pelaaja panostaa pelin pottiin

\textbf{L�ht�tila}\newline
P�yt�n�kym�, peliss� mukana

\textbf{Sy�tteet}\newline
Toiminto (fold/call/raise/check/... n�pp�in k�ytett�viss� vain kun toiminto mahdollinen)\newline
Raham��r� (valittava [mini\_raise, min(max\_raise, pelaajan kassa)], vain korotettaessa)\newline

\textbf{Tulosteet}\newline
Vuoro siirtyy seuraavalle pelaajalle, valittu toiminto suoritetaan
\begin{quote}
\begin{tabular} {| l | l | l |p{10cm} |}
\hline
Nro & Tyyppi & Pelaajan kassa & Toiminta \\ \hline
1 & Fold & -  & Pelaaja ei en�� osallistu k�den pelaamiseen. Vuoro siirtyy seuraavalle \\ \hline
2 & Call & Riitt�v�  & M��r� maksetaan pottiin ja v�hennet��n pelaajan kassasta. Vuoro siirtyy seuraavalle \\ \hline
3 & Call & Ei riit�  & Pelaaja siirtyy all-in, ja h�nen osuutensa mukaan muodostetaan erillinen potti. Vuoro siirtyy seuraavalle \\ \hline
4 & Raise & -  & M��r� maksetaan pottiin ja v�hennet��n pelaajan kassasta. Vuoro siirtyy seuraavalle \\ \hline
5 & Check & -  & Vuoro siirtyy seuraavalle \\ \hline
\end{tabular}
\end{quote}

\subsubsection{P�yd�n etsiminen nimell�}

\textbf{Kuvaus}\newline
K�ytt�j� etsii p�yt�� tietyll� tunnisteella

\textbf{L�ht�tila}\newline
Aulan�kym�

\textbf{Sy�tteet}\newline
P�yd�n tunniste (merkkijono)

\textbf{Tulosteet}\newline
L�ydetyt p�yd�t

\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & Tunniste & Toiminta \\ \hline
1 & L�ytyy & Listataan p�yt� \\ \hline
2 & Ei l�ydy & Tyhj� lista \\ \hline
\end{tabular}
\end{quote}

\subsubsection{P�yd�n etsiminen pelaajan perusteella}

\textbf{Kuvaus}\newline
K�ytt�j� etsii p�yti�, joissa tietty pelaaja on pelaamassa

\textbf{L�ht�tila}\newline
Aulan�kym�

\textbf{Sy�tteet}\newline
Pelaajan nimi (merkkijono)

\textbf{Tulosteet}\newline
L�ydetyt p�yd�t

\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & Nimi & Toiminta \\ \hline
1 & L�ytyy & Listataan p�yd�t, joissa pelaaja on \\ \hline
2 & Ei l�ydy & Tyhj� lista \\ \hline
\end{tabular}
\end{quote}

\subsubsection{P�ytien j�rjest�minen attribuuttien mukaan}

\textbf{Kuvaus}\newline
K�ytt�j� j�rjest�� py�d�t attribuutin arvon mukaan nousevaan/laskevaan j�rjestykseen

\textbf{L�ht�tila}\newline
Aulan�kym�

\textbf{Sy�tteet}\newline
Attribuutti (valitaan mahdollisista)

\textbf{Tulosteet}\newline
P�yt�j�rjestys p�ivittyy


\subsubsection{Tilin hallinnointi}

\textbf{Kuvaus}\newline
K�ytt�j� n�kee tilins� tiedot, ja luoneensa botit

\textbf{L�ht�tila}\newline
Aulan�kym� tai P�yt�n�kym�, kirjautunut sis��n

\textbf{Sy�tteet}\newline
Hallinnointi

\textbf{Tulosteet}\newline
K�ytt�j� saa hallinnointin�kym�n


\subsubsection{Botin luominen}

\textbf{Kuvaus}\newline
K�ytt�j� luo bottipelaajan

\textbf{L�ht�tila}\newline
Tilin hallintan�kym�

\textbf{Sy�tteet}\newline
Bottinimi (merkkijono)\newline
teko�lyalgoritmi (valitaan toteutetuista)\newline

\textbf{Tulosteet}\newline
Botti lis�t��n listalle

\begin{quote}
\begin{tabular} {| l | l | p{10cm} |}
\hline
Nro & Tunnus & Toiminta \\ \hline
1 & Olemassaoleva & Ilmoitetaan varatusta nimest� \\ \hline
2 & Uusi & Lis�t��n botti listalle saldolla 0 \\ \hline
\end{tabular}
\end{quote}

\subsubsection{Botin poistaminen}

\textbf{Kuvaus}\newline
K�ytt�j� poistaa bottipelaajan

\textbf{L�ht�tila}\newline
Tilin hallintan�kym�

\textbf{Sy�tteet}\newline
Bottinimi (valitaan listalta)

\textbf{Tulosteet}\newline
Botti poistetaan listalta



