Vianetsintä on tietokoneohjelman kehitysvaihe , jossa virheet havaitaan, lokalisoidaan ja poistetaan. Ymmärtääksesi, missä virhe tapahtui, sinun on:
On olemassa kaksi toisiaan täydentävää virheenkorjaustekniikkaa:
Tyypillinen kehityssykli, joka toistuu monta kertaa ohjelman elinkaaren aikana, näyttää suunnilleen tältä:
Virheenkorjaus vaatii usein korkeaa taitoa ja merkittäviä resursseja. Ohjelmoijan kyky tehdä virheenkorjaus on tärkeä tekijä ongelman lähteen löytämisessä, mutta virheenkorjauksen vaikeus riippuu suuresti ohjelmointikielestä ja käytetyistä työkaluista, erityisesti debuggereista .
Debuggeri on ohjelmistotyökalu, jonka avulla ohjelmoija voi tarkkailla tutkittavan ohjelman suoritusta, pysäyttää ja käynnistää sen uudelleen, suorittaa sen hidastettuna, muuttaa arvoja muistissa ja joissain tapauksissa jopa palata ajassa taaksepäin.
Myös hyödyllisiä työkaluja ohjelmoijan käsissä voivat olla:
Korkean tason ohjelmointikielten käyttäminen helpottaa yleensä virheenkorjausta, jos tällaiset kielet sisältävät esimerkiksi poikkeustenkäsittelytoimintoja, jotka helpottavat ongelman lähteen löytämistä. Matalatasoisilla kielillä virheet voivat johtaa hienovaraisiin ongelmiin, kuten muistin vioittumiseen ja muistivuotojin . Silloin voi olla melko vaikeaa määrittää, mikä oli virheen alkuperäinen syy. Näissä tapauksissa voidaan tarvita monimutkaisia tekniikoita ja virheenkorjaustyökaluja.
"Henkilökohtainen valintamme on yrittää olla käyttämättä debuggereita, paitsi tarkastella puhelupinoa tai muutaman muuttujan arvoja . Yksi syy tähän on se, että on erittäin helppo eksyä monimutkaisten tietorakenteiden ja ohjelman suorituspolkujen yksityiskohtiin. Mielestämme ohjelman läpi astuminen on vähemmän tuottavaa kuin kova ajattelu ja koodin tarkistaminen kriittisissä kohdissa.
Operaattoreiden napsauttaminen vie enemmän aikaa kuin operaattoreiden viestien katseleminen virheenkorjaustietojen antamisesta kriittisissä kohdissa. On nopeampaa päättää, mihin debug-lause asetetaan, kuin käydä läpi kriittisiä koodin osia, vaikka oletammekin, että tiedämme, missä nämä osat ovat. Vielä tärkeämpää on, että debug-lauseet säilyvät ohjelmassa ja virheenkorjausistunnot ovat ohimeneviä.
Sokea vaeltaminen virheenkorjausohjelmassa on todennäköisesti tehotonta. On hyödyllisempää käyttää debuggeria sen ohjelman tilan selvittämiseen, jossa se tekee virheen, ja sitten miettiä, kuinka tällainen tila voi syntyä. Debuggerit voivat olla monimutkaisia ja hämmentäviä ohjelmia, etenkin aloittelijoille, joille ne ovat enemmän hämmentäviä kuin hyödyllisiä ... "
”Virheenkorjaus on vaikeaa ja voi kestää arvaamattoman kauan, joten tavoitteena on ohittaa suurin osa siitä. Tekniikoita, jotka voivat auttaa lyhentämään virheenkorjausaikaa, ovat hyvä suunnittelu, hyvä tyyli , rajaolosuhteiden tarkistus, alkuperäisten väitteiden validointi ja koodin kohtuullisuus, defensiivinen ohjelmointi , hyvin suunnitellut rajapinnat, globaalien muuttujien rajoitettu käyttö, automaattiset ohjaimet ja tarkistukset. Pienikin ehkäisy on parantumisen arvoinen."
- Brian Kernighan ja Rob PikeToinen suunta on tehdä virheenkorjaus mahdollisimman harvoin. Tätä varten sovelletaan:
Ohjelmakoodissa voi esiintyä ns. dokumentoimatonta käyttäytymistä - vakavia virheitä, jotka eivät ilmene ohjelman normaalin suorituksen aikana, mutta ovat erittäin vaarallisia koko järjestelmän turvallisuudelle kohdistetun hyökkäyksen sattuessa. Useimmiten tämä johtuu ohjelmoijan virheistä. Tunnetuimpia esimerkkejä ovat SQL-injektio ja puskurin ylivuoto . Tässä tapauksessa virheenkorjauksen tehtävä on:
On olemassa tällaisia menetelmiä:
Sanakirjat ja tietosanakirjat | |
---|---|
Bibliografisissa luetteloissa |