sainikumara / compressao-sem-perdas

Java implementation of LZ77 compression algorithm. Work in progress.
MIT License
0 stars 0 forks source link

Koodikatselmointi 2 #2

Open mhaapakangas opened 5 years ago

mhaapakangas commented 5 years ago

Projekti ladattu: 13.6. 19:30

Algoritmilla sai pakattua tiedostoja ja myös niiden purkaminen onnistui, mutta pakattujen tiedostojen koko oli alkuperäistä suurempi. Syynä tähän vaikutti olevan se, että algoritmi löysi tekstistä lähinnä vain yhden merkin pituisia matcheja.

LZ77Compress-luokan searchSubArrayContainsSearchTarget ei näytä toimivan toivotulla tavalla, sillä se ei löydä ikkunasta pisintä matchia jos tätä ennen on jokin muu, lyhyempi pätkä johon testattava syöte matchaa osittain. Tämän huomaa esim. seuraavalla testillä:

LZ77Compress compress = new LZ77Compress();
byte[] window = "a abc".getBytes();
byte[] target1 = "a".getBytes();
byte[] target2 = "ab".getBytes();
System.out.println(compress.searchSubArrayContainsSearchTarget(window, target1));
System.out.println(compress.searchSubArrayContainsSearchTarget(window, target2));

Metodi palautti arvon true syötteelle "a" mutta arvon false syötteelle "ab", vaikka se löytyy myös annetusta ikkunasta.

Projektissa oli vain muutamia yksikkötestejä, ja testaamishetkellä IOTest-luokan testi writingDictionaryToAndReadingFromFilesWorks ei mennyt läpi. Varsinkin LZ77Compress-luokan logiikan kattavammasta testauksesta olisi hyötyä. Rajatapausten ja erilaisten skenaarioiden testaaminen voisi olla helpompaa, jos taulukoiden käsittelyyn tarvittavat apumetodit olisivat eri luokassa ja niitä voisi testata yksitellen.

Koodista löytyi useampia metodeja, joita ei kutsuttu missään. CompressionInfo-luokassa olikin tästä maininta, mutta sen lisäksi LZ77CompressedEntry-luokan ja muutaman käyttämättömän IO-luokan metodin tarkoitus jäi epäselväksi.

Jos ohjelmalle antoi tyhjän tai virheellisen tiedoston nimen, se heitti NullPointerExceptionin eli tuon virheen käsittelyä voisi vielä parantaa.

sainikumara commented 5 years ago

Kiitos paljon tästä erinomaisesta vertaisarviosta! Korjasin suurimman osan mainitsemistasi pulmista nyt saman tien, tämä oli erittäin hyödyllistä. Metodi searchSubArrayContainsSearchTarget teki tosiaan ihan jotain muuta kuin sen piti, ja nyt ohjelman tulokset ovat jo vähän lähempänä toivottua.