Perforce QAC 2026.3 新特性

Perforce QAC 2026.3 新特性
 

Perforce QAC 2026.3 新增了对 MISRA C++:2023 (TC1:2026) 的支持——这是最近发布的技术勘误,对标准中的部分规则和指令进行了编辑性澄清,并扩大了少数规则和指令的检测范围。通过新增对 switch 语句结构规范性的检查,部分 MISRA C 规则的执行能力也得到了改进。QAC 分析引擎新增了对更多 C23 和 C++20 语言特性的支持,以提升解析和分析能力。同时,针对数组元素、结构体元素以及通过函数指针进行调用的数据流建模也得到了改进,从而减少误报和漏报。

 

此次版本更新还扩展了 AI 辅助问题修复工作流程,使 AI 助手现在能够通过 Perforce SA MCP 服务器直接启动 QAC 分析,同时新增了对更多 AI 聊天工具的支持,包括适用于 Visual Studio Code 的 Cline 扩展。Visual Studio Code 扩展现已支持 Rust,而 Rust 分析器现在支持泛型、trait(特征)及其实现,从而能够对符合 Rust 语言惯用编程方式的代码进行更深入的分析。Perforce Validate 的更新包括:支持取消项目导入、改进构建期间的 LDAP 连接恢复能力、加快跨项目同步速度,以及升级第三方依赖组件以纳入最新的安全更新。

 

合规模块

与 MISRA C++:2023 (TC1:2026) 保持一致

 

MISRA C++:2023 (TC1:2026) 已正式发布,修正了自该指南最初发布以来发现的措辞歧义和遗漏问题,对约 50 条规则和指令进行了编辑性澄清。少数规则的检测范围也有所扩大,以符合修订后的指南要求:内存复制类函数的覆盖范围现已明确包含对应的宽字符版本;新增识别更多缓冲区管理函数和宽字符库函数;同时解决了两个相关检查项之间检测范围重叠的问题。

 

Perforce QAC 对相关检查项的分析,以及 MISRA C++:2023 合规模块 M2CPP,均已进行调整,以反映上述变更。

 

改进 MISRA C 规则 16.1 的执行能力

 

MISRA C:2012 和 MISRA C:2025 合规模块中规则 16.1 的执行能力得到了改进。现在会从语法层面对整个 switch 语句体进行检查,而不再仅检查第一个 switch 标签之前的部分,同时新增了与新 QAC 消息对应的映射关系。

 

改进对 C23 和 C++20 语言特性的支持

C23 标签位置的自由化

 

QAC 现在支持 C23 引入的两种标签放置方式:标签后紧跟声明,以及将标签作为复合语句中的最后一项。针对这两种情况,系统均会报告新的消息,并统一适用于命名标签、case 标签和 default 标签。

 

同一语法规则的变更还解决了错误的 case 标签导致部分虚假“Unexpected token”(意外的标记)报告的问题。

 

C++20 std::bit_cast

QAC 现在能够在常量求值过程中正确建模 std::bit_cast。此前执行的是数值转换,而现在能够正确保留位模式。同时还支持与结构体之间的双向转换。

 

C++20 no_unique_address 属性

QAC 现在支持 C++20 的 no_unique_address 属性,包括 Microsoft C++ 的对应形式。该属性通过将空基类优化推广至数据成员,消除了空类型带来的存储开销。如果两个其他方面完全相同的类在该属性的使用上存在差异,QAC 现在能够正确地判定它们不具备布局兼容性。

 

C++20 聚合类型的类模板实参推导

此前,QAC 仅根据类模板的构造函数生成推导指引。现在,QAC 还会根据基类和非静态数据成员生成聚合类型推导候选,并将其与基于构造函数生成的推导指引一起纳入相同的重载决议过程。该功能支持数组边界、字符串字面量、指定初始化器、大括号省略以及别名模板。

 

QAC 现在还会将 __cpp_deduction_guides 报告为其 C++20 对应的值,因此,检测该特性的代码将不再被报告为依赖不受支持的功能。

 

扩展 constexpr 求值能力

