Ohjelman virheenkorjaus

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 7. huhtikuuta 2022 tarkistetusta versiosta . tarkastukset vaativat 4 muokkausta .

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:

Virheenkorjauksen paikka ohjelman kehityssyklissä

Tyypillinen kehityssykli, joka toistuu monta kertaa ohjelman elinkaaren aikana, näyttää suunnilleen tältä:

  1. Ohjelmointi  - uusien toimintojen tuominen ohjelmaan, olemassa olevien virheiden korjaaminen .
  2. Testaus (manuaalinen tai automaattinen; ohjelmoijan, testaajan tai käyttäjän toimesta; " savu ", musta laatikko -tilassa tai modulaarinen ) - virheen tosiasian havaitseminen.
  3. Virheen toistaminen on olosuhteiden selvittämistä, joissa virhe tapahtuu. Tämä voi osoittautua hankalaksi tehtäväksi ohjelmoitaessa samanaikaisia ​​prosesseja ja joitain epätavallisia vikoja, jotka tunnetaan nimellä heisenbugs .
  4. Vianetsintä  - Virheen syyn löytäminen.

Työkalut

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 .

Virheenkorjaustyökalut

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 Pike

Työkalut, jotka vähentävät virheenkorjauksen tarvetta

Toinen suunta on tehdä virheenkorjaus mahdollisimman harvoin. Tätä varten sovelletaan:

Koodin suojaus ja virheenkorjaus

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ä:

Katso myös

Muistiinpanot

Kirjallisuus

Linkit