“有效的开发软件”和“有效的复用软件”一直是软件工程领域两个永恒的主题。软件复用是提高软件开发效率和质量的有效途径,软件复用的主要思想是,将软件看成是由不同功能部分的“组件”所组成的有机体,每一个组件在设计编写时可以被设计成完成同类工作的通用工具。这样,如果完成各种工作的组件被建立起来以后,编写一特定软件的工作就变成了只是将各种不同组件组织连接起来的简单问题,这对于软件产品的最终质量和维护工作都有本质性的改变。
构件技术是支持软件复用的核心技术,是近几年来迅速发展并受到高度重视的一个学科分支。它的出现是对传统MIS开发过程的一次变革,是基于面向对象的、以嵌入后马上可以“即插即用”概念为中心、通过构件的组合来支持应用的技术体系。标准零部件生产业的独立存在和发展是产业形成规模经济的前提。软件产业要发展并形成规模经济,标准构件的生产和构件的复用是关键因素。而软件复用模式是产业工程化、工业化的必由之路。这正是软件复用受到高度重视的根本原因。
1 软件复用与软件构件
1.1 软件复用的基本概念
软件复用是指重复使用“为了复用目的而设计的软件”的过程[1]。软件复用是在软件开发中避免重复劳动的解决方案,它包括对软件生产过程中其他劳动成果的复用,如需求分析、概要设计、详细设计、编码、测试用例和使用手册等。
依据对可复用信息进行复用的方式,可以将软件复用区分为黑盒(Black-box)复用和白盒(White-box)复用。黑盒复用是指对可复用构件不作任何修改,原封不动地复用。这类可复用构件比较通用,往往具有很好的封装性,并具有标准的接口;而且这类构件的复用率较高,因此要求有很高的质量和可靠性。白盒复用是指在复用一个构件时须对其进行部分修改,以适应具体应用的需要。
1.2 实现软件复用的关键因素
实现软件复用的关键因素如图1所示,主要包括:软件构件技术、领域工程、软件构架技术、软件再工程、开放系统技术、软件过程、CASE技术,以及各种非技术因素[2]。
1.3 软件复用过程
软件复用过程如图2所示,可分为以下步骤:(1)认识到有可能复用的机会;(2)分解、抽象;(3)分类并建立复用构件库;(4)检索与选择复用构件;(5)对复用构件具体化;(6)重新组装成新软件。
1.4 构件的基本概念
在众多的软件复用开发方法中,基于构件的软件开发方法是一条有效、实际的软件复用途径。所谓构件是指系统中可以明确辨识的构成成份,软件构件是系统中具有一定意义的独立构成成份[3]。
构件应具备的基本特征:(1)复用:复用是构件最基本的性质,构件的设计必须满足能在新的应用项目中使用;(2)封装:是对外界隐藏构件的设计和实现细节,仅通过接口与外界交互,可以保证构件功能复用的完整性和构件开发及交互的独立性;(3)组装:构件可以通过组装形成新的构件或系统,组装是构件复用的手段;(4)粒度:构件是有大小的,与领域相关的构件粒度大;(5)层次:构件可以按层次进行划分,企业级应用系统的复杂逻辑可以通过分层来解决。
2 基于构件的软件复用技术实现
对于构件,应当按可复用的要求进行设计、实现、打包、编写文档。构件应当是内聚的,并具有相当稳定的公开的接口。有的构件具有广泛的可复用性,可复用到众多种类的应用系统中。而有的构件则只能在有限的特定范围内被复用。
复用者从软件体系结构和可复用构件的模型入手,将现成的可复用资产汇集在一起,以满足客户的需求。复用者应当利用可复用资产提供的可变性机制对所需的构件进行转化。如果仅利用现有的可复用构件还不足以完全满足客户所有的需求,则就需要另外编程。最后,把所需要的构件集成在一起,并进行测试,形成应用系统。
单独的一个构件往往用处不大,但若干个构件联合起来,用处就大了。所以要将相关的构件组织在一起,形成构件系统。实际应用中的开发者往往需要使用多个构件系统,因此,应当把构件系统当作系统产品进行管理,必要时可自行开发构件系统。一个构件系统的规模可大可小,小到只有几个构件及支持文档。
应用系统要复用公共的构件,要从构件系统中挑选所需的可复用构件。构件系统中的构件之间存在若干种关系,例如,一个构件可从其他构件那里继承其功能(即继承关系),也可以发送消息给其他构件,或者可以与其他构件联合、支持协同工作。
总之,一个构件系统是能提供一系列具有可复用特性的系统产品。这些特性被实现为相互依赖相互连接的众多构件,包括众多的类型、软件包和文档。一个好的构件系统使得复用者能够又快、又好、又省地开发应用系统。对构件系统中的每个构件,都要精心地进行设计和实现,使得它具有适当的灵活性,能够与其他构件(甚至与其他构件系统)协同工作,向复用者提供适当层次的功能。构件系统应当是易于理解和易于使用的,每个构件类型、类以及与其他构件的相互作用,均应当有良好的文档,并且所使用的术语应当具有一致性,对构件应当是仔细地进行建模、实现、制作文档、测试,以便于以后的有效维护和改进。
3 软件复用技术在MIS中的应用
基于可复用构件MIS的开发过程如图3所示,有如下5个步骤:
(1)需求分析
基于可复用构件的MIS需求分析可以采用改进后的信息模型法,在数据分析、建立稳定的数据集合和逻辑数据模型的基础上,从信息模型、状态模型和功能模型中组织构件,建立系统模型。更多的是采用OOA,由此提炼的类构件对构件复用更有利。要利用在开发MIS系统之初准备的构件库,并收集一些已经开发出的MIS的总体设计、规范、局部流程以及某些人机界面、通用功能模块、简单开发工具等。使用户需求的系统模型尽可能与已经收集的可复用构件等成分相联系。
(2)系统设计
在构件复用情况下,由于代码被封装于构件之中,所以系统设计的目标应是可以实现的构件表达式,以支持后续的实现环节。MIS系统设计在内容上包括了数据设计、体系结构设计和过程设计等,在阶段划分上,又可以分为概要设计和详细设计。在概要设计阶段,MIS设计的任务是确定系统的概况,即把需求转化为概念数据模型和软件体系结构,该阶段的工作需要MIS构件库的支持。在详细设计阶段,逻辑数据模型通过进一步细化转换成物理数据模型,如数据库结构。为了使体系结构的实现变为可能,需要将体系结构中的过程构件(模块)定义映射成实际程序构件的结构化表达式。对相对于构件库无解的模块需要进行原先的过程设计。至此,需求信息已转换为程序员可以接受的设计方案。
(3)系统实现
在MIS实现中,首先是数据库的实现,可以通过MIS建模工具自动在DBMS上完成,也可以由用户利用相应工具手工完成。其次是把构件表达式变成程序实现,将进行过程分析得到的描述信息称为过程构件。对于过程构件,可以用某一具体语言加以实现,最好使用对象对其进行封装。对于无需改动的可复用构件,仅需要根据构件索引将其从构件库中提取出来,作为MIS的一个模块。多数情况下,需要对提取出的构件进行改造以适应新的应用系统。常见的改造形式是修改源程序,还可以通过面向对象的继承、重载及动态编联等特性进行改造。在一些情况下,还需要组合几个构件形成更大粒度的构件以满足某一特定功能需要。通过以上方法形成各个功能模块,再将这些模块通过控制模块联系起来形成应用系统雏形。
(4)系统测试
根据需求分析中提出的功能要求、性能要求等设计测试用例,对系统进行全面测试、验证、优化,形成MIS系统原型,提交给用户评价。根据评价意见,返回前面的相关步骤,进行修改。通过复用上次开发过程的成果,可以很快形成新的原型,直到需求得到满足,MIS系统发布为止。
(5)系统维护
基于可复用构件的MIS由于其自身的特点,因此必须重新考虑MIS的维护问题。一个基于可复用构件的MIS采用的构件可以是COTS构件、公开构件、自由构件、共享构件等。对构件集成者来说,当把这些构件集成到系统中时,由于缺乏部分或全部源代码,使得维护变得十分困难。如果构件全部是“黑盒”,其可见部分仅局限于描述构件的使用和功能的文档上,那么这对全部由黑盒构成的系统的维护,又增添了新的难度。对构件卖主来说,不能只考虑特定MIS应用领域的某一源代码块,而应维护被不同用户所使用的所有代码。因为每个MIS应用可能在需求上有一点差别,修改后的构件必须对所有的MIS都适用。
通过对基于构件的软件复用的研究及其在MIS中的应用,可以提高软件生产和开发的工业化水平,大大提高了软件开发的效率、质量和可维护性,特别是领域内构件技术的应用更有价值和应用前景。目前正在致力于MIS领域的软件重用技术和软件构件技术的研究,希望通过对这一领域技术的研究,能够探索出一条管理信息系统领域内软件开发的低投入、高效率、高质量的有效途径。