Il Therac-25 è stata una macchina per la radioterapia, prodotta dalla canadese AECL come succeditrice alle unità Therac-6 e Therac-20, realizzate inizialmente insieme alla francese Compagnie Generale de Radiologie.
Questa macchina, che tra il 1985 ed il 1987 venne installata in 11 esemplari in alcuni ospedali degli Stati Uniti e del Canada, è stata affetta da una serie di bug nel programma informatico responsabile del suo funzionamento, che provocarono sei incidenti durante i quali ai pazienti venne somministrata una dose di radiazioni 100 volte superiore a quella necessaria (in alcuni casi l'apparecchio si attivò anche senza aver ricevuto l'apposito comando), causando un avvelenamento da radiazioni e, direttamente, il decesso di tre dei sei pazienti.[1] Questi incidenti dimostrarono i pericoli che si possono manifestare in caso di errori nei software usati per comandare apparecchiature medicali e, più in generale, sistemi che possono causare danni a cose e/o persone in caso di malfuzionamento, e sono divenuti un tipico caso di studio nelle materie di informatica medica e ingegneria informatica.
L'interfaccia utente veniva visualizzata e gestita tramite un terminale video VT100 con tastiera, situato in uno studio dal quale il tecnico radiologo poteva supervisionare la terapia e interagire con il paziente mediante una telecamera con relativo monitor e un microfono. Di norma il tecnico faceva accomodare il paziente sul lettino radiografico e posizionava il macchinario nel punto necessario affinché la radiazione fosse diretta verso il punto del corpo del paziente da trattare, poi lasciava la sala di trattamento e, tornato nello studio, immetteva i dati richiesti nel terminale: il nominativo del paziente, la tipologia di terapia da eseguire, l'energia della radiazione da erogare, la quantità di radiazione da emettere per unità di tempo, la durata del trattamento e la posizione in cui era stata sistemata la macchina. Il software controllava che i dati inseriti corrispondessero alla reale situazione della macchina e consentiva di continuare il processo solo quando corrispondevano, mostrando la scritta "VERIFIED" (verificato), altrimenti la procedura veniva bloccata. Solo quando tutti i dati risultavano corretti e verificati, si poteva procedere ad avviare il trattamento digitando il comando "B" nella riga "COMMAND". La procedura di verifica dei dati, piuttosto lunga e noiosa per l'operatore, permetteva un doppio controllo sulle impostazioni della terapia. A seguito di lamentele, la AECL consentì, per il Therac-25, di ricopiare i dati che comparivano nella colonna "PRESCRIBED" nella colonna "ACTUAL" semplicemente premendo il pulsante di "carriage return", escludendo quindi il doppio controllo.
Interfaccia utente della macchina Therac-25 [1] | |
---|---|
PATIENT NAME : JOHN DOE TREATMENT MODE : FIX BEAM TYPE: X ENERGY (MeV): 25 ACTUAL PRESCRIBED UNIT RATE/MINUTE 0 200 MONITOR UNITS 50 50 200 TIME (MIN) 0.27 1.00 GANTRY ROTATION (DEG) 0.0 0.0 VERIFIED COLLIMATOR ROTATION (DEG) 349.2 359 VERIFIED COLLIMATOR X (CM) 13.2 14.3 VERIFIED COLLIMATOR Y (CM) 21.2 27.3 VERIFIED WEDGE NUMBER 1 1 VERIFIED ACCESSORY NUMBER 0 0 VERIFIED DATE : 84-DEC-27 SYSTEM : BEAM READY OP. MODE : TREAT AUTO TIME : 12:55: 8 TREAT : TREAT PAUSE X-RAY 173777 OPR ID : T25V02-R03 REASON : OPERATOR COMMAND: |
La macchina offriva due diverse tipologie di radioterapia:
Esisteva inoltre una terza modalità di funzionamento, chiamata "field light mode", che era utile unicamente in fase di preparazione per sistemare l'apparecchio nel punto adatto, in quanto in tale modalità non venivano emessi elettroni ma un sottile fascio di luce visibile, che illuminava il paziente nel punto in cui il raggio si sarebbe diretto azionando la macchina nella posizione in cui si trovava.
Quando la macchina era impostata per erogare elettroni, veniva prodotto un fascio di elettroni all'energia impostata mediante i comandi, indirizzato e diffuso tramite dei magneti di guida e un diffusore. Quando si effettuava la terapia a raggi X, invece, la macchina emetteva un fascio di elettroni alla massima energia che attraversava 4 componenti, posizionati meccanicamente in modo automatico solo quando era attiva questa modalità di trattamento: un bersaglio metallico, che emetteva i raggi X quando colpito dagli elettroni; un filtro a diffusione, che diffondeva i raggi X in un'area più grande; un collimatore, che modificava il contorno del fascio di raggi X; una camera a ionizzazione, che misurava la quantità di raggi X emessa.
I primi incidenti accaddero in quanto si verificò l'emissione degli elettroni ad alta energia senza che contemporaneamente fosse stato posizionato il diffusore. Il fascio di elettroni ad alta potenza colpì direttamente i pazienti con una dose circa 100 volte superiore a quella desiderata, causando una sensazione descritta come una scossa elettrica e un forte calore, che portava i pazienti ad urlare chiedendo aiuto e, a volte, a scappare dalla stanza.[2] Alcuni giorni dopo, i pazienti soggetti a questo genere di incidenti mostravano i sintomi di un avvelenamento da radiazione e, sulla parte esposta, esibivano delle bruciature da radiazioni; in seguito all'avvelenamento, tre di queste persone sono decedute.
Un altro tipo di incidente accadde, successivamente, con una modalità diversa: la macchina entrò in funzione emettendo il fascio di elettroni alla massima energia mentre erano ancora in corso le impostazioni e non era ancora stato impartito il comando di avvio.
Le debolezze del programma vennero individuate in una serie di race conditions e in un overflow numerico.
La commissione di inchiesta concluse[3] che le cause principali erano imputate ad un programma scritto e sviluppato male, senza fare riferimento specifico ai molti errori di programmazione rilevati. Il programma, in particolare, era scritto in modo tale da rendere praticamente impossibile qualsiasi genere di test automatico.
I ricercatori che investigarono sul caso trovarono numerose concause a questo problema, alcune delle quali direttamente imputabili agli organi competenti:
I ricercatori individuarono anche numerosi problemi di carattere ingegneristico:
Il programma era scritto in assembly, linguaggio molto complesso e a basso livello tale da richiedere una grande attenzione nella programmazione. La scelta del linguaggio di programmazione non fu comunque ritenuta una causa. Le macchine inoltre possedevano un proprio sistema operativo.