论文部分内容阅读
软件系统初次开发完成后就会进入长期的软件维护和演化阶段。此外,越来越多的软件项目都采用了增量和迭代式的软件开发方法,使得软件维护进一步成为一种伴随开发活动的持续性过程。统计数据表明某些软件项目的维护成本可占到整个软件生存周期成本的70%以上。为了完成各种软件维护任务,例如纠正需求实现中的错误、改进已有的功能实现方式、或扩展新的功能特性,开发人员经常需要先确定用户可见的需求特征与代码的对应关系。这种确定源代码中与给定需求特征相关的程序元素的过程称为特征定位。近些年来,软件工程领域有很多针对特征定位的研究工作,形成了一系列基于信息检索、静态分析和动态分析的自动化方法和工具。然而,这些研究工作缺少对于开发人员在特征定位过程中的信息探索和认知过程的理解,所提出的方法大多将特征定位过程看作“特征查询->结果列表”的一次性过程。我们的经验研究表明,特征定位是一种以人为中心、知识密集型的信息探索过程。在此过程中,开发人员通过一种迭代化的方式不断获得信息反馈,加深对于问题的认识的同时也不断调整自身的技术策略。为此,本文通过针对软件开发人员特征定位行为的经验研究,深入认识开发人员特征定位过程中的主要阶段、策略选择和基本动作,并在此基础上开发新的交互式特征定位技术,从而更好地支持开发人员的特征定位过程。本文首先提出了一个包括阶段、模式和动作三个层次的特征定位过程概念框架,并以此为基础开展了一个面向软件开发人员特征定位过程的经验研究。该研究首先选择了一组经验丰富的开发人员,布置给他们一系列特征定位任务并记录了他们完成任务的整个过程。通过屏幕录像分析、调研和访谈等手段,我们识别出了基本的特征定位过程阶段、发现了一系列基本的特征定位动作,并针对查找入口点和扩展这两个主要阶段总结出了一系列体现不同特征定位策略的过程模式。针对该过程模型的验证性实验表明,包含过程阶段、模式和动作三个层次的特征定位过程模型及相关知识可以有效地帮助开发人员提高特征定位任务的效率和质量。除此之外,我们还对影响开发人员特征定位策略选择的外部因素进行了研究。针对开发人员执行特征定位任务时难于构造准确的特征查询并确定候选结果与特征之间相关性的问题,本文提出了一种多刻面、交互式的特征定位方法。该方法通过一种迭代和交互式的方式支持开发人员的特征定位过程。该方法在开发人员给定的初始查询(如一组关键字)基础上,自动地从候选程序元素中抽取和挖掘多组刻面分类信息,并对候选结果进行分组、排序和过滤。在此基础上,开发人员可以通过一种交互、迭代的方式不断精化和调整原有的查询方案,从而得到满意的结果。基于该方法,我们实现了一个基于Web的特征定位工具MFIE。实验研究表明,与使用Eclipse开发环境的开发人员相比,使用MFIE的开发人员的特征定位效率和质量都有了显著提高。针对开发人员在获取初始的特征定位结果后扩展相关的程序元素的需要,本文进一步提出了一种增量和交互式的扩展推荐方法。该方法能够根据相关程序元素集合的变化动态推荐可能相关的扩展程序元素列表。基于该方法,我们实现了一个Eclipse插件工具RecFL,并通过实验研究确认了工具的有效性。综上所述,本文针对开发人员的特征定位过程进行了经验研究,提出了一套覆盖过程阶段、模式和动作三个层次的特征定位过程模型,并验证了该过程模型作为一种特征定位知识对于改进开发人员特征定位过程的有效性。在此基础上,本文还提出了一种多刻面、交互式特征定位方法和一种增量、交互式的扩展推荐方法,进一步为开发人员的特征定位过程提供了改进的方法和工具支持。