Therac-25 — аппарат лучевой терапии, созданный Atomic Energy of Canada Limited (в дальнейшем AECL) и запущенный в серию в 1982 г. Этот аппарат был причиной как минимум шести передозировок радиации, некоторые пациенты получили дозы в десятки тысяч рад. Пятеро умерли от передозировок. Пример Therac-25 показывает, насколько опасно полагать управление важными системами исключительно на программное обеспечение.

ВведениеПравить

Облучение раковой опухоли электронами позволяет уничтожать рак кожи и подкожных тканей с минимальным ущербом для окружающей здоровой ткани, для этого применяется линейный ускоритель электронов. Чтобы достичь более глубоких опухолей, применяется рентгеновское излучение, для этого электронами с высокой энергией бомбардируют мишень.

В начале 1970-х годов AECL и французская компания CGR совместно строили аппараты лучевой терапии на линейных ускорителях. В результате их совместной работы появились Therac-6, с энергией электронного пучка 6 МэВ, и Therac-20, с 20 МэВ. Оба аппарата были более старыми разработками CGR, которые были объединены с мини-ЭВМ PDP-11 фирмы DEC. Компьютер использовался исключительно для упрощения работы, оба аппарата могли работать и без компьютера.

После создания Therac-20 сотрудничество развалилось. В 1981 г. компании не продлили соглашение, и сотрудники стали конкурентами.

В середине 1970-х годов AECL разработала двухпроходную концепцию линейного ускорителя, который занимал меньше места и позволял достигать большей энергии электрона. Электроны высокой энергии позволяли лечить более глубокие опухоли. На этом ускорителе был создан аппарат Therac-25 — первый прототип был собран в 1976 г., серийное производство началось в 1982. Один аппарат позволял проводить лучевую терапию в двух режимах: электронном и фотонном, что экономило деньги и пространство.

Особенности конструкцииПравить

АппаратураПравить

Аппарат располагался в комнате с радиационной защитой. ЭВМ и терминал находились за пределами комнаты. Между пациентом и врачом организована видео- и громкоговорящая связь, в различных местах комнаты находятся аварийные выключатели, отключающие излучение.

Сам аппарат представляет собой линейный ускоритель, под которым находится поворотный диск. Диск мог находиться в одном из трёх положений:

  • «Наводка». На пути ускорителя ставится стальной отражатель, излучение имитируется светом. Служит для наводки пучка на больное место.
  • «Электронная терапия». В этом режиме опухоль облучается электронами энергией от 5 до 25 МэВ. Узконаправленные пучки электронов с такой энергией очень опасны, и на пути пучка располагаются отклоняющие магниты, которые распределяют электроны по некоторой области (см. Сила Лоренца).
  • «Рентгеновская терапия». Энергия только одна, 25 МэВ. На пути излучения располагается вольфрамовая мишень, после которой стоит конусообразный рассеиватель. Рассеивание было очень сильное, поэтому для получения терапевтических доз рентгеновского излучения была необходима высокая доза электронов. Доза излучения определяется с помощью ионизационной камеры, расположенной на том же диске.

Для определения положения диска служат три микропереключателя, которые включаются выступами на диске.

Основная проблема комбинированных электронно-рентгеновских аппаратов в том, что если по какой-то причине диск окажется не в том положении, пациент, скорее всего, получит передозировку. При этом ионизационная камера будет не под пучком, и будет зафиксировано, что пациенту передана нулевая доза. Традиционно, в таких аппаратах применяются электромеханические блокираторы, не позволяющие запускать аппарат в таком режиме. В Therac-25 эти функции были возложены на программное обеспечение.

Пользовательский интерфейсПравить

Всё управление аппаратом шло через терминал DEC VT100. Установив вручную наклон и положение излучателя, врач вводит предписанные рецептом величины. Если предписанные рецептом величины совпадают с реальными, на экране выводится «Verified». Если же величины не совпадают, лечение не может начаться, пока врач не внесёт коррективы. Также вводится тип лечения и назначенная доза.

На опытных образцах аппарата операторы жаловались, что слишком долго было вводить рецепт для каждого пациента. Программа была модифицирована, и вместо того, чтобы вручную вводить величину, можно было нажать «CR», скопировав информацию со старого рецепта. Также неправильно введённый рецепт можно было редактировать, нажимая на клавишу «Вверх».

Если аппарат во время лечения заметит какую-то проблему, возможны два варианта. Если случается treatment suspend, компьютер перезагружается. Если же случается treatment pause, можно внести коррективы и продолжить лечение, нажав на «P». Если treatment pause происходит пять раз, система перезагружается. Сообщения об ошибках выводились в виде Malfunction 1Malfunction 64. В инструкциях не было ни описания этих ошибок, ни каких-либо намёков, представляют ли эти ошибки какой-либо риск для пациента.

