一个基于可重用构件的软件开发过程模型
 

2009-07-13 作者:Jack2007 来源:Jack2007的blog

 

摘要:基于构件的开发(CBD)观念已广泛应用于软件开发中,便于构件的重用。众所周知的CBD体系结构有 ActiveX, CORBA, RMI以及 SOAP 等。文章主要通过与传统软件开发方法的比较研究支持基于CBD的实践,同时也评价了面向对象的过程模型以及提出了一种新型的基于 CBD 的软件开发过程模型,并探讨了仓储的重要概念。

关键字:构件重用;基于构件的开发;软件开发过程;仓储

1.引言

软件重用的观念起源于制造业和土木工程领域,通过配件组装汽车、砖瓦搭建房屋就是很好的例子,基于配件的产品在市场上已取得了很大的成功。

软件公司采用同样的方式开发软件,通过软件配件的方式使他们在市场上取得了成功,软件配件是通过包的形式同软件一同发售的。软件配件被叫做组件或构件,很多学者从不同的角度给出了定义。一般认为可重用的二进制代码即为组件,组件观念和面向对象编程的对象思想很相似。一个组件是为了服务特定用途,具有独立功能的系统部件,比如:命令按钮,文本输入框等。组件就像模式一样强制开发人员采用已定义好的过程,将其插入到新软件系统中以满足的需求。

微软公司和SUN公司是主要的软件工具提供商,他们的工具被广泛用于应用软件开发。这两家公司和其他厂商也提供大量的组件使他们取得了成功。第二部分描述CBD相关的工作,第三部分描述比较过程模型,第四部分涉及到CBD过程模型的动机,第五部分提出一个CBD过程模型,第六部分描述仓储在CBD中的重要性,第七部分表述CBD相比传统软件开发的优越性。

2.相关工作

Lycett and Giaglis[1]认为评估信息系统方面的重用是极度困难的。他们认为所有

的开发方法都会在软件重用上存在风险。主要的重用风险可以通过下面的方式避免:

(1). 在组件选择的早期阶段整合业务驱动评估可以减小评估和选择组件的风险。

(2). 评估和选择在一个不断迭代的过程中进行。

作者讨论了贴现现金流(DCF)、净现值(NPV)、投资回报率(ROI)、内部收益率(IRR)、

成本效益分析(CBA),但没有提供任何事实和数字。他们没有提供适当的评价标准来评估和整合已开发的组件,以便重复使用。他们提出了一个内容,背景和过程(CCP)的分析,以评估一个组件重复使用,这是不切合实际的,因为CCP非常主观的选择和评价组件重用。Boehmet al[2]提出的建设性成本模型二能够很好的评估基于重用组件的软件成本。

Merijn de Jonge[3]认为一个可重用的需求将被开发成独立的、可整合的组件。他提出了重用最佳实践和过程的要求以及在一个系统和跨系统中整合可重用的独立的组件技术。他提出了一个源代码树组成技术用于整合:

(1) 核心模块的组成部分。

(2) 依据不同系统范围,包开发允许同步开发一个以上的组件。

基于包的软件开发是一个热门的研究领域。作者集中在源代码树组成技术,可用于一个以上的系统的软件配置管理,这一个重用组件库管理上的问题。作者并没有讨论跨领域开发组件和他们在多个系统中的整合问题。

软件重用的程度取决于重用策略,他们通过收集71 软件开发组织的数据总结了一套六维度的软件重用方法,这些维度分别是规划、改善、正规过程、管理支持、项目相似性、对象技术、公共架构。在这些维度的基础上,他们发现了被软件开发组织实践的重用策略。五个策略分别是:基于高重用潜能的特定重用、基于低重用潜能的不协调重用、基于高重用潜能的不协调重用、缺乏管理下的系统重用、强化管理下的系统重用。他们主要研究的观念是分类重用策略,因此,开发组织能够得利并完成开发项目。作者支持最后一个策略---强化管理的下系统重用,但是在得出结论前还需要更详细的分析不同领域不同软件组织的数据。

选择可重用的组件对于提高软件开发效率是很重要的[4]。他们提出了便于 EJB 组件重用的组件仓库概念,便于可重用组件的存储和管理。通过组件仓库可以使软件开发获得很大的效益:规格观看、适应、测试、部署。作者提出的仓库没有版本控制和变更控制的功能,而这些对组件仓库是很重要的两个概念。软件组织不得不投入巨资才能在组件重用方法上取得成功,这对他们来说是个障碍,他们认为重用的核心是源代码。据作者提到的一个评估:“领域组件占整个应用的65%,组件重用应该聚焦在领域组件上”。他提出了基于组件的开发到支持领域组件的整合方法,这个整合方法是软件开发环境中的可重用组件的集合。

