(这条文章已经被阅读了 73 次) 时间:2001-07-06 19:25:39 来源:九点 (九点) 转载
软件开发一直以来都受到以下几个方面的困扰:开发预算和开发进度时常超出预定的限制条件、维护成本增长过快、不恰当的功能设计、拙劣的性能、不断膨胀的bug和代码量、不兼容、重复开发等等。这些问题在最严重的情况下就会导致所谓的“软件危机”。现在,我们有了两种明确的技术措施有望解决以上的问题:组件技术和软件开发的工厂模式。
组件技术对软件开发的促进作用是非常显著的。发端于上个世纪50年代的组件技术开发思想源于传统的软件模块和五花八门的子程序库。以后,其原形中还出现了抽象数据类型以及在此基础上诞生的面向对象开发思想。但是,组件技术超越了以上所有这些软件开发概念,采用组件技术开发大规模、不同类乃至分布式的系统速度快而成本也得到大大降低。
目前,财富1000家榜上公司中有大约80%在过去的三年中对基于对象或者组件的系统进行了投资。分析人士估计,到2002年,组件软件的收益即可达到79亿美元,其中软件本身占24亿美元,服务占55亿美元。到2003年,市场上出售的新软件中将有70%是主要通过各种软件“建筑模块”生产出来的,这些所谓的软件建筑模块其实就是各种各样的程序框架、模版和组件库。其市场年增长率可望达到30%。
组件技术是一种近来才开始日益普及的最新软件开发技术。到目前为止,我们还很难确定组件技术的明确定义。比如,对组件技术的常见说法有以下这些:“二进制软件单元”、“任意场合可部署的软件”、“特别适合第三方开发”和“规范定义的接口”等等。大致上可以这样理解组件技术:所谓组件,其实就是一种可部署软件的代码包,其中包括某些可执行模块。组件单独开发并作为软件单元使用,它具有明确的接口,软件就是通过这些接口调用组件所能提供的服务,多种组件可以联合起来构成更大型的组件乃至直接建立整个系统。组件必须是自包含的,组件设计中必须包括需求、源代码和可执行代码、接口规范、分析和设计模型、测试和其他同类术语。组件的实现必须支持一种或者多种其用户所希望获得的接口。
实现组件并不一定需要采用面向对象语言。支持组件的技术包括COM+、CORBA和Enterprise JavaBeans (EJB)等。
组件技术的多样性可以让那些采用组件技术的机构大大降低系统风险。当软件工作人员更新系统中旧有的组件时,采用组件系统的机构仍然可以正常运转。
组件的组装产生了软件工厂的概念。为了构造新应用程序,软件开发人员找出适当的组件,将这些组件加入到正生产中的应用程序,同时对应用程序进行测试并保证应用程序的组装工作按照预定的规划正常进行。软件开发人员所起的作用和车间流水线工人别无二至,只是开发软件的“流水线”上跑的是应用程序产品。
软件工厂的出现使得软件开发商可以通过可重复的开发过程快速生产出效率高、成本低、质量好的企业级软件。软件工厂所提供的软件基础架构可以实现快捷的、生产线级的软件生产能力。具体包括:建立标准结构、软件中间件、开发过程、实践、扩展的集成开发环境、组件库和知识库以及重用策略等。
软件工厂是唯一一种在建立工厂的同时生产产品的特殊“工厂”。这种方式可以大大降低现代软件开发的成本和复杂性。只有当我们在建立软件工厂和生产软件之间划清了明确的界限的情况下,软件的工厂化生产才会得到成功是实现。
由此,我们把软件开发人员划分成三种类型:工厂建设人员、组件开发人员、系统建设人员和组件装配人员。工厂建设人员搭建生产设备并负责建设工厂。组件开发人员是工厂的核心成员,他们负责建立可重用组件。系统建设人员和组件装配人员负责把软件需求转化为组成系统的模块,这些模块再由已经过质量检验的其他代码模块组装而成。
这可不是一篇科学幻想小说,今天的软件开发产业中已经存在多种技术和多家厂商支持面向组件的大规模软件生产了。CA、Inprise、Microsoft、Rational、Sun、Symantec和众多其他厂商都纷纷推出了各种基于组件和Web的集成开发环境,其中包括了大量的软件结构和组件库。支持对象和组件概念的编程语言也不少,比如Java、C++、Ada、Eiffel甚至VB等都可以达到组件设计目标。在中间件和基础结构组件方面,有COM+、CORBA和EJB/J2EE这几种结构/环境供开发人员使用。BEA、IBM、Iona、Microsoft、Persistence和Sun/Forte 都可以提供相应的应用服务器、基础组件和组件框架。数据库厂商如Oracle和Informix也支持对象和组件概念。
是的,今天我们已经具备实现面向组件软件生产的条件,但是只有当以上技术都趋于成熟的时候我们才有必要进一步提出更好的软件工厂解决方案。