在此版本中,我们专注于增强代码分析功能并扩展了对 AUTOSAR C++ 14 编码标准的支持。

支持 IDE

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

  • Eclipse 4.9

扩展的 Compliance Packs

我们扩展了汽车 Compliance Pack ,以帮助您强制遵守AUTOSAR C++14 编码准则。

  • 已更新“ AUTOSAR C++ 14 编码准则”测试配置,以帮助您确保符合 AUTOSAR C++ 14 编码准则版本 18.10。
  • 通过添加强制执行该标准的新规则,我们明显扩展了 "AUTOSAR C++ 14 编码准则" 测试配置

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

改进的静态分析性能

我们增强了 C/C++test 的静态代码分析功能,以提高性能。现在对 C/C++test 进行了优化,以减少增量 CI 构建中的分析时间,并缩短了修改代码和查看静态分析结果之间的反馈周期。这些优化还可以通过加速在 IDE 中本地执行的分析来帮助您加速台式机上的软件开发。有关详细信息,请参见 Incremental Static Analysis

增强的代码覆盖率分析

我们增强了代码覆盖范围功能,以促进从系统和功能测试监视覆盖范围指标。

独立代码覆盖率

C / C ++ test现在附带cpptestcc,这是一种轻量级的代码覆盖实用程序,可以轻松地集成到您的构建系统中,从而节省了创建代码检测专用项目的时间和复杂性。 现在,您可以轻松地在常规构建过程中创建测试二进制文件,然后使用常规 C/C++test 的报告功能将覆盖率数据上传到 IDE 以查看结果。您可以监视所有覆盖率的度量标准,包括 MC/DC 覆盖率、决策覆盖率、功能覆盖率等。有关详细信息,请参见使用 cpptestcc 收集应用程序覆盖率

合并多个测试运行的代码覆盖率结果

现在您可以汇总来自多个测试会话的代码覆盖率结果,以生成累积报告。有关详细信息,请参见合并多个测试运行的结果

对收集程序集覆盖率的扩展支持

通过增加对基于 Linux 的开发环境的支持,我们扩展了对在组装级别收集覆盖率信息的支持。程序集覆盖率工具现在支持用于 x86(32位)平台的 GCC 编译器;有关详细信息,请参见 程序集代码覆盖率


新建和更新代码分析规则

我们添加了新建静态分析规则,以扩展合规性标准的覆盖率; 有关详细信息,请参见 New Rules, Updated Rules, 和 Removed Rules

流量分析改进

  • 现在,您可以指定在执行路径上遇到时要分析的功能;有关详细信息,请参见 流分析
  • 我们改进了设置问题的报告。

新建设置配置

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

  • Load Test 结果
  • Load Archived 结果

已解决的 Bugs 和 FRs

Bug/FR ID

说明

CPP-36917

MISRA2012-13_2_f (MISRA2004-12_2_f) 报告 false positive

CPP-38031

MISRA2012-RULE-11_1_a:初始化多维数组的元素时为 false positive

CPP-39310

错误:未在此范围内声明“可见性”

CPP-39915

MISRA2004-10_6 (MISRA2012-RULE-7_2) 规则错误报告了大数组的初始化程序中使用的有符号值

CPP-40091

MISRA2012-RULE-10_3_b (CODSTA-163_b)报告ARM v7.8 编译器的 false positives

CPP-40400

[RW] 添加用于检测调用中使用默认参数的属性 (关于 Argument 节点)

CPP-40561

[CERTC] 扩展规则:了解与可变参数函数相关的类型问题(scanf)

CPP-41278

当枚举常量用作移位运算符的 RHS 操作数时,MISRA2004-12_8(MISRA-038)不报告违规

CPP-41279

功能中没有注释时,METRICS-19 不报告违规

CPP-41829

第 160 行:内部错误:断言在以下位置失败:"error.c", 第 1123 行

CPP-42436

在块的上下文中错误地检测到语句'if'(或其他)(仅限 C)

CPP-42458

[VS] 改进了对解决方案文件夹中的测试项目的支持。

CPP-42462

第 66 行:内部错误:断言在以下位置失败:"scope_stk.c",第 5106 行

CPP-42467

读取命令行选项 -edg.restrict_keyword_enabled 时出错。

CPP-42524

MISRA-071_b (MISRA2012-RULE-17_3) 不应报告内置函数的调用

