Elektronika.lt

Elektronika.lt - elektronikos, informacinių ir
ryšių technologijų portalas

Adresas: http://www.elektronika.lt
El. paštas: info@elektronika.lt
 Atspausdinta iš: http://www.elektronika.lt/straipsniai/pazintiniai/11703/kada-programines-klaidos-buna-mirtinos-therac-25-istorija/spausdinti/

Kada programinės klaidos būna mirtinos: „Therac-25“ istorija

Publikuota: 2008-05-27 07:01
Tematika: Pažintiniai, įdomybės
Skirta: Pradedantiems
Autorius: Mindaugas Barysas
Aut. teisės: ©Alfa.lt
Inf. šaltinis: Alfa.lt

Technologijoms žingsniuojant į priekį šimtamyliais žingsniais, kompiuteriai tampa vis labiau neatskiriami nuo mūsų gyvenimo būdo – neretai, patys nė nesusimąstydami, savo gyvybę saugoti atiduodame į šiems nuostabiems ir sudėtingiems aparatams. Tačiau šalia angelo paveikslo egzistuoja ir demono sąvoka: blogai užprogramuotas draugiškas ir gelbstintis kompiuteris greitai gali tapti netgi žudiku.


Technologijoms žingsniuojant į priekį šimtamyliais žingsniais, kompiuteriai tampa vis labiau neatskiriami nuo mūsų gyvenimo būdo – neretai, patys nė nesusimąstydami, savo gyvybę saugoti atiduodame į šiems nuostabiems ir sudėtingiems aparatams.

Gal todėl, kad draugiško ir visad gelbstinčio kompiuterio paveikslas baigia įsitvirtinti mūsų kolektyvinėje pasąmonėje, nė kiek nebestebina ir tai, kad kompiuteriai plačiai panaudojami medicinoje – tiek diagnostinėje, tiek terapinėje.

Tačiau šalia angelo paveikslo egzistuoja ir demono sąvoka: blogai užprogramuotas draugiškas ir gelbstintis kompiuteris greitai gali tapti netgi žudiku.

Prieš apšaukdami technofobais tuos, kurie sako, kad klysti – žmogiška, ir kad kompiuteris – tik įrankis žmogaus rankose, žinokite, kad mirtinų klaidų buvo, ir ši – „Therac-25“ istorija – viena iš jų.

„Therac-25“ buvo sukurtas tam, kad padėtų gelbėti gyvybes. Prieš tai kompanijos „AECL“, sukūrusios „CANDU“ branduolinius reaktorius, gaminti radioterapiniai aparatai „Therac-6“ ir „Therac-20“ buvo gerokai silpnesni, ne tokie našūs, ir buvo valdomi iš esmės mechaniškai – kompiuteris buvo naudojamas tik kaip priedas. „Therac-25“, naujos kartos, gerokai efektyvesnis ir mažesnis radioterapijos aparatas turėjo dvi inovatyvias naujoves: jis turėjo du švitinimo režimus ir buvo valdomas „DEC“ firmos kompiuterio „PDP11“.

Kada programinės klaidos būna mirtinos: „Therac-25“ istorija

Režimai buvo valdomi volframo plokštele, uždengiančia elektronų srautą: uždengus būdavo galima švitinti didelės energijos (25 MeV) rentgeno spinduliais, o neuždengus – „silpna“ (5–25 MeV) elektronų srauto srove.

Tiesa, kurdami „Therac-25“, „AECL“ padarė porą esminių klaidų: jeigu „Therac-6“ ir „Therac-20“ buvo sukurti pagal išbandytus radioterapijos aparatus, veikiančius be kompiuterio įsikišimo, tai „Therac-25“ buvo sukurtas taip, kad būtų valdomas tik kompiuterio, be to, jeigu „Therac-20“ turėjo elektronines ir mechanines apsaugos sistemas, nepriklausančias nuo kompiuterio, tai, kurdami „Therac-25“, „AECL“ taupumo sumetimais nusprendė jų atsisakyti ir visą atsakomybę užkrauti ant programinės įrangos pečių.

