helse-it
Programvaren som ble seriemorder
Er dette verdens verste programvare-tabbe? På åttitallet ble flere kreftpasienter utsatt for opptil 100 ganger så høy strålingsdose som de skulle hatt.
Digi har skrevet om dyre tabber tidligere, men de var dyre målt i kroner og øre – ikke liv.
Strålebehandlingsmaskinen Therac-25, derimot, viste seg å ha en programmeringstabbe som kostet flere mennesker livet.
Kreftpasientene skulle få strålebehandling som med litt flaks kunne gjøre dem friske.
I stedet ble de i praksis «grillet» av mange ganger så høy stråledose som de skulle ha.
Styrt av programvare
Therac-25 var en nyskapning da den ble lansert på tidlig 80-tall. Den var ikke bare fysisk mindre enn forgjengerne Therac-6 og Therac-20, den var også billigere å produsere, takket være en helt ny måte å generere strålingen på.
I tillegg var den helt og holdent styrt ved hjelp av programvare.
Både Therac-6 og Therac-20 ble kontrollert med en DEC PDP-11-datamaskin, men kunne om nødvendig fungere og brukes uten denne.
Men med utviklingen av Therac-25 bestemte produsenten AECL seg for å gjøre maskinen programvare-styrt.
Den var i stor grad en videreført versjon av samme programvare som de to forgjengerne brukte.
Men disse maskinene var også delvis mekanisk styrt, og hadde blant annet mekaniske sikkerhetsmekanismer. I Therac-25 var disse fjernet, delvis for å spare noen kroner i produksjonskostnad, og tanken var at programvaren uansett gjorde dem unødvendige.
Det skulle vise seg å være tragisk feil.
Hobbykoder
Koden var skrevet av en enkelt ansatt som hadde programmering som hobby, og ble ikke vurdert da AECL gjorde en sikkerhetsvurdering av maskinen i 1983. Mannen bak koden forlot selskapet i 1986, og er hittil ikke identifisert noe sted.
Strålingskilden i Therac-25 genererte elektronstråler som kunne sendes mot svulster som satt nær overflaten. Elektronstrålen er også for kraftig, og reguleres med magneter som plasseres foran strålingskilden og sprer strålen slik at området som skal bestråles får akkurat riktig dose.
Men slike elektronstråler sprer seg lett i vevet, og går ikke dypt nok til å nå svulster som sitter dypere. Derfor hadde maskinen også et modus der en tynn metallfolie ble plassert i banen for elektronstrålen, i stedet for magnetene. Det genererer røntgenstråling, som kan gå dypere.
Problemet er bare at prosessen er lite effektiv, så styrken på elektronstrålen måtte i slike tilfeller økes kraftig for å generere nok røntgenstråling.
Maskinen byttet mellom elektron-modus og røntgen-modus – i tillegg til et sikte-modus som bare sendte ut lys – ved å rotere en dreieskive som speil, metallfolie og magneter var montert på. Originalt hadde denne mikrobrytere som skulle hindre feil posisjon, men det ble på et punkt erstattet av programvaren som konstant skulle sjekke dreieskivens posisjon.
AECL uttalte etter det at sikkerheten hadde økt med 9.999.900 prosent. Men da hadde allerede to personer mottatt tusenvis av rads for mye. Den siste døde bare en måned før utsagnet.
Avviste feil
Men alarmen gikk ikke hos selskapet, og bare en måned etter det igjen var det enda en pasient som fikk en strålingsdose som var 100 ganger for kraftig.
Etter dette begynte leger og annet helsepersonell å ane ugler i mosen. Men etter å ha undersøkt saken uttalte AECL to måneder senere at strålingsskadene pasientene hadde blitt påført umulig kunne stamme fra en funksjonsfeil med Therac-25, eller noen som helst operatørfeil av den.
Likevel, i løpet av de neste 12 månedene tok nettopp slike feil livet av ikke mindre enn tre pasienter som alle fikk mange ganger så kraftig stråledose som de skulle ha.
«P» for «proceed»
Når man endelig fant ut av det, viste problemet seg å ikke overraskende skyldes en kombinasjon av dårlig programvare og menneskelig feil.
Therac-25s programvare bestod av rundt 100.000 linjer med kode. Det er lite etter dagens standard, men likevel komplisert nok.
Og, skulle det vise seg – fullt av feil.
Ofte fikk operatørene feilmeldinger som ikke var nøyere spesifisert, som for eksempel «Malfunction 54». Tallet kunne være fra 1 til 64, og de kunne dukke opp opptil fire–fem ganger om dagen. Noen forklaring på betydningen av hvert tall var ikke tilgjengelig og var ikke oppført i noen brukermanual.
Disse feilkodene var ofte resultat av mindre feil, og operatørene kunne enkelt forsøke på nytt ved å trykke «P» for «proceed», opptil fem ganger per feil.
Dette gikk det automatikk i, skulle det senere vise seg, og operatørene trykket svært ofte P uten å vite hva som var galt.
Og i de fleste tilfeller gikk det helt greit, siden dette var en mulighet de i teorien kun hadde når det var småfeil som inntraff. Alvorlige feil krevde at oppsettet av behandlingen med maskinen måtte gjøres på nytt.
«Malfunction 54»
Nettopp «Malfunction 54» skulle senere vise seg å være langt mer alvorlig å hoppe over, enn alle de andre feilkodene.
Dreieskiven i Therac-25 brukte hele åtte sekunder på å rotere fra en posisjon til en annen, og dersom operatøren var for kjapp med å trykke på aktiveringsknappen, ville «Malfunction 54» inntreffe.
Ingen stråle ville da aktiveres, men operatøren kunne trykke «P» for «proceed», og strålen ville da aktiveres uten at verken magneter eller metallfolie var i posisjon.
Programvaren sjekket i slike tilfeller ikke dreieskivens posisjon, og bare antok at den var riktig. Dermed var det da ingen ting som hindret at pasienten fikk maksimaldosen – ofte 100 ganger så kraftig som intensjonen var.
Og det uten at systemet meldte noe annet galt enn «Malfunction 54».
«Ingen andre lignende uhell»
Feilen ble på et punkt oppdaget av en operatør og meldt videre til AECL. Men ingen klarte ikke å replisere feilen, og AECL fortalte sykehuset at en overdose var umulig, og at de ikke kjente til andre lignende hendelser.
Dette var i mars 1986, og da hadde allerede tre andre pasienter opplevd slike enorme overdoser av stråling. Men ingen plukket det opp, og etter to-tre uker ble den aktuelle maskinen satt i drift igjen.
Men nå begynte noen å mistenke at ikke alt var som det skulle være, og en operatør og fysiker ved et medisinsk senter bestemte seg for å arbeide natten igjennom med å forsøke å fremprovosere «Malfunction 54».
Det tok dem mange timer med forsøk av ulike slag, men til slutt lyktes de.
AECL og tilsynsmyndighet i USA ble kontaktet, og ikke lenge etter gikk det ut melding om å umiddelbart slutte å bruke prosedyren som førte til «Malfunction 54».
«Overflow»
Bruk av maskinene ble stoppet mens programvaren ble korrigert og oppdatert, men etter noen måneder ble Therac-25 atter en gang satt i tjeneste, i november 1986.
Seks uker senere, i midten januar 1987, drepte Therac-25 på nytt.
Det viste seg at Therac-25 hadde enda en programvarefeil, og denne hadde ikke blitt fikset.
Prosessen som hele tiden sjekket dreieskivens posisjon var bare allokert med én byte minne.
Når dreieskiven var i korrekt posisjon, var status oppgitt som 000. I alle andre tilfeller talte verdien opp derfra og programvaren ville ikke tillate at strålen ble aktivert inntil justering ble gjort og telleren satt tilbake til 000.
Men, når verdien nådde 255 og en feil posisjon ble oppdaget, ville telleren tikke over til 000, selv om dreieskivens posisjon ikke var riktig.
Dersom en operatør da aktiverte strålen, kunne en pasient motta maksimal dose uten at de reduserende magnetene eller metallfolien var i posisjon, akkurat som før.
Og det var nettopp det som skjedde 17. januar 1987, da Therac-25 tok sitt siste liv.
I februar 1987 ble Therac-25 atter en gang erklært defekt, og alle enheter tatt ut av tjeneste. All behandling ble stoppet inntil et stor mengde sikkerhetsutbedringer ble utført.
23 ulike endringer i programvaren og seks ulike fysiske sikkerhetsfunksjoner ble lagt til, og i juni 2987 ble Therac-25 igjen godkjent for bruk. Ryktet var imidlertid da grundig ødelagt, og i 1988 la AECL ned sin medisinske avdeling.
Erstatningssøksmål fra etterlatte ble avgjort ved forlik, og så aldri noen rettssal.
I dag er det så vidt man vet ingen som benytter en Therac-25-maskin.