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

环境支持

新增的编译器

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

编译器名称编译器首字母缩写词
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 6.0vxtc_6_0
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 6.2vxtc_6_2
ARM Compiler 6.6armclang_6_6
ARM Compiler 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
Freescale CodeWarrior C/C++ Compiler v. 6.0 for ColdFirecwcf_6_0
Tricore 4.9.x 的 GCCtricoregcc_4_9
GNU GCC 7.x1gcc_7
GNU GCC 7.x (x86_64)1gcc_7-64
Green Hills Software Compiler for ARM v. 2014.1.xghsarm_2014_1
Green Hills Software Compiler for ARM v. 2017.5.xghsarm_2017_5
Green Hills Software Compiler for ARM64 v. 2014.1.xghsarm64_2014_1
Green Hills Software Compiler for ARM64 v. 2017.5.xghsarm64_2017_5
Green Hills Software Compiler for V850 v. 2013.5.xghsv850_2013_5
Green Hills Software Compiler for V850 v. 2014.1.xghsv850_2014_1
Green Hills Software Compiler for V850 v. 2017.5.xghsv850_2017_5
IAR Compiler for ARM v. 8.20.xiccarm_8_20
IAR Compiler for RX v. 3.10.xiccrx_3_10
Intel(R) C++ Compiler 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++ Compiler GNU GCC 7.xtiarmgcc_7
TI ARM C/C++ Compiler v18.1tiarm_18_1
TI MSP430 C/C++ Compiler GNU GCC 6.xtimsp430gcc_6
TI MSP430 C/C++ Compiler v18.1timsp430_18_1
TI TMS320C2000 C/C++ Compiler v16.9tic2000_16_9
TI TMS320C2000 C/C++ Compiler v18.1tic2000_18_1
TI TMS320C6x C/C++ Compiler 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 使用 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
  • Joint Strike Fighter
  • DO178C Software Level A Unit Testing
  • DO178C Software Level B Unit Testing
  • DO178C Software Level C and D Unit Testing
Automotive Pack
  • AUTOSAR C++14 Coding Guidelines
  • HIS Source Code Metrics
  • High Integrity C++
  • MISRA C 1998
  • MISRA C 2004
  • MISRA C 2012
  • MISRA C++ 2008
  • ISO26262 ASIL A Unit Testing
  • ISO26262 ASIL B and C Unit Testing
  • ISO26262 ASIL D Unit Testing
Medical Devices Pack
  • Recommended Rules for FDA (C)
  • Recommended Rules for FDA (C++)
安全包
  • CWE SANS Top 25
  • OWASP Top 10 2017
  • Payment Card Industry Data Security Standard
  • SEI CERT C Guidelines
  • Security Rules
  • UL 2900

(info) 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 标准的自定义测试配置会自动引用此类别,无需进行更新。

(warning) 以上更改不会影响规则的实现,对于“ 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-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 中的某些规则时,并非所有路径都被计数。



删除的环境支持

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.2ads_1_2
Borland C++ Compiler 5.6.x for Win32bcc32_5_6
CodeGear C++ Compiler 5.9.x for Win32bcc32_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
Microsoft Visual C++ 8.0 for Windows Mobileevc_8_0
Microsoft Visual C++ 9.0 for Windows Mobileevc_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
Green Hills Software Compiler for V850 v. 3.4ghs_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
IAR Compiler for ARM v. 5.3xiccarm_5_3
IAR Compiler for ARM v. 5.4xiccarm_5_4
IAR Compiler for ARM v. 5.5xiccarm_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
ARM RealView 3.1 for uVisionrvct_3_1_uV
ARM RealView 4.0rvct_4_0
ARM RealView 4.0 for uVisionrvct_4_0_uV
STMicroelectronics ST20st20_2_2
STMicroelectronics ST40st40_3_1
TI TMS470 C/C++ Compiler v4.9.xtiarm_4_9
TI ARM C/C++ Compiler v5.0.xtiarm_5_0
TI TMS320C2000 C/C++ Compiler v4.1tic2000_4_1
TI TMS320C2000 C/C++ Compiler v5.2tic2000_5_2
TI TMS320C2000 C/C++ Compiler v6.0tic2000_6_0
TI TMS320C54x C/C++ Compiler v4.2tic54x_4_2
TI TMS320C55x C/C++ Compiler v4.3tic55x_4_3
TI TMS320C6x C/C++ Compiler v5.1tic6000_5_1
TI TMS320C6x C/C++ Compiler v6.0tic6000_6_0
TI TMS320C6x C/C++ Compiler v6.1tic6000_6_1
TI TMS320C6x C/C++ Compiler v7.0tic6000_7_0
TI TMS320C6x C/C++ Compiler v7.2tic6000_7_2
TI MSP430 C/C++ Compiler 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
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 2.5vxtc_2_5
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 3.3vxtc_3_3
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 3.4vxtc_3_4
Altium TASKING Vx-toolset for TriCore C/C++ Compiler 3.5vxtc_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
HICPPHigh Integrity C++
MISRAC2012MISRA 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 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