发布日期:2020 年 4 月 28 日

此版本包括以下增强功能:

新版本约定

现在所有 Parasoft 产品(包括 C/C++ test)都遵循新的版本控制方案:YYYY.发布

扩展的 Automotive Compliance Pack

我们扩展了 Automotive Pack,以帮助您达到汽车标准。

MISRA C:2012 修订版 2

我们已在 MISRA C 2012 测试配置中添加了新规则,以完全涵盖 MISRA C 2012 修订版 2 中的准则。

AUTOSAR C++ 14

我们已将新规则添加到AUTOSAR C++14 编码准则测试配置中,并更新了现有规则以扩展对 AUTOSAR C++14 的支持。

使用覆盖率顾问增加代码覆盖率

您现在可以使用覆盖率顾问有效地实施提高代码覆盖率的策略。覆盖率顾问通过分析代码并显示有关如何设置测试以覆盖未覆盖行的可用解决方案,为弥补代码覆盖方面的空白提供指导。有关覆盖率顾问视图中有关参数、全局变量和函数调用的必需依赖项和前提条件的信息。这使您可以减少手动创建有意义的测试用例和适当的桩函数的时间和精力。请参见使用覆盖率指导助手

支持源码控制管理系统

我们增加了对以下方面的支持:

  • Git 1.8、 1.9、 2.x
  • SVN 1.10、 1.11、 1.12、1.13
  • Microsoft Team Foundation Server 2017、2018、 2019

请参见 对环境、系统和配置的弃用支持 以获取有关支持对源码控制系统的弃用和删除信息。

新建和更新测试配置

我们更新了以下测试配置:

  • AUTOSAR C++14 编码准则
  • CWE Top 25 + On the Cusp 2019
  • 流分析侵蚀
  • 流分析标准
  • 高完整性 C++
  • MISRA C 2012
  • MISRA C++ 2008
  • SEI CERT C Guidelines
  • SEI CERT C Rules
  • SEI CERT C++ Rules

新建的和更新的代码分析规则

我们添加了新的静态分析规则,以扩展合规性标准的覆盖率,特别关注 AUTOSAR C++ 14 和 MISRA C:2012 修订2;有关新规则和更新规则的列表,请参见新规则更新规则

其他更新

  • 我们扩展了对通过 OpenID Connect 进行身份验证的支持。C/C++test 现在支持带有多个用户证书的密钥库。

  • 我们已经将内置的 Python 运行时升级到 Python 2.7。现在,将【规则向导】规则中与 Python 相关的错误报告为设置问题。
  • 现在,您可以将 C/C++test 配置为在报告安装问题时返回非零退出代码。请参见命令行退出代码
  • 我们提高了测试配置的性能,其中启用了同一基于流的规则的多个重复项。

对环境、系统和配置的弃用支持

现在不再支持以下环境和系统,并且在将来的版本中将不再支持。

Windows 7

在系统的 EOL 之后,不再支持 Windows 7。

源码控制管理系统

不支持以下 SCM:

  • AccuRev
  • ClearCase
  • CVS
  • Serena Dimensions
  • StarTeam
  • Synergy CM
  • Visual Source Safe

C/C++test 测试配置

我们已弃用以下测试配置:

  • Texas Instruments > 运行带有内存监测功能的 TI CCS 3.x 应用程序
  • Texas Instruments > 运行 TI CCS 3.x 测试
  • ARM > 使用内存监视运行 ADS 1.2 应用程序
  • ARM > 运行 ADS 1.2 测试
  • Windows Mobile> Windows Mobile 可执行的构建测试
  • Windows Mobile> 通过 Pocket PC 的内存监视功能构建和运行应用程序
  • Window Mobile> 使用智能手机的内存监视功能构建和运行应用程序
  • Window Mobile> 为 Pocket PC 生成并运行测试可执行文件
  • Window Mobile> 使用智能手机构建和运行测试可执行
  • Window Mobile, Windows CE>使用内存监视功能为 Wmobile 或 Windows CE(ActiveSync)构建和运行应用程序
  • Window Mobile, Windows Ce>为 Windows Mobile 或 Windows CE(ActiveSync)构建并运行测试可执行文件