作者也讨论了接口的概念,描述了接口包装机制,他用来管理和控制可重用组件之间的接口。他的主要研究目标是为软件组织开发标准,以便他们开始重用实践,强调主要是编程

效果,而不是管理和业务观点。作者主要研究点在于开发领域特定可重用组件,而不是构建不同领域组件,这个问题可以通过软件设计的适应性和子管理型解决。

Arndt and Dibbern 的研究[5]揭露了构建软件系统的两种传统方式: 定制和使用标准的

软件包。他们提出定制组合和领域软件包方法来达到两个效益。有许多对立的因素抵制实践这一新的领域。作者解释组合方法的变更过程已采取了一个合理的方法。他们还引入了创新的观念,如何模块化开发可以得到领域变更带来的好处。

基于组件的软件开发的优点已经在很多论文中有论述,这虽然是一个理论上的概念,但

能够很好的指导 CBSD 实践,对于CBSD的验证本文不做论述。

3. 几种经典过程模型的比较

瀑布模型是软件开发中的传统和经典模型。沟通、计划、建模、构建和部署是瀑布过程模型的主要阶段,从系统开发生命周期阶段来说这种模型是基于迭代的。这种模型只适合需求全面确定,并依据现有软件重新设计。他不适用于商业软件,因为他的阶段迭代。这种模型需要大量时间和高额成本才能完成软件开发任务。另一个障碍就是可工作的软件版本在开发阶段才可见,如果客户需求含糊不清的话会给软件带来致命的灾难。在软件开发初始阶段是很难完完整整的收集需求的,而这恰恰是瀑布模型的基础。

原型过程模型被提出来用于整合其他方法学,比如瀑布模型,以使他们发挥效果。开发演示模型和需求评估是原型模型的主要阶段。他是一个很自然的周期,不断的迭代知道软件开发完成。在短周期和低成本内快速开发软件。没有为现在和未来的项目做大量的文档。快速开发经常带来质量的低劣。所以原型过程模型从来没有被独立的用来开发软件。它依赖于最终用户方面的功能和接口,这可能会导致效率低下。最终用户有时候可能不希望项目成功,因为威胁到他们的工作,他们可能会评估一些关键的软件特性和功能。

快速应用开发( RAD)过程模型,是适合商业软件开发的模型之一。需求和规划、用户设计、构建和收尾是RAD模型的主要阶段。他带来的好处就是快速开发和低成本。完整的用户需求是RAD模型的核心优势,这是因为在设计和构建阶段对原型模型的应用。RAD模型关注用户视角的主要特性,他涵盖了瀑布模型的所有阶段,但很有效率。所有的原型模型的缺点被纳入到了RAD模型中。RAD模型不适合于涉及到安全方面的关键项目,比如涉及到生命风险等。

演化和增量过程模型支持软件工程是开发出更完整和全面的软件。沟通、规划、分析、设计、测试和客户评价是演化过程模型的主要阶段。他适合模块化,增量,WEB开发以及小规模团队。软件开发组织可以雇佣更多开发人员,当核心功能确认之后。

Rational统一过程( RUP的)模型结合了几乎所有演化模型的特性,但他重点是纯粹面向对象的。他的主要阶段是,初始化阶段,设计阶段,构建阶段和产品化阶段。构建阶段支持现有组件的重用。RUP的主要局限性是过高的时间和成本,强调文档写作而不是软件开发。

Highsmith and Cockburn 认为[6]所有的敏捷过程都强调了质量上的设计。极限编程(XP)是被广泛应用的敏捷过程模型(动态系统开发(DSDM), SCRUM, crystal, 特征驱动)。XP模型的主要阶段是计划,设计,编码和测试。敏捷关注点在于用两周的时间提价第一个软件增量,用两个月完成整个软件开发任务。

所有模型的局限和利益在于快速开发和成本节约。快速开发带来了低劣的质量以及RAD所有缺点的引入,表1是对瀑布模型,原型模型,RAD模型,演化模型,OO模型,RUP模型,敏捷模型以及本文提出的基于 CBD 的过程模型。

4. CBD过程模型研究现状

Bailey and Basili[7]为组件重用和重设计提出了软件生命周期模型,模型提出的组件重用的五个策略:

(1) 分析现有程序,对可重用组件排序。

(2) 重新设计,消除特定领域的问题。

(3) 将可重用组件保存在仓库中。

(4) 以重用的方式构建独立状态组件并保存在仓库中。

(5) 利用组件开发新系统。

该模型还不是CBD的完整模型,但他的核心关注点在重用活动上。粗略的收集需求可能

