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     VERIFIED
COLLIMATOR ROTATION (DEG) 359.2            359     VERIFIED
COLLIMATOR X (CM)          14.2           14.3     VERIFIED
COLLIMATOR Y (CM)          27.2           27.3     VERIFIED
WEDGE NUMBER                  1              1     VERIFIED
ACCESSORY NUMBER              0              0     VERIFIED

DATE   : 84-OCT-26   SYSTEM : BEAM READY   OP.MODE: TREAT AUTO
TIME   : 12:55. 8    TREAT  : TREAT PAUSE           X-RAY 173777
OPR ID : T25VO2-RO3  REASON : OPERATOR     COMMAND:

Терак-25 (англ. Therac-25) — аппарат лучевой терапии, медицинский ускоритель[2], созданный канадской государственной организацией «Atomic Energy of Canada Limited» (в дальнейшем AECL) и запущенный в серию в 1982 году. С июня 1985 года по январь 1987 года этот аппарат стал причиной как минимум шести передозировок радиации, некоторые пациенты получили дозы в десятки тысяч рад. Как минимум двое умерли непосредственно от передозировок.

Непосредственной причиной трагедий были ошибки в программном обеспечении аппарата, а принципиальной проблемой была неверная стратегия обеспечения безопасности. Эти программные ошибки считаются приведшими к одним из наихудших последствий (по вине программного обеспечения) за всю историю использования компьютеров[3]. Согласно докладу в мае 1987 года, данные происшествия имели наихудшие последствия за всю 35-летнюю историю лучевой терапии[4][5].

Ошибки Therac-25 не являются единственными, приведшими к смерти и передозировкам людей от аппаратов лучевой терапии. Например, в 1991-м году в Испании, в городе Сарагоса, на эксплуатировавшемся аппарате Sagitar-35, в течении 10 дней подверглись передозировке не менее 24 пациентов, из которых как минимум трое умерли[6][7]. Отличительной особенностью Therac-25 является то, что для расследования происшествий была организована группа экспертов, которая изучала причины и особенности инцидентов. Это позволило не только реконструировать картину произошедшего, но и на основе полученного опыта улучшить процедуры, директивы и систему отчетности для обеспечения безопасности медицинских устройств[5].

Содержание

Медицинское применение[править | править вики-текст]

Медицинские линейные ускорители используют электроны для создания лучей высокой энергии, что позволяет уничтожать опухоли с минимальным ущербом для окружающей здоровой ткани. Опухоли, которые находятся относительно не глубоко, облучаются электронами (бета-излучение)[1][5]. Чтобы достичь более глубоких опухолей, электронами бомбардируется мишень, а вторичным рентгеновским излучением облучается опухоль.

История создания[править | править вики-текст]

Разработка[править | править вики-текст]

В начале 1970-х годов AECL[en] и французская компания Thompson CGR совместно начали производство аппарата лучевой терапии. В результате их сотрудничества появился Therac-6, который мог создавать электронные лучи с энергией 6 МэВ. Позже появился Therac-20, позволяющий работать с энергией 20 МэВ в двух режимах — электронном и рентгеновском. Оба аппарата являлись версиями уже имеющихся разработок Thompson CGR (the Neptune и the Sagittaire соответственно), которые были дополнены мини-ЭВМ DEC PDP-11. Компьютер использовался исключительно для упрощения работы с уже имеющимся аппаратным обеспечением, которое могло работать независимо от программного[1][5].

После создания Therac-20 в 1981 г. компании AECL и Thompson CGR, ссылаясь на давление конкуренции, не продлили срок действия своего соглашения о сотрудничестве[1][5].

В середине 1970-х годов AECL разработала двухпроходную концепцию линейного ускорителя, который занимал меньше места при достижении той же энергии ускорения и был более экономичен в производстве. На базе этого концепта был спроектирован Therac-25, который позволял работать как с электронными, так и рентгеновскими лучами до 25 МэВ, и имел при этом возможность выбирать ряд различных уровней энергии[1][5].

Таким образом, Therac-25 был более компактен, гибок в настройках, и, что спорно, более удобен в использовании[1][5]. Кроме того, более высокие энергии давали выгоду от феномена глубокой дозы: по мере увеличения энергии глубина облучения также увеличивалась, и тем самым ткань, более близкая к поверхности, облучалась меньше. К экономическим преимуществам также относится то, что использовалась только одна машина для электронной и рентгеновской терапии[1][5].

Первый прототип, являющийся полностью аппаратным, был создан в 1976 г. В конце 1982 г. была готова коммерческая версия, которая полностью управлялась с помощью компьютера[1][5].

Влияние истории разработки на безопасность[править | править вики-текст]