默认情况下,不推荐使用的测试配置 不可用,并且只能用作用户定义的测试配置。它们在以下位置由 C/C++test 附带:[INSTALL_DIR]\configs\Deprecated.

删除了对环境和系统的支持

源码控制管理系统

我们已经删除了对 Microsoft Team Foundation Server 2010 的支持

其他已删除的功能

  • 代码检查模块已被删除,不再支持。
  • 不再支持在命令行中将 C/C++test与基于 Eclipse 的构建器一起使用。已删除用于在测试之前执行 指定的构建脚本的选项 (-buildscript %SCRIPT_FILE%)
  • 以下选项已从测试配置设置的【通用】选项卡中删除:测试后>如果未报告任何任务,则将添加/修改的文件提交到源码控制
  • 不再受支持 Windows 8。

已解决的 Bugs 和 FRs

Bug/FR ID

说明

CPP-42109

Cpptestcli 应该针对设置问题返回非零退出代码(例如,启动单元测试失败)

CPP-43406

VS 启用/禁用测试用例操作不会刷新【测试用例浏览器】树

CPP-44060

错误:预期为 ';' 之前 '}’标记 QCommandLineOption

CPP-44561

MISRA2004-19_10 (MISRAC2012-RULE_20_7-a) 报告宏定义中的字符串串联误报

CPP-44565

改善 Crosstool-NG GCC(5.x)的自动检测

CPP-44578

类 "std::enable_if<>" 没有成员 "type"

CPP-44736

MSVC /宽容模式 - 不应禁用 friend 类注入

CPP-44739

MSVC 的 MP 选项/配置错误

CPP-44742

当不包含 'return’的 'default’语句不是 'switch’中的最后一个标签时,MISRA2004-16_8(MISRAC2012-RULE_17_4-a)报告误报

CPP-44744

Xharness 错误处理了 GNU __underlying_type 运算符

CPP-44760

在运行时和 cpptest_driver.c.h 中不一致使用 malloc/free

CPP-44761

如果运行时是使用 unicode 构建的,则 CppTest 流重定向 API 将不起作用。

CPP-44796

Tiarm 编译器配置应将 '--define’选项传递给链接器

CPP-44850

Armclang -ignore 使用 -cc1 命令行

CPP-44862

确保 dsStrToFloat 的每个变体返回相同的结果

CPP-44865

CODSTA-190(CERT_C-FLP37-c)报告对名称不是 'memcmp’ 和 'bcmp’的字符串库中的函数的调用时的误报

CPP-44871

FORMAT-07 报告 #error 指令的报文中使用的 '=’字符的误报

CPP-44872

FORMAT-21 报告 #error 指令的报文中使用的 '!’字符的误报

CPP-44874

CODSTA-112 (MISRAC2012-RULE_18_8-a)包含不再有效的“不足”部分

CPP-44918

AUTOSAR-A6_5_1-a (HICPP-6_2_1-a) 在不使用容器的循环上报告误报

CPP-44923

GLOBAL-UNUSEDFUNC (AUTOSAR-M0_1_10-a) 报告在 'hash’结构中定义的 conversion operator() 的误报

CPP-44946

构造函数调用的无效桩函数调用检测,以大括号初始化器作为参数

CPP-45054

CPPTEST_POST_CONDITION_MEM_BUFFER 的自动验证不适用于 NULL 指针

CPP-45067

PB-23 在对 std::initializer_list() 的调用中报告误报

CPP-45092

HICPP-6_2_1-a (AUTOSAR-A6_5_1-a) 报告不能用'for-range'代替'for'循环上的误报

CPP-45190

修复: GCC 允许将非文字类型用作 constexpr 函数参数

CPP-45193

MISRA2004-16_10 (AUTOSAR-M0_3_2-a) 规则报告范围循环的误报

CPP-45227

双花括号函数参数的不可编译检测代码

CPP-45228

Std::getline 的不可编译的检测代码

CPP-45239

HICPP-6_2_1-a (AUTOSAR-A6_5_1-a) 在主体中使用循环计数器的“ for”循环上报告误报

