Therac-25

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Пользовательский интерфейс аппарата[1][2]

PATIENT NAME   : TEST
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:

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

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

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

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

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

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

Разработка[править | править код]

В начале 1970-х годов AECL[en] и французская компания Thomson CGR совместно начали производство аппарата лучевой терапии. В результате их сотрудничества появился Therac-6, который мог создавать электронные лучи с энергией 6 МэВ. Позже появился Therac-20, позволяющий работать с энергией 20 МэВ в двух режимах — электронном и рентгеновском. Оба аппарата являлись версиями уже имеющихся разработок Thompson CGR («Neptune» и «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 МэВ) с вольфрамовой мишенью. На пути излучения располагается вольфрамовая мишень, после которой стоит конусообразный рассеиватель. Так как рассеивание было очень сильным, то для получения терапевтических доз рентгеновского излучения необходима высокая интенсивность электронного пучка. Доза излучения определялась с помощью ионизационной камеры, расположенной на том же диске.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

AECL расследовало инцидент, но не смогла воспроизвести ошибку. AECL дала неподтверждённое заключение, что при временном заклинивании одного из микропереключателей диск теоретически мог оказаться не в том положении. Было выяснено, что 1-битная ошибка в сигнале, кодирующем состояние микропереключателей, которая могла быть вызвана обрывом одной из линий в цепи переключателей, может приводить к вырабатыванию неоднозначного сигнала о положении поворотного диска. Ситуация усугублялась, тем, что плунжерный механизм, фиксирующий диск в рабочих положениях, срабатывал одинаково при всех рабочих положениях диска, в том числе неверных для данного режима, что становилось ещё одним ложным индикатором его положения. В конструкцию аппарата добавили четвёртый, контрольный переключатель, а также изменена подпрограмма, проверявшая положение диска: кодировка микропереключателей была изменена так, что правильно отражала положение диска при выходе из строя любого одного микропереключателя. Кроме того, в ПО добавили проверку микропереключателей во время вращения поворотного диска, что дало возможность подтверждения исправности микропереключателей и движения поворотного диска. Через три месяца AECL отозвала все аппараты Therac-25 и внесла в них соответствующие изменения.

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

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

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

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

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

Воспроизведение ошибки «Malfunction 54» (интерфейс на испанском языке)

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

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

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

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

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

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

Общая доза радиации, полученная пациентом, оценивается от 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 тыс. рад и впоследствии умер в апреле этого же года. Ожог напоминал «ожог от электрогрелки», случившийся в Якиме за год до этого.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Были проигнорированы некоторые базовые практики программирования в 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). Дата обращения: 29 сентября 2007. Архивировано 16 февраля 2008 года.
  2. 1 2 3 4 J.A. Rawlinson. Report on the Therac-25 (англ.) // OCTRF/OCI Physicists Meeting. — Kingston, Ont., Canada, May, 1987.
  3. Ж. М. Ниязова О культуре безопасности в радиологических центрах страны // Альманах клинической медицины — Московский областной научно-исследовательский клинический институт им. М. Ф. Владимирского, 2006 — c. 91-91 — ISSN 2072-0505
  4. Simson Garfinkel History’s Worst Software Bugs Архивная копия от 9 июня 2017 на Wayback Machine // Wired, 11.08.2005
  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. Архивировано 8 марта 2016 года.
  6. Trevor Cradduck. LINAC deaths at Zaragoza (28 февраля 1991). Дата обращения: 24 июля 2014. Архивировано 27 июля 2014 года.
  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. — No. Vol. 26, No. 7. — P. 18—41. Архивировано 11 июня 2017 года.

Литература[править | править код]