Lähdekoodimiehen ihmeelliset seikkailut



Huonontuvan muistin vastapainoksi ikääntyvä ohjelmistoammattilainen saa erinäisiä supervoimia.  En tietenkään tarkoita sitä, että koodarin ahterista löytyisi radioaktiivisen projektipäällikön puremajäljet. Tarkoitan kokemusta, sen mukanaan tuomaa viisautta ja työmäärää vähentäviä niksejä — mutta supervoima on vain niin paljon markkinointihenkisempi termi.

Kyseessä on usein hyvin yksinkertaiset konstit. Esimerkiksi:

  • logien lukeminen virhetilanteen tapahduttua tai login seuraaminen virhettä toistettaessa
  • saadun virheilmoituksen syöttäminen Googleen sanatarkasti
  • ongelman binäärihaarukointi (esim. git bisect)

Yksinkertaisuudestaan huolimatta nämä menetelmät auttavat todella, todella, todella usein.

Olen viime aikoina alkanut erityisesti arvostaa supervoimaa nimeltään “luin lähdekoodista, miten se toimii.” Olen tällä tavalla selättänyt ongelmatilanteita Firefoxin laajennuspalikassa, Django-frameworkin tietokantarajapinnassa, Eucalyptuksen komentorivityökaluissa ja monessa muussa.

Monet ajattelevat, että lähdekoodia lukeva ohjelmistoviemärisukeltaja etsii jotain bugia. Havaittu vikahan on luonnollisesti käytetyssä alustassa ja se löytyy lähdekoodia lukemalla. Tämä on kuitenkin vain osa totuudesta. Yleensä select ei ole rikki. Luen lähdekoodia siksi, että saisin paremman käsityksen siitä, miten ruuvipenkissä oleva klunssi toimii. Toisin sanoen, en etsi bugia vaan ymmärrystä.

Hyvin usein vika piilee konfiguraatiossa eikä alustassa. Dokumentaatio voi olla harhaanjohtavaa, huonoa tai puuttua kokonaan. Käyttäjä saattaa jättää dokumentaation lukematta, vaikka se olisi miten hyvää. Ohjelmistolle on voitu valita huonot oletukset toteutusvaiheessa.

Voin yrittää korjata tällaista ongelmaa kuin mustaa laatikkoa. Syöte X0, tulos Y0. Syöte X1, tulos Y1. Jatketaan, kunnes ongelma ratkeaa. Tai voin pukea trikoot ja viitan päälle, syöksyä lähdekoodin syövereihin ja repiä Ymmärryksen sen sisältä. Ymmärrys muuttaa mustan laatikon lasiseinäiseksi. Kun nenäni edessä on Y0:n palauttava rivi, voin yleensä helposti kelata ylemmälle tasolle ja löytää tilanteeseen vaikuttavat konfiguraatioparametrit.

Tehokkuudestaan huolimatta lähdekoodin läpikäynti ei ole ensimmäinen keino, jota kokeilen. Se vie aikaa, varsinkin jos ei tiedä, mitä etsii. Se vaatii huomattavan suurta paneutumista ja keskittymistä erityisesti itselle vieraan ohjelman kanssa. Tärkein syy on kuitenkin se, että lähdekoodia ei aina ole saatavilla.

// Kuva: Flickr CC, nyuhuhuu.

Yksi kommentti artikkeliin ”Lähdekoodimiehen ihmeelliset seikkailut

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *