(计算机软件与理论专业论文)既存系统逆向工程整体自动化解决方案研究.pdf_第1页
(计算机软件与理论专业论文)既存系统逆向工程整体自动化解决方案研究.pdf_第2页
(计算机软件与理论专业论文)既存系统逆向工程整体自动化解决方案研究.pdf_第3页
(计算机软件与理论专业论文)既存系统逆向工程整体自动化解决方案研究.pdf_第4页
(计算机软件与理论专业论文)既存系统逆向工程整体自动化解决方案研究.pdf_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 摘要 软件再工程自动化是现今软件工程发展的主流。软件再工程过程是软件逆向工 程与软件正向工程交替进行的过程。但是,软件逆向工程与软件正向工程相比,无 论在分析策略还是在算法复杂度上都存在相当大的困难。相对于现在关于软件逆向 工程方面的研究还主要集中在程序理解方面的问题,本文所论述的研究对象是建立 在逆向工程整体自动化解决方案平台上的研究。 本文针对建立逆向工程整体自动化解决方案平台所涉及到的系统框架及其特点 进行了论述,并在此基础上对系统框架中核心部分的实现从技术到结构进行了详细 的阐述。目的是通过这些内容向大家说明如何将现今为止关于逆向工程方面的优秀 成果集成起来进行必要的改造和创新,从而建立一个能够支持逆向工程全过程的自 动化平台;同时,通过将该系统集成到再工程自动化平台中,为其提供有利于再工 程工作的逆向分析信息,从而使这个平台成为软件再工程自动化平台的有力支持 者。 除了理论方面的叙述,本文还用一个实例向大家展示了逆向工程整体自动化解 决方案平台的功能和运行结果。并对该系统的性能进行了客观的分析和评价,以此 说明在本课题的基础上,还需要在哪些方面作更深层次的研究和探索。 通过该课题的研究,试图对逆向工程研究的目的做更深层次的诠释。并希望通 过本课题的研究能够使逆向工程向更加实用和能够创造更高价值的方向发展。 关键词逆向工程;既存系统分析;设计恢复;类图抽象 a b s t r a c t a b s t r a c t s o f t w a r er e e n g i n e e r i n gi st h em a i n s t r e a mi n d e v e l o p m e n to ft h e s o f t w a r ee n g i n e e r i n g , s o f t w a r er e e n g i n e e r i n gp r o c e s si s t h ep r o c e s s t h a tt h ef o r w a r ds o f t w a r ee n g i n e e r i n ga n d t h er e v e r s es o f t w a r e e n g i n e e r i n gp e r f o r ma l t e r n a t e l y ,h o w e v e r ,c o m p a r e dt ot h ef o r w a r d s o f t w a r ee n g i n e e r i n g ,t h er e v e r s es o f t w a r ee n g i n e e r i n gh a s m o r e d i f f i c u l t i e si nt h ea n a l y t i c a ls t r a t e g ya n do nt h ec a l c u l a t e c o m p l i c a t i o n s w h e r e a st h er e s e a r c ha b o u tt h er e v e r s es o f t w a r e e n g i n e e r i n gi sm a i n l yf o c u s e do np r o g r a mc o m p r e h e n s i o nn o w ,t h e r e s e a r c h e do b j e c ti nt h i st e x ti st h ea u t o m a t i cp l a t f o r mo ft h ew h o l e p r o c e s sa b o u tt h er e v e r s es o f t w a r ee n g i n e e r i n g t h i st o p i cd i s c u s s e ss y s t e mf r a m e w o r ka n di t sc h a r a c t e r i s t i c st h a t b u i l du pt h ea u t o m a t i cs o l u t i o np l a t f o r mo ft h ew h o l ep r o c e s sa b o u tt h e r e v e r s es o f t w a r ee n g i n e e r i n g ,a n dd e t a i l st h er e a l i z a t i o no ft h es y s t e m c o r ef r o mt e c h n i q u et ot h es t r u c t u r e 。t h em a i np u r p o s ei st oe x p l a i nh o w t ou s ep r e s e n te x c e l l e n tr e s u l t so nr e v e r s es o f t w a r et ob u i l du pa n a u t o m a t i cp l a t f o r m m e a n w h i l e ,i n t e g r a t i n gt h ep l a t f o r mi n t os o f t w a r e r e e n g i n e e r i n gp l a t f o r ma n ds u p p l y i n gt h er e v e r s ei n f o r m a t i o na b o u t e x i s t e ds y s t e mf o rt h er e e n g i n e e r i n gm a k ei tt ob et h e g o o ds u p p o r t e r t ot h ea u t o m a t i cs o f t w a r er e e n g i n e e r i n g b e s i d e st h ed e s c r i p t i o no ft h et h e o r y ,t h et e x ts h o w sa ne x a m p l et o d i s p l a yt h ef u n c t i o na n d t h ep r o c e s so u t c o m eo ft h ea u t o m a t i cs o l u t i o n p l a t f o r mo ft h ew h o l ep r o c e s sa b o u tt h er e v e r s es o f t w a r e e n g i n e e r i n g , a n dc a r r i e so nt h eo b j e c t i v ea n a l y s i sa n de v a l u a t i o n st ot h es v s t e mf o r e x p l a i n i n gt h ed e v e l o p i n gi nf u t u r e i i a b s t r a c t b yr e s e a r c h i n gt h i st o p i c ,t h ei n t e n t i o ni s t oa n n o t a t ed e e p l yt h e p u r p o s eo ft h er e s e a r c ho nr e v e r s es o f t w a r ee n g i n e e r i n g t h e a u t h o r h o p e st h er e s e a r c ho ft h i st o p i c d e v e l o pt o w a r d st h ed i r e c t i o no f w o r t h e n a b l e sr e v e r s es o f t w a r ee n g i n e e r i n gt o m o r ep r a c t i c a la n dc r e a t i n gt h eh i g h e r k e y w o r dr e v e r s ee n g i n e e r i n g ;a n a l y s i so fl e g a c ys y s t e m ;d e s i g n r e c o v e r y ;c l a s sv i e wa b s t r a c t i i i 独创性声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研 究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他 人已经发表或撰写过的研究成果,也不包含为获得北京工业大学或其它教育机构 的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均 已在论文中作了明确的说明并表示了谢意。 虢獬吼巡砌 关于论文使用授权的说明 本人完全了解北京工业大学有关保留、使用学位论文的规定,即:学校有权 保留送变论文的复印件,允许论文被查阅和借阅;学校可以公布论文的全部或部 分内容,可以采用影印、缩印或其他复制手段保存论文。 ( 保密的论文在解密后应遵守此规定) 始牟蝉名:羔衅隰出 第1 章绪论 1 1 本课题的研究内容 第1 章绪论 既存系统逆向工程整体自动化解决方案是针对软件再工程的对象进行逆向工程 的整个过程给予自动化支持。它的目标是要将软件逆向工程研究中的先进理论和方 法集成起来,用以搭建一个能够更好的辅助软件再工程工作的逆向工程自动化平 台,并使该平台能够随着理论和技术的进步而不断更新。 1 2 背景介绍 随着计算机应用的瓶颈由硬件转化为软件,软件工程方法学体系就此诞生。但 是3 0 多年来,硬件发展速度和更新换代周期( 据统计目前大致四个月到一年半) 均呈指数型递增,而软件生产率至多是螺旋形、波动形或线性发展,总也追不上硬 件,始终也没能把当年的瓶颈拓宽。一方面随着软件工程方法学理论的进步、软件 开发人员的成熟,软件的覆盖面越来越大,从操作系统到应用软件,无不在功能、 性能、普及率以及换代周期上今非昔比;但另一方面下面所述现象也是一些不争的 事实: 一 彳 。, 。一。 新开发j茛件 一 , 彳 一 一 爵存软件 目前 图l 一1 软件开发对象中既存软件比例的增长状况 t h er a t eo ft h el e g a c ys y s t e mi nt h es y s t e md e v e l o p e d 北京工业大学工学硕士学位论支 新开发与既存软件维护比例反向逆转,且逆转速度越来越快。有资料表明,2 0 世纪9 0 年代以后,先进国家的既存软件维护性开发己占软件开发总量的8 0 以上; 据报道,“千年虫”影响的软件仅占先进国家既存软件的2 0 ,它们经过小修 小补后依然运行在世界各地。特别是在导入计算机较早、而且又都是比较重要 的应用领域,例如银行、证卷、物流,乃至政府军用部门等。越是庞大、悠久 的系统,它们沉淀的历史遗产越雄厚,价值越高,越不能被淘汰; 硬件和操作系统平台的升级换代周期越来越短,换代比率越来越高。然而半个 世纪以来的软件资产大部分没能象硬件那样频繁地经历彻底的更新换代,为了 适应硬件的飞速换代,环境适应性维护周期越来越短,范匝i 越来越大; 数据这一系统赖以存在、也是系统价值标志的基石越积累越多,却从 未彻底进行过合理重组 2 0 多年前曾有人预言:软件进入维护期的比例将随软件递增率起增长,进入 2 1 世纪后将有8 0 的软件人员从事维护性开发。 1 3 软件再工程 1 3 1 软件再工程定义 凹圈圈圈圈臣 翌二工卫 软件成品诞生( 发确r _ j 磊i 甄丽摹吞画_ l 一个计算机系统的软件生圭三二型 图卜2 一个计算机系统的软件生存期 t h e1i f ec y c l eo fs o f t w a r e 第1 章绪论 图卜2 给出了一个软件生存期示意图,再工程处于软件生存期的维护期。所以 要研究再工程首先要研究软件维护。 a n s i i e e e 在8 0 年代是这样定义软件维护( s o f t w a r em a i n t e n a n c e ) 的:“软 件维护是指软件成品提供使用后,为了修改差错、改善功能和性能、适应环境变化 而进行的软件修正”。由于软件维护需要先实施逆向工程,而逆向工程有时比正向 工程更复杂;加之软件修正常常伴随副作用( 源于修改不彻底或误修改) ,所以旱有 “维护地狱”的恶名。 再工程是对一次工程后的成品软件再次进行开发。软件维护期的适应性、完善 性、预防性等方面的维护都属再工程范畴。再工程面对的首先不是原始需求,而是 既存软件,是从既存软件出发开发出新软件的过程。也可以将这一过程理解为:软 件再工程= 软件逆向工程+ 软件正向工程。为此需要引入如下两个概念: 正向工程( f o r w a r de 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 e n g i n e e r i n g ) 也称再加工( r e n o v a t i o n ) ,是对既存软件系统进行调 查,并将其重构为新形式代码的开发过程。再工程中的逆向工程由源代码出发,旨 在取得高一级抽象成果,用以更易于阅读和掌握系统的本质特征;再工程则根据对 对象系统更深层次的理解将其重构为另一种形式的软件产品。 1 3 2 软件再工程方法学 软件再工程必须有方法学的指导。再工程方法学建立在以下的几个基本思路 上: ( 1 ) 在可维护性软件基础上重构新系统 北京工业大学工学硕士学位论文 首先是构筑可维护性软件。能在软件工程周期内完成当然最理想;如 果再工程的软件不具备可维护性,那么首先要对既存系统进行可维护性重 构,然后再进行追加新功能的新系统重构。 ( 2 ) 新系统应尽可能多地重用旧系统 重用是再工程的灵魂,如果不追求重用,再工程学也就不必要了,软 件也就可以和硬件一样一切弃旧迎新了。 ( 3 ) 再工程后的软件应有良好的可维护性 可维护性是指维护人员理解、改正和更新软件的难易程度。传统软件 工程用可理解性、可测试性和可修改性来衡量软件的可维护性,再工程中 主要以考虑可重用性来衡量可维护性。可维护性最直接的体现是良好的软 件结构和完整正确的文档体系。 再工程与软件工程一样有很多方法学,一些经典的软件工程方法学,例如面 向对象方法学、递增式开发方法、部件组装式开发方法、面向模式方法、转换方法 甚至结构式方法学等等,均可以将其基本思路、规范与方法发展运用到再工程方法 学中。 1 3 3 软件再工程的发展现状 祆仟 i 再工 ; 一,一,7 ; 、 一秽 1 9 8 0 年1 9 9 0 年2 0 0 0 年 图1 - 3 软件工程中一次工程和再工程比例趋势图 t h er a t i oo ft h ef i r s te n g i n e e r i n ga n dt h er e - e n g i n e e r i n gi ne n g i n e e r i n g 4 第1 犟绪论 认为软件工程进入再工程时代的呼声起于2 0 世纪9 0 年代初,当时更多的提法 是软件重用( r e u s e ) 。实质上可以说是用“重用”的旗帜为再工程开道,这样引出 再工程,是软件工程理论先导的远见卓识,因为重用是软件工程的最高境界。 如图卜3 所示,再工程在软件工程中的比例日渐显著。但严格地说软件再工程 的潜在需求尽管大得不可估量,目前还不能说达到了再工程时代的高峰期,只能说 是进入了再工程时代。其理由众所周知,一是资金不足,再工程需要大量投资;= 是软件开发人员不足。所以除了应付尚未实施的一次软件工程外,可以有计划地投 入再工程的很有限。目前的再工程主要为三类: ( 1 ) 适应性维护的再工程,例如: 伴随硬件和操作系统更新换代的软件维护。象小型机换p c 机,p c 机换 u n i x 工作站,w i n 9 5 换w i n x p 所带来的软件维护; 业务环境变化带来的软件维护。譬如由于企业业务的发展,系统使用年 限的增加,既存系统的存储媒体和数据管理系统满足不了数据量及其种类 剧增的要求,需要更新数据库系统:随外部条件变化而必须修改部分数据 变量定义或算法,象征收消费税的国家法律改变、邮政编码的位数改变、 以及2 0 0 0 年问题等: 系统运行环境变化带来的软件修正。如由主机方式变为客户机n 务器 方式,由客户机n 务器方式变为w e b 方式,这时的系统体系结构必须相应 变化; 适应系统开发环境变化的软件维护。有一些软件,主要是定制软件,例 如e r p 软件,软件再工程常伴随企业的b p r 而发生,所以开发环境也需随 经常性的系统完善性软件再工程而更新。象p o w e r b u i l d e r 等开发环境的升 级换代如同操作系统一样频繁发生。 ( 2 ) 完善性维护的再工程。例如:增加或修改功能,提高安全性、处理能力等 系统性能。 ( 3 ) 预防性维护的再工程。例如:为了提高可维护性而对系统进行优化( 再结构 化、再标准化) ,对文档进行重构,对数据进行重组。 北京工业大学工学硕士学位论文 1 4 软件逆向工程 1 4 1 软件逆向工程与软件再工程 在上一节中介绍软件再工程时我们介绍了一个等式:软件再工程= 软件正向 工程+ 软件逆向工程。软件逆向工程是从已存在的后期软件( 程序或文档) 状态 自动返回软件正向工程过程前期阶段的软件工程过程。如果说软件正向工程早在自 动化工具诞生之前就已经存在,没有自动化工具也可以进行抽象级的求精,那么以 手工进行逆向抽象升级显然是得不偿失的。所以软件逆向工程是在自动化软件工具 出现后才出现的。软件逆向工程对维护工作的意义是可想而知的。对于结构不理 想、文档不完备或丢失的早年开发的软件,要想进行维护,事先进行软件逆向工程 处理可以大大减轻维护的软件正向工程负担。严格的将,软件逆向工程应该包含在 软件再工程之中,也就是说通常的软件再工程应是先软件逆向工程、后软件正向工 程的过程。 1 4 2 软件逆向工程定义 软件逆向工程是一个对既存系统的分析过程,其目的有两个: 1 ) 明确系统各组成部分及其相互间的关系; 2 ) 将系统以其它形式或更高的抽象级表现出来。 通常,软件逆向工程涉及到抽象出系统的组成元素,并建立或合成元素间关系 的抽象表示。它可以在软件生命周期的任何时候进行,也可以从任何一个系统抽象 级开始。但是逆向工程本身不涉及到修改目标对象和基于目标对象创造新对象。他 仅仅是一个扫描发现的过程,而不是一个修改、拷贝的过程。 同时,软件逆向工程过程中的抽象与软件正向工程过程中的抽象不同,软件逆 向工程过程中所实现的抽象是一个从计算机世界的源代码向用户世界需求方向上的 抽象,从粒度上来讲是一个上升的过程,是对系统设计的恢复;而软件正向工程过 程中的抽象是一个从用户世界的需求到计算机世界的抽象,从粒度上来讲是一个下 第1 章绪论 降的过程,是对系统需求的细化。换言之软件正向工程是自顶向下的抽象精化过 程,而软件逆向工程则相反,是自底而上的回归过程。 软件逆向工程过程可分成程序理解、系统理解和文档恢复三个阶段。在程序理 解阶段,我们从具体实现的程序源代码出发,通过分析恢复能够反映程序真实情况 的程序抽象信息。在这一阶段,源程序是输入数据,是程序理解的处理对象,所以 我们也可以把程序理解看成是软件逆向工程的代码分析阶段。在系统理解阶段,我 们在程序抽象信息的基础上进一步恢复出数据抽象信息和功能抽象信息,有时候数 据抽象信息的恢复还有待于功能抽象信息的恢复结果。在信息恢复过程中,有时需 要借助于其他外界的信息来进行深层次的挖掘。如果我们把程序理解看成为软件逆 向工程的代码分析,那么系统理解则可以看成为从代码分析的结果找出数据间关系 的过程,既可以称之为数据组织。在文档恢复阶段,我们要将程序理解信息和系统 理解信息形式化,得到能够反映系统真实情况的文档产品;这些文档可以以表、图 等多种形式存在。 1 4 3 软件逆向工程与软件开发过程 北京工业大学工学硕士学位论文 ! ! ! s ! ! ! ! ! ! ! ! ! ! ! ! ! | e ! ! ! ! s 目_ - _ i l l 目! ! ! ! ! ! 自! e ! ! ! ! ! ! ! ! ! 目s g | ! ! ! ! ! 国卜4 软件工程与再工程过程 t h ep r o c e s sb e t w e e ns o f t w a r e e n g i n e e r i n ga n dr e e n g i n e e r i n g 软件工程可以看成是一个从非计算机世界到概念世界再到计算机世界的过程。 在这个过程中,非计算机世界是一个具体世界,它面对的是用户大量参差不齐的需 求信息,并伴有大量手工制作的代表需求的文档;计算机世界也是一个具体的世 界,它面对的是大量的可执行程序;而概念世界则是一个虚拟世界,它是看不见摸 不着的,但它实现了从非计算机世界到计算机世界的过渡,我们把这一世界也称为 软件工程世界。概念世界的最上层是对非计算机世界需求的高度抽象,我们称为外 部抽象,最下层是具体实现的程序源代码,中间要经过功能抽象,数据抽象和算法 抽象三个抽象层次。这个层次关系的正向实现过程是一个从黑盒逐渐白盒化的由外 向内的过程,从抽象度来讲是一个从高到低的过程,从粒度来讲是一个从粗到细的 8 弟i 章绪论 过程,也就是正向工程;相应的,相对这个层次关系的逆向实现过程就是逆向工 程。 从再工程角度我们可以把软件开发过程分成三个过程:一次正向软件工程,逆 向软件工程和二次正向软件工程。一次正向软件工程也就是传统意义上的软件工 程,它从非计算机世界的需求出发,直到计算机世界的可执行程序为止,跨越三个 世界。我们这里讲的逆向软件工程则是从概念世界具体实现的源代码出发,到概念 世界的算法抽象或数据抽象或功能抽象为止,而不涉及到外部抽象,因为这一层次 上的信息恢复对不增加新功能需求的二次正向工程没有多大意义;二次正向软件工 程则从概念世界的功能抽象开始,到计算机世界的可执行程序为止。 既存系统大多是文档不备或不完整、不一致,程序打满补丁:系统越大越藏龙 卧虎、盘根错节,其再工程越被视为“地狱”工程,就越是弃之不能。在对它们进 行再工程之前,必须先对其现状进行调查分析,将其背后隐藏的各种系统信息恢复 过来,即实旎逆向软件工程。没有逆向软件工程的支持,二次正向软件工程也就无 从做起。 1 4 4 软件逆向工程分析的难点 通常在再工程过程中,逆向工程是瓶颈所在。因为逆向工程的难度和复杂度比 正向工程商的多。归纳起来逆向分析有如下一些难点: 程序理解 在程序理解阶段,把源代码抽象成便于理解的各种实体,是一件很繁 杂的事情。因为既存系统的代码量通常是很大的,如果没有工具的支持, 这个过程的效率会很低。 文档恢复 逆向工程过程恢复的信息并不都是有用的。在逆向工程过程中的恢复 的文档应该提供哪些二次工程所必需的信息呢? 我们认为主要有以下几个 方面: ( 1 ) 既存系统的结构信息 北京工业大学工学硕士学位论文 这方面的信息主要包括系统中各模块的边界,模块间关系以及模块的 动作环境等。 ( 2 ) 变更范围界定 二次正向工程要变更的部分不一定是既存系统的全体,有时只涉及局 部。准确地界定这个局部的范围,关系到确定二次工程的系统和程序重构 边界,即范围和出发点。 ( 3 ) 变更影响范围 变更范围即对既存系统程序进行改动的范围,但是这些改动对不需改 动的部分可能产生影响,或者副作用。二次工程实现阶段的测试不能只针 对变更范围,而必须对变更影响范围内的程序( 包括有改动的和没有任何改 动的) 都进行相应的各级测试,保证没有副作用的影响。一个变更子域的变 更影响范围一般与这个子域的作用域同域。比如修改了一个函数,我们就 要找出调用这个函数的所有的代码进行测试。换言之,变更范围是二次工 程程序设计与编码的对象,而变更影响范围则是二次工程各级测试的对 象。 ( 4 ) 变更复杂度 变更复杂度关系到对二次工程工作量的预测。变更复杂度的度量方法 比较复杂,它涉及到变更内容所处的层次、与其他模块之间的关系、被调 用的次数,以及内部算法复杂度等很多因素。 ( 5 ) 变更风险 变更风险主要指的是变更带来的副作用分析。变更无论简单或复杂, 都会在一定程度上给系统带来副作用。我们在做系统变更之前必须进行变 更风险分析,做到防患于末然。 ( 6 ) 变更可行性分析 在上述( 1 ) 一( 5 ) 所提供信息的基础上,参照以往的再工程经验可以和一 次工程一样提供二次工程可行性分析报告,即在有限时间和经费,并保证 质量的前提下实现二次工程目标的经济、技术条件是否具备,有无版权之 第1 章绪论 类的障碍,以及解决方案是否是最优的,等等。经过逆向分析做出的二次 工程可行性方案应该给出二次工程的基本大政方针,例如: 变更方略 即对既存系统的重构方略,涉及二次工程过程模型、方法学、开发规 范和标准、以及开发支持工具环境的确定,新系统体系结构设计、运行环 境平台等系统级解决方案的选择等。变更方略草案一般诞生于逆向工程的 最后阶段,而在二次工程的最初阶段得到修订和确认。 扩充方略 在需要进行功能扩充时应该制定扩充方略,即在变更方略基础上规定 新功能的位置和与既存功能之间的关系。二次工程不是从无到有的工程, 即使追加全新的功能也必须在既存系统之上构建,必须与原系统集成为一 体,继承原系统的有关设计。譬如,即使原系统界面风格多么不令人满 意,一般也只能按原有风格设计新功能界面,除非整体进行改动。 改善方略 逆向分析过程中必然会发现既存系统中很多的反模式( a n t i p a t t e r n ) , 应尽可能在二次工程中进行改善。改善方略将规定要改善的反模式( a n t i p a t t e r n ) 对象和改善工程的目标。其中,对程序级的改善工作,我们称为 r e f a c t o r i n g ;对系统级的改善工作,我们称为r e s t r u c t u r e 或 r e b u i l d i n g 。 上述二次工程基本方针的提出起始于逆向工程的文档恢复阶段,在二 次工程重构设计阶段逐渐精化( 具体化) 。 1 5 软件逆向工程发展现状 目前世界上一些致力于逆向工程研究方面的组织,取得了令人瞩目的研究成 果,提出了许多有关逆向工程的理论和方法。现在比较成熟的理论主要着眼于程序 理解方面。 北京工业大学工学硕士学位论文 1 5 1 程序理解 程序理解研究如何取得关于程序的有关信息,它是进行修改、扩充、重用、及 文档重构等维护工作的必要准备过程,也是维护工作最圃难的作业之一。 1 5 2 程序理解模式 目前比较通用的程序理解模式可以分为4 种:自底向上模式、自顶向下模式、 反复改进模式、综合模式。 自底向上模式是在理解源代码的基础上对程序进行高级抽象,并进行一系 列的分块和功能确认,逐渐重新构造系统的设计。 自顶向下模式是在已经了解系统的功能的条件下逐个找出负责特定任务的 部件。 反复改进模式则是就程序功能反复提出假设、验证并修改假设,直到完全 理解整个系统。 综合模式则是根据情况灵活使用自底向上模式和自顶向下模式。 没有哪个模式可以适用所有的程序理解。究竟采用哪种模式,是根据特定的任 务灵活选择的。 1 5 3 程序理解的自动化 目前,程序理解的自动化实现方式有很多种。其中比较重要的有四种: ( 1 ) 词法分析 词法分析的任务是对输入的字符串形式的源程序按顺序进行扫描,在 扫描的同时,根据源代码的词法规则识别具有独立意义的单词( 符号) ,并 产生与其等价的属性字流作为输出通常属性字流即是对识别的单词给出 的标记符号的集合。 ( 2 ) 语法分析 语法分析就是按照语言既定的语法规则,对字符串形式的源程序进行 预防检查,并识别出相应的语法成分。它的处理依据就是语言的文法规则 1 2 第1 苹绪论 i i 其分析结果是识别出的无语法错误的语法成分,可以用语法树的形式来表 不。 f 3 ) 程序依赖图 程序依赖图用来表示程序中的模块、变量和函数之间依赖关系的视 图。在这种图中,节点表示程序的语句,边表示语句之间的依赖关系,主 要的依赖关系是控制依赖关系和数据依赖关系。后来,程序依敕图被扩充 成系统依赖图,使得被分析的程序可以包含若干个程序调用。在系统依赖 图中,有一个程序依赖图表示主程序,然后每个程序依赖图表示程序中的 每个过程调用。在系统依赖图中,在处理过程间调用时,又定义了一些不 同种类的边,这些边分别表示不同的依赖关系。 ( 4 ) 程序切片分析 程序切片是一种代码分析技术,它从语义的角度将程序进行分解,它 能够根据一个切片标准,识别源代码中影响已知点的变量值的所有语句。 切片可以通过静态方法进行:即不需要关于执行的信息,也可以通过动态 方法进行,通过执行该应用程序。静态切片能够回答哪些语句可能能够影 响变量的值,而动态切片能够回答哪些语句的确影响了变量的值。因此, 动态切片能够为应用提供更简化的切片。但是,动态切片的获得依赖于某 一特定的输入,因此不具备静态切片的普遍性。 1 5 4 软件逆向工程分析方法和相关工具 逆向工程是维护“地狱”的根源,即再工程风险成本的来源。降低逆向工程的 盲目性、无序性,即手工作业比例,提高逆向工程自动化率是解决逆向工程这再 工程瓶颈的关键。在此我们把支持逆向过程的计算机辅助工具称为逆向工程支持工 具。 目前基于不同的逆向工程相关理论,许多公司和学术研究机构研究和开发出了 很多逆向工程分析工具。不同的逆向工程分析工具有着不同的目的,但它们都能够 从大量的程序代码中找出特定的结构或模式,同时生成反映程序特征的各种报表或 北京工业大学工学硕士学位论文 视图。其中,一些工具主要通过为软件系统中的各种数据结构建立高层抽象模型的 方式来进行程序理解; 还有一些工具则是通过软件度量的方法来帮助进行程序理 解。下面我们简单介绍一下各种逆向工程分析方法并给出一些基于这些方法的逆向 工程分析工具。 ( 1 ) 基于高层抽象模型的逆向工程分析方法 从既存系统中抽取出来的各种数据信息的量肯定是很大的,通过高层 抽象模型把这些信息组织起来,不仅可以很容易的找到从系统中抽象出来 的各种数据单元,而且还能找到各个数据单元之间的关系。在逆向工程分 析过程中,构建既存系统的高层抽象视图是一件很不容易的事情。下面介 绍几个根据这种方法建立的逆向工程分析工具。 h a u s ia m u l l e rd e p a r t m e n to fc o m p u t e rs c i e n c eu n i v e r s i t y o f v i c t o r i a 开发的系统分析工具r i g i 是一个通过分组和图形化的 方式对逆向工程进行支持的工具。它的核心是图形元模型,这使它很 容易实现对任意的关系实体模型进行图形化。在r i g i 生成的图形上, 可以很容易的找到各种实体对象,以及这些对象之间的关系。和r i g i 相似的工具还有s h r i m p 。 i m a g i xc o r p o r a t i o n 公司开发的i m a g i x 4 d 是一个支持c 和c + + 语 言的逆向工程分析工具。该工具的核心是一个实体关系属性数据库 模型和一系列的图形显示窗口。它通过图形窗口把数据库中的数据以 及数据之间的关系显示出来。同时,用户可以在任何抽象层次上用不 同的图形窗口对既存系统的代码进行浏览。 ( 2 ) 基于软件度量的逆向工程分析方法 软件度量方法以前用在正向工程中来帮助改善软件的质量。比如,软 件度量方法不仅可以用来测量软件设计的复杂度,而且也可以用来预测整 个系统测试量的大小和整个系统开发的费用等。在逆向工程中,运用软件 复杂性度量方法可以准确地表示变更复杂度,帮助我们找出既存系统中哪 些部分的设计或实现比较复杂,这些部分需要通过重构来提高它的可重用 1 4 第l 章绪论 性和可靠性;通过运用不同的软件度量方法,我们可以发现系统的设计缺 陷以及各部分之间的耦合程度,从而界定变更范围和变更影响范围。耦合 程度高的部分不利于修改和重用;耦合程度低的部分则需要进行重构。目 前,基于软件度量方法开发出来的逆向工程分析工具有很多种,下面我们 介绍其中的两种。 c o d e c r a w l e r 是一个将度量方法和程序可视化技术结合在一起对程 序理解进行支持的平台。c o d e c r a w l e r 用到的度量方法包括:系统复 杂度、方法效率相关性等。该工具可以将用户所选择的数据结构以简 单的二维图形方式表示出来。图中的一个节点表示一个实体。每一个 节点可以同时表达五个度量值:节点的大小( 宽和高) ,节点的位置( x 轴 和y 轴坐标) 和节点的颜色。 i n t e g r i s o f t 公司开发的h i n d s i g h t 是一个支持c 、c + + 和f o r t r a n 语言的逆向分析工具。它可以生成不同的报表,插图和表格来帮助进行 程序理解。它所用到的软件度量方法有关键语句复杂度、测试覆盖 率、数据复杂度等。 当然,并不是所有的逆向工程分析工具都采用上述两种方法,还有很多其他方 法可供选择。比如日立公司开发的g p i c o v b 是一个面向v i s u a lb a s i c 语言的、可 将v b 源代码转化成p a d 图的逆向工程分析工具,它采用的是则基于词法分析和语 法解析的分析方法。其他方法这里就不再赘述了。 1 6 本课题的研究意义 本课题的理论与实践意义在于: ( 1 ) 研究既存系统逆向工程的分析方法和分析模型,将既存系统逆向工程工作 平台化,用以增强逆向工程的力度和对再工程的支持强度,提高逆向工程 自动化率,以拓宽逆向工程这一再工程的瓶颈; 北京工业大学工学硕士学位论文 ( 2 ) 研究既存系统逆向工程的分析过程和抽取模式,找到逆向工程分析过程中 存在的普遍模式,用以达到将逆向分析过程模式化的目的,最终使平台独 立于开发语言; ( 3 ) 研究系统抽象的方法,使得抽象的结果具有唯一性,并能够清晰的再现目 标系统的原貌。 ( 4 ) 通过研究生成的既存系统结构特征,归纳总结系统设计中存在的反模式, 使逆向工程平台真正成为再工程过程的有力支持者。 1 7 本文组织结构 本文是根据课题所建立的逆向工程整体自动化解决方案平台的框架结构展开论 述的。第1 章是绪论部分,该部分就课题的学术背景、意义以及相关领域的研究及 现状作了该概括性的描述。在第2 章中向读者展示了逆向分析系统的基本框架。第 3 章到第5 章就系统框架中的核心部分分别进行了论述,这三个核心部分是:代码 分析、数据组织和系统抽象。在这三章中,读者可以看到作者对这三个逆向工程的 核心环节所作的方法及理论上的研究。第6 章通过一个例子介绍了逆向工程自动化 解决方案平台的功能、处理流程以及对结果和性能的分析。最后在第7 章中,作者 就本课题的研究情况作了客观的分析,并对本课题的前景进行了分析和论述。 第2 章逆向分析系统框架研究 第2 章逆向分析系统框架研究 2 1 逆向分析系统框架 2 1 。1 系统的体系结构图 图2 - 1 系统体系结构图 t h es y s t a mf r a m e w o r kd r a w i n g 在图2 一l 所示的系统体系结构中,系统由三大部分组成。g u i 为用户操作界 面,负责系统与用户的交互;中间部分是系统的核心部分,这里包含了实现逆向分 析功能的逻辑处理。它由三个模块组成:d a t aa n a l y s i s 代码分析模块负责进 行源代码的分析,找到系统的组成单元及单元相关的信息;d a t ao r g a n i z a t i o n 一 一数据组织模块负责将分析结果记入数据组织模型,并能通过关键字等在模型或数 据库中查找相应的对象元素;s y s t e ma b s t r a c t 一抽象处理模块负责从系统的数 据组织模型中抽象出系统的结构,并采用一种表示形式将结果输出;s y s t e m 北京工业大学工学硕士学位论文 r e p o s i t o r y 是系统的中心库,这里面存放着系统的可重用资源,例如代码抽取模 式、类图抽象规则、文档模版定义信息等。这种体系结构具有如下的特点: f 1 ) 易于维护和扩充 系统结构和功能的维护 整个系统由具有相对独立功能的模块组成。其中,数据组织模块在系统 的核心部分起着连接代码分析和系统抽象的作用。核心中的三个模块基本上 是按照逆向工程分析过程中的三个环节进行划分的。三部分各有其理论体系 和方法论。随着研究的深入和优秀成果的出现,各个部分将不可避免的面临 着变更,这样可以使系统在随着科技的进步进行维护时变得更加容易。 语言支持能力的维护 逆向分析工具的研究不应该只限于一种语言,所以对于所建立的逆向分 析系统应该是尽可能的面向所有语言的。系统将与语言相关的代码抽取模式 放在了中心库中,随着不同语言的代码抽取模式的出现,可以在需要扩充和 修改代码抽取模式时通过修改中心库的内容来实现这种对象支持度的扩充。 ( 2 ) 易于和再工程平台进行集成 逆向工程是再工程过程的一部分,所以逆向工程工具的建立要考虑到为 再工程过程服务,也就是集成到再工程自动化平台上。从图中可以看到,系 统得设计采用了面向对象的设计方法。在应用到再工程平台上时,系统被抽 象为一个对象类。在再工程平台上通过实现这一对象类的实例,并调用这一 对象类的方法和属性就可以获得逆向工程的支持。同时,为了能够使输出的 信息满足自动化平台的要求,这种输出信息的格式应尽量便于再工程平台利 用:而且,系统提供的外部接口也应尽量符合标准接口的定义。 ( 3 ) 易于实现重用 这里所说的重用有两方面: 处理逻辑的重用 第2 章逆向分析系统框架研究 因为不同语言对象的分柝逻辑是雷同的,不同的是代码的抽取模式。所 以代码分析阶段的代码抽取模式可以根据语言特点从中心库中获得,而处理 逻辑不变; 模式的重用 针对不同语言的代码抽取模式集会出现交集,在中心库中可以将这部分 交集对不同的抽象集合共用。另外,对生成的文档模版不同的用户有不同的 需要,系统可以将不同的文档模版自动采集到中心库中以实现文档模版的重 用。这样,采用中心库的方式可以在最大程度上实现资源重用。 2 1 2 系统的核心 逆向工程的过程大致可分为三个阶段:程序理解、系统理解、设计恢复。其中 的程序理解可以分为代码分析和数据组织;系统理解和设计恢复可以归结为系统抽 象。因此,可以将逆向工程过程总结为:代码分析、数据组织和系统抽象三个环 节。这三个环节对应到体系结构图核心部分的三个模块: 代码分析模块( d a t ah n a l y s i s ) 代码分析模块负责从代码中抽取出组成元素及其相关信息,并根据元素的 属性将其传递给数据组织模块。针对不同的语言和对象,代码分析会有不同的 抽取模式,因此,对具体对象进行分析时的代码分析器需要动态的产生。有关 这部分内容将在第4 章中详细论述。 数据组织模块( d a t ao r g a n i z a t i o n ) 数据组织模块负责处理和数据模型有关的问题,它执行的操作主要有: ( 1 ) 接收来自代码分析模块的元素信息,然后建立元素对象,并将对象放入 模型中的相应位置上; ( 2 ) 根据其他模块的需要,提供在数据模型中查询的操作,并将结果返回给 查询需求方; ( 3 ) 将目标系统的分析结果从数据模型中写入数据库,或从数据库中将目标 系统的分析结果读出,填入数据模型中; 北京工业大学工学硕士学位论文 数据组织模块的工作是围绕数据模型进行的,有关数据模型的讨论参照第 3 章的内容。 系统抽象模块( s y s t e ma b s t r a c t ) 抽象模块负责从系统的数据模型中分析出系统的结构以及抽象信息,然后 根据需要将结果信息生成详细设计书类文档或类图的形式。本文将在第5 章中 讨论有关系统抽象的方法和策略的问题。 2 2 系统详细设计 整个系统的实现主要包括以下几个类: ( 1 ) c l s r e v e r s e 类:整个系统的功能和结果被抽象为该类的方法和属性。 ( 2 ) e x t r a c t o r 类:负责读取文件,提取信息。 ( 3 ) d a t a m a n a g e r 类:负责将数据存储到高层数据模型中以及负责数据模型与用 户数据库的数据交换。 ( 4 ) h b s t r a c t o r 类:负责根据用户的需要抽象出系统的文档信息。 ( 5 ) p r e p r o c e s s o r 类:负责对文本进行预处理,包括删除无用的注释、将分行 书写的逻辑语句合并为一行等。 ( 6 ) d o c m o d e l s 类:负责对文档模版的管理。 ( 7 ) r u l e r s 类:负责管理具有语言特性的代码抽取规则和类图抽象规则。 ( 8 ) d a t a m o d e l 类:提取的结果信息在内存中的存储结构。 ( 9 ) d o c c r e a t e 类:负责按照用户定义的文档格式生成详细设计书类文档。 ( 1 0 ) d b v i s i t o r 类:负责系统与数据库的交互。 这些类之间的关系如图2 - 2 所示: 第2 章逆向分析系统框架研究 图2 - 2 系统类图 t h ec l a s sd i a g r a mo ft h es y s t e m 2 3 逆向分析工具与再工程平台的集成 再工程自动化平台离不开逆向工程工具的支持,所以让逆向工程工具能够集成 到再工程自动化平台上运行是很有必要的。系统在设计时考虑

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论