Therac-25

Da Wikipedia, l'enciclopedia libera.
Jump to navigation Jump to search

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 sono divenuti un tipico caso di studio nelle materie di informatica medica e ingegneria informatica.

Descrizione del problema[modifica | modifica wikitesto]

L'interfaccia utente[modifica | modifica wikitesto]

L'interfaccia utente veniva visualizzata su un terminale video VT100 con tastiera. Di norma il tecnico radiologo 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 (da cui poteva supervisionare la terapia mediante una telecamera con relativo monitor ed un microfono), immetteva i dati richiesti nel terminale: 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, se combaciavano, mostrava la scritta "VERIFIED" (verificato), altrimenti bloccava il processo fino a quando i valori non venivano corretti. Solo quando tutti i dati risultavano 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 terapia[modifica | modifica wikitesto]

La macchina offriva due metodi per la radioterapia:

  • Terapia a base di fasci di elettroni, che erogava un fascio di elettroni con energia regolabile da 5 MeV a 25 MeV;
  • Terapia a base di raggi X ad alta energia, che erogava raggi X tramite il bombardamento di un bersaglio metallico con un fascio di elettroni con energia di 25 MeV.

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 ed un diffusore. Quando si effettuava la terapia a raggi X, invece, la macchina emetteva un fascio di elettroni alla massima energia che veniva indirizzato attraverso 4 componenti, posizionati 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 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 ed un forte calore, di conseguenza i pazienti urlavano e chiedevano aiuto ed alcuni scappavano 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.

La debolezze principali del programma vennero individuate in una serie di race conditions e in un overflow numerico.

Cause principali[modifica | modifica wikitesto]

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. In particolare, il programma era scritto in modo tale da rendere praticamente impossibili i test automatici.

I ricercatori che investigarono sul caso trovarono numerose concause a questo problema, alcune di queste erano direttamente imputabili agli organi competenti:

  • L'AECL non aveva fatto controllare il codice da un organismo indipendente.
  • L'AECL non aveva progettato il programma basandosi su come esso avrebbe dovuto funzionare e comportarsi in caso di errore.
  • Sia il personale della AECL che gli operatori sanitari, inizialmente, non credevano che vi fossero problemi tecnici, probabilmente a causa di un eccesso di sicurezza.[4]
  • Quando il sistema rilevava un malfunzionamento, il terminale video mostrava la scritta "MALFUNCTION" seguita da un numero identificativo del problema compreso tra 1 e 64, ma l'emissione dei raggi veniva arrestata solamente per alcuni dei possibili problemi. L'operatore aveva quindi la possibilità di premere il tasto "P" per ignorare l'errore e proseguire il trattamento. Nello specifico, il problema che causava gli incidenti veniva indicato con il messaggio "MALFUNCTION 54" e faceva entrare in pausa la macchina. I manuali forniti agli operatori non riportavano le corrispondenze dei codici di errore con i relativi problemi e, oltretutto, capitava piuttosto di frequente che comparissero messaggi di errore che, anche se ignorati, non impedivano di portare a termine la terapia senza danni; a causa di ciò, probabilmente, gli operatori furono portati ad ignorare le segnalazioni ed a far ripartire il trattamento con il tasto "P".
  • L'AECL non ha mai eseguito dei test operativi della macchina Therac-25 e del relativo programma prima che i vari esemplari venissero installati negli ospedali.

I ricercatori individuarono anche numerosi problemi di carattere ingegneristico:

  • L'errore "MALFUNCTION 54" si verificava solo quando veniva inserita una particolare sequenza di comandi tramite la tastiera del terminale VT100, che controllava un computer PDP-11: l'inserimento di "X" nel campo "BEAM TYPE", cioè una selezione erronea della modalità raggi X da 25 MeV, e la discesa con i pulsanti a freccia della tastiera fino al campo "COMMAND", seguite negli 8 secondi successivi da un ritorno a "BEAM TYPE" con l'inserimento di "E" per correggere l'errore selezionando, come desiderato, la modalità elettroni a energia variabile e, infine, dal ritorno a "COMMAND" per avviare il trattamento. Le routine di controllo non riuscivano a sincronizzarsi correttamente con il terminale utente durante tale lasso di tempo di 8 secondi, di conseguenza si verificavano delle race conditions a seguito delle quali la macchina attivava l'emissione di elettroni a 25 MeV, propria della terapia a raggi X, e al contempo non posizionava il convertitore, come correttamente previsto nella terapia ad elettroni. Questa sequenza veniva digitata solamente in caso di un errore nell'inserimento del tipo di terapia e di una sua veloce correzione, risultando quindi piuttosto improbabile, così il problema non venne rilevato fino a quando i radiologi che utilizzavano la macchina commisero tale errore dopo aver acquisito un'esperienza tale da utilizzare i comandi piuttosto velocemente.[2]
  • Al contrario delle altre macchine della serie Therac, il Therac-25 non era provvisto di dispositivi di sicurezza fisici per evitare che il fascio di elettroni venisse azionato alla massima energia senza il convertitore.
  • Il produttore aveva riciclato parti di codice presenti nei modelli Therac precedenti, che tuttavia, al contrario di questo modello, erano dotati di interblocchi, ovvero di moduli di programmazione deputati ad ulteriori controlli di sicurezza dello stato della macchina. Tali interblocchi, però, non segnalavano il loro intervento, quindi il problema, presumibilmente, si era manifestato anche sulle macchine dei modelli precedenti senza possibilità di essere rilevato.
  • Gli incidenti dovuti all'attivazione della macchina improvvisa e non prevista durante la preparazione furono dovuti all'utilizzo da parte del programma di una variabile numerica che si modificava continuamente a seguito della variazione delle impostazioni ed a cui veniva assegnato il valore di 0 nel momento in cui veniva impartito il comando di avvio del trattamento. Essendo tale variabile allocata in uno spazio di memoria pari ad 1 byte, che può contenere solamente valori numerici compresi tra 0 e 255, ogni volta che essa raggiungeva il valore di 255 si verificava un overflow che la riportava a 0, e ciò causava l'azionamento della macchina senza prestare attenzione alle reali condizioni in cui essa si trovava.

Il programma era scritto in assembly, linguaggio molto complesso ed a basso livello, quindi era richiesta una grande attenzione nella programmazione. La scelta del linguaggio di programmazione non fu comunque ritenuta una causa. Inoltre le macchine possedevano un proprio sistema operativo.

Note[modifica | modifica wikitesto]

  1. ^ Baase 2008, p.425.
  2. ^ a b Set Phasers On Stun - Design and Human Error, Steven Casey, pp. 11-16
  3. ^ Copia archiviata (PDF), su sunnyday.mit.edu. URL consultato il 6 novembre 2009 (archiviato dall'url originale il 16 febbraio 2008).
  4. ^ Baase 2008, p.428.

Bibliografia[modifica | modifica wikitesto]

  • Baase, S (2008). "A Gift of Fire", Pearson Prentice Hall.

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]