此版本包括新功能,以及对现有功能的增强。

与开发测试平台集成

最新版本的 C++test 具有与 Parasoft 开发测试平台(DTP)的集成功能,该平台基于 Parasoft 的创新方法来不断改善软件质量流程。它可以通过汇总和分析本地分析结果并将其转换为可导入到您的 IDE 中的可行结果,来帮助您优化开发流程。  可以在团队中共享 DTP 中存储的测试配置,以帮助您实施组织的编码策略*

更多详细信息请参见连接 DTP

支持新编译器

  • GNU GCC 6.x ( Windows 和 Linux)
  • 适用于 ARM 的 IAR 编译器 v.7.8x(Windows)
  • Renesas RX C/C++ 编译器 2.5x (Windows)
  • ARM Compiler 5.0 / ARM Compiler 5.0 foruVision: 更新了对 C++11 的支持 (–cpp11) (Windows)

增强静态分析

在此版本中,我们在 CERT C 编码标准以及现代 C++ 标准(C++11、C++14 和 C++17)之后添加了新规则,请参见 新建代码分析规则。CERT C 规则已添加到 CERT C 编码标准内置测试配置中; 有关映射的信息,请参见Updated CERT C Configuration

此外,静态分析和流分析报告的结果的稳定性和准确性得到了提高; 有关结果或文档更改的准确性方面已修改的规则列表,请参见。Updated Code Analysis Rules

RuleWizard 模块已扩展为具有以下节点和属性:

  • C/C++ 节点> 表达式 > Miscellaneous> Lambda 节点
  • C/C++ 节点> 通用 > Lambda Capture 节点
  • HasDefaultValue 属性(对于具有默认值的常规参数为 true)

有关更多详细信息,请参见 RuleWizard 10.3.2 用户指南。

收集调用覆盖率

已扩展覆盖率功能以收集有关在程序运行时执行的已定义函数或方法调用数量的信息,请参阅查看覆盖率信息

其他变更和增强

  • 新的“代码解析问题”选项使您可以更好地自定义在分析具有解析错误的文件时如何执行静态分析。此选项已替换 C++test 9.6 中的“分析文件解析错误”选项。请参见静态选项卡设置 - 定义如何执行静态分析
  • 如果使用命令行模式,则可以使用-publish选项将结果发送到 DTP,该选项在 C++test 9.x 中用于将结果报告给 Team Server。在 C++test 10.x,可以使用-publishteamserver 选项启用将结果发布到团队服务器。
  • 新的 CPPTEST_ENGINE_EXTRA_ARGS 选项增强了 C++test 的功能,该选项使您可以自定义高级静态分析设置,例如源文件编码或内存大小; 参见配置高级选项
  • 不再支持 Windows 2000、 Windows XP、 Windows Vista、Windows Server 2003 。

新建代码分析规则

规则 ID

标题

