世界を動かす技術を、日本語で。

セラック25事件 (2021)

2025年8月27日原文(thedailywtf.com)

概要

Therac-25事件は、 放射線治療機器 のソフトウェア不具合による 死傷事故 として有名。 1985年から1987年 にかけて合計6件の事故が発生し、 複数の死者・重傷者 を出した。 原因はソフトウェア設計・運用上の重大な問題 であり、業界全体に大きな教訓を与えた。 安全対策テスト体制の不備 が事故を招いた経緯が明らかになった。 本記事では、事件の詳細・背景・教訓を解説する。

Therac-25事件の詳細

  • Therac-25 はAtomic Energy Canada Limited(AECL)製の 放射線治療装置

  • 完全ソフトウェア制御 が特徴で、従来の ハードウェアインターロック を省略

  • 1985年6月~1987年7月 までに 6件の過剰被曝事故 発生

  • 患者への致死的な放射線照射 による死亡・重傷事故

  • 東テキサス癌センター(ETCC) でも1986年3月に重大事故発生

    • 技師が ビーム種別入力ミス →素早く訂正し治療開始
    • 「Malfunction 54」エラー 表示、手順通り再開→患者が激痛を訴え
    • 本来180ラッドの処方に対し 16,000~25,000ラッドの過剰照射
    • 初期診断は電気ショック、実際は 重度の放射線障害
  • 機械は「アンダードーズ」と誤表示 し、被害の発覚が遅延

  • AECL は当初「過剰照射は不可能」と回答、安全神話が崩壊

  • FDAやマスメディア が介入し、事件が社会問題化

技術的背景と根本原因

  • Therac-25PDP-11 上のアセンブリ言語で制御

  • 複数プロセス(ユーザー入力・ビーム制御・線量管理など) を一人の開発者が実装

  • ソフトウェアの再利用 (Therac-6, Therac-20から流用)に過度な信頼

  • AECL内部の安全評価 では「ソフトウェアに残存バグなし」と仮定

    • 「プログラムエラーはハードウェア起因のみ」と誤認
    • 「長年使っているから安全」との過信
  • ハードウェアインターロックの省略 による致命的設計ミス

  • ソフトウェアレースコンディション が主因

    • 入力ミス訂正時に 高速入力 で再計算が飛ばされ、誤ったビーム設定で過剰照射
    • タイミング依存の不具合 で、再現性が低く発見が困難

事故調査・対応と組織的問題

  • ETCC物理学者 が再現実験を行い、AECLに報告

  • AECLは当初「再現できない」と回答、 「It works on my machine」現象

  • FDAが是正措置計画(CAP) を要求、AECLはテスト計画の不備を指摘される

    • FDA「全ソフトウェア改修ごとに厳格なテストが必要」と要求
    • AECL側は「長年の運用実績」で済ませようとした
  • 暫定的な運用対策 は実施されたが、1987年1月に 別のソフトウェアバグ による事故再発

  • 複数プロセス間で共有する変数管理の不備 が新たなバグを生む

教訓と現代への影響

  • ソフトウェア安全性 の過信が大事故を招いた実例

  • ハードウェアインターロック など 物理的安全装置の重要性 を再認識

  • ソフトウェアテスト・検証プロセスの厳格化 が業界標準となる契機

  • 単独開発・属人化 によるリスクの顕在化

  • レースコンディション・並行処理バグ の危険性の啓蒙

    • 実運用速度でしか発生しない不具合の存在
    • 経験豊富なオペレータほどリスクが高まる逆説
  • 医療機器ソフトウェア規制安全文化 の発展に大きな影響

ソフトウェア開発者へのメッセージ

  • Therac-25事件 は、 技術者倫理安全設計テスト体制 の重要性を強く示す
  • 「長年使っているから安全」 という思い込みの危険性
  • 設計・実装・運用・検証 すべての段階で 多重防御と透明性 が不可欠
  • 過去の失敗例から学び、同じ過ちを繰り返さない 姿勢が求められる

Hackerたちの意見

