支持环境
新编译器
我们添加了对以下编译器的支持:
编译器名称 | 编译器首字母缩写词 |
---|---|
用于 TriCore C/C++ 编译器 6.0 的 Altium TASKING Vx 工具集 | vxtc_6_0 |
用于 TriCore C/C++ 编译器 6.2 的 Altium TASKING Vx 工具集 | vxtc_6_2 |
ARM 编译器 6.6 | armclang_6_6 |
ARM 编译器 6.9 | armclang_6_9 |
Clang C/C++ Compiler v 3.9 | clang_3_9 |
Clang C/C++ Compiler v 4.0 | clang_4_0 |
Clang C/C++ Compiler v 5.0 | clang_5_0 |
Clang C/C++ Compiler v 6.0 | clang_6_0 |
适用于 ColdFire Freescale CodeWarrior C/C++ 编译器 v.6.0 | cwcf_6_0 |
Tricore 4.9.x 的 GCC | tricoregcc_4_9 |
GNU GCC 7.x1 | gcc_7 |
GNU GCC 7.x (x86_64)1 | gcc_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.0 | intelicc_18_0 |
QNX GCC 5.x | qcc_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.x | tiarmgcc_7 |
TI ARM C/C++ 编译器 v18.1 | tiarm_18_1 |
TI MSP430 C/C++ 编译器 GNU GCC 6.x | timsp430gcc_6 |
TI MSP430 C/C++ 编译器 v18.1 | timsp430_18_1 |
TI TMS320C2000 C/C++ 编译器 v16.9 | tic2000_16_9 |
TI TMS320C2000 C/C++ 编译器 v18.1 | tic2000_18_1 |
TI TMS320C6x C/C++ 编译器 v8.2 | tic6000_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 |
|
Automotive Pack |
|
Medical Devices Pack |
|
安全包 |
|
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 标准自动引用此类别,并且不需要更新。
以上更改不会影响规则的实现,对于“ 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-40402 | RS232 通用传输实现中的内存泄漏 |
CPP-40405 | 规则 MISRA-028(JSF-140)不报告参数声明中使用的 'register’关键字违规 |
CPP-40566 | RuleWizard 中的属性 'fullname’对于具有多个内置 '__m128i' 类型参数的函数返回空字符串 |
CPP-40573 | 规则 INIT-15 报告具有聚集初始化成员的结构的误报 |
CPP-40574 | 未设置 LD_LIBRARY_PATH 时 cpptest GUI 崩溃 |
CPP-40578 | 控制台详细度设置为“正常”或“低”时,控制台中不需要的 EDG 诊断报文 |
CPP-40579 | CODSTA-63 规则不会在枚举常量上触发 |
CPP-40594 | MisraCpp2008UnderlyingType 属性为无符号常量表达式返回错误的类型 |
CPP-40702 | 规则 CODSTA-CPP-78(MISRA2008-9_3_3)检测到不能为 'const’ 的函数 |
CPP-40719 | 在 C++14 模式下无法正确重建 constexpr 模板特化 |
CPP-40760 | CODE 步骤中的块注释可能会触发编译错误 |
CPP-40761 | 如果在测试套件说明中使用大括号 "{",则测试套件数据可能会损坏 |
CPP-40765 | 使用 niclang_3_3 解析错误-错误:预期为“;” |
CPP-40780 | 错误:"operator=” 已在当前作用域中声明 |
CPP-40796 | OPT-06 误报 |
CPP-40819 | Proj_igo9_all.cpp 的代码分析以代码 4(cwc)完成 |
CPP-40907 | 内部错误:断言失败:gen_declaration:源 seq 列表上的实体种类错误(cp_gen_be.c,第 21265 行) |
CPP-40913 | 无法编译可执行测试,当 excel 数据源包含“ |
CPP-41045 | MISRA2004-14_2(MISRA2012-RULE-2_2_a)报告强制类型转换为无效类型的误报 |
CPP-41047 | multiThread 选项不适用于静态分析 |
CPP-41048 | C++test parsewr 在检测 Tasking 代码期间报告了许多错误警告 |
CPP-41178 | 调试测试用例时,cpptestDebug 配置属性的值不正确可能会导致链接器错误 |
CPP-41239 | 规则 JSF-138_b 不应报告 const 对象定义的违规情况 |
CPP-41246 | MISRA2012-RULE-21_6(CODSTA-110)报告大多数 stdio.h API 的漏报 |
CPP-41332 | C++test 引擎的 -fail 命令 |
FA-5903 | 来自 BD-SECURITY-INTOVERF 规则的报文不正确(错误的表达式报告为可能溢出) |
FA-5906 | BD-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.2 | ads_1_2 |
适用于 Win32 的 Borland C++ 编译器 5.6.x | bcc32_5_6 |
适用于 Win32 的 CodeGear C++ 编译器 5.9.x | bcc32_5_9 |
Wind River Diab 5.0 | diab_5_0 |
Wind River Diab 5.5.x | diab_5_5 |
Wind River Diab 5.6.x | diab_5_6 |
eCosCentric GCC 3.4.x | ecosgcc_3_4 |
Microsoft Embedded Visual C++ 4.0 | evc_4_0 |
适用于 Windows Mobile 的 Microsoft Visual C++ 8.0 | evc_8_0 |
适用于 Windows Mobile 的 Microsoft Visual C++ 9.0 | evc_9_0 |
GNU GCC 2.9.x | gcc_2_9 |
GNU GCC 3.2.x | gcc_3_2 |
GNU GCC 3.3.x | gcc_3_3 |
GNU GCC 3.3.x (x86_64) | gcc_3_3-64 |
GNU GCC 3.4.x | gcc_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.x | ghs_4_0 |
IAR Compiler for MSP430 v. 4.2x | icc430_4_2 |
IAR Compiler for MSP430 v. 5.3x | icc430_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.x | nios2gcc_3_4 |
Altera Nios GCC 2.9 | niosgcc_2_9 |
QNX GCC 2.9.x | qcc_2_9 |
QNX GCC 3.3.x | qcc_3_3 |
ARM RealView 2.2 | rvct_2_2 |
ARM RealView 3.0 | rvct_3_0 |
ARM RealView 3.1 | rvct_3_1 |
适用于 uVision 的 ARM RealView 3.1 | rvct_3_1_uV |
ARM RealView 4.0 | rvct_4_0 |
适用于 uVision 的 ARM RealView 4.0 | rvct_4_0_uV |
STMicroelectronics ST20 | st20_2_2 |
STMicroelectronics ST40 | st40_3_1 |
TI TMS470 C/C++ 编译器 v4.9.x | tiarm_4_9 |
TI ARM C/C++ 编译器 v5.0.x | tiarm_5_0 |
TI TMS320C2000 C/C++ 编译器 v4.1 | tic2000_4_1 |
TI TMS320C2000 C/C++ 编译器 v5.2 | tic2000_5_2 |
TI TMS320C2000 C/C++ 编译器 v6.0 | tic2000_6_0 |
TI TMS320C54x C/C++ 编译器 v4.2 | tic54x_4_2 |
TI TMS320C55x C/C++ 编译器 v4.3 | tic55x_4_3 |
TI TMS320C6x C/C++ 编译器 v5.1 | tic6000_5_1 |
TI TMS320C6x C/C++ 编译器 v6.0 | tic6000_6_0 |
TI TMS320C6x C/C++ 编译器 v6.1 | tic6000_6_1 |
TI TMS320C6x C/C++ 编译器 v7.0 | tic6000_7_0 |
TI TMS320C6x C/C++ 编译器 v7.2 | tic6000_7_2 |
TI MSP430 C/C++ 编译器 v3.2 | timsp430_3_2 |
Microsoft Visual C++ 6.0 | vc_6_0 |
Microsoft Visual C++ 7.0 | vc_7_0 |
Microsoft Visual C++ 7.1 | vc_7_1 |
Microsoft Visual C++ 8.0 | vc_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.9 | wregcs_2_9 |
Wind River GCC 2.9 | wrgcc_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-191 | Wrap 功能可以在循环中虚假唤醒 |
CODSTA-192 | 结构的最终成员不应为大小为 '0’或 '1’的数组 |
CODSTA-193 | 动态分配包含灵活数组成员的结构 |
CODSTA-194 | Wrap 函数可以在循环中虚假失败 |
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 前缀 | 类别 |
---|---|
AUTOSAR | AUTOSAR C++14 编码准则 |
CERT_C | SEI CERT C |
HICPP | 高完整性 C++ |
MISRAC2012 | MISRA 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 1998 | MISRA-024, MISRA-028 |
MISRA C 2004 | MISRA2004-14_2, MISRA2004-8_11 |
MISRA C++ 2008 | MISRA2008-0_1_3_b, MISRA2008-0_1_6, MISRA2008-0_1_9, MISRA2008-5_0_21, MISRA2008-9_3_3 |
MISRA C 2012 | MISRA2012-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 |