Treatment pause случалась довольно часто. Например, это случалось при сдвиге излучателя, недостаточной дозе излучения, и т.д. Иногда случалось до 40 ошибок в день. Эти паузы не составляли никакой угрозы для пациента, и после внесения корректив можно было продолжить лечение. Как впоследствии выяснилось, эти ошибки давали врачам ложное чувство, что переоблучить пациента практически невозможно.

При выпуске аппарата AECL обнародовала результаты исследований надёжности, оформленные в виде блок-схемы. В этом отчёте рассматривались лишь случайные сбои компьютера — предполагалось, что ПО хорошо оттестировано и ошибок в нём не осталось.

Несчастные случаиПравить

Всего было установлено одиннадцать аппаратов: пять в США и шесть в Канаде.

3 июня 1985 г., Мариетта, штат ДжорджияПравить

Информация об этом инциденте довольно расплывчатая, поскольку он не расследовался. Никто, даже врачи, не считали Therac-25 его причиной, хотя пациентка заявляла, что она получила ожоги во время лучевой терапии.

После удаления опухоли молочной железы, 61-летняя женщина проходила 10-МэВ электронную терапию на близлежащем лимфоузле в районе ключицы. Когда аппарат был включён, она почувствовала ожог. Когда врач вернулся, она сказала: «Вы обожгли меня», на что врач ответил: «Это невозможно». Хотя явных признаков ожога не было, кожа на этом месте была «тёплой на ощупь».

Через некоторое время плечо опухло, боль была такая, что невозможно было пошевелить рукой. Было очевидно, что она получила радиационный ожог, но врачи не могли найти объяснение этому. Доза радиации была оценена в 15—20 тыс. рад (облучение всего тела в 1000 рад считается смертельным, обычные терапевтические дозы не превышают 200 рад). Грудь пришлось удалить, в суд подали иск, который, впрочем, был урегулирован без судебного разбирательства.

По-видимому, AECL не знала про этот случай, пока не начались новые аварии.

26 июля, Гамильтон, ОнтариоПравить

40-летняя пациентка проходила лечение рака шейки матки. Через 5 секунд после начала лечения аппарат вывел сообщение No dose. Нажав «P», врач начал вторую попытку. После пяти неудачных попыток он вызвал ремонтника, тот не нашёл никаких поломок. Пациентка также почувствовала ожог.

Пациентка умерла через несколько месяцев от рака. Но если бы она не умерла, ей бы требовалась ампутация.

Никаких поломок найдено не было. Было высказано предположение, что при заклинивании одного из микропереключателей диск теоретически мог оказаться не в том положении. В конструкцию аппарата был добавлен четвёртый, контрольный переключатель, также изменена подпрограмма, проверявшая положение диска. Therac был отозван AECL, во все аппараты были внесены надлежащие изменения.

Канадское бюро радиационной безопасности исследовало аппарат. Отчёт гласил, что основной проблемой является поломка микропереключателя, а также ошибки в проектировании аппаратуры и программного обеспечения.

Независимый эксперт, нанятый Фондом рака Онтарио, заявил, что основной проблемой было отсутствие аппаратных блокираторов. Блокиратор был установлен собственными силами (задокументированных случаев переоблучения для этого экземпляра больше не было).

Декабрь 1985, Якима, шт. ВашингтонПравить

Информация об инциденте туманна, так как до последнего момента аппарат был вне подозрения. Пациентка получила покраснение кожи в виде полос. Причиной считали либо реакцию на химиотерапию, либо ожог электрогрелкой. Впоследствии выяснилось, что расположение проводов на грелке совсем не напоминало ожог.

21 марта — 11 апреля 1986, Тайлер, шт. ТехасПравить

21 марта пациенту была предписана электронная терапия. Медсестра случайно ввела «x» (рентгеновская), затем, вернувшись кнопкой «Вверх», заменила на «e». После этого несколько раз нажала «CR». Через несколько секунд после запуска излучения машина остановилась с сообщением «Malfunction 54». Подобные остановки встречались и раньше, но единственным их последствием было некоторое неудобство. Так что она нажала «P». Видеосвязь была отключена, а громкоговорящая — сломана, так что никакой связи с пациентом не было.

В это время пациент ощутил ожог. Так как это была его не первая процедура, он понимал, что аппарат не в порядке. Он встал, и в это время излучатель включился повторно и обжёг руку.

В аппарате поломки не нашли. Пациент умер от осложнений переоблучения через пять месяцев.

11 апреля при похожих обстоятельствах тот же Therac, управляемый той же медсестрой, переоблучил ещё одного пациента. Переоблучение мозга не оставило ему никаких шансов на жизнь.

