Tarkvarasüsteemi_ohutus
Tarkvaravigadest põhjustatud õnnetusi
Üks tuntuim õnnetustesari, mis oli põhjustanud põhiliselt vigadest tarkvaras, on Therac-25 juhtum. See oli kiiritusravimasin, mille kasutamisel 1985.–1987. aastal sai vähemalt kuus inimest lubatust 100 korda võimsama kiirgusdoosi ja kellest kolm surid selle tagajärjel. Masin töötas kahel viisil, esiteks tegi väikese võimsusega otse väljastatud elektronkiir teraapiat ning teiseks teraapiaks väljastas röntgenikiiri. Need saadi kui suure võimsusega väljastatud elektronkiirtele seati ette konverter, mis selle röntgenikiirteks muutis, filter mis need suurele pinnale laiali suunas ning kamber mis suunas ning mõõtis röntgenikiirte tugevust. Õnnetus juhtus, kui operaator oli ekslikult valinud suurema väljundvõimsuse x-klahviga, märganud seda ning sellele järgnevalt valinud "nool üles" ning "e" korrektse viisi jaoks ning vajutanud Enter-klahvi. Seejärel said patsiendid justkui suure elektrilöögi ning arvasid, et midagi läks valesti, operaatorid usaldasid liigselt masinat ning arvasid, et kõik on siiski korras. Antud juhul oli masin väljastanud selle suure võimsusega elektronkiire otse väiksele alale, sest väljundviis jäi muutmata, aga ka vahepealseid muutvaid seadmeid ei olnud kiirel ees. Järgnenud juurdlused leidsid: et tootja polnud lasknud koodi eraldi üle kontrollida; oli taaskasutatud eelmise mudeli koodipõhja, millel olid sisemised riistvara blokeeringud, et kaks viisi segamini ei töötaks ; süsteem sai aru, et midagi on valesti, aga kuvas ainult teksti "viga", millele järgnes arv vahemikus 1–64, seda polnud kasutusjuhendis mainitud, ning sai vajutada p-nuppu, mis lihtsalt tühistas lihtsalt, ja sai jätkata. Enamik tänapäeva meditsiiniaparatuuri sisaldab arvutisüsteeme ning pea kõik nende tagasikutsumised või leitud vead on just tarkvara vigade pärast. Välja on toodud, et põhjus seisneb selles, et kuigi osatähtsus süsteemi korrektses töötamises on võrdne riistvaraga, siis erinevalt masinaehitusest pole tarkvaraarenduses välja töötatud ning järjepidevas kasutamises tarkvara ohutust tagavaid meetodeid ega eeskirju. Tarkvaratööstus on viimase ajani seadnud põhiliselt esile ainult produktiivsuse ning keskmiselt jääb 1000 koodirea kohta sisse algselt 50 viga, 75% vigadest avastatakse testimise käigus, ülejäänud 25% jääb kasutajate avastada. Kvaliteetseks loetakse koodi, millel on 1–5 viga tuhande koodi rea kohta. Mikrolaine ahju juhtprogramm koosneb aga juba mõnesajast või tuhandest koodireast ning suuremad süsteemid nagu lennuki juhtsüsteemid koosnevad mitmest sajast tuhandest või lausa miljonist koodireast. Kui tavaliselt teeb personaalarvuti kasutaja programmi vea järel lihtsalt restardi, teeb oma töö uuesti või laseb inimesel arvuti möödapaneku parandada, siis ohutuskriitilistes süsteemides see võimalik pole ning veale järgneb tavaliselt õnnetus. Peamised ohutuskriitilised süsteemid on juba mainitud meditsiin, lennundus, muud liiklusvahendid, näiteks autod ja rongid, energeetika valdkond (sh tuumaenergia) ning relvad. Katastroofe on aga ka kaasnenud ka tavapärasemate tarkvaraprogrammide vigadest, näiteks üks naftaplatvorm (Sleipner A) varises paigaldamisel kokku, kuna ei arvutatud käsitsi üle mudeldusprogrammi tugevusarvutusi, milles esines viga ning raudbetoon alus ehitati liiga õhuke merepõhjas olevale rõhule vastupidamiseks.