-1-
中国科技论文在线
软件资源信息挖掘在软件动态进化中的应用
刘俊
北京邮电大学计算机学院,北京(100876)
摘 要:本文引入了软件资源信息挖掘的概念,对其进行理论分析,并以应用于软件动态进
化为目的对 Java 应用软件进行资源信息挖掘。本文以基于 JAVA 平台的应用系统为标准对
系统中类之间的依赖关系进行资源信息挖掘,并以系统中类的依赖关系为基础进行系统模块
的划分并作用于软件动态进化中,使得软件动态进化可以按模块独立进行。
关键词:软件动态进化;软件资源信息挖掘;树;有向图;模块划分
中图分类号:TP32
1. 引言
随着现代软件功能越来越强大,其结构也变得十分复杂,而目前没有一个稍具规模的软
件能够实现一次性的完全开发,每个软件系统在投人使用后都要不断地改进和完善,对许多
软件的一系列调查表明,软件进化和维护的费用占到整个软件生命周期总费用的40%到90%
之间[1]。而目前对于一个已经上线的软件系统,如果对其进行更新必须停止服务器的运行,
并对更新后的软件系统重新编译发布并进行部署,这必然会导致软件系统的服务在一定时间
内处于停滞状态,从而会影响到用户的使用,对于拥有大量用户的业务系统来说,如空中交
通管制系统、全球性的金融交易系统、工业控制系统、网络服务系统等,通过停止、更新和
重启来实现维护和进化将导致不可接受的延迟、代价和危险,并造成大量的经济损失[2]。
对于一个需要动态进化的软件系统来说,软件资源本身的信息极为重要,而对于一个规
模较大的软件系统,在开发阶段往往存在设计文档不够详细,设计文档与代码不同步,以及
对文档不够重视而导致文档丢失等现象,即使分析其源代码,重构其设计结构也由于代码量
巨大而导致相当大的工作量,目前的一些UML工具,虽然能根据代码逆向生成UML类图,
但结果过于笼统,太不精确,无法获取各个类之间的依赖关系,这些现象都直接导致了软件
系统资源信息不足而阻碍了动态进化过程的实施[3]。因此,设计一个可以挖掘现有软件资源
信息的工具用于在软件系统的动态进化中产生其所需要的软件资源信息是十分必要的。
2. 研究现状
目前,很多大的软件系统中存在一些潜在的、没有文本记录的依赖关系。这些关系正是
一个大的软件系统最复杂的部分 ,也是维护系统耗费成本最高的一个问题。鉴于此,很多学
者致力于软件关联修改的数据挖掘方法研究,而且这种关联修改的研究已涉及到软件代码的
不同层次,包括模块级[7]、文件级[8]、类的级别[9]、方法的级别[10]甚至代码行级别[11]。
目前,这些关联研究的应用主要有:提供系统关联修改建议,给出最直接、最重要的相
关修改的推荐;避免不完全的修改,给出所有可能需要修改的建议,包括不同格式的其他文
件,如 HTML 文件的相应修改;帮助新的开发人员迅速了解软件系统,为软件项目的修改
和改进方案提供建议[6]等。
3. 软件资源信息挖掘及软件动态进化理论
软件动态进化
软件进化(Software Evolution)是指在软件系统的生命周期内软件维护和软件更新的行
-2-
中国科技论文在线
为和过程[4]。在现代软件系统的生命周期内,进化是一项贯穿始终的活动,系统需求改变、
功能实现增强、新功能加入、软件体系结构改变、软件缺陷修复、运行环境改变无不要求软
件系统具有较强的进化能力,能够快速适应改变,减少软件维护的代价。
软件进化可基本上分为两种:静态进化和动态进化[2]。
静态进化(Static Evolution)是指在停机的状态下的进化,其优点是不用考虑运行状态
的迁移,同时也没有活动时的进程需要处理。然而停止一个应用程序就意味着要中断它提供
的服务,造成软件暂时失效,目前,在软件进化技术上静态进化使用较多。
动态进化(Dynamic Evolution)是指软件在执行期间的软件进化,但由于涉及状态迁徙
等问题,在技术上比静态进化更难处理。动态进化是目前研究较多但还没有成熟的理论技术
的一种进化形式,是最复杂同时也是最有实际意义的一种进化形式,它使得软件在运行过程
中可以根据应用需求和环境变化,动态地进行软件的配置维护和更新,其表现形态包括系统
元素的可变性、结构关系的可调节性和结构形态的动态可配置性。软件的动态进化特性对于
适应未来软件发展的开放性、动态性具有重要意义。
软件资源信息挖掘
目前,很多大的软件开发组织、软件项目均建立了集合软件开发过程所有数据的软件资
源信息库,但大部分软件资源信息库仅用于软件项目的维护以及缺陷状态的跟踪等。20世纪
90年代以来,许多软件从业者和研究人员逐渐意识到,软件资源信息库中包含许多丰富的、隐
藏的信息,于是开始采用数据挖掘的方法理解这些潜在的信息。近年来,这方面的研究得到了
更多关注。从2004 年的第26 届IEEE 软件工程国际会议( IEEE International Conference on
Software Engineering, ICSE)开始,每届均有一个软件资源信息库挖掘的会议。在这些会议上讨
论了采用数据挖掘方法深入理解软件资源信息库的多个方面,如软件过程建模、软件开发进
化和模式的理解、软件缺陷的分析、软件系统关联修改、软件模块复用等[5]。
软件资源信息库是软件开发过程中所有相关数据的总和,通常包括以下数据[6]:
z 项目开发过程数据,包括项目开发的里程碑、任务细化、资源等信息。
z 源代码数据,如项目开发的源代码以及版本修改过程。
z 项目开发的相关文档,如需求文档、设计文档、测试相关文档等。
z 项目开发人员的交流历史信息,如e2mail存档、论坛交流历史记录等。
z 缺陷跟踪信息,包括项目开发过程中缺陷状态、类型、修改历史等。
软件系统从开发、运行、维护到遗弃始终在不断变化。对软件进化过程的理解有助于了
解软件的开发质量、程序员维护工作以及软件系统的改进。通过不同层面的软件资源信息挖
掘可以更加有益于理解软件系统进化的演进过程。
本文将软件资源信息挖掘应用于软件动态进化的过程中主要是基于面向软件源代码数
据部分的信息挖掘,并将软件逆向工程技术及粗粒度的软件切片技术作为软件资源信息挖掘
的实现手段,通过挖掘软件自身的信息及源代码的信息获取软件系统中程序的依赖关系并进
行软件动态进化过程中的模块划分,进而了解到软件的架构信息。
4. 基于 JAVA系统之间依赖关系挖掘生成策略
本文基于 JAVA系统对系统中类之间的依赖关系挖掘方案提供了两种解决方案:
1) 采用树形数据结构生成系统依赖关系图
生成算法:树形结构系统依赖关系图将每个类看作一个树节点,采用递归方法对每
-3-
中国科技论文在线
个节点进行遍历,树中可以存在多个同样的节点,如果检索到系统的类关系依赖子
节点就将其子节点添加到该节点下,直到对每个类节点生成到叶子节点,生成系统
的依赖关系树形结构图,其示例结构如图所示:
图 1 系统依赖关系树形结构图
2) 采用有向图数据结构生成系统依赖关系图
生成算法:有向图系统依赖关系图将每个类看作一个图节点,采用递归的方法对每
个节点进行遍历,图中每个类节点只出现一次,每次对节点进行子节点的遍历时需
要判断其子节点是否已经存在,若存在则直接指向其子节点,若不存在子节点则进
行子节点添加,直到遍历到每个类并生成完整的依赖关系有向图,与上述树结构相
对应的有向图结构示例如图所示:
顶层类1
中间类 中间类
中间类 中间类 中间类
中间类
底层类1
底层类2
底层类3
图 2 系统依赖关系有向图结构图
-4-
中国科技论文在线
5. 基于 JAVA系统的软件动态进化过程中模块挖掘策略
由于软件动态进化过程是系统的按步骤的在线进化,为了防止进化部分在动态进化过程
中对与其无关的部分产生影响以及在动态进化过程中防止大量的进化同时进行造成系统运
行效率低下而影响客户的正常访问,往往在软件动态进化的过程中按模块进行软件的动态进
化,而模块划分的原则则是不同的业务流程间各个模块尽量相互独立,过于庞大的业务流程
尽量分段进行。
按照以上的模块划分原则,本文以系统中类之间的依赖关系结构为基础,以系统中类之
间依赖关系的有向图结构作为研究对象,研究出了以下模块划分策略:
进行模块划分的标准是保持系统中类之间的依赖关系且经过划分的模块粒度既不能因
为依赖关系较复杂而过于庞大,同时也不能因粒度太小导致模块数量过多。故本文采用横向
切块及纵向切块结合的方式进行模块划分。横向切块即完全无依赖关系的图之间划分为两个
模块,纵向切块即有向图结构依赖关系的图节点中若存在入度大于 1的节点即将该节点与其
所有的父节点分离,与其为起点的子图独立成为一个模块,并形成该模块与其所有父节点所
在模块之间的依赖关系,依次递归。其过程如下图所示:
图 3 模块划分过程模拟图
-5-
中国科技论文在线
图 4 模块划分结构图
图 5 模块间依赖关系图
6. 系统实现过程
z 用户图形化接口界面:
图 6 用户图形化接口界面
-6-
中国科技论文在线
z 系统中生成的类的信息保存在 文件中,如图:
图 7 类的信息描述
z 系统中类的有向图依赖关系信息保存在 文件中,如图:
图 8 类的依赖关系有向图结构描述
-7-
中国科技论文在线
z 系统中类的树状图依赖关系信息保存在 文件中,如图:
图 9 类的依赖关系树状图结构描述
z 系统中模块划分后类的树状依赖关系信息保存在 文件中,如图:
图 10 系统中模块划分后类的树状依赖关系信息
-8-
中国科技论文在线
z 系统中模块间的依赖关系信息保存在 文件中,如图:
图 11 系统中模块划分后模块间依赖信息描述
7. 总结
本文目的在于尝试在传统的Ming Resource Repository[12]理论导向中引入软件资源信息
挖掘技术,并以软件逆向工程及软件切片作为信息挖掘的手段,同时将软件资源信息挖掘技
术应用于软件动态进化领域,将从软件中挖掘出的软件资源信息为软件动态进化过程服务。
经测试,本文中的生成实验结果准确无误,分别将类之间的有向图依赖关系结构和树形
依赖关系结构选择以 XML的形式体现出来,从视觉角度上看类之间的逻辑结构关系清晰,
易于构造结构关系,从编程角度上看,由于 XML的普遍适用性及易解析性,它可用多种编
程语言在软件动态进化的过程中很容易并准确的被解析,并将解析后的依赖关系使用于进化
过程中。
由于本文所提及的软件资源信息挖掘是国内一个较新的概念,与国外正处于研究的
Ming Resource Repository理论概念上虽有相似之处,但与其并不完全相同,故在该方面还没
有权威的、标准化的指导思想和方法论依据。本文在引进该概念的同时也结合软件动态进化
的实际需求进行了相关方面的资源信息挖掘将其投入到实际应用中。
本文所提及的软件资源信息挖掘这个概念在理论上仍然不够完善,需要在以后的研究中
更多的丰富其理论指导及实践过程。
-9-
中国科技论文在线
参考文献
[1] evolution:past, present and future[J].Information and software technology,1996,38:673-680
[2] 李长云,何频捷,李玉龙,软件动态演化技术,北京大学出版社,2007年 11月第 1版。
[3] 王玉英,陈平,方海燕,许人民,软件逆向工程的研究与发展,西安工程科技学院学报,第 20 卷第 3
期,2006年 6月
[4] 李玉龙,基于 J2EE的软件动态演化平台设计与实现,湖南工业大学硕士学位论文.
[5] Ahmed E. Hassan, The Road Ahead for Mining Software Repositories. Frontiers of Software Maintenance,
2008. FoSM . 28 2008-Oct. 4 2008 Page(s):48 - 57
[6] 白洁,李春平,面向软件开发信息库的数据挖掘综述,计算机应用研究,2008年 01期
[7] GALL H, HAJEK K, JAZAYER I M. Detection of logical coupling based on product release history [ C ]/
/Proc of I CS M. 1998: 190-198.
[8] BEVAN J,WHITEHEAD EJ . Identification of software instabilities[ C ] / /Proc of WCRE. Victoria: [s n.] ,
2003: 134-145.
[9] GALL H, JAZAYER IM, KRAJEWSKI J. CVS release history data for detecting logical couplings [ C ] /
/Proc of I WPSE. 2003: 13-23.
[10] ZIMMERMANNT, BREUS, LINDIGC, et al . Mining additions of method calls in Argo UML [ C ] / /Proc of
MSR . New York: ACM Press,2006: 169-170.
[11] ZIMMERMANNT, KIMS, ZELLERA, et al . Mining version archives for co2 changed lines [ C ] / /Proc of
MSR. New York: ACM Press,2006: 72-75.
[12] Minneapolis. Fourth International Workshop on Mining Software Repositories,MSR 2007 (ICSE Workshop),
May 19-20,2007, Proceedings. IEEE Computer Society, 2007.
The Application of Mining Software Repository in Software
Dynamic Evolution
Liu Jun
Computer Department of Beijing University of Posts and Telecommunications, Beijing(100876)
Abstract
In this paper,a conception of Mining Software Repository is mentioned and analyzed, which at the
same time is applied in Software Dynamic Evolution. In this paper, based of JAVA application system,
we mining the resources of relations between classes in the system. Based of these relations we divided
the application system into some modules, which will be applied in Software Dynamic Evolution. In
this condition, the modules can evolve separately without effecting others in the process of Software
Dynamic Evolution.
Keywords: Software Dynamic Evolution; Software Resource Information Mining; Tree; Digraph;
Modules Dividing
作者简介:刘俊,男,1985 年生,北京邮电大学计算机专业硕士研究生,主要研究方向为
计算机应用。