CPP-45240

具有通用 Lambda 的 C++ 代码的 cpptestcc 检测错误

CPP-45272

'cpptestcli -fail’不返回非零退出代码

CPP-45283

当参数不能具有指向 const 类型的指针时,MISRA2004-16_7 (MISRA2008-7_1_2_a) 报告误报

CPP-45312

OPT-23(JSF-122)与 JSF-121 不兼容(不应内联具有 2 条以上语句的 getter/setter)

CPP-45320

CERT_C-EXP46-a 与 CERT EXP46-C 要求不匹配

CPP-45352

无法在方法定义中使用类型别名

CPP-45375

对于 static_cast 操作,显式转换运算符被虚假地忽略

CPP-45498

C 桩函数文件和 CPP testrunner 文件可能会导致链接问题(Visual Studio)

FA-7416

MISRA2012-RULE-18_1_a 和 MISRA2012-DIR-4_1_a (BD-PB-ARRAY) 的误报

FA-7445

在将 char 数组终止为 0 和 '\ 0’ 时报告了 BD-PB-OVERFNZT 规则

FA-7473

在算术和条件运算的上下文中,无法使用全局变量的地址为函数创建 CFG。

FA-7539

BD-PB-ARRAY 报告误报超出范围

FA-7571

当初始化在循环内发生时,C++test 报告 BD-PB-NOTINIT 虚假违规。

FA-7619

BD-PB-WRAPESC 在递归调用上可能会误报

FA-7626

BD-API-VALPARAM 报告对 #include <complex> 的错误违规

XT-33567  'parasoft-suppress’在内部抑制原因中包含 '//’的注释抑制问题。
XT-37692IDE 生成的引擎许可证可能会有所不同,具体取决于 Java 或 IKVM 版本。



新建规则

规则 ID

说明

AUTOSAR-A12_8_2-a

用户定义的复制和移动分配运算符应使用用户定义的 no-throw swap 函数

AUTOSAR-A14_5_3-a

非成员通用运算符只能在不包含类(结构)类型、枚举类型或联合类型声明的命名空间中声明

AUTOSAR-A8_4_4-a

一个函数的多个输出值应作为结构或元组返回

AUTOSAR-A8_5_4-a

避免使用 std::initializer_list 重载构造函数

AUTOSAR-M0_1_2-ac

避免条件总是得出相同的值

BD-SECURITY-SENSLOG

避免将敏感数据传递给写入日志文件的函数

BD-SECURITY-TDALLOC

在用于确定内存分配的大小之前,先验证可能受到污染的数据

CODSTA-205

不要将数组强制转换为指向比数组大的结构的指针

CODSTA-206

不应使用 '_Noreturn’函数说明符

CODSTA-207

不应使用 stdnoreturn.hheader 文件

CODSTA-208

不得使用 stdalign.hheader 文件

CODSTA-209

不应使用由 stdatomic.h 指定的功能

CODSTA-210

不应使用 '_Thread_local’存储类说明符

CODSTA-211

不应使用由 threads.h 指定的功能

CODSTA-212

不应使用 'rsize_t’类型

CODSTA-213

不应使用 '_Alignas’对齐说明符和 '_Alignof’运算符

CODSTA-214

不应使用 '_Atomic’类型说明符和 '_Atomic’类型限定符

CODSTA-215

宏 '_STDC_WANT_LIB_EXT1_’不应定义为 '0’以外的值

CODSTA-216

不应使用 '_Generic’运算符

CODSTA-217

不应使用 'errno_t'类型

CODSTA-218

不要使用以下宏:RSIZE_MAX, L_tmpnam_s, TMP_MAX_S

CODSTA-219

请勿使用 ISO/IEC 9899:2011 标准附件 K 中定义的函数

CODSTA-MCPP-47

避免使用 std::initializer_list 重载构造函数

CODSTA-MCPP-48

一个函数的多个输出值应作为结构或元组返回

CODSTA-MCPP-49

用户定义的复制和移动分配运算符应使用用户定义的 no-throw swap 函数

