SuperTest是专为C和C++编译器及库设计的测试与验证套件,已持续遵循(ISO)语言规范标准超过40年。该套件提供完整的验证环境,包含以下功能:
• 包含针对所有版本C语言和C++语言(包括标准库)的手工编写及自动生成的海量测试文件套件
• 涵盖编译器的所有内部组件,包括前端、后端、优化机制及代码生成功能
• 一款易于配置的测试驱动程序,可针对任意编译器及任意目标平台执行验证测试
• 以多种格式(包括HTML和XML)提供验证结果综合概述的报告生成器
数百万级一致性测试用例
包含手工编写与自动生成的测试文件,可全面验证编译器的正确性与质量。
编译器内部组件测试
针对编译器优化、数据模型与调用约定的专项测试集。
灵活的测试平台
功能强大、可配置的测试驱动程序,可无缝集成至任意编译器开发环境与目标处理器。
完善的报告体系
丰富的报告工具可呈现测试用例与语言规范之间的追溯关系,用于生成合规性文档。
C与C++语言全支持
测试套件按体系化结构搭建,全面覆盖ISO C与ISO C++语言标准。
功能安全标准合规
产品设计满足关键应用领域最新的功能安全标准要求。
SuperTest是面向C/C++编译器与标准库的测试验证套件,四十余年来始终同步跟进ISO语言标准的演进。它是一套完整的验证环境,具备以下核心能力:
• 海量手工编写的测试用例
• 大量自动生成的测试用例
• 可配置的测试驱动程序,可便捷搭建并执行验证任务
• 报告生成器,可通过HTML、JUnit XML等多种格式输出验证结果的全面概览,并可快速定位最新版编译器与库版本相对于指定基准版本的回归问题
优化覆盖度
验证优化器是编译器验证中难度最高的任务之一。我们对测试套件进行了扩展,最大化编译器优化器的源代码覆盖率,从而全面提升编译器的测试覆盖水平。
我们开发了专门聚焦循环优化的测试套件。循环优化会对程序的控制流图产生显著改造,因此需要本优化套件中包含的专项验证技术。例如,该测试套件的用例设计目标,是覆盖编译器在汇编代码层面生成的全部代码与分支,确保优化后程序的测试覆盖不存在盲区。
诊断信息验证
在诸多场景下,语言规范要求编译器必须输出诊断信息。SuperTest包含一套精细化的测试子集,这类用例必须在编译阶段失败;若编译未按要求报错,SuperTest会自动识别并提示。
代码尺寸追踪
SuperTest的代码尺寸追踪功能,可便捷监控不同编译器之间、或不同编译器配置下生成代码的体积变化。该功能内置在SuperTest的测试驱动程序中,会记录测试套件内每个测试对应的所有目标文件、所有链接后可执行文件的体积。
代码尺寸报告生成器可细化查看可执行文件、代码段、数据段或CSS段的体积,既可输出单页汇总报告(含直方图与 Top5 异常项概览),也可生成CSV格式的明细报告,可导入电子表格进行分析。报告生成器还支持对比两次SuperTest运行的结果,让用户一目了然地查看变更带来的影响。
调用约定测试器
编译器的调用约定定义了函数如何从调用方接收参数、以及如何将结果返回给调用方。为了尽可能提升函数调用的执行效率,调用约定的实现往往十分复杂。因此在编译器验证中,测试调用约定的实现正确性至关重要。
为此,我们在 SuperTest 编译器测试套件中内置了调用约定测试器。该测试器可生成成对的源文件,文件经过精心设计且具备自测试能力:其中一个文件包含被测函数,用于校验传入的参数值是否符合预期生成值;另一个文件则以生成值作为参数调用该函数,并校验返回值。
通过这种方式,调用约定测试器可用于验证单一编译器内部的调用约定正确性,校验不同版本编译器之间是否存在破坏应用程序二进制接口(ABI)的变更,甚至可测试完全不同编译器之间的调用约定一致性。
调用约定测试器支持高度配置,例如可设置生成的测试数量、使用的数据类型,或是否启用可变参数列表(varargs)。因此可通过配置,让测试器完全匹配被测编译器的特性。
标准库测试
尽管 SuperTest 传统上定位于编译器验证工具,但需要明确的是:C 与 C++ 语言规范同时定义了编译器语言规则与标准库两部分内容,而 SuperTest 可对二者同步完成验证。
SuperTest 的标准库测试套件覆盖 C90、C99、C11、C18、C++03、C++11、C++14、C++17 与 C++20 全版本标准。
核心优势
对于研发编译器或开发安全关键应用的企业而言,使用 SuperTest 可带来多重价值:
• 提升编译器质量:在编译器实现缺陷影响生产代码之前,提前发现并修复问题
• 加速研发进程:依托开箱即用的完备测试套件,缩短编译器开发与验证周期
• 满足合规要求:凭借完善的文档体系与可追溯能力,满足各项功能安全标准要求
• 降低运行风险:减少安全关键应用中因编译器缺陷引发的故障风险
• 开源可信保障:完成第三方及开源编译器的资质认定,使其可合规用于安全关键应用场景
编译器工具链与目标平台
您可查阅 SuperTest 支持的编译器工具链与目标平台的全套文档,内容包含配置指南与最佳实践:
• 支持 GCC、Clang 及各类专有商用编译器
• 覆盖嵌入式与桌面级架构
• 提供配置与集成操作指南
SuperTest 测试类型示例
SuperTest 包含正向与负向两类测试用例:
• 正向测试:行为符合语言规范定义的合法 C/C++ 程序,预期可正常编译执行
• 负向测试:预期编译器应输出诊断信息,且编译过程应当失败