凌瑞骥教授谈软件构件化技术

记者於丹
中国计算机世界出版服务公司版权所有

[返回]

  攒台计算机很容易,那么自己动手攒套应用系统又如何呢?有没有想过会有这样一天,您提着篮子在超市中选购一些软件零部件,然后回家像搭积木一样组装成满足自己需求的应用系统?这绝对不是天方夜谭,本期访谈中,清华大学凌瑞骥教授将为您细述其详。

搭积木——做软件

——凌瑞骥教授谈软件构件化技术的现状与未来


  据我所知,在计算机界一直存在着软件行业生产效率低下的问题。大多数软件都是凭借个人的聪明才智采用手工方式生产,效率低,成本高,开发大型系统的失败率极高。请问您对这一现状有何看法?我们如何才能改变这种效率低下的软件生产方式?


  你所说的这一现状的确存在。现在已经是信息时代了,软件这一个关系到国计民生的高科技领域却仍然保留着19世纪手工作坊的生产方式,不能不说是一个莫大的讽刺。据美国国家标准和技术研究院的一份报告显示,占据世界软件销售额85%的是大型的专用软件,而其开发的失败率却高达70%。
  如何才能提高软件生产效率?如何保障软件产品质量?如何减少重复劳动?软件的生产方式亟待一次根本性的转变。
  众所周知,人类社会的生产方式从19世纪的手工式单件生产进化到后来的大工业生产,一个决定性的飞跃就是出现了标准化的零部件。产品可由现成的零部件装配而成,从而使生产走向了规模化。
  那么,我们的软件生产是否也能脱离传统手工业的单件生产模式,转向建筑在标准化零部件基础上的高效率、高质量的新型生产方式呢?
  软件构件化(Software Component)技术此时就应运而生,其目的是彻底改变软件生产方式,从根本上提高软件生产的效率和质量,提高开发大型软件系统尤其是商用系统的成功率。有了软件构件之后,应用开发人员就可以利用现成的软件构件装配成适用于不同领域、功能各异的应用系统。


  您认为软件构件化技术是软件生产迈向规模化的一剂良方。那么什么是软件构件化技术呢?您能为我们给出一个明确的定义吗?


  软件构件化可以说是跨世纪软件技术发展的一个趋势,也是软件工程界的一个热门话题。但是究竟什么是软件构件,至今也没有一个严格的定义。目前比较典型的有四种说法,分别从不同角度对软件构件加以了说明:
  第一种定义认为软件构件是一个并非不重要的、相对独立的而又能够被替换的系统中的一部分。
  第二个定义从动态的角度出发,指出处在运行状态的软件构件是一个将若干个程序动态链接在一起的程序包。
  第三种定义认为软件构件是可以独立使用的,并且不是由系统开发人员和系统最终用户而是由第三方提供的。
  第四种定义从商用角度出发,认为所谓商用构件指的是一个能够自动化的商业过程的软件实施办法。
  这几点定义存在着一些共性,都强调软件构件的独立性、互换性和功能性,即软件构件不依存于某一个系统,它可以被相同的构件所替换,并且具有实际的功能意义。
  根据上述定义,软件构件通常可分为白匣子、灰匣子和黑匣子三类。所谓白匣子是指在提供软件构件的同时也提供实现构件的全部源代码,在应用这个构件的时候,开发人员需要对源代码进行某些修改,然后才能将它集成到系统中实现一定的应用目的。灰匣子只提供有关界面部分的源代码,开发人员在应用构件时对构件的内核是不清楚的,只能在接口界面上做一些用户化的工作。黑匣子则完全不提供源代码,只提供构件的二进制可执行形式。
  我们强调构件是封闭、透明、独立、可互换的,而白匣子的可复用性和可维护性都较差,因此在构件化软件的开发过程中,我们原则上不赞成使用白匣子。
  软件构件近年来的一个趋势是开发现成构件(Commercial Off the Shelf,简称为COTS)。其特点是:
  1.不是由应用开发人员而是由第三方做的,是现成买来用的,即强调构件的预制性;
  2.不提供源代码,强调构件的封装性和透明性;
  3.强调可互换性;
  4.不是为某一个客户定制的,而是在某一领域中通用的。
  总而言之,现成构件是具有预制性、封装性、透明性、互换性、通用性的一个软件单元。


  据我了解,清华大学是国内软件构件化技术方面的先行单位,在长期的实践工作中,您认为软件构件化技术中的核心问题有哪些?


  对于构件的开发人员来说,首先要面对的问题是如何定义一个新的构件,即如何在应用领域的应用模型中找出有共性、可通用的部分做成软件构件。要解决这一问题,光有软件技术是不够的,还要求有应用领域的相关知识,两者结合起来才能够解决应用问题。
  因此在做构件之前首先要明确它将适用于哪个应用领域,然后再根据这个领域的知识和应用模型抽出最合理的构件定义。
  第二,构件相互之间的集成和装配也是一个不容忽视的问题。为了能够用构件集成应用系统,使构件能够装配互换,必须要有一个统一的标准,如跨平台的开放标准CORBA(公共对象调用中介结构)等。
  第三是如何实现构件之间的相互通讯、如何实现数据共享的问题。
  第四,软件构件化技术只是刚刚起步,而在此以前已有成千上万的一体化系统在运行。新的构件化系统如何继承非构件化系统的数据?如何实现这一过渡和转变?这些都是软件构件化技术在发展路途中面临的重要问题。


  Java作为一种平台无关性语言,您认为它的出现将对软件构件化技术的发展产生怎样的影响?


  Java面世至今不过两年的历史,但它对软件构件化技术的发展影响深远、意义重大。
  首先,Java促进了软件构件化技术的开放与标准化。Microsoft公司可以称作是推进软件构件化技术向前发展的一员力将。它为Windows系列平台确立了自己的标准,如COM(构件对象模型)、DCOM(分布式构件对象模型)等,提供了一个构件化的环境。现在已有一批软件公司追随其后,在这一平台上做出了许多成功的构件。对于小用户来说,如果已经将所有的信息处理过程依托在单一平台系列上,采用Microsoft公司的标准不失为一个非常好的解决方案,但是对大中型的用户而言,仅靠Windows系列平台往往是不够的。软件构件化技术的发展亟待一个开放的标准和环境,而Java恰在此时出现了。Java的根本思想是跨平台性,在一切平台上都可以运行,从而为软件构件化技术迈向开放的标准和环境提供了一个新的契机。
  其次,Java全力支持Internet。它本身就是为Internet而设计的,因此它对Internet的支持也就非常妥贴和自然。
  第三,Java提供了更高级的安全保障机制,它能让用户在每一层上设置安全保障,对过程进行更强有力的控制。正是上述这些因素促进了构件化技术在商业应用中的成熟。Java对软件构件化技术的促进主要是通过Java Bean,即通过做Java构件来实现的。用Java做出来的构件是跨平台的,直接支持网络计算,并且还可以实现更高水平的安全,因此才有可能使软件构件化思想在电子商务中得以广泛地推广。


  您为我们介绍了很多软件构件化技术的发展情况,请问在国内软件构件化技术的进展如何呢?


  软件构件化的研发工作在我们国家业已起步。例如,我们清华大学正和IBM公司联合进行软件构件的开发工作。我们从1996年开始做构件,当时做了6个通用的商用构件:表、按键、图表、人员档案、记事本、包装格式等。利用这6个构件,我们组建了2个应用的演示程序,一个是通讯录,一个是商业用的订单。1996年12月Java出台后我们全力做Java构件,也就是Java Bean,迄今为止已完成了近30个Java Bean。在IBM公司的协调组织下,我们联合印度、白俄罗斯、印加等国家利用互联网和群件技术,实现了三大洲五个国家的异地协同,构建了一个虚拟
实验室,共享着几十个数据库,共同投入软件构件的研发工作。今年的计划是做100个Java Bean,其中大多数均为商用。


  软件构件化技术将会对我国的软件产业产生怎样的影响?


  全世界的软件行业,特别是在应用领域中的软件技术,正在酝酿着一次飞跃。这次飞跃将会对软件行业的生产方式产生根本性的变革。这对于我们来说既是挑战也是机遇。例如,套装软件是目前软件市场上的主要形式,但是系统配制的不灵活性是套装软件的一大弊端。如果我们充分利用构件化技术,就可以将我们的套装软件做得更灵活、更经济、更易于普及。又例如,中国软件行业要涉足国外应用软件市场,因为存在语言文化的障碍则必然会困难重重。如果我们做的是标准化的软件构件,则这一障碍将大大降低,有希望在下一世纪初大规模地进入
国际市场。总而言之,软件构件化技术为我国的软件行业提供了迎头赶上的可能性,至于如何把握这一契机,则是应该引起我们充分重视的问题。

[返回]