BD-PB-BYTEORD在系统之间传输数据时使用正确的字节顺序
BD-PB-INVENV不要依赖可能导致其无效的操作之后的环境指针
BD-PB-PUTENVDonotcallputenv() 使用指向自动变量的指针作为参数
BD-SECURITY-RAND正确的种子伪随机数生成器
BD-TRS-ARG声明具有适当存储持续时间的 POSIX 线程之间共享的对象
BD-TRS-BITLOCK修改位字段时使用锁来防止竞争情况
BD-TRS-DSTRLOCK不要破坏另一个线程的互斥量
BD-TRS-FORKFILE使用 fork 和 file 描述符时避免竞争条件
BD-TRS-REVLOCK不要释放尚未获得的锁
BD-TRS-SYMLINK在检查符号链接的存在时避免竞争条件
CODSTA-127_b在对象类型的指针与 'uintptr_t’或 'intptr_t’以外的整数类型之间不应执行转换
CODSTA-150_c避免对不安全宏的参数产生副作用
CODSTA-187_a将字符转换为无符号字符,然后分配给较大的整数
CODSTA-187_b'signed char’ 类型的表达式不应用作数组索引
CODSTA-187_c将字符转换为无符号字符,然后再转换为较大的整数
CODSTA-188不要混淆窄字符串和宽字符串和函数
CODSTA-189不要在指针上添加或减去小数位整数
CODSTA-190不要使用对象表示来比较浮点值
CODSTA-MCPP-10_a优先使用 const 迭代器而不是迭代器
CODSTA-MCPP-10_bPrefertousecbegin()、crbegin、cend()、crend() functions
CODSTA-MCPP-13在右值引用上使用 std::move() 在转发引用上使用 std::forward()
CODSTA-MCPP-15_a避免默认捕获模式
CODSTA-MCPP-15_b在 lambdas 中显式使用 'this’指针,并使用默认按引用捕获
CODSTA-MCPP-16_a智能指针成员较原始指针成员更优
CODSTA-MCPP-16_b对于数组或 STL 容器,智能指针优先于原始指针
CODSTA-MCPP-16_c首选 'std::make_shared' 而不是直接使用 new
CODSTA-MCPP-16_d最好使用 std::unique_ptr 代替 std::auto_ptr
CODSTA-MCPP-17永远不要返回通过引用捕获本地对象的 lambdas
CODSTA-MCPP-18_a避免在 lambda 表达式中使用不必要的默认捕获模式 
CODSTA-MCPP-18_b避免不必要的 lambda 捕获
GLOBAL-CONDMUTEXVAR在条件变量上并发等待操作不要使用多个互斥量
SECURITY-02_b不要使用 rand() 函数生成伪随机数
SECURITY-43不应使用 'PTHREAD_CANCEL_ASYNCHRONOUS’参数调用函数 'pthread_setcanceltype()’
SECURITY-44放弃特权时遵守正确的撤销顺序
SECURITY-45确保成功放弃特权
SECURITY-46指向结构的指针不应传递给可以将数据复制到用户空间的函数
SECURITY-47检查移位运算符的右侧操作数时,请使用正确的整数精度
SECURITY-48不要调用 system()

更新了代码分析规则

已为 BD-PB-ZERO 规则添加了详细模式。

 MISRA C 2012 规则的严重性级别已更新:

  • 强制性的→严重性1
  • 必需→严重性2
  • 警告→严重性4

修改了以下规则:

  • BD-PB-ARRAY, BD-PB-ERRNO, BD-PB-EXCEPT, BD-PB-INTOVERF, BD-PB-NOTINIT, BD-PB-NZTS, BD-PB-SWITCH, BD-TRS-TSHL
  • CODSTA-144*,CODSTA-145*,CODSTA-150*, CODSTA-150_b*, CODSTA-161_a, CODSTA-CPP-04, CODSTA-CPP-28, CODSTA-CPP-53
  • INIT-06, INIT-07, INIT-15
  • JSF-071_b, JSF-118, JSF-174_b, JSF-177_b, JSF-180_f, JSF-180_g, JSF-209_b
  • MISRA-043_c, MISRA-043_d, MISRA-107_b, MISRA2004-6_3_b, MISRA2004-16_7, MISRA2008-7_1_1, MISRA2008-7_1_2_a, MISRA2012-DIR-4_1_a, MISRA2012-DIR-4_6_b, MISRA2012-RULE-8_13_a, MISRA2012RULE-10_1_a, MISRA2012-RULE-12_4_a*, MISRA2012-RULE-14_3_zd, MISRA2012-RULE-18_1_a
  • OOP-01
  • PB-66_a*
  • SECURITY-10, SECURITY-12*, SECURITY-25

* 文档变更

更新了 CERT C 配置

根据以下规则映射,已使用新的 Parasoft 规则更新了 CERT C 编码标准的内置测试配置:

CERT ID

Parasoft ID

