动态程序分析方法与工具四川大学.docx

上传人:b****6 文档编号:3741301 上传时间:2022-11-25 格式:DOCX 页数:23 大小:379.10KB
下载 相关 举报
动态程序分析方法与工具四川大学.docx_第1页
第1页 / 共23页
动态程序分析方法与工具四川大学.docx_第2页
第2页 / 共23页
动态程序分析方法与工具四川大学.docx_第3页
第3页 / 共23页
动态程序分析方法与工具四川大学.docx_第4页
第4页 / 共23页
动态程序分析方法与工具四川大学.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

动态程序分析方法与工具四川大学.docx

《动态程序分析方法与工具四川大学.docx》由会员分享,可在线阅读,更多相关《动态程序分析方法与工具四川大学.docx(23页珍藏版)》请在冰豆网上搜索。

动态程序分析方法与工具四川大学.docx

动态程序分析方法与工具四川大学

动态程序分析方法与工具

 

摘要:

关键字:

程序分析、动态程序分析、文献计量方法

1.前言

1.1研究背景

软件是一种十分特殊的人工制品:

它是人类“智力活动”的产物,是对客观事物的虚拟反应,是知识的固化和凝练[1]。

迄今为止,软件已有了50多年发展历史,但对于一个给定的软件,我们目前还不能完全了解它的特性。

软件分析就是以软件特性为关注点的研究领域。

经过这么多年的发展,目前软件生命周期中的许多活动(分析,设计,实现,测试,部署,维护等)都离不开分析技术。

尽管软件分析的能力有限,但它仍然是软件领域十分有用的技术。

下面将谈到两个概念,“验证”和“确认”。

“验证”是要回答“软件制品是否与软件需求规约一致”的问题,而“确认”则是回答“软件的特性是否符合用户需求”。

在英文中,“验证”是“Dothethingright”,而用“Dotherightthing”来解释“确认”。

验证就是所谓的软件分析技术,而确认则是软件测试技术。

软件分析包括对文档(需求规约、设计文档、代码注释等)的分析、对运行程序的分析,等等。

而程序分析中,根据“是否需要运行程序”为准则,可以将程序分析技术划分为静态分析技术和动态分析技术两大类,本文主要尝试对动态程序分析涉及的主要方法和工具进行总结和归类,并讨论动态程序分析技术在软件测试中的应用和发展。

本文总共分为6部分,第一部分是前言,主要对研究背景、涉及到的一些基本概念、研究的价值和意义、研究路线等进行了说明。

第二部分主要阐述了本文所涉及到的两种研究方法:

文献计量方法和系统文献综述方法。

第三部分是根据文献计量方法的策略,对检索到的文献进行具体的分析。

第四部分是本文的核心内容,主要总结和归纳现有的动态程序分析技术方法和工具,并讨论了动态程序分析方法和工具在软件测试中的应用。

第五部分结合本文所有信息对动态程序分析技术的发展趋势进行展望。

最后一部分是结束语,归纳总结了本文的研究思想和路线。

1.2基本概念

1)软件分析

软件分析是对软件进行人工或者自动分析,以验证、确认或发现软件性质(或规约、约束)的过程或活动。

包括对文档(需求规约、设计文档、代码注释等)的分析、对运行程序的分析,等等。

[1]

2)程序分析

程序分析是指对计算机程序行为进行自动分析的过程,主要包括静态分析和动态分析两种策略,它是以某种语言书写的程序为对象,对其内部的运作流程进行分析。

3)动态程序分析

动态程序分析是通过运行具体程序并获取程序的输出或者内部状态等信息来验证或发现软件性质的过程。

4)静态程序分析

静态程序分析是指在不运行软件前提下进行的分析过程。

5)软件测试:

软件测试是一组活动,执行这组活动的目的是发现程序中可能存在的潜在错误,验证在指定条件下程序运行的情况,方法则是给出指定的输入和期望的结果,观察实际的运行结果和期望结果之间的差异,从而对软件的执行正确程度做出判断。

