Kasutaja:JVälja/Tarkvaraviga

Allikas: Vikipeedia

Tarkvaraviga (inglise keeles software bug) on defekt, viga või rike arvutiprogrammis või -süsteemis, mistõttu see annab väära või ootamatu tulemuse või käitub looja poolt tahtmatutel viisidel. Tarkvaravigade leidmise ja parandamise protsessi nimetatakse silumiseks (debugging)[1] ning alates 1950. aastatest on osadesse arvutisüsteemidesse ka sisseehitatud automaatsed tõrje-, tuvastus- ning parandusmeetmed.

Enamikku tarkvaravigu põhjustavad programmide disainimisel või lähtekoodi kirjutamisel tehtud vead. Mõnikord võib vea allikas olla ka kompilaator. Programm, mis sisaldab vigu, mis oluliselt segavad programmi funktsioone, on vigane (buggy). Mõnikord võivad vead viia programmi kokkujooksmiseni või hangumiseni. Mõned vead loetakse turvavigadeks ning need võivad võimaldada pahatahtlikele kasutajatele autoriseerimata ligipääsu seadmetele.

Mõned tarkvaravead on ka viinud reaalsete õnnetusteni. Vead Therac-25 kiiritusravimasina koodis olid 1980. aastatel mitme patsiendi surma põhjustajad, põhjustades andmejooksu tõttu üledoose. 1996 kaotas ESA Ariane 5 raketi prototüübi, kuna raketi juhtimissüsteemis oli viga.

2002. aastal leidis USA Kaubandusministeerium, et tarkvaravead lähevad USA majandusele maksma 59 mld dollarit aastas.[2]

Ajalugu[muuda | muuda lähteteksti]

Vihikumärge, kus on pilt Harvad Mark II arvutist leitud ööliblikast ning kus on inglisekeelne tekst: esimene juhtum tegeliku bug'i leidmisest.
Harvad Mark II-st leitud ööliblikas.

Algselt viidati inglisekeelse sõnaga bug mehhaanilistele vigadele. Nii on seda sõna kasutanud nii Thomas Edison 1870. aastatel.[3] Hiljem on levinud lugu, kus 1946 avastati Harvard Mark II arvutis vea põhjuseks korpusesse pääsenud ööliblikas, ning selle järgi hakati ka tarkvaravigu nimetama bug-ideks(bug tähendab inglise keeles putukat).[4] Lisainfot Harvard Mark II kohta leiab siit.

Ennetamine[muuda | muuda lähteteksti]

Kõige levinum vigade tekkepõhjus on programmeerija tehtud loogikaviga koodis, mille tõttu programm ei tee täpselt seda, mis temalt oodatakse, kuid siiski käivitub. Mitmed arengud programmeerimisstiilides on mõeldud selliste vigade vähendamiseks. Kompileeritavad programmeerimiskeeled võivad osa trüki ja loogikavigu avastada juba kompileerimisel.

Arendamise juures on samuti mitmeid meetodeid vigade vältimiseks:

Välearenduse puhul antakse tihti välja uusi tarkvaraversioone suhteliselt väikeste muudatustega. See aitab hoida tarkvara töötavas seisus, minimeerida vigade ulatust ning vigade märkamisel on nende parandamine lihtsam.

Testimispõhises arenduses keskendutakse sellele, et tarkvara oleks võimeline läbima kõik vajalikud testid. Selleks kirjutatakse enamasti testid enne tarkvara ennast ning iga koodijuppi arendatakse kuni see kõik vastavad testid läbib. Seega on lõplik tarkvara juba testitud ning peaks olema suuremas osas veavaba.

Kolmas levinud meetod on avatud lähtekoodiga arendus, kus kõikidel on võimalik lähtekoodi näha ning testida. Selle kaudu on testijaid palju rohkem kui muidu oleks võimalik ning samamoodi ka erinevaid seadmeid ning olukordi.

Silumine[muuda | muuda lähteteksti]