Несколько особенностей разработки Therac-25 важны для понимания причин несчастных случаев. Прежде всего, Therac-6 и Therac-20, как и Therac-25, управлялись с помощью компьютера PDP-11. Однако, AECL спроектировала Therac-25 таким образом, чтобы использовать программное обеспечение для взаимодействия с пользователем, что имело свои преимущества. Кроме того, при создании Therac-25 разработка шла не независимо, а в окружении уже имеющихся устройств, которые не были уже спроектированы для программного управления[1][5].

В дополнение, программное обеспечение Therac-25 брало на себя больше ответственности за безопасность работы всего комплекса, чем это было ранее. Так, Therac-20 имел независимые цепи блокировки, контролирующие электронный луч, и механические блокираторы, которые также отвечали за безопасность[1][5]. Также в Therac-20 для контроля безопасности использовались аппаратные автоматические выключатели (circuit breakers) и отключающие предохранители (incorporating fuses). В Therac-25 аппаратная защита была убрана и функции безопасности были возложены на программное обеспечение[8].

Таким образом, в Therac-25 часть описанных функций взяло на себя программное обеспечение, а AECL приняло решение не дублировать проверку посредством аппаратных устройств[1][5].

Менеджер контроля качества AECL, ответственный за верификацию аппаратов Therac, сообщил, что с начала разработки программного обеспечения Therac-20 и Therac-25 использовался один и тот же пакет библиотек. Однако, такое повторное использование оказалось ошибочным. Во время расследования в пакете библиотек была обнаружена ошибка, которая проявлялась на всех аппаратах, как на Therac-20, так и Therac-25, но в последнем защита посредством внешних проверок была более слабой[1][5].

Особенности конструкции[править | править вики-текст]

Аппаратура[править | править вики-текст]

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

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

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

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

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

Программное обеспечение[править | править вики-текст]

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

Программное обеспечение Therac-25 состояло из 20 тысяч инструкций кода и была разработано одним программистом в течение нескольких лет, при этом оно включало в себя части кода, написанного для Therac-6 и Therac-20[8].

В суде Техаса было предоставлено очень мало информации о том, кто был данным единственным программистом. AECL могла не предоставлять свои записи о трудоустройстве, а также сотрудники компании не предоставляли данных об их образовании, квалификации и опыте работы. Известно только, что разработчик программного обеспечения покинул компанию в 1986-м году[8].

Пользовательский интерфейс[править | править вики-текст]

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

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

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

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

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

Несчастные случаи[править | править вики-текст]

Всего было установлено одиннадцать аппаратов: пять в США и шесть в Канаде. Большинство из них было запущено в эксплуатацию в 1983-м году[8].

3 июня 1985, Мариетта, штат Джорджия[править | править вики-текст]

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

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

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

Впоследствии женщина погибла в автокатастрофе[8].

26 июля 1985, Гамильтон, Онтарио[править | править вики-текст]

40-летняя пациентка проходила лечение рака шейки матки, это была её 24-я процедура Therac-25. Через 5 секунд после начала лечения аппарат вывел сообщение «H-tilt», что означало No dose.[8][9] Нажав «P», оператор начал вторую попытку. После пяти неудачных попыток он вызвал ремонтника, но тот не нашёл никаких поломок. Пациентка почувствовала ожог. Через три дня её начали беспокоить боли в бедре и эта область тела покраснела и опухла.

Общая доза радиации, полученной пациенткой, оценивается от 13 до 17 тыс. рад[7].

Пациентка умерла 3 ноября 1985 года. Вскрытие показало, что причиной смерти является рак, но если бы женщина не умерла, ей бы пришлось ампутировать бедро из-за радиации.[8]

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

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

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

11 декабря 1985, Якима, штат Вашингтон[править | править вики-текст]

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

21 марта — 11 апреля 1986, Тайлер, штат Техас[править | править вики-текст]

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

В это время пациент ощутил ожог. Так как это была его не первая процедура (девятая по счету), он понял, что что-то не так. Как только он начал вставать со стола, в этот момент излучатель включился и повторно обжёг руку. Рэй встал, прошел качаясь до входа в комнату и начал стучать в дверь. Услышав стук, оператор немедленно открыл дверь шокированному и раненому пациенту[8].

Рэй Кокс немедленно обратился в медпункт, но из-за отсутствия серьёзных причин (только покраснение кожи) был отправлен домой.

Был вызван врач Фриц Хагер, и он убедился, что калибровка в пределах нормы. Медперсонал проверил машину и не смог обнаружить каких-либо проблем. Therac-25 был опять включен и проработал до конца дня.

Ночью Рэй из-за боли в шее и плече обратился в скорую помощь больницы, где ему поставили диагноз удара электрическим током.

