日期:2023-01-24 阅读量:0次 所属栏目:计算机应用
摘要:特征定位技术对于解决维护任务中提出的面向特征的程序理解以具有很强的针对性和应用价值,对提高软件维护和程序理解的效率和准确性具有重要的意义。本文对基于程序静态与动态结构的特征定位技术进行了分析和研究。
关键词:特征定位;静态与动态;基于程序
1特征定位技术概述
对于确定的维护任务,纠正或完善系统的某个或某些功能,我们把这些系统待维护的功能称为特征。完成对特征的纠正或完善,往往只需要理解与这些特征所对应的那部分代码。因此特征定位是实现面向特征程序理解的重要支撑技术。
理解一个特征是如何执行的是程序理解中主要的问题。在真正的理解程序运行之前,必须先定位特征代码的执行位置。找出执行给定特征的源码通常是不容易的,例如现存的文档己经过时,或系统的初始设计师已经无法找到了。所以维护工作引入了不连贯的修改,这种改变引发了这个系统结构的退化。任何时候的修改使得对程序的理解更加难了。近年来,很多研究人员认为辅助纠正性、完善性维护任务的程序理解活动的一个关键步骤是进行特征定位。它将来自系统问题域的特征映射到系统实现域的相应代码实体。而完成对当前任务涉及特征的纠正或完善,往往只需要理解与这些特征所对应的那部分代码。因此特征定位是实现面向特征的程序理解的重要支撑技术。总体来讲,需要通过特征定位恢复出的特征与代码实体间的追踪关系分为基本追踪关系和导出追踪关系两大类。基本追踪关系是特征与代码实体间的相关关系,特征与实现该特征的所有代码实体间具有相关关系。WWW.lw881.com导出追踪关系是从特征与代码实体间的基本追踪关系推导得出。常见的导出追踪关系有特定关系和有关系。特征与代码实体间具有特定关系表明该代码实体参与实现该特征且不参与实现任何其它特征。特征与代码实体间具有共有关系表明该实体参与实现该特征且同时参与实现其它特征。获取一个特征的导出追踪关系通常还需要其它特征的基本追踪关系。
2基于程序静态结构的特征定位
2.1基于抽象系统依赖图的方法
基于抽象系统依赖图定位特定系统特征的方法以人对一个特定的系统特征的认识作为特征定位的出发点。在定位的过程中依赖辅助工具分析得到的程序抽象视图以及辅助工具所提供的对浏览、查找、推理程序信息等活动的支持。但具体而言,其在系统抽象、定位过程和工具支持三方面又具有自己的特点。
系统抽象。其方法在特征定位过程中利用了抽象系统依赖图。asdg建立在系统依赖图的基础之上,但忽略了更细粒度的语句信息。
针对c语言,抽象系统依赖图中的节点代表函数和全局变量,节点间的边代表函数间的调用关系、函数与全局变量之间以及全局变量间的数据流依赖关系。
特征定位过程。他们基于抽象系统依赖图的方法给出了理解人员和辅助工具在特征定位过程中的明确分工和细致的步骤。理解人员的任务是:确定初始节点;选择下一个要访问的节点;访问该节点;判断该节点是否与所调查的特征相关;检查是否己经得到了所有相关的节点。
工具支持。基于抽象系统依赖图的方法中,辅助工具的任务是:构造抽象系统依赖图并可视化展示;根据当前访问的系统依赖图中的节点和边更新查找图;根据确定下来的与当前特征相关的节点和边扩展查找图。
他们的工具中提出了一个查找图的概念,它记录了当前查找过的节点,因此除了提供抽象系统依赖图的可视化以外,还支持程序理解过程中理解步骤的回溯、撤销以及重做。
2.2借鉴地图信息可视化技术的方法
该方法的本质仍然是利用工具辅助人的查找和定位,只是它针对那些分散实现在程序全局内的系统特征,尤其针对大型系统,以基于grep的正规表达式匹配为起点,首先在源代码中强调显示出那些查找到的与当前特征相关的所有语句行。其次,借鉴了地图信息的可视化技术,处理这些大规模空间分散但逻辑相关的语句行信息,为分散实现的系统特征的查找、定位、变更提供了以下辅助:为那些与特定系统特征相关的代码实体建立索引从而对其进行控制;支持在单一视图内展示分散实现的系统特征的所有语句行; 提供视图的缩放以支持用户在不同粒度的程序信息间切换;对实现一个特定系统特征的代码实体的不同修改状态进行标记,从而更好地控制分散实现的代码的变更,并保证代码的一致性;折叠当前不需要的代码信息,使得在一个视图内观察到更多的有用信息。
2.3关注图方法