CPP-42551

[RW] RuleWizard 显示不正确的版本号

CPP-42577

在 GNU GCC 8 _attribute_((fallthrough)) 上解析错误

CPP-42578

自定义规则分析模板代码时 cwc 崩溃

CPP-42663

Pb.33_b:错误标记了用 "packed”属性定义的枚举的规则。

CPP-42687

C++test 无法处理用户定义的文字。

CPP-42795

带有括号的 'cppmode’标签无效

CPP-42859

[DOCS] 正确的许可证版本名称

CPP-42878

MISRA2004-16_7 报告对包含匿名联合的结构体的指针参数的错误违规

CPP-42879

CODSTA-132 报告对包含匿名联合的结构体的指针参数的错误违规

CPP-42901

__Packed 的 IAR EWARM 解析错误

CPP-42936

当 'b’ 是匿名联合的成员时,在 RW 中将表达式 a->b 检测为 a.b

CPP-42951

OPT-03 (AUTOSAR A0-1-4) 不支持属性 'unused' (c++11)

CPP-43007

Intel icc 18: 链接器选项不是从 BDF 文件中提取的

CPP-43010

当使用赋值运算符功能初始化循环计数器时,CODSTA-52 (JSF-198)报告不正确的冲突

CPP-43080

METRICS-29, -33 应该仅报告已定义和实例化的模板功能

CPP-43103

Cwc 在自定义规则上崩溃,退出代码为 4

CPP-43105

[RW] 为节点扩展属性 'OperatorName' : a.b, a->b, a.*b, a->*b

CPP-43299

[DOCS] CPPTEST_REPORT_ENUM 实际上需要3个参数

CPP-43407

[TEST_EDITOR]改善滚动和调整大小时的小部件行为

FA-5720

False positive BD-PB-OVERFNZT

FA-6283

BD-PB-OVERFNZT False Positive

FA-6745

无法识别终结器功能

FA-6758

构建图时,当前块不是 ScopeBlock 错误

FA-6801

BD-PB-OVERFNZT false positive

FA-6807

False positive of BD-RES-LEAKS

FA-6811

BD-PB-ARRAY 显示未设置为负数的索引冲突

FA-6857

BD-PB-EOFCOMP 规则也应涵盖计算方法。

FA-6974

BD-PB-STDEXC false positive

FA-6976

BD-PB-NP在 bool/int 比较评估中为 false positive



新增规则

我们添加了以下规则:

规则 ID

标题

AUTOSAR-A0_1_6-a

项目不得包含未使用的类型声明

AUTOSAR-A0_4_2-a

不能使用 long double 类型

AUTOSAR-A0_4_4-a

验证传递给库函数的值

AUTOSAR-A10_3_1-a

成员函数声明中仅应指定虚拟重写或 final 形式之一

AUTOSAR-A10_3_5-a

用户定义的赋值运算符不得为虚拟的

AUTOSAR-A10_4_1-a

层次结构应基于抽象类

AUTOSAR-A11_0_1-a

非 POD 类型应定义为类

AUTOSAR-A11_0_2-a

结构只能包含公共数据成员,并且不能是基础或继承

AUTOSAR-A12_0_2-a

不要将可能包含填充位的类的对象与 C 标准库函数进行比较

AUTOSAR-A12_4_2-a

如果某个类的公共析构函数不是虚拟的,则应将该类声明为 final

AUTOSAR-A12_7_1-a

如果行为相同,则定义特殊成员 = default

AUTOSAR-A12_8_3-a

不要依赖移出对象的值

AUTOSAR-A13_1_2-a

用户定义文字运算符的用户定义后缀应以下划线开头,后跟一个或多个字母

AUTOSAR-A13_1_3-a

用户定义的文字运算符应仅执行传递参数的转换

AUTOSAR-A13_2_2-a

二进制算术运算符和按位运算符应返回 “prvalue”

AUTOSAR-A13_2_3-a

关系运算符应返回布尔值

AUTOSAR-A13_5_3-a

不要使用用户定义的转换函数

AUTOSAR-A13_5_4-a

当两个运算符相反时(例如 == 和 !=),定义两个

AUTOSAR-A13_5_4-b

当两个运算符相反时(例如 == 和 !=),将同时定义两个运算符,并根据另一个运算符定义一个运算符

