静态代码分析全方位解读

发表于:2011-9-08 10:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  什么是静态分析

  静态分析,也叫静态规则检查或代码规范检查,是指通过分析代码来监视这些代码是否满足安全性,可靠性,性能以及可维护性方面的指标。正确地实施静态代码分析能帮助开发者查找出结构性错误并预防整体类错误,从而开发出可靠的代码。

  本文主要从3个方面全面解读静态分析:

  ● 基于模式的静态规则检查

  ● 基于数据流分析的静态分析

  ● 基于代码度量的静态分析

  基于模式的静态规则检查是指通过自动化的逐行扫描代码,从中查找代码中是否与事先构建好的规则模式相匹配,如果发现相匹配的代码,则报告相应静态违规。

  静态规则可以预防非法代码的出现,满足业界标准(如:MISRA, JSF, Ellemtel等等),同时可以增强团队编码规范的一致性。即时发现并修复这些违规代码,能为后续工作节省大量测试与调试的时间——这将大大降低将这些违规引入到项目后期甚至产品阶段所导致的成本。这样能预防多种缺陷,包括内存泄漏,资源泄漏以及安全性漏洞。根据我们的经验,只需简单使用静态代码分析加强输入验证就能够预防OWASP(一个安全性协会)所列出70%左右的安全性问题。

  在笔者所接触的项目中碰到过很多通过静态分析即可解决用户产品缺陷方面的案例。

  基于数据流分析的静态检查能静态地模拟应用程序的执行路径,而帮助用户找到运行时才能暴露的一些严重Bug,如资源泄漏,空指针异常,SQL注入以及其它的安全性漏洞等潜在的运行时错误。这些严重的Bug往往通过一般的静态规则扫描是难以查找到的,所以此时需要数据流分析技术,也叫BugDetective。这使得在后期需要数周的时间才能发现的严重Bug能够尽早被发现或修复。该技术对于嵌入式环境测试尤其有效,原因很简单,嵌入式环境往往需要整个项目代码初步实施完成,相应的硬件测试环境准备充分,方可测试一些运行时错误,而通过数据流分析技术,可以在项目开始的初期即引入测试,及早发现一些严重Bug。

  基于模式的静态分析是一种预防机制,数据流静态分析则是一种错误检测机制。正如其它的错误检测机制,数据流静态分析也不是100%准确的,所以你不能指望它能发现应用程序中存在的所有错误。

  基于模式的静态分析和数据流静态分析的主要区别是,使用基于模式的静态分析,只要你发现并修复了引发某个缺陷的编码结构后,你就能保证这一类错误不会再发生。数据流静态分析发现的错误则是在实际的程序路径运行时才会发生的,而不仅仅是危险的编码结构。但是,你一定要意识到,只使用数据流分析也会忽略某些错误,同时相比较基于模式的静态分析,数据流分析的误报率可能更高一些。

  何谓度量指标?它的重要意义何在?

  在静态代码分析的发展历程中,度量指标扮演了一个很有趣的角色。在大多数情况下,它们都被忽略掉了。并且在我看来,除了一些特殊情况,它们确实可以被忽略。

  假设有100万行源码。若平均圈复杂性(cyclomactic complexity)为9或6,这能表明什么呢?表面上不能说明任何问题。

  根据实践中的经验反复证明,复杂代码比简单代码更易出错,因此需要有简单的工具能迅速定位这些复杂代码,如那些圈复杂度为10或更高类和函数。 有能力标识超出业界标准或用户自定标准的代码,这相当有价值。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号