第
2 0
7
0 7
期
年 4月
计 算 机 技 术 与 发 展
COMPUTER TECHNOIYX~Y AND DEVEI,0PMENT
VoI_17 No.4
Apr. 2007
软件进化研究综述
惠长江,吴 江
(西北大学 信息科学与技术学院,陕西 西安 710127)
摘 要:软件进化是软件产品交付给客户之后所发生的一系列改进活动,是有目的地从早期版本来产生新版本的过程,是
软件工程中的一个重要领域。对软件进化进行了综述性的介绍,讨论了其定义、发展历程及主要研究内容,介绍了指导软
件进化的几种典型方法,分析了人们在软件进化过程中面临的一些挑战和问题。
关键词:软件工程;软件进化方法,元对象协议
中图分类号: l1.5 文献标识码 :A 文章编号 :1673—629X(2007)04—0196—05
Survey of Software Evolution
HUI Chang—jiang.WU Jiang
(College of Information Science and Technology,Northw~t University,Xi’an 710127,China)
Abstract:Software evolution is a set of activities which improve software once it is delivered to a customer.it is a process which generates
a nev~softw are version from an earlier version.and it is an important sub—area of software engineering.The authors give a survey to
software evolution.Firstly,describe the definition,development history and the main research contents of software evolution.Then de·
scribe $GI3fle software evolution methods.Lastly the paper discusses some challeng es in software evolution.
Key words:software engineering;software evolution method;meta o~eet protocol
0 引 言
随着现代软件功能越来越强大,其结构也变得十
分复杂,加之常常为了获得一些额外的功能且要容易
实现,人们就把一部分由硬件实现的功能转由软件实
现,这样大大增加了软件的复杂度,又因软件要受到各
方面不断变化的驱动(如客户要求的改变及外部环境
的改变等),使得没有一个稍具规模的软件能够实现一
次性的完全开发,每个软件系统在投入使用后都要不
断地改进和完善。对许多软件的一系列调查表明,软
件进化和维护的费用占到整个软件生命周期总费用的
40%到90%之问n J。因此,软件进化一直是软件工程
研究的热点之一。
目前,国内对软件进化的研究工作还偏少,还很少
把软件进化的思想融入到传统的软件开发过程中,对
软件进化还没有较好地进行系统研究。笔者对软件进
化的相关方面进行了简要的介绍。
收稿日期:2006—06—22
基金项目:陕西省科技攻关项目(2003k05一g32)
作者简介:惠长江(1981一),男,陕西延安人 ,硕士研究生,研究方向
为语义网技术、E—learning;吴 江,副教授,研究方向为知识库与数
据库、语义网、智能信息处理。
1 进化的定义
1.1 进化的一般定义
进化一词描述了在许多不同领域中(包括抽象和
具体的)值得人们关注的一类现象[引,它涉及到了一系
列的实体,如自然界物种、社会、概念、理论、思想等。
如果它们的某些属性随时间进行着不断前进的改变,
就可说它在进化。进化一般指的是在其领域中它们属
性或特性的前进性改变。所谓前进性改变是指在某种
意义上取得了进步,更有利于其自身的生存发展,而这
种进步或许会导致新属性的出现。一般来说,这种改
变是由适应单个实体或整个种类的需要来驱动的,目
的是维护和提高它们在一个变化的环境中的适应性,
因而这种改变可以使其更加有用和有意义,或在某种
意义上可以增加它们的价值,同时这种改变可以去除
那些没有价值和已经不适用的属性。
1.2 软件进化的定义 ‘
进化可以从许多不同的观点和领域来解释和研
究 J,在软件领域中,它通过对软件系统从最初的概念
到可操作实现的过程研究,通过对软件系统为了更好
地适应外部环境而进行相应的进化和扩展的研究,来
研究软件进化的方法和意义。进化在软件领域的观点
主要集中在进化的机制和工具上。
维普资讯
第 4期 惠长江等 :软件进化研究综述 ·l97·
软件进化关心的是软件产品交付给客户之后对其
的修改维护,是软件工程的一个子领域_l J。对软件进
化 目前没有统一的定义,以下为几种定义:
RISE (The Research Institute for Software Evolu—
tion)认为,一般的软件进化涉及到了软件交付给客户
之后所发生的所有活动。它定义软件进化为一系列的
活动,包括技术上和管理上的,这些活动能够确保软件
产品不断达到商业要求的目标,且是低成本高效的完
成。
Manny M.Lehman and Juan F.Ramil定义软件进
化为:有目的地从早期的可操作版本来产生新的软件
版本的所有规划设计活动。
LA.Belady的定义为 J:软件系统在它们的生命
周期里被维护和增强的动态行为。
Ned Chapin定义软件进化为:它是软件维护活动
和过程的一个运用,以及对这些活动和过程质量的保
证和管理。这些活动和过程是用来从一个早期的可运
行版本中来产生一个新的软件版本,这个新的软件必
须满足客户要求改变的功能或属性。
尽管软件进化的定义没有统一,但其实质都是一
样的,软件进化是一个过程,在这个过程中,程序要改
变其形态来适应市场的要求和从先前程序中继承而来
的特性。实现进化的最终目标是使软件能够更好地实
现客户的需求,更好地适应环境的改变,使软件的功能
不断地完善和增强。
2 软件进化的发展历程
在有计算机的早期,软件进化的行为主要就是给
新的应用编写新的程序。直到20世纪 60年代后期,
人们才开始意识到旧的软件系统不能只是简单地被淘
汰,软件需要被管理,软件的维护和进化是一个重要的
活动[ 。
现在人们普遍接受这个观点,反映现实世界应用
的经常使用的软件必须持续不断地被改进和增强来维
持人们对它的满意程度。这个观点第一次出现是被作
为软件进化的原则陈述出来的_5 J。对这个观点,早在
1968年在 Garmisch会议上就被公开讨论过。同时,
IBM公司于 1968年开始了对软件过程的研究_2 J,
Lehm an等人在 IBM中研究了规划设计过程,而用来
检验和建模持续变化过程的一份研究报告被应用到了
IBM的OS/360 操作系统上,这份报告是关于支持软
件版本实现的计划和管理的工具等系统进化的很简单
的模型。尽管这个模型豹发展是相对简单的,但对它
的研究促进了软件进化的发展及软件进化原则的出
现。、1971年,人们第一次把对软件过程看作是一个反
馈系统(feedback system)进行 了讨论 6 J。1979年开
始,人们把软件进行了SPE三种类型的分类_7 J,认为E
类型系统解决的问题、从事的应用都是现实世界中的,
是现实世界中模型的反映,并认为 E类型软件必须要
持续不断地进行 进化。从 1974年开始一直到 1996
年 J,人们逐渐形成并完善了软件进化的8个基本原
则,这些基本原则都是针对 E类型软件的。
人们早期对于进化研究的数据是从 IBM OS/360
— 370操作系统上获得的,随后是其他操作系统。早
期的研究主要集中在进化的行为上_2 J。Lehm an等人
在对软件进化的研究中认为进化是大型程序的内在特
性,每个特定系统都存在潜在的进化要求,这个现象可
以被系统地研究和建模,且这些相关的模型可被用来
预测未来系统的发展情况。
早期的研究在很大程度上不被计算机科学和软件
工程组织重视,尽管如此,这个现象逐渐吸引了其他人
的注意。由于程序的动态增长及其过程中各种因素的
影响,1989年,出现了软件不确定原则_6 J,随后是 1993
年 FEAST(Feedback,Evolution And S0ftwaTe Technolo—
gy)假设,该假设认为全球的E类型软件系统的进化
过程是一个自我稳定的系统,一个复杂的多循环、多层
次、多代理的反馈系统L9J9,该假设是以前研究的一个总
的反 映。在 1996年 和 2001年 期‘问,人 们 开展 了
FEAST/1和 FEAST/2工程_6 J,这些工程是依赖于
FEAST假设的,它研究了在E类型软件系统的进化和
软件过程的改进中反馈的作用和影响。直到现在,软
件进化一直被人们进行着广泛系统的研究。
3 主要的研究内容
现在,软件进化被人们广泛系统地研究着,人们对
它研究主要是从两个方面来进行的【10J。一个是把进
化看作名词,主要是研究进化的本质、原因、特征、结
果、影响、管理、控制等。如:什么是进化;为什么需要
进化;什么驱动、控制和限制着进化;进化对成本、时
间、进化过程的价值及产品的影响是什么等等的问题。
另一方面是作为动词来研究的,主要考虑的是进
化过程的实现。包括提供和改进的方法、过程、行为、
语言和工具等。比如:进化行为的目标是什么;为了达
到目标,哪些地方需要进化;采用什么方法和技术比较
合适;采用什么工具比较恰当;还需要哪些资源和技能
等等。上述两方面是相辅相成的。加强对进化特性、
管理和控制等的理解有利于过程管理和过程改进。对
进化原因、属性和影响的研究有助于更系统有效地管
理和制定计划,更有效地控制其过程和行为,这意味着
更加需要有效的方法和合理的工具。而反过来,对于
维普资讯
· 198· 计算机技术与发展 第 17卷
软件进化方法、语言、工具、过程等的研究,又进一步帮
助发现在软件进化理论和基础方面的缺陷和问题,有
利于弥补进化理论基础方面的不足,有利于理论和框
架的发展,并且有利于加速软件进化的过程。因此,软
件进化的两个方面必须共同前进。
4 软件进化的方法
目前,快速增长变化的需求使得大多数的软件变
得很难维护。然而,抛弃现在的系统而重新开始设计
完成系统在经济和时间上是不可行的。因此,就迫切
需要有效的方法来指导和控制它们的进化。但是,目
前有效而系统的进化方法还不是很多,以下为几个典
型的软件进化方法。
文献[11]提出了一种形式化的程序转换方法,该
方法是基于一个形式化的语言 WSL(wide spectrum
language)和方法的。这些转换在一个程序改变其形式
的时候可保持其语义不变。它们被应用于重构系统以
及抽象其中高层的表示。借助于一系列合适的转换,
可以使这些抽象的表示等同于代码。
WSL是这个方法的关键,因为所有的转换都用它
来表示,它必须能够方便地表示底层的一些命令语句
和高层的一些规范文档,且要能很容易地证明程序在
一 系列的转换中是否等价。利用该语言,可证明一个
程序是否正确地实现了一个规范要求,一个规范是否
正确地描述了一个程序的行为。该方法首先将给定的
一 个原程序P转换为一个用WSL语言表示的等价形
式P’。然后从P’开始,从一个预先被证明好的转换库
中选择一个转换,这将可能产生新的中间形式 S,然
后,接下来的一系列转换将使软件被转换成S2,sI,⋯,
S。最终的结果是要依赖于使用者需要的,比如希望
只是简单的重构还是需要提炼出一个抽象的规范说
明。
这个方法中有三种基本的操作:程序转换,细化和
抽象。转换操作可以修改一个程序变成一个不同的形
式,但却有着同样的外部行为;细化使一个程序的行为
更加被确定化;而抽象操作与细化相反。其更详细的
描述可参考文献[11]。
Maritta Heisel等人也提出了一种指导软件进化的
方法[12J,这个方法依赖于一系列在需求和代码之间由
映射连接的中间制品(artifact),这些中间制品及其连
接可以被构造和维护,它们可以用一个系统的方法来
指导软件的进化过程。
该方法把软件开发中的问题和解答领域分离开
来,问题领域包含了软件的需求,对软件的内部没有涉
及,解答领域包含了程序代码以及实现代码时所建立
的文档 。
问题领域概念是指在问题领域中有意义的一些概
念(如软件将要模拟和交流的环境等)。这些概念可以
在需求中出现,如一些对象等。但还包括一些需求中
没有的领域知识,它们是需求中有关概念的隐性信息,
但在规范说明的编写中非常有用。而解答领域概念是
在抽象代码和软件架构中使用的(如图1所示)。
a
. Q
芑
盘
一
0
言
图 1 Artifacts and mappings
规范说明是一个可实现的需求,但要避免过多的
实现细节,它描述了软件对外的接口,不考虑其内部工
作。它只允许使用在问题领域中有表示的概念,因此,
和纯粹的问题领域概念无直接关联。而抽象代码对于
理解源代码的原理很有帮助,且易于文档化。但达到
一 定的高度时,抽象代码就不再合适了,这就需要软件
构架来更好地描述其工作原理,软件构架主要考虑了
软件的内部结构和工作原理。同时,两个领域间必须
要有一个联系,至少两者概念可以互相转换,而共享的
概念则实现了将两者相匹配的概念合并的功能。但这
个匹配过程的关键是不同领域中概念的语义必须相匹
配。而那些没有匹配的概念则被划到各自的纯粹领域
中。
文献中描述了如何构建这些映射及一些相关确认
规则。一旦软件要改变的要求被确定下来,首先会影
响到问题领域的概念,使原有的概念作废或添加新的
进去,而这些受影响的概念可被概念和需求间的映射
所捕获。同样,需求的改变多少都会影响到共享概念,
有些是直接的,有些是通过纯粹问题领域概念来间接
影响的。这样逐层往下,所有的改变都可影响到代码
层。为了支持这种自顶向下的结构,标签被引入进来。
一 种改变标签和每个要改变的需求、概念和结构元素
相关联,每个改变标签包含了要必须修改的一些描述。
另一种违例标签被自动创建来检查是否在这个过程中
违反一些确认规则。在这个过程中,标签可用来决定
是否一个底层的中间制品要考虑被修改。根据改变标
签上的线索可以知道改变的过程,确认标签同样帮助
维普资讯
第 4期 惠长江等 :软件进化研究综述 · l99·
了这个过程。这样,就使整个软件进化过程从上到下
可以有条不紊地进行,这种方法有效地指导了软件进
化的过程。
唐亚哲等人提出了一种基于开放实现与反射的软
件进化模型 1 。传统的软件扩充机制,如基于源代码
的软件扩充和二次开发扩充等方法,要么信息量太大,
要么适用条件有限,都不能得到广泛的应用。开放实
现与反射技术从一种全新的角度和系统化、结构化的
方法为软件进化提供了新的方法和手段。与以往方法
相比,基于开放实现与反射技术的软件进化不仅为软
件进化和扩充提供了清晰的接口,且由于较好地实现
了分离原则,大大降低了软件扩充的风险和提高了软
件质量。
开放实现是与传统软件开发的“黑盒”原则相对
的,简单说,开放实现就是模块或对象不仅提供功能接
口,而且提供定制接口(就是配置接口,对模块或对象
内部具体实现的某些方面进行设置)。定制接口的提
供有各种方式,其中最主要的就是元对象协议 M0P
(Meta Object Protoco1)。MOP是反射技术术语,与元
对象相对的是基对象。它是正常系统应用对象,而元
对象是表达基对象如何实现的对象,即元对象控制基
对象的操作。通过该技术可实现软件运行时动态变
化。就是说系统不仅向用户提供功能,且提供用户进
行高级定制的接口,并在系统内部将这些定制接口与
系统功能进行因果关联。
该方法的研究基于这样一个认识:系统的扩充和
进化不是随意的,而是可以在相当程度上预见的。其
目的就是尽可能多地预见系统的进化,并用一种有组
织的结构化方法来实施这种进化。同时,方法引入了
“软件运行进化”的概念,并将其形式化定义为六元组
C。
C={源代码,二进制代码,编译器,解释器,用户
配置,二次开发 }
显然,六元组与软件生命周期的各个阶段有关。
在设计阶段就要明确系统的进化特点,比如哪些方面
容易变化等,最好能详细记录这些信息。在源代码设
计阶段,可以使用反射语言或定义元对象来支持进化。
这种方法有利于帮助进化。首先,它们强调分离
原则,将大量非功能与功能属性用不同的模块来表达,
它们的耦合关系由自动工具来实现,减少了程序员进
行程序阅读和修改的工作量,并提供可靠性。其次,该
技术将原本由程序逻辑隐含表达的系统内部实现细节
用元层对象表达,提供了基层程序员操纵程序实现细
节的高层接口。第三,该技术提供了一种结构化的方
法来实现软件动态扩充,使软件扩充的整个过程处于
严格控制之下,软件的修改和扩充不再是一种随意性
的活动,确保了软件进化的质量。
以上提到的三种支持进化的方法中,第一种只是
对程序进行了等价转换,其转换操作可以修改程序变
成不同的形式,但却有着同样的外部行为。因此,这种
方法对于添加新的功能和删除一些功能有些限制,这
种方法主要是集中在了代码层的进化上,有一定的局
限性。第二种方法从宏观的方面对软件过程进行了跟
踪和进化,从软件工程的角度对进化进行了控制,从最
初的需求改变直到最后的编码设计,都有效同步地控
制了进化的过程。最后一种方法,可以说是对软件的
进化进行了预处理,提前就分析了系统的进化特性,在
设计实现的时候提供了充分的用户定制接口,大大降
低了软件进化的难度。
5 面临的挑战和问题
尽管人们对软件进化及其过程进行了多年的研
究,也提出了一些相关的理论、方法和工具来支持软件
的进化。但是在软件进化的过程中,仍然面临一些挑
战和问题[1 4_。
(1)软件进化技术应该被提高到一个更高的抽象
层面上。目前,现存的支持进化的工具大都定位在程
序层面,对高层的支持很少。而反过来那些支持高层
设计和建模活动的工具对软件进化提供的支持又是很
少的(如 UML CASE工具)。这就存在一个问题,在设
计模型(包括文档,构架和规范说明等)和原代码之间
很难同步进化。一般应该使一个层面上的改变能反映
到其他层面,保持进化的同步性。
(2)软件开发过程应该支持软件进化。人们需要
研究如何将软件改变的思想结合到传统的软件开发过
程中。一个典型的方法是采用迭代的和增量的软件开
发过程。尽管有一些过程模型被认为对软件进化提供
了显性的支持(如 staged life—cycle mode1),但对其研
究还不是很深人,人们还是要研究哪种软件过程更适
合哪种类型的软件系统。
除了要对进化过程模型更好地理解和支持外,还
需要提高进化过程中管理的意识,像软件工程一样重
视管理,加强对计划、组织和控制软件进化过程的管
理。
(3)软件进化中需要更多的经验研究。在软件进
化领域中,存在对于更多经验研究的需要,有时为了获
得重要的统计结果,就需要一个足够大的有代表性的
案例集,这在工程领域中并不总是容易得到的,软件进
化为了获得这些数据是十分困难的。一个可行的办法
就是根据以往经验,对于要解决的这类问题进行案例
维普资讯
· 2o0· 计算机技术与发展 第 L7卷
学习,根据以往的经验提出一个进化的基准。
除了以上提到的外,在软件进化中还存在一些其
他问题,如随着软件的进化,如果没有主动的策略,软
件系统的质量会逐渐下降,这在很大程度上是由外部
的原因导致的(比如经济压力等)。再如一些技术方面
的问题等。因此,对于存在的这些问题,需要基本的关
于形式和理论的科学研究来帮助理解、分析和管理软
件的改变。需要语言、工具、方法和技术的发展来提供
对于在软件开发过程中软件改变的显性的支持,这是
需要人们做大量研究工作的。
6 结 论
尽管人们对于软件工程的研究使得软件的开发从
各个方面有了提高,但是,软件的质量仍然达不到人们
的期望,软件要不断面临新的需求和环境而改变。因
此,软件进化一直是人们研究的一个重要领域。笔者
简单介绍了软件进化的几个方面,由于进化及其过程
涉及到了很多的方面,因此,对其的研究必须覆盖各个
方面,如理论模型的研究、过程模型的进化、技术工具
方面的研究等。同时,人们应该使其在传统软件开发
过程中得到重视,对其提供各种显示的和直接的支持
研究。
参考文献:
[1] Bennett K.Software evolution:past,present and future[J].
Information and software technology,1996,38:673—680.
[2] LehmanMM,Ramil J F.Software evolution—Background,
theory,practice【J],Information Processing Letters,2003,
88(1/2):33—4_4.
(上接第 195页)
实例化(预计算并存储结果)Cube中的部分节点以提
高OLAP性能的解决方案。
利用决策树分类方法[ ]和Bayes分类器[ ]等数据
挖掘方法对数据仓库进行挖掘分析,得出有用的规则,
用来改进企业的软件过程、对正在实施的项目进行更
合理的评估和支持企业的决策分析。
3 结束语
问题跟踪工具为软件企业的软件开发过程中问题
的解决提供一个良好的平台,问题分析系统为企业提
供了有用的决策信息。问题跟踪和问题分析系统对提
高软件生产率和软件质量起到了一定积极有效的作
用。相信随着该系统的不断完善,高质量的分析型数
据的日积月累,问题分析系统将会发挥越来越大的作
[3] Letm~n M M,Ramil J F.Software evolution and software
evolution process[J].Annals of software Engineering,2002,
14:275—309.
[4] Belady L A,Lehnmn M M.A n~odel of large program devc1.
opment[J].IBMSystems Joum~,1976,15(1):225—252.
[5] Letmaan M M.Programs,Cities,Students,Linfits tO Growth?
[J].Imperial College of Science and Teclmology Inaugural
Lecture Series,1974,9:211—229.
[6] Letumn M M,Ranfil J F.Tutorial on Software Evolution:its
Source,Nature and Control[C]∥ICSM 2002.Canada:[S.
n.],2002.
[7] LehmanMM.Programs,lifecyclesandtheLawsofSoftware
Evolution[J].Proc.IEEE,1980,68(9):1060—1076.
[8] Letmaan M M.Laws of Software Evolution Revisited[C]∥
EWSPT.France:[S.n.],1996.
[9] Lelmaan M M.Feedback in the Software Evolution Process
[C]∥GSR Eleventh Annual Workshop on Software Evolu—
tion:Models and Metrics.Dublin:[S.n.],1994.
[10]LehmanMM.Ramil JF,KahenG.Evolution as aNoun and
Evolution aS aVerb[C]∥s()(E 2000Workshop onSoftware
and Organization Co— evolution.Imp.Co1.,London:【s.
n.],2000.
[11]WardM,BennettKH.FormalMethodstOAidtheEvolution
of Software[J].International jOL1/~ of software engineering
and knowledge engineering,1995,5(1):25—47.
[12]Heisel M,yon Schwiehow C.A method for guiding software
evolution[C]∥ The IASTED International Conference on
Software En~neering.Innsbruek,Austria:[s.n.],2004.
[13]唐亚哲,陈传峰,李增智.基于开放实现与反射的软件进化
模型[J].小型微型计算机系统,2003,24(11):1978—1981.
[14]Mena T.Challenges in Software Evolution[C]∥ECRIM—
ESFworkshopChaSE.Bem,Switzerland:[s.n.],2005.
用。
一 + -+ *——卜 一——卜-——卜 一+ -——卜 .-4--·
参考文献:
[1] Lonchamp J.AStructuredConceptualandTerminologicalFr-
ameworkforSoftwareProcessEn~neering[C]∥In2ndInter—
national Conference on Software Process(ICSP2).Berlin,
(、坨m珀ny:[5.n,],1993:41—53.
[2] Grimshaw A S.Easy—tO—Use objm —oriented paralld pro—
c~ing with Mentat[J].IEEE Computer,1993,26(5):39—
51.
[3] 于 波,赵 征,唐世渭.OLAP中的CUBE计算问题[J].
计算机应用,2003,23(1):1—3.
[4] Han Jiawei,Karnher M.数据挖掘:概念与技术[M].北京:
机械工业出版社,20o1:188—195.
[5] 边肇琪,张学工.模式识别[M].北京:清华大学出版社,
2002:9~43.
维普资讯