Vuonna tietojenkäsittelytiede , eli vika ( lausutaan ranskaksi: / b œ g / ) tai bug on suunnittelun puute on tietokoneohjelma aiheuttaa toimintahäiriö .
Vakavuudesta toimintahäiriö voi vaihdella lievästä esimerkiksi aiheuttaa pieniä näyttö vikoja - tässä tapauksessa voimme joskus puhua " häiriö (es) " - suuria, kuten järjestelmän kaatuminen voi johtaa vakaviin onnettomuuksiin, esimerkiksi. ensimmäisen Ariane 5 -raketin tuhoutuminen lennon aikana vuonna 1996 .
Virhe voi olla sovelluksessa , tämän sovelluksen käyttämässä kolmannen osapuolen ohjelmistossa tai jopa laitteistokomponentin laiteohjelmistossa , kuten tapahtui Pentium-divisioonan virheen yhteydessä . Laastari on pala ohjelmisto tarkoitettu korjaamaan yhden tai useamman vikoja.
Virheet ovat yksi syy tietokoneiden virheelliseen toimintaan; muita toimintahäiriöiden syitä ovat:
Englanninkielinen sana bug kuuluu laitteistoinsinöörien ammattikieleen ja edustaa siinä syntyneitä ongelmia. Termin käyttö mekaanisten järjestelmien vikojen kuvaamiseen juontaa juurensa ainakin ennen 1870-lukua . Thomas Edison , muun muassa, käytti sanaa muistiinpanoissaan.
Termiin "vika" viitataan Laroussen online-sanakirjassa määritelmällä: "Tietokoneohjelman suunnittelu- tai tuotantovika, joka ilmenee tietokoneen toimintahäiriöinä. "
Atk Treasury ranskan kielen säilytetään ainoastaan sana "vika" sen merkitys "Spicy kirjekuoren kastanjoita, pyökinpähkinät, hasselpähkinät ja tietyt palkokasvien siemenet".
FranceTerme- sivusto , Office québécois de la langue française ja Direction de la langue française (Belgia) suosittelevat termiä "bug" sekä johdannaisista debug, debug ja debugger
Termi johtuu joskus väärin Grace Hopperista . Hän totesi hänen kunnossapidon päiväkirjaa, säilytetään Smithsonian Institution , päivätty9. syyskuuta 1947, 15 h 45 , releen kaksi kosketinta aiheuttivat Harvard Mark II: n , yhden ensimmäisistä sähkömekaanisista tietokoneista, toimintahäiriön .
Hopper ei löytänyt virhettä, kuten hän myönsi helposti. Operaattorit, jotka löysivät sen myöhemmin, mukaan lukien William "Bill" Burke merivoimalaboratoriosta, tunsivat tekniikan ja huvittivat termin, pitivät virheen merkinnällä "ensimmäinen todellinen vika löytyi".
Se oli termi, jota mekaaniset ja sähköinsinöörit käyttivät, selittäen laitteiden kohtaamia vaikeuksia kauan ennen kuin Grace Hopper kuuli sanasta.
Frederick Brooks sanoo vuonna 1987 julkaistussa kirjassaan, että ohjelmistovirheiden esiintyminen ei ole onnettomuus, vaan ohjelmistojen luonteesta, toisin sanoen ohjelmistoissa on virheitä, koska ne ovat ohjelmistoja. Hän sanoi myös, että ei ole ihmelääkettä - ihme työkalu - käsitellä vikoja, mikä viittasi legenda keskiajalla että vain pallo on hopeaa , muistuttaa väri kuun voi torjua ihmissusi .
Ohjelmistot ovat näkymättömiä ja aineettomia tuotteita, niiden muokkaaminen ei vaadi raaka-ainetta. IT-markkinoiden erittäin nopea kehitys luo vahvan muutoskysynnän. Kaikki nämä tekijät tekevät ohjelmistomuutoksista paljon yleisempiä kuin muissa tuotteissa, kuten autoissa tai rakennuksissa .
Tietokoneet ovat kaikkein monimutkaisimpia tuotteita, jotka ihminen on valmistanut, ja siksi niillä on hyvin suuri määrä osavaltioita . Ohjelmisto on monimutkaisempi kuin tietokoneet, ja toisin kuin auto, mikään osa ei ole samanlainen. Monien televiestinnän läheisyyteen liittyvien standardien noudattaminen lisää niiden monimutkaisuutta. Ohjelmisto on lisäksi näkymättömiä tuotteita, joita ei voida esittää geometrisessa tilassa, ohjelmistojen graafiset esitykset sisältävät usein kaksi, jopa kolme tai neljä kaaviota, joista kukin vastaa erilaista todellisuutta.
Virheet voivat aiheuttaa ohjelmiston yrittää suorittaa toimintoja, joita ei voida suorittaa ( poikkeukset ): jako nollalla, etsiä olematonta tietoa. Nämä toiminnot - joita ei koskaan käytetä ohjelmiston moitteettoman toiminnan aikana - käynnistävät sekä laitteiston että ohjelmiston mekanismin, joka deaktivoi sitten viallisen ohjelmiston, mikä aiheuttaa tietokoneen kaatumisen tai palveluneston .
Vahtikoira on itsenäinen elektroninen laite, jota käytetään havaitsemaan häiriöitä. Tätä mekanismia käytetään usein kriittisten järjestelmien ja teollisen laskennan kanssa .
Blue Screen of Death on suosittu puhetapoja ja Microsoft Windows käyttöjärjestelmiin käytöstäpoisto viesti , joka näytetään poikkeus havaitaan ydin käyttöjärjestelmä. Kernel paniikki on viesti näytetään samoissa olosuhteissa UNIX- käyttöjärjestelmän järjestelmissä .
Muisti vuoto on toimintahäiriö aiheuttama virhe esiintyy muistin jakaminen toimintaa . Tämän toimintahäiriön myötä viallisen ohjelmiston käyttämän muistin määrä kasvaa jatkuvasti. Jos viallinen ohjelmisto onnistuu käyttämään lähes kaiken käytettävissä olevan muistin, se häiritsee toisen ohjelmiston etenemistä ja aiheuttaa niiden toimintahäiriöitä.
Segmentointi virhe on toimintahäiriö johtuu viasta toimintojen manipuloimiseksi osoittimia tai muistin osoitteet . Viallinen ohjelmisto yrittää lukea tai kirjoittaa tietoja muistipaikkaan ( segmenttiin ), jota ei ole tai jota ei ole sille valtuutettu. Poikkeuksen tunnistusmekanismi aiheuttaa sitten viallisen ohjelmiston poistamisen käytöstä.
Kokonaisluvun ylivuoto on toimintahäiriö johtuu viasta matemaattisen laskutoimituksen toimintaa. Viallinen ohjelmisto yrittää suorittaa laskutoimituksen, jonka tulos on suurempi kuin suurin sallittu arvo. Poikkeuksen havaitsemismekanismi aiheuttaa sitten viallisen ohjelmiston poistamisen käytöstä.
Puskurin ylivuoto on toimintahäiriö johtuu virheestä. Ohjelmisto, jonka on kirjoitettava tietoja määritettyyn ja rajoitettuun muistipaikkaan ( puskurimuisti ), ylittää tämän sijainnin rajat ja kirjoittaa sitten tietoja muuhun käyttöön tarkoitettuun paikkaan. Tämä odottamaton muutos johtaa ohjelmiston virheelliseen suoritukseen, joka voi päättyy segmentointivirheeseen tai ylivuotoon. Se on yleinen palvelinten tietoturva-aukko , jota hakkerit käyttävät usein hyväkseen . katso Exploit .
Pinon ylivuoto on toimintahäiriö, jossa koko ohjelmisto: n suorittamisen pino ylittää kapasiteetin puskuri , joka sisältää sen, mikä aiheuttaa toimintahäiriöitä samanlainen puskurin ylivuoto . Suorituspino on muistiin tallennettu tietorakenne , joka sisältää ohjelmistoautomatiikan tilan (katso prosessi (tietojenkäsittely) ), tämä rakenne tallennetaan puskurimuistiin, jonka koko on liian suuri. Nipun ylivuoto johtuu virheen aiheuttamasta virheellisestä järjestyksestä.
Kilpailutilanne (Englanti kilpailutilanne ) on vika johtuu yleensä virheestä, joka aiheuttaa kaksi yhdessä ohjelmiston automaatio työskentelee samanaikaisesti antavat erilaisia tuloksia mukaan automaatioon päättyy ennen toista.
Umpikuja (Englanti umpikuja ) on, kun vika, jossa useat automaatio odottaa toisiaan, eli ne kumpikin odottavat muiden vapauttaa resursseja se käyttää edelleen. Resurssit pysyvät lukittuina odotusten aikana, mikä voi estää muita automatismeja ja dominoefektillä estää koko järjestelmän. Estomekanismi aiheuttaa toimenpiteen peruuttamisen, kun odotusaika ylittää sallitun aikakatkaisun .
Mitä monimutkaisempi koodi on, sitä vaikeampaa on löytää vika. Vikoja, jotka riippuvat odottamattomien ja epätodennäköisten olosuhteiden yhdistelmästä, on erityisen vaikea löytää. Vuonna hakkeri kansanperinne on luokkia outoja bugeja, joiden humoristinen nimet on johdettu kuin johtavista tiedemiehistä kvanttifysiikan ja matematiikka.
Ohjelmiston vaiheittainen suorittaminen virheenkorjausohjelmalla voi aiheuttaa Heisenbugin yksinkertaisesti siksi, että ohjelmisto toimii hitaammin. Kilpailutilanteet voivat johtaa Mandelbugiin , jossa ohjelman käyttäytyminen on erilainen joka kerta, kun se suoritetaan.
Virheet ovat seurausta inhimillisistä virheistä tietokoneohjelmistojen ja laitteistojen määrittelyssä , suunnittelussa , ohjelmoinnissa ja testauksessa . Ohjelmistojen monimutkaisuus, viestintäongelmat, insinöörien koulutuksen puute sekä aikataulujen ja kustannusten paine suunnittelutyön aikana ovat tekijöitä, jotka yleensä lisäävät vikojen määrää.
Ohjelmistojen testaus on ensimmäinen askel torjua vikoja. Käytännön syistä (työn kustannukset ja määräajat) ei ole mahdollista testata ohjelmistoa kaikissa olosuhteissa, jotka se voi täyttää käytön aikana, eikä siksi voida torjua kaikkia virheitä: Microsoft Wordin kaltaisilla ohjelmistoilla on 850 komentoa ja 1600 toimintoa , testattavaksi yhteensä yli 500 miljoonassa olosuhteessa.
Korkean tason ohjelmointikielien käyttö , joka helpottaa insinöörin työtä. Kirjoituskäytäntöjen toteuttaminen on muita ennalta ehkäiseviä tekniikoita, joiden tarkoituksena on vähentää virheiden määrää.
Virheenkorjaus on vikojen diagnosointi ja korjaaminen. Aikana verkossa virheenkorjaus , insinööri toimii ohjelmiston askel askeleelta ja jokaisen vaiheen suorittaa joukko tarkastuksia. Aikana post mortem virheenkorjaus , insinööri tutkii ohjelmiston jälkeen tietokone kaatuu.
Kun virhe havaitaan ja korjataan ohjelmiston jakamisen jälkeen, toimittaja toimittaa usein korjaustiedoston , toisin sanoen sarjan, joka korvaa ohjelmiston vialliset osat korjattuilla.
Insinöörit käyttävät usein virheenseurantajärjestelmää , eli tietokantaohjelmistoa , johon eri virheet ja kullekin tehty työ syötetään:
Monet ohjelmointikielet sisältävät mekanismeja toimintahäiriöiden tarkistamiseksi. Vahvistamiseen tarvittavat ohjeet lisätään automaattisesti konekoodiin tai ohjelmiston tavukoodiin kääntämisen aikana . Ohjeet voivat aiheuttaa virheenkorjauksen , virheen diagnosoinnin ohjelmiston automaattisen aktivoinnin .
Koodin tarkastelu on altistaa äskettäin kehitetty lähdekoodin kolmas henkilö, joka lukee sen uudestaan ja etsiä vikoja.
Ohjelmistojen testaus on ensimmäinen vaihe virheiden käsittelyssä. Ne koostuvat ohjelmiston käytöstä mahdollisimman monissa olosuhteissa. Testien tarkoituksena on havaita erilaisia ongelmia:
Testit toistetaan useita kertoja edistyneenä ohjelmointina ja korjauksina korjausten vahvistamiseksi ja mahdollisten vikojen regressioiden havaitsemiseksi : virhe ilmeni toisen virheen virheellisen korjauksen seurauksena. Testaus voidaan automatisoida käyttämällä käyttäjän puolesta toimivia ohjelmistoja. Joskus kehitetään toinen ohjelmisto käytettäväksi testeissä.
Yksikkö testit on käyttää ainutlaatuinen ominaisuus ohjelmiston, jotta voidaan havaita toimintahäiriöt. Kotoutumistesteistä sisältävät käyttämällä erilaisia toimintoja ohjaukseen johdonmukaisuudesta. Validointitestejä ovat käyttää kaikkia ohjelmiston arvioida sen soveltuvuutta edellyttämällä ostajalle.
Yksikkö- ja integraatiotestit suorittaa tyypillisesti insinööri, kun taas validointitestit yleensä ostaja tai hänen edustajansa.
Toinen ennalta ehkäisevä toimenpide virheiden välttämiseksi on muodollinen todiste (tai matemaattinen esittely) ohjelman toiminnasta, yleisellä tavalla. Toisin kuin testi, joka varmistaa vain yhden tietyn käyttötapauksen, tällä todistuksella pyritään varmistamaan, että ohjelma toimii kaikissa tapauksissa käyttöolosuhteista riippumatta. Mutta kaikki muodolliset todentamistekniikat ovat hankalia ja monimutkaisia. Absoluuttisesti mitattuna emme osaa tarkistaa minkään ohjelman moitteetonta toimintaa kaikissa tapauksissa. Toisaalta on olemassa ohjelmistojen luomismenetelmiä, jotka ohjelmiston luomisen aikana asettavat elementtejä seuraamaan kulkemista kullekin välivaiheelle toisaalta ohjelmiston eritelmien tai spesifikaatioiden ja lopullisen ohjelman välillä toisaalta. Näiden valvontaelementtien ansiosta tarkastukset ovat mahdollisia, ja eritelmän noudattamisen rajoitukset voidaan asettaa ja lukita.
Alueilla, joilla vika aiheuttaisi ihmisten kuoleman (esimerkiksi ilmailussa), hankalia ja monimutkaisia menetelmiä käytetään osoittamaan ohjelmistovirheiden puuttuminen ohjelmiston suunnittelun aikana. Näin ollen Pariisin automaattisen metrolinjan 14 ohjausohjelmisto tuotettiin alun perin Z-merkinnällä . Kuitenkin Menetelmä B luotiin lopullinen versio. B-menetelmä on myös pidetään paras keino varmistaa, että tietokoneohjelma vaatimusten mukaista hänen käyttäytymisensä. Menetelmän B käyttö todellakin johtaa (automaattisesti) myös matemaattisesti osoittamaan näin luodun ohjelman vaatimustenmukaisuuden, josta tulee siten määritelmän mukaan osoitettu lause.
Tämän menetelmän monimutkaisuus aiheuttaa kuitenkin sellaista ylimääräistä työtä, että yksi ohjelmoija voi tarvita 100 kertaa pidempään ohjelman luomiseen tällä menetelmällä kuin jos hän olisi luonut saman ohjelman perinteisellä tavalla. Tämä tarkoittaa sitten, että ohjelman luominen tällä menetelmällä maksaa 100 kertaa enemmän. Tämän seurauksena tätä menetelmää käytetään sen tehokkuudesta huolimatta vain hyvin harvoin, ja on monia alueita, joilla viat voivat aiheuttaa ihmiskuolemia ja joissa luomme vain ohjelmia täynnä vikoja. Perinteisellä tavalla ja teemme sitten erittäin tiukat testit poistaa suurimman osan siitä. Niin kauan kuin virheen todennäköisyys aiheuttaa toimintahäiriön, joka tappaa ihmisiä, on pienempi kuin todennäköisyys, että ihmisen virhe tekisi samanlaisen toimintahäiriön, sitä pidetään usein "hyväksyttävänä". (Ja menetelmän B käyttämisestä lisäkustannuksia sen varmistamiseksi, ettei kukaan kuole, ei voida hyväksyä.)
Saat virheenkorjaus , tai löytää ja bugien insinöörit käyttää ohjelmistoa, debuggeri , sekä vianseurantajärjestelmä .
Virheenseurantajärjestelmää käytetään virheenkorjaustöiden koordinointiin, sitä käytetään kaikkien havaittujen toimintahäiriöiden keräämiseen, suoritettujen syiden ja korjaavien toimenpiteiden kirjaamiseen ja siten korjausten edistymisen seuraamiseen. Syyt voivat olla vikoja, mutta myös konfigurointiparametrien vikoja tai käsittelyvirheitä. Virheiden seurantajärjestelmää käyttävät viallisen ohjelmiston käyttäjät sekä insinöörit tai järjestelmänvalvojat .
Virheenkorjaus antaa mahdollisuuden analysoida ohjelmiston suoritustila tiettynä ajankohtana, käynnissä olevat toiminnot, muistissa olevat tiedot, avoimet tiedostot jne. Joiden verkossa debuggeri on mahdollista keskeyttää ohjelmiston suoritus milloin tahansa, analysoida valtion ja sitten jatkaa käsittelyä.
Post mortem -vianetsintälaitteella on mahdollista analysoida ohjelmiston suoritustila kaatumisen jälkeen. Analyysi tehdään tiedoston perusteella, joka sisältää kopion muistin sisällöstä kaatumisen yhteydessä. Tiedosto nimeltä core dump siitä Unix käyttöjärjestelmän järjestelmissä .
Ohjelmistoversio on tilaa ohjelmiston tiettynä päivänä, mukaan lukien kaikki korjauksia ja parannuksia, jotka on tehty siihen mennessä. Version sanotaan olevan alfa tai beeta, kun se vastaa ohjelmiston tilaa ennen testien keston päättymistä. Tällainen versio todennäköisesti sisältää virheitä, jotka on tällä välin havaittu ja korjattu.
Kun yksi tai useampi vika on korjattu, ne ryhmitellään korjaustiedostoksi , joka sisältää vain korjatut ohjelmistokomponentit. Sitä käyttävät kuka tahansa, joka omistaa kopion ohjelmistosta, tekemään siihen korjauksia ja sovittamaan sen tiettyyn versioon.
Ariane 5 -raketin avajaislennon epäonnistuminen vuonna 1996 johtui raketin avioniikkalaitteiden , Ariane 4 -raketissa useita vuosia menestyksekkäästi käytettyjen laitteiden, virheestä . Laskun aikana tietokonelaite, joka laski raketin sijainnin kiihtyvyytensä mukaan, ei tue Ariane 5: n kiihtyvyyksiä, 5 kertaa voimakkaampaa kuin Ariane 4: n nopeudet. Kokonaisluvun ylitys aiheutti laitteen kaatumisen. Sokeana autopilotti menetti raketin hallinnan, ja turvalaite sai sen tuhoutumaan muutaman sekunnin nousun jälkeen. Se on yksi historian kalleimmista tietokonevirheistä.
Vuonna 1962 Mariner 1 -matka koki samanlaisen tapahtuman.
1980-luvulla PDP-11: n ohjaaman sädehoitokoneen , Therac-25: n ohjelmavirheellä oli traagisia seurauksia, potilaat saivat valtavia säteilyannoksia ja ainakin viisi kuoli.
Vuoden 2000 virhe , jota kutsutaan myös vuosituhannen virheeksi : yksi tai useampi ohjelmistovirhe, joka manipuloi päivämääriä, aiheuttaa toimintahäiriöitä, kun päivämäärät ovat 31. joulukuuta 1999 jälkeen. Yksi syy on se, että laskelmat tehtiin päivämäärinä. Vain viimeisenä kaksi numeroa vuodessa.
Mahdolliset ongelmat mennessä 31. joulukuuta 1999 lähtien ensin ennakoida Bob Berner vuonna 1971. He yllyttivät merkittävä liikkeelle ohjelmistotuotannon yrityksille muutamaa vuotta ennen määräaikaa ja kokonaiskustannukset kontrolli- ja valvontatyötä. Ennakoivan huollon on arvioidaan olevan yli 600 miljoonaa dollaria.
Vuonna 2002 Michiganin Pyhän Marian armo-sairaalan tietojärjestelmä ilmoitti virheellisesti 8500 tosiasiallisesti elossa olevan potilaan kuoleman lähettämällä kodeilleen laskun ja ilmoituksen kuolemasta sekä ilmoituksen kuolemastaan vakuutusyhtiölle ja Yhdysvaltain sosiaaliturva. Kesti useita viikkoja, ennen kuin nämä kuolemat peruutettiin eri hallintojen kanssa.
Virhe voi olla joko:
Erittely voi olla vapaamuotoinen ja epämääräinen (esimerkiksi: "ohjelmisto on tekstinkäsittelyohjelma, joka ei aiheuta runtime virheitä"), tai muodollisia ja tarkka ( "sort ( t ) on permutaatio t kuten lajittelu ( t ) tilataan suhde <»), mukaan lukien matemaattisten kaavojen saamisen piste. Olettaen, että määrittely on mahdollisimman kattava, buginen ohjelma on sellainen, jonka toteutus ei täytä määritelmää.
On kyseenalaista, onko olemassa yleismaailmallisia, virheettömiä ja automaattisia menetelmiä, joita sinun tarvitsee vain noudattaa saadakseen selville, onko ohjelma buginen vai ei. Vastaus on ei. Jos tällainen menetelmä olisi olemassa, se olisi mahdollista automatisoida tietokoneella, toisin sanoen analyysiohjelmistolla. Tämän analysaattorin tulisi toimia kaikilla analysoitavilla ohjelmilla, ja sen tulisi esimerkiksi vastata seuraavaan kysymykseen: "Voiko ohjelman lopullinen tila olla virhetila ajon aikana vai onko se välttämättä tila?" Oikea (tai ei- irtisanominen) ”. Ricen lause sanoo kuitenkin, että tähän kysymykseen ei voida vastata äärettömässä valtiojärjestelmässä. Yleisemmin eritelmälle liittyviä kysymyksiä lopullinen tila ohjelma on ratkeamaton , toisin sanoen, että ohjelmisto tai automaattinen menetelmä voi vastata sitä, paitsi kysymyksiä joihin vastaus on aina totta vai aina pidä paikkaansa. Epätosi.
Voidaan vastustaa, että tietokoneet ovat rajallisia tilajärjestelmiä: jokaisella tietokoneella on rajallinen määrä muistia. Hyvin pieniä järjestelmiä lukuun ottamatta tietokoneita tulisi kuitenkin harkita analysoinnissa rajoittamattomina muistijärjestelminä. Tilan rajallisuutta käyttävät analyysitekniikat pyrkivät todellakin enemmän tai vähemmän pyöristetyllä tai optimoidulla tavalla luetteloimaan järjestelmän tilat. Järjestelmässä, jossa on n muistibittiä, on 2 n tilaa; nykyisessä henkilökohtaisessa tietokoneessa n on luokkaa 238 . Siksi voimme nähdä, että kaikki yritykset tilojen luetteloimiseksi on tuomittu epäonnistumiseen.
Virheiden yleisen automaattisen etsinnän mahdottomuus on siis perustavanlaatuinen ongelma eikä nykyisen tekniikan rajoitus.
Ohjelmistokehitysteollisuus löytää paljon töitä löytääksesi virheitä aiheuttavia ohjelmoijavirheitä.
Virheiden löytäminen ja korjaaminen tai virheenkorjaus on tärkeä osa ohjelmisto- ohjelmointia . Tietokoneiden edelläkävijä Maurice Vincent Wilkes kuvailee saavutuksiaan 1940-luvulla sanomalla, että suurin osa loppuelämästään vietetään virheiden korjaamiseen omissa ohjelmissaan. Kun tietokoneohjelmat muuttuvat yhä monimutkaisemmiksi, virheet yleistyvät ja niitä on vaikea korjata. Joskus ohjelmoijat käyttävät enemmän aikaa ja vaivaa virheiden löytämiseen ja korjaamiseen kuin uuden koodin kirjoittaminen.
Yleensä virheenkorjauksen vaikein osa on löytää virheen aiheuttanut koodin osa. Sen löytäminen on usein helppoa. Debuggereiksi kutsuttuja ohjelmia on olemassa auttamaan ohjelmoijia löytämään virheitä. Jopa virheenkorjaimen avulla virheen löytäminen on usein erittäin vaikea tehtävä.
Yleensä ensimmäinen vaihe virheen löytämisessä on löytää tapa helposti toistaa se. Kun vika on toistettu, ohjelmoija voi käyttää virheenkorjainta tai muuta työkalua tarkkailemaan ohjelman suoritusta tavallisessa yhteydessä ja mahdollisesti etsimään ongelman. Toisaalta virheen toistaminen ei ole aina helppoa. Jotkut johtuvat ohjelmiston syötöstä, jota ohjelmoijan voi olla vaikea toistaa. Muut voivat kadota, kun ohjelma käynnistetään virheenkorjaimessa ; näitä kutsutaan heisenbugeiksi (viitaten leikillisesti Heisenbergin epävarmuusperiaatteeseen ). Lopuksi, rinnakkaisten ohjelmien (jotka koostuvat useista samanaikaisesti käynnissä olevista moduuleista, esimerkiksi useilla prosessoreilla) virheitä on usein vaikea toistaa, jos ne riippuvat koneen laskelmien tarkasta aikataulusta.
Termi vian videopeleissä on jo ensisijainen merkitys virheen oletetaan kurssin kanteen. Virheen lopputulos ei aiheuta samaa epämukavuutta sen intensiteetistä riippuen. Pelaajan kädellä, joka rikkoo seinän FPS: ssä, ei ole samaa haittaa kuin kyvyttömyydellä suorittaa roolipelin päätehtävä .
Virheiden olemassaolo ei tuo vain negatiivisia pisteitä:
Termi vika sisältää muut käsitteet, joita käytetään vähemmän bugin nimen suosion vuoksi . Olisi viisasta nimetä joitain virheitä "unohtamalla" eikä virheenä.
Katso myös luokka Ohjelmistokehitys