Polyspace 产品

使用 Polyspace 执行死代码检测和覆盖率度量

Polyspace 工具可帮助您识别软件中的死代码或执行不到的代码。这可以节省时间并降低与测试活动相关的成本,从而实现稳健性和完整的代码覆盖度。Polyspace 产品提供的有关软件运行时行为的详细信息证明了死代码的存在,并帮助您将控制和数据流跟踪到潜在来源。这在遵守行业标准(如 DO 178 B/C、ISO 26262、IEC 61508 和 IEC 62304)时尤其重要。

死代码是您的应用中永远不会执行的部分。常见的原因包括:

  • 条件分支中的编程错误
  • 由于输入数据永远不会导致执行某个特定分支,代码永远不会得到执行
  • 调试结构和其他非功能代码
  • 针对不同运行时情景而设计的可重用组件

您的应用中存在死代码可能导致严重的后果,因为它可能是隐藏错误的根源。死代码还意味着该代码效率低下,因为它会增加可执行文件的大小,这对于嵌入式应用影响很大。还可能导致法律问题

Simple example of dead code

死代码的简单示例。

此外,检测死代码的效率可能非常低,使用传统的测试方法几乎不可能检测到。根据 DO-178 C 的形式方法补充 DO—333,““涉及‘始终/从不’的需求一般不能由一组有限的测试用例进行验证,但可以通过形式分析进行验证。”

Cost of achieving complete code coverage with testing

使用测试实现完整代码覆盖率的成本。

Polyspace 产品可以帮助您找到死代码,优化测试周期,并缩短整个验证周期。这非常重要,因为它可以减少工程师试图获得 100% 代码覆盖率所花费的时间,还可以节省测试时间和开发资源。这对于必须遵守像 DO 178 B/C 之类的标准的高度完整性和安全关键型应用尤其如此。

DO-178B/ED-12B 对死代码和停用代码的定义如下:

  • 死代码 - 由于设计错误而无法在目标计算机环境的操作配置中执行(代码)或使用(数据),并且不能被追溯至系统或软件需求的可执行目标代码(或数据)。一个例外是嵌入式标识符。
  • 停用代码 - 在设计上符合以下特征之一的可执行目标代码(或数据):(a) 不是为了执行(代码)或使用(数据),例如,以前开发的软件组件的一部分;或者 (b) 仅在目标计算机环境的特定配置中执行(代码)或使用(数据),例如,由硬件引脚选择或软件编程的选项启用的代码。

DO-178B/ED-12B 的基本要求是删除任何死代码,并验证停用的代码,证明它不会被意外激活。因此,测试的成本非常高。无论认证要求如何,识别死代码还是一个不错的开发实践,因为研究表明,死代码和停用代码是隐藏缺陷和运行时错误的根源。Polyspace 产品可以帮助您优化测试周期,并缩短整个验证周期。

使用 Polyspace Bug Finder 识别执行不到的代码

即使在运行单个测试用例之前,您也可以使用 PolySpace 代码验证工具在模块级或在完整的应用中识别执行不到的代码。如下图所示,使用 Polyspace Bug Finder™, 您可以直接在 IDE(如 Eclipse®)中检测执行不到的代码部分。这还有助于您考虑任何此类死代码对您的应用的影响,从而使您能够在第一时间做出更改。

Identify dead code right at compile time within your Eclipse IDE using Polyspace Bug Finder.

使用 Polyspace Bug Finder 在 Eclipse IDE 内直接在编译阶段识别死代码。

使用 Polyspace Code Prover 证明死代码的存在

Polyspace Code Prover™ 可让您证明死代码的存在,因为它提供了数学证明方式,突出显示某一段代码,对于任何代码路径或者应用中任何组合变量值,该段代码均不执行。凭借形式化方法和抽象解释技术,Polyspace Code Prover 可以证明应用中的死代码,且误报率几乎为零。

Proof of the existence of dead code, including detailed information about the cause of the issue, within Polyspace Code Prover.

在 Polyspace Code Prover 中证明死代码的存在,其中包括导致该问题的原因的详细信息。

您可以使用详细的检查信息进一步了解此类冗余的原因。它可能会揭示在需求捕获中由于未识别或者未关联任何测试用例而错过的需求。还可以使用能够识别上下文验证参数范围的数据范围规范来识别死代码和停用代码。

代码覆盖率、代码度量指标和趋势

代码覆盖率是一项指标,用于量化表示某个软件应用是否经过全面测试并且包含错误的机率较低。结构化代码覆盖率主要用作一种度量,表示达到了足够的测试的情况。由于不可能测试所有可能的运行时场景,100% 的代码覆盖率是指经过测试已经达到可接受水平的软件。死代码的存在使得不可能达到 100% 的代码覆盖率,并导致投入大量的时间和精力编写不必要的测试用例。

Polyspace 工具可产生并合成有用的代码指标,准确地反映代码的质量。这些指标可以使用基于 Web 的仪表板查看。使用这一内置功能,您可以访问各种指标,如运行时错误、代码复杂度,以及编码违规。使用这些指标,您可以在从第一次迭代到最终交付版本的代码进化过程中跟踪达到预定义的软件质量目标的进度。您还可以测量实施的任何代码更改对代码库造成的增量影响,例如由于更改而引入任何死代码。

Tracking code quality metrics within the Polyspace web based dashboard

在 Polyspace 基于 Web 的仪表板中跟踪代码质量指标。

其他资源

Alenia Aermacchi

“对于我们来说,基于模型的设计的一个关键优势是,我们可以专注于设计和开发,而无需将精力放在低级编码、验证和认证任务上。其结果是获得了更高质量的、经过 DO-178B 认证的软件和更快的迭代速度。”