На следующий день аппаратную закрыли. Два техника AECL целый день тестировали аппарат, но не сумели воспроизвести ошибку Malfunction 54. Согласно документации производителя, сообщение возникало тогда, когда машина выполнила передозировку или недозировку, но без каких-либо подробностей, что именно произошло. Электрик из независимой компании сказал, что с заземлением всё в порядке и удара током быть не могло. Хагер запросил у AECL, были ли другие случаи переоблучения и получил ответ «нет» (что странно — это было через семь месяцев после случая в Гамильтоне, да и после аварии в Мариетте они должны были получить иск). 7 апреля Therac был введён в эксплуатацию.

Общая доза радиации, полученная пациентом, оценивается от 16500 до 25000 рад, и она была получена менее, чем за секунду, на площадь около 1 см².[7]

Впоследствии Рэй Кокс начал страдать от периодических приступов тошноты и его левую руку парализовало. Он был госпитализирован по причине радиационного облучения. Наступили ещё большие осложнения (включая паралич ног), и пациент умер в сентябре этого же года.

11 апреля при похожих обстоятельствах этот же Therac-25, управляемый этой же медсестрой, переоблучил ещё одного пациента — это был 66-летний водитель автобуса Вернон Кидд (Vernon Kidd). Ему была прописана терапия рака кожи лица. На этот раз удалнная связь работала — оператор услышала громкий крик и немедленно вбежала в комнату с пациентом, у которого половина лица была обожжена.

Полученная доза была как минимум 4000 рад. Кидд умер через три недели, 1 мая[7].

Вскрытие показало, что причиной смерти являлось высокая доза облучения правой доли мозга и мозгового ствола.

Машина была сразу же выведена из эксплуатации и Хагер начал собственное расследование. Медсестра вспомнила, что в тот день она заменяла «x» на «e». Выяснилось, что если сделать это достаточно быстро, переоблучение случалось практически со 100-процентной вероятностью.

Началось расследование причин ошибки, которое затянулось более чем на два года.

15 апреля AECL отправила отчет о инциденте в FDA и разослало письмо во все клиники, предписывавшее выломать и заклеить кнопку «↑».[8]

« С настоящего момента и до последующего уведомления кнопка, используемая для перемещения курсора в обратную сторону по устанавливаемым значениям (то есть кнопка «UP» с изображением стрелки вверх) не должна использоваться для редактирования или любых иных целей.

Чтобы избежать случайного использования этой кнопки, её нужно снять, а контакты зафиксировать в разомкнутом положении с помощью изоленты или другого изоляционного материала…

Отключение этой клавиши означает, что в случае, если введены неверные данные, то придётся сбросить данные клавишей «R» для перезагрузки и ввести их заново.

»

Данная ограниченная акция не удовлетворила FDA, и 2 мая 1986 года агентство объявило Therac-25 дефектным. Официальные лица FDA также выразили недовольство, что письмо AECL пользователям машины не объясняло адекватно суть дефекта и ту опасность, которая с ним связана.[8]

Врач из Чикаго Фрэнк Борджер, узнав про ошибку Therac-25, решил выяснить, возможно ли такое на его Therac-20. Ошибку повторить не удалось, но позже обнаружилась связь. Когда новая группа студентов начинала практику на Therac-20, часто срабатывали предохранители-автоматы. Это повторялось в течение трёх недель, но потом практически прекращалось — до следующей группы. Новички часто используют нестандартные способы ввода информации — это значит, что при определённой последовательности, введённой с клавиатуры, случается аварийная ситуация. До переоблучения она не развивалась лишь потому, что в Therac-20 стоял аппаратный блокиратор.

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

FDA задала следующие вопросы:

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

17 января 1987, Якима, штат Вашингтон[править | править вики-текст]

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

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

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

Расследование[править | править вики-текст]

Во время ведения судебных дел против AECL прокуратура штата Техас обратилась к Нэнси Ливесон (Nancy G. Leveson) как к эксперту для расследования. В то время она являлась профессором компьютерных наук Калифорнийского Университета в Ирвайне и играла ключевую роль в пионерном развитии наук компьютерной безопасности. Нэнси объединила свои усилия с Кларком Тёрнером (Clark S. Turner) и приблизительно в течение трех лет они занимались сбором материалов и реконструкцией событий, связанных с Therac-25[8]. Данный результат является особенно важным, так как в большинстве инцидентов по безопасности информация является неполной, противоречивой и даже неверной[7].

Замеченные ошибки[править | править вики-текст]

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

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

Кроме этих явных ошибок было замечено множество потенциальных — например, в многозадачной операционной системе не было никакой синхронизации.

Исправления[править | править вики-текст]

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

Причины и извлеченные уроки[править | править вики-текст]

Нэнси Ливесон в своих публикациях описывает результаты расследования следующим образом[1][4][5].

Слишком большая уверенность в программном обеспечении[править | править вики-текст]

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

