可重用软件

软件开发中可以通过对以往成熟软件系统的局部修改和重组,保持整体稳定性以适应新要求的软件

在软件开发中,由于不同的环境和功能要求,我们可以通过对以往成熟软件系统的局部修改和重组,保持整体稳定性,以适应新要求。这样的软件称为可重(chong)用软件。据统计,现今,开发一个新的应用系统,40%~60%的代码是重复以前类似系统的成分,重复比例有时甚至更高。因此,软件重用能节约软件开发成本,真正有效地提高软件生产效率。

定义
软件重用(Software Reuse,又称软件复用或软件再用)的概念对于大家并不陌生。早在1968年的NATO软件工程会议上就已经提出可复用库的思想。软件重用的定义也很多,比较权威和通用的一种是:软件重用是利用事先建立好的软部品创建新软件系统的过程。这个定义蕴含着软件重用所必须包含的两个方面:
1. 系统地开发可重用的软部品。这些软部品可以是代码,但不应该仅仅局限在代码。我们必须从更广泛和更高层次来理解,这样才会带来更大的重用收益。比如软部品还可以是:分析,设计,测试数据,原型,计划,文档,模板,框架等等。
2. 系统地使用这些软部品作为构筑模块,来建立新的系统。
抽象层次
指重用的级别。一般可分为代码重用、设计重用、规范重用和概念重用。设计重用指使用在不同环境下构造的设计。此时应考虑环境中硬件或性能约束带来的影响,从相同的设计可以得到不同的代码。规范重用有同设计重用相似的特征。但从相同的规范可得出不同的设计和不同的代码。代码重用有非常明显的效益,它能大量节省程序设计人员的时间,因此为一般人所接受。但代码重用的问题只能发生在编码阶段,在软件开发过程的早期阶段无法确定是否要重用以及重用带来的影响。在对设计重用的基本理论进行研究的基础上,建立了能够记录概念设计历史的基于功能-行为-结构框架的概念设计信息模型,实现了功能、行为和结构的形式化表示,建立了多粒度层次的概念设计重用框架,才系统成为概念设计重用的系统平台。
另一个困难在于很难找到无需修改即可重用的代码段,其原因是代码一般与其运行环境有着紧密的依赖关系。由于规范和设计尚未考虑表示细节,因此其潜在的重用性是巨大的。另外,重用应在软件开发的前期阶段考虑,所以只有将规范重用、设计重用和代码重用三者结合起来才能真正达到节省软件开发费用,提高软件生产效率的目的。
剪裁方法
软件重用还涉及如何剪裁和修改可重用部件以适应新的要求。
采用的剪裁方法有:
①根本不剪裁
程序设计语言所带的库函数。
②手工剪裁法
即手工修改可重用部件的内部细节,它要求开发人员了解可重用部件的内部详细情况。
③模板修改法
按模板修改比手工剪裁方便且安全,但同手工剪裁一样,仍有可能因修改可重用部件而使其出错。
④类属参数化方法
能保证修改不会使原可重用部件出错 ,但为设计和编码有一定要求。可重用技术中一般都采用此方法。
重用条件
可重用软件应满足如下的条件:
软件系统应是模块化结构。
只有在模块化结构中,模块内部的修改和局部系统的重构(部分模块的替换、部分接口的改动)才不至于影响系统的功能和总体面貌。
软件系统应不依赖于具体的运行环境。
在这种结构的系统中,依赖于具体运行环境的部分可以集中在少数模块。一旦系统环境发生变化,就可以用其他模块加以替换。
软件系统应建立在标准的、统一的数据接口上,即软件系统在建立数据模块进行数据操作时,都要求以标准的数据模式为依据。
这样可以减少系统中模块之间的数据交换和相互依赖关系,并将数据模块的操作集中在少数几个模块进行统一管理。
软件系统应有知识的帮助。
这一要求不是必须的,但在软件系统进行重构、扩充时,知识库系统可以提供并学习系统组合、生成及重用方面的知识,从而提高工作效率、改进工作质量。
好处
1. 提高软件生成率。
2. 缩短开发周期 。
3. 降低软件开发和维护费用。
4. 生产更加标准化的软件。
5. 提高软件开发质量。
7. 减少软件开发人员数量。
8. 使开发人员能比较容易的适应不同性质的项目开发。
形式
软件重用的形式(或手段)很多,重用的级别有大有小。主要有以下几种:
1. 源代码模块或者类一级的重用。这是最基本的软件重用形式。
2. 二进制形式的重用。如组件重用。
3. 组装式重用。比如:把好几个应用程序的功能集成在一起。例如,要建立一个门户站点应用,登陆用户既可以查询天气情况,又可以查看股市行情,还可以在线购物。这些功能由不同网络应用服务供应商提供,通过这种组装式重用,就可以非常容易地把上述功能都集成到新的门户站点中。
4. 分析级别重用。
5. 设计级别重用。
6. 软件文档重用。
分类
为软件重用分类比较困难,因为软件重用技术众多,一种重用技术可以包括多种重用形式。比如说:框架即可以包括代码级重用,也可以包括设计级重用。有一种分类方法是按照软件重用所应用的领域范围,把重用划分为两种:横向重用和纵向重用。
横向重用
指重用不同应用领域中的软件元素,例如数据结构、分类算法、人机界面构件等。标准函数库是一种典型的原始的横向重用机制,标准函数库也是最常用的横向重用。
纵向重用
指在一类具有较多公共性的应用领域之间进行软部品重用。因为在两个截然不同的应用领域之间实施软件重用非常困难,潜力不大,所以纵向重用才广受瞩目,并成为软件重用技术的真正所在。纵向重用活动的主要包括以下几个步骤:
1) 首先进行域分析。根据应用领域的特征及相似性预测软部件的可重用性。
2) 然后进行软部品的开发。一旦确认了软部件的重用价值,即可进行软部品的开发并对具有重用价值的软部品进行一般化,以便它们能够适应新的类似的应用领域。
3) 最后,软部件及其文档即可进入软部品库,成为可供后续项目使用的可重用资源。
技术
最理想的重用技术是它的重用产品能够和用户的需求完全一致,不需要用户做任何自定义,并且能够无需用户学习就能够被使用。然而,一种重用技术能够适合今天,可能不适合明天。一个重用产品越是能够被自定义,它越是可能在一个特定的环境下被使用,但是这也需要用户进行更多的学习,研究和实践。
自从软件重用思想产生以来,计算机科学家和软件工程师就致力与软件重用的技术的研究和实践。在30多年的时间内,出现多种软件重用技术,如:库函数,模板,面向对象、设计模式、组件、框架、构架。
下面是应用程序框架和其它三种软件流行的重用技术的比较。
库函数
库函数是很早的软件重用技术。很多编程语言为了增强自身的功能,都提供了大量的库函数。对于库函数的使用者,他只要知道函数的名称,返回值的类型, 函数参数和函数功能就可以对其进行调用。
面向对象
面向对象技术是近三十年来学术界和工业界研究和应用的一个热点。面向对象技术通过方法、消息、类、继承、封装、和实例等机制构造软件系统,并为软件重用提供强有力的支持。面向对象方法已成为当今最有效、最先进的软件开发方法。与函数库对应,很多面向对象语言为应用程序开发者提供了易于使用的类库,如VC++中的MFC。
模板
模板相当于工业生产中所用的“模具”。有各种各样的模板(如文档模板,网页模板等),利用这些模板可以比较快速地建立对应的软件产品。模板把不变的封装在内部,对可能变化的部分提供了通用接口,由使用者来对这些接口进行设定或实现。
设计模式
设计模式作为重用设计信息的一种技术,在面向对象设计中越来越来流行。设计模式描述了在我们周围不断重复发生的问题,该问题的解决方案的核心和解决方案实施的上下文。设计模式命名一种技术并且描述它的成本和收益,共享一系列模式的开发者拥有共同的语言来描述他们的设计。
构件
普通意义上的构件应从以下几个方面来理解:
1) 构件应是抽象的系统特征单元,具有封装性和信息隐蔽,其功能由它的接口定义。
2) 构件可以是原子的,也可以是复合的。因此它可以是函数,过程或对象类,也可以是更大规模的单元。一个子系统是包含其它构件的构件。
3) 构件是可配置和共享的,这是基于构件开发的基石,且构件之间能相互提供服务。
构架
普通意义上的构架应从以下几个方面来理解:
1) 构架是与设计的同义理解,是系统原型或早期的实现。
2) 构架是高层次的系统整体组织。
3) 构架是关于特定技术如何合作组成一个特定系统的解释。
框架
如果把软件的构建过程看成是传统的建筑过程;框架的作用相当于为我们的房屋搭建的“架子”。框架从重用意义上说,是一个介于构件和构架之间的一个概念。构件,框架和构架三者的主要区别在于:对重用的支持程度的不同:
1) 构件是基础,也是基于构件开发的最小单元。构件重用包括可重用构件的制作和利用可重用构件构造新构件或系统,
2) 一个框架和构架包含多个构件。这些构件使用统一的框架(构架)接口,使得构造一个应用系统更为容易。
3) 框架重用包括代码重用和分析设计重用,一个应用系统可能需要若干个框架的支撑,从这个意义上来说,框架也是一个“构件”的同时,框架又是一类特定领域的构架。
4) 构架重用不仅包括代码重用和分析设计重用,更重要的是抽象层次更高的系统级重用。
5) 框架和构架的重用层次更高,比构件更为抽象灵活,但也更难学习和使用。
全国各地天气预报查询

