在此版本中,我们专注于扩展对新编译器的支持,以及创建包括新的和增强的测试配置的合规性包:

支持环境

新编译器

我们添加了对以下编译器的支持:

编译器名称编译器首字母缩写词
用于 TriCore C/C++ 编译器 6.0 的 Altium TASKING Vx 工具集vxtc_6_0
用于 TriCore C/C++ 编译器 6.2 的 Altium TASKING Vx 工具集vxtc_6_2
ARM 编译器 6.6armclang_6_6
ARM 编译器 6.9armclang_6_9
Clang C/C++ Compiler v 3.9clang_3_9
Clang C/C++ Compiler v 4.0clang_4_0
Clang C/C++ Compiler v 5.0clang_5_0
Clang C/C++ Compiler v 6.0clang_6_0
适用于 ColdFire Freescale CodeWarrior C/C++ 编译器 v.6.0cwcf_6_0
Tricore 4.9.x 的 GCCtricoregcc_4_9
GNU GCC 7.x1gcc_7
GNU GCC 7.x (x86_64)1gcc_7-64
适用于 ARM v.2014.1.x 的 Green Hills 软件编译器ghsarm_2014_1
适用于 ARM v.2017.5.x 的 Green Hills 软件编译器ghsarm_2017_5
适用于 ARM64 v.2014.1.x 的 Green Hills 软件编译器ghsarm64_2014_1
适用于 ARM64 v.2017.5.x 的 Green Hills 软件编译器ghsarm64_2017_5
适用于 V850 v. 2013.5.x 的 Green Hills 软件编译器ghsv850_2013_5
适用于 V850 v.2014.1.x 的 Green Hills 软件编译器ghsv850_2014_1
适用于 V850 v.2017.5.x 的 Green Hills 软件编译器ghsv850_2017_5
适用于 ARM 8.20.x 的 IAR 编译器iccarm_8_20
RX v. 3.10.x 的 IAR 编译器iccrx_3_10
Intel(R) C++ 编译器 v 18.0intelicc_18_0
QNX GCC 5.xqcc_5
QNX GCC 5.x (ARM)qccarm_5
QNX GCC 5.x (ARM64)qccarm_5-64
QNX GCC 5.x (x86-64)qcc_5-64
TI ARM C/C++ 编译器 GNU GCC 7.xtiarmgcc_7
TI ARM C/C++ 编译器 v18.1tiarm_18_1
TI MSP430 C/C++ 编译器 GNU GCC 6.xtimsp430gcc_6
TI MSP430 C/C++ 编译器 v18.1timsp430_18_1
TI TMS320C2000 C/C++ 编译器 v16.9tic2000_16_9
TI TMS320C2000 C/C++ 编译器 v18.1tic2000_18_1
TI TMS320C6x C/C++ 编译器 v8.2tic6000_8_2

现在编译器已标记为以下支持级别:

  • 扩展: 支持已通过扩展测试进行了验证,并被批准用于对安全关键软件开发。
  • 标准: 支持已通过标准测试验证,并被批准用于非安全关键软件开发。

请参见 编译器 有关当前支持的编译器的详细信息。

1 对 GNU GCC 或 Microsoft Visual C++ 编译器的 C++ 17 标准的有限支持。C/C++test 可能无法分析使用最新版本的 GNU GCC 或启用了 C++ 17 扩展的 Microsoft Visual C++ 编译器的代码。分析结果也可能不准确。C/C++test 不支持以下 C++17 扩展:

  • P0017R1 扩展以初始化聚合
  • P0091R4 类模板的模板自变量推导
  • P0127R2 自动声明非类型模板参数
  • P0195R2 使用声明中的包装类扩展
  • P0522R0 模板模板参数匹配不包括兼容的模板

新的 IDEs

我们添加了对以下 IDE 的支持:

  • Texas Instruments Code Composer Studio 7.4
  • Texas Instruments Code Composer Studio 8.0