是一个项目最终失败,这是由于需求的自然缺陷决定的。作者提出了构建软件的方法—基于知识的组件分类。通过知识将现有的组件表示、选择和整合到新的系统中。对重用工件的不同分类也有论述。这些是枚举,关键字,面和超文本,这边论文的目的是缓解基于知识的需求收集,但未提出全面的基于CBD的过程模型。

Eduardo Santana de Almeida等人[8]提出了分布式CBD的渐进方法。这种方法基于两个阶段,第一阶段是组合问题域的需求并用面向对象的语言设计可用的组件,这些组件保存在仓库中,第二阶段是设计师根据需求从仓库中选择适当的组件来构建软件。作者没有提出一个足够清晰的过程模型,而且也需要特殊的工具支持。

Luiz Fernando Capretz等人[9]提出了一种软件生命周期可用于面向对象的CBD构建。他主要的阶段是领域工程、系统分析、设计和实现。这个模型的主要问题是在设计阶段选择可重用组件,正常应该在分析阶段,进而分析师能够评估成本、时间安排、要求开发成果以及组件整合。

Hutchinson等人[10]提出了四阶段的基于组件的开发过程模型。这是非常复杂的模型。核心的观念就是整合现有的和新开发的组件,而不是内部开发,仓库的概念没这篇文章没有体现。

Ning[11]的CBD过程模型包括的主要阶段是组件分析、架构设计、组件链接、组件生产和组件整合,作者修改了瀑布模型并这和了上面提到的阶段作为新的CBD过程模型。瀑布模型不适合商业应用,因为他重复的审核阶段。时间和成本消耗过程模型只适合研究项目,表2是对以上几个CBD 过程模型的比较。

5. 基于CBD的过程模型

面向对象的过程模型是唯一能够表示对现有组件重用的过程模型,对象过程模型经过修改可以实现基于组件开发的重用。软件设计,构建和测试阶段体现了现有类的重用。本文提出的CBD过程模型的主要阶段有沟通、计划、分析与选择、可发与测试、评估,如图1。

项目开始通过与客户沟通获得基本的需求。初级用例在这个阶段开发出来。项目规格或提案文件在计划阶段完成。项目规格或提案文件包括可行性分析和风险评估,并提供成本效益分析(CBA)表。CBA表用于分析项目是否对客户可行。如果客户同意提案分析阶段才能开始。面向对象的过程模型能够依据CBD过程模型进行修改,所以新的分析阶段命名为分析与组件选择。这个阶段分析师收集详细需求并尝试定位和选择可重用组件,这里引入了组件仓库的概念,这些组件的之间的关系是确定的,而且组件的属性和行为也已经定义好,这个阶段需要最大化的重用组件,而不需要重复发明轮子。他将提高软件工程师的生产力和效率。基于面向对象模型的开发与测试阶段满足CBD过程模型的要求。被选择的组件依据新系统的需求进行修改和测试。对于新的组件要进行设计、开发和单元测试。对新开发的和重复使用的组件进行集成和系统测试。如果编程人员正在使用基于CORBA或RMI的架构,接口定义语言( IDL )可用于编码集成组件。面向对象的过程模型满足CBD过程模型的需要。客户需要评估和验证软件是否满足他们的实际需要。

6. 仓库的角色和重要性

基于可重用组件的软件开发可以提高效率,仓库用于可重用组件的存储和管理,他的组要好处:分类、搜索、修改、测试、实施、版本控制、变更控制、最新和一致的文档。我们可以从多维仓库(一个或多个仓库组成)中选择和管理组件,多维仓库的好处在于基于领域的开发和分类。

7. CBD过程模型的优越性

基于组件开发的优点:可重用性、互操作性、可升级性、低复杂性、时间效益、成本效益、开发效率、可靠性、高质量。可重用性是基于CBD开发的重要特性,用ASP开发一个基于 WEB 的Email 系统就是一个CBD应用的例子。协作数据对象的Windows NT服务器(CDONTS)是微软开发的邮件系统,这个组件能够用来开发类似的应用系统。一个特定工具的内嵌组件也放映了从用的好处,如微软VB的6.0文本框和命令按钮对象等,这些组件可以被频繁的使用,这就是VB6.0成为快速开发工具的原因。我们把经理花在业务开发实现上而不是基本的组件上。

