




已阅读5页,还剩51页未读, 继续免费阅读
(计算机应用技术专业论文)基于merge的金融软件再工程.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浙江大学硕十学位论文 摘要 摘要 金融领域是软件技术应用的重点领域。信息技术对企业的运作,发展与管理 起着举足轻重的作用。由于金融领域使用i t 技术较早,企业存在着大量有一定 历史的软件系统,伴随着不断增加的业务逻辑,软件系统变得越来越难理解,维 护工作的成本居高不下。软件再工程把现有的系统转换到一种新的形式,以提高 软件的性能和质量,降低软件维护费用。本文提出了一种采用与其他系统m e r g e 的方法进行软件再工程的思想。 克隆代码给软件维护带来了很多麻烦。克隆检测帮助我们发现两个系统间的 克隆代码,除去这部分克隆代码,我们容易寻找出两个系统在代码上不一样的地 方,从而归纳出系统在功能上的差别,这对于理解原有软件系统以及后续开发和 维护都是很有帮助的。对于起源于同一份代码的两个系统,克隆代码的比例很高, 为了提升软件的可维护性,我们可以考虑把两个系统合并。一个系统内部也有一 定比例的克隆代码,这些都是潜在的再工程机会。已有的聚类算法可以用于提取 遗留系统的模块化信息。m e r g e 工作需要在目标系统找到与之匹配的模块,在功 能上把原有系统实现于对应模块。 本文介绍了软件系统m e r g e 的具体过程。这是软件再工程的一种方法。本文 还分析和讨论了软件m e r g e 过程中一些需要解决的问题,以及对今后研究工作的 一点思考。 关键词:再工程,软件维护,克隆检测,软件合并 浙江大学硕士学位论文abs仃act a b s t r a c t t h ef i n a n c i a lf i e l di st h ek e ya r e ao fs o f t w a r et e c h n o l o g ya p p l i c a t i o n i n f o r m a t i o n t e c h n o l o g yp l a y sad e c i s i v e r o l eo n e n t e r p r i s e s o p e r a t i o n ,d e v e l o p m e n ta n d m a n a g e m e n t a st h ef i n a n c i a lf i e l dh a sal o n gh i s t o r yo fu s i n gi tt e c h n o l o g y , t h e r ea r e l a r g en u m b e r so fs o f t - w a r es y s t e m s ,a n da l o n gw i t ht h ee v e r - i n c r e a s i n gb u s i n e s sl o g i c , s o f t w a r es y s t e m sb e c o m em o r ed i f f i c u l tt ou n d e r s t a n d ,a n dh i g h e rc o s tt om a i n t a i n s o f t w a r er e - e n g i n e e r i n gs w i t c h e st h ee x i s t i n gs y s t e mt oan e wf o r mo fs o f t w a r et o e n h a n c et h ep e r f o r m a n c ea n dq u a l i t y , r e d u c e ss o f t w a r em a i n t e n a n c ec o s t s t h i sp a p e r p r e s e n t sa ni d e ao fs o f t w a r er e e n g i n e e r i n gb ym e r g i n gw i t ho t h e rs y s t e m s c l o n ec o d ec a u s e ss o f t w a r em a i n t e n a n c eal o to ft r o u b l e c l o n ed e t e c t i o n h e l p st o f i n dt h ec l o n ec o d eb e t w e e nt w os y s t e m s e x c e p tf o rt h i sp a r to fc l o n ec o d e ,w et e n dt o f i n dt h ed i f f e r e n tc o d e so nt h et w os y s t e m s ,t h e ns u mu pt h ed i f f e r e n c eo nf u n c t i o n , w h i c hi s h e l p f u lt ou n d e r s t a n dt h eo r i g i n a ls o f t w a r e ,d e v e l o pa n dm a i n t a i nt h e f o l l o w - u p 、j v o r k t h e r ei sah i g hp e r c e n t a g eo fc l o n ec o d eb e t w e e nt w os y s t e m st h a t o r i g i nf r o mt h es a m ec o d e ,s ot h et w oc a nb em e r g e di n t oo n ei no r d e rt oi m p r o v et h e m a i n t a i n a b i l i t y c l o n ec o d ei no n es y s t e ma l s op r o v i d e so p p o r t u n i t i e sf o rp o t e n t i a l r e e n g i n e e r i n g t h ee x i s t i n gc l u s t e r i n ga l g o r i t h mc a nb eu s e dt oe x t r a c tt h el e g a c y s y s t e mo fm o d u l a ri n f o r m a t i o n m e r g es h o u l db ef o u n dam a t c h e dm o d u l ei nt h et a r g e t s y s t e m ,a n dr e a l i z et h ef u n c t i o n so ft h eo r i g i n a ls y s t e m t h i sp a p e ri n t r o d u c e st h es p e c i f i cm e r g i n gp r o c e s so fs o f t w a r es y s t e m s ,w h i c hi s am e t h o do fs o f t w a r er e e n g i n e e r i n g h e r ea l s oa n a l y z e sa n dd i s c u s s e ss o m ep r o b l e m s t h a ts h o u l db er e s o l v e d ,a n dp r o v i d e si d e a sa b o u tt h ef u t u r er e s e a r c hw o r k k e y w o r d s :r e e n g i n e e r i n g ,s o f t w a r em a i n t e n a n c e ,c l o n ed e t e c t i o n ,s o f t w a r e m e r g i n g 浙江人学硕十学位论文图目录 图目录 图1 1 软件再工程一般模型3 图1 2 决策矩阵4 图2 1 系统间关系8 图3 1f t m 与g t m c od e a l 类克隆检测结果1 6 图3 2f t m 与g t m c os e c u r i t y c a n c e l 类克隆检测结果1 7 图3 3f t ms e c u r i t y c a n c e l 类内部克隆检测结果1 8 图3 4 克隆代码片段一1 9 图3 5 克隆代码片段二2 0 图4 1 简单的m e r g e 表示2 3 图4 2s t r u c t u r a lm e r g i n g 的一个例子2 5 图4 3 聚类层次算法2 6 图4 4 层次算法结果树状图表示2 7 图4 5 凝聚算法得出的模块划分2 8 图4 6 模块匹配2 9 图4 7 模块划分的调整3 0 图4 8g t m 模块划分3 3 图4 9f t m 模块划分3 4 图5 1b a c k t o b a c k 测试4 4 i i i 浙江大学硕士学位论文 表目录 表目录 2 1f t mg t m 比较11 3 1f t m 与g t m c od e a l 类克隆检测结果1 6 3 2f t m 与g t m c os e c u r i t y c a n c e l 类克隆检测结果1 7 3 3f t ms e c u r i t y c a n c e l 类内部克隆检测结果1 9 4 1f t m 与g t m 模块匹配结果3 5 4 2f t m 模块功能调整3 6 4 3q t 与t m 功能点比较3 6 4 4 增加t m 功能3 7 4 5f t m a c c o u n t i n gs t a t u s 状态重构3 8 4 6 数据字典映射3 9 5 1 文档与实现冲突记录表4 2 i v 表表表表表表表表表表表 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其 他人已经发表或撰写过的研究成果,也不包含为获得浙江大学或其他教育机 构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献 均己在论文中作了明确的说明并表示谢意。 学位论文作者签名: 舌a 刍售之签字日期:可纠g 年莎月7 日 学位论文版权使用授权书 本学位论文作者完全了解浙江大学有关保留、使用学位论文的规定, 有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和 借阅。本人授权浙江大学可以将学位论文的全部或部分内容编入有关数据库 进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名:t i 寸龟尘支 签字日期:,砒年6 月1 2 7 日 导师签名: ( 签字嗍加强年己月) 日 浙江人学硕十学位论文第1 章绪论 第1 章绪论 1 1 课题来源及意义 经过几十年的发展,新开发软件产品的数量急剧增加,同时增加的是大量需 要维护的老系统。与软件开发相比,软件维护需要消耗更多的资源。由于文档缺 失,原有开发人员的流动以及年代久远,对原有系统的理解变得相当困难。系统 经常更新,开发人员在完成代码之后,往往没有及时去更新相应的文档,造成文 档与实现的不一致。软件企业人员流动频繁,新的开发人员往往没有深入理解系 统就已经担任开发工作,只能在代码级别上完成工作,很难与整个系统的设计协 调。同时,软件维护又相当重要,许多系统已经平稳使用多年并且经常进行更改 以适应新的需求,一旦停止对其维护将带来不利影响。 l e h m a n 认为,如果不认真改善系统结构,系统演化将最终导致系统没落【l 】。 随着系统的逐步退化,软件维护的成本越来越高,直至难以让人接受。抛弃老的 系统,重新开发一个新的系统是一个可选的方案,然而却面临着高成本以及较长 的开发周期,风险显而易见。事实上,虽然系统已经难以继续维护,然而仍然具 有一定的价值,如何发掘原有系统这种价值,并且利用于对系统的改造,是摆在 软件工程师面前的一个问题。软件再工程的出现使得我们有机会以一种低成本, 有计划且低风险的方式对系统进行改造,提高系统的性能及可维护性方面的质 量。 软件系统经常有大量重复代码,这些重复代码通常被称为克隆代码。克隆代 码存在于软件系统内部以及软件系统之间。克隆代码给软件维护带来了很大的困 难,在一个系统中发现的b u g ,也往往存在于另外一个系统;对一个系统进行的 更改,也往往需要应用于另外一个系统,软件维护的成本很高。把两个相似的系 统合并是解决代码克隆问题的一个可选方法,此外,可以采用重构消除软件系统 内部的克隆代码。克隆检测技术帮助开发人员发现软件系统之间的代码克隆问 题,给软件再工程提供重要的参考。 浙江大学硕士学位论文 第1 章绪论 1 2 软件再工程方法 1 2 1 软件再工程相关概念 c h i f o s k y 和c r o s s 给出了软件再工程相关的一些关键术语的定义2 】: 软件再工程( r e e n g i n e e r i n g ) 是为了以一种新的形式再开发而对整个系统进行 的分析和修改。 逆向工程( r e v e r s ee n g i n e e r i n g ) 是一个系统分析的过程,其目的是: 识别系统各组成部分及其相互关系; 以其他形式或在一个更高抽象层次上创建该系统的表达方式。 逆向系统是一个设计分析的过程,包含多个方面,文档重构,程序理解以及设 计发现。 重构( r e c o n s t r u c t i o n ) ,软件重构是在同一表达层次上,变更表达,保留系统外 部行为软件重构修改代码以使它适应未来的变化。 正向工程( f o r w a r de n g i n e e r i n g ) 是传统的从较高层次的抽象和逻辑,到具体 实现系统的过程正向工程需要有效重用原有代码。 文档重构( r e d o c u m e n t a t i o n ) ,文档重构是在同一抽象层创建或修改语意等价 的表述,表述的结果形式经常是一些视图以利于理解,如数据流图,控制流图。 一种被普遍接受的软件再工程模型如图1 1 所示【3 】 2 浙江大学硕士学位论文 第1 章绪论 遗留系统 图1 1 软件再工程一般模型 目标系统 从图1 1 中可以看到,系统被划分为概念模型,需求,设计和实现四个层次, 从上到下由抽象转为具体。整个再工程可以分为三个步骤:逆向工程是对一个已 有系统分析的过程,通过分析识别出系统中的模块以及它们之间的联系,在更高 层次上进行抽象,还原出原系统的设计与需求;迁移是在同一层次上,对原来的 设计实现进行重新设计的过程,将会对原有系统做优化简化;正向工程是根据逆 向工程的结果,在有效重用原来代码的基础上重新开发,从需求到实现完成整个 系统,这点类似于传统软件开发的瀑布模型。 软件再工程可以是基于以下三种考虑之一嗍: 封装( e n c a p s u l a t i o n ) 这种情况下封装的目的是再其他环境重用组件,可能只需要更改接口,对软 件的改动是最小的( 2 0 ) 风险和花费也比较小但是这种再工程并不能改变软 件的质量。 革新( r e n o v a t i o n ) 这种情况下再工程的目标是提升软件的质量以及降低复杂度,软件的维护成 本得以减少,日后对软件进行更改将会更加容易。中间使用一些重构的技术使代 码和软件的整体结构更加优化,简化软件结构,删除冗余代码。软件的更改比率 习一一一一 浙江大学硕上学位论文第1 章绪论 ( d e g r e eo fc h a n g e ) 将会在2 0 一5 0 。 移植( m i g r a t i o n ) 这种情况下是把整个已有系统移植到别的环境,可以是程序设计语言的改 变或数据库系统的改变,例如,从c + + 到j a v a ,从面向过程的程序设计语言( c 语 言) 到面向对象的程序设计语言( j a v a 等) 。 本文下面要讨论的f t m 系统再工程属于上面的第二种。 1 2 2 软件再工程评估 在设计和维护软什系统时,我们会不可避免地面临这样一个至关重要的选 择:是淘汰旧系统而完全用新系统来替换旧系统昵,还是对现有系统继续进行开 发昵? 决策者必须慎重考虑成本,风险,收益等因素,来决定是否对原有系统进 行再工程或者采用什么样的方式再工程。对此j a c o b s o n 等人提出一个经典决策矩 阵1 5 j ,如图所示,对于商业价值较高而系统可更改性较差的系统,适合进行软件 再工程。 系统可更改性 图1 2 决策矩阵 4 商业价值 浙江大学硕上学位论文第l 章绪论 1 2 3 现有系统业务逻辑提取 程序分片 首先提出程序分片概念的是w - e i s 一6 | ,程序分片被定义为按照分片标准 ( s l i c i n gc r i t e r i o n ) 保留相同输出结果的程序子集,分片标准是c = ( s ,v ) ,s 是程 序,v 表示某一个变量。程序分片的结果就是在程序s 里面选出影响变量v 的子 程序。程序分片可以是静态( s t a t i cs l i c i n g ) ,动态( d y n a m i cs l i c i n g ) 或者条件的 ( c o n d i t i o n a ls l i c i n g ) 【7 1 。动态分片是对于某些特定输入而言,比静态分片产生的 程序集要小的多。而条件分片是对于某些范围的输入而言,其产生的程序集界于 静态分片和动态分片之间。 主域变量识别 业务逻辑的提取涉及到主域变量的理解,很多业务逻辑对应着一些主域变 量,分析主域变量的依赖关系能得到很多业务逻辑。一些工作8 删设计到主域变 量提取的研究,在 8 中提出了选取主域变量的启发式规则:系统的输入及输出 作为主域变量,函数的输入输出作为主域变量。在 9 中提出了一种通过数据流 识别和程序拆模( s t r i p p i n g ) 来提取业务逻辑的方法。在 1 0 中提出了基于信息 流相关( i n f o r m a t i o n f l o wr e l a t i o n s ) 算法的主域变量识别方法和基于数据依赖图 ( d d g ) 的主域变量识别方法。在 1 1 中认为主域变量可以分为纯主域变量和派 生主域变量两种类型,纯主域变量是指那些在应用领域可以直接对应于业务实体 的变量,派生主域变量是指与纯主域变量具有依赖关系的变量。 1 3 本文主要研究内容 本文提出了采用与其他系统m e r g e 的方法进行软件再工程的思想。起源于同 一版本的代码,以及相互之间有相似性的软件系统,都有m e r g e 的机会。克隆代 码检测可以帮助发现系统中潜在的再工程机会。 以下为本文各章节内容: 第二章概述了f t m 和g t m 系统的背景以及相互之间的关系。根据f t m 系 浙江人学硕士学位论文第l 章绪论 统的现状和在开发维护中的具体问题,阐述了进行再工程的必要性。由于f t m 和g t mc o 的功能和地位上相似性,和f t m 与g t m 固有的特点,我们在再工 程的策略上选择了f t m 和g t mc o 合并到g t m 系统中,最终只保留一个系统。 第三章介绍了克隆代码检测工具在f t m 和g t mc o 的应用。克隆代码给软 件维护带来了很多麻烦。克隆检测帮助我们发现两个系统间的克隆代码,除去这 部分克隆代码,我们容易寻找出两个系统在代码上不一样的地方,从而归纳出系 统在功能上的差别,这对于理解原有软件系统以及后续开发和维护都是很有帮助 的。对于起源于同一份代码的两个系统,克隆代码的比例很高,为了提升软件的 可维护性,我们可以考虑把两个系统合并。一个系统内部也有一定比例的克隆代 码,这些都是潜在的再工程机会。这一章以f t m 和g t mc o 两组文件作为例子, 展示了克隆检测的结果。 第四章介绍了软件m e r g e 的具体过程。有一些已有的方法可以用来合并由同 一版本演化而来的系统。m e r g e 首先要在目标系统找到与之匹配的模块,在功能 上把原有系统实现于对应模块,已有的聚类算法可以用于提取遗留系统的模块化 信息。原有系统需要重构以适应目标系统。本章还分析了一个匹配模块问的功能 区别的例子。最后展示了f t m 系统m e r g e 前后处理流程的差别。 第五章介绍了一种适合于软件再工程的b a c k t o b a c k 测试,我们需要对m e r g e 之前的系统测试,以及系统m e r g e 后的测试,测试的结果应该是一致的。 第六章是总结和展望。 6 浙江人学硕士学位论文第2 章项目背景 第2 章项目背景 2 1g t m 与f t m 系统介绍 g t m 与f t m 都属于某金融服务公司开发于2 0 0 0 年左右的交易处理系统。 两者有密切的关系。f t m 系统开发年代要比g t m 稍早,在后来f t m 又被分成 两块分别开发和维护,一块处理比较一般的交易类型,另一块则专门处理c u s t o d y o n l y 类型的交易,并且被包含在g t m 系统中,被称为g t mc o ( g t mc u s t o d y o n l y ) 。也就是说,现在所说f t m 和g t mc o 是从同一份代码演化而来的,经过 了一段时间的分别开发,它们之间在功能上有一定的差别,但是仍然有大量代码 是相同的。从业务逻辑的层面上来看,g t m 在公司整个投资管理系统中处于 m i d d l eo f f i c e 的位置,它接收多个f r o n to f f i c e 系统发送过来的各种格式的交易信 息并且统一转化为相同的格式( g t m x m l ) ,进行一系列复杂的验证以及与其他 系统的交互,之后将交易信息发送给下游系统处理,其中就包括f t m 和g t mc o 。 f t m 与g t mc o 的区别在于,f t m 处理的交易类型为f u l ls e r v i c e 的,处理完成 之后发送给做a c c o u n t i n g 的m c h 和做c u s t o d y 的c c i ;而g t mc o 只处理c u s t o d y o n l y 的交易,处理完成之后只发送给做c u s t o d y 的c c i 。g t m f t m 与g t m 关系 如图2 1 所示: 7 浙江大学硕士学位论文 第2 章项目背景 。堡军 g i o b a lr e f e r e l l c e s y s t e m ( g r s ) 对图2 1 的简要解释如下: f u l ls e r v i c e c u s t o d yo n l y g t mc u s t o d y f r m o n l y h ,n - 、 n u 1r , fc。o。m把m?on。ccuscto。d7: j r 峥 ”“ j r ? 1 “ s t s ( f e d ,3s m a c ( d t c g s m a ci o t h e r s s e t t l e m e n t ) s e t t l e m e n t ) 。,:! jl 图2 i 系统间关系 g t m 在整个系统中负责交易处理( t r a n s a c t i o np r o c e s s i n g ) ;g r s 和e s m 负 8 浙江人学硕士学位论文 第2 章项目背景 责引用数据( r e f e r e n c ed a t a ) ;r k s 负责交易记录( r e c o r d k e e p i n g ) ;m c h 负责 a c c o u n t i n g ;c c i ,s t s ,s m a c 和g s m a c 负责c u s t o d y 相关内容。负责交易处 理的g t m 接受f r o n to f f i c e 发来的各种格式的消息,统一转化成为相同的x m l 格式t o m sm e s s a g e ,然后进行一些验证和补充,期间还使用各种方法( m q ,f i l e s y s t e m ,c o r b a ) 和其他系统如g r s ,e s m 等交互。之后某些符合条件的交易 被发送到e t d 系统,e t d 判断交易是触ls e r v i c e 还是c u s t o d y o n l y ,其中如1 1s e r v i c e 类型的交易被发送到f t m ,f t m 处理交易之后又发给与c u s t o d y 交互的的c c i 和进行a c c o u n t i n g 的m c h ;c u s t o d yo n l y 的交易被发送到g t mc o ( c u s t o d yo n l y ) 处理之后发送给c c i ( c o m m o nc u s t o d yi n t e r f a c e ) 。 可以观察到所有f t m 接收到的交易数据都是由g t m 而来的,尽管它们接收 到的数据格式不同,但是它们表达的都是同样的交易内容。由此造成它们在系统 结构必然存在相似的地方,例如都需要处理接收到的交易消息,都会以s w i f t 格式发消息给下游系统。这些相似点形成了它们可以m e r g e 的潜在原因。其次, 由于f t m 和g t mc o 由同一份代码演化而来,同时维护两个类似的系统造成了 很大的困难,很多开发任务往往在两个系统上都需要一样执行。所以我们的m e 曙e 工作将是把f t m 和g t mc o 一起m e r g e 到g t m 系统中,在下文中提到的f t m 通常指f t m 和g t mc o 。 2 2 再工程分析和选择 2 2 1f t m 系统具有遗留系统的特点 遗留系统是一种对机构很重要却又难以应付的大型软件系统坦】往往具有 以下几种特征中的若干种: 由于系统已经运行维护了很长一段时间,经过很多开发人员之手,新的 功能不断增加破坏了原有的设计。 陈旧的文档,或者根本没有文档。 系统庞大难以理解,甚至没有人能很好的理解整个系统可能存在大量 冗余代码。 浙江人学硕士学位论文 第2 章项目背景 一个微小的改动就需要花费大量时间,程序b u g 源源不断,往往刚刚改 正一个b u g ,引出另一个或者好几个b u g 。 该系统对组织很重要。任何停止或危害到系统运行的行为都是不可接受 的。 f t m 在很大程度上都具备以上特点,一个软件系统不会在某一天忽然变为遗 留系统,而是随着软件演化渐进式的成为遗留系统。所以一旦发现系统具有遗留 系统的部分特点时,采取一些预防性的维护很有必要。f t m 的文档残缺较为严重, 项目初期的文档已经丢失,现存的文档也未能及时更新,不能正确反映系统现状。 由于原有开发人员相继离开,新的人员对系统缺乏了解。代码风格较差,基本没 有注释,可读性差。f t m 的开发活动只占较少的比例,新的业务需求不多,这就 给再工程带来了契机,如果系统仍有大量开发工作,将给再工程带来很多麻烦。 基于上述原因,f t m 系统运行维护成本越来越高,新的功能增加的代价很大。但 是f t m 又是一个比较重要的系统,最终决定对其进行再工程。 2 2 2f t m 再工程的选择 对f t m 进行再工程面临两种选择: 使用普通的再工程模型,逆向工程到迁移再到正向工程,对系统重新设 计。 把f t m 合并到g t m 里面,f t m 再工程的目标就是转化为g t m 的体系 结构。 基于以下考虑,我们选择了第二种再工程方法: 首先是f t m 和g t m 两者本身具有一定的相似性。f t m 和g t m 两者都处于 同一个大的系统中,模块之间主要以i b mm q s e r i e s 方式传递消息,处理消息的 方式具有相似性,在很多地方都使用相同的技术。存在部分开发人员同时参与了 两个系统的开发和维护,所以在设计思维上是类似的。f t m 与g t m 的一些比较 如表2 1 所示: l o 浙江人学硕上学位论文第2 章项目背景 表2 1f 1 mg t m 比较 g t mf t m g t mc o 项目规模中等比g t m 小 代码可读性 较好较差 文档比较齐全 不全 可维护性较好较差 开发年代2 0 0 0 年以后九十年代末 程序设计语言 j a v a ,c o r b a ,j s p ,j a v a ,c o r b a ,j s p , s q ls q l 所处位置 m i d d l eo 伍c e b a c ko 衔c e 合并可以达到对f t m 再工程的目的。由于g t m 系统的各种属性如代码可读 性可维护性等均优于f t m ,合并结果将给f t m 带来g t m 所拥有的上述优点。 合并可以节约项目维护成本。目前f t m 和g t m 分别有自己的维护开发团队, 他们相互之间不熟悉对方的系统。如果合并完成则两个团队可以并成一个,减少 总的工作量,优化资源配置。 减少再工程风险。采用普通的再工程模型,意味着再工程结束的时候我们会 拥有一个全新的目标系统,这个目标系统是否比原来系统更健壮,更具有可维护 性,是不太确定的,再工程面临失败的风险。如果采用合并,我们就可以以g t m 目前状态来预见再工程结束之后f t m 的情况。可以这么说,g t m 给f t m 再工 程提供了一个“原型”。 根据f t m 的实际情况,再工程有它自己的特点。对于逆向工程,首先f t m 并不是完全没有文档,逆向工程的过程中可以充分利用已有的文档,帮助理解系 统的需求,总结系统抽象层。其次,项目组对f t m 已经维护将近两年,期间总 结出大量对系统的理解和认识,部分已经形成文档。这些经验文档化之后可以直 接作为逆向工程的结果来使用,大大减轻了逆向工程的工作量,提高了再工程效 率。对于迁移和正向工程,由于f t m 再工程采用与g t m 合并的方式,再工程的 迁移和逆向工程两大步骤就必须在g t m 环境下进行。f t m 再工程将会使用g t m 的体系结构,g t m 的代码风格,g t m 使用的技术。也就是说,要把当前f t m 系 统打碎,嵌入到g t m 各模块中。 浙江大学顾十学位论文第2 章项目背景 2 3 本章小结 本章概述了f t m 和g t m 系统的背景以及相互之间的关系。根据f t m 系统 的现状和在开发维护中的具体问题,阐述了进行再工程的必要性。由于f t m 和 g t mc o 的功能和地位上相似性,和f t m 与g t m 固有的特点,我们在再工程的 策略上选择了f t m 和g t mc o 合并到g t m 系统中,最终只保留一个系统。 1 2 浙江大学硕士学位论文第3 章f t m 与g t mc o 克降代码分析 第3 章f t m 与g t mc o 克隆代码分析 3 1 克隆代码以及检测工具 代码克隆( c o d ec l o n e ) 常产生于程序员的“复制和粘贴”( c o p y a n d p a s t e ) 这一动作,目前还没有统一的定义,在 1 3 中代码克隆被定义为根据某些已定义 的相似性而相似的代码片段,在 1 4 中的定义更为模糊:代码克隆为源代码的相 互等价( i d e n t i c a l ) 或者相似( s i m i l e ) 的部分。这里的问题是怎么定义“相似性”。 无论怎么定义,克隆代码的害处是公认的,它会使得日后修改代码更困难,严重 影响软件的可维护性。一般情况下,克隆代码是可维护性下降的一个重要原因。 比如说,如果对同一处理进行了拷贝,那么当原来的代码发生问题,所有拷贝形 成的部分都必须跟着进行修改。可是,如果不是原来那个人的话,其他人来做修 改,难免遗漏应该修改的部分,从而造成代码的质量下降。 由于克隆代码的危害性,寻找和分析一个软件系统的克隆代码是有意义的, 由此产生了一些克隆代码检测技术,致力于自动发现软件系统中的克隆现象并协 助开发者消除它们。代码克隆的类型从大的方面看可以分为文本相似性( t e x t u a l s i m i l a r i t y ) 和功能相似性( f u n c t i o n a ls i m i l a r i t y ) ,文本相似性基于比较文本的相 似度,功能相似性则基于代码片段在功能上的相似性。克隆代码检测技术可以应 用于起源分析( o r i g i na n a l y s i s ) ,合并( m e r g i n g ) 和软件演化分析( e v o l u t i o n a n a l y s i s ) ,它们都基于比较分析两个软件系统( 合并) 或者一个系统的两个版本 ( 起源分析和演化分析) 。起源分析用于分析一个软件系统发生更改的部位以及 如何改变结构,克隆检测技术可以用于帮助起源分析。克隆检测技术也可以帮助 分析两个相似的系统合并为一个新的系统,为了帮助在一对系统间建立关系,克 隆检测技术用于在两个系统的克隆代码之间进行比较和分析。 目前有很多克隆代码检测工具可以使用,常见的克隆代码检测工具有 c c f i n d e r ,c l o n e d r ,c o v e t ,j p l a g ,m o s s 等【l5 | ,支持不同的程序设计语言,但 是j a v a 和c + + 被大部分工具所支持。不同的工具所采用的检测技术也有所不一样, 浙江大学硕士学位论文第3 章f t m 与g t mc o 克隆代码分析 有基于抽象语法树( a b s t r a c ts y n t a xt r e e ) ,t o k e n 匹配和转化( t r a n s f o r m a t i o n f o l l o w e db yt o k e nm a t c h i n g ) 和功能指标比较( c o m p a r i s o no ff u n c t i o nm e t r i c s ) 等。 本文接下来将使用的工具为c c f i n d e t d l 6 】,c c f i n d e r 是一款基于t o k e n 匹配和转化 的克隆代码检测工具,它着眼于分析规模比较大的系统,且有容易使用的图形界 面。克隆检测的过程首先是t o k e n 序列的生成,这个过程对输入的源代码进行词 法分析,所有的源代码生成一个t o k e n 序列,这样可以把文件内和文件间的克隆 代码视为同样的问题处理。c c f i n d e r 利用后缀数匹配找出t o k e n 序列中的最长子 序列对,后缀数是一种利用树来表示字符串的数据结构,用于表示一个字符串时, 字符串的每一个后缀子串都有一条从根结点到叶子结点的路径,每一条边表示一 个字符,叶子结点表示子串结束。叶子结点的个数等于字符串字符个数。当两个 子串共享从根开始的路径时,两个子串有相同的字符子序列,也就是相同的字符 串。 在使用c c f i n d e r 之前,首先介绍一些这个工具用到的概念: r s a ( r a t i oo f s i m i l a r i t yb e t w e e na n o t h e rf i l e s ) :一个文件与其他文件之间有克 隆关系代码片段所包含的t o k e n 比例。如果一个文件的r s a 接近于1 0 0 ,那么 这个文件很有可能是复制了另外的文件。例如,a 文件的一半内容( t o k e n ) 被复 制出来创建一个新文件b ,a 与b 进行克隆代码检测会发现b 的r s a 等于1 0 0 , a 的r s a 等于5 0 。 r s i ( r a t i oo f s i m i l a r i t yw i t h i nt h ef i l e ) :一个文件内部相互有克隆关系的代码 片段所包含的t o k e n 比例。如果一个文件的r s i 接近于1 0 0 ,则此文件有可能 包含一系列相似的方法。 c v r ( c o v e r a g e ) :一个文件任意克隆代码所包含的t o k e n 比例。根据定义, c v r 的大小在m a x ( r s a ,r s i ) 和r s a + r s i 之间。 t k s ( t o k e ns e ts i z e ) :一个克隆代码片段的t o k e n 集大小,如果一个克隆代 码的t k s 很小,表示代码片段是比较简单的语句,例如一系列变量声明。 c l n ( c l o n en u m b e r ) :一个文件里克隆代码段的个数。 c c f i n d e r 使用之前需要配置一些阀值,用以控制克隆检测的粒度。例如最小 1 4 浙江大学硕士学位论文第3 章f t m 与g t mc o 克隆代码分析 t k s ( m i n i m a lt k s ) ,如果克隆代码的t k s 小于输入值,则不认为是一个克隆代 码段。还有是否使用p m a t c h 等,这里不做具体介绍。本文下面的检测全部使用 c c f i n d e r 的默认值。 3 2 使用c c f i n d e r 分析f t m 和g t m c o 3 2 1 系统间克隆检测 首先需要确定的是输入的源代码。这里使用g t mc o ( g t mc u s t o d yo n i y ) 和f t m 对应的j a v a 文件作为输入。g t mc o 是数年前从f t m 分化出来的,分 别用于实现不同的功能,由于它们起源于同一版本的代码,所以相似性非常大; 又经过一段时间的分别维护和开发,又有一定程度的区别。我们发现已有的文档 没有很好的记录这些区别,理解起来很困难。同时,维护两个相似的系统也很有 难度,在一个系统上的更改往往要搬到另外那个系统重新实现;在一个系统发现 了b u g ,不得不在另外那个系统确认是否有同样的b u g 。这些具有一定重复性但 又不完全一样的维护活动造成了软件成本的大幅上升,维护很有难度。所以,使 用c c f i n d e r 理解两个系统的代码克隆情况,评估两个系统m e r g e 的可能性,是有 意义的。 由于g t mc o 绝大部分j a v a 文件都可以在f t m 中找到对应的相同文件名的 j a v a 类,所以克隆检测工作主要在两个选定的类之间进行。这里选取了两组比较 有代表性的类:第一组为两个同源的类,这两个类在f t m 和g t mc o 分开之前 就已经存在,起源于同一份代码,后续的开发和维护形成了一些不一样的地方; 第二组类是f t m 和g t mc o 分开之后的新开发的类,在两个系统中都实现了类 似的新功能。图3 1 和表3 1 为第一组文件的检测结果;图3 2 和表3 2 为第二组 文件的检测结果。 浙江大学硕士学位论文 第3 章f t m 与g t m c o 克隆代码分析 图3 1f t m 与g t m c od e a l 类克隆检测结果 表3 1f t m 与g t m c od e a l 类克隆检测结果 n a m eg t mc of t m l e n1 8 3 7 51 9 9 3 4 c l n6 26 2 r s a0 7 9 80 7 3 8 r s l0 1 9 3o 1 8 7 c v r0 8 5 50 7 9 7 1 6 浙江大学硕士学位论文 第3 章f t m 与g t mc o 克隆代码分析 图3 2 兀 m 与g t m c os e c u r i t y c a n c e l 类克隆检测结果 表3 2f t m 与g t m c os e c u r i t y c a n c e l 类克隆检测结果 n a m eg t m c of t m l e n4 8 5 07 1 2 5 c l n172 1 r s ao 6 1 30 4 1 9 r s l0 0 7 9o 1 3 3 c v r0 6 1 30 4 9 5 在上面两幅图中( 图3 1 和3 2 ) 横轴为g t mc o 的代码,纵轴为f t m 代码。 如果一对文件间有一片克隆代码,则在图上相应的坐标形成黑色斜线,斜线的水 平和垂直投影分别表示克隆代码在两个文件内代码行的位置,越靠近图片的左上 角,克隆代码的位置越靠近文件的开头。黑色的点是由于代码片段比较短,在图 浙江大学硕士学位论文第3 章f t m 与g t mc o 克隆代码分析 中只显示出一个点,如果代码片段比较长,则能发现一条黑色的斜线。黑色的斜 线与图的对角线越接近,表示克隆代码片段在文件内的行越接近,两个完全相同 的文件的克隆报告图将是一个正方形的对角线。 由图表可见第一组检测中有比较多的斜
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东省市政b证考试试题及答案
- 山西省高三开学考试试题及答案
- 后勤面试考试题及答案
- 考点解析-苏科版八年级物理上册《声现象》专项训练练习题(含答案详解)
- 养老护理员四级考试卷子及答案
- 中一班的考试题库及答案
- 2025-2026学年度上海市八年级上册9月月考数学试题 参考答案
- 宁波八上学期语文期中考试及答案
- 中职化学理论考试题库及答案
- 专利法相关知识测试题附答案:发明或新型说明书及权利要求测试卷有答案
- 山东省名校考试联盟2026届高三上学期10月阶段性检测数学试卷(含答案)
- 基于IPv9技术的商务港交易平台构建:设计、实现与展望
- 江浙皖高中(县中)发展共同体2025-2026学年高三上学期10月联考技术试题(含答案)
- 2026年国网山东省电力公司高校毕业生提前批招聘(约450人)考试参考试题及答案解析
- 电动牵引车司机安全培训课件
- 2025年全国应急管理普法知识竞赛试题库及答案
- 2025秋季安徽合肥市建投集团招聘20人笔试备考题库及答案解析
- 创意笔筒产品设计与制作方案
- 人保新员工岗前考试试题及答案解析
- 2025公务员考试《常识》高分题库完美版附答案详解
- 装修直播培训课课件
评论
0/150
提交评论