此版本包括新功能,以及对现有功能的增强。
与开发测试平台集成
最新版本的 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-PUTENV | Donotcallputenv() 使用指向自动变量的指针作为参数 |
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_b | Prefertousecbegin()、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-C | CODSTA-189 |
CERT-CON33-C | SECURITY-25 |
CERT-DCL39-C | SECURITY-46 |
CERT-ENV31-C | BD-PB-INVENV |
CERT-ENV33-C | SECURITY-48 |
CERT-ERR30-C | BD-PB-ERRNO |
CERT-FIO42-C | BD-RES-LEAKS |
CERT-FLP32-C | BD-API-VALPARAM |
CERT-FLP36-C | MISRA-043_c, MISRA-043_d |
CERT-FLP37-C | CODSTA-190 |
CERT-INT30-C | PB-66_a, BD-PB-INTOVERF |
CERT-INT35-C | SECURITY-47 |
CERT-INT36-C | CODSTA-127_b |
CERT-MSC30-C | SECURITY-02_b |
CERT-MSC32-C | BD-SECURITY-RAND |
CERT-POS30-C | CODSTA-144,CODSTA-145, BD-PB-OVERFNZT |
CERT-POS33-C | SECURITY-10 |
CERT-POS34-C | BD-PB-PUTENV |
CERT-POS35-C | BD-TRS-SYMLINK |
CERT-POS36-C | SECURITY-44 |
CERT-POS37-C | SECURITY-45 |
CERT-POS38-C | BD-TRS-FORKFILE |
CERT-POS39-C | BD-PB-BYTEORD |
CERT-POS47-C | SECURITY-43 |
CERT-POS48-C | BD-TRS-DSTRLOCK, BD-TRS-REVLOCK |
CERT-POS49-C | BD-TRS-BITLOCK |
CERT-POS50-C | BD-TRS-ARG |
CERT-POS51-C | BD-TRS-ORDER |
CERT-POS52-C | BD-TRS-TSHL |
CERT-POS53-C | GLOBAL-CONDMUTEXVAR |
CERT-PRE31-C | CODSTA-150, CODSTA-150_b, CODSTA-150_c |
CERT-STR31-C | BD-PB-ARRAY, BD-PB-OVERFWR, BD-SECURITY-BUFWRITE, BD-SECURITY-OVERFWR, SECURITY-12 |
CERT-STR34-C | CODSTA-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-36965 | CODSTA-CPP-53 误报,“将局部变量'x'声明为 const” |
CPP-36966 | OOP-01 (Sutter Rule 54) 误报: 基类的复制构造函数应该被保护或使用智能指针作为参数 |
CPP-36967 | CODSTA-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-37022 | QA: 当多字节字符用于抑制注释时,抑制注释出现乱码 |
CPP-37023 | [VS2015] Parse problem with _Buffer_descriptor() restrict(amp,cpu) |
CPP-37782 | 在 BDF 文件中未正确扫描源路径 |
现在不推荐使用* Parasoft Concerto(4.9.4和更高版本)。您仍然可以连接到项目中心和团队服务器模块,但是将来的 C++test 版本将用 DTP 工作流代替与 Conterto 相关的工作流。