装备电子系统的研发、测试、保障解决方案中心

Plum Hall测试套件
产品中心 Plum Hall测试套件
产品概述

      Plum Hall是为程序员和软件开发社区制作编译器验证套件和软件的世界领导者。Plum Hall测试套件用于验证C/C++编译器及库是否符合ISO和ANSI标准(由相关组织定义)。测试用例套件每年8月发布,持续跟踪(正在制定中的)标准的符合性——这些标准每三年发布一次。该套件支持从C/C++11到C++14、C++17、C++20、C++23及正在进行中的C++26等各版本标准的演进过程。随着标准发展,测试套件会动态调整:新增、禁用或修改测试用例。


      Plum Hall测试套件在多个维度具有测试价值:
       ● 首要维度是,严格验证当前C/C++标准符合性,测试用例精确对应到标准文档中的单一句子级别。
       Plum Hall的长期历史积累。自C/C++诞生之初便开展标准符合性测试,测试套件随语言标准同步演进。测试用例库伴随标准更新持续扩展。
       灵活架构。采用单一原始测试用例源代码树(“source tree”),但支持为不同编译器、目标机器、发行版本等生成任意数量的目标树(“destination trees”)。
       嵌入式系统(“独立环境”)支持。专为嵌入式系统设计,仅需实现底层输出函数即可运行,无需依赖本地C++标准库实现。
       多标准版本测试能力。测试套件基础设施支持选择性地针对新旧不同标准年份进行验证。例如:可配置仅测试旧版标准(如C/C++11或C/C++17),跳过新版或旧版语言特性的无关测试。
       功能模块化控制。通过构建测试标志自由启用/禁用特定语言或库功能。例如:若复数运算测试与当前环境无关,可直接关闭该模块。
       前瞻性标准提案测试。新增测试用例关联特定标准提案年份(如c2x/c2y)。语言特性具有时效性(例如某功能可能仅在某个标准年份存在后被弃用),该设计允许正在开发新版语言的编译器验证其新实现。
       标志文件拆分优化。将flags.h拆分为两个文件:1)flags.h:包含发行年份特定的标志配置。2)compiler-flags.h:包含针对特定编译器的编译标志。通过ifdef条件编译指令启用具体标志配置。


功能特性

Validatiton Suite for C:C语言验证套件

行业优选的质量验证测试套件,适用于C语言及库测试!
       该套件具有双重使命:

编译器测试与缺陷发现

验证对ANSI/ISO C标准的符合性

C99支持嵌入式系统的技术报告

作为ANSI/ISO C标准的权威测试套件,其包含该标准所有要求的正负双向测试用例。作为唯一一次C测试套件技术竞赛的获胜者,本套件被广泛视为C语言的行业标准测试方法。

本套件是一组用于测试和评估C语言编译器(含解释器)的C程序集,对以下机构具有重要价值:

需优先评估/采购编译器的组织

需开发符合ANSI/ISO C标准的编译器实现者

专业开发团队。C语言验证套件由深度参与ANSI/ISO C标准制定与演进的C语言专家编写,套件每个章节均与标准文档对应章节严格关联。Plum Hall承诺持续维护该套件作为C标准的最权威验证工具。

编译器实现者的价值。提供精选测试用例集(当前含56,000+行C源代码,维护更新定期新增),突破内部测试套件的“文化传统”局限,注入外部视角,遵循“正向边际效用”现代测试准则。换句话说,每个用例均有明确设计依据,杜绝冗余用例堆砌。

独立性与授权模式。C语言验证套件与任何编译器厂商无商业关联,提供专业且无偏见的质量评估工具。

授权方式:单站点源代码许可协议(Single Site Source Code License Agreement)

使用范围限制在单一站点的“两英里半径”内

半径范围内目标机器的数量与类型不受限


Suite++:C++语言验证套件

行业优选的质量验证测试套件,适用于C++语言测试!

作为行业首选的C++编译器测试方案,本套件针对ISO/IEC 14882:2003(ANSI/ISO C++标准)提供全面验证。由具有行业权威地位的专家团队开发,核心成员包括:

√  Thomas Plum:曾任ISO C++标准委员会WG21召集人(任期6年)

√  Daniel Saks:曾任ANSI C++标准委员会X3J16秘书(任期6年)

支持64位操作系统的工业标准的测试、大文件支持的测试, POSIX Threads测试、 POSIX Realtime测试 X/Open Threads测试、 ISO C Amendment 1 和 Dynamic Linking的测试。支持Single UNIX? Specification, Version 2。

通用测试库 (VSXgen) ,支持 VSTH、VSRT、VSX5测试