Непонимание разницы между надежностью и безопасностью[править | править вики-текст]

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

Недостаточность защитного проектирования[править | править вики-текст]

Программное обеспечение не содержало процедур самопроверки, или каких-либо других средств обнаружения ошибок.

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

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

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

Невозможность устранения причин опасных отказов[править | править вики-текст]

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

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

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

Самоуверенность[править | править вики-текст]

Реальная работа началась только тогда, когда были переоблучены несколько человек. Например, в Гамильтоне причиной неисправности считали микропереключатели, хотя инженеры не нашли неисправности и не смогли повторить ошибку.

Часто получается так, что люди начинают обращать внимание на опасность технологических устройств только после того, как произошел инцидент. После смертельных случаев Therac-25 медицинский физик описывал этот фактор следующим образом[1][4][5]:

« В последнее десятилетие или два, индустрия медицинских ускорителей возможно пришла к некоторому спокойствию по поводу безопасности. Мы начали считать, что производители всех типов безопасных устройств имеют необходимый опыт их разработки потому, что они занимаются своим бизнесом продолжительное время. Мы знаем, что есть много кодексов безопасности, руководств по безопасности и правил их использования, и до настоящего времени мы были спокойны имеющейся идеальной работой данных машин. Кроме пары инцидентов в 1960-х гг. (в Хаммерсмите и Гамбурге) применение медицинских ускорителей полностью не имело ни одного серьезного радиационного инцидента до настоящего времени. Возможно, мы были ослеплены этим успехом.
»

Неправильная оценка риска[править | править вики-текст]

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

По этой причине AECL не начинала расследования после сообщения о первом инциденте. Считалось, что пять микропереключателей, каждый из которых имеет вероятность отказа 10−5, не могут отказать одновременно. Проблема такого анализа заключалась в допущении независимости отказов и в исключении программного обеспечения как причину опасного отказа.

Неадекватное расследование и обратная связь на сообщения об инцидентах[править | править вики-текст]

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

В данном случае после первого же звонка Тима Стилла необходимо было начать детальное расследование. В общем случае же, первое сообщение о возникших проблемах, ведущих к трагическим последствиям, должно изменять отношение к обстоятельствам с незамедлительным ответом.

Плохие практики программирования[править | править вики-текст]

Некоторые базовые практики программирования в Therac-25 были проигнорированы, а именно:

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

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

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

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

Повторное использование кода[править | править вики-текст]

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

В данном случае имело место повторное использование программного кода с Therac-6 и Therac-20. В Therac-6 вообще не было рентгеновской терапии, в Therac-20 применялся механический блокиратор.

Безопасный и дружественный интерфейс[править | править вики-текст]

Попытка сделать машину лёгкой в использовании может конфликтовать с задачами обеспечения безопасности.

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

Государственный и пользовательский надзор, стандарты[править | править вики-текст]

После несчастных случаев Therac-25 FDA изменило свое отношение к множеству проблем систем, связанных с безопасностью, и особенно в отношении к программному обеспечению. Как результат, FDA запустило процесс улучшения своих процедур, директив и системы отчетности, и включило в них программное обеспечение. Данный урок был важным не только для FDA, но и для всех промышленных систем, критичных к безопасности.

Примечания[править | править вики-текст]

  1. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Nancy Leveson. Medical Devices: The Therac-25. Addison-Wesley (1995).
  2. Ж. М. Ниязова О культуре безопасности в радиологических центрах страны // Альманах клинической медицины — Московский областной научно-исследовательский клинический институт им. М. Ф. Владимирского, 2006 — c. 91-91 — ISSN 2072-0505
  3. Simson Garfinkel History’s Worst Software Bugs // Wired, 11.08.2005
  4. 1 2 3 J.A. Rawlinson Report on the Therac-25 (англ.) // OCTRF/OCI Physicists Meeting. — Kingston, Ont., Canada, May, 1987.
  5. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Nancy G. Leveson Safeware: System Safety and Computers. — Addison-Wesley, April 17, 1995. — ISBN 0-201-11972-2.
  6. Trevor Cradduck. LINAC deaths at Zaragoza (28 Feb 1991).
  7. 1 2 3 4 5 6 Neumann, Peter G. Computer-Related Risks. — Addison-Wesley/ACM Press, 1995. — ISBN 0-201-55805-X.
  8. 1 2 3 4 5 6 7 8 9 10 11 Ivars, Peterson Fatal Defect: Chasing Killer Computer Bugs. — New York: Vintage Books, 1996. — ISBN 0-8129-2023-6.
  9. Nancy Leveson, Clark S. Turner An Investigation of the Therac-25 Accidents (англ.) // IEEE Computer. — July 1993. — № Vol. 26, No. 7. — P. 18-41.

Литература[править | править вики-текст]