删除的环境

有关不再受支持的环境的详细信息,请参见Removed Support for Environments

Compliance Packs

在此版本中,我们引入了合规性包,使您可以立即访问测试配置,以帮助您实施特定于行业的合规性标准和实践。法规合规性包利用了针对特定法规遵从性领域量身定制的广泛 C/C++test 的测试功能。

提供以下合规性软件包:

合规性包测试配置
Aerospace Pack
  • 联合打击战斗机
  • DO178C 软件 A 级单元测试
  • DO178C 软件 B 级单元测试
  • DO178 C 软件 C 级和 D 级单元测试
Automotive Pack
  • AUTOSAR C++14 编码准则
  • HIS Source Code Metrics
  • 高完整性 C++
  • MISRA C 1998
  • MISRA C 2004
  • MISRA C 2012
  • MISRA C++ 2008
  • ISO26262 ASIL A 单元测试
  • ISO26262 ASIL B 和 C 单元测试
  • ISO26262 ASIL D 单元测试
Medical Devices Pack
  • FDA (C) 推荐规则
  • FDA (C++) 推荐规则
安全包
  • CWE SANS Top 25
  • OWASP Top 10 2017
  • 支付卡行业数据安全标准
  • SEI CERT C Guidelines
  • Security Rules
  • UL 2900

(info) Compliance Pack 需要激活专用的许可证功能。请与 Parasoft 支持联系,以获取有关 Compliance Pack 许可的更多详细信息。

新的和更新的测试配置

我们添加了以下内置测试配置:

  • AUTOSAR C++14 编码准则

  • 高完整性 C++

  • SEI CERT C Guidelines
  • UL 2900
  • OWASP Top 10 2017
  • DO178C 单元测试
  • ISO26262 单元测试

以下测试配置已从【静态分析】类别移至【合规性包】之一(请参见Compliance Packs):

  • 联合打击战斗机→航空航天包
  • HIS 源代码指标→汽车包
  • MISRA C 1998→汽车包
  • MISRA C 2004→汽车包
  • MISRA C 2012→汽车包
  • MISRA C++2008→汽车包
  • CWE SANS Top 25→安全包
  • PCI 数据安全标准→安全包
  • 安全规则→安全包

现在在 MISRA C 2012 内置测试配置中启用的规则已进行了不同的分组,并具有新的规则 ID,这可能会影响其先前的抑制;详细信息请参见MISRA C 2012 Rules

Parasoft 的 FDA C++ 推荐的第 1、2 和 3 期已被以下测试配置取代:

  • FDA (C) 推荐规则
  • FDA (C++) 推荐规则

“ MISRA C” 测试配置已重命名为“ MISRA C 1998”。

以下测试配置已删除:

  • OWASP Top 10 安全漏洞 (已替换为 OWASP Top 10 2017)
  • CERT C 编码标准(已替换为 SEI CERT C 准则)
  • ISO 26262 建议规则
  • DISA-STIG 编码标准
  • SAMATE Annex A 源代码缺陷
  • CRules

请参见 内置测试配置 有关 C/C++ test 附带的测试配置的列表。

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

在此版本中,我们添加了新的静态分析规则以扩展合规性标准的覆盖率;请参见新规则,以及Updated Rules有关新规则和更新规则的列表。

MISRA C 2012 规则

强制执行 MISRA C 2012 标准的规则现在具有新的规则 Id,并且全部归为一个类别 "MISRA C 2012",以便于检查结果并确保与 Parasoft 的 MISRA C 2012 合规性包完全兼容。

  • MISRA C 2012 内置测试配置中启用的规则的布局和 ID 已更新;这可能会影响 DTP 处理它们的方式以及它们先前的抑制作用。
  • 为了向后兼容,保留了 MISRA C 2012 规则的先前布局和 ID,作为“ MISRA C 2012(旧版)”规则类别–创建的自定义测试配置,用于对早期版本的 C/C++test 实施 MISRA C 2012 标准自动引用此类别,并且不需要更新。

