【问题标题】:How to certify a compiler for functional safety?如何认证编译器的功能安全?
【发布时间】:2018-03-27 15:07:58
【问题描述】:

我们符合 ISO-13485 标准,从事医疗器械开发。我们目前使用IAR certified 编译器,但我们正在考虑切换到 gcc,因为它是跨平台的,并且可以使用普通 Makefile 自动构建,而 IAR 无法实现。

我正在尝试了解我们应该怎么做才能获得 arm-none-eabi-gcc 的医学开发认证。

ISO-13485、ISO-26262、ISO-62304 或 ISO-61508 都没有提示我应该做些什么来验证我的编译器。

我是坚持 IAR 还是有其他选择?

我想这个问题也可以扩展到太空/汽车。

【问题讨论】:

  • 我想知道您是否将软件组件开发为 SEooC?

标签: validation gcc safety-critical


【解决方案1】:

我在一家获得 ISO-26262 认证的公司的工具链团队工作,我们最近对我们的开发套件进行了功能安全验证。

该过程的一部分是运行一组验证测试套件,其中编译了数千个测试程序,并将结果与​​预期结果进行比较。另一部分是 ISO 标准一致性测试。当然,这些测试都不是详尽无遗的,但确实发现了一些问题。然而,第三部分包括运行 GCC 本身附带的 DejaGNU 测试套件。

安全验证的下一个技巧是确保记录所有已知问题。功能安全并不意味着你的工具链是完美的,它只意味着已知的缺陷被清楚地记录下来,并且你有一个流程来识别和记录缺陷。您需要做的是修复或记录和证明与预期行为的每一个偏差,这样就不会有已知的、不合理的偏差。

验证本身就是一个完整的行业。这是昂贵且耗时的。

【讨论】:

    【解决方案2】:

    开始免责声明: 我是一个团队的一员,该团队开发了一个测试套件来验证 C/C++ 编译器并验证编译器的功能安全性。 结束免责声明

    这是可能的。该过程称为“资格”而不是认证,因为它旨在发现编译器中的任何弱点并在需要时定义解决方法。在 ISO 26262 中,可以在第 8 部分第 11 节“使用软件工具的信心”中找到它。本例中的“软件工具”就是编译器。

    第 11.4.9.2 节说:

    11.4.9.2 The validation of the software tool shall meet the following criteria:
    
    
    the validation measures shall demonstrate that the software tool complies with
    its specified requirements,
    ...
    EXAMPLE
    The standard for a programming language helps to define the requirements for
    validating the associated compiler.
    

    说明必须与 ISO 标准保持一致。要进行验证,您需要一个基于语言标准的测试套件。

    DejaGNU 套件不适合对编译器的功能安全进行限定。 DejaGNU 有助于识别您的编译器版本中是否存在一些“众所周知的问题”,但它不会根据任何 ISO 标准系统地验证编译器。它主要是一个回归测试套件,并测试了许多 ISO 标准中没有的要求。以下是一些例子:

    例如 1: https://github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/c-c%2B%2B-common/diagnostic-format-json-1.c

    此测试测试编译器是否生成 JSON 格式的诊断消息,这不是 ISO/IEC-9899:* C 标准、ISO/IEC-14882:* C++ 标准或 ISO-26262 标准所要求的。

    例如 2: https://github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/g%2B%2B.dg/tree-ssa/pr13954.C

    如果您的编译器未实现任何类型的条件常量传播优化,则此测试“失败”,但 C++ 标准和任何功能安全标准均不要求这样做。

    例如 3: 另一方面,通过 DejaGNU 套件并不表示符合标准,而只是符合 GNU“方言”:

    https://cpp.godbolt.org/z/Gyu_i5

    验证编译器在应用程序开发中使用的选项、配置和环境也很重要。这通常称为“用例”。 ISO 26262 说:

    11.4.3.1
    When using a software tool, it shall be ensured that its usage, its
    determined environmental and functional constraints and its general
    operating conditions comply with its evaluation criteria or its
    qualification.
    

    正如@stephen m 正确提到的。韦伯测试是认证过程的一部分。 另一部分是记录过程、测试结果和缓解措施(解决方法)。

    验证编译器后,您可以在任何安全关键型环境中重复使用它,只要用例相同。

    【讨论】:

      【解决方案3】:

      如果您使用任何供应商特定的软件,您可以要求提供软件具有异常行为(误报)的用例或场景,在这种情况下,gcc 是开源的,需要软件用户进行验证。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-12
        • 2018-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-17
        • 2022-12-18
        相关资源
        最近更新 更多