Tik-76.115 Loppuraportti

Stegano

http://
Viimeksi päivitetty .

Sisällysluettelo

1. Johdanto
2. Projektin eteneminen
3. Lopputulokset
4. Projektityöskentely
5. Jälkilaskelmat

1. Johdanto

Projektin alkuperäinen tavoite kerrotaan projektisuunnitelmassa: "Tavoitteena on laatia ohjelmisto, jolla kätketään salaisia sanomia kohinaa sisältäviin digitoituihin kuviin. Käyttäjän kannalta valmis tuote muistuttaa salakirjoitusohjelmistoa. Salaisen sanoman lähettäjä kätkee sanoman esim. digitaalisella kameralla ottamaansa kuvaan salaisen avaimen (salasanan) avulla. Vastaanottaja, joka tuntee avaimen, pystyy lukemaan sanoman kuvasta, mutta muut eivät kykene haivitsemaan sanoman olemassaoloa. Kätkemiseen käytetään kryptografisesti vahvoja menetelmiä toisin kuin useimmissa aiemmissa vastaavissa ohjelmistoissa."

2. Projektin eteneminen

Projektin suunnittelu-vaiheen aikana alettiin projektin aihealueeseen tutustuminen: asiakas piti luentoja ja jakoi materiaalia joiden avulla ryhmä tutustui aihealueeseen. Vaiheen aikana käytiin palavereja asiakkaan kanssa projektin lopputuloksena syntyvän ohjelmiston vaatimuksista. Ryhmällä ei vielä tässä vaiheessa ollut kovin selkeää kuvaa tulevasta ohjelmistosta ja sen vaatimuksista mikä näkyi ryhmän jäsenten passiivisuutena palavereissa.
Käyttöliittymäympäristöiksi valittiin UNIX-komentoriviliittymä ja graafisen Windows95-liittymä joka oli tarkoitus toteuttaa Visual C++:lla jossain koulun PC-luokassa.

Määrittelyvaiheen aikana suunniteltiin alustavasti käyttöliittymät ja alettiin algoritmeihin sekä kuvaformaateihin tutustumista, suurin osa vaiheesta oli tutkimustyötä. Ohjelmiston toiminnot suunniteltiin toiminnalliseen määrittelyyn, tässä vaiheessa ryhmälläkin oli jo muodostunut melko selvä kuva ohjelmistosta jota oltiin tekemässä ja sen vaatimuksista.
Koska koulun PC-luokkiin ei oltu asennettu Visual C++:aa, oli Windows-käyttöliittymän tekoon tarvittavan laitteiston saaminen vielä hämärän peitossa.

Suunnitteluvaiheessa suunniteltiin ohjelmiston arkkitehtuuri ja tehtiin alpha-proto joka osasi jo kätkeä sanomia yksinkertaiseen PGM kuvaformaattiin. JPEG ja GIF kuvaformaateista käytiin palavereja asiakkaan kanssa ja tehtiin alustavat suunnitelmat niissä käytettävistä kätkemisalgoritmeista.
Windows-käyttöliittymän tekoa ei vieläkään päästy aloittamaan. Nyt ongelmana oli käyttöön saadun tietokoneen liian vähäinen muisti. Tässä vaiheessa asialla alkoi olla jo melkoinen kiire sillä VC++ ei ollut kenellekään tuttu joten ohjelmiston opetteluunkin täytyi varata aikaa.

Prototyyppi 1 vaiheessa tuli vastaan ensimmäiset todelliset ongelmat. Ensinnäkään Windows käyttöliittymästä ei saatu toimivaa versiota vielä tässä vaiheessa. Aivan edellisen vaiheen lopulla saatiin Windows käyttöliittymän tekoon tarvittavat laitteisto-ongelmat ratkaistua, joten toimiva Windows versio prototyyppi1 vaiheessa laitettiin projektisuunnitelmaan: olihan sen tekemiseen yli puolitoista kuukautta aikaa ja suurin osa koodista (kirjasto) oli jo valmiina. Tässä vaiheessa tilattiin Visual C++ ohjelmisto, mutta sen saaminen kestikin reilut kolme viikkoa, eikä jäljellä ollut aika aivan riittänyt toimivan käyttöliittymän aikaansaamiseksi (VC++ ohjelmiston opettelu vei odotetusti melkoisesti aikaa). Ohjelmiston olisi toki voinut tilata jo aikaisemminkin mutta kukaan ei osannut ennakoida näin pitkää viivettä.
Toinen vaiheen ongelma oli JPEG jota ei saatu liitettyä kirjastoon koska käytettäväksi valittu kirjasto osoittautui luultua monimutkaisemmaksi. Ongelmien kanssa painiskeltaessa jäi testaus melko vaatimattomaksi.