CODSTA-MCPP-50

不能使用遍历容器所有元素且不使用其循环计数器的 for 循环

CWE-532-a

避免将敏感数据传递给写入日志文件的函数

HICPP-12_5_6-a

用户定义的复制和移动分配运算符应使用用户定义的 no-throw swap 函数

MISRA2008-0_1_2_aa

项目不得包含不可行的路径

MISRA2012-DIR-4_1_k

避免整数溢出

MISRA2012-DIR-4_13_f

不要释放尚未获得的锁

MISRA2012-RULE-1_4_a

不应使用 '_Generic’运算符

MISRA2012-RULE-1_4_b

不应使用 '_Noreturn’函数说明符

MISRA2012-RULE-1_4_c

不应使用 stdnoreturn.hheader 文件

MISRA2012-RULE-1_4_d

不应使用 '_Atomic’类型说明符和 '_Atomic’类型限定符

MISRA2012-RULE-1_4_e

不应使用由 stdatomic.h 指定的功能

MISRA2012-RULE-1_4_f

不应使用 '_Thread_local’存储类说明符

MISRA2012-RULE-1_4_g

不应使用由 threads.h 指定的功能

MISRA2012-RULE-1_4_h

不应使用 '_Alignas’对齐说明符和 '_Alignof’运算符

MISRA2012-RULE-1_4_i

不得使用 stdalign.hheader 文件

MISRA2012-RULE-1_4_j

宏 '_STDC_WANT_LIB_EXT1_’不应定义为 '0’以外的值

MISRA2012-RULE-1_4_k

不应使用 'rsize_t’类型

MISRA2012-RULE-1_4_l

不应使用 'errno_t'类型

MISRA2012-RULE-1_4_m

不要使用以下宏:RSIZE_MAX, L_tmpnam_s, TMP_MAX_S

MISRA2012-RULE-1_4_n

请勿使用 ISO/IEC 9899:2011 标准附件 K 中定义的函数

MISRA2012-RULE-21_21

不得使用 stdlib.h 的库函数 'system'

MISRA2012-RULE-8_3_c

对象或函数的所有声明应具有兼容的类型

MISRAC2012-DIR_4_13-f

不要释放尚未获得的锁

MISRAC2012-DIR_4_1-k

避免整数溢出

MISRAC2012-RULE_1_4-a

不应使用 '_Generic’运算符

MISRAC2012-RULE_1_4-b

不应使用 '_Noreturn’函数说明符

MISRAC2012-RULE_1_4-c

不应使用 stdnoreturn.hheader 文件

MISRAC2012-RULE_1_4-d

不应使用 '_Atomic’类型说明符和 '_Atomic’类型限定符

MISRAC2012-RULE_1_4-e

不应使用由 stdatomic.h 指定的功能

MISRAC2012-RULE_1_4-f

不应使用 '_Thread_local’存储类说明符

MISRAC2012-RULE_1_4-g

不应使用由 threads.h 指定的功能

MISRAC2012-RULE_1_4-h

不应使用 '_Alignas’对齐说明符和 '_Alignof’运算符

MISRAC2012-RULE_1_4-i

不得使用 stdalign.hheader 文件

MISRAC2012-RULE_1_4-j

宏 '_STDC_WANT_LIB_EXT1_’不应定义为 '0’以外的值

MISRAC2012-RULE_1_4-k

不应使用 'rsize_t’类型

MISRAC2012-RULE_1_4-l

不应使用 'errno_t'类型

MISRAC2012-RULE_1_4-m

不要使用以下宏:RSIZE_MAX, L_tmpnam_s, TMP_MAX_S

MISRAC2012-RULE_1_4-n

请勿使用 ISO/IEC 9899:2011 标准附件 K 中定义的函数

MISRAC2012-RULE_21_21-a

不得使用 'stdlib.h’ 或 'cstdlib’库中的 'system()'函数

MISRAC2012-RULE_8_3-c

对象或函数的所有声明应具有兼容的类型

TEMPL-18

非成员通用运算符只能在不包含类(结构)类型、枚举类型或联合类型声明的命名空间中声明