CBD架构允许组件之间通信,使组件之间有互操作性,便于开发人员将系统整合到其他应用系统,不同银行ATM机上信息系统互联就是一个很好的例子。如果组件需要升级,对于WEB应用系统来说是很容易的,只需要用新组件替换原有组件而不需要更改应用系统。C/S架构用来开发分布式应用系统。这里有三中类型的C/S架构:(1)将表示层,业务逻辑层和数据层封装在一起的应用系统比如微软的 EXCEL 和 Access 软件等。(2)两层架构前端整合了表示层和业务逻辑层,后端是数据存储层,可以是Oracle SQLServer 等等。(3)表示层,业务逻辑层和数据存储层作为独立的层次,即是三层架构或多层架构,前端我们可用JSP,Servlet表示,业务逻辑可以用 EJB,DCOM 等描述,后端可以用数据库或一般文件系统表示。

三层架构是目前用的最广的用于开发商业软件。商业逻辑随着商业环境的变化,很容易改变,这样只需要改变EJB或DCOM组件即可,而不需要太多改动表示层和数据持久层的代码。

CBD的一个优点就是不需要程序员关系组件内部是怎么工作的。他们只需要关系组件的接口以及怎样和他们的系统整合在一起。这就像一个司机一样,他不需要知道轿车的发动机是怎么运行的。对于程序员他们只要关注应用软件的业务逻辑而不去关系基本的组件,如文本框和按钮组件的实现。CBD是程序员从复杂的编程中脱离出来。他们可以是可重用的组件在类似的系统中频繁的应用,提高了开发效率,降低了开发成本,当然也使设计过程更有效率。可重用的组件第一次被使用后,彻底的被测试和维护,因此,可重用的组件相比新开发的组件更可靠更稳定,同时软件的质量也有一定程度的提高。可重用的组件得到了很好的测试和维护。新开发的组件需要大量的开发和维护,大量的缺陷没有被发现,软件质量受影响就是这个原因。

大量的案例也正名了基于CBD开发的重要性。Lim[12]表述,重用组件的项目总储蓄额冲410万美元增长到了560万美元,同时投资回报率也冲216%曾长到了410%。据他论述,重用代码的缺陷率是0.9每千行代码,而新开发的代码的缺陷率是4.1每千行代码,他通过两个项目的比较,一个项目是基于CBD开发,一个不是,基与CBD开发的系统时间只是没有基于CBD开发时间的51%。35%的软件质量得到了改善。

8. 结束语

本文通过与传统软件开发的对比叙述了基于CBD的软件开发过程模型,并提出了一基于CBD的软件过程模型,同时讨论了仓库在CBD开发中的应用。通过以上的论述可以看出基于CBD开发的软件更具成本效益、节约时间和提高生产效率。一个可工作的原型系统将支持基于CBD的模型的。

参考文献

[1] Mark Lycett, George M. Giaglis. Component based information systems: Towards a framework for

evaluation. In: Proc of 33rd annual international conference on system sciences, Hawaii, 4-7 January 2001.

[2] Donald J. Reifer, Barry W. Boehm, Sunita Chulani, The rosetta stone: Making COCOMO 81 Files

Work With COCOMO II. Available from: http://sunset.usc.edu/publications/TECHRPTS/1998/

usccse98-516/usccse98-516.pdf,1998.

[3] Merijn de Jonge, Package-based software development. In: Proc of 29th EUROMICRO conference

new waves in system architecture,2003.

[4] Jihyun Lee, Jinsam Kim, Gyu-Sang Shin. Facilitating reuse of software components using repository technology. In: Proc of 10th Asia–Pacific software engineering conf, 2003.

[5] Jens-Magnus Arndt, Jens Dibbern. The Tension between Integration and Fragmentation in a

Component Based Software Development Ecosystem. In: Proc of 39th Hawaii international conference on system sciences, 2006.

[6] Highsmith J, Cockburn A. Agile software development: The business of innovation. IEEE Comput

2001;34(9):120–2.

[7] Bailey John W, Basili Victor R. The software-cycle model for reengineering and reuse. ACM

Press 1991:267–328.

[8] Eduardo Santana de Almeida, Alexandre Alvaro, Daniel Lucredio,Antonio Francisco do Prado,

Luis Carlos Trevelin, Distributed component-based software development: An incremental

approach.In:Proc of 28th annual international computer software and applied conference, 2004.

[9] Highsmith Luiz Fernando Capetz, Miriam AM Capretz, Dahai Li, Componentbased software

development. In: Proc of the 27th annual conference of the IEEE industrial electronics society, 2001.

[10]John Hutchinson,Gerald Kotonya, Ian Sommerville, Stephen Hall, A service model for

component-based development. In: Proc of 30th EUROMICRO Conf, 2004.

[11]Ning Jim Q. A component-based software development model. IEEE Software 1996:389–94.

[12]Lim WC. Effects of reuse on quality, productivity and economics.IEEE Software 1999;5:23–30.


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织