Prototyyppi 2 vaiheeseen oli tehty tiukka aikataulu, koska vaiheen omien tehtävien lisäksi edellisessä vaiheesta oli jäänyt melkoisesti tekemättä. Tällä kertaa aikataulu toimi melko hyvin, Windows versio saatiin toimimaan ja sekä GIF että JPEG lisättiin kirjastoon. JPEG tosin saatiin toimimaan sen verran myöhään että sitä ei ehditty liittämään Windows versioon mukaan.
Testauksessa kävi ilmi vakava yhtensopivuusvirhe, Windowsilla kätkettyjä sanomia ei pystytty purkamaan Unix:ssa ja päinvastoin.

Luovutusvaiheessa korjattiin edellisen vaiheen testauksessa havaittu yhteensopivuusvirhe ja lisättiin JPEG Windows versioon. Lisäksi optimoitiin koodia ja paranettiin sen luettavuutta, ja yleensäkin paranneltiin monia pikkukohtia asiakkaan ehdotuksien ja omien ideoiden pohjalta. Tässä vaiheessa myös kirjoitettiin uusi dokumentti jossa kuvataan tarkasti kirjastossa käytetyt algoritmit.

3. Lopputulokset

Lopputulos on melko tarkkaan sitä mitä oli haluttukin. Ohjelmisto täyttää vaatimusmäärittelyssä luetellut projektin päätavoitteet, ja sisältää kaikki toiminnalliseen määrittelyyn alunperin suunnitellut toiminnot ja vähän ylimääräistäkin.
Alkuperäisistä suunnitelmista ei tarvinnut poiketa, ainoastaan vaiheiden sisäiset aikataulut poikkesivat hieman suunnitelluista.

Projekti onnistui kaiken kaikkiaan hyvin. Yksi tärkeimmistä syistä projektin onnistumiselle oli suunnitteluvaiheessa huolellisesti suunniteltu ohjelmiston arkkitehtuuri. Arkkitehtuuri toimi hyvin eikä sitä tarvinnut enää projektin myöhemmissä vaiheissa muutella, vaan voitiin keskittyä muihin ongelmiin.

4. Projektityöskentely

Projektin alkuvaiheilla järjestettiin palavereja melko tiheästi. Osoittautui kuitenkin erittäin hankalaksi löytää sopivaa aikaa 4-5 henkilölle samanaikaisesti ja pian yhteispalavereista luovuttiinkin ja siirryttiin kommunikoimaan lähinnä sähköpostin tai kahdenkeskisten tapaamisten kautta. Tehtävät pyrittiin jakamaan mahdollisimman itsenäisiin osa-alueisiin, jotta kukin voisi keskittyä omaan alueeseensa. Tämä toimikin suunnitteluvaiheen jälkeen erittäin hyvin, varsinkin kun ohjelmisto on varta vasten suunniteltu arkkitehtuuriltaan modulaariseksi, kukin pystyi koodaamaan omaa osuuttaan ja liittämään sen sitten ohjelmaan.

Kurssin WWW-sivulla olleita raportointityökaluja olisi voitu käyttää tehokkaammin. Nyt tuntiraportointi tehtiin vain kerran vaiheen lopussa, sen sijaan että sitä olisi jatkuvasti päivitetty vaiheen aikana.
Myös virheraportintijärjestelmää käytettiin vähän turhan laskasti. Virheet yleensä lähetettiin ensin sähköpostilla ja raportointiin järjestelmään vasta jos virhettä ei lähipäivinä saatu korjattua. Syy raportointijärjestelmän laiskaan hyödyntämiseen on lienee se, ettei ryhmällä pitkään ollut edes tietoa koko järjestelmän olemassaolosta, ja se ehti jo tottua virheiden raportointiin sähköpostin välityksellä.

5. Jälkilaskelmat

Koko projekti pyrittiin viemään läpi 800 tunnin työmäärällä (200h/hlö), joka ylittyi 110 tunnilla. Työkustannuksiin budjetoidut kulut olivat 800h x 100mk/h x 1.88 = 150 400mk, eli ylimääräisiä palkkakuluja tulisi 110h x 100mk/h = 11 000mk.

Seuraavassa taulukot suunnitelluista ja toteutuneista työtunneista eri vaiheissa:

Tommi LTommi JVesa PLasse HYhteensä
PS10 15 15 10 50 
30 30 25 40 125 
SU55 75 35 60 225 
P145 45 70 40 200 
P250 30 50 45 175 
LU10 25 
Yhteensä200 200 200 200 800 
Taulukko 1: Eri vaiheisiin alunperin suunnitellut työtunnit

Tommi LTommi JVesa PLasse HYhteensä
PS16 20 17 14 67 
27 26 21 34 108 
SU31 78 29 31 169 
P149 12 80 47 188 
P268 52 55 63 238 
LU35 37 40 28 140 
Yhteensä226 225 242 217 910 
Taulukko 2: Eri vaiheisiin käytetyt työtunnit

5.1 Tehdyt tunnit henkilöittäin

Henkilöittäin työmäärä jakautui melko tasaisesti. Tämä johtuu lähinnä siitä että kussakin vaiheessa työt jaettiin suhteessa siihen miten paljon kukin on tehnyt projektin aikaisemmissa vaiheissa. Esimerkiksi suunnitteluvaiheessa Tommi J teki alpha proton lähes yksin mihin kului melkoisesti aikaa, mutta seuraavissa vaiheissa työmäärät tasattiin muiden ryhmäläisten tehdessä enemmän työtä.
Pieni poikkeus on Vesan muita hieman suurempi työmäärä. Tämä johtuu lähinnä siitä että hänen vastuullaan oli Windows version kehittäminen, joka oli oma kokonaisuutensa eikä sitä pystytty mitenkään jakamaan useammalle henkilölle. Tätä tasoitimme parhaamme mukaan mm. jakamalla testauksen ja dokumentoinnin muiden ryhmän jäsenten kesken.

5.2 Tehdyt tunnit vaiheittain

Alkuperäisessä suunnitelmassa painotettiin eniten suunnitteluvaihetta, ja hankalin osa koodauksesta oli tarkoitus tehdä jo prototyyppi1 vaiheessa. Käytännössä vaikka suunnittelu tehtiinkin huolella, osoittautui siihen varattu työmäärä melkoisesti yliarvioiduksi. Protyyppi1 vaihe taas oli täynnä ongelmia eikä vaiheen aikana saatu paljoakaan aikaiseksi, joten prototyyppi2 ja luovutus vaiheeseen jäi paljon tehtävää. Muutenkin projektin aikana oppi ainakin sen että ohjelman ja dokumenttien viimeistelyyn ja virheiden korjaamiseen kuluvaa aikaa ei kannata aliarvioida.

5.3 Tehdyt tunnit lajeittain

Taulukossa 3 on esitetty eri lajeihin käytetty aika projektin eri vaiheissa ja poikkeamat suunnitelmiin.

Kuvaformaatteihin tutustumiseen ei tarvittu ihan niin paljon aikaa kun oli suunniteltu. Lisäksi kaikki ryhmän jäsenet eivät perehtyneet kaikkiin algoritmeihin yksityiskohtaisesti, vaan keskityttiin enemmän vain niihin algoritmeihin joiden kanssa kukin joutui tekemisiin projektin aikana.

Koodaukseen varattu aika ylittyi lähes joka vaiheessa, paitsi suunnitteluvaiheessa jossa alpha prototyyppi saatiin valmiiksi ilman suurempia ongelmia. Mutta varsinkin projektin loppupuolella virheiden korjaus ja ohjelman viimeistely veivät yllättävän paljon aikaa.

Dokumentointiin käytettiin lopussa reilusti enemmän aikaa kun oli suunniteltu. Syynä oli lähinnä Windows version on-line help, jonka tekeminen osoittautui melko monimutkaiseksi. Lisäksi päätimme tehdä yhden lisädokumentin, jossa kuvataan tietovirtojen ja algoritmien toimintaa teknisellä tasolla.

PS+/-+/-SU+/-P1+/-P2+/-LU+/-Yhteensä+/-
Luennot100000000000010 0
Opiskelu11063-3021-1020-100000115 -50
Kokoukset20018-21201603-170069 -19
Projektinhallinta8000000000008 0
Suunnittelu000040-166003-200103 -18
Koodaus000062-35544195507232383 51
Testaus0000004-1613-78-225 -25
Dokumentointi1802715345341024-166040197 54
Yhteensä670108-17169-56188-12238814070910-7
Taulukko 3: Eri lajeihin käytetyt työtunnit ja poikkeamat suunnitellusta

(P2 ja LU vaiheisiin varattiin enemmän aikaa kuin mitä oli alunperin suunniteltu, joten niiden +/- sarake ei täsmää taulukossa 1 esitettyjen arvojen kanssa)