ソフトウェアの品質は、優れた開発者がいるから生まれるわけじゃないよ。プロセスの結果なんだ。そのプロセスは、ソフトウェア開発のやり方だけじゃなく、テストや管理、さらには営業やサービスにも影響を与える。この記事から一つだけ覚えて帰るなら、これを覚えておいてほしい!テラク-25の事件は、ソフトウェアの歴史において恐ろしいけど重要な部分だ。型システムやユニットテスト、ディフェンシブコーディングがすべてのソフトウェアの問題を解決できると思いがちだけど、確かに役立つけど、テラク-25の話から私が理解しているのは、事件が報告され、調査され、修正されるまでに時間がかかりすぎたことが本当の失敗だと思う。最近、あのデバイスについての素晴らしい「Cautionary Tales」ポッドキャストがあったんだけど[0]、そこで言及されていたのは、壊滅的な事故とは別に、テラク-25の機械がユーザーによって説明のつかないエラーを頻繁に示していたことだけど、そういう問題は修正できる人のデスクに届くことはなかったってことだね。

それはその通りだけど、優れた開発者も必要だよ。素晴らしいプロセスだけじゃダメで、質の低い開発者のやり方ではいけない。必要なのは、1/ 高品質な個々のプロセス(開発もその一つ)、2/ 高品質なデリバリーメカニズム、3/ その質を向上させるためのフィードバックループ、4/ 質を検査して改善するためのバンド外メカニズムだね。

そのポッドキャストのエピソードを勧めようと思ってたけど、先に言われちゃったね。ソフトウェアのバグに興味があるなら、絶対聞く価値あるよ。ポッドキャストで言及されてた面白い事実の一つは、以前の(手動で操作する)バージョンにも同じ欠陥があったってこと。でも、故障を防ぐためのフェイルセーフヒューズがあったから、実際には問題にならなかったんだ。スイスチーズモデルの素晴らしいデモだね。 https://en.wikipedia.org/wiki/Swiss_cheese_model

なんでこの記事がソフトウェア開発にそんなに焦点を当てているのか分からない。それは問題の一部に過ぎない。製品全体に設計上の欠陥があったんだ。FDAが関与したとき、会社はただソフトウェアの更新をするように言われたわけじゃないよ。

正直なところ、Therac-25の代わりに、ユニットテストや防御的コーディングを使っているシステムについて議論していたらよかったのに、と思う。それでも失敗したなら、もっと教育的だっただろう。Therac-25を見て「こんなメチャクチャなコードは絶対に書かない」と思うのは簡単すぎるから。

一番ひどいのは、多くの開発者が高い信頼性のシステムを使わないことで、そういう品質レベルは自分たちには関係ないと思っていることだよ。間違ってる、ソフトウェアの失敗は誰かの人生や会社に大きな影響を与える可能性があるからね。重要なフローが止まったり、誰かの生活や職業、医療記録に関するデータが壊れたり、特定の商品の支払いができなくなったりすることがあるんだ。

私は、最高品質の写真機器や科学機器を製造している会社で働いていたんだ。めちゃくちゃ高かったけど、顧客はそれに見合う価値があると思っていたみたい。> 「それはプロセスの最終結果だ。」 私の経験では、それ以上のものだと思うよ。文化なんだ。

みんなが大学の倫理や安全性、信頼性の授業でこういうことを教わっているか知りたいな。私は工学部で、一般的な工学の授業の一環として教わったんだ。バスタブの信頼性曲線や、原子力発電所に必要な冗長冷却ポンプの数を計算する方法も含まれていた。でも、大学を卒業してからかなり時間が経ったから、今のエンジニアや開発者たちにもこういうことは教えられているのかな?

大学でコンピュータサイエンスの学部生として教わったことがあって、医療技術の仕事に就いたから、よく考えるようになったよ。

これは私たちのシステム工学の授業の一部だった。こんな感じのやつだよね。 https://web.mit.edu/6.033/2014/wwwdocs/assignments/therac25....

なんか気になっちゃって、アンケート作っちゃった。コンピュータサイエンスの大学には絶対行ってなかったし、ネットでなんとなく聞いたことがあるくらいだよ。 https://strawpoll.com/NMnQNX9aAg6

コンピュータサイエンスのプログラムで、1年生のソフトウェア倫理の授業で教わったよ。2010年の話だけど、今もやってるのかな。

Hacker Newsで議論の続きを見る