代码级自动化测试方法—程序静态分析技术及实践

发表于:2011-4-18 10:43

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

 作者:sdstc(CSDNblog)    来源:51Testing软件测试网采编

分享:

  三、静态分析实现方式

  (1)基于规则的代码静态分析

  通过自动化逐行扫描程序代码,从中查找是否存在与事先构建好的规则模式相匹配的代码,如果发现相匹配的代码,则报告相应错误。基于规则的静态分析方式可以预防非法代码的出现,既可满足业界标准(如:MISRA,JSF,ELLEMTEL)也可满足企业内部自定义规范,同时可以增强团队编码规范的一致性。通过基于规则的代码静态分析可以及时发现并修复违规代码,为后续工作节省大量测试及调试时间—大大降低引入违规代码所导致的成本,可以预防内存泄漏、资源泄漏、安全性漏洞等问题的发生,据统计通过基于规则的静态分析可以预防大约60%的代码缺陷发生。

  (2)基于数据流的代码静态分析

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

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

  四、静态分析实例

  下面以一个基于规则的程序静态分析案例为例,简要介绍代码静态分析的过程,假设我们针对SwitchStmtsShouldHaveDefault(Switch语句块应该包含一条Default语句)规则对源码进行检测,被测代码如下:

public class Foo {
public void bar() {
int x = 2;
switch (x) {
case 2: int j = 8;
}
}
}

  首先对被测程序进行语法分析、词法分析生成被测程序的抽象语法树,在此可借助PMD框架中的Javacc和JJtree工具产生抽象语法树,生成的语法树,在生成抽象语法树后,对抽象语法树进行遍历,定位关于Switch语句相关节点,针对上述程序,可定位SwitchLabel节点,SwitchLabe节点代表Switch语句块中的一种判断情况,针对SwitchLabe节点的Default属性进行判断,如果Default属性的值为True,证明Switch语句块包含Default语句,如果值为False代表不包含Default语句,对于这种情况,记下语句所在文件名、所在行号,标记为错误,将结果返回用户,完成检测流程。

  五、结束语

  本文对程序静态分析技术的相关内容做了简要的概括,做为一项成熟的技术,程序静态分析必将收到软件质量保证人员的关注,帮助相关人员找出代码中存在的缺陷和安全漏洞,提高软件产品质量。

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号