开始免责声明:我是一个团队的一员,该团队开发了一个测试套件来验证 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/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.
正如@stephen m 正确提到的那样。韦伯测试是认证过程的一部分。另一部分是记录过程、测试结果和缓解措施(变通方法)。
验证编译器后,只要用例相同,就可以在任何安全关键环境中重用它。