(IEEE标准610.12-1990中,对软件测试是这样定义的:

软件测试是在指定的条件下操作测试系统或组件,观察和记录结果,并对测试系统或组件的不同方面做出评估的过程。

6)文献计量方法

文献计量方法是一种以各种文献外部特征为研究对象的量化分析方法,主要用于科学文献的研究,能够揭示各门学科的发展水平。

7)系统文献综述方法

系统文献综述(systematicliteraturereview),简称系统综述,是主要在医学领域和社会学研究领域针对某一个研究性问题开展的基于文献的系统化综述方法,并于2004年引入软件工程领域.系统文献综述的过程包含3个主要的阶段:

制定综述方案、开展综述、形成综述报告。

1.3研究价值和意义

为了保证软件开发的质量,业界在软件测试和软件分析阶段投入了大量的人力物力,而动态程序分析在软件分析中扮演着极其重要的角色。

本文对动态程序方法和工具进行了分析与总结,并讨论了其在软件测试当中的应用,不仅丰富了自己在该领域中的知识,增长了见闻,同时有利于人们在分析软件特定的质量属性时,选取合适的技术和工具。

1.4研究路线

首先提出该领域的几个需要最终回答的问题,然后确定关键字以及检索策略,接着对检索得到的论文进行筛选,然后对筛选过后剩下的论文进行数据提取和分析,最后形成报告。

同时,我们借助EndNote文献管理工具对我们检索到的文献进行管理,方便我们阅读和使用。

2.研究方法

2.1检索方案

2.1.1研究问题

通过该系统评价最终所要回答的问题,同时可能需要进一步明确所感兴趣的研究方法(intervention)和研究结果(outcome)等其他限定条件.

1)现有程序分析的方法和工具有哪些?

2)动态程序分析的方法和工具有哪些?

3)动态程序分析方法在软件测试中的应用有哪些?

4)动态程序分析中有哪些未解决的问题?

2.1.2搜索策略

根据所要研究的问题和关键词确定查询语句,并根据查询结果,确定是否需要进行二级查询(比如引入新的关键词或者添加新的论文集和期刊)。

确定关键词:

ProgramAnalysis,SoftwareAnalysis,DynamicProgramAnalysis,SoftwareTesting.

逻辑表达式:

(dynamicprogramanalysis)AND(methodORtool);

(softwareanalysisORprogramanalysis)AND(methodORtool);

(softwareanalysisORprogramanalysis)AND(softwaretesting);

dynamicprogramanalysis;

(softwareanalysis)OR(programanalysis);

运用的搜索引擎为Google,GoogleScholar,IEEEXplore;另外在四川大学图书馆IEEEDigitalLibrary,CNKI数据库,万方数据库,学位论文库、期刊EI和SCI、国际会议论文集中进行检索,检索年限为2004年(包括2004)至2013年。

文献资料收集来源一般包括了图书,期刊,报纸以及网络资源。

由于图书的出版周期较长并不能有效反应该学科领域的研究进展情况;网络资源丰富而且反应速度最快,但信息噪音最强;报纸资源的研究深度尚浅。

因此,本文选择以国内外期刊,会议等作为文献资料的来源。

通过检索,经过去重操作,得到相关论文1066篇。

2.1.3筛选方案

1)长文优于短文。

对于短文或者Poster,通过DBLP查询作者是否有相关的工作发表在其他地方,若有,则引用相对比较完整的论文,若没有,则将相应的短文或者Poster排除掉;

2)学位论文只要博士论文;

3)期刊只搜EI和SCI论文;

4)国际会议最好是国外国际会议,或主要成员是外国学者;

5)若论文的目的是提出一种形式化验证技术,则将该论文包含进来;若论文的目的不是提出一种形式化验证技术,而是基于已有的一种形式化验证技术提出了新的软件形式化验证技术和方法,则也将该论文包含进来;