QAC 针对 C++ 的常量求值能力在多个方面得到了扩展:

  • 现在支持 C++20 引入的动态内存分配与释放,以及具有不确定值的平凡类型对象的声明。
  • 现在可以使用 C++17 引入的 std::addressof。
  • 新增子消息,用于识别导致本应为常量的表达式无法满足常量要求的对象或函数调用。
  • 现在能够在分析过程中正确支持 GNU 扩展 __builtin_constant_p。
  • 现在能够识别声明在 std 内部嵌套内联命名空间中的 std::is_constant_evaluated。

 

放宽重写相等运算符的重载决议规则

根据 C++20 的一份缺陷报告,QAC 现在对合成及重写的相等运算符应用放宽后的重载决议规则。

 

改进对 switch 语句结构规范性的检查

此前,对 switch 子句结构规范性的检查仅适用于第一个 case 或 default 标签之前的代码。现在,QAC 也会在遇到标签后继续检查语句结构是否正确,包括检测直接放置在子句语句列表中的声明,以及位于无条件终止当前分支的语句之后、下一个标签之前的其他语句或声明。对于静态声明和常量初始化声明,系统会报告严重程度较低的消息变体。

C 和 C++ 分析均新增了相应消息。位于带大括号子句内部的声明或语句不受影响,因为大括号会将其置于嵌套的复合语句中。

 

改进数据流分析

提升数据流建模深度

此次版本更新包含多项针对 Dataflow(数据流)建模精度的改进。由于这些改进涉及建模机制,而非针对特定检查器的优化,因此可能影响任何 Dataflow 消息。其优势包括减少误报、减少因无法完全确定某个值而被降级为“possible”(可能存在)级别的消息,以及减少漏报。

 

具体变更如下:

  • 当同一个表达式在函数中出现多次时,Dataflow 现在会将其作为单一值进行跟踪,而不再独立推导每次出现的表达式并将其视为未知值。
  • 元素建模范围已从标量数组扩展至结构体,包括嵌套结构体、联合体、数组、函数指针以及指针成员。对于从数组元素推导出的指针边界,以及整个数组和整个结构体复制过程中的值跟踪,现在也更加精确。
  • 通过函数指针间接进行的调用,现在能够被追踪至其可能调用的目标函数,而不再被视为无法分析其内部行为的调用。结合扩展后的元素建模能力,现在能够精确解析作为数组元素存储的函数指针,以及存储在数组元素成员中的函数指针。

 

增强 Rust 语言分析能力

支持泛型、trait(特征)及其实现

QAC Rust 分析器的 Dataflow 支持能力得到了大幅扩展,现在能够对泛型函数进行实例化和内联分析,涵盖独立泛型函数、默认实现、泛型 trait 及其实现中的方法,以及使用 impl Trait 类型的函数签名。

现在还能够解析泛型函数体内部对 trait 函数的静态调用,使这些函数也能够被完整内联,并在适当情况下选择默认实现和部分特化(partial specializations)实现。由此,QAC 能够对符合 Rust 语言惯用编程方式的代码进行更深入的分析。

Visual Studio Code 中的 Rust 支持

Visual Studio Code 扩展现在支持 Rust,因此可以在 IDE 中以与 C 和 C++ 相同的方式查看和修复 Rust 诊断问题。

 

AI 辅助问题修复功能的 MCP 更新

通过 AI 助手启动分析

Perforce 静态分析模型上下文协议(Model Context Protocol,MCP)服务器能够以标准化、独立于具体工具的格式,向 AI 助手提供静态分析数据,例如诊断信息、修复指导和规则文档。

在 2026.3 版本中,AI 助手还可以启动 QAC 分析,因此无需离开 AI 助手的交互环境,即可在单一对话式工作流程中完成分析、审查和问题修复。

 

支持更多 AI 聊天工具

MCP 服务器已针对更广泛的 AI 聊天工具进行了测试,Visual Studio Code 的 Cline 扩展现已与 GitHub Copilot Chat 一起被记录为受支持的客户端。

Validate 平台改进

取消项目导入

