死代码分析
如何使用 Axivion Static Code Analysis 检测死代码和不可能被执行到的代码
Axivion Static Code Analysis 根据以下类型分析检测未执行代码:
Axivion Static Code Analysis 通过对被分析软件的调用关系(即过程间控制流)的可达性分析算法来查找失效函数。这些函数永远不会被调用,因此永远不会被执行,因为从系统的程序入口点(例如从主程序、中断处理程序或回调)到这些函数没有连接
通过更深入的程序分析,还可以找到单个函数内静态不可访问且在程序逻辑方面不可访问的代码区域(不可达代码、死代码、不可行路径、不可达语句、冗余捕获块)。相应的编码指南(例如 MISRA 规则)会使用这些分析。一个简单的例子是直接在return语句之后的代码。另一个例子是 else 分支,由于所涉及的条件中的变量值导致永远无法遍历该分支。还可以检测到无限循环
别让死代码蒙蔽您的视野
不会被执行的代码仍然需要注意。死代码会使可理解性、可测试性和可维护性变得复杂。因此,应特别注意开发过程中因修改代码而“死亡”的区域。问问自己:
- 这是有意为之?这些代码行是否可以完全删除?
- 是否还需要这些代码?
- 这些代码是否需要在冲刺阶段或开发周期结束时保持活跃状态?
这时,Axivion Static Code Analysis 的增量分析开始发挥作用。这种直接反馈可以精确指导预防性 Bug 修复和低阈值重构。
您要构建程序库吗?您是否使用中断?
死代码分析的典型症结在于开发程序库、框架或整个产品系列的开发者:在这些情况下,分析不能局限于单个应用程序。相反,为了进行全面分析,就必须在适当的设置中分析整个应用程序集。因此,根据死代码问题的具体情况,可以通过各种配置选项来指定“活”代码。例如,可以标记 API以便分析时将其视为“活跃”。
通过配置操作系统的调用机制,可以模拟典型用例,以便在分析时相应地考虑接口。
配置选项对于处理中断服务例程和中断处理程序也很有用。处理中断的相应函数已经可以在程序代码级别被标记为活动(关键字interrupt、使用属性)。
您会防御性编程吗?
防御性编程范式对于开发鲁棒软件非常有意义,但从静态分析的角度来看,通常会产生死代码/不可达代码。通常的安全标准会禁止此类死代码,因为它们经常导致编程错误,然而,这些是您有意保留的代码部分。为此,Axivion Suite 提供了灵活的配置工具,可以在工作流中“有意”适当地标记死代码,并在偏差管理中相应地将其考虑在内。