一篇有关再工程中的逆向工程的文章 :: 真水无香――我的典型生活

来源: BlogBus 原始链接: http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=241832 存档链接: https://web.archive.org/web/20040814130155id_/http://www.blogbus.com:80/blogbus/blog/diary.php?diaryid=241832


真水无香――我的典型生活 有时候感到很无奈,有时候感到很无聊,有时候感到很无助,更多时候感到很无知......但是,我还是要继续热爱它,anymay,它是我最可信赖,最可依靠的――我的知识,我的专业。我想叫它做我未来的基石。 <<<今天听了研二的开题报告。 | 首页 | 终于如愿以偿。>>> 一篇有关再工程中的逆向工程的文章 时间:2004-06-29 对再工程中的逆向工程的理解 一.前言 在 27 章《再工程》中,讨论的是在组织中的一项工程在需要重新修改,构建以适应新工作环境,任务的时候,所需要采取的方法,原则,规范,步骤等等。 其中接触到了许多新的概念,比如,逆向工程等等。让人很感兴趣,并希望可以继续深入了解一些相关的知识。在翻译第 27 章之前,我从未接触过这些名词。即便是在翻译之后,我对它们也谈不上有什么认识,给我的感觉只是新的概念而已。但是,它们到底是怎样工作的?怎样对再工程产生作用的?等等一系列问题困扰着我,使我很想进一步对它们有所了解。 其实,我想对于大多数的人来说,就算读通了这一章的文字,也不一定明白这其中的含义。我就是这样的。的确,对于这种应用性,操作性很强的工作单凭几句单薄的定义,介绍是无法让人有深刻的理解的。所以,我又从网上和其他渠道找到了一些其他的资料,个人觉得通过这些我加强了对第 27 章《再工程》的理解。 二.逆向工程 在翻译第 27 章之前,我从未接触过“逆向工程”这个名词。对我而言它是个崭新的概念。但是,它作为看似与再工程互逆 的一个过程到底是怎样工作的呢?怎样对再工程产生作用的?会不会仅仅是如同字面上的理解,与工程的进行会相互抵消呢?等等一系列问题困扰着我 在 27 章中,有关逆向工程的介绍是这样的: 1 .逆向工程可以从原程序中提取出设计信息,但是抽象的层次、文档的完整性、工具和分析员一起工作的程度以及过程的方向却存在高度的可变性。 2 .逆向工程过程:在逆向工程活动可以开始前,无结构的源代码被重构,使其仅包含结构化的程序设计构成元素,因此源代码容易阅读并为所有后续的逆向工程活动提供基础。 3 .核心活动是:提取抽象――工程师评价旧程序并从源代码中提取出被完成的处理、被应用的用户界面和被使用的程序数据结构或数据库的富有意义的规约。 正如上文说过的那样,逆向工程是一项操作性很强的工作,仅仅依靠文字层面的介绍无法满足我们的理解需求,所以下面将介绍一个有关逆向工程实际操作的案例,来丰富我们对它的认识。 2.1 逆向工程的实践 2.1.1 简介 1998 年, NEWPOWER 启动了逆向工程的一些项目,要求是把客户的现有源代码转变成设计,如果需要的话, 进一步转化成产品需求规约。 这恰恰与类似于 V 模型的标准开发过程模型相逆。这样一来,客户就可以容易地维护他们的产品(需求,设计,源代码,等等),而不需要想以前那样,每次改动产品都需要直接修改源代码。 因此我们需要为新项目的开发定义新的过程。一个定义良好的一致的过程不仅可以减少过程定义中的错误, 还可以为持续的改进和优化奠定基础。 Top Power I 发布之后我们定义了标准的逆向工程过程。 Top Power I 使用的是考究的瀑布模型。定义之后我们开始了另一个逆向工程项目,也就是 Top Power II 。该项目将实施刚刚定义的过程。 基准将定义在 Top Power I 和 Top Power II 之间。 2.1.2 标准过程模型 下面是 NEWPOWER 定义的一个典型的标准逆向工程项目的模型。 其中 ReqB 表示需求汇集和项目策划。 各个阶段的定义都相当清楚。 2.1.3 Top Power I 过程定义 Top Power I 过程的定义过程如果不是荆棘密布就是困难重重。它需要对过程模型做重大改变。这最终导致组织逆向工程过程的产生。 与 NEWPOWER 的主流项目相比,做为逆向项目的 Top Power I 有以下特殊性: ・ 虽然产品需要验证和确认,但是不存在单元测试或集成测试,也没有系统测试。产品质量很大程度上依赖于人为因素。 ・ 需要新的度量来支持项目管理和产品开发,比如说,由于交付的是文档而不是源代码,效率不能简单地用产品的 KAELOC 总值与全部人力资源的比来衡量。 ・ 其它的考虑包括:基于设计的原始资料,需要做多少抽象?如何处理客户对细小格式或风格改进的反馈?这些细节不大可能会具体定义在需求规约里,那么它们是算缺陷呢还是其它?如果没有相关的参考资料,在项目策划中如何分配阶段性的人力和质量目标?等等。 以下是 Top Power I SPM P 1.0.0 定义的过程模型: 在需求分析阶段,项目组应该只作出设计的模板(根据顾客需求)作为可交付工件。实际上在这个阶段更多的时间花在了培训上。在文档阶段,建立设计文档。在验证阶段,对验证和确认进行评审和审查。 对以上模型的一些问题和考虑: ・ 如果只产生一个模板,不一定要做需求分析。 ・ 对于复杂而庞大的系统,如果没有构架上的最少准备,直接了当的设计恢复如果不是不可能那也会困难重重。只有充分理解了构架,才有可能有效地分配人力和资源。这些准备也减轻了领域培训的压力, 并且加速设计的恢复。 ・ 设计的验证不应该放在不同的阶段。在设计恢复过程中要评审和审查进展。一个项目不能等到设计全部完成之后才做验证。 确认毕竟不等同于软件测试。对标准逆向工程过程定义作出贡献的是那些点子和其它因素。 2.1.4 为 Top Power II 量身订做的过程模型 根据客户的需求和项目特性等, Top Power II 项目组使用了以下逆向工程模型: 量身订做的依据: ・ 客户没有要求恢复产品需求,需求恢复阶段在此略去。 ・ 客户要求额外的验收评审阶段,以用于评审 NEWPOWER 提供的设计文档,提供改进意见。修改完成之后,发布产品。 与 Top Power I 不同 , Top Power II 的过程模型在需求汇集和项目策划阶段确定之后没有任何变更。这说明了逆向工程过程的适用。 Top Power II 与 Top Power I 相比,主要的不同在于引进了代码分析阶段。以下是引自 REV98 关于代码分析阶段的描述: 该阶段的目的在于理解和分析整个现有系统及其相关工件,提炼系统原有逻辑抽象。 2.2 对这一过程的总结 以上的这些内容是对某一具体项目的逆向工程的描述,针对性较强,如果没有接触过这一项目,在理解上可能是会很难的。可能对于这些没有经过实际项目的人来说,胡比较抽象一点,但毕竟这就是逆向工程的实际应用,这是由理论到实践的必经之路。 以下是从这一具体过程中提升出来一些总结性的理论。有意思的是,我们发现,形成某一理论的正确的过程就是:理论指导――〉实践操作――〉理论总结――〉实践验证。 2.2.1 该阶段的活动: 预览――〉了解系统主要环境――〉把源代码分解成模块――〉找出模块之间的依赖关系和互用性――〉理解和分析核心数据结构和关键模块的系统逻辑――〉了解整个系统以及各个模块的全面功能――〉评审――〉 更新项目策划――〉后置工作 可以看出,该阶段的任务是对代码中类似于功能,子程序,数据结构等最小单元形成有点 “ 高层次 ” 的理解,理解它们之间的交互关系和依赖关系。 我们相信,这些活动将有助于减少每个工程人员寻找源代码线索的而付出的多余的努力。然而,要找出成百上千的功能之间的命令流,这依然是个大工作,使用工具能更好地完成这些任务。 NEWPOWER 为此推出了 Discover ,极大地提高了效率。 2.3 逆向工程软件介绍 在一些相关的资料中,还有很大一部分是介绍有关图形界面领域,工业设计方面的逆向工程的应用。可能与第 27 章中介绍的逆向工程所解决的不是一个层次上的,或者同一范畴的问题,但是,从大量的参考资料看来,逆向工程在这一领域的确实已经取得了比较广泛的应用。 其中比较惹人注目的就是已经有比较成熟的软件了。分别是: 1 . Imageware :由美国 EDS 公司出品,是最著名的逆向工程软件,正被广泛应用于汽车、航空、航天、消费家电、模具、计算机零部件等设计与制造领域。 2 . Geomagic Studio :由美国 Raindrop ( 雨滴 ) 公司出品的逆向工程和三维检测软件 Geomagic Studio 可轻易地从扫描所得的点云数据创建出完美的多边形模型和网格,并可自动转换为 NURBS 曲面。 3 . CopyCAD : CopyCAD 是由英国 DELCAM 公司出品的功能强大的逆向工程系统软件,它能允许从已存在的零件或实体模型中产生三维 CAD 模型。该软件为来自数字化数据的 CAD 曲面的产生提供了复杂的工具。 4 . RapidForm : RapidForm 是韩国 INUS 公司出品的全球四大逆向工程软件之一, RapidForm 提供了新一代运算模式,可实时将点云数据运算出无接缝的多边形曲面,使它成为 3D Scan 后处理之最佳化的接口。 2.3 再回到第 27 章 可以看看第 27 章对逆向工程是怎样介绍的(特指应用逆向工程来了解数据部分): 数据的逆向工程发生在不同的抽象层次。在程序层次,内部的程序代码结构必定会被当作是作用于整个再工程的一部分来逆向的。在系统层次上,全局的数据结构常要进行再工程来供应新的数据库管理范例。对当前的全局数据结构的逆向设置了引进新的系统范围数据库的场所。 内部数据结构 内部程序数据的逆向技术着重于目标类的定义。通过以组合相关程序变量类型为目的的程序代码测试来完成的。例如,记录结构,文件,列表和其他数据结构都提供类的初始指示器。 逆向工程类的方法: 1) 确定程序中记录有关全局数据结构的重要信息的标识和局部数据结构。 2) 定义标记,局部数据结构和全局数据结构之间的关系。例如:当文件空了时设置标记或者局部数据结构将作为从中心数据库来的最近 100 条纪录的缓冲区。 3) 为每一个程序中的变量编号或存档,将所有与其有逻辑关系的变量都列一个表。 这些步骤可是让一个软件工程师确定程序中与全局数据结构有交互的类。 数据库结构 无论逻辑组织还是物理结构,数据库允许定义数据对象和支持一些建立对象间关系的方法。因此,再工程一个数据库转换成另一个必须要理解现有的对象及之间的关系。 用于确定当前数据模型来再工程一个新的数据库模型的步骤。 1. 建立一个初始对象模型 包含在记录或表中的项变成类的属性。 2. 定义候选关键字 检测属性以确定是否用于指向另一个纪录或表格,当作指针使用。 3. 提炼实验性的类 :确定一些相似的类是否可以合并。 4. 确定一般性 :检测有相似属性的类,确定是否应该构造一个高于它一层的类层次。 5. 发现联合 :用工具来建立类之间的联合。 当以上的信息都已确知时,可以使用一系列的变形,将旧的数据库结构转变成新的一个。 可见,在这里介绍的比较详细,结构严谨。分层次,分步骤地进行。 三. 进行对比加深认识 通过从课本里学到的与实践中总结出来的进行对比,可以看出,第 27 章讲的固然结构严谨,但是在实际应用中更应该与具体的工程特点相联系。只有这样,才能使再工程中的逆向工程更好的为工程服务,更好的为我所用,否则如果一味追求形式,则对再工程没有益处,甚至有可能延缓再工程的发展脚步,使这本来就比较新兴的应用型技术的前进步伐落于人后。 当然,在再工程的翻译过程中,我还接触到了许多新的名词,知识,比如代码重构,数据库重构等等,随着我对它们认识的不断加深,我发觉这些都是很值得推广研究的领域,在对一些软件工程方面的网站,论坛的关注过程中,我还是觉得这一部分的资料比较少,希望在以后的学习研究过程中,可以对这一部分的知识进行更加深入的认识,为再工程这一领域在实际应用过程中的推广尽一份力量。 参考资料: 逆向工程过程的实践 51CMM.COM 校译 翻译:曾环 逆向工程与逆向工程软件简介 < 安妮薇 发表于 2004-06-29 00:07 引用Trackback(0) | 编辑 评论 发表评论 最后更新 看中国队比赛――提心吊胆。 身上的线系得更紧了。 终于回来了。 又看了一遍《荆棘鸟》。 honeyweek结束了。 假期底线,不能胖起来. 蓝恋,深蓝,更深的蓝. 我们就是两个小孩子。 缘分呀,啥也别说了。 重温经典之《教父1》 报刊浏览 Dovebear的音乐杂记 广告狂热者 翻译馆 跑跑的右边 最爱老友记 温故而知新 女性杂志 中国电化教育 想做加菲猫 天极――美工设计 月凉如水 我常去的音乐网 与君同行 清眉的流年 勇敢的夏天