注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

lican8341的博客

霜剑如梦倚残翼,泊影难觅几何时!

 
 
 

日志

 
 

基于程序静态与动态结构的特征定位技术探析  

2015-06-29 22:17:19|  分类: 嫦娥飞天——中华 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
摘要:特征定位技术对于解决维护任务中提出的面向特征的程序理解以具有很强的针对性和应用价值,对提高软件维护和程序理解的效率和准确性具有重要的意义。本文对基于程序静态与动态结构的特征定位技术进行了分析和研究。 
  关键词:特征定位;静态与动态;基于程序 
   
  1特征定位技术概述 
  对于确定的维护任务,纠正或完善系统的某个或某些功能,我们把这些系统待维护的功能称为特征。完成对特征的纠正或完善,往往只需要理解与这些特征所对应的那部分代码。因此特征定位是实现面向特征程序理解的重要支撑技术。 
  理解一个特征是如何执行的是程序理解中主要的问题。在真正的理解程序运行之前,必须先定位特征代码的执行位置。找出执行给定特征的源码通常是不容易的,例如现存的文档己经过时,或系统的初始设计师已经无法找到了。所以维护工作引入了不连贯的修改,这种改变引发了这个系统结构的退化。任何时候的修改使得对程序的理解更加难了。近年来,很多研究人员认为辅助纠正性、完善性维护任务的程序理解活动的一个关键步骤是进行特征定位。它将来自系统问题域的特征映射到系统实现域的相应代码实体。而完成对当前任务涉及特征的纠正或完善,往往只需要理解与这些特征所对应的那部分代码。因此特征定位是实现面向特征的程序理解的重要支撑技术。总体来讲,需要通过特征定位恢复出的特征与代码实体间的追踪关系分为基本追踪关系和导出追踪关系两大类。基本追踪关系是特征与代码实体间的相关关系,特征与实现该特征的所有代码实体间具有相关关系。导出追踪关系是从特征与代码实体间的基本追踪关系推导得出。常见的导出追踪关系有特定关系和有关系。特征与代码实体间具有特定关系表明该代码实体参与实现该特征且不参与实现任何其它特征。特征与代码实体间具有共有关系表明该实体参与实现该特征且同时参与实现其它特征。获取一个特征的导出追踪关系通常还需要其它特征的基本追踪关系。 
  2基于程序静态结构的特征定位 
  2.1基于抽象系统依赖图的方法 
  基于抽象系统依赖图定位特定系统特征的方法以人对一个特定的系统特征的认识作为特征定位的出发点。在定位的过程中依赖辅助工具分析得到的程序抽象视图以及辅助工具所提供的对浏览、查找、推理程序信息等活动的支持。但具体而言,其在系统抽象、定位过程和工具支持三方面又具有自己的特点。 
  系统抽象。其方法在特征定位过程中利用了抽象系统依赖图。ASDG建立在系统依赖图的基础之上,但忽略了更细粒度的语句信息。 
  针对C语言,抽象系统依赖图中的节点代表函数和全局变量,节点间的边代表函数间的调用关系、函数与全局变量之间以及全局变量间的数据流依赖关系。 
  特征定位过程。他们基于抽象系统依赖图的方法给出了理解人员和辅助工具在特征定位过程中的明确分工和细致的步骤。理解人员的任务是:确定初始节点;选择下一个要访问的节点;访问该节点;判断该节点是否与所调查的特征相关;检查是否己经得到了所有相关的节点。
  工具支持。基于抽象系统依赖图的方法中,辅助工具的任务是:构造抽象系统依赖图并可视化展示;根据当前访问的系统依赖图中的节点和边更新查找图;根据确定下来的与当前特征相关的节点和边扩展查找图。 
  他们的工具中提出了一个查找图的概念,它记录了当前查找过的节点,因此除了提供抽象系统依赖图的可视化以外,还支持程序理解过程中理解步骤的回溯、撤销以及重做。 
  2.2借鉴地图信息可视化技术的方法 
  该方法的本质仍然是利用工具辅助人的查找和定位,只是它针对那些分散实现在程序全局内的系统特征,尤其针对大型系统,以基于Grep的正规表达式匹配为起点,首先在源代码中强调显示出那些查找到的与当前特征相关的所有语句行。其次,借鉴了地图信息的可视化技术,处理这些大规模空间分散但逻辑相关的语句行信息,为分散实现的系统特征的查找、定位、变更提供了以下辅助:为那些与特定系统特征相关的代码实体建立索引从而对其进行控制;支持在单一视图内展示分散实现的系统特征的所有语句行; 提供视图的缩放以支持用户在不同粒度的程序信息间切换;对实现一个特定系统特征的代码实体的不同修改状态进行标记,从而更好地控制分散实现的代码的变更,并保证代码的一致性;折叠当前不需要的代码信息,使得在一个视图内观察到更多的有用信息。
 2.3关注图方法 
  关注图的核心结构包括类、方法和属性,并刻画它们之间的调用、读取等关系。其方法中,关注图是程序模型的压缩子集,它并没有包含程序模型中涉及一个关注点的所有节点和边,那些能够根据关注图中已有信息准确地从程序模型中恢复出来的信息将被省略,如一个完全实现关注点的类,它的属性和方法肯定也是完全实现该关注点的,则关注图中只包含这个类,它的属性和方法是省略掉的。 
  关注图将代码中分散实现的关注点的信息集中地以图的形式表示出来,从而辅助支持对其定位以及进一步的变更管理。构造关注图的过程首先基于关键字匹配查找代码中与关注点相关的一个初始点,进而由人交互地对自动提取的结构化 
  程序模型进行分析,并以计算机辅助的方式构造最终的关注图,同时一获取关注图与源代码之间的追踪关系。 
  3基于程序动态结构的特征定位 
  基于动态剖面的特征定位方法依赖对系统的动态执行。它首先为所关注特征设计测试用例。然后通过执行这些测试用例建立特征与代码之间的关系,获取对特征的定位。 
  3.1软件搜索方法 
  软件搜索方法关注获取特征与代码实体间的特定追踪关系。该方法针对每个需要定位的系统特征设计两组测试用例,一组测试用例的执行将导致该特征被展示,另外一组测试用例的执行不会涉及这个系统特征。用执行第一组测试用例得到的动态剖面中包含的代码实体减去执行第二组测试用例得到的代码实体,即得到特定于该系统特征的代码部分。 
  3.2基于动态执行切片的方法 
  程序切片(Program Slice)技术是一种分析和理解软件程序的技术。软件人员在代码调试和软件测试过程中,常常会不自觉的应用这种技术。目前,程序切片已经发展成为一种比较成熟的技术,并出现了许多切片准则、切片算法和相应的软件工具。程序切片是一个可执行程序,是按照一定的准则从源程序中移去零条或多条语句来构造的。随着切片技术的发展,目前对于程序切片还有另外一种定义方法:由影响程序中某个兴趣点处变量值的所有语句和控制谓词组成的一个程序子集,该子集并不一定是一个可执行的程序段。从以上两种定义出发,实际上定义了两种程序切片,即静态切片和动态切片。切片技术从程序中去除不会影响感兴趣的变量语句,形成一个程序的子集,从而简化了程序,有利于故障的定位。 
  3.3基于形式化概念分析的方法 
  该方法不仅关注特征与代码实体间的基本追踪关系,其更为关注获取系统特征与代码之间的多种导出追踪关系。因此,即使只对某一个特征进行定位,此外,由于系统特征与测试用例之间的对应关系并不是简单的一一对应,依赖测试用例获取特征与代码之间的追踪关系还需要考虑特征与测试用例之间的二元关系。因此,首先对测试用例与代码实体间的二元关系进行形式化的概念分析,为其建立一个概念格结构并将其可视化。然后,结合测试用例与特征间的二元关系,交互地分析理解第一步建立的概念格结构,从而获取特征与代码实体间的多种追踪关系。由此可见,对于基于程序动态剖面的特征定位方法,同样需要具有对所要调查的具体特征的先验认识,否则无法设计恰当的测试用例。即便是在具有现成的测试用例的情况下,依然需要理解人员更进一步的工作。因为,为发现特征的错误而设计的测试用例对于定位这个特征可能并不总是完全合适的。而测试用例的自动生成技术通常更多地关注单元测试而不是针对特征的功能测试。可见,这类方法在某种程度上仍然存在对人的依赖,因此理解人员个人的专业水平会影响这类方法定位特征的效果。 
  评论这张
 
阅读(11)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017