上海市

  • 市辖区
  • 云南省

  • 临沧市
  • 云南省

  • 丽江市
  • 云南省

  • 保山市
  • 云南省

  • 大理白族自治州
  • 云南省

  • 德宏傣族景颇族自治州
  • 云南省

  • 怒江傈僳族自治州
  • 云南省

  • 文山壮族苗族自治州
  • 云南省

  • 昆明市
  • 云南省

  • 昭通市
  • 云南省

  • 普洱市
  • 云南省

  • 曲靖市
  • 云南省

  • 楚雄彝族自治州
  • 云南省

  • 玉溪市
  • 云南省

  • 红河哈尼族彝族自治州
  • 云南省

  • 西双版纳傣族自治州
  • 云南省

  • 迪庆藏族自治州
  • 内蒙古自治区

  • 乌兰察布市
  • 内蒙古自治区

  • 乌海市
  • 内蒙古自治区

  • 兴安盟
  • 内蒙古自治区

  • 包头市
  • 内蒙古自治区

  • 呼伦贝尔市
  • 内蒙古自治区

  • 呼和浩特市
  • 内蒙古自治区

  • 巴彦淖尔市
  • 内蒙古自治区

  • 赤峰市
  • 内蒙古自治区

  • 通辽市
  • 内蒙古自治区

  • 鄂尔多斯市
  • 内蒙古自治区

  • 锡林郭勒盟
  • 内蒙古自治区

  • 阿拉善盟
  • 北京市

  • 市辖区
  • 吉林省

  • 吉林市
  • 吉林省

  • 四平市
  • 吉林省

  • 延边朝鲜族自治州
  • 吉林省

  • 松原市
  • 吉林省

  • 白城市
  • 吉林省

  • 白山市
  • 吉林省

  • 辽源市
  • 吉林省

  • 通化市
  • 吉林省

  • 长春市
  • 四川省

  • 乐山市
  • 四川省

  • 内江市
  • 四川省

  • 凉山彝族自治州
  • 四川省

  • 南充市
  • 四川省

  • 宜宾市
  • 四川省

  • 巴中市
  • 四川省

  • 广元市
  • 四川省

  • 广安市
  • 四川省

  • 德阳市
  • 四川省

  • 成都市
  • 四川省

  • 攀枝花市
  • 四川省

  • 泸州市
  • 四川省

  • 甘孜藏族自治州
  • 四川省

  • 眉山市
  • 四川省

  • 绵阳市
  • 四川省

  • 自贡市
  • 四川省

  • 资阳市
  • 四川省

  • 达州市
  • 四川省

  • 遂宁市
  • 四川省

  • 阿坝藏族羌族自治州
  • 四川省

  • 雅安市
  • 天津市

  • 市辖区
  • 宁夏回族自治区

  • 中卫市
  • 宁夏回族自治区

  • 吴忠市
  • 宁夏回族自治区

  • 固原市
  • 宁夏回族自治区

  • 石嘴山市
  • 宁夏回族自治区

  • 银川市
  • 安徽省

  • 亳州市
  • 安徽省

  • 六安市
  • 安徽省

  • 合肥市
  • 安徽省

  • 安庆市
  • 安徽省

  • 宣城市
  • 安徽省

  • 宿州市
  • 安徽省

  • 池州市
  • 安徽省

  • 淮北市
  • 安徽省

  • 淮南市
  • 安徽省

  • 滁州市
  • 安徽省

  • 芜湖市
  • 安徽省

  • 蚌埠市
  • 安徽省

  • 铜陵市
  • 安徽省

  • 阜阳市
  • 安徽省

  • 马鞍山市
  • 安徽省

  • 黄山市
  • 山东省

  • 东营市
  • 山东省

  • 临沂市
  • 山东省

  • 威海市
  • 山东省

  • 德州市
  • 山东省

  • 日照市
  • 山东省

  • 枣庄市
  • 山东省

  • 泰安市
  • 山东省

  • 济南市
  • 山东省

  • 济宁市
  • 山东省

  • 淄博市
  • 山东省

  • 滨州市
  • 山东省

  • 潍坊市
  • 山东省

  • 烟台市
  • 山东省

  • 聊城市
  • 山东省

  • 菏泽市
  • 山东省

  • 青岛市
  • 山西省

  • 临汾市
  • 山西省

  • 吕梁市
  • 山西省

  • 大同市
  • 山西省

  • 太原市
  • 山西省

  • 忻州市
  • 山西省

  • 晋中市
  • 山西省

  • 晋城市
  • 山西省

  • 朔州市
  • 山西省

  • 运城市
  • 山西省

  • 长治市
  • 山西省

  • 阳泉市
  • 广东省

  • 东莞市
  • 广东省

  • 中山市
  • 广东省

  • 云浮市
  • 广东省

  • 佛山市
  • 广东省

  • 广州市
  • 广东省

  • 惠州市
  • 广东省

  • 揭阳市
  • 广东省

  • 梅州市
  • 广东省

  • 汕头市
  • 广东省

  • 汕尾市
  • 广东省

  • 江门市
  • 广东省

  • 河源市
  • 广东省

  • 深圳市
  • 广东省

  • 清远市
  • 广东省

  • 湛江市
  • 广东省

  • 潮州市
  • 广东省

  • 珠海市
  • 广东省

  • 肇庆市
  • 广东省

  • 茂名市
  • 广东省

  • 阳江市
  • 广东省

  • 韶关市
  • 广西壮族自治区

  • 北海市
  • 广西壮族自治区

  • 南宁市
  • 广西壮族自治区

  • 崇左市
  • 广西壮族自治区

  • 来宾市
  • 广西壮族自治区

  • 柳州市
  • 广西壮族自治区

  • 桂林市
  • 广西壮族自治区

  • 梧州市
  • 广西壮族自治区

  • 河池市
  • 广西壮族自治区

  • 玉林市
  • 广西壮族自治区

  • 百色市
  • 广西壮族自治区

  • 贵港市
  • 广西壮族自治区

  • 贺州市
  • 广西壮族自治区

  • 钦州市
  • 广西壮族自治区

  • 防城港市
  • 新疆维吾尔自治区

  • 乌鲁木齐市
  • 新疆维吾尔自治区

  • 伊犁哈萨克自治州
  • 新疆维吾尔自治区

  • 克孜勒苏柯尔克孜自治州
  • 新疆维吾尔自治区

  • 克拉玛依市
  • 新疆维吾尔自治区

  • 博尔塔拉蒙古自治州
  • 新疆维吾尔自治区

  • 吐鲁番市
  • 新疆维吾尔自治区

  • 和田地区
  • 新疆维吾尔自治区

  • 哈密市
  • 新疆维吾尔自治区

  • 喀什地区
  • 新疆维吾尔自治区

  • 塔城地区
  • 新疆维吾尔自治区

  • 巴音郭楞蒙古自治州
  • 新疆维吾尔自治区

  • 昌吉回族自治州
  • 新疆维吾尔自治区

  • 自治区直辖县级行政区划
  • 新疆维吾尔自治区

  • 阿克苏地区
  • 新疆维吾尔自治区

  • 阿勒泰地区
  • 江苏省

  • 南京市
  • 江苏省

  • 南通市
  • 江苏省

  • 宿迁市
  • 江苏省

  • 常州市
  • 江苏省

  • 徐州市
  • 江苏省

  • 扬州市
  • 江苏省

  • 无锡市
  • 江苏省

  • 泰州市
  • 江苏省

  • 淮安市
  • 江苏省

  • 盐城市
  • 江苏省

  • 苏州市
  • 江苏省

  • 连云港市
  • 江苏省

  • 镇江市
  • 江西省

  • 上饶市
  • 江西省

  • 九江市
  • 江西省

  • 南昌市
  • 江西省

  • 吉安市
  • 江西省

  • 宜春市
  • 江西省

  • 抚州市
  • 江西省

  • 新余市
  • 江西省

  • 景德镇市
  • 江西省

  • 萍乡市
  • 江西省

  • 赣州市
  • 江西省

  • 鹰潭市
  • 河北省

  • 保定市
  • 河北省

  • 唐山市
  • 河北省

  • 廊坊市
  • 河北省

  • 张家口市
  • 河北省

  • 承德市
  • 河北省

  • 沧州市
  • 河北省

  • 石家庄市
  • 河北省

  • 秦皇岛市
  • 河北省

  • 衡水市
  • 河北省

  • 邢台市
  • 河北省

  • 邯郸市
  • 河南省

  • 三门峡市
  • 河南省

  • 信阳市
  • 河南省

  • 南阳市
  • 河南省

  • 周口市
  • 河南省

  • 商丘市
  • 河南省

  • 安阳市
  • 河南省

  • 平顶山市
  • 河南省

  • 开封市
  • 河南省

  • 新乡市
  • 河南省

  • 洛阳市
  • 河南省

  • 漯河市
  • 河南省

  • 濮阳市
  • 河南省

  • 焦作市
  • 河南省

  • 省直辖县级行政区划
  • 河南省

  • 许昌市
  • 河南省

  • 郑州市
  • 河南省

  • 驻马店市
  • 河南省

  • 鹤壁市
  • 浙江省

  • 丽水市
  • 浙江省

  • 台州市
  • 浙江省

  • 嘉兴市
  • 浙江省

  • 宁波市
  • 浙江省

  • 杭州市
  • 浙江省

  • 温州市
  • 浙江省

  • 湖州市
  • 浙江省

  • 绍兴市
  • 浙江省

  • 舟山市
  • 浙江省

  • 衢州市
  • 浙江省

  • 金华市
  • 海南省

  • 三亚市
  • 海南省

  • 三沙市
  • 海南省

  • 儋州市
  • 海南省

  • 海口市
  • 海南省

  • 省直辖县级行政区划
  • 湖北省

  • 十堰市
  • 湖北省

  • 咸宁市
  • 湖北省

  • 孝感市
  • 湖北省

  • 宜昌市
  • 湖北省

  • 恩施土家族苗族自治州
  • 湖北省

  • 武汉市
  • 湖北省

  • 省直辖县级行政区划
  • 湖北省

  • 荆州市
  • 湖北省

  • 荆门市
  • 湖北省

  • 襄阳市
  • 湖北省

  • 鄂州市
  • 湖北省

  • 随州市
  • 湖北省

  • 黄冈市
  • 湖北省

  • 黄石市
  • 湖南省

  • 娄底市
  • 湖南省

  • 岳阳市
  • 湖南省

  • 常德市
  • 湖南省

  • 张家界市
  • 湖南省

  • 怀化市
  • 湖南省

  • 株洲市
  • 湖南省

  • 永州市
  • 湖南省

  • 湘潭市
  • 湖南省

  • 湘西土家族苗族自治州
  • 湖南省

  • 益阳市
  • 湖南省

  • 衡阳市
  • 湖南省

  • 邵阳市
  • 湖南省

  • 郴州市
  • 湖南省

  • 长沙市
  • 甘肃省

  • 临夏回族自治州
  • 甘肃省

  • 兰州市
  • 甘肃省

  • 嘉峪关市
  • 甘肃省

  • 天水市
  • 甘肃省

  • 定西市
  • 甘肃省

  • 平凉市
  • 甘肃省

  • 庆阳市
  • 甘肃省

  • 张掖市
  • 甘肃省

  • 武威市
  • 甘肃省

  • 甘南藏族自治州
  • 甘肃省

  • 白银市
  • 甘肃省

  • 酒泉市
  • 甘肃省

  • 金昌市
  • 甘肃省

  • 陇南市
  • 福建省

  • 三明市
  • 福建省

  • 南平市
  • 福建省

  • 厦门市
  • 福建省

  • 宁德市
  • 福建省

  • 泉州市
  • 福建省

  • 漳州市
  • 福建省

  • 福州市
  • 福建省

  • 莆田市
  • 福建省

  • 龙岩市
  • 西藏自治区

  • 山南市
  • 西藏自治区

  • 拉萨市
  • 西藏自治区

  • 日喀则市
  • 西藏自治区

  • 昌都市
  • 西藏自治区

  • 林芝市
  • 西藏自治区

  • 那曲市
  • 西藏自治区

  • 阿里地区
  • 贵州省

  • 六盘水市
  • 贵州省

  • 安顺市
  • 贵州省

  • 毕节市
  • 贵州省

  • 贵阳市
  • 贵州省

  • 遵义市
  • 贵州省

  • 铜仁市
  • 贵州省

  • 黔东南苗族侗族自治州
  • 贵州省

  • 黔南布依族苗族自治州
  • 贵州省

  • 黔西南布依族苗族自治州
  • 辽宁省

  • 丹东市
  • 辽宁省

  • 大连市
  • 辽宁省

  • 抚顺市
  • 辽宁省

  • 朝阳市
  • 辽宁省

  • 本溪市
  • 辽宁省

  • 沈阳市
  • 辽宁省

  • 盘锦市
  • 辽宁省

  • 营口市
  • 辽宁省

  • 葫芦岛市
  • 辽宁省

  • 辽阳市
  • 辽宁省

  • 铁岭市
  • 辽宁省

  • 锦州市
  • 辽宁省

  • 阜新市
  • 辽宁省

  • 鞍山市
  • 重庆市

  • 重庆市

  • 市辖区
  • 陕西省

  • 咸阳市
  • 陕西省

  • 商洛市
  • 陕西省

  • 安康市
  • 陕西省

  • 宝鸡市
  • 陕西省

  • 延安市
  • 陕西省

  • 榆林市
  • 陕西省

  • 汉中市
  • 陕西省

  • 渭南市
  • 陕西省

  • 西安市
  • 陕西省

  • 铜川市
  • 青海省

  • 果洛藏族自治州
  • 青海省

  • 海东市
  • 青海省

  • 海北藏族自治州
  • 青海省

  • 海南藏族自治州
  • 青海省

  • 海西蒙古族藏族自治州
  • 青海省

  • 玉树藏族自治州
  • 青海省

  • 西宁市
  • 青海省

  • 黄南藏族自治州
  • 黑龙江省

  • 七台河市
  • 黑龙江省

  • 伊春市
  • 黑龙江省

  • 佳木斯市
  • 黑龙江省

  • 双鸭山市
  • 黑龙江省

  • 哈尔滨市
  • 黑龙江省

  • 大兴安岭地区
  • 黑龙江省

  • 大庆市
  • 黑龙江省

  • 牡丹江市
  • 黑龙江省

  • 绥化市
  • 黑龙江省

  • 鸡西市
  • 黑龙江省

  • 鹤岗市
  • 黑龙江省

  • 黑河市
  • 黑龙江省

  • 齐齐哈尔市