复用,软件减压直通车

发表于:2008-02-20来源:作者:点击数: 标签:复用
编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且愉悦了每个人的内在情感。 但它也是一个许多人痛苦挣扎的焦油坑以及一种乐趣和苦恼共存的创造性活动,对许多人而言,其中乐趣远大于苦恼。 An ———— FREDERICK P . BOORKS 《人月神话》 摘
编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且愉悦了每个人的内在情感。

    但它也是一个许多人痛苦挣扎的焦油坑以及一种乐趣和苦恼共存的创造性活动,对许多人而言,其中乐趣远大于苦恼。

An

———— FREDERICK P . BOORKS 《人月神话》

摘要:

复用即软件复用,是今年来被越来越多程序员重视的技术。本文通过对软件复用技术的分析,介绍了复用技术在提高软件效率、减轻软件开发压力方面的作用。

软件复用的定义

软件复用(或软件重用)是指充分利用过去软件开发中积累的成果、知识和经验,去开发新的软件系统,使人们在新系统的开发中着重于解决出现的新问题、满足新需求,从而避免或减少软件开发中的重复劳动。

软件复用可分为产品式复用和生成式复用。产品式复用是指对软件开发中中间制品(程序代码,各阶段中的文档或模型,测试用例等)的复用,其实现途径关键是将可复用的程序代码组装(或集成)而生成软件应用系统,因此产品式复用亦称组装式复用;生成式复用主要是将软件的需求进行规约化(或形式化)描述,然后利用可复用的应用程序生成器自动或半自动地生成所需的软件系统。目前组装式复用是软件复用的主流方式。

在目前主流复用技术中,有一个关键性的名词:软件构件,复用技术中的代码复用过程主要是依赖软件构件来实现复用的。 软件构件(也称软件组件)是软件系统内可标识的、符合某种标准要求的构成成分,类似于传统工业中的零部件。广义上讲,构件可以是需求分析、设计、代码、测试用例、文档或软件开发过程中的其它产品。狭义来说,一般指对外提供一组规约化接口的、符合一定标准的、可替换的软件系统的程序模块。通常情况下是指后者。

软件构件可分为可复用构件和不可复用构件。剖析一个应用软件系统,可以发现其中有三类构成成分:①通用的基本构件,如,数据结构,用户界面元素等等②领域共性构件,指仅在该应用软件所属领域内经常出现的构件③应用专有构件,指仅在该应用软件中出现的特定构件。可复用构件指前两者,通常情况下软件构件指可复用构件。

软件复用的优点

复用技术所带来的最大优点正是由 可复用构件来实现的,其优点主要体现在以下几个方面:

一、软件实现过程的效率提高

在软件实现过程中,无论采用什么模式下的开发方法,都要对设计过程中定义的各个模块进行代码级的实现。如果此时拥有可复用的构件越多,就可以节约大量时间,只需修改构件接口或再加一个转换用的中间接口,本来需要从头开始的工作就这样事半功倍了。注重构件积累的程序员都有这样的体会,当一个系统开发完毕,总会形成一些功能独立的模块。当然可以置之不理,可一旦把他们分类收集,经过不断抽象和封装,在以后的开发过程中你会发现,又如此之多的工作你以前已经完成。构建对于软件实现还有一个潜在的推动作用,不断抽象与优化的构件,有助于程序员把复杂的软件系统化整为零,从而提高整个软件系统开发工作的效率。当我们面对庞大的系统设计任务时,除了选择合适的设计模式之外,如果不能使用构件、创造构件,那么这次软件开发过程仍然无法高效率地进行。

二、软件测试过程的难度降低

一提到测试,很多人就认为让用户尽管用好了,出了问题再反馈修改不就行了。当然任何软件在发布之后的用户使用中免不了会出问题,但是如果一个不经测试的软件直接发布,后果将是灾难性的。会有接连不断的问题出现在用户面前,其中有许多必然是致命问题,如财务系统的费用丢失,金融系统的收支不平,实时系统的信息丢失,等等 …… 而这些问题正是软件测试所要解决的任务,所以测试工作是软件开发过程中很重要的一环。在有些大型项目中,实现测试的时间甚至超过开发的时间。

那么如何保证高效全面地测试出所有的错误呢?除了各种测试方法、测试用例之外,如果被测试系统中大量使用构件,测试工作就会轻松许多了。构件是已经经过检验合格的独立程序,其内部应该是正确无误的,那么只需要测试其接口(输入输出结果)的正确性就可以了。这样不仅避免复杂的多路径代码逻辑测试,也很容易找出错误点。如果万一构件的内部出现问题,不用着急,这部分的修改任务是由构件供应方提供的,当前项目程序员不用修改它。测试不仅是在软件发布前,在之后的维护工作中,测试也很重要。当一个版本发现 BUG 或进行版本升级,只要对构件进行调试查找错误或对构件进行改进,然后只编译修改过的构件,再将客户端的构件对应的动态库文件更新就完成了。这主要体现在软件的网络更新方面,正如很多人使用过的那样,只要连上 INTERNET 再运行升级程序就可以坐在一边喝茶了。

如果一个系统的 80% 部分是由一个个构件组装而成,这样一个系统将是非常完美的,无论是测试还是维护都将大大轻松。

三、程序员所担负的压力减轻