更新规则

规则类别

规则 IDs

AUTOSAR C++14 编码准则

AUTOSAR-A15_0_2-a, AUTOSAR-A15_1_4-a, AUTOSAR-A15_5_1-b, AUTOSAR-A18_5_2-a, AUTOSAR-A18_5_3-c, AUTOSAR-A27_0_2-b, AUTOSAR-A27_0_2-c, AUTOSAR-A2_13_4-a, AUTOSAR-A3_1_6-a, AUTOSAR-A5_0_1-f, AUTOSAR-A5_2_5-a, AUTOSAR-A5_2_5-c, AUTOSAR-A5_3_2-a, AUTOSAR-A6_5_1-a, AUTOSAR-A8_4_12-c, AUTOSAR-A8_4_13-b, AUTOSAR-A8_4_2-a, AUTOSAR-M0_3_1-b, AUTOSAR-M0_3_1-d, AUTOSAR-M0_3_1-f, AUTOSAR-M0_3_1-i, AUTOSAR-M0_3_2-a, AUTOSAR-M16_0_6-a, AUTOSAR-M16_0_8-a, AUTOSAR-M5_0_16-a, AUTOSAR-M5_0_16-b, AUTOSAR-M7_1_2-b, AUTOSAR-M9_3_3-a

数据流分析

BD-API-NEGPARAM, BD-API-REVNEGPARAM, BD-PB-ARRAY, BD-PB-CHECKRETGEN, BD-PB-NP, BD-PB-OVERFRD, BD-PB-OVERFWR, BD-PB-PTRARR, BD-RES-BADDEALLOC, BD-RES-LEAKS

SEI CERT C

CERT_C-API01-a, CERT_C-ARR30-a, CERT_C-ARR38-a, CERT_C-ARR38-b, CERT_C-ARR39-a, CERT_C-CON30-a, CERT_C-CON40-a, CERT_C-CON43-a, CERT_C-DCL13-a, CERT_C-DCL40-a, CERT_C-ENV01-c, CERT_C-ENV30-a, CERT_C-ERR33-c, CERT_C-ERR33-d, CERT_C-EXP08-b, CERT_C-EXP10-b, CERT_C-EXP30-b, CERT_C-EXP34-a, CERT_C-EXP47-a, CERT_C-FIO22-a, CERT_C-FIO37-a, CERT_C-FIO38-a, CERT_C-FIO41-b, CERT_C-FIO42-a, CERT_C-FLP37-c, CERT_C-INT10-a, CERT_C-MEM00-e, CERT_C-MEM12-a, CERT_C-MEM31-a, CERT_C-MSC19-a, CERT_C-MSC19-b, CERT_C-MSC37-a, CERT_C-POS54-c, CERT_C-PRE01-a, CERT_C-STR05-a, CERT_C-STR30-a, CERT_C-STR31-a, CERT_C-STR31-b, CERT_C-STR38-a, CERT_C-WIN30-a

SEI CERT C++

CERT_CPP-ERR56-a, CERT_CPP-ERR57-a, CERT_CPP-EXP50-b, CERT_CPP-FIO51-a, CERT_CPP-MEM51-d, CERT_CPP-MSC52-a, CERT_CPP-STR50-c, CERT_CPP-STR50-g, CERT_CPP-STR51-a

编码约定

CODSTA-166_a, CODSTA-166_b, CODSTA-185_a, CODSTA-188, CODSTA-190, CODSTA-195, CODSTA-CPP-54, CODSTA-CPP-78

Modern C++ 的编码约定

CODSTA-MCPP-10_a, CODSTA-MCPP-35

常见不足枚举

CWE-119-a, CWE-119-d, CWE-119-e, CWE-125-a, CWE-125-c, CWE-476-a, CWE-770-a, CWE-772-a, CWE-787-a, CWE-787-d

异常

EXCEPT-21

高完整性 C++

HICPP-12_5_4-a, HICPP-5_1_2-b, HICPP-5_2_1-a, HICPP-5_2_1-c, HICPP-5_3_3-c, HICPP-6_3_2-a, HICPP-9_1_1-a

