Therac-25

**Therac-25** – spindulinės terapijos mašina, dėl programinės įrangos klaidų tarp 1985 ir 1987 m. potencialiai mirtina radiacijos doze apšvitinusi mažiausiai šešis pacientus. Mašiną gamino *Atomic Energy of Canada Limited*. Mažiausiai trys pacientai neabejotinai mirė dėl gydymo metu mašinos išspinduliuotų gerokai per didelių radiacijos dozių, viršijančių planuotas keletą tūkstančių kartų.

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.

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

### Organizacinės priežastys
* 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ą eksploatuoti darosi pavojinga.
* Firma netikėjo pirmaisiais pranešimais apie netinkamą darbą ir juos tiesiog atmetė.

### Techninės priežastys
* 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ėliavos tipo kintamasis buvo nustatomas į loginio vieneto būseną vienetu padidinant jo reikšmę. Kintamajam 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.

## Šaltiniai