AUTOSAR-A13_5_5-a

非成员运算符比成员运算符更支持混合模式算法

AUTOSAR-A13_6_1-a

数字序列分隔符 ' 能一致使用

AUTOSAR-A14_5_1-a

当存在带有单个参数的模板构造函数(通用参数)时,应声明复制构造函数

AUTOSAR-A14_7_2-a

模板专门化必须与主模板或声明了专门化的用户定义类型在同一文件中声明

AUTOSAR-A14_8_2-a

重载的函数应明确地专门化

AUTOSAR-A15_0_2-a

确保释放资源

AUTOSAR-A15_1_1-a

仅将 std::exception 实例用于异常

AUTOSAR-A15_1_5-a

不要跨执行边界抛出异常

AUTOSAR-A15_4_2-a

避免从声明为不抛出的函数中抛出异常

AUTOSAR-A15_5_1-a

绝对不要从析构函数的重新分配和交换中引发异常

AUTOSAR-A15_5_1-b

用户提供的所有移动构造函数和移动赋值运算符都不应异常退出

AUTOSAR-A16_2_2-a

文件应仅直接包含包含编译该文件所需的声明和定义的头

AUTOSAR-A16_6_1-a

#error 指令不得使用

AUTOSAR-A16_7_1-a

#pragma 指令不得使用

AUTOSAR-A17_1_1-b

打包使用 C 标准库

AUTOSAR-A17_6_1-a

不要修改标准 'std’ 和 and 'posix’ 命名空间

AUTOSAR-A18_1_4-a

指向对象数组元素的指针不得传递给单个对象类型的智能指针

AUTOSAR-A18_1_6-a

用户定义类型的所有 std::hash 专门化都应具有 noexcept 函数调用运算符

AUTOSAR-A18_5_10-a

不要传递存储容量不足或与构造的对象不适当对齐的指针,以放置 'new’

AUTOSAR-A18_5_10-b

当对象数组传递到放置 'new’分配函数时,应使用开销

AUTOSAR-A18_5_11-a

如果您写 new 运算符,则写运算符 delete

AUTOSAR-A18_5_11-b

如果您写 new[] 运算符,则写运算符 delete[]

AUTOSAR-A18_5_3-c

正确释放动态分配的资源

AUTOSAR-A18_5_4-a

定义操作符 delete 的大小版本和未固定大小版本

AUTOSAR-A18_5_5-c

正确定义新的处理程序

AUTOSAR-A18_5_8-a

通过声明而不是通过new或malloc使用分配

AUTOSAR-A18_5_9-a

分配失败时,用户定义的 'new’运算符应引发 'std::bad_alloc’异常

AUTOSAR-A18_9_2-a

使用 std::forward 请求转发通用引用

AUTOSAR-A18_9_3-a

不要在用 const 或 consttype 声明的对象上使用 std::move

AUTOSAR-A2_10_1-a

在局部或函数原型范围中声明的标识符不应隐藏在全局或命名空间范围中声明的标识符

AUTOSAR-A2_10_1-b

在内部局部范围内声明的标识符不应隐藏在外部局部范围内声明的标识符

AUTOSAR-A2_10_1-c

在局部范围内声明的标识符不应隐藏在类范围内声明的标识符

AUTOSAR-A2_10_1-d

在类范围中声明的标识符不应隐藏在全局或命名空间范围中声明的标识符

AUTOSAR-A2_10_1-e

在内部类范围内声明的标识符不应隐藏在外部类范围内声明的标识符

AUTOSAR-A2_10_5-a

具有静态存储持续时间的任何对象或函数标识符均不得重复使用

AUTOSAR-A2_10_5-b

具有静态存储持续时间的任何对象或函数标识符均不得重复使用

AUTOSAR-A2_10_6-a

如果标识符引用类型,则它也不应引用相同范围内的对象或函数

AUTOSAR-A2_10_6-b

如果标识符引用类型,则它也不应引用相同范围内的对象或函数

AUTOSAR-A2_10_6-c

如果标识符引用类型,则它也不应引用相同范围内的对象或函数

AUTOSAR-A2_13_1-a

使用仅在 ISO/IEC 14882:2003 中定义的转义序列

AUTOSAR-A2_13_2-a

具有不同编码前缀的字符串文字不得串联

AUTOSAR-A2_13_3-a