6)虽然论文中没有涉及到具体的形式化验证技术,但提出了关于形式化验证技术新的方法论,同样也将这类论文包含进来;

7)同时对于内容重复的文章:

同一作者类似的文章发表在多个地方或者一篇综述很好地概括了一系列的相关研究,只选择了那些我们认为更具代表性的文章。

通过几轮筛选,最终确定下来的文献有108篇。

2.1.4数据提取和分析

对于检索到的有关程序分析的论文,我们对入选的论文根据提出的问题进行分类、分析和总结。

阅读过程中重点提取技术报告数据、专利、软件工具(网站、软件、描述性语言),应用案例、方法等。

2.1.5完成报告

在上述工作的基础上完成最终的报告.

2.2系统文献综述法

系统文献综述(systematicliteraturereview),简称系统综述,是主要在医学领域和社会学研究领域针对某一个研究性问题开展的基于文献的系统化综述方法,并于2004年引入软件工程领域.系统文献综述的过程包含3个主要的阶段:

•制定综述方案

主要进行综述需求分析,明确综述的目的,设计开展综述的规程,以指导后期的文献收集等工作;

•开展综述

根据综述方案预定的目标,按照综述步骤进行文献收集,主要工作包括确定主要的文献来源、确定收录标准、实现文献质量评价、开展数据抽取与综合;

•形成综述报告

对于综述进行总结.

图-系统文献综述法框架图

如上图,系统文献综述法细致划分可划分为四部分:

计划、选择、提取和结果,最后形成系统性的报告。

2.3文献计量法

文献计量法是一种以各种文献外部特征为研究对象的量化分析方法,以文献的量为研究对象,以文献文本为基本特征。

它是借助文献的各种特征数量,采用数学与统计学方法来描述、评价和预测科学技术的现状与发展趋势的图书情报学分支学科[2]。

下面通过几个方面对它进行介绍:

1)性质上:

文献计量分析法的特征在于其输出量必定是量化信息内容,是一种基于数学和统计学的定量分析方法。

2)方法论基础上:

文献计量法是以数学和统计学方法论为基础,在其应用过程中再利用推理和比较的方法对文献的分布趋势进行预测。

3)研究对象上:

文献计量法研究的对象主要是文献的外部形式特征,只适用于有实体形态的科学文献,比如具有著者、引文、词汇等文献特征的部分。

4)应用领域上:

文献计量法是图书馆学、情报学的特殊研究方法,主要用于科学文献的研究,对各门学科都使用。

在发展的几十年中,文献计量法的应用领域不断拓宽,其内容包括作者分布规律、文献分散增长规律、引文分析等。

通过引文分析,了解学科发展动态;在学科核心期刊测定中的应用,通过统计分析确定核心期刊的范围;在图书情报系统管理领域等情报探索系统研究中也得到广泛应用。

5)研究的侧重点:

它侧重于分析文献形式特征的“量”,它从定量的角度分析文献规律,知识间接反映内容的相关关系。

研究步骤:

确定研究范围,抽取样本,界定分析单元,对分析单元做量化统计,最后根据统计结果建立反映其趋势变化的规律性结论。

图-文献计量法研究步骤

3.文献计量分析

为了观察整个程序分析领域的研究情况,于是此文献计量分析的样本数据不仅包括了程序分析技术中的动态分析,同时也囊括了静态程序分析相关文献。

3.1年限分析

对采集到的论文的年份,数量特征进行统计分析,可以在一定程度上根据文献的增长情况得到近10年间关于“程序分析技术”研究的总体研究水平和发展速度,如图1所示:

图1程序分析研究论文数量变化

从图1中可以看出自2004年以来关于程序分析技术的研究文献数量大致呈现上升趋势,2004至2007关于此项研究的文献相对比较少,数量波动不是很大,2008年数量相比2007年产生了骤变,2009至2012文献数量维持着相对较高的水平,并且在2011年达到最高值,而2013数量相对减少。