管理员现在可以查看导入队列的大小,并通过 Validate 门户或 Web API 取消排队中或正在进行的项目导入操作。“import_project” 操作会返回目标项目 ID,而 “import_status” 会报告新增的“cancelling”(正在取消)和“cancelled”(已取消)状态,以便跟踪操作进度。

改进构建期间的 LDAP 连接恢复能力

当 LDAP 连接已关闭时,Validate 现在会重新尝试 LDAP 请求,建立新的连接并继续构建,而不再因初次请求失败而导致构建失败。这一改进提升了在正常运行过程中可能发生 LDAP 连接中断的环境下,构建过程的连续性。

加快跨项目同步速度

运行 validate xsync --module,可以将跨项目同步操作的范围限定为源项目中单个模块所属的问题。通过减少需要处理的问题数量,可以加快同步速度,并允许团队仅同步项目特定部分的 citation(引用)信息更新,而不会影响其他模块。

安全性改进

Validate 使用的第三方依赖组件已完成升级,以确保纳入最新的安全更新,包括 Tomcat、Jetty、Spring Boot、OpenSSL 和 log4j。

 

体验优化

编译器支持能力增强

  • 改进对 typeof 的支持,以更准确地模拟 GCC 的行为。
  • 扩展对最新 TI 编译器版本(5.1.1)的支持。
  • Auto CCT 现在能够模拟 GNU 的 -idirafter 和 -isysroot 头文件搜索顺序标志,解决基于 Bazel 的构建中因缺少头文件而导致的分析失败问题。
  • Auto CCT 现在会为 GCC 15 及更高版本启用 C23 关键字,以防止标准头文件中出现解析器错误。
  • Auto CCT 现在会忽略 GNU C++20 模块扫描标志 -fdeps-format、-fmodule-mapper 和 -fmodules-ts。
  • 改进了在使用 Auto CCT 时,Tasking C++ 和 Green Hills C++ CCT 对 offsetof 的支持。
  • 改进了对 Arm 目标平台宏的处理,使 64 位 Arm 内建函数能够顺利完成分析。

操作系统支持

  • 新增对 Ubuntu 26.04 LTS 的支持。
  • 新增对 Rocky Linux 10 的支持。

 

QAC 2026.3 中的重要变更

组件兼容性

QAD 和 QAXD 证书已在 2026.3 版本中更新。因此,2026.2 及更早版本的组件无法与 2026.3 项目引擎配合使用,反之亦然。

不再需要配置代理服务器

继 2026.2 版本改为通过随机本地端口进行 HTTPS 通信后,现在本地通信将忽略代理服务器配置。此前为使 QAC 能够在受代理限制的环境中运行而必须采用的变通解决方案,现在已不再需要。

许可证管理变更

以下许可证相关变更自 2026.1 版本起引入:

  • 2025 年版许可证与 Perforce QAC 2026.1 或更新版本不兼容,因此必须通过 revops-apptesting@perforce.com 联系 Perforce,申请新的许可证。
  • 使用 Rust 分析器需要新的许可证。

终止对 Visual Studio 2015 的支持

正如 2026.2 版本中提前公告的那样,自 2026.3 版本起,Visual Studio IDE 插件不再支持 Visual Studio 2015。

终止对早于 2019-03 版本的 Eclipse 的支持

自 2026.3 版本起,Eclipse IDE 插件不再支持早于 2019-03 的 Eclipse 版本。

 

提前公告

Dashboard 将从 2027.1 版本起终止生命周期

从 2027.1 版本开始,Dashboard 将达到生命周期终点,当前 QAC GUI 和 CLI 中用于与 Dashboard 交互的功能将被弃用。

建议使用与 Perforce Validate 连接的项目,对分析结果进行集中管理。Perforce 可以提供专业服务,支持将现有项目数据从 Dashboard 迁移至 Validate 的过程。

弃用 quietextended 选项

-quietextended(-qx)选项自 2026.1 版本起已被弃用,并可能在未来版本中移除。

 

想体验Perforce QAC 2026.3最新特性,欢迎联系北汇信息申请软件试用!

 
posted @ 2026-10-10 10:16  北汇信息  阅读(9)  评论(0)    收藏  举报