Therac-25

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Peršokti į: navigaciją, paiešką
 NoFonti.svg  Šiam straipsniui ar jo daliai trūksta šaltinių ar nuorodų į juos.
Jūs galite padėti Vikipedijai įrašydami tinkamas išnašas ar nuorodas į šaltinius.
 Broom icon.svg  Šį puslapį ar jo dalį reikia sutvarkyti pagal Vikipedijos standartus – neenciklopedinis stilius: kalbama, kad..?
Jei galite, sutvarkykite; apie sutvarkymą galite pranešti specialiame
Vikipedijos projekte.

Therac-25 yra spindulinės terapijos mašina, dėl programinės įrangos klaidų tarp 1985 ir 1987 m. nužudžiusi mažiausiai šešis[reikalingas šaltinis] pacientus. Mašiną gaminto Atomic Enerty of Canada Limited. Pacientai mirė dėl gydymo metu mašinos išspinduliuotų gerokai per didelių radiacijos dozių.

Mašina turėjo du režimus: stipraus ir silpno spinduliavimo. Stipraus spinduliavimo režimo metu turėjo būti įjungiama speciali besisukančių filtrų sistema. Mirties atvejai įvyko kuomet mašina dėl programinės įrangos defektų įjungdavo stipraus spinduliavimo režimą, tačiau filtrų sistema nepradėdavo suktis.

Įrangos defektą atkurti buvo labai sunku, nes jis pasireikšdavo tik jei instrukcijos mašinai buvo operatoriaus renkamos labai greitai. Greitai rinkti instrukcijas reikia nemažo įgudimo. Klaidingas sistemos darbas buvo akivaizdžiai įrodytas tik po to, kai vienam pacientui buvo padaryta rentgeno nuotrauka ir iškart po jos (užmiršus ištraukti iš po paciento juostą) - spindulinė terapija.

Kalbama, jog tai rimčiausias pasekmes turėjęs programinės įrangos defektas žmonijos istorijoje.

Priežastys[taisyti | redaguoti kodą]

Incidentus tirianti komisija nustatė, jog mašinos gamintojas yra atsakingas už įvykusias nelaimes dėl šių priežasčių:

Organizacinės priežastys[taisyti | redaguoti kodą]

  • Firma saugojo programinės įrangos kodą paslaptyje ir neleido jo patikrinti nepriklausomiems ekspertams.
  • Firma neatliko pakankamai išsamaus įrangos testavimo. Atskiri programos moduliai nebuvo testuojami pavieniui, patikrinta buvo tik jau galutinai surinkta mašina.
  • Sistemos dokumentacijoje nebuvo aiškaus klaidų kodų aprašymo. Pranešimai apie klaidas pasirodydavo kaip Malfunction 1 … Malfunction 64. Instrukcijoje nebuvo jokių užuominų, kurie iš šių pranešimų rodo, jog mašiną ekspoatuoti darosi pavojinga.
  • Firma netikėjo pirmaisiais pranešimais apie netinkamą darbą ir juos tiesiog atmetė.

Techninės priežastys[taisyti | redaguoti kodą]

  • Nebuvo jokių aparatinės įrangos (ne programinių) mazgų, kurie blokuotų spinduliavimą jei filtrų sistema nesisuka.
  • Buvo panaudota ankstesnių modelių programinė įranga (perdirbimo klaida). Tačiau šie ankstesni modeliai turėjo minėtus nuo programinės įrangos nepriklausomus blokavimo mechanizmus ir todėl buvo mažiau jautrūs programavimo klaidoms. Nebuvo jokių galimybių patikrinus sužinoti, jog neprograminiai blokavimo mechanizmai kartkartėm iš tiesų suveikia, apsaugodami pacientus nuo programos klaidų.
  • Mašinos aparatūra neteikė programinei įrangai galimybės patikrinti, ar visi davikliai veikia teisingai.
  • Tas pats kintamasis buvo naudojamas tiek operatoriaus įvestų duomenų, tiek filtrų sistemos padėties analizei. Greitai įvedant duomenis, susidarydavo lenktynių aplinka. Buvo nustatyta, jog 8 sekundes trunkančio magnetų nustatymo metu sistema visiškai ignoruodavo įvedamą informaciją, nors operatorius to nematydavo (klaviatūra reaguodavo, ir renkami simboliai pasirodydavo ekrane).
  • Vėliavės tipo kintamasis buvo nustatomas į loginio vieneto būseną vienetu padidinant jo reikšmę. Kintamąjam saugoti buvo skirtas vienas baitas. Taigi, 256 kartus pakartojus tokią operaciją, įvykdavo aritmetinis perpildymas, ir padidinimas vienetu nustatydavo kintamojo reikšmę į nulį.
  • Programinė įranga buvo parašyta sunkiai derinama ir analizuojama asemblerio kalba.