3.2期刊分布

论文的期刊分布和载文比可以在一定程度上反映出一段时期内该领域研究的成熟度。

因此,对程序分析研究论文的期刊分布和载文比进行统计分析可知,自2004年以来,共有317种期刊刊载了相关的论文刊载程序分析研究论文的期刊数量呈现逐年增长的趋势,刊载种数的增加,说明研究涉及的领域越来越多,分布更加广泛。

图2程序分析研究论文期刊分布

从图2可以看出,刊载程序分析研究论文的期刊种数从2004年到2010年逐年增加,2011有所下降,而2012年,急剧增加,2013年又回到平稳状态。

3.3载文比分析

图3程序分析研究论文载文比情况

从载文比(该时段论文总数/该时段的期刊总数)来看,除了2011年载文比达到3.5以外,其他年度载文比斗小于3,特别在2012年,达到最低0.66,这表明程序分析研究论文还没有向一些特定的期刊集中,研究文献在期刊分布上还比较分散,该研究的发展还不够成熟。

3.4期刊类型分布

对刊载论文的期刊类型分布进行分析,可以了解到软件分析研究的主要集中在哪些类型的期刊,从另外一个方面也能看到该研究领域发展到了哪一个程度。

我们对搜集到的740篇论文进行期刊类型分布统计,如下图。

图4程序分析研究论文刊载期刊类型分布情况

根据图4可以看出,程序分析研究论文主要集中在ConferenceProceedings和JournalArticle上,其次是在Generic和Thesis上,ConferencePaper,Patent和WebPage上相对较少。

3.5作者分析

作者分布情况可以体现在该领域研究的广度以及深度。

作者数越多,说明该研究领域越广,某一个作者出现的频次越高,说明该作者在这个领域研究得比较深入。

通过对搜集到的论文进行作者分布统计(包含第一作者,第二作者,第三作者),共有2074位作者参与该领域的研究,对出现频次比较高的作者进行统计,列出了前18位作者,如下表。

表1软件分析研究论文作者分布情况表(前23位)

位次

作者

频次

1

肖庆

4

2

Amp

3

3

徐宝文

2

4

张路

2

5

Alzamil,Z.A

2

6

Wei,Hua

2

7

Bruda,S.D.

2

8

DeHalleus,P.

2

9

Farn,Wang

2

10

Ganai,M.K.

2

11

Jianguo,Chen

2

12

Jie,Zhang

2

13

Kroening,D.

2

14

Li,J.J.

2

15

LingDong

2

16

Nail,R

2

17

Tillmann,N.

2

18

Zhiping,Shi

2

19

梅宏

2

20

Landwehr,J.

2

21

赵建华

2

22

ValeriyVyatkin

2

23

姜淑娟

2

3.6关键词分析

词频分析法师利用能够揭示或表达文献核心内容的关键词或主题词在某一研究领域文献中出现的频次高低来确定该领域研究热点和发展动向的文献计量方法。

为了更客观地对软件分析研究领域的研究热点进行分析,我们在搜集到的740篇论文中进行关键词统计分析。

我们共获得6187个关键词,对这些关键词进行频度统计,按照频次高低排序所得的前31位高频词的统计结果如表2所示。

表2软件分析研究论文词频统计情况(前31位)

位次

关键词

词频

1

Formalverification

26

2

SoftwaretestingProgramtesting

196

3

Programtesting

196

4

Modelchecking

120

5

Softwareengineering

88

6

Software

87

7

Formalspecification

71

8

Systemtesting

68

9

Computerscience

67

10

Softwarequality

64

11

Programdiagnostics

63

12

Programverification

62

13

Analyticalmodels

52

14

Computationalmodeling

49

15

testing

49

16

Applicationsoftware

49

17

Java

47

18

Softwaresystems

46

19

Programming

45

20

Programanalysis

43

21

Softwarereliability

40