(warning) 以上更改不会影响规则的实现,对于“ MISRA C 2012”和“ MISRA C 2012(旧版)”规则类别而言,这些更改是相同的。

带桩函数回调的动态桩函数配置

桩函数回调框架允许您通过【测试用例编辑器】界面或手动修改测试用例源代码来指定特定于测试用例的桩函数行为。您可以定义特定的桩函数逻辑,该逻辑将在测试用例执行期间每次调用桩函数时执行。

动态桩函数配置的桩函数 API 已被弃用,默认情况下已禁用。

有关详细信息,请参见动态桩函数配置

增强的测试用例编辑器

我们增强了测试用例编辑器,以方便修改测试套件和测试用例。

  • 新的【桩函数配置】和【桩函数期望】步骤使您可以使用桩函数回调框架配置桩函数行为(有关详细信息,请参见使用桩函数回调)。
  • 使用“附加测试套件代码”编辑器,您可以配置自动添加到测试套件代码中的代码部分。

有关详细信息,请参见使用测试用例编辑器添加测试套件和测试用例

报告测试执行详细信息

现在您可以生成一个链接到常规报告的附加【测试执行详细信息】报告。新报告包含有关测试执行的其他信息,这对开发安全关键型应用程序的团队特别有用。请参见了解报告

其他变更

  • C/C++test 专业版附带了 C/C++test 标准(以前是 C/C++ 的 DTP 引擎)。C/C++test 标准发行版位于 C/C++test 专业版安装目录中。要使用 C/C++test 标准,请将发行版解压缩到 C/C++test 专业版安装目录以外的目标位置。有关详细信息,请参见Parasoft C/C++test 标准
  • 用于生成覆盖率详细信息报告的选项已从“报告”首选项页面移至“测试配置”页面:跳转到执行>运行时>为[覆盖率度量指标]生成详细的覆盖率报告。

  • 必须使用 DTP 5.4.0 才能利用 DTP 功能和工作流程。
  • 在 DTP 上标记为【不显示优先级】的发现不再模拟抑制,而应将其转换为真实抑制。请参见DTP 5.4.0 发行说明将团队服务器抑制数据迁移到 DTP
  • RuleWizard 模块已扩展,具有以下节点和属性 (有关详细信息,请参见 规则向导文档 ):
    - 显式模板实例 节点及其属性
    - 此 InitializerInClass 属性
    - 此ReferenceQualifier 属性

已解决的 Bugs 和 FRs

已解决的 Bug/FR ID说明
CPP-40357规则 MRM-20 不应报告违反本地指针分配的情况
CPP-40380修复 CppUnit 集成文档:使用 CppTest_CppUnitResultsListener 而不是 CppTest_CppUnitResultsOutputter
CPP-40384查看 CODSTA-37 规则:未检测到浮动常量
CPP-40388在测试用例编辑器管理的测试用例中,在第一个 #if 0 之前具有 #endif 会引发 StringIndexOutOfBounds 异常
CPP-40402RS232 通用传输实现中的内存泄漏
CPP-40405规则 MISRA-028(JSF-140)不报告参数声明中使用的 'register’关键字违规
CPP-40566RuleWizard 中的属性 'fullname’对于具有多个内置 '__m128i' 类型参数的函数返回空字符串
CPP-40573规则 INIT-15 报告具有聚集初始化成员的结构的误报
CPP-40574未设置 LD_LIBRARY_PATH 时 cpptest GUI 崩溃
CPP-40578控制台详细度设置为“正常”或“低”时,控制台中不需要的 EDG 诊断报文
CPP-40579CODSTA-63 规则不会在枚举常量上触发
CPP-40594MisraCpp2008UnderlyingType 属性为无符号常量表达式返回错误的类型
CPP-40702规则 CODSTA-CPP-78(MISRA2008-9_3_3)检测到不能为 'const’ 的函数
CPP-40719在 C++14 模式下无法正确重建 constexpr 模板特化
CPP-40760CODE 步骤中的块注释可能会触发编译错误
CPP-40761如果在测试套件说明中使用大括号 "{",则测试套件数据可能会损坏
CPP-40765