不得使用 wchar_t 类型

AUTOSAR-A2_13_4-a

字符串文字不得修改

AUTOSAR-A2_13_5-a

十六进制常量将使用所有大写字母表示

AUTOSAR-A2_13_6-a

通用字符名称只能在字符或字符串文字中使用

AUTOSAR-A2_3_1-a

仅使用 ISO C 标准中定义的字符

AUTOSAR-A2_5_2-a

以下图将不使用 %%,::%:%:%:

AUTOSAR-A2_7_1-a

// 注释中不得使用换行

AUTOSAR-A2_7_2-a

代码段不应“注释掉”

AUTOSAR-A20_8_1-a

不要将已经拥有的指针值存储在不相关的智能指针中

AUTOSAR-A20_8_2-a

将指针传递给线程中的对象时使用智能指针

AUTOSAR-A20_8_3-a

将指针传递给线程中的对象时使用智能指针

AUTOSAR-A20_8_4-a

考虑对本地对象使用 'std::unique_ptr' 而不是 'std::shared_ptr'

AUTOSAR-A20_8_5-a

'std::make_unique' 将用于构造 'std::unique_ptr’拥有的对象

AUTOSAR-A20_8_6-a

首选 'std::make_shared' 而不是直接使用 new

AUTOSAR-A20_8_7-a

避免循环的 shared_ptr 引用

AUTOSAR-A21_8_1-a

不要将不正确的值传递给 ctype.h 库函数

AUTOSAR-A23_0_2-a

迭代时不要修改容器

AUTOSAR-A23_0_2-b

使用有效的引用指针和迭代器来引用 basic_string 的元素

AUTOSAR-A25_1_1-a

使谓词为 const 纯函数

AUTOSAR-A25_4_1-a

对于关联容器,切勿使用比较函数为相等的值返回 true

AUTOSAR-A26_5_1-a

不要使用 rand() 函数生成伪随机数

AUTOSAR-A26_5_2-a

正确的种子伪随机数生成器

AUTOSAR-A27_0_1-c

防止缓冲区溢出污染数据

AUTOSAR-A27_0_1-d

避免由于定义了不正确的格式限制而导致污染数据造成缓冲区溢出

AUTOSAR-A27_0_1-e

避免从受污染的数据中读取缓冲区溢出

AUTOSAR-A27_0_1-f

避免缓冲区从受污染的数据中溢出

AUTOSAR-A27_0_1-g

防止命令注入

AUTOSAR-A27_0_1-h

从格式字符串中排除未经过滤的用户输入

AUTOSAR-A27_0_2-c

使用向量和字符串而不是数组

AUTOSAR-A27_0_2-d

避免超出范围访问数组

AUTOSAR-A27_0_2-e

防止缓冲区溢出污染数据

AUTOSAR-A27_0_2-f

避免缓冲区从受污染的数据中溢出

AUTOSAR-A27_0_2-g

避免使用不安全的字符串函数,这可能会导致缓冲区溢出

AUTOSAR-A27_0_3-a

在没有中间冲洗或定位调用的情况下,请勿从流中交替输入和输出

AUTOSAR-A3_1_2-a

头文件的文件扩展名应为:".h" ".hpp" or ".hxx"

AUTOSAR-A3_1_5-a

成员函数不得在无模板类定义中定义

AUTOSAR-A3_1_6-a

普通的访问器和 mutator 函数应该内联

AUTOSAR-A3_8_1-a

不要使用已释放的资源

AUTOSAR-A3_8_1-b

具有自动存储功能的对象的地址不应从函数返回

AUTOSAR-A3_8_1-c

具有自动存储功能的对象的地址不应分配给在第一个对象停止存在之后可能仍然存在的另一个对象

AUTOSAR-A3_8_1-d

不要指向已释放的包装对象

AUTOSAR-A4_7_1-h

避免整数溢出

AUTOSAR-A5_0_4-a

不要多态地处理数组

AUTOSAR-A5_0_4-b

指向派生类对象数组的指针不应转换为基类指针

AUTOSAR-A5_0_4-c

不要多态处理数组

AUTOSAR-A5_1_7-a

Lambda 不应是 Typeid 的操作数

AUTOSAR-A5_10_1-a

指向成员虚拟函数的指针仅应使用 null-pointer-constant 测试是否相等