Programinė įranga irgi buvo kuriama taupant laiką ir lėšas: ji buvo pagrįsta „Therac-6“ programiniu kodu, naudojo kai kurias „Therac-20“ paprogrames, buvo rašoma naudojant „PDP assembly“ kalbą ir nebuvo pakankamai dokumentuota.

Nepaisant to, 1983 metais „Therac-25“ buvo beveik paruoštas naudojimui. „AECL“ atliko įrenginio saugumo analizę, į ją neįtraukusi programinės įrangos, ir padariusi tris prielaidas:

  • Programavimo klaidų skaičius sumažintas iki minimumo testuojant simuliatoriuje.
  • Programinė įranga neprastėja dėl susidėvėjimo, nuovargio ar pakartotinio naudojimo.
  • Programos vykdymo klaidos įvyksta dėl aparatinės dalies gedimų ar atsitiktinių klaidų, sukeltų alfa dalelių ar elektromagnetinio triukšmo.

Vienuolika „Therac-25“ iškeliavo į ligonines – penki į JAV, šeši į Kanadą. Nuo 1983 iki 1987 metų – kai aparatai buvo sugražinti į gamyklą dėl „esminių konstrukcijos pakeitimų“, į kuriuos įėjo ir apsaugos įrengimų, nepriklausančių nuo programinės įrangos, įdiegimas – įvyko šešetas įvykių, iš kurių trys baigėsi paciento mirtimi.

Pirmasis incidentas įvyko 1985 metais, Kennestono regiono onkologiniame centre, praėjus šešiems mėnesiams nuo aparato eksploatacijos pradžios – 61 metų amžiaus moteris patyrė radiacinį nudegimą, po kurio ji nebegalėjo valdyti dešinės rankos ir teko amputuoti krūtį. Nukentėjusioji padavė onkologinį centrą ir „AECL“ į teismą.

„AECL“ atsisakė patikėti, kad radiacinį nudegimą galėjo sukelti „Therac-25“, sumokėjo nežinomo dydžio kompensaciją ir teismo išvengė. Verta atkreipti dėmesį ir į tai, kad „AECL“ neturėjo procedūrų tokių incidentų sekimui ir nesiėmė ieškoti galimos problemos.

Antrąja „Therac“ auka tapo keturiasdešimtmetė moteris, prieš tai jau turėjusi 23 „Therac“ radioterapijos seansus. Praėjus vos 5 sekundėms nuo terapijos pradžios, aparatas nustojo dirbęs ir kompiuterio ekrane technikui užsižiebė užrašas: „No Dose“. Technikas, pripratęs prie tokių aparato „ožiavimųsi“, paspaudė „P“ – atseit, tęsti. Šis scenarijus pasikartojo penkis kartus, ir pacientė gavo apie 15000 radų radiacijos (kai normali terapinė dozė siekia 200 radų). Moteris mirė nuo vėžio vos už trijų mėnesių – bet net jei ji ir būtų likusi gyva, jai dėl radiacijos perdozavimo būtų reikėję protezuoti visą klubą. Incidentas įvyko Kanadoje, Ontarijo vėžio fondo ligoninėje, esančioje Hamiltone.

Trečias incidentas įvyko Yakima miestelyje, Vašingtono valstijoje – pacientas patyrė radiacinį nudegimą, tačiau po daugelio metų pilnai išgijo.

Žiauriausias įvykis buvo ketvirtas – Tyler miestelyje, Teksase. Vyriškos lyties pacientui buvo vykdoma radioterapija nugaros srityje. Aparatas buvo nustatytas rentgeno spinduliavimui, taigi operatorius tiesiog spustelėjo klavišą „aukštyn“ ir pakeitė režimą, taip aktyvuodamas dar nežinomą programinės įrangos klaidą. Paleidus aparatą, kompiuteris parodė klaidą „Malfunction 54“ („Gedimas 54“), reiškiančią, kad buvo išspinduliuota per maža dozė. Technikas paspaudė „P“.

