我们是ISO-13485并且为医疗设备做开发。我们目前使用IAR certified编译器,但我们正在考虑切换到gcc,因为它是跨平台的,并且可以使用普通的Makefile自动构建,这是IAR无法实现的。
我正在努力了解我们应该怎样做才能获得arm-none-eabi-gcc
医疗发展认证。
ISO-13485,ISO-26262,ISO-62304或ISO-61508都没有给我一些关于验证编译器应该做些什么的提示。
我是坚持IAR还是我有其他选择?
我想这个问题也可以扩展到太空/汽车。
答案 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标准以外的许多要求。以下是一些示例:
该测试测试编译器是否以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>