AUTOSAR-A5_2_5-b

避免超出范围访问数组和指针

AUTOSAR-A5_2_5-c

指针操作数和使用该操作数进行的指针算术运算得出的任何指针均应为同一数组的两个地址元素

AUTOSAR-A5_2_5-d

避免在数组索引中污染数据

AUTOSAR-A5_2_6-a

逻辑'’ 或 '||’的每个操作数应为后缀表达式

AUTOSAR-A5_3_2-a

避免空指针解引用

AUTOSAR-A5_3_3-a

删除时不要删除类不完整的对象

AUTOSAR-A5_6_1-a

避免被零除

AUTOSAR-A6_5_4-a

For 循环中的初始化表达式除了初始化单个 for 循环参数的值外不会执行任何操作

AUTOSAR-A6_5_4-b

For 循环中的增量表达式除了将单个循环参数更改为循环的下一个值外,将不执行任何操作

AUTOSAR-A7_1_3-a

将 CV 限定词放在其适用类型的右侧

AUTOSAR-A7_1_7-b

不允许在同一行上使用多个变量声明

AUTOSAR-A7_1_7-c

每个变量应在单独的声明语句中声明

AUTOSAR-A7_1_9-a

类结构或枚举不会在其类型的定义中声明

AUTOSAR-A7_2_5-a

用枚举类型代替整数类型(和常量)作为大小写标签

AUTOSAR-A7_3_1-a

编写 using 声明以重新声明重载函数

AUTOSAR-A7_5_1-a

函数不得返回由常量引用传递的指针或对参数的引用

AUTOSAR-A7_6_1-a

永远不要从不应返回的函数中返回

AUTOSAR-A8_4_10-a

如果参数不能为 NULL,则应通过引用传递

AUTOSAR-A8_4_11-a

智能指针仅在表示生命周期语义时才可以用作参数类型

AUTOSAR-A8_4_12-a

不要通过常量引用传递 std::unique_ptr

AUTOSAR-A8_4_12-b

智能指针仅在表示生命周期语义时才可以用作参数类型

AUTOSAR-A8_4_12-c

如果函数替换了托管对象,则仅应将参数声明为对“ std :: shared_ptr”或“ std :: unique_ptr”的非常量左值引用。

AUTOSAR-A8_4_12-d

不要将参数的类型声明为对 'std::shared_ptr’或 'std::unique_ptr’的右值引用

AUTOSAR-A8_4_13-a

智能指针仅在表示生命周期语义时才可以用作参数类型

AUTOSAR-A8_4_13-b

如果函数替换了托管对象,则仅应将参数声明为对 'std::shared_ptr’或 'std::unique_ptr’的非常量左值引用。

AUTOSAR-A8_4_13-c

不要将参数的类型声明为对 'std::shared_ptr’或 ’std::unique_ptr’的右值引用

AUTOSAR-A8_4_3-a

通过引用而不是通过值传递对象

AUTOSAR-A8_4_3-b

尽可能将引用参数声明为常量引用

AUTOSAR-A8_4_5-a

在右值引用上使用 std::move() 在转发引用上使用 std::forward()

AUTOSAR-A8_4_6-a

在右值引用上使用 std::move() 在转发引用上使用 std::forward()

AUTOSAR-A8_4_7-a

按值传递内置类型,除非您要对其进行修改

AUTOSAR-A8_4_7-b

通过琐碎的复制构造函数按值传递小对象

AUTOSAR-A8_4_9-a

尽可能将引用参数声明为常量引用

AUTOSAR-A8_5_0-a

避免在初始化之前使用

AUTOSAR-A9_6_2-a

不要将成员变量声明为 bit-fields

AUTOSAR-M2_7_1-a