支持单独运行测试套件,也可以与其他测试套件集成运行。

使用标准的测试环境Toolkit,可以方便的扩展。

支持多个不同标准的测试模式

测试方法论。Plum Hall将“测试事实”定义为C++标准中的一个独立句子,或者一项替代规则。若某句话隐含正负双向测试需求,则计为两个独立案例。C++标准中共含:正向测试事实超过2600项、负向测试事实超过2000项,总计至少4600项测试事实。

(注:上述统计仅涵盖C++语言定义,不包含标准库相关测试)

 (一)技术特性
        深度覆盖:每个正向测试事实可能对应源代码中的多个可执行测试,包含模板、异常等复杂特性专项验证。
        用例设计:每个测试事实均通过手工编写、独立设计的C++源代码程序验证,其覆盖率可比肩Plum Hall C验证套件(唯一C测试套件技术竞赛获胜者)。
        代码可读性:所有示例均为直观易懂的代码片段,避免正确性难以人工验证的复杂结构,杜绝无效用例堆砌。
        (二)C/C++兼容性保障
        Plum Hall致力于最大化C与C++的兼容性(多数用户的刚性需求)。为此:
        C验证套件增强:在CONFORM模块中新增开关选项,可排除所有行为在C++中发生改变的测试用例。
        C++专项测试:通过Suite++完整验证C++对C的修改、新增特性等所有变更。
        联合使用要求:必须与Plum Hall C验证套件配合使用以实现全栈验证。
        (三)授权与维护
        授权模式:单站点源代码许可(使用范围限制在“两英里半径”内,目标机器数量/类型不限)。
        捆绑要求:必须与Plum Hall C验证套件同时获取许可。
        维护支持:未来C++标准“语言部分”的更新将作为可选维护包提供。

 库测试分离:标准库测试需单独获取LibSuite++(C++库验证套件)许可。


Validatiton Suite for C:C语言验证套件

        该套件是测试现有C++库或评估其符合ISO/IEC 14882:2003标准(ANSI/ISO标准)所需改进的理想工具。其测试范围覆盖:

传统组件:语言支持、输入输出流类

现代扩展:标准模板库(STL)、本地化对象

        与Plum Hall其他行业标准C/C++测试套件一致,LibSuite++采用逐句解析标准文档的方法。标准中每个具有可测试效果的语句均配有对应测试用例,可单独执行以隔离特定符合性问题。测试用例的设计标准与Suite++(Plum Hall C++语言验证套件)完全相同。

        验证该庞大库需要超过2500个测试用例:

基础验证:部分用例仅针对简单的最低需求。

功能交互验证:多数用例通过商业化合理示例体现预期功能,通常结合标准其他部分的特性或交互机制。

测试输出:运行时生成包含失败/跳过/通过用例的统计表,以及详细的错误日志。

        LibSuite++可明确揭示现有输入输出流库为符合ISO/IEC 14882:2003所需进行的补充,包括:

宽字符输入输出流类支持

“模板化输入输出流”(用于操作任意元素类型的流)
基于本地化对象的逐流(per-stream)本地化控制
标准C库增强:需补充完整的三精度数学函数集(单精度/双精度/扩展精度)

        LibSuite++还指导如何修改惠普(Hewlett-Packard)提供的STL开源版本以符合标准。ISO/IEC 14882:2003对STL的主要调整包括:

宽字符输入输出流类支持

“模板化输入输出流”(用于操作任意元素类型的流)
基于本地化对象的逐流(per-stream)本地化控制

        通过聚焦已知问题领域,LibSuite++可大幅缩短现有代码的标准化改造周期。

        尽管实现C++标准符合性充满挑战,Plum Hall通过提供以下工具助力达成目标:

LibSuite++:全面验证标准C++库的各个组件

Suite++(需单独获取):专注编译器功能验证

        二者协同工作,确保语言实现与库实现的双重标准符合性。


HTML报告

       HTML报告在每个套件测试运行结束时创建。这些报告以直观的方式显示了测试运行的结果。每个测试的意图都很容易看到,提出的问题,无论是编译错误还是链接或执行错误,都会给出,并且可以获得测试源代码和编译器输出的链接。


1742550241428112.png

图 1 一致性结果页面显示了每个测试用例的编译器错误和一致性失败的链接。


1742550297376405.png

图 2 测试套件覆盖页面显示测试用例对每个标准年的覆盖


1742550327201758.png

图 3 注释页面显示了每个测试用例目录的测试用例注释。


1742550359375990.png

图 4 注释摘要页面显示了所有测试用例目录的测试用例注释。