CERT-ARR39-CCODSTA-189
CERT-CON33-CSECURITY-25
CERT-DCL39-CSECURITY-46
CERT-ENV31-CBD-PB-INVENV
CERT-ENV33-CSECURITY-48
CERT-ERR30-CBD-PB-ERRNO
CERT-FIO42-CBD-RES-LEAKS
CERT-FLP32-CBD-API-VALPARAM
CERT-FLP36-CMISRA-043_c, MISRA-043_d
CERT-FLP37-CCODSTA-190
CERT-INT30-CPB-66_a, BD-PB-INTOVERF
CERT-INT35-CSECURITY-47
CERT-INT36-CCODSTA-127_b
CERT-MSC30-CSECURITY-02_b
CERT-MSC32-CBD-SECURITY-RAND
CERT-POS30-CCODSTA-144,CODSTA-145, BD-PB-OVERFNZT
CERT-POS33-CSECURITY-10
CERT-POS34-CBD-PB-PUTENV
CERT-POS35-CBD-TRS-SYMLINK
CERT-POS36-CSECURITY-44
CERT-POS37-CSECURITY-45
CERT-POS38-CBD-TRS-FORKFILE
CERT-POS39-CBD-PB-BYTEORD
CERT-POS47-CSECURITY-43
CERT-POS48-CBD-TRS-DSTRLOCK, BD-TRS-REVLOCK
CERT-POS49-CBD-TRS-BITLOCK
CERT-POS50-CBD-TRS-ARG
CERT-POS51-CBD-TRS-ORDER
CERT-POS52-CBD-TRS-TSHL
CERT-POS53-CGLOBAL-CONDMUTEXVAR
CERT-PRE31-CCODSTA-150, CODSTA-150_b, CODSTA-150_c
CERT-STR31-CBD-PB-ARRAY, BD-PB-OVERFWR, BD-SECURITY-BUFWRITE, BD-SECURITY-OVERFWR, SECURITY-12
CERT-STR34-CCODSTA-187_a, CODSTA-187_b, CODSTA-187_c
CERT-STR38-C

CODSTA-188

修复的 PRs 和 FRs

FR/PR ID说明
CPP-36398使用特征库时将函数定义与其声明匹配的问题
CPP-36530/STACK 选项被 C++test (VS 2010) 忽略
CPP-36850添加对 C++11 inarmcc5.06 的支持
CPP-36861支持 Renesas RX 2.05 C/C++ 编译器 (renrx_2_5)
CPP-36892当指针在同一行中分配并检查时,规则 MISRA-107_b 报告误报
CPP-36896支持 GNU GCC 6(基于本机/基于主机的编译器)
CPP-36965CODSTA-CPP-53 误报,“将局部变量'x'声明为 const”
CPP-36966OOP-01 (Sutter Rule 54) 误报: 基类的复制构造函数应该被保护或使用智能指针作为参数
CPP-36967CODSTA-CPP-28 (Sutter Rule 27) 误报: “定义二进制算术运算符时,也应提供赋值版本”
CPP-37009即使成员直接在类[C++11]中初始化,规则 INIT-06 也会报告违规
CPP-37011使用隐式有符号/无符号类型时,规则 MISRA2004-6_3_b(MISRA2012-DIR-4_6_b,JSF-209_b)不报告违规
CPP-37018规则 CODSTA-CPP-04 不应报告移动构造函数的违规情况 [C++11]
CPP-37019使用 cwc.bin 时出现分段错误
CPP-37021此规则 MISRA2004-16_7 (MISRA2012-RULE-8_13_a) 报告误报
CPP-37022QA: 当多字节字符用于抑制注释时,抑制注释出现乱码
CPP-37023[VS2015] Parse problem with _Buffer_descriptor() restrict(amp,cpu)
CPP-37782在 BDF 文件中未正确扫描源路径

现在不推荐使用* Parasoft Concerto(4.9.4和更高版本)。您仍然可以连接到项目中心和团队服务器模块,但是将来的 C++test 版本将用 DTP 工作流代替与 Conterto 相关的工作流。

  • No labels