字符序列 /* 不得在 C-style 注释中使用

AUTOSAR-M9_6_4-a

带符号整数类型的命名位字段的长度应大于一位

BD-PB-ARRPTR

指向对象数组元素的指针不得传递给单个对象类型的智能指针

BD-PB-NOEXCEPT

避免从声明为不抛出的函数中抛出异常

BD-PB-OVERLAP

不得将对象分配或复制到重叠的对象

BD-PB-REFPARAM

如果参数不能为 NULL,则应通过引用传递

BD-RES-BADDEALLOC

正确释放动态分配的资源

BD-RES-CSP

避免循环的 shared_ptr 引用

BD-SECURITY-TDINPUT

从格式字符串中排除未经过滤的用户输入

CERT_CPP-ERR50-m

避免从声明为不抛出的函数中抛出异常

CERT_CPP-EXP59-a

对有效类型和成员使用 offsetof()

CERT_CPP-EXP62-a

不要将可能包含填充位的类的对象与 C 标准库函数进行比较

CERT_CPP-MEM51-d

正确释放动态分配的资源

CERT_CPP-MEM54-a

不要传递存储容量不足或与构造的对象不适当对齐的指针,以放置 'new’

CERT_CPP-MEM54-b

当对象数组传递到放置 'new’分配函数时,应使用开销

CERT_CPP-MEM57-a

避免对过度对齐的类型使用默认的运算符 'new’

CERT_CPP-STR50-b

避免由于读取非零终止字符串而导致溢出

CERT_CPP-STR50-c

写入缓冲区时避免溢出

CERT_CPP-STR50-d

避免超出范围访问数组

CERT_CPP-STR50-e

防止缓冲区溢出污染数据

CERT_CPP-STR50-f

避免缓冲区从受污染的数据中溢出

CERT_CPP-STR50-g

避免使用不安全的字符串函数,这可能会导致缓冲区溢出

CODSTA-CPP-100

不要将可能包含填充位的类的对象与 C 标准库函数进行比较

CODSTA-CPP-101

关系运算符应返回布尔值

CODSTA-CPP-102

二进制算术运算符和按位运算符应返回 'prvalue'

CODSTA-CPP-99

对有效类型和成员使用 offsetof()

CODSTA-MCPP-16_e

'std::make_unique' 将用于构造 'std::unique_ptr'拥有的对象

CODSTA-MCPP-23

如果某个类的公共析构函数不是虚拟的,则应将该类声明为 final

CODSTA-MCPP-24

成员函数声明中仅应指定虚拟重写或 final 形式之一

CODSTA-MCPP-25

数字序列分隔符 ' 能一致使用

CODSTA-MCPP-26

指向成员虚拟函数的指针仅应使用 null-pointer-constant 测试是否相等

CODSTA-MCPP-27

用户定义类型的所有 std::hash 专门化都应具有 noexcept 函数调用运算符

CODSTA-MCPP-28

Lambda 不应是 Typeid 的操作数

CODSTA-MCPP-29

将指针传递给线程中的对象时使用智能指针

CODSTA-MCPP-30

考虑对本地对象使用 'std::unique_ptr' 而不是'std::shared_ptr'

CODSTA-MCPP-31

定义操作符 delete 的大小版本和无固定大小版本

CODSTA-MCPP-33

用户定义的文字运算符应仅执行传递参数的转换

CODSTA-MCPP-34

智能指针仅在表示生命周期语义时才可以用作参数类型

CODSTA-MCPP-35

如果函数替换了托管对象,则仅应将参数声明为对 'std::shared_ptr’ 或 'std::unique_ptr' 的非常量左值引用。

CODSTA-MCPP-36

不要将参数的类型声明为对 'std::shared_ptr' 或 'std::unique_ptr’的右值引用

EXCEPT-21

用户提供的所有移动构造函数和移动赋值运算符都不应异常退出

HICPP-13_2_2-b

二进制算术运算符和按位运算符应返回 “prvalue”

HICPP-15_3_2-c

避免从声明为不抛出的函数中抛出异常

HICPP-5_3_3-c

正确释放动态分配的资源

MISRA2008-15_5_2_b

避免从声明为不抛出的函数中抛出异常

MISRA2008-15_5_3_l

避免从声明为不抛出的函数中抛出异常

MISRA2012-DIR_4_14_l

从格式字符串中排除未经过滤的用户输入

MISRA2012-RULE_19_1_c

不得将对象分配或复制到重叠的对象

MISRAC2012-DIR_4_14-l

从格式字符串中排除未经过滤的用户输入

MISRAC2012-RULE_19_1-c

不得将对象分配或复制到重叠的对象

MRM-54

避免对过度对齐的类型使用默认的运算符 'new'

MRM-55

不要传递存储容量不足或与构造的对象不适当对齐的指针,以放置 'new’

MRM-55_b

当对象数组传递到放置 'new’分配函数时,应使用开销

NAMING-51

用户定义文字运算符的用户定义后缀应以下划线开头,后跟一个或多个字母

NAMING-52

通用字符名称只能在字符或字符串文字中使用

NAMING-53

头文件的文件扩展名应为:".h" ".hpp" or ".hxx"

OOP-55

非 POD 类型应定义为类

OOP-56

用户定义的赋值运算符不得为虚拟的

OOP-57

结构只能包含公共数据成员,并且不能是基础或继承

PB-38_b

具有不同编码前缀的字符串文字不得串联

PB-39_b

函数不得返回由常量引用传递的指针或对参数的引用

PORT-32

不能使用 long double 类型

PORT-33

不得使用 wchar_t 类型

PREPROC-22

#error 指令不得使用

PREPROC-23

#pragma 指令不得使用

PREPROC-24

预处理器指令中的所有宏标识符都应在使用前定义,但 #ifdef 和 #ifndef 预处理器指令以及 defined() 运算符中除外

TEMPL-16

模板专门化必须与主模板或声明了专门化的用户定义类型在同一文件中声明

更新规则

我们更新了以下静态分析规则以改善分析结果:

规则类别规则 IDs
AUTOSAR C++14 Coding Guidelines

AUTOSAR-A0_1_4-a,AUTOSAR-A12_4_1-a, AUTOSAR-A27_0_1-b, AUTOSAR-A27_0_2-a, AUTOSAR-A2_11_1-a, AUTOSAR-A2_8_1-a, AUTOSAR-A5_0_1-b, AUTOSAR-A5_0_1-f, AUTOSAR-A5_5_1-a, AUTOSAR-A8_5_1-a, AUTOSAR-A9_6_1-a, AUTOSAR-M0_1_1-b, AUTOSAR-M0_1_3-a, AUTOSAR-M0_1_3-b, AUTOSAR-M0_3_1-g. AUTOSAR-M11_0_1-a, AUTOSAR-M5_8_1-a

Flow Analysis

BD-CO-ITMOD, BD-PB-ERRNO, BD-PB-OVERFNZT, BD-PB-OVERFNZT, BD-SECURITY-RAND

SEI CERT C

CERT_C-ARR38-d, CERT_C-DCL01-b, CERT_C-DCL10-a, CERT_C-DCL11-a, CERT_C-DCL11-b, CERT_C-DCL11-c, CERT_C-DCL11-d, CERT_C-DCL11-e, CERT_C-DCL11-f, CERT_C-ERR30-a, CERT_C-ERR32-a, CERT_C-EXP10-b, CERT_C-EXP30-b, CERT_C-EXP37-d, CERT_C-FIO41-b, CERT_C-FIO47-a, CERT_C-FIO47-b, CERT_C-FIO47-c, CERT_C-FIO47-d, CERT_C-FIO47-e, CERT_C-FIO47-f, CERT_C-INT31-f, CERT_C-INT34-a, CERT_C-MSC07-b, CERT_C-MSC09-a, CERT_C-MSC12-b, CERT_C-MSC13-a, CERT_C-MSC32-d, CERT_C-POS30-a, CERT_C-STR03-a, CERT_C-STR32-a

SEI CERT C++

CERT_CPP-CTR51-a, CERT_CPP-EXP50-b, CERT_CPP-MSC51-a, CERT_CPP-OOP53-a

Coding Conventions

CODSTA-124_a, CODSTA-124_b, CODSTA-161_f, CODSTA-52, CODSTA-56

Coding Conventions for C++CODSTA-CPP-87_c
High Integrity C++

HICPP-12_4_4-a, HICPP-14_2_1-a, HICPP-1_2_1-b, HICPP-3_1_1-b, HICPP-4_2_2-a, HICPP-5_1_2-b, HICPP-5_1_2-f, HICPP-5_7_2-a

InitializationINIT-10
Joint Strike Fighter

JSF-009, JSF-075, JSF-104, JSF-117, JSF-125_a, JSF-135_b, JSF-143_a, JSF-164, JSF-186_b, JSF-198, JSF-204.1_b, JSF-204.1_f

Metrics

METRICS-19, METRICS-29, METRICS-33

MISRA C 1998

MISRA-005, MISRA-038, MISRA-071_b

MISRA C 2004

MISRA2004-12_2_b, MISRA2004-12_2_f, MISRA2004-12_8, MISRA2004-14_1_b, MISRA2004-5_2_b, MISRA2004-8_1_b

MISRA C++ 2008

MISRA2008-0_1_11, MISRA2008-0_1_1_b, MISRA2008-0_1_3_a, MISRA2008-0_1_3_b, MISRA2008-0_3_1_e, MISRA2008-11_0_1, MISRA2008-14_7_3, MISRA2008-2_10_2_b, MISRA2008-2_10_6_c, MISRA2008-5_0_1_b, MISRA2008-5_0_1_f, MISRA2008-5_8_1

MISRA C 2012 (Legacy)

MISRA2012-DIR-4_1_e, MISRA2012-RULE-10_1_f, MISRA2012-RULE-11_1_a, MISRA2012-RULE-11_1_b, MISRA2012-RULE-12_2, MISRA2012-RULE-13_2_b, MISRA2012-RULE-13_2_f, MISRA2012-RULE-17_3, MISRA2012-RULE-1_3_g, MISRA2012-RULE-1_3_k, MISRA2012-RULE-21_17_a, MISRA2012-RULE-22_10, MISRA2012-RULE-22_8, MISRA2012-RULE-22_9, MISRA2012-RULE-2_1_b, MISRA2012-RULE-5_3_b

MISRA C 2012

MISRAC2012-DIR_4_1-e, MISRAC2012-RULE_10_1-f, MISRAC2012-RULE_11_1-a, MISRAC2012-RULE_11_1-b, MISRAC2012-RULE_12_2-a, MISRAC2012-RULE_13_2-b, MISRAC2012-RULE_13_2-f, MISRAC2012-RULE_17_3-a, MISRAC2012-RULE_1_3-g, MISRAC2012-RULE_1_3-k, MISRAC2012-RULE_21_17-a, MISRAC2012-RULE_22_10-a, MISRAC2012-RULE_22_8-a, MISRAC2012-RULE_22_9-a, MISRAC2012-RULE_2_1-b, MISRAC2012-RULE_5_3-b

Object Oriented

OOP-48

Optimization

OPT-02, OPT-03, OPT-05, OPT-06, OPT-14, OPT-31

Possible Bugs

PB-33_b, PB-45, PB-46, PB-47, PB-48, PB-49, PB-50

TemplateTEMPL-10

删除规则

以下规则已被删除并用新增规则替换,以确保符合新增 AUTOSAR 18.10 标准:

  • AUTOSAR-A14_8_1-a
  • AUTOSAR-A18_1_5-a
  • AUTOSAR-A2_11_1-b
  • AUTOSAR-A2_11_1-c
  • AUTOSAR-A2_11_1-d
  • AUTOSAR-A2_11_1-e
  • AUTOSAR-A2_11_2-a
  • AUTOSAR-A2_11_3-a
  • AUTOSAR-A2_11_3-b
  • AUTOSAR-A2_11_5-a
  • AUTOSAR-A2_11_5-b
  • AUTOSAR-A2_14_1-a
  • AUTOSAR-A2_14_2-a
  • AUTOSAR-A2_2_1-a
  • AUTOSAR-A2_6_1-a
  • AUTOSAR-A2_8_2-a
  • AUTOSAR-A2_8_4-a
  • AUTOSAR-A2_9_1-a
  • AUTOSAR-A7_1_1-b
  • AUTOSAR-M0_1_5-a
  • AUTOSAR-M14_5_2-a
  • AUTOSAR-M14_7_3-a
  • AUTOSAR-M14_8_1-a
  • AUTOSAR-M2_10_3-a
  • AUTOSAR-M2_10_6-a
  • AUTOSAR-M2_10_6-b
  • AUTOSAR-M2_10_6-c
  • AUTOSAR-M2_10_6-d
  • AUTOSAR-M5_2_1-a
  • AUTOSAR-M7_3_5-a
  • AUTOSAR-M8_5_1-a

删除了映射到 PREPROC-24 规则的以下规则,以更好地遵守行业标准:

  • AUTOSAR-M16_0_7-b
  • MISRA2004-19_11
  • MISRA2008-16_0_7
  • MISRA2012-RULE-20_9_a
  • MISRAC2012-RULE_20_9-a

您可以在测试配置中手动启用 PREPROC-24 规则以报告相同的违规行为。

  • No labels