Deadline IV palautus

Tällä viikolla keskityin lähinnä pieneen koodin viilailuun, dokumentaation parantamiseen ja nopeustestien suoritteluun. Pilkoin muutaman metodin pienemmäksi, uudelleennimesin muutaman luokan ja korjasin pienen bugin bittikäsittelyssä. 

Dokumentaation puolesta aloitin suunnitteludokumentin toteutuksen. Dokumentti sisältää nyt ohjelman yleisrakenteen kuvauksen ja algoritmin aika- ja tilavaativuusanalyysin. Omien tietorakenteiden O-analyysiä ei ole (tarvitaanko tämä edes?) ja ohjelman puutteita ei ole listattu vielä. Käyttöohje on myös tehtävä.

Nopeustesteissä vertailin omia tietorakenteita javan omiin, ja tein muutaman kaavion joissa vertaillaan arvioitua ja toteutunutta aikavaativuutta. Tämä näyttäisi toteutuvan, mutta testien tarkkuus epäilyttää tilastolliselta kannalta; testasin vain kahdeksalla tiedostolla jolloin virhe voi olla varsin suuri. Lisäksi arvioitu O(n log n) missä n on tiedoston koko on lähellä lineaarista O(n)-funktiota pienillä n:n arvoilla koska logaritmi kasvaa hitaasti, ja algoritmi on automaattisesti O(n) koska tiedosto on luettava ainakin kerran. Näin silmämääräinen kaavioiden tutkiminen ei ole välttämättä edes erityisen tieteellistä.

Tällä hetkellä koodin ja dokumentaation hiomisen lisäksi suurin työstettävä alue on yksikkötestit. Kuten edellisellä viikolla jo mainitsin, testien kattavuus ei mielestäni ole riittävä. Kuitenkin järkevien testien keksiminen tuntuu vaikealta, ja varsinkin yksityisten metodien testaus ei suoraan onnistu. Tämä voi tosin olla merkki siitä että koodia on refaktoroitava ja yksityiset metodit on revittävä omaan luokkaansa julkisiksi. 

Algoritmin puolesta olen hieman pettynyt pakkaussuhteisiin binääritiedostojen kanssa. Teksti tuntuu pakkautuvan helposti 40 - 60%, ja rakenteinen tieto kuten xml-dokumentit jopa 80%, mutta testit bmp-muotoisten kuvien kanssa ovat jääneet 20 - 30% tietyillä kuvilla. Tässä on kuitenkin paljon vaihtelua, runsaasti samaa väriä sisältävät kuvat pakkautuvat paremmin.