误解:静态分析只是寻找漏洞

作者:Ram Cherukuri, Jeff Chapple, Stefan David和Jay Abraham

更快的上市时间趋势可能会导致误解静态分析只是为了找到漏洞。软件开发人员必须尽可能多地消除bug,并使用快速的bug查找工具,尽管有些bug可能仍然存在。这种做法对于非安全关键的应用程序(如智能手机应用程序)可能已经足够,但对于安全关键的应用程序可能还不够。因此,安全关键型应用程序需要更严格的方法来验证安全性和稳健性,这正是静态分析的其他好处所在。在本文中,我们将打破静态分析仅仅是寻找错误的误解,并证明它可以帮助验证对编码标准的遵从性,生成关于代码质量的指标,并可在软件开发的任何阶段使用。

找到bug绝对是一个重要的方面静态代码分析.然而,静态分析技术可以从简单的语法检查或基于启发式的方法到基于高级形式方法的验证。这个范围也代表了市场上各种各样的静态分析工具。例如,一些高级编译器有一个内置的语法检查器作为静态分析的一种形式。另一端是基于形式方法的工具,如Polyspace®下载188bet金宝搏进行语义分析以向您提供软件的详细运行时行为的产品。

例如,Polyspace Bug Finder™是一个静态分析工具,可以帮助您查找Bug,但它也可以用于(1)检查您的软件是否符合编码标准,如MISRA C/ c++、JSF++和自定义规则,以及(2)生成代码度量,以帮助提高代码质量。此外,使用Polyspace Code Prover™,您可以证明您的软件不会因某些类型的关键运行时错误而崩溃。

因此,这些工具不仅仅是简单的错误查找,而且在验证和确认过程中很有价值。例如,下图中的代码是正式验证的结果,确认在任何操作条件下都不会发生溢出:

确认在任何操作条件下都不会发生溢出的正式验证结果。

如前所述,您可以使用静态分析来检查代码是否符合特定的编码准则或标准,从而防止使用不安全或不可靠的构造。它还可以帮助您捕获指示代码质量的关键指标,如圈复杂度、不可访问的代码、共享全局变量的使用和递归——而无需编写测试用例的开销。这些指标可以帮助您识别设计问题,例如最终会影响软件性能和可靠性的代码架构。

例如,在特定的测试用例中,使用未初始化的变量或未受保护的共享变量可能会出现意外结果。然后,您可能会开始调试任务,并花费无数时间试图确定问题。更麻烦的是,由于运行时错误的不可预测性,这些缺陷可能不会在测试期间显示出来。

静态分析的广泛好处还不为人所知,因此它在软件开发工作流的后期阶段被采用。因为它被简单地视为一种发现bug的方法,所以通常在软件开发的最后阶段采用它(例如,静态分析是QE小组发布代码之前的最后一道关卡)。超过90%的潜在客户因为我们的静态分析解决方案而联系我们,他们正进入项目的最后阶段。

然而,如果您想利用上面讨论的所有好处,您应该在开发的早期阶段合并静态分析。实际上,使用编译器就是一个例子,因为编译器是一个非常简单的静态分析工具,它有助于开发代码的语法和语义。研究强调及早发现和修复编码错误的显著成本效益*。您还减少了正在开发的软件所需的测试量。通过这种方式,将静态分析及早纳入您的工作流程是很重要的,而且它远远超出了简单地识别缺陷的范围。

参考

  • V. Basili和B. Boehm,“基于cots的系统十大榜单”,IEEE计算机,中国科学(d辑):地球科学(英文版),2001。