- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
代码级自动化测试方法.doc
代码级自动化测试方法—程序静态分析技术及实践
作者:网络转载 发表于:[ 2011/4/19 10:09:27 ]
程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析、语法分析、控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。它可以帮助软件开发人员、质量保证人员查找代码中存在的结构性错误、安全漏洞等问题,从而保证软件的整体质量。
本文首先对程序静态分析的特点、常用静态分析技术、静态分析实现方式进行描述,然后通过一个实例讲解了程序静态分析的执行过程。
一、静态分析特点
程序静态分析是与程序动态分析相对应的代码分析技术,它通过对代码的自动扫描发现隐含的程序问题,主要具有以下特点:
(1)不实际执行程序。动态分析是通过在真实或模拟环境中执行程序进行分析的方法,多用于性能测试、功能测试、内存泄漏测试等方面。与之相反,静态分析不运行代码只是通过对代码的静态扫描对程序进行分析。
(2)执行速度快、效率高。目前成熟的代码静态分析工具每秒可扫描上万行代码,相对于动态分析,具有检测速度快、效率高的特点。
(3)误报率较高。代码静态分析是通过对程序扫描找到匹配某种规则模式的代码从而发现代码中存在的问题,例如可以定位strcpy()这样可能存在漏洞的函数,这样有时会造成将一些正确代码定位为缺陷的问题,因此静态分析有时存在误报率较高的缺陷,可结合动态分析方法进行修正。
二、常用静态分析技术
(1)词法分析:从左至右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描,通过使用正则表达式匹配方法将源代码转换为等价的符号(Token) 流,生成相关符号列表,Lex为常用分析工具。
(2)语法分析:判断源程序结构上是否正确,通过使用上下文无关语法将相关符号整理为语法树, Yacc为常用工具。
(3)抽象语法树分析:将程序组织成树形结构,树中相关节点代表了程序中的相关代码,目前已有javacc等抽象语法树生成工具。
(4)语义分析:对结构上正确的源程序进行上下文有关性质的审查。
(5)控制流分析:生成有向控制流图,用节点表示基本代码块,节点间的有向边代表控制流路径,反向边表示可能存在的循环;还可生成函数调用关系图,表示函数间的嵌套关系。
(6)数据流分析:对控制流图进行遍历,记录变量的初始化点和引用点,保存相关数据信息。
(7)污点分析:基于数据流图判断源代码中哪些变量可能受到攻击,是验证程序输入、识别代码表达缺陷的关键。
三、静态分析实现方式
(1)基于规则的代码静态分析
通过自动化逐行扫描程序代码,从中查找是否存在与事先构建好的规则模式相匹配的代码,如果发现相匹配的代码,则报告相应错误。基于规则的静态分析方式可以预防非法代码的出现,既可满足业界标准(如:MISRA,JSF,ELLEMTEL)也可满足企业内部自定义规范,同时可以增强团队编码规范的一致性。通过基于规则的代码静态分析可以及时发现并修复违规代码,为后续工作节省大量测试及调试时间—大大降低引入违规代码所导致的成本,可以预防内存泄漏、资源泄漏、安全性漏洞等问题的发生,据统计通过基于规则的静态分析可以预防大约60%的代码缺陷发生。
(2)基于数据流的代码静态分析
通过静态模拟应用程序的执行路径,帮助用户找到运行时才能暴露的一些严重错误,如资源泄漏、空指针异常、SQL注入以及其它的安全性漏洞等潜在的运行时错误。这些严重的错误往往通过一般的静态规则扫描难以查找,此时需要数据流分析技术,也叫BugDetective。这使得在后期需要数周的时间才能发现的严重错误能够尽早被发现或修复。该技术对于嵌入式环境测试尤其有效,原因很简单,嵌入式环境往往需要整个项目代码初步实施完成,相应的硬件测试环境准备充分,方可测试一些运行时错误,而通过数据流分析技术,可以在项目开始的初期即引入测试,及早发现一些严重错误。
基于规则的静态分析和数据流静态分析的主要区别是,使用基于规则的静态分析,只要你发现并修复了引发某个缺陷的编码结构后,你就能保证这一类错误不会再发生。数据流静态分析发现的错误则是在实际的程序路径运行时才会发生的,而不仅仅是危险的编码结构。但是,你一定要意识到,只使用数据流分析也会忽略某些错误,同时相比较基于规则的静态分析,数据流分析的误报率可能更高一些。
四、静态分析实例
下面以一个基于规则的程序静态分析案例为例,简要介绍代码静态分析的过程,假设我们针对SwitchStmtsShouldHaveDefault(Switch语句块应该包含一条Default语句)规则对源码进行检测,被测代码如下:
public cla
文档评论(0)