Vigade otsimine ning parandamine on oluline osa igasugusest programmeerimisest. Enamasti on kõige keerulisem osa vea põhjuse tuvastamine. Kui vea põhjus on teada, on selle parandamine enamasti võrdlemisi lihtne. Vigade leidmiseks on võetud kasutusele eraldi programmid, mida kutsutakse siluriteks (debugger). Need jooksutavad programmi ridahaaval, et aidata tuvastada, kus programmis viga tekib. Mõnikord ei ole vea põhjuseks aga viga koodis, vaid viga programmeerija loogikas ja plaanis. Selliseid vigu on keerulisem avastada, kuna kood ise võib olla veatu.

Tüübid[muuda | muuda lähteteksti]

Aritmeetilised vead[muuda | muuda lähteteksti]
  • Nulliga jagamine
  • Ümardamisvead
Loogikavead[muuda | muuda lähteteksti]
Süntaksivead[muuda | muuda lähteteksti]
  • Vale operaatori kasutamine
Ressursivead[muuda | muuda lähteteksti]
  • Initsialiseerimata muutuja kasutamine
Mitmelõimelisuse vead[muuda | muuda lähteteksti]
  • Ummikseis
  • Järjekorra muutumine
Kasutajaliidese vead[muuda | muuda lähteteksti]
  • Vale API kasutamine
Koostöö[muuda | muuda lähteteksti]
  • Aegunud kommentaarid
  • Dokumentatsiooni ja lõpptulemuse erinevused

Tuntud näited[muuda | muuda lähteteksti]

Mitmed suuremad tarkvaravead on saanud laialdaselt tuntuks. Ilmselt kõige kuulsam neist on aasta 2000 probleem, teise nimega Y2K, kus kardeti, et 2000. aasta alguses toimub suur majanduslik krahh, kuna arvutisüsteemid arvavad, et on aasta 1900. Hirmu aluseks oli see, et paljud tolleaegsed süsteemid eristasid aastaid ainult viimase kahe arvu järgi, kuna kogu arvutite areng oli toimunud 20. sajandi jooksul. [5]Tegelikult siiski olulisi probleeme ei esinenud, kuna enamik olulisi süsteeme olid selle hirmus ennetavalt parandatud. [6]Teine tuntud tarkvaraviga toimus aastal 1999, kui USA kosmoseagentuur NASA saatis Marsile kosmosesondi Mars Climate Orbiter, mille eesmärgiks oli uurida Marsi kliimat ning atmosfääri. Kuid jõudes Marsi orbiidini, kadus ootamatult ühendus sondiga ning sond hävis Marsi atmosfääris. Hiljem avastati, et ootamatu käitumise ning 125 mln dollarit maksnud sondi kaotuse põhjuseks oli lihtne viga arvutustes, kuna osad arvutused olid tehtud meetermõõdustikus ning osad USA-s levinud inglise mõõtühikute süsteemis.[7][8]

Viited[muuda | muuda lähteteksti]

  1. "TÜ Arvutiteaduse instituudi programmeerimise algkursuse õpik".
  2. "Software Errors Cost U.S. Economy $59.5 Billion Annually". NIST News Release. 28. juuni, 2002. {{netiviide}}: kontrolli kuupäeva väärtust: |aeg= (juhend)
  3. Alexander B. Magoun, Paul Israel (1. august 2013). "https://spectrum.ieee.org/did-you-know-edison-coined-the-term-bug#toggle-gdpr". IEEE Spectrum. {{netiviide}}: välislink kohas |pealkiri= (juhend)
  4. Sharron Ann Danis (16. veebruar 1997). "Rear Admiral Grace Murray Hopper". https://ei.cs.vt.edu/. {{netiviide}}: välislink kohas |väljaanne= (juhend)
  5. "Aasta 2000 probleem puudutab ka firma tippjuhte". Äripäev. 3. juuni 1998.
  6. Lauri Jürisoo (27. september 2013). "Aasta 2000 probleem on ammu unustatud; nüüd ohustab arvuteid aasta 2038!". Delfi.
  7. "23. septembril 1999 teatas NASA, et on kaotanud kontakti Marsi kliimat ja atmosfääri uurima saadetud kosmoselaevaga The Mars Climate Orbiter". ERR Novaator. 23. september 2012.
  8. Lisa Grossman (10. november 1999). "Nov. 10, 1999: Metric Math Mistake Muffed Mars Meteorology Mission". WIRED.