now*_*wox 4 validation gcc safety-critical
我们是ISO-13485,并致力于医疗设备的开发。我们目前使用的是经过IAR认证的编译器,但我们正在考虑切换到gcc,因为它是跨平台的,并且可以使用简单的Makefile自动进行构建,而IAR无法实现。
我试图了解我们应该怎么做才能获得arm-none-eabi-gcc医学发展认证。
ISO-13485,ISO-26262,ISO-62304或ISO-61508都没有给我任何提示,表明我应该做什么来验证我的编译器。
我会坚持使用IAR还是有其他选择?
我想这个问题也可以扩展到太空/汽车领域。
我在一家拥有ISO-26262认证的公司的工具链团队中工作,最近我们对开发套件进行了功能安全性验证。
该过程的一部分是运行一组验证测试套件,其中编译了数千个测试程序,并将结果与预期结果进行了比较。另一部分是ISO标准符合性测试。当然,这些测试中没有一个是详尽无遗的,但是确实发现了一些问题。第三部分包括运行GCC本身随附的DejaGNU测试套件。
安全验证的下一个技巧是确保记录所有已知问题。功能安全并不意味着您的工具链是完美的,仅意味着已知的缺陷已被清楚地记录在案,并且您已经建立了识别和记录缺陷的过程。要进行全面验证,您需要做的是修正或记录每个与预期行为的偏差,并为其辩护,以便没有已知的,不合理的偏差。
验证本身就是整个行业。它既昂贵又费时。
免责声明:我是开发测试套件以验证 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.
Run Code Online (Sandbox Code Playgroud)
解释必须与 ISO 标准一致。要进行验证,您需要一个基于语言标准的测试套件。
DejaGNU 套件不适合验证编译器的功能安全性。DejaGNU 有助于识别您的编译器版本中是否存在一些“众所周知的问题”,但它不会根据任何 ISO 标准系统地验证编译器。它主要是一个回归测试套件,可以测试许多 ISO 标准中没有的需求。以下是一些例子:
例如 1:https : //github.com/gcc-mirror/gcc/blob/master/gcc/testsuite/cc%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.
Run Code Online (Sandbox Code Playgroud)
正如@stephen m 正确提到的那样。webb 测试是认证过程的一部分。另一部分是记录过程、测试结果和缓解措施(变通方法)。
验证编译器后,只要用例相同,就可以在任何安全关键环境中重用它。