Joint Strike Fighter

JSF-069, JSF-114, JSF-115, JSF-117_b, JSF-118, JSF-122, JSF-151.1, JSF-174_a, JSF-174_b, JSF-204.1_b, JSF-206

MISRA C 1998

MISRA-107_a, MISRA-107_b

MISRA C 2004

MISRA2004-12_2_b, MISRA2004-16_10, MISRA2004-16_7, MISRA2004-16_8, MISRA2004-19_10, MISRA2004-19_16, MISRA2004-20_4

MISRA C++ 2008

MISRA2008-0_3_1_a, MISRA2008-0_3_1_b, MISRA2008-0_3_1_g, MISRA2008-0_3_1_h, MISRA2008-0_3_2, MISRA2008-16_0_6, MISRA2008-16_0_8, MISRA2008-18_4_1, MISRA2008-5_0_16_a, MISRA2008-5_0_16_b, MISRA2008-5_0_1_b, MISRA2008-7_1_2_a, MISRA2008-8_4_3, MISRA2008-9_3_3

MISRA C 2012 (Legacy)

MISRA2012-DIR-4_12, MISRA2012-DIR-4_13_a, MISRA2012-DIR-4_1_a, MISRA2012-DIR-4_1_b, MISRA2012-DIR-4_1_g, MISRA2012-DIR-4_1_h, MISRA2012-DIR-4_7_b, MISRA2012-RULE-13_2_b, MISRA2012-RULE-17_4, MISRA2012-RULE-18_1_a, MISRA2012-RULE-18_1_c, MISRA2012-RULE-1_3_d, MISRA2012-RULE-1_3_e, MISRA2012-RULE-1_3_g, MISRA2012-RULE-20_13, MISRA2012-RULE-20_7, MISRA2012-RULE-21_17_b, MISRA2012-RULE-21_19_a, MISRA2012-RULE-21_3, MISRA2012-RULE-21_8_c, MISRA2012-RULE-22_1, MISRA2012-RULE-22_5_a, MISRA2012-RULE-22_5_b, MISRA2012-RULE-7_4, MISRA2012-RULE-8_13_a

MISRA C 2012

MISRAC2012-DIR_4_1-a, MISRAC2012-DIR_4_1-b, MISRAC2012-DIR_4_1-g, MISRAC2012-DIR_4_1-h, MISRAC2012-DIR_4_12-a, MISRAC2012-DIR_4_13-a, MISRAC2012-DIR_4_7-b, MISRAC2012-RULE_13_2-b, MISRAC2012-RULE_17_4-a, MISRAC2012-RULE_18_1-a, MISRAC2012-RULE_18_1-c, MISRAC2012-RULE_1_3-d, MISRAC2012-RULE_1_3-e, MISRAC2012-RULE_1_3-g, MISRAC2012-RULE_20_13-a, MISRAC2012-RULE_20_7-a, MISRAC2012-RULE_21_17-b, MISRAC2012-RULE_21_19-a, MISRAC2012-RULE_21_3-a, MISRAC2012-RULE_21_8-c, MISRAC2012-RULE_22_1-a, MISRAC2012-RULE_22_5-a, MISRAC2012-RULE_22_5-b, MISRAC2012-RULE_7_4-a, MISRAC2012-RULE_8_13-a

优化

OPT-23

可能的错误

PB-23, PB-27, PB-67, PB-72

删除规则

删除了以下规则以提高结果的准确性:

规则类别

规则 IDs

AUTOSAR C++14 编码准则

AUTOSAR-A27_0_2-d, AUTOSAR-A27_0_2-g

SEI CERT C

CERT_C-EXP46-a, CERT_C-MSC32-a, CERT_C-MSC32-b, CERT_C-MSC32-c, CERT_C-STR34-a, CERT_C-STR34-e, CERT_C-STR34-f

SEI CERT C++

CERT_CPP-STR50-a, CERT_CPP-STR50-d

MISRA C 2012 (Legacy)

MISRA2012-RULE-21_8_d

MISRA C 2012

MISRAC2012-RULE_21_8-d

  • No labels