系统架构设计师学习之路(21)

4.5 软件的重用

软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。
软件元素包括需求分析文档、设计文档、程序代码、测试用例和领域知识等。
这些软件元素又称为软部件。
为了能够在软件开发过程中重用现有的软部件,必须在此之前进行软部件的积累,并将它们组织成软部件库。
软件重用又分为横向重用和纵向重用。
(1)横向重用
指重用不同应用领域中的软件元素,例如数据结构、分类算法和人机界面构件等。标准函数库是一种典型的、原始的横向重用机制。
(2)纵向重用
指在一类具有较多公共性的应用领域之间进行软部件重用。在两个截然不同的应用领域之间实施软件重用的潜力不大,所以纵向重用广受瞩目。
纵向重用活动的主要关键点即是域分析:根据应用领域的特征及相似性预测软部件的可重用性。
一旦根据域分析确认了软部件的重用价值,即可进行软部件的开发,并对具有重用价值的软部件进行一般化,以便他们能够适应新的类似的应用领域。
然后,软部件及其文档即可进入软部件库,成为可供后续开发项目使用的可重用资源。

  • 域分析
  • 软件开发与软部件开发
  • 确认
  • 可重用软部件库
  • 检索
  • 理解

使用重用技术可以减少软件开发活动中大量重复性工作,提高软件生产效率,降低开发成本,缩短开发周期,改善软件质量,软件的软件逆工程灵活性和标准化程度更高。

4.6 逆向工程与重构工程

逆向工程与重构工程是目前预防性维护采用的主要技术。
软件的逆向工程就是分析已有的程序,寻找比源代码更高级的抽象表现形式。一般认为,凡在软件生命周期内将软件某种形式的描述转换成更为抽象形式的活动都可称为逆向工程。
相关概念:

  • 重构:指在同一抽象级别上转换系统描述形式;
  • 设计恢复:指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计的信息(不一定是原设计);
  • 重构工程:也称修复和改造工程,它是在逆向工程所获信息的基础上修改或重构已有系统,产生系统的一个新版本。

1.恢复信息的级别

  • 实现级:包括程序的抽象语法树、符号表等信息;
  • 结构级:包括反映程序分量之间的相互依赖关系的信息,例如调用图、结构图等;
  • 功能级:包括反映程序段功能及程序段之间关系的信息;
  • 领域级:包括反映程序分量或程序诸实体与应用领域概念之间对应关系的信息。

显然,上述信息的抽象程度越高,它与代码的距离就越远,通过逆向工程恢复的难度亦越大,而自动工具支持的可能性相对变小,要求人参与判断和推理的工作增多。

2.恢复信息的方法

  • 用户指导下的搜索与变换:用于导出实现级和结构级信息。
  • 变换式方法,除领域级外所有的抽象级别上的信息都可用此类方法推导。变换式方法又分为不需要维护人员过多干涉的自动分析法(如静态分析和调用图、控制流图生成等)和基于特定库的用户指导变换法。
  • 基于领域知识的,主要用于恢复功能级和领域级信息。领域知识一般用规则库表示,用已确定或假定的领域概念与代码之间的对应关系推导进一步的假设,最后导出程序的功能。该类方法的不确定性最大。
  • 铅板恢复法,仅适用于推导实现级和结构级信息,这些方法用于识别程序设计“铅块”或公共结构,“铅板”既可为一个简单算法,亦可为相对复杂的成分。因铅块与程序之间可能存在多种匹配形式,所以此类方法还包含大量的推理与决策。各类方法采用的输入形式、搜索策略和推理策略都不尽相同。后两类方法又称为基于知识的方法。

尽管每个软件组织都有可能有数百万行代码可供重构,但由于缺乏时机和支持工具或者经济上的得不偿失,往往只有那些决定或移植、或重新设计、或为重用而需验证正确性的程序才被选择实施逆向工程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值