Polyspace 编码规范支持
Polyspace® Bug Finder™ 和 Polyspace as You Code™ 支持多种编码标准。通过在 IDE 中分析各个翻译单元,然后在集成期间分析整个源代码,检查代码是否符合这些标准。Polyspace as You Code 支持 Bug Finder 支持的部分规则。请参阅 Checkers Deactivated in Polyspace as You Code Analysis (Polyspace as You Code)。
Polyspace 支持摘要
| 标准 | 版本 | 静态可执行规则 | 必需或强制规则 |
|---|---|---|---|
| MISRA C++:2023 | 2023 年 10 月 | 156 条可判定规则(标准中共 156 条)。 |
|
| AUTOSAR C++14 | 2018 年 10 月 31 日 | 349 条规则(标准中共 349 条)。 | 337 条规则(标准中共 362 条)。 |
| MISRA C:2023 | 2023 年 4 月 | 149 条规则(标准中共 149 条) | 150 条规则(标准中共 151 条) |
| CERT C | 2016 | 120 条规则(标准中共 120 条) | 120 条规则(标准中共 120 条) |
| MISRA C:2012 |
| 149 条规则(标准中共 149 条) | 150 条规则(标准中共 151 条) |
编码规范根据规则的更性级别或静态强制执行情况对规则进行分类。Polyspace 支持被规范视为不可强制或部分可强制执行的规则。执行这些规则需要人工审查流程,Polyspace 结果可为此提供帮助。
MISRA C++:2023
MISRA C++:2023 标准将规范分为规则和指令两类。
MISRA C++:2023 规则
规则是一种可以完全描述的规范。对规则的遵守情况可以进行静态检查,但存在一定限制。规则根据不同的属性进一步分类。
硬性级别
| 类别 | 在 Bug Finder 中实现的规则 | 标准中的规则 |
|---|---|---|
| 强制:这些是合规 C 代码必须遵守的规范。该标准不允许偏离这些规范。 | 5 | 5 |
| 必需:这些是合规 C 代码必须遵守的规范。该标准仅允许您正式记录并授权的偏离。 | 122 | 122 |
| 建议:这些是建议规范。该标准允许在无正式记录的情况下偏离这些规范。最佳做法是,在合理范围内遵守这些规范,并记录偏离情况。 | 48 | 48 |
| 总计:175 | 175 |
合规 C++ 代码必须遵守强制和必需规则。Polyspace 支持这两种类别的所有规则。
静态可执行性
| 类别 | 在 Bug Finder 中实现的规则 | 标准中的规则 |
|---|---|---|
| 可判定:如果静态分析工具能够在所有可能的情况下检查规则的遵守情况,则该规则是可判定的。 | 155 | 155 |
| 不可判定:如果静态分析工具只能在某些情况下检查规则的遵守情况,则该规则是不可判定的。Polyspace 仅显示所有可能问题的一个子集。有关 Polyspace 针对特定规则检测哪些问题的详细信息,请参阅该规则参考页面中的 Polyspace 实现部分。 | 20 | 20 |
有关 Polyspace 对可判定 MISRA 编码规则支持的详细信息,请参阅Polyspace Bug Finder 支持的可判定 MISRA 编码规则。
MISRA C++:2023 指令
指令是无法完全描述的规范。除了代码之外,还需要更多信息来检查这些指令的遵守情况。静态分析可能有助于检查代码指令的遵守情况。指令根据硬性级别进行分类。
硬性级别
| 类别 | 在 Bug Finder 中实现的指令 | 标准中的指令 |
|---|---|---|
| 必需:这些是合规 C 代码必须遵守的规范。该标准仅允许您正式记录并授权的偏离。 | 2 | 2 |
| 建议:这些是建议规范。该标准允许在无正式记录的情况下偏离这些规范。最佳做法是,在合理范围内遵守这些规范,并记录偏离情况。 | 2 | 2 |
静态可执行性
| 类别 | 在 Bug Finder 中实现的指令 | 标准中的指令 |
|---|---|---|
| 可判定:如果静态分析工具能够在所有可能的情况下检查指令的遵守情况,则该指令是可判定的。 | 1 | 1 |
| 不可判定:如果静态分析工具只能在某些情况下检查指令的遵守情况,则该指令是不可判定的。Polyspace 仅显示所有可能问题的一个子集。有关 Polyspace 针对特定指令检测哪些问题的详细信息,请参阅该指令参考页面中的 Polyspace 实现部分。 | 3 | 3 |
AUTOSAR C++14
AUTOSAR C++14 标准根据规则的更性级别和通过静态分析进行的强制执行情况对规则进行分类。
硬性级别
| 类别 | 在 Bug Finder 中实现的规则 | 标准中的规则 |
|---|---|---|
| 必需:代码必须遵守的规则。 | 337 | 362 |
| 建议:建议代码在实际可行范围内遵守的规则。 | 33 | 35 |
| 总计:370 |
通过静态分析工具强制执行
| 类别 | 在 Bug Finder 中实现的规则 | 标准中的规则 |
|---|---|---|
| 自动:静态分析工具可以检测所有违规情况。 | 327 | 327a |
| 半自动化:静态分析工具无法检测到所有可能的违规情况。您需要手动代码审查或其他工具来强制执行这些规则。Polyspace 仅显示所有可能问题的一个子集。有关 Polyspace 针对特定规则检测哪些问题的详细信息,请参阅该规则参考页面中的 Polyspace 实现部分。 | 22 | 22 |
| 非自动:静态分析工具无法检测到所有可能的违规情况。您需要手动代码审查或其他工具来强制执行这些规则。Polyspace 仅显示所有可能问题的一个子集。有关 Polyspace 针对特定规则检测哪些问题的详细信息,请参阅该规则参考页面中的 Polyspace 实现部分。 | 21 | 46 |
a The AUTOSAR C++14 standard contains 329 Automated rules. The rules A0-4-3 and A1-4-3 are not enforceable by a static analysis tool. These rules might be enforced by a compiler. | ||
自动和半自动规则是可静态强制执行的规则。Polyspace 共支持 349 条静态强制执行的规则和 337 条必需规则。请参阅:
MISRA C:2023
MISRA C:2023 标准将规范分为规则和指令两类。Polyspace 对 MISRA C:2012 标准的支持与对 MISRA C:2023 标准的支持完全相同。
MISRA C:2023 规则
规则是一种可以完全描述的规范。对规则的遵守情况可以进行静态检查,但存在一定限制。规则根据不同的属性进一步分类。
硬性级别
| 类别 | 在 Bug Finder 中实现的规则 | 标准中的规则 |
|---|---|---|
| 强制:这些是合规 C 代码必须遵守的规范。该标准不允许偏离这些规范。 | 23 | 23 |
| 必需:这些是合规 C 代码必须遵守的规范。该标准仅允许您正式记录并授权的偏离。 | 137 | 137 |
| 建议:这些是建议规范。该标准允许在无正式记录的情况下偏离这些规范。最佳做法是,在合理范围内遵守这些规范,并记录偏离情况。 | 40 | 40 |
| 总计:200 | 总计:200 |
静态可执行性
| 类别 | 在 Bug Finder 中实现的规则 | 标准中的规则 |
|---|---|---|
| 可判定:如果静态分析工具能够在所有可能的情况下检查规则的遵守情况,则该规则是可判定的。 | 149 | 149 |
| 不可判定:如果静态分析工具只能在某些情况下检查规则的遵守情况,则该规则是不可判定的。Polyspace 仅显示所有可能问题的一个子集。有关 Polyspace 针对特定规则检测哪些问题的详细信息,请参阅该规则参考页面中的 Polyspace 实现部分。 | 51 | 51 |
分析范围
| 类别 | 在 Bug Finder 中实现的规则 | 标准中的规则 |
|---|---|---|
| 单一翻译单元:您可以通过单独检查工程中的每个翻译单元来查找所有违规情况。 | 135 | 135 |
| 系统:只有分析整个工程或系统,才能找到所有违规情况。 | 65 | 65 |
MISRA C:2023 指令
指令是无法完全描述的规范。除了代码之外,还需要更多信息来检查这些指令的遵守情况。静态分析可能有助于检查代码指令的遵守情况。指令根据硬性级别进行分类。
硬性级别
| 类别 | 在 Bug Finder 中实现的指令 | 标准中的指令 |
|---|---|---|
| 必需:这些是合规 C 代码必须遵守的规范。该标准仅允许您正式记录并授权的偏离。 | 13 | 14 |
| 建议:这些是建议规范。该标准允许在无正式记录的情况下偏离这些规范。最佳做法是,在合理范围内遵守这些规范,并记录偏离情况。 | 6 | 7 |
静态可执行性
| 类别 | 在 Bug Finder 中实现的指令 | 标准中的指令 |
|---|---|---|
| 可判定:如果静态分析工具能够在所有可能的情况下检查指令的遵守情况,则该指令是可判定的。 | 0 | 0 |
| 不可判定:如果静态分析工具只能在某些情况下检查指令的遵守情况,则该指令是不可判定的。Polyspace 仅显示所有可能问题的一个子集。有关 Polyspace 针对特定指令检测哪些问题的详细信息,请参阅该指令参考页面中的 Polyspace 实现部分。 | 19 | 21 |
CERT C
Polyspace 支持 CERT C 标准中的所有规则。该标准将规范分为规则和建议。这些建议被视为无法通过静态方式强制执行。Polyspace 不支持正在删除或制定中的规则。
| 类别 | 在 Bug Finder 中实现的检查 | 标准中的检查项 |
|---|---|---|
| 规则:这些规范是必须遵守的。违反这些规范可能会危及系统的安全性、可靠性或稳定性。静态分析工具可强制执行这些规范。 | 120 | 120 |
| 推荐:这些规范旨在提高系统的可读性、安全性和安全性。静态分析只能检测到这些规范的部分违规情况。Polyspace 仅显示所有可能问题的一个子集。有关 Polyspace 检测哪些问题的详细信息,请参阅这些规则的参考页面。 | 125 | 183 |
其他
Polyspace 还支持下面这些编码规范标准。
| 标准 | 在 Bug Finder 中实现的规则 |
|---|---|
| MISRA C++:2008 | 214 条(标准中共 228 条) |
| ISO/IEC TS 17961 | 46 条(标准中共 46 条) |
| JSF AV C++ | 160 条(标准中共 234 条) |
| CERT C++ | 163 条(标准中共 163 条) |
| CWE | 199 条(版本 4.17) |
另请参阅
检查 AUTOSAR C++ 14 (-autosar-cpp14) | 检查 MISRA C++:2008 (-misra-cpp) | 检查 SEI CERT-C++ (-cert-cpp) | 检查 MISRA C:2012 (-misra3) | 检查 SEI CERT-C (-cert-c) | 检查 CWE (-cwe) | 检查 MISRA C:2023 (-misra-c-2023) | 检查 MISRA C++:2023 (-misra-cpp-2023)
主题
- Checkers Deactivated in Polyspace as You Code Analysis (Polyspace as You Code)
- Polyspace Support for MISRA C: 2012 Technical Corrigenda and Amendments
- Polyspace Bug Finder 支持的可判定 MISRA 编码规则
- Undecidable MISRA C:2012 Rules and Directives Supported by Polyspace Bug Finder
- Required AUTOSAR C++14 Coding Rules Supported by Polyspace Bug Finder
- Statically Enforceable AUTOSAR C++14 Rules Supported by Polyspace Bug Finder
- Polyspace Bug Finder 支持的必需或强制 MISRA 编码规则
- Polyspace Bug Finder 支持的必需且静态可执行的 CERT C 规则