セラック25(Therac-25)とは、カナダ原子力公社 (AECL) とフランスCGR-MeV社によって開発・製造されたコンピュータ制御の放射線療法機器である[1]:425。この機械は、1985年から1987年にかけて知られる限り6つの過度の被曝事故を引き起こし、少なくとも5人の患者を死亡させた。装置を制御するオペレーティングシステム (OS) に存在する、並行プログラミングにおける誤り(競合状態とも呼ばれる)が原因で、患者に通常の数百倍もの放射線量を浴びせ、死亡や重傷を負わせることもあった[2]。これらの事故は、生命に関わるようなシステムにおけるソフトウェア制御の危険性を浮き彫りにし、医療情報学とソフトウェア工学における標準的な事例研究のひとつとなった。さらに、技術者の自信過剰と[1]:428、報告されたソフトウェアのバグを解決するための適切なデューディリジェンスの欠如は、技術者の初期作業に対する過信とエンドユーザーの主張を信じられなかったことが大きな影響を与えた極端なケースとして強調されている。
セラック25はAECL社とCGR社によって、医療用線形加速器セラック6 (Therac-6) とセラック20 (Therac-20) の後継機として開発された。前者は6MeVまでのX線を、後者は20MeVのX線と電子線を生成することができた。セラック25はAECLによって新たに開発されたダブルパス技術を用いた電子加速器であり、従来機に比べてより小さなスペースで、より効率的に25MeVまでのX線と電子線を生成することができた。
これらの機器はいずれもPDP-11によってコンピュータ制御できるが、セラック25は従来機と違って、最初からコンピュータ制御を念頭においてデザインされていた。また、従来機ではハードウェアの監視装置は機器とは独立した電子回路で実装していたが、セラック25ではメンテナンス性のためにこれをソフトウェアで置き換えた。ソフトウェアにはCGR社が開発したセラック6用のコードが多く流用された。またセラック20用のコードもいくつか混入していたが、このコードにはバグがあり、後の事故を引き起こす一要因となった。セラック20にはハードウェアによる安全装置があったため事故は起こらず、このバグはセラック25の事故調査で判明することとなる。
1976年にはプロトタイプ機が製造され、1982年に商業的に販売された。1983年に危険性分析が行われたが、これはソフトウェアのバグの存在を仮定しない、不十分なものであった。
また「フィールドライト」モードも含まれており、これにより、治療領域を可視光で照らすことにより患者を正確に位置決めすることができるようになっていた。
記録された6件の事故は、X線モードで発生させた大電流の電子線を患者に直接照射した際に発生した。原因となったのは2つのソフトウェアの不具合であった[3]。1つは、オペレータがX線モードを誤って選択してからすぐに電子モードに切り替えた場合で、X線ターゲットが配置されていない状態で電子線がX線モードに設定されてしまったことである。もう1つは、ビームスキャナが作動していないフィールドライトモード中に電子線が作動してしまい、ターゲットが配置されていない状態で電子線が作動してしまったことである。
以前のモデルでは、このような欠陥を防ぐためにハードウェア・インターロックがあったが、セラック25ではそれを取り除き、ソフトウェアによる安全性のチェックに頼っていた。
大電流電子線は、意図した線量の約100倍の放射線量で、より狭い範囲で患者に当たり、致死量の可能性のあるベータ線を照射した。患者のレイ・コックス氏は、この感覚を「強烈な電気ショック」と表現し、悲鳴を上げて治療室から飛び出した[4]。数日後、放射線熱傷が現れ、患者は放射線中毒の症状を示した。3つのケースでは、負傷した患者は後に過剰照射の結果として死亡した[5]。
委員会では、主な原因を、特定のコーディングエラー1つに絞るのではなく、一般的なソフトウェアの設計と開発の仕方の悪さにあるとしている。特に、このソフトウェアは、クリーンな自動化された方法でテストすることが現実的に不可能なように設計されていた[3]。
事故を調査した研究者は、いくつかの原因を発見した。その中には、以下のような制度的な原因が含まれていた。
研究者はまた、いくつかの工学的な問題を発見した。
ナンシー・レブソン氏は、この事件から得られる教訓は、再利用されたソフトウェアが安全だと思い込まないことだと指摘している[6]。「ソフトウェアを再利用したり、市販のソフトウェアを使用したりすることで安全性が向上するだろう、なぜならば広く利用されているのだから、という素朴な思い込みがよくある。ソフトウェアモジュールを再利用したからといって、それが移行先の新しいシステムでの安全性を保証するわけではない...」[3]。このように、ソフトウェアにコード化された思考体系を不十分な理解のまま盲信することは、カーゴ・カルト・プログラミングとして知られている。セラック25に関連したような事件に対応して、IEC 62304規格が作成された。この規格は、医療機器ソフトウェアの開発ライフサイクル標準と、経歴未確認ソフトウェアの使用に関する具体的なガイダンスを導入している[7]。