众所周知,在目前国内这样一个并不成熟的软件发展环境下,大多数程序员的负担是很重的。在许多中小型企业中还没有形成团队开发的模块,若干个甚至单个程序员的松散合作模式十分常见,因而软件开发过程中的需求分析、系统设计、代码实现、测试反馈、安装部署的繁重任务都是由几个或一个人员承担,没有一个合理分工。强大的劳动强度、有限的开发时间、不合理的薪金回报,十分影响我国软件业的快速发展。

在程序员的繁重任务中,代码是现实最忙碌的,所以在这一环节如果能充分利用构件,将极大减轻程序员的压力,缩短开发周期,节约人力成本。代码实现过程的时间缩短,会给其后续的测试反馈、安装部署、版本发布等工作带来好处。节余的时间可以使后续的工作留有余地,若反之实现过程的时间超出预算,那么要想保证在规定的日期发布软件,就必须压缩其后各项工作的时间。工作时间的变化,不断的加班满负荷运转,会直接影响工作人员的情绪,反而会降低工作效率。

可见,小小的构件带来的是对整个软件工作流的影响,不仅仅能减轻程序员的压力,也能减轻整个软件涉众的压力。

四、软件系统性能的稳定性提高

在像证券、医疗这样的大型企业中,软件系统往往达到上百万行的代码容量,从开发到测试、维护都是一个长期的过程,而且其中的人力成本很高。而且一个长期使用的系统如果要进行大规模的升级或移植到新系统,这百万行的代码对于任何程序员来说都是一个头疼的问题,甚至 成为一场不可能的任务。现在我们可以利用复用技术,将百万行的代码化简成为几百个的构件。 而基于构件开发的系统,当一个系统由几百个构件组成的时候,你只有几百个地方可能出错;而当这个系统由几百万个代码组成的时候,它就有几百万个地方可能出错。所以,当用构件来“组装”软件的时候,这个系统的性能就提高很多。

五、软件企业的稳定性大大增强

如今国内大多数软件企业仍然依靠软件开发人员的稳定性来维持公司的长久运作,而人一旦作为主要因素,其稳定性就会大大下降。当软件复用技术和构件技术出现以后,软件开发商不必再依赖程序员的大脑,大量技术保存在构件中,通过很好的复用达到知识的不断延续。而且软件开发周期也大大缩短,以 前需要 40 个人天的工作量,现在也许 20 人天就完成了。 ,这 20 个人天所具备的是他们过去所积累的构件。这时整个系统的管理、稳定性都有了很好的保障。而且也不怕因为几个人走掉,而使公司的无形价值降低,因为公司的核心价值就体现在这些构件里面。

软件复用中应当注意的问题

软件复用使人们在软件开发中不必“重新发明轮子”或“一切从零开始”,提高了软件生产率和质量,缩短开发周期,降低开发成本。软件的重用中没有材料的消耗,而且软件通过多次重用后其质量和可靠性越来越高。据统计,软件系统的开发中若复用程度达到 50% ,则其生产率提高 40% ,开发成本降低约 40% ,软件出错率降低近 50% 。近十年来软件复用已成为解决软件危机、提高软件生产率和质量的最有效、最具潜力的手段。

软件复用也并非是一剂完美的良药,在复用过程中如果不慎重分析系统间的差异,不能定义足够抽象的接口,复用就有可能造成混乱,反而加深系统的复杂度。

建立在可复用构件基础上的软件开发的 思路下,简洁表达带来了简洁的软件更新 ——“ 随需应变 ” 不再只是一句口号。面向构件的软件体系,松散耦合的构件组装方式,系统不同部件之间的低关联度。重复使用经过考验的构件,可视化的知识表达,系统复杂指数的数量级下降,也使得企业应用更为成熟更为稳定。

软件复用有三个基本原则,一是必须有可以复用的对象;二是所复用的对象必须是有用的,三是复用者需要知道如何去使用被复用的对象。软件复用包括两个相关过程:可复用软件 ( 构件 ) 的开发和基于可复用构件的应用系统构造 ( 集成和组装 ) 。解决好这几个方面的问题才能实现真正成功的软件复用。

通常构件的开发应遵循以下几条原则:

1.系统结构分层,业务与实现分离,逻辑与数据分离。

2.以接口为核心,使用开放标准。

3.构件语义的描述要形式化。

4.提炼封装构件过程要严格记录。

5.设计模式也可以重用。

6.利用构件开发工具。

总结

面向构件的趋势正为软件行业的预言家所看好。在《软件成功的奥秘》一书中,麦肯锡四位资深专家 Detlev Hoch 、 Cyriac Roeding 、 Gert Purkert 、 Sandro Lindner 经过对全球一百家最成功的软件公司、 450 位顶尖领导人物的访谈之后,认为面向构件技术是软件行业未来前景中的核心部分,软件行业提高生产率的主要来源。引用软件专家 Brad Cox 的话说,面向构件的技术是软件行业的银弹!

可复用的构件技术,已经成为大多数程序员不断使用的技术,也出现了专门以提供构件服务的供应商,它已经不再是一种单一的技术,而成为软件产业中的重要生产力、推动力,它不仅减轻了软件开发的重负,也开辟了软件产业链中的新方向。软件复用这辆减压直通车搭载的不止是技术的,更有对软件开发过程的全面提升。作为程序员在不断创造、不断将所想变成实现、在获得编程所带来的愉悦同时,要不断提高编程技术,但通过无数程序员不断的努力,总有一天“软件危机”会被缩小到可以被控制的范围。

原文转自:http://www.ltesting.net