使用 niclang_3_3 解析错误-错误:预期为“;”

CPP-40780

错误:"operator=” 已在当前作用域中声明

CPP-40796OPT-06 误报
CPP-40819Proj_igo9_all.cpp 的代码分析以代码 4(cwc)完成
CPP-40907内部错误:断言失败:gen_declaration:源 seq 列表上的实体种类错误(cp_gen_be.c,第 21265 行)
CPP-40913无法编译可执行测试,当 excel 数据源包含“
CPP-41045MISRA2004-14_2(MISRA2012-RULE-2_2_a)报告强制类型转换为无效类型的误报

CPP-41047

multiThread 选项不适用于静态分析
CPP-41048C++test parsewr 在检测 Tasking 代码期间报告了许多错误警告
CPP-41178调试测试用例时,cpptestDebug 配置属性的值不正确可能会导致链接器错误
CPP-41239规则 JSF-138_b 不应报告 const 对象定义的违规情况
CPP-41246MISRA2012-RULE-21_6(CODSTA-110)报告大多数 stdio.h API 的漏报
CPP-41332

C++test 引擎的 -fail 命令

FA-5903来自 BD-SECURITY-INTOVERF 规则的报文不正确(错误的表达式报告为可能溢出)
FA-5906BD-SECURITY-INTOVERF 在报告 ptr 的使用时的表示/报文不准确,该 ptr 是由于使用可能溢出的值的指针算术产生的
FA-5994无法将构造函数定义为 null 不接受 BD.EXCEPT.NP 的方法
FA-6279

BD-PB-CC 误报

FA-6280

BD-RES-FREE 规则漏报

FA-6402

FA 无法识别 iccarm 的 errno 模式

FA-6140在报告 flowanalysis.output.performance.info 中的某些规则时,并非所有路径都被计数。



删除了对环境的支持

IDEs

不再支持以下 IDE:

  • 面向 C/C++ 开发人员的 Eclipse IDE 3.2、3.3、3.4、3.5、3.6、3.7
  • 适用于 RVDS 3.0、3.1、4.0、4.1 的 ARM Workbench IDE
  • QNX Momentics IDE 4.x
  • Texas Instruments Code Composer Studio 4.x
  • Wind River Workbench 2.6, 3.0, 3.1, 3.2
  • Visual Studio 2005

编译器

不再支持以下编译器(有关当前受支持的编译器的详细信息,请参见编译器):

编译器名称编译器首字母缩写词
ARM Developer Suite 1.2ads_1_2
适用于 Win32 的 Borland C++ 编译器 5.6.xbcc32_5_6
适用于 Win32 的 CodeGear C++ 编译器 5.9.xbcc32_5_9
Wind River Diab 5.0diab_5_0
Wind River Diab 5.5.xdiab_5_5
Wind River Diab 5.6.xdiab_5_6
eCosCentric GCC 3.4.xecosgcc_3_4
Microsoft Embedded Visual C++ 4.0evc_4_0
适用于 Windows Mobile 的 Microsoft Visual C++ 8.0evc_8_0
适用于 Windows Mobile 的 Microsoft Visual C++ 9.0evc_9_0
GNU GCC 2.9.xgcc_2_9
GNU GCC 3.2.xgcc_3_2
GNU GCC 3.3.xgcc_3_3
GNU GCC 3.3.x (x86_64)gcc_3_3-64
GNU GCC 3.4.xgcc_3_4
GNU GCC 3.4.x (x86_64)gcc_3_4-64
用于 V850 v.3.4 的 Green Hills 软件编译器ghs_3_4
Green Hills Software Compiler Native v. 4.0.xghs_4_0
IAR Compiler for MSP430 v. 4.2xicc430_4_2
IAR Compiler for MSP430 v. 5.3xicc430_5_3
适用于 ARM 5.3x 的 IAR 编译器iccarm_5_3
适用于 ARM 5.4x 的 IAR 编译器iccarm_5_4
适用于 ARM 5.5x 的 IAR 编译器iccarm_5_5
Altera Nios II 5.1 b73 GCC 3.4.xnios2gcc_3_4
Altera Nios GCC 2.9niosgcc_2_9
QNX GCC 2.9.xqcc_2_9
QNX GCC 3.3.xqcc_3_3
ARM RealView 2.2rvct_2_2
ARM RealView 3.0rvct_3_0
ARM RealView 3.1rvct_3_1
适用于 uVision 的 ARM RealView 3.1rvct_3_1_uV
ARM RealView 4.0rvct_4_0
适用于 uVision 的 ARM RealView 4.0rvct_4_0_uV
STMicroelectronics ST20st20_2_2
STMicroelectronics ST40st40_3_1
TI TMS470 C/C++ 编译器 v4.9.xtiarm_4_9
TI ARM C/C++ 编译器 v5.0.xtiarm_5_0
TI TMS320C2000 C/C++ 编译器 v4.1tic2000_4_1
TI TMS320C2000 C/C++ 编译器 v5.2tic2000_5_2
TI TMS320C2000 C/C++ 编译器 v6.0tic2000_6_0
TI TMS320C54x C/C++ 编译器 v4.2tic54x_4_2
TI TMS320C55x C/C++ 编译器 v4.3tic55x_4_3
TI TMS320C6x C/C++ 编译器 v5.1tic6000_5_1
TI TMS320C6x C/C++ 编译器 v6.0tic6000_6_0
TI TMS320C6x C/C++ 编译器 v6.1tic6000_6_1
TI TMS320C6x C/C++ 编译器 v7.0tic6000_7_0
TI TMS320C6x C/C++ 编译器 v7.2tic6000_7_2
TI MSP430 C/C++ 编译器 v3.2timsp430_3_2
Microsoft Visual C++ 6.0vc_6_0
Microsoft Visual C++ 7.0vc_7_0
Microsoft Visual C++ 7.1vc_7_1
Microsoft Visual C++ 8.0vc_8_0
Microsoft Visual C++ 8.0 (x64)vc_8_0-64
用于 TriCore C/C++ 编译器 2.5 的 Altium TASKING Vx 工具集vxtc_2_5
用于 TriCore C/C++ 编译器 3.3 的 Altium TASKING Vx 工具集vxtc_3_3
用于 TriCore C/C++ 编译器 3.4 的 Altium TASKING Vx 工具集vxtc_3_4
用于 TriCore C/C++ 编译器 3.5 的 Altium TASKING Vx 工具集vxtc_3_5
Wind River EGCS 2.9wregcs_2_9
Wind River GCC 2.9wrgcc_2_9

新建规则

添加了以下规则:

规则 ID标题
BD-PB-DNMPTR不要通过调用 realloc() 来修改对象的对齐方式
BD-PB-EXITHAN正确定义退出处理程序
BD-PB-FGETS在 fgets() 或 fgetws() 失败时重置字符串
BD-PB-FSETPOS仅使用从 fgetpos() 返回的 fsetpos() 值
BD-PB-SIGHAN正确定义信号处理程序
BD-PB-SIGRETURN不要从计算异常信号处理程序返回
BD-PB-STDEXC总是抛出创建的 std::exception 对象
BD-PB-STREAMINOUT在没有中间冲洗或定位调用的情况下,请勿从流中交替输入和输出
BD-PB-SUBSEQFRWD随后不要将参数用于 std::forward
BD-PB-VLASIZE确保可变长度数组的大小在有效范围内
BD-SECURITY-LOG避免将未经验证的二进制数据传递到日志方法
BD-TRS-FRC访问文件时避免竞争条件
BD-TRS-JOINDETACH不要加入或分离先前加入或分离的线程
CODSTA-191Wrap 功能可以在循环中虚假唤醒
CODSTA-192结构的最终成员不应为大小为 '0’或 '1’的数组
CODSTA-193动态分配包含灵活数组成员的结构
CODSTA-194Wrap 函数可以在循环中虚假失败
CODSTA-195不要在表达式中两次引用原子变量
CODSTA-196不要在函数调用的结果中访问数组
CODSTA-198浮点型复杂表达式的值只能转换为较窄的浮点型
CODSTA-MCPP-19使用 ref 限定符声明赋值运算符 &
CODSTA-MCPP-20优先使用智能指针而不是原始本地指针
CODSTA-MCPP-21不要直接在互斥锁上调用 lock()
GLOBAL-ONEDEFINLINE必须在一个且只有一个文件中定义用于多个翻译单元的内联函数
GLOBAL-ONEDEFTEMPL在一个且仅一个文件中定义在多个翻译单元中使用的函数模板
GLOBAL-ONEDEFTYPE在一个且只有一个文件中定义在多个翻译单元中使用的类型
INIT-16集合或联合的初始化程序应括在大括号中
MRM-52使用 RAII 防止资源泄漏
PB-71不要复制包含灵活数组成员的结构的实例
PB-72请勿使用错误类型的参数调用 va_arg
PB-73常量无符号整数表达式的求值不应导致环绕
PREPROC-20将 #include 指令中的文件名与文件系统上的文件名匹配
PREPROC-21避免可能会产生通用字符名称的令牌串联
SECURITY-49将 'cnd_signal()’函数与唯一的条件变量一起使用
TEMPL-15声明“外部”一个显式实例化的模板

新规则也已添加到以下合规类别:

规则 ID 前缀类别
AUTOSARAUTOSAR C++14 编码准则
CERT_CSEI CERT C
HICPP高完整性 C++
MISRAC2012MISRA C 2012

更新规则

规则类别规则 IDs
流分析BD-API-CTYPE, BD-EXCEPT-NP, BD-PB-CC, BD-PB-EXCEPT, BD-PB-INTOVERF, BD-PB-SWITCH, BD-PB-VOVR, BD-RES-FREE, BD-RES-LEAKS, BD-SECURITY-INTOVERF, BD-TRS-ARG, BD-TRS-LOCK, BD-TRS-MLOCK, BD-TRS-ORDER
编码约定CODSTA-110, CODSTA-166_a, CODSTA-37, CODSTA-47, CODSTA-63, CODSTA-CPP-78
初始化INIT-15
联合打击战斗机JSF-138_a, JSF-138_b, JSF-140, JSF-187
MISRA C 1998MISRA-024, MISRA-028
MISRA C 2004MISRA2004-14_2, MISRA2004-8_11
MISRA C++ 2008MISRA2008-0_1_3_b, MISRA2008-0_1_6, MISRA2008-0_1_9, MISRA2008-5_0_21, MISRA2008-9_3_3
MISRA C 2012MISRA2012-DIR-4_13_a, MISRA2012-DIR-4_13_b, MISRA2012-DIR-4_13_d, MISRA2012-DIR-4_14_b, MISRA2012-RULE-14_3_zc, MISRA2012-RULE-14_3_zd, MISRA2012-RULE-1_3_c, MISRA2012-RULE-21_13, MISRA2012-RULE-21_6, MISRA2012-RULE-22_1, MISRA2012-RULE-22_2_a, MISRA2012-RULE-22_5_a, MISRA2012-RULE-22_6, MISRA2012-RULE-2_2_a, MISRA2012-RULE-8_8
内存和资源管理MRM-09, MRM-20
面向对象OOP-07
优化OPT-06


  • No labels