如何认证编译器的功能安全性?
How to certify a compiler for functional safety?
我们是 ISO-13485 并为医疗设备进行开发。我们目前使用 IAR certified 编译器,但我们正在考虑切换到 gcc,因为它是跨平台的,并且可以使用普通的 Makefile 自动构建,这对于 IAR 是不可能的。
我想了解我们应该怎么做才能获得 arm-none-eabi-gcc
医学发展认证。
ISO-13485、ISO-26262、ISO-62304 或 ISO-61508 都没有提示我应该如何验证我的编译器。
我是坚持使用 IAR 还是有其他选择?
我想这个问题也可以扩展到 space/automotive。
我在一家获得 ISO-26262 认证的公司的工具链团队工作,我们最近对我们的开发套件进行了功能安全验证。
该过程的一部分是 运行 一组验证测试套件,其中编译了数千个测试程序,并将结果与预期结果进行比较。另一部分是 ISO standard-conformance 测试。 None 这些测试当然是详尽无遗的,但确实发现了一些问题。然而,第三部分包括 运行 GCC 本身附带的 DejaGNU 测试套件。
安全验证的下一个技巧是确保记录所有已知问题。功能安全并不意味着你的工具链是完美的,它只意味着已知的缺陷被清楚地记录下来,并且你有一个流程来识别和记录缺陷。要进行全面验证,您需要做的是修复或记录并证明每一个与预期行为的偏差,这样就没有已知的、不合理的偏差。
验证本身就是一个完整的行业。它很贵而且 time-consuming。
如果您使用任何供应商特定的软件,您可以要求提供软件具有异常行为(误报)的用例或场景,在这种情况下 gcc 是开源的,需要软件用户进行验证.
开始免责声明:
我所在的团队开发了一个测试套件来验证 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 可用于识别您的编译器版本中是否存在某些 "well-known-issues",但它不会根据任何 ISO 标准系统地验证编译器。它主要是一个回归测试套件,并测试许多不在 ISO 标准中的要求。以下是一些例子:
此测试测试编译器是否以 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
此测试 "fails" 如果您的编译器未实现任何类型的条件常数传播优化,但这不是 C++ 标准和任何功能安全标准所要求的。
例3:
另一方面,通过 DejaGNU 套件并不表示符合标准,而仅表示符合 GNU "dialect" :
https://cpp.godbolt.org/z/Gyu_i5
验证编译器在应用程序开发中使用的选项、配置和环境也很重要。这通常称为 'use case'。 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 所述。 webb 测试是认证过程的一部分。
另一部分是记录过程、测试结果和缓解措施(解决方法)。
验证编译器后,只要用例相同,就可以在任何安全关键环境中重复使用它。
我们是 ISO-13485 并为医疗设备进行开发。我们目前使用 IAR certified 编译器,但我们正在考虑切换到 gcc,因为它是跨平台的,并且可以使用普通的 Makefile 自动构建,这对于 IAR 是不可能的。
我想了解我们应该怎么做才能获得 arm-none-eabi-gcc
医学发展认证。
ISO-13485、ISO-26262、ISO-62304 或 ISO-61508 都没有提示我应该如何验证我的编译器。
我是坚持使用 IAR 还是有其他选择?
我想这个问题也可以扩展到 space/automotive。
我在一家获得 ISO-26262 认证的公司的工具链团队工作,我们最近对我们的开发套件进行了功能安全验证。
该过程的一部分是 运行 一组验证测试套件,其中编译了数千个测试程序,并将结果与预期结果进行比较。另一部分是 ISO standard-conformance 测试。 None 这些测试当然是详尽无遗的,但确实发现了一些问题。然而,第三部分包括 运行 GCC 本身附带的 DejaGNU 测试套件。
安全验证的下一个技巧是确保记录所有已知问题。功能安全并不意味着你的工具链是完美的,它只意味着已知的缺陷被清楚地记录下来,并且你有一个流程来识别和记录缺陷。要进行全面验证,您需要做的是修复或记录并证明每一个与预期行为的偏差,这样就没有已知的、不合理的偏差。
验证本身就是一个完整的行业。它很贵而且 time-consuming。
如果您使用任何供应商特定的软件,您可以要求提供软件具有异常行为(误报)的用例或场景,在这种情况下 gcc 是开源的,需要软件用户进行验证.
开始免责声明: 我所在的团队开发了一个测试套件来验证 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 可用于识别您的编译器版本中是否存在某些 "well-known-issues",但它不会根据任何 ISO 标准系统地验证编译器。它主要是一个回归测试套件,并测试许多不在 ISO 标准中的要求。以下是一些例子:
此测试测试编译器是否以 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
此测试 "fails" 如果您的编译器未实现任何类型的条件常数传播优化,但这不是 C++ 标准和任何功能安全标准所要求的。
例3: 另一方面,通过 DejaGNU 套件并不表示符合标准,而仅表示符合 GNU "dialect" :
https://cpp.godbolt.org/z/Gyu_i5
验证编译器在应用程序开发中使用的选项、配置和环境也很重要。这通常称为 'use case'。 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 所述。 webb 测试是认证过程的一部分。 另一部分是记录过程、测试结果和缓解措施(解决方法)。
验证编译器后,只要用例相同,就可以在任何安全关键环境中重复使用它。