环境支持
新增的编译器
我们添加了对以下编译器的支持:
编译器名称 | 编译器首字母缩写词 |
---|---|
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 6.0 | vxtc_6_0 |
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 6.2 | vxtc_6_2 |
ARM Compiler 6.6 | armclang_6_6 |
ARM Compiler 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 |
Freescale CodeWarrior C/C++ Compiler v. 6.0 for ColdFire | 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 |
Green Hills Software Compiler for ARM v. 2014.1.x | ghsarm_2014_1 |
Green Hills Software Compiler for ARM v. 2017.5.x | ghsarm_2017_5 |
Green Hills Software Compiler for ARM64 v. 2014.1.x | ghsarm64_2014_1 |
Green Hills Software Compiler for ARM64 v. 2017.5.x | ghsarm64_2017_5 |
Green Hills Software Compiler for V850 v. 2013.5.x | ghsv850_2013_5 |
Green Hills Software Compiler for V850 v. 2014.1.x | ghsv850_2014_1 |
Green Hills Software Compiler for V850 v. 2017.5.x | ghsv850_2017_5 |
IAR Compiler for ARM v. 8.20.x | iccarm_8_20 |
IAR Compiler for RX v. 3.10.x | iccrx_3_10 |
Intel(R) C++ Compiler 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++ Compiler GNU GCC 7.x | tiarmgcc_7 |
TI ARM C/C++ Compiler v18.1 | tiarm_18_1 |
TI MSP430 C/C++ Compiler GNU GCC 6.x | timsp430gcc_6 |
TI MSP430 C/C++ Compiler v18.1 | timsp430_18_1 |
TI TMS320C2000 C/C++ Compiler v16.9 | tic2000_16_9 |
TI TMS320C2000 C/C++ Compiler v18.1 | tic2000_18_1 |
TI TMS320C6x C/C++ Compiler 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 使用 auto 声明非类型模板参数
- P0195R2 using 声明中的包展开
- P0522R0 模板模板参数匹配不包括兼容的模板
新增的 IDE
我们添加了对以下 IDE 的支持:
- Texas Instruments Code Composer Studio 7.4
- Texas Instruments Code Composer Studio 8.0
删除的环境
有关不再受支持的环境的详细信息,请参阅删除的环境支持
Compliance Pack
在此版本中,我们引入了 Compliance Pack,使您可以立即访问测试配置,以帮助您实施行业特定合规性标准和实践。Compliance Pack 充分利用了针对特定合规领域量身定制的一系列 C/C++test 测试功能。
提供以下 Compliance Pack:
合规性包 | 测试配置 |
---|---|
Aerospace Pack |
|
Automotive Pack |
|
Medical Devices Pack |
|
安全包 |
|
Compliance Pack 需要激活专用的许可证功能。请与 Parasoft 支持联系,以获取有关 Compliance Pack 许可的更多详细信息。
新增和更新的测试配置
我们添加了以下内置测试配置:
- AUTOSAR C++14 Coding Guidelines
High Integrity C++
- SEI CERT C Guidelines
- UL 2900
- OWASP Top 10 2017
- DO178C Unit Testing
- ISO26262 Unit Testing
以下测试配置已从 Static Analysis 类别移至 Compliance Packs 类别下(请参阅 Compliance Pack):
- Joint Strike Fighter → Aerospace Pack
- HIS Source Code Metrics → Automotive Pack
- MISRA C 1998 → Automotive Pack
- MISRA C 2004 → Automotive Pack
- MISRA C 2012 → Automotive Pack
- MISRA C++ 2008 → Automotive Pack
- CWE SANS Top 25 → Security Pack
- PCI Data Security Standard → Security Pack
- Security Rules → Security Pack
现在在 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 Security Vulnerabilities(替换为 OWASP Top 10 2017)
- CERT C Coding Standard(替换为 SEI CERT C Guidelines)
- ISO 26262 Recommended Rules
- DISA-STIG Coding Standard
- SAMATE Annex A Source Code Weaknesses
- CRules
有关 C/C++ test 附带的测试配置的列表,请参阅内建测试配置。
新增和更新的代码分析规则
在此版本中,我们添加了新的静态分析规则,以扩展合规性标准的覆盖范围;有关新增规则和更新规则的列表,请参阅新增规则和更新规则。
MISRA C 2012 规则
强制执行 MISRA C 2012 标准的规则现在具有新的规则 ID,并且全部归入“MISRA C 2012”类别,以便于检查结果并确保与 Parasoft 的 MISRA C 2012 Compliance Pack 完全兼容。
- 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 Professional 附带了 C/C++test Standard(以前是 C/C++ 的 DTP 引擎)。C/C++test Standard 发行版位于 C/C++test Professional 安装目录中。要使用 C/C++test Standard,请将该发行版解压缩到 C/C++test Professional 安装目录以外的目标位置。详细信息,请参阅 Parasoft C/C++test Standard。
用于生成覆盖率详细信息报告的选项已从“报告”首选项页面移至“测试配置”页面:跳转到执行>运行时>生成详细的覆盖率报告 [覆盖率指标]。
- 使用 DTP 功能和工作流程需要 DTP 5.4.0。
- 在 DTP 上标记为不显示的任务不再模拟抑制,而应将其转换为真实抑制。请参阅 DTP 5.4.0 发布说明和将团队服务器抑制数据迁移到 DTP。
- RuleWizard 模块已扩展,具有以下节点和属性(详细信息,请参阅规则向导文档):
-Explicit Template Instance
节点及其属性
-InitializerInClass
属性
-ReferenceQualifier
属性
解决的 Bug 和 FR
解决的 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 中的某些规则时,并非所有路径都被计数。 |
删除的环境支持
IDE
不再支持以下 IDE:
- Eclipse IDE for C/C++ Developers 3.2, 3.3, 3.4, 3.5, 3.6, 3.7
- ARM Workbench IDE for RVDS 3.0, 3.1, 4.0, 4.1
- 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 |
Borland C++ Compiler 5.6.x for Win32 | bcc32_5_6 |
CodeGear C++ Compiler 5.9.x for Win32 | 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 |
Microsoft Visual C++ 8.0 for Windows Mobile | evc_8_0 |
Microsoft Visual C++ 9.0 for Windows Mobile | 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 |
Green Hills Software Compiler for V850 v. 3.4 | 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 |
IAR Compiler for ARM v. 5.3x | iccarm_5_3 |
IAR Compiler for ARM v. 5.4x | iccarm_5_4 |
IAR Compiler for ARM v. 5.5x | 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 |
ARM RealView 3.1 for uVision | rvct_3_1_uV |
ARM RealView 4.0 | rvct_4_0 |
ARM RealView 4.0 for uVision | rvct_4_0_uV |
STMicroelectronics ST20 | st20_2_2 |
STMicroelectronics ST40 | st40_3_1 |
TI TMS470 C/C++ Compiler v4.9.x | tiarm_4_9 |
TI ARM C/C++ Compiler v5.0.x | tiarm_5_0 |
TI TMS320C2000 C/C++ Compiler v4.1 | tic2000_4_1 |
TI TMS320C2000 C/C++ Compiler v5.2 | tic2000_5_2 |
TI TMS320C2000 C/C++ Compiler v6.0 | tic2000_6_0 |
TI TMS320C54x C/C++ Compiler v4.2 | tic54x_4_2 |
TI TMS320C55x C/C++ Compiler v4.3 | tic55x_4_3 |
TI TMS320C6x C/C++ Compiler v5.1 | tic6000_5_1 |
TI TMS320C6x C/C++ Compiler v6.0 | tic6000_6_0 |
TI TMS320C6x C/C++ Compiler v6.1 | tic6000_6_1 |
TI TMS320C6x C/C++ Compiler v7.0 | tic6000_7_0 |
TI TMS320C6x C/C++ Compiler v7.2 | tic6000_7_2 |
TI MSP430 C/C++ Compiler 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 |
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 2.5 | vxtc_2_5 |
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 3.3 | vxtc_3_3 |
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 3.4 | vxtc_3_4 |
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 3.5 | 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 | High Integrity C++ |
MISRAC2012 | MISRA C 2012 |
更新规则
规则类别 | 规则 ID |
---|---|
流分析 | 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 |