Vianetsintä

Vianpaikannuksen eri näkökulmia

Usein keskustelu vianpaikannuksesta, sekä koulutus formaalin vianpaikannuksen menetelmistä on sovellusalakohtaista. Vika saattaa usein liittyä muutoksiin, tai monen asian samanaikaisuuteen. Siksi vianpaikannus vaatii kriittistä ajattelua. Yleensä kannattaa etsiä ratkaisua aluksi todennäköisimmästä lähteestä.
Vianpaikantaja voisi etsiä vikaa vaihtamalla komponentteja systemaattisesti yksi kerrallaan, mutta tämä periaate ilman olettamuksia vian syistä johtaa usein liian työlääseen ratkaisuun.
Sen sijaan tehokas vianpaikannus alkaa selkeällä tilannearviolla oletetusta käyttäytymisestä ja havaituista oireista. Vianpaikantaja muodostaa hypoteeseja syistä ja suorittaa testejä ja väliarvioita edetessään tietämyksensä tai tarkistuslistan mukaan. Testit voivat aluksi kohdistua helpoimpiin syihin ja sitten esimerkiksi haarukointiperiaatteella perättäin olevien riippuvuuksien selvittämiseen: otetaan näyte keskeltä ja jos sieltä löytyi virheellinen tulos alun ja puolivälin keskeltä seuraava näyte jne.
Yksinkertaisimpia järjestelmiä voidaan kuvata riippuvuuksien mukaisina puina tai listoina niiden komponenttien tai alijärjestelmien mukaan. Monimutkaisemissa järjestelmissä on sen sijaan myös kiertäviä riippuvuuksia ja takaisinkytkentöjä. Sellaisia järjestelmiä ei siten voida haarukoimalla varmistaa.
Usein vianpaikannus kannattaa aloittaa tutusta tilasta, kuten tietokoneen kylmäkäynnistys (boot). Kognitiivinen kävely on hyvä toinen menetelmä tai dokumenttien tutkiminen.
Vianetsintä voidaan kuvata systemaattisen tarkastuslistan muodossa, vianetsintäproseduurina, vuokaaviona tai taulukkona, johon on koottu ongelman aiheuttaja. Vianpaikannuksen menetelmien kehittäminen etukäteen mahdollistaa tehokkaan eliminoinnin ja töiden organisoinnin. Vianpaikannusmenetelmät voidaan viedä tietokoneelle mm. taulukkomuodossa.

Oireiden tuottaminen uudelleen näkyville

Eräs vianpaikannuksen ydinajatuksia on tuottaa ongelma uudelleen näkyville, jotta vika voitaisiin eristää ja ratkaista. Usein se vaatii paljonkin resursseja saada oire halutulla tavalla esille.
Kun oire on saatu esille, voidaan käyttää systemaattisia menetelmiä syyn tai syiden eristämiseksi. Päättelyn avulla yleensä päästään korjaamaan vika tai korvaamaan viallaiset komponentit ehjillä.

Epäsäännölliset oireet

Vaikeimpia vianpaikannustilanteita ovat ne, joissa oireet esiintyvät vain silloin tällöin eli satunnaisesti. Esimerkiksi elektroniikassa komponentit saattavat ajoittain lämmitä liikaa, jolloin vianpaikannuksessa kannattaa käyttää kuumennusta tai jäähdytystä tarpeen mukaan.
Tietokoneohjelmissa kriittiset ajoitukset aiheuttavat usein ajoittaisia oireita, joita on vaikea tuottaa halutulla tavalla esille.
Ajoittaisen vian eli häiriön määrittely: Steven Littin mukaan Ajoittainen vika on vika, joka esiintyy epäsäännöllisesti tai epäloogisesti.
Joskus vianpaikantajien on käytettävä tilastollisia menetelmiä tai erityiskeinoja lisätäkseen oireen esiintymisen todennäköisyyttä tai voidakseen ratkaista mikä olisi lopullinen paikannustapa. Vaikka vika näyttää joskus kokonaan kadonneen, ei siltikään ole varmuutta, että lopullinen aiheuttaja olisi löytynyt ja ongelma olisi poistunut.

Monikertaisten ongelmien tapaukset

Sellaiset tapaukset, joissa vain yksi komponentti tai osa on pettänyt, ja joissa oireet voidaan tuottaa esille riittävän hyvin, ovat suhteellisen helppoja ratkaista.
Jos virheitä onkin useita, saattaa tuloksena syntyä useita erilaisia ongelmia. Tämä tulee usein esille vikasietoisissa järjestelmissä tai järjestelmissä, joissa on sisäänrakennettua varmistuslogiikkaa. Piirteet, joissa varmistuksia lisätään, saattavat myös pettää. Jos ongelmia on useita, saattaa koko järjestelmä lakata toimimasta varmistuksista riippumatta.
Yksinkertaisimmissakin järjestelmissä saattaa olla useampia kuin yksi vika. Joskus väärän komponentin korvaaminen viallisella komponentilla aiheuttaa vain lisää vikoja, vaikka entisiä pitäisikin saada vähemmäksi.
Usein vika liittyy likaantumiseen tai epävireisyydestä. Silloin vianpaikannuksessa tarvittaisiinkin säätö- tai viritystoimintoja viallisen komponentin korjaamisen sijasta.