如何认证编译器的功能安全性?

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 标准中的要求。以下是一些例子:

例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

此测试 "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 测试是认证过程的一部分。 另一部分是记录过程、测试结果和缓解措施(解决方法)。

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