Arvasin, kun en muutakaan voinut

Asiakkaalla oli vanha sovellus, jonka kehittäjä oli aikoja sitten lähtenyt litomaan. Dokumentaatiota ei tietenkään ollut, eikä kenellekään ollut oikein kunnollista hajua siitä, miten sovellus oikeastaan toimii.

Muutoksille oli kuitenkin tarvetta. Jostain löytyi jokin versio C#-kielisestä lähdekoodista – itse asiassa kaksi hieman toisistaan poikkeavaa versiota – mutta varmuutta ei ollut, mikä versio tuotannossa oli ajossa. Jossain vaiheessa saimme myös binääriversion tuotantosoftasta. Pääsimme siis vertailemaan valmiin binäärin ja itse käännetyn version toimintaa keskenään. Lopullinen tavoite oli portata vanha sovellus toiselle kielelle.

Aloin tutkia koodia. Osa siitä oli ihan siedettävää luettavaa, osa jäi tarkoitusperiltään hieman hämärän peittoon. Asiakas oli omalla toimialallaan varsin vakavastiotettava firma, mutta lähdekoodi ei huokunut samanlaista arvokkuutta. Ainakaan siltä osin, kun muuttujan nimenä käytettiin sanaa perse.

Kollegan avulla pääsimme jonkinlaiseen käsitykseen siitä, mitä koodin oli tarkoitus tehdä. Mutta kun vertasimme valmiin ja itse käännetyn binäärin toimintaa, tulokset olivat erilaisia. Toisin sanoen saamamme lähdekoodi ei vastannut sitä versiota, jota tuotannossa käytettiin.

Umpikujaan ajautuminen turhautti. Mutta olimme riittävän lähellä onnistumista, joten päätimme viedä työn loppuun arvaamalla: kirjoitin Pythonilla uuden version sovellusta vanhan lähdekoodin pohjalta. Tämän jälkeen ajoimme saman datan sekä uuden että vanhan sovelluksen läpi ja vertailimme lopputulosta. Aluksi eroja siis oli, ja koitimme parhaamme mukaan päätellä, mistä ne johtuivat. Teimme muutoksia omaan lähdekoodiimme kokeilimme uudestaan. Toistimme tätä, noh, muistaakseni aika perhanan monta kertaa, kunnes lopputulos oli tavulleen yhtenevä vanhan sovelluksen sylkemän datan kanssa.

Projekti oli yhtä aikaa sekä mielenkiintoinen että harmillinen.

Mielenkiintoinen siksi, että se oli vaikeusasteeltaan juuri sellainen aivopähkinä, joka ei vielä alkanut turhauttaa liikaa.

Harmillinen siksi, että ajan ja rahan käyttö tuollaiseen on kaikin puolin turhaa. Ohjelmistoalalla on nimittäin harmillisen yleistä, että ohjelmistojen ja muiden järjestelmien dokumentaatio jätetään tekemättä, tai ainakin niiden merkitystä väheksytään suuresti. Tässäkin tapauksessa olisi säästytty paljolta vaivalta, jos tuo entinen päädevaaja olisi malttanut kirjoittaa edes sivun tai parin verran selostusta sovelluksensa sielunelämästä.