Начались эксперименты. Медсестра научилась с лёгкостью воспроизводить ошибку, в то время как в AECL не могли повторить её. Выяснилось, что если вводить информацию с большой скоростью, переоблучение случалось практически со 100-процентной вероятностью. Получив эту информацию, в AECL, наконец, смогли повторить ошибку.

Началось расследование причин ошибки, которое затянулось более чем на два года. Как вре́менное решение, AECL порекомендовала выломать клавишу «Вверх» и заклеить её контакты (таким образом, при ошибке придётся вводить рецепт сначала).

Пользователи Therac-25 создали инициативную группу, и во время ежегодной конференции Американской ассоциации физиотерапевтов было проведено первое заседание.

Американская администрация по контролю пищевых продуктов, лекарств и фармацевтической промышленности (FDA) задала такие вопросы:

  • Почему AECL вносит исправления в программное обеспечение, не объясняя пользователям, для чего?
  • Знала ли AECL о возможных проблемах ПО?
  • Если по поводу первого переоблучения AECL получила судебный иск, почему не было попыток выяснить причину?
  • Проходило ли исправленное программное обеспечение тестирование?

17 января 1987, Якима, шт. ВашингтонПравить

Пациенту были прописаны два рентгеновских снимка и рентгеновская терапия. Пациент получил передозировку и впоследствии умер. Однако, из-под него забыли вытащить плёнку, что стало вещественным доказательством некорректной работы аппарата.

3 февраля AECL внесла исправление в аппарат. Однако FDA задала ответный вопрос: уверены ли вы в безопасности всей системы?

13 апреля было проведено заседание, на котором присутствовали руководство AECL, пользователи Therac и официальные лица США и Канады. Был сформулирован список желаемых изменений.

Замеченные ошибкиПравить

В программном обеспечении Therac-25 были найдены как минимум три ошибки, которые могли привести к переоблучению.

  1. Одна и та же переменная применялась как для анализа введённых чисел, так и для определения положения поворотного круга. Поэтому при быстром вводе Therac мог иметь дело с неправильным положением поворотного круга (так называемое состояние гонки).
  2. Настройка положения отклоняющих магнитов занимает около 8 секунд. В это время система не принимает никакого ввода (хотя пользователь может перемещать курсор и вводить новые значения).
  3. Установка булевской переменной (однобайтовой) в значение «истина» производилось командой «x=x+1». Поэтому с вероятностью 1/256 при нажатии кнопки «Set» программа могла пропустить поворот круга и оставить его в предыдущем положении.

ИсправленияПравить

  1. Ошибки дозиметрии считаются фатальными, и после них система перезагружается.
  2. Добавлена программная ветвь, мгновенно перезапускающая систему, и независимая аппаратная цепь, которая делает то же.
  3. Исправлены все найденные ошибки; добавлена перестраховка.
  4. Непонятные сообщения об ошибках заменены осмысленными.
  5. Положение диска дополнительно считывается потенциометром и передаётся на пульт управления.
  6. Изменение положения диска и других частей аппарата теперь возможно только тогда, когда оператор удерживает специальную педаль.
  7. В режиме рентгеновской терапии отклоняющие магниты для электронной терапии устанавливаются в такую конфигурацию, что отклоняют пучок электронов на 270°.

ПричиныПравить

Причины аварии были такие:

  • Излишняя надежда на программное обеспечение, из-за чего не было предусмотрено механических блокираторов.
  • Отсутствие перестраховки, из-за чего программа выводила не то, что есть на самом деле, и выполняла не то, что было введено.
  • Самонадеянность AECL. Реальная работа началась только тогда, когда были переоблучены несколько человек. Например, в Гамильтоне причиной неисправности считали микропереключатели, хотя инженеры не нашли неисправности и не смогли повторить ошибку.
  • Небезопасная манера программирования. В частности, в программном обеспечении было много «трюкачества», и программные модули практически не тестировались поодиночке (бо́льшая часть тестирования производилась на готовом аппарате). Кстати, всё ПО было написано на ассемблере, хотя в данном случае более мудрым решением было бы использовать язык высокого уровня.
  • Повторное использование программного кода с Therac-6 и Therac-20. В Therac-6 вообще не было рентгеновской терапии, в Therac-20 применялся механический блокиратор. Безопасность — это черта всей системы, а не одного только программного обеспечения. Зачастую безопаснее переписать ПО и получить простую и прозрачную систему, чем использовать имеющийся код.
  • Излишняя «дружественность» пользовательского интерфейса. Разработчики пытались сделать машину настолько простой в использовании, насколько можно. Вообще-то, пользовательский интерфейс оставлял желать лучшего. Но всё-таки лучше заставить пользователя вводить информацию второй раз, чем надеяться, что он проверит все введённые значения.

lt:Therac-25