软件工程导论第11章软件重用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第11章 软件重用
重用(reuse)也称为再用或复用,是指同一事物不做 修改或稍加改动就多次重复使用。
软件重用的优点:
(1)提高软件生产率,降低软件生产代价; (2)提高软件质量; (3)互操作性好; (4)推动标准化; (5)支持原型开发。
退出
软件复用就是将已有的软件成分用于构造新的软件系统, 以达到提高软件系统的开发质量与效率,降低开发成本的目 的。
高
测试信息的复用 抽
象
程 度
分析结果的复用
从现有系统的分析结果中提取可复 用构件用于新系统的分析; 主要包括测试用例(test case) 用一份完整的分析文档作为输入, 的复用和测试过程信息的复用。 成生针对不通软硬件平台和其它实现条 件的多项设计; 独立于具体应用,专门开发一些 可被复用的分析结果是针对问题域 可复用的分析构件。
· 用户文档和技术文档。即使针对的应用是不同
的,也经常有可能重用用户文档和技术文档的大部分。 · 用户界面。这可能是最广泛被重用的软件成分, GUI(图形用户界面)软件经常被重用。因为它可占到一 个应用程序的60%代码量,因此,重用的效果非常显著。
· 数据。在大多数经常被重用的软件成分中,被
重用的数据包括:内部表、列表和记录结构,以及文
输出信息
领域分析 领域语言 复用标准 分类方法 功能/行为模型
领域分析的输入和输出
领域分析不是针对某个特定的软件系统,而是针对一类
软件系统的共同的特征、知识和需求。比需求分析更一般、更 抽象、更广泛的特征。 领域分析(Domain Analysis)是对一类应用系统的共同应 用领域进行系统化分析,以发现该领域的共同知识、需求及其应 用系统的共同特征。 领域分析又称领域工程(Domain Engineering),是软件工 程的发展与延伸。 领域分析是一项比系统分析更难的工作。领域分析方法可
生产者复用 (为复用开发构件)
建立构件
消费者复用 (使用构件开发应用)
组装应用
生产者复用与消费者复用
软件复用的困难
复用具有许多明显的优点,目前应用不广泛的主要原因是: (1)技术因素 构件与应用系统之间的差异; 构件要达到一定的规模,才能支持有效的复用; 发现合用构件的困难; 基于复用的软件开发方法和软件过程需要一些新的理论、 技术及支持环境。
件和完整的数据库。 · 测试用例。一旦设计或代码构件将被重用,相 关的测试用例应该“附属于”它们。
11.2
ቤተ መጻሕፍቲ ባይዱ11.2.1
软件重用过程
构件组装模型
“重用”应该是每个软件过程的一个不可缺少的 组成部分。图11.1所示的构件组装模型,举例说明了 怎样把一个可重用的软件构件库集成到典型的演化过 程模型中。
图11.1
构件组装模型
11.2.2
类构件
利用面向对象技术,可以比较方便、有效地实现
软件重用。面向对象技术中的“类”,是比较理想的
可重用的软构件,不妨称之为类构件,在上一小节中 讲述的构件组装模型,就是利用类构件来构造应用程 序。 1. 可重用的软构件应具备的特点 (1) 模块独立性强 (2) 具有高度可塑性 (3) 接口清晰、简明、可靠
图11.2
一个强调重用的过程模型
11.3 领域工程
领域工程的目的是,标识、构造、分类和传播一
组软件成分,在特定的应用领域中这些软件成分可适 用于现有的和未来的软件系统。其总体目标是,建立 相应的机制,使得软件工程师可以在新的或现有的系 统中分享这些软件成分——重用它们。 领域工程包括三个主要的活动,它们是分析、构 造和传播。
1.横向复用(horizontal reuse)也称为水平 复用,是指复用活动的范围跨越了几个不同的应 用领域,复用的软件产品主要包括数据结构、通 用算法、人机界面等软件元素。 2.纵向复用(vertical reuse)也称为垂直复 用,是指复用活动的范围限制在同一个应用领域 或者是一类具有较多共性的应用领域内。
的某些事物或某些问题的抽象程度 更高的解法。 受实际环境影响小,可复用机会多, 所需修改少。 包括目标代码,也包括文本形式的 源代码。
设计结果的复用
低
代码的复用
软件成分的重用可以进一步划分成以下三个级别。
(1) 代码重用 (2) 设计结果重用 设计结果重用指的是,重用某个软件系统的设计模型(即求解域 模型)。这个级别的重用有助于把一个应用系统移植到完全不同的 软/硬件平台上。
一个可重用的软件成分的领域特征集可以表示为 {DP},集合中每一项DPi表示一个特定的领域特征。
赋给DPi的值表示等级,它指出该特征与软件成分P的 相关性。典型的等级如下。
· 与重用是否合适不相关。 · 仅在特殊情况下才相关。 · 相关,但存在差异无关紧要,该软件成分经过 修改后仍然可以被使用。 · 明显相关,如果新软件不具有此特征,虽然重 用仍然是可能的,但却是低效的。 · 很相关,如果新软件不具有此特征,重用将是 非常低效的,此时不推荐重用。 当在该应用领域中要开发一个新软件w时,可以为 它导出一组领域特征{Dw},然后比较DPi与Dwi,以决 定是否现存的软件成分P可以在应用系统w中有效地重 用。 表11.1列出了可能对软件重用有影响的典型的领 域特征,为了有效地重用软件成分,必须考虑这些领 域特征。
· 成本估计。因为在不同项目中经常含有类似的
功能,所以有可能在只做极少修改或根本不做修改的 情况下,重用对该功能的成本估计结果。 · 体系结构。即使在考虑不同的应用领域时,也 很少有截然不同的程序和数据体系结构。因此,有可 能创建一组类属的体系结构模板(例如,事务处理体系 结构),并把那些模板作为可重用的设计框架。 · 需求模型和规格说明。类和对象的模型及规格
11.2.3
重用过程模型
为了实现软件重用,已经提出了许多过程模型, 这些模型都强调领域工程与软件工程同时进行。领域 工程完成一系列工作,以建立一组可以被软件工程师 重用的软件成分。 图11.2给出了一个典型的明显适用于重用的过程 模型。领域工程创建应用领域的模型,在软件工程流 中使用该模型作为分析用户需求的基础。软件体系结 构及相应的结构点(见11.3.3节)为应用系统的设计提 供了输入信息。最后,在可重用的软件成分作为领域 工程的一部分被构造出来之后,它们可以在软件开发 活动中被软件工程师使用。
图2
典型的重用的过程模型,描述了领域工程与软件工程的关系。
领域工程
领域分析 设计软件 体系结构 开发可重用 的软件成分
领域 模型
结构 模型
中心库
可重用软件 成分/构件
软件工程
系统分析 用户 需求
规格说明 与设计
建造
系统规 格说明
分析与 设计模型
应用 软件
重用的过程模型
11.3.1
分析过程
领域分析过程基本上由下述步骤组成。 · 定义被研究的领域。 · 把从该领域中抽取出来的项分类。 · 收集该领域中有代表性的应用样本。
可 复 用 的 软 件 成 分 , 也 称 为 可 复 用 构 件 (Reusable Component)可从旧软件中提取,也可以专门为复用而开发。
软件复用不仅是对程序的复用,它包括对软件生产过程 中任何活动所产生的制成品的复用。如:项目计划、可行性 报告、需求定义、分析模型、详细说明、源程序和测试用例 等等。
采用结构化方法和面向对象方法,而后者将成为主流。
11.3.2
领域特征
为了确定一个可能可重用的软件成分在特定情况 下是否确实可以被使用,有必要定义一组领域特征, 这些特征是该领域中所有软件共有的。领域特征定义 了该领域中所有产品共有的类属属性,例如,安全(或
可靠性)的重要性,程序设计语言,处理中的并发性等。
二、基于软件复用的软件开发过程的角度分
1.生产者复用(product reuse)
指建立、获取或者重新设计可复用构件的活动。涉及到的活 动包括:复用的规划、领域分析、构件的开发、构件库的组织和 管理。 2.消费者复用(consumer reuse) 指使用可复用的构件建立新的系统的活动。涉及到的活动包 括:应用系统的规划、构件的检索和选择、应用系统中非复用部 分的开发、应用系统的组装。
11.6 软件重用的效益
11.7 小结
11.1 可重用的软件成分
广义地说,软件重用可划分成以下三个层次:①
知识重用(例如,软件工程知识的重用);②方法和标 准的重用(例如,面向对象方法或国家标准局制定的软 件开发规范或某些国际标准的重用);③软件成分的重 用。本章仅讨论软件成分的重用问题。
三种方式复用:
11.4
11.4.1
开发可重用的构件
为了重用的分析与设计
2. 类构件的重用方式 (1) 实例重用 (2) 继承重用 面向对象方法特有的继承性,提供了一种对已有 的类构件进行裁剪的机制。当已有的类构件不能通过 实例重用完全满足当前系统需求时,继承重用提供了 一种安全地修改已有类构件,以便在当前系统中重用 的手段 (3) 多态重用 利用多态性不仅可以使对象的对外接口更加一般 化(基类与派生类的许多对外接口是相同的),从而降 低了消息连接的复杂程度,而且还提供了一种简便可 靠的软构件组合机制,系统运行时,根据接收消息的 对象类型,由多态性机制启动正确的方法,去响应一 个一般化的消息,从而简化了消息界面和软构件连接 过程。
· 分析每个应用样本。
· 开发对象的分析模型。
领域分析是对特定应用领域中共同的特征、知识、需
求的标识、分析和规约。领域分析是特定领域内软件重用的
基础,它的目标就是:发现和挖掘在特定领域内可以被复用 的构件。领域分析活动中输入和输出如图所示:
输入信息
技术文献 已有应用 专家经验/建议 当前与未来的需求
(2)人的因素
喜欢自己创造而不喜欢使用别人的东西。
软件复用的困难
(3)管理因素
把复用构件和一般软件构件同等看待,把复用看作可有可
无的事。
(4)教育因素
软件科学技术的教育与培训中,缺乏关于软件复用的内容, 缺少专门教材和课程。
11.1 可重用的软件成分 11.2 软件重用过程 11.3 领域工程 11.4 开发可重用的构件 11.5 分类和检索构件
(3) 分析结果重用
这是一种更高级别的重用,即重用某个系统的分析模型。这种 重用特别适用于用户需求未改变,但系统体系结构发生了根本变化 的场合。更具体地说,可能被重用的软件成分主要有以下10种。
· 项目计划。软件项目计划的基本结构和许多内容(例如,SQA 计划)都是可以跨项目重用的。这样做减少了用于制定计划的时间, 也降低了与建立进度表和进行风险分析等活动相关联的不确定性。
说明是明显的重用的候选者,此外,用传统软件工程
方法开发的分析模型(例如,数据流图),也是可重用 的。
· 设计。用传统方法开发的体系结构、数据、接 口和过程设计结果,是重用的候选者,更常见的是, 系统和对象设计是可重用的。 · 源代码。用兼容的程序设计语言书写的、经过 验证的程序构件,是重用的候选者。
软件生产过程主要是正向过程,即软件产品从抽象级别较高
的形态向抽象级别较低的形态演化,所以较高级别的复用容易带
动较低级别的复用,反之则不然。 复用级别越高,可得到的回报也越大,因此分析软件 (Analysis Ware)和设计软件(Design Ware)的复用备受重视。
软件复用的形式
一、按照重用活动所跨越的应用领域的类型分
表 11.1 影响重用的领域特征 产品 需求稳定性 并发软件 内存限制 应用大小 用户界面复杂性 程序设计语言 安全/可靠性 寿命需求 产品质量 产品可靠性 过程 过程模型 过程符合性 项目环境 进度限制 预算限制 生产率 人员 动机 教育 经验/培训 · 应用领域 · 过程 · 平台 · 语言 开发队伍 生产率
即使待开发的软件明显属于某个应用领域,对该 领域中可重用的软件成分也必须加以分析,以确定它 们在当前项目中的可重用性。在少数情况下,从头开 发可能仍然是成本最低的途径。 11.3.3 结构建模和结构点
每个应用领域都可以用一个结构模型来刻画(例如,
不同飞行器飞行控制系统的细节差别很大,但是在该 领域的所有现代软件都具有相同的结构模型),因此, 结构模型是一种体系结构制品,它可以也应该在该领 域内的所有应用系统中被重用。
重用(reuse)也称为再用或复用,是指同一事物不做 修改或稍加改动就多次重复使用。
软件重用的优点:
(1)提高软件生产率,降低软件生产代价; (2)提高软件质量; (3)互操作性好; (4)推动标准化; (5)支持原型开发。
退出
软件复用就是将已有的软件成分用于构造新的软件系统, 以达到提高软件系统的开发质量与效率,降低开发成本的目 的。
高
测试信息的复用 抽
象
程 度
分析结果的复用
从现有系统的分析结果中提取可复 用构件用于新系统的分析; 主要包括测试用例(test case) 用一份完整的分析文档作为输入, 的复用和测试过程信息的复用。 成生针对不通软硬件平台和其它实现条 件的多项设计; 独立于具体应用,专门开发一些 可被复用的分析结果是针对问题域 可复用的分析构件。
· 用户文档和技术文档。即使针对的应用是不同
的,也经常有可能重用用户文档和技术文档的大部分。 · 用户界面。这可能是最广泛被重用的软件成分, GUI(图形用户界面)软件经常被重用。因为它可占到一 个应用程序的60%代码量,因此,重用的效果非常显著。
· 数据。在大多数经常被重用的软件成分中,被
重用的数据包括:内部表、列表和记录结构,以及文
输出信息
领域分析 领域语言 复用标准 分类方法 功能/行为模型
领域分析的输入和输出
领域分析不是针对某个特定的软件系统,而是针对一类
软件系统的共同的特征、知识和需求。比需求分析更一般、更 抽象、更广泛的特征。 领域分析(Domain Analysis)是对一类应用系统的共同应 用领域进行系统化分析,以发现该领域的共同知识、需求及其应 用系统的共同特征。 领域分析又称领域工程(Domain Engineering),是软件工 程的发展与延伸。 领域分析是一项比系统分析更难的工作。领域分析方法可
生产者复用 (为复用开发构件)
建立构件
消费者复用 (使用构件开发应用)
组装应用
生产者复用与消费者复用
软件复用的困难
复用具有许多明显的优点,目前应用不广泛的主要原因是: (1)技术因素 构件与应用系统之间的差异; 构件要达到一定的规模,才能支持有效的复用; 发现合用构件的困难; 基于复用的软件开发方法和软件过程需要一些新的理论、 技术及支持环境。
件和完整的数据库。 · 测试用例。一旦设计或代码构件将被重用,相 关的测试用例应该“附属于”它们。
11.2
ቤተ መጻሕፍቲ ባይዱ11.2.1
软件重用过程
构件组装模型
“重用”应该是每个软件过程的一个不可缺少的 组成部分。图11.1所示的构件组装模型,举例说明了 怎样把一个可重用的软件构件库集成到典型的演化过 程模型中。
图11.1
构件组装模型
11.2.2
类构件
利用面向对象技术,可以比较方便、有效地实现
软件重用。面向对象技术中的“类”,是比较理想的
可重用的软构件,不妨称之为类构件,在上一小节中 讲述的构件组装模型,就是利用类构件来构造应用程 序。 1. 可重用的软构件应具备的特点 (1) 模块独立性强 (2) 具有高度可塑性 (3) 接口清晰、简明、可靠
图11.2
一个强调重用的过程模型
11.3 领域工程
领域工程的目的是,标识、构造、分类和传播一
组软件成分,在特定的应用领域中这些软件成分可适 用于现有的和未来的软件系统。其总体目标是,建立 相应的机制,使得软件工程师可以在新的或现有的系 统中分享这些软件成分——重用它们。 领域工程包括三个主要的活动,它们是分析、构 造和传播。
1.横向复用(horizontal reuse)也称为水平 复用,是指复用活动的范围跨越了几个不同的应 用领域,复用的软件产品主要包括数据结构、通 用算法、人机界面等软件元素。 2.纵向复用(vertical reuse)也称为垂直复 用,是指复用活动的范围限制在同一个应用领域 或者是一类具有较多共性的应用领域内。
的某些事物或某些问题的抽象程度 更高的解法。 受实际环境影响小,可复用机会多, 所需修改少。 包括目标代码,也包括文本形式的 源代码。
设计结果的复用
低
代码的复用
软件成分的重用可以进一步划分成以下三个级别。
(1) 代码重用 (2) 设计结果重用 设计结果重用指的是,重用某个软件系统的设计模型(即求解域 模型)。这个级别的重用有助于把一个应用系统移植到完全不同的 软/硬件平台上。
一个可重用的软件成分的领域特征集可以表示为 {DP},集合中每一项DPi表示一个特定的领域特征。
赋给DPi的值表示等级,它指出该特征与软件成分P的 相关性。典型的等级如下。
· 与重用是否合适不相关。 · 仅在特殊情况下才相关。 · 相关,但存在差异无关紧要,该软件成分经过 修改后仍然可以被使用。 · 明显相关,如果新软件不具有此特征,虽然重 用仍然是可能的,但却是低效的。 · 很相关,如果新软件不具有此特征,重用将是 非常低效的,此时不推荐重用。 当在该应用领域中要开发一个新软件w时,可以为 它导出一组领域特征{Dw},然后比较DPi与Dwi,以决 定是否现存的软件成分P可以在应用系统w中有效地重 用。 表11.1列出了可能对软件重用有影响的典型的领 域特征,为了有效地重用软件成分,必须考虑这些领 域特征。
· 成本估计。因为在不同项目中经常含有类似的
功能,所以有可能在只做极少修改或根本不做修改的 情况下,重用对该功能的成本估计结果。 · 体系结构。即使在考虑不同的应用领域时,也 很少有截然不同的程序和数据体系结构。因此,有可 能创建一组类属的体系结构模板(例如,事务处理体系 结构),并把那些模板作为可重用的设计框架。 · 需求模型和规格说明。类和对象的模型及规格
11.2.3
重用过程模型
为了实现软件重用,已经提出了许多过程模型, 这些模型都强调领域工程与软件工程同时进行。领域 工程完成一系列工作,以建立一组可以被软件工程师 重用的软件成分。 图11.2给出了一个典型的明显适用于重用的过程 模型。领域工程创建应用领域的模型,在软件工程流 中使用该模型作为分析用户需求的基础。软件体系结 构及相应的结构点(见11.3.3节)为应用系统的设计提 供了输入信息。最后,在可重用的软件成分作为领域 工程的一部分被构造出来之后,它们可以在软件开发 活动中被软件工程师使用。
图2
典型的重用的过程模型,描述了领域工程与软件工程的关系。
领域工程
领域分析 设计软件 体系结构 开发可重用 的软件成分
领域 模型
结构 模型
中心库
可重用软件 成分/构件
软件工程
系统分析 用户 需求
规格说明 与设计
建造
系统规 格说明
分析与 设计模型
应用 软件
重用的过程模型
11.3.1
分析过程
领域分析过程基本上由下述步骤组成。 · 定义被研究的领域。 · 把从该领域中抽取出来的项分类。 · 收集该领域中有代表性的应用样本。
可 复 用 的 软 件 成 分 , 也 称 为 可 复 用 构 件 (Reusable Component)可从旧软件中提取,也可以专门为复用而开发。
软件复用不仅是对程序的复用,它包括对软件生产过程 中任何活动所产生的制成品的复用。如:项目计划、可行性 报告、需求定义、分析模型、详细说明、源程序和测试用例 等等。
采用结构化方法和面向对象方法,而后者将成为主流。
11.3.2
领域特征
为了确定一个可能可重用的软件成分在特定情况 下是否确实可以被使用,有必要定义一组领域特征, 这些特征是该领域中所有软件共有的。领域特征定义 了该领域中所有产品共有的类属属性,例如,安全(或
可靠性)的重要性,程序设计语言,处理中的并发性等。
二、基于软件复用的软件开发过程的角度分
1.生产者复用(product reuse)
指建立、获取或者重新设计可复用构件的活动。涉及到的活 动包括:复用的规划、领域分析、构件的开发、构件库的组织和 管理。 2.消费者复用(consumer reuse) 指使用可复用的构件建立新的系统的活动。涉及到的活动包 括:应用系统的规划、构件的检索和选择、应用系统中非复用部 分的开发、应用系统的组装。
11.6 软件重用的效益
11.7 小结
11.1 可重用的软件成分
广义地说,软件重用可划分成以下三个层次:①
知识重用(例如,软件工程知识的重用);②方法和标 准的重用(例如,面向对象方法或国家标准局制定的软 件开发规范或某些国际标准的重用);③软件成分的重 用。本章仅讨论软件成分的重用问题。
三种方式复用:
11.4
11.4.1
开发可重用的构件
为了重用的分析与设计
2. 类构件的重用方式 (1) 实例重用 (2) 继承重用 面向对象方法特有的继承性,提供了一种对已有 的类构件进行裁剪的机制。当已有的类构件不能通过 实例重用完全满足当前系统需求时,继承重用提供了 一种安全地修改已有类构件,以便在当前系统中重用 的手段 (3) 多态重用 利用多态性不仅可以使对象的对外接口更加一般 化(基类与派生类的许多对外接口是相同的),从而降 低了消息连接的复杂程度,而且还提供了一种简便可 靠的软构件组合机制,系统运行时,根据接收消息的 对象类型,由多态性机制启动正确的方法,去响应一 个一般化的消息,从而简化了消息界面和软构件连接 过程。
· 分析每个应用样本。
· 开发对象的分析模型。
领域分析是对特定应用领域中共同的特征、知识、需
求的标识、分析和规约。领域分析是特定领域内软件重用的
基础,它的目标就是:发现和挖掘在特定领域内可以被复用 的构件。领域分析活动中输入和输出如图所示:
输入信息
技术文献 已有应用 专家经验/建议 当前与未来的需求
(2)人的因素
喜欢自己创造而不喜欢使用别人的东西。
软件复用的困难
(3)管理因素
把复用构件和一般软件构件同等看待,把复用看作可有可
无的事。
(4)教育因素
软件科学技术的教育与培训中,缺乏关于软件复用的内容, 缺少专门教材和课程。
11.1 可重用的软件成分 11.2 软件重用过程 11.3 领域工程 11.4 开发可重用的构件 11.5 分类和检索构件
(3) 分析结果重用
这是一种更高级别的重用,即重用某个系统的分析模型。这种 重用特别适用于用户需求未改变,但系统体系结构发生了根本变化 的场合。更具体地说,可能被重用的软件成分主要有以下10种。
· 项目计划。软件项目计划的基本结构和许多内容(例如,SQA 计划)都是可以跨项目重用的。这样做减少了用于制定计划的时间, 也降低了与建立进度表和进行风险分析等活动相关联的不确定性。
说明是明显的重用的候选者,此外,用传统软件工程
方法开发的分析模型(例如,数据流图),也是可重用 的。
· 设计。用传统方法开发的体系结构、数据、接 口和过程设计结果,是重用的候选者,更常见的是, 系统和对象设计是可重用的。 · 源代码。用兼容的程序设计语言书写的、经过 验证的程序构件,是重用的候选者。
软件生产过程主要是正向过程,即软件产品从抽象级别较高
的形态向抽象级别较低的形态演化,所以较高级别的复用容易带
动较低级别的复用,反之则不然。 复用级别越高,可得到的回报也越大,因此分析软件 (Analysis Ware)和设计软件(Design Ware)的复用备受重视。
软件复用的形式
一、按照重用活动所跨越的应用领域的类型分
表 11.1 影响重用的领域特征 产品 需求稳定性 并发软件 内存限制 应用大小 用户界面复杂性 程序设计语言 安全/可靠性 寿命需求 产品质量 产品可靠性 过程 过程模型 过程符合性 项目环境 进度限制 预算限制 生产率 人员 动机 教育 经验/培训 · 应用领域 · 过程 · 平台 · 语言 开发队伍 生产率
即使待开发的软件明显属于某个应用领域,对该 领域中可重用的软件成分也必须加以分析,以确定它 们在当前项目中的可重用性。在少数情况下,从头开 发可能仍然是成本最低的途径。 11.3.3 结构建模和结构点
每个应用领域都可以用一个结构模型来刻画(例如,
不同飞行器飞行控制系统的细节差别很大,但是在该 领域的所有现代软件都具有相同的结构模型),因此, 结构模型是一种体系结构制品,它可以也应该在该领 域内的所有应用系统中被重用。