22

Educationalinstitutions

38

23

Automata

37

24

Softwaretools

36

25

Automatictesting

34

26

Unifiedmodelinglanguage

34

27

Safety

30

28

Embeddedsystems

30

29

Algorithmdesignandanalysis

30

30

Programdebugging

29

31

Performanceanalysis

29

统计结果显示,程序分析研究在形式化验证,软件测试,程序测试,模型检测,软件工程等方面研究比较突出。

软件分析领域的研究主要集中在软件模型,软件测试,程序分析上。

4.动态程序分析

4.1动态程序分析方法

4.1.1错误定位

为了保证软件开发的质量,工业界在软件测试阶段投入了大量的人力物力,其中最耗时代价最昂贵的任务之一就是调试过程,这是指对程序错误进行定位和修正的过程,而错误定位又是软件调试过程中最耗时和困难的一步。

所以,错误定位过程中的任何改进都可以在一定程度上降低调试成本。

经过多年的研究发展,在软件领域出现了很多检测程序缺陷的技术,本文主要讨论的是基于实际执行的动态定位技术。

该技术通过对源程序、测试结果以及各种程序行为特征信息的计算分析,给出造成故障的软件缺陷在源代码中的可能位置,辅助开发人员进行程序错误的定位和修改。

经过研究者们的探索,按照使用和操纵的程序执行信息的不同,目前的错误定位方法该技术可以分为3类:

基于行为特征对比的方法,基于程序状态修改的方法和基于程序依赖关系的方法[3]。

4.1.1.1基于行为特征对比的方法

程序行为特征同时也被称作程序光谱,是程序执行的统计信息。

经过Reps,Harrold等人的实验研究,程序出现异常的行为特征不一定表示代码存在缺陷,但错误的程序运行往往会表现出异常的行为特征。

基于行为特征对比的方法假设失败的测试执行会表现出异常的程序行为特征,那么成功执行和失败执行中的行为特征的差异就可以用于指导错误定位。

其工作流程如下:

首先,根据收集信息类型的需要,对源代码进行插桩并执行程序,收集执行信息。

其次,判断每个测试用例的执行结果。

接着,解析执行信息,得到执行行为特征。

然后,根据给定的模型,建模程序实体的怀疑度(可能出错的程度)。

最后,以程序实体排名的方式给出定位结果,将各个程序实体按照怀疑度大小从大到小排列,供开发人员查看[3]。

目前,按照使用的行为特征信息的种类和策略,大致可以分为5类:

基于语句或基本块,基于谓词,基于方法,基于定义使用对或信息流以及行为特征信息精炼的方法。

1)基于语句或基本块

2003年,Renieres和Reiss提出NNQ(NearestNeighborQueries)方法,假设存在一个失败的执行和很多成功的执行,然后根据距离准则挑选出一个程序光谱和失败运行最相似的成功运行(即失败执行的最近邻居),进而比较它们光谱的不同之处以分离软件错误。

与NNQ不同,Jones和Harrold提出的Tarantula法,认为只要是主要被失败用例执行的程序实体就值得被怀疑,同时,它也能容忍出错的程序实体偶尔被成功用例执行。

他们使用常用的信息来辅助错误定位,包括每个测试用例的执行结果,程序实体(语句,分支或函数等)被每个测试用例覆盖的信息以及程序的源代码。

对于程序实体e,它的怀疑度计算公式为:

其中,failed(e)和passed(e)分别表示失败用例和通过用例执行程序实体e的个数,|

|和|

表示测试组件中所有失败用例和通过用例的个数。

e的怀疑度取值范围从0到1,数值越大,出错的可能性越大。

开发人员可以按照怀疑度从大到小的顺序审查源代码。

不同于NNQ和Tarantula这些基于直观或启发式的计算方法,Wong等人提出了一个定义良好的统计方法Croaatab.它利用覆盖信息和测试结果为每条可执行语句w构建一个交叉表,进而计算卡方统计量和列联相关系数M(w)。