Pacientas, jau pirmąjį kartą gavęs gerokai per didelę dozę, kėlėsi nuo stalo – ir gavo antrąją dozę. „Therac-25“, buvęs šioje ligoninėje, turėjo neveikiančią garso ir vaizdo stebėjimo įrangą, todėl technikas nežinojo, kad apšvitino pacientą, kuris per pirmas savaites nustojo valdyti abi kojas ir kairę ranką, o po penkių mėnesių numirė. Jis tapo pirmąja auka, kurios mirtis buvo tiesiogiai susijusi su „Therac-25“ aparatu. Penktas įvykis įvyko toje pačioje klinikoje, kai tas pats technikas padarė tą pačią klaidą – „ištaisė“ režimą ir kompiuteris parodė lemtingą klaidos pranešimą „Malfunction 54“. Šįkart garso stebėjimo įranga buvo sutaisyta ir technikas išgirdo, kaip žmogus, gavęs dozę suklykia ir ima dejuoti. Pacientui radioterapija buvo vykdoma veido srityje, todėl milžiniška radiacijos dozė pažeidė smegenis, žmogus krito į komą ir po trijų savaičių mirė.

Šeštas ir paskutinis incidentas vėl įvyko Yakima, Vašingtono valstijoje – atliekant terapiją aparatas vėl „užsikirto“, vėl buvo paspaustas mygtukas „P“, žmogus, kuriam reikėjo silpno švitinimo, gavo per didelę dozę, ir mirė po trijų mėnesių.

Kyla klausimas – kas įvyko? Kas kaltas?

Pasirodo, aparate buvo panaudota ankstesnių modelių, turėjusių nuo programinės įrangos nepriklausomus blokavimo mechanizmus ir todėl mažiau jautrių programavimo klaidoms, programinė įranga, kuri dėl aparatinių apribojimų negalėjo patikrinti, ar visi davikliai veikia teisingai.

Pagrindinėje programoje tas pats kintamasis buvo naudojamas tiek operatoriaus įvestų duomenų, tiek filtrų sistemos padėties analizei. Greitai įvedant duomenis, susidarydavo lenktynių aplinka. Buvo nustatyta, kad 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). Vienas esminis kintamasis buvo nustatomas į loginio vieneto būseną vienetu padidinant jo reikšmę. Tam buvo skirtas vienas baitas, todėl 256 kartus pakartojus tokią operaciją, įvykdavo buferio perpildymas, ir kintamojo reikšmė „peršokdavo“ į nulį.

Klaidos, kurias padarė pati „AECL“ – iki skaudumo paprastos: kompanija saugojo programinės įrangos kodą paslaptyje ir neleido jo patikrinti nepriklausomiems ekspertams, neatliko pakankamai išsamaus įrangos testavimo – tam buvo skirta vos 2700 valandų. Atskiri programos moduliai nebuvo testuojami pavieniui, buvo tikrinama jau surinkta mašina.

Sistemos dokumentacija irgi nebuvo baigta: joje nebuvo aiškaus klaidų kodų aprašymo – pranešimai apie klaidas pasirodydavo kaip „Malfunction 1 ... Malfunction 64“ ir joje nebuvo nė užuominų, kurie iš šių pranešimų rodo, kad mašiną eksploatuoti darosi pavojinga.

Ir visgi, ko gero, didžiausia iš visų klaidų buvo ta, kad kompanija iš pradžių netikėjo pirmaisiais pranešimais apie netinkamą aparato darbą ir juos tiesiog atmetė. Jeigu „AECL“ būtų sureagavusi iškart po pirmojo incidento, tikėtina, kad likusių penkių įvykių ir trijų mirčių būtų buvę išvengta.


Alfa.lt
‡ 1999–2024 © Elektronika.lt LTV.LT - lietuviškų tinklalapių vitrina Valid XHTML 1.0!