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

时间:2018-03-27 15:07:59

标签: validation gcc safety-critical

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

我正在努力了解我们应该怎样做才能获得arm-none-eabi-gcc医疗发展认证。

ISO-13485,ISO-26262,ISO-62304或ISO-61508都没有给我一些关于验证编译器应该做些什么的提示。

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

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

3 个答案:

答案 0 :(得分:4)

我在一家拥有ISO-26262认证的公司的工具链团队工作,最近我们的开发套件已经过功能安全验证。

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

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

验证是一个独立的整个行业。它既昂贵又耗时。

答案 1 :(得分: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“ dialect”:

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正确提到的。 Webb测试是认证过程的一部分。 另一部分是记录过程,测试结果和缓解措施(解决方法)。

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

答案 2 :(得分:0)

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