更快地投放市场的趋势容易产生以下误解:静态分析只是发现错误。软件开发人员必须尽可能多地消除错误,并会使用错误快速发现工具,但很可能仍然存在一些错误。这种做法对于非安全关键型应用(如智能手机应用)可能足够了,但对于安全关键型应用可能是不够的。
因此,安全关键型应用需要更严格的方法来验证安全性和稳健性,这就是静态分析可以带来的其他好处。在本文中,我们将消除静态分析只是发现错误这一误解,并证明它可以帮助验证是否符合编码标准,生成有关代码质量的指标,并可以在软件开发的任何阶段使用。
毫无疑问,发现错误肯定是静态代码分析的一个重要方面。但是,静态分析技术的范围广泛,从简单的语法检查或基于启发式的方法,到基于形式化方法的高级验证,不一而足。
这一范围还体现在市场上各种各样的静态分析工具。例如,一些高级编译器有一个采用静态分析形式的内置语法检查器。在该范围的另一端是基于形式化方法的工具,如可以执行语义分析的 Polyspace,为您的软件提供详细的运行行为。
Polyspace Bug Finder 是一种可以帮助发现错误的静态分析工具,但它还可用于:
检查您的软件是否符合编码标准,如 MISRA C/C++、JSF++ 和自定义规则
生成代码度量指标以帮助您改进代码质量。
此外,使用 Polyspace Code Prover,您还可以证明您的软件不会由于特定类型的关键运行时错误而崩溃。
因此,这些工具已经超出了简单的错误发现,在验证和确认过程中非常有价值。例如,下图中的代码是形式验证的结果,该结果确认在任何运行条件下都不会发生溢出错误:
如前所述,您可以使用静态分析来检查您的代码是否符合特定的编码准则或标准,从而避免使用不安全或不可靠的结构。它还可以帮助您捕捉表明代码质量的关键指标,如圈复杂度、执行不到的代码、使用共享全局变量和递归 、省去编写测试用例的开销。这些指标可以帮助您找出设计问题,例如可能最终影响软件性能和可靠性的代码架构。
使用非初始化变量或不受保护的共享变量可能在特定的测试用例中显示意想不到的结果。然后,您可能会承担调试任务,花费大量的时间试图找出问题所在。更糟糕的是,由于此类运行时错误的不可预知性,这些缺陷可能不会在测试过程中显示出来。
静态分析更为广泛的优势并不广为人知,因此它在软件开发工作流程的后期才被采用。因为它被简单地认为是一种发现错误的方法,所以它通常在软件开发的最后阶段才被采用(例如,静态分析是质量工程团队发布代码之前的最后一关)。超过90%的潜在客户在进入了项目的结束阶段后才与我们联系,了解我们的静态分析解决方案。
但是,如果您想利用上面讨论的所有优势,则应在开发的早期阶段引入静态分析。实际上,使用编译器就是一个这样的例子,因为编译器是一个非常简单的静态分析工具,可帮助开发代码的语法和语义。研究发现,尽早发现和修复编码错误可以获得显著的成本效益。还可以缩短您所开发软件所需的测试时间。因此,静态分析在早期引入您的工作流非常重要,它远不是简单地识别错误。
-
代码
+关注
关注
30文章
4756浏览量
68370 -
编译器
+关注
关注
1文章
1618浏览量
49057 -
静态分析
+关注
关注
1文章
39浏览量
3880
发布评论请先 登录
相关推荐
评论