PVS-Studio — дополнительная страховка медицинского программного обеспечения

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

    После моей публикации "Для повышения надежности и безопасности банковского программного обеспечения используйте PVS-Studio" наш список клиентов пополнился несколькими компаниями, создающими соответствующий софт. Статья неожиданно получилась удачной и эффективной. Ни я, ни коллеги не ожидали, что от неё будет такая отдача. Видимо статьи действуют намного сильнее, когда я рассуждаю не про ошибки вообще, а говорю про определенный класс программного обеспечения. Теперь меня заставляют написать статьи, охватывающие другие сферы программного обеспечения.

    Эта статья ориентирована на команды разработчиков, создающих программы для медицинского оборудования. Надеюсь, они не останутся равнодушными и проверят свой код с помощью PVS-Studio. Надеюсь также, что ряд из них после этого пополнит список наших клиентов по направлению «Медицина».

    Клиенты, медицина, PVS-Studio


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

    Therac-25

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

    МРТ

    Во-вторых, ошибки в программном обеспечении могут причинять вред и косвенно. Например, баги в программном обеспечении для МРТ-сканеров ставят под сомнение 40 000 научных исследований. В течение нескольких десятилетий нейробиологи и когнитивные психологи использовали для анализа данных фМРТ статистические программы AFNI, SPM и FSL. Как выяснилось, из-за некорректных алгоритмов эти программы могут возвращать до 70% ложноположительных результатов вместо предполагаемых 5%.

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

    Причем, разработчик несёт ответственность не только за собственный код, но и за код используемых библиотек. Совершенно реальна ситуация, когда из-за ошибки в third-party библиотеке возникнут артефакты при создании изображения/видео и это внесёт путаницу при постановке диагноза.

    Это не абстрактная теоретическая проблема. Я сам сталкивался с ситуацией, когда при переносе программы на 64-битную систему начала проявляться ошибка, приводящая к неправильной обработке МРТ-данных. К счастью, ошибка проявляла себя очень явно: отсутствовал большой фрагмент изображения. Однако ошибка может быть не столь заметной и заключаться в неправильном отображении каких-то мелких деталей, и обнаружить её будет гораздо сложнее.

    МРТ

    Подробнее про эту ошибку я писал в статье "Как 10 лет назад начинался проект PVS-Studio". Именно эта и некоторые другие 64-битные ошибки легли в основу создания инструмента Viva64, который затем превратился в статический анализатор кода PVS-Studio.

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

    operator ==


    Я фантазёр и такие ошибки допускают только студенты в курсовых работах? Ха! Прошу уделить немного времени и ознакомиться с моей статьёй "Зло живёт в функциях сравнения". После неё вы начнёте разделять мою озабоченность.

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

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

    И последний вопрос, на который я дам ответ. Почему я не написал эту статью сразу после статьи про безопасность банковского ПО? Разработка программного кода для медицинской сферы — это часто программирование различных микроконтроллеров. Я ждал, когда наш анализатор будет адаптирован к анализу кода для встраиваемых устройств. И теперь у меня появился повод: "Статический анализатор кода PVS-Studio 6.22 адаптирован для ARM-компиляторов (Keil, IAR)".

    Спасибо всем за внимание и предлагаю скачать и начать использовать анализатор кода PVS--Studio. Полезные ссылки:

    1. Скачать PVS-Studio для Windows
    2. Скачать PVS-Studio для Linux
    3. Примечание: скоро станет доступна версия PVS-Studio для macOS
    4. Документация. Как запустить PVS-Studio в Linux
    5. Примеры проверки различных открытых проектов
    6. Пишите нам в поддержку по любым вопросам, мы быстро отвечаем и поможем настроить анализатор для проверки ваших проектов



    Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. PVS-Studio: the Additional Insurance of the Medical Software.

    PVS-Studio

    201,29

    Ищем ошибки в C, C++ и C# на Windows, Linux, macOS

    Поделиться публикацией

    Похожие публикации

    Комментарии 5
      +2
      Пользуясь случаем: всем пользователям macOS предлагаю морально подготовиться пробовать проверять свои C, C++ проекты с помощью PVS-Studio. Ориентировочно PVS-Studio for macOS появится в начале следующего месяца.
        –1
        Сравните пожалуйста два проекта, некогда имевших общую кодовую базу:
        github.com/OpenSIPS/opensips
        github.com/kamailio/kamailio
          0
          Недавно столкнулся со старой ошибкой в своем коде. Решил проверить, как PVS-Studio отработает мою ошибку. К сожалению он не нашел не только мою ошибку, но и более простую.

          Простой вариант:
          std::vector<int> a;
          int b = a.front();
          

          (причем вариант «int b = a[0];» детектируется).

          Более сложный вариант:
          std::vector<int> a = { 3 };
          a.assign(10, a.front());
          
            0
            Не подумали про front и assign. Спасибо. Добавим.
              0
              На здоровье.

              Кроме assign/front, еще есть несколько функций приводящих к таким же проблемам.
              Да и контейнер такой не только вектор.

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

          Самое читаемое