语句w的怀疑度定义如下:

然后,Hao等人提出应该考虑测试用例的相似性,并消除相似的测试用例对于定位结果的影响,于是提出了一种名为SAFL(SimilarityAwareFaultLocalization)的方法。

最后,Naish等人总结了30多种基于语句的定位方法,首先构造了一段名为ITE2(If-Then-Else-2)的程序,然后在这个程序中讨论各种情形。

这个程序可以用于刻画错误定位中的两种重要场景:

存在“噪声”和信号“微弱”。

基于在ITE2代码模型上的分析,他们提出了两种Optimalmetric,语句s的怀疑度定义如下:

Yingqi等人结合程序切片和贝叶斯方法来实现错误定位[4]。

首先,我们根据切片的标准执行动态切片,然后根据贝叶斯理论计算后验概率。

最后,我们把后验概率作为语句的怀疑程度按照从大到小的顺序进行排列。

此方法被应用于6个开源项目,通过实验,此方法在一定程度上可以提高错误定位的精确度。

统计错误定位技术通过执行大量的测试用例来预测程序错误的位置,相关研究表明,通过测试用例数量和失败测试用例数量之间失衡的程度可能会降低这种技术的有效性,然而,在实践中失败的测试用例往往小于通过的测试用例。

于是Yichao等人提出了一种策略[5],通过克隆失败测试用例适当的数量以达到通过测试用例的数量,最终产生平衡的测试组件。

分析表明,通过开展克隆两个具有代表性错误定位技术的有效性可以在一定条件下得到改善。

随着研究的发展,很多研究者开始探究多故障检测技术。

Cheng,Gong等人提出了一种有效的机制用于检测多个故障[6],当一个故障被检测到时,我们用它来解释我们观察到的故障,同时更新指标(在检测可疑序列时的一种准则),以判断在程序中是否存留其他故障。

实验证明这个方法不仅提高了单故障定位器的效率,同时在很大程度上避免了放弃单故障检测器而开发多故障检测器时的无效的工作与努力。

针对动态程序切片,Hofer等人提出了一种技术[7],可以减少包含在动态切片中的语句数目,这种技术是基于约束的计算,并且允许从不太可能是错误的根本原因的切片中移除语句。

实验结果表明,在有关切片中得到的片段的数量,平均降幅超过28%。

由于测试覆盖信息不能识别那些程序实体,而这些实体的执行影响了输出,于是便削弱了实体之间的相关性。

Yan,Lei等人为解决这个问题[8],提出了一项新的统计故障定位技术。

该统计方法是利用一组测试运行的程序切片来捕捉在输出结果中程序实体执行的影响,并且利用统计分析来衡量程序实体故障的可疑度。

此外,他们还提出了一种近似后向动态切片的新切片方法,以此来平衡切片的尺寸和精度,并将此切片方法应用于统计方法。

实验表明,在两个标准的基准测试下,我们的统计方法明显优于其他8个具有代表性的故障定位方法。

2)基于谓词

Liblit和他的同事提出了CBI(CooperativeBugIsolation)技术,用于定位已部署软件中的错误。

基本思想是搜集用户在使用软件过程中产生的执行信息,进而通过分析这些数据将软件缺陷分离出来。

然后,在搜集这些执行信息的同时,会对用户使用的软件性能有一定的影响,为了解决这个问题,Liblite等人通过在源代码上的变换,使用稀疏的随机抽样,较好地控制了客户端的性能并返回执行时的摘要信息。

尽管CBI技术能够从广泛的系统中识别出一些错误,但它只考虑了那些在失败执行中取值为真的谓词,而对于一个总是取值为真的谓词,CMI技术就丧失了它的判断能力。

Liu等人对谓词在成功执行和失败执行中的取值模式进行建模,然后基于统计学中假设检验的原理,量化每个谓词的错误相关性,建立了SOBER

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1