截至目前,软件平台主要表现在以下两个方面。
第一种软件平台是软件基础架构平台。这一平台是为复杂应用软件系统提供通用技术基础架构的软件平台,更好地实现应用软件与操作系统软件之间的交互。例如,大家熟悉的美国BEA公司的WebLogic、IBM公司的WebSphere等软件,都是具有代表性的软件基础架构平台。这些基础架构平台已逐步跨越了软件企业边界,成为遵循业界标准的公共平台,例如,上述两个平台都遵循了Java企业版(Java Enterprise Edition)标准。由于软件基础架构平台以公共平台的方式提供了原来必须由应用软件分别来实现的功能应用,并且提供了一整套基于软件基础架构平台进行应用软件开发的工具,具有成熟和稳定的质量,因此大大提高了软件生产率,降低了软件维护成本。因为遵循通用的标准,为一个软件平台开发的构件,能够容易的用到另一个平台上。这种软件基础架构平台类似于汽车车型平台,有助于应用软件开发效率的提升。
第二种软件平台是业务基础软件平台。业务基础软件平台是以业务导向和驱动的、可快速构建满足业务流程的应用软件的软件平台。目前,不少大型企业级软件厂商,为在不同企业用户的个性化需求和开发效率之间取得均衡,都强调将企业级软件开发中最基础、最稳定、具有较高共用性的业务处理部分抽象为业务基础软件平台。我认为,这些业务基础软件平台,是一间企业级软件企业最重要的软件资产。针对不同客户和应用环境进行的开发过程,都可以以业务基础软件平台为基础更高效地搭建起来,而无需像以前那样必须从头开始另起炉灶。在一些领先的软件企业内部,还开发了大量基于软件平台之上的业务处理标准化组件,可以帮助开发人员更快地为客户提供定制化开发。成熟的业务基础开发平台,由于经历了企业内部更加严格的测试以及用户实际应用过程的检验,提高了软件的强壮性;而且,更重要的是,采用基于平台的架构,可满足企业的多数共性需求,软件开发人员可以“把好钢用在刀刃上”,集中精力进行与企业个性化需求相关的软件定制开发,大大提高了系统实施的效率。
从20世纪90年代开始,国际大型软件企业,都在着力推进基于平台架构的软件设计和开发,国内软件厂商,近年来,也逐渐开始将目光投向基于平台架构的软件设计与开发。就整体而言,相对于软件基础架构平台少数厂商主导市场并形成事实标准的格局来说,业务基础软件平台的兴起要更晚一些。因此,目前整个市场上竞争性的业务基础平台还相对较多,而且多数业务平台还主要局限于企业内部。不过,可以预计,基于软件平台极强的规模经济效应,借助市场竞争的强大力量,未来几年内,唯有少数几个在全球范围内具有广泛的客户安装基础并以其平台为中心形成具有广泛影响的产业生态链的业务基础软件平台,才能在全球软件市场竞争中脱颖而出,成为全球业务基础软件平台的事实标准。例如,在全球企业管理软件领域,我们相信,依托SAP在全球市场遥遥领先的客户安装基础,我们的企业管理软件平台正在逐渐走向开放,越来越多的合作伙伴选择基于SAP的成熟软件平台为用户进行快捷、高质量的定制化实施,软件生产模式从结构化的大规模开发走向基于平台和构件的大规模定制,这已经在管理软件领域展示了创新所蕴涵的巨大力量。
除了基于软件平台架构的设计外,20世纪90年代,许多关键领域的重大进展为软件工业化生产奠定了基础。
首先,在软件开发过程进一步走向规范化的同时,大型软件企业正在努力实现业务需求的标准化。我认为,业务需求的标准化,将是企业级软件开发和企业业务流程管理领域的一次影响深远的重大变革。通过对通用业务处理需求的标准化工作,软件企业能完善软件构件粒度划分和构件之间交互界面的标准化,进一步提高复用性,开发效率和可维护性。从全球软件产业发展的历史来看,可复用的软件构件在20世纪70至80年代一般仅可在软件开发阶段复用源程序代码、子程序库和类库等程序代码片段(一般成为代码件),未来将可以拓展到覆盖整个软件的生产过程,囊括了分析件、设计件、代码件、测试件等多种类型,从而催生了设计模式、框架和软件体系架构等新的概念和方法。这些创新的概念和方法,大大增强了软件企业根据客户个性化需求进行低成本软件大规模定制开发的能力。在管理软件厂商内部,已基于用户的各种不同应用来定义大量的标准应用功能模块,例如,详细定义销售订单的内容,把相关的业务流程适度划分为一系列处理步骤,每个步骤都成为标准化构件,能够藉由标准接口替换组合,这样软件厂商内部的开发人员甚至合作伙伴,便可以基于这些标准化模块在软件平台基础上更快捷地进行定制化,向汽车工业一样复用大多数模块。
其次,开放标准提升软件平台和构件标准化程度,为基于构件组装实现软件工业化生产奠定了基础。全球领先的大型软件企业,率先认识到设计良好的软件架构对于实现软件工业化开发,提高产品研发效率和质量的战略意义。他们逐渐在企业内部形成了高度模块化和标准化的体系架构。这些早些年仅仅局限于企业内部的平台和构件的标准,并不能通用。不同的软件企业,采用的平台和构件标准各不相同。这就使得平台和构件的应用难以突破企业边界,难以基于构件实现工业化开发。
近年来,主流软件厂商提出的标准逐渐突破企业边界,首先在关联开发商之间共享,然后慢慢走向开放标准。例如,对象构件模型(Component Object Model,COM)和公共对象请求代理体系结构(the Common Object Request Broker Architecture,CORBA)等跨越企业边界的软件构件标准的建立,使得软件构件在标准化方面迈出了一大步,推动着商业化构件(Commercial Off-the-shelf,COTS)的诞生和发展,使得软件产业有望出现类似于汽车工业产业链中上下游厂商之间的分工协作。
到Java技术的出现,这个标准化的过程又有了新的发展。不同于以往,Java技术所有的标准都是通过公开讨论的过程制定的。所有厂商的产品,都是对事先制定的标准的一个实现案例。所以Java技术能够提出“一次性编写,在任意地方可运行,在任意地方可复用”的口号。
尽管直到今天,这些软件构件标准模型还都存在需要突破的瓶颈,但开发的接口标准,使大规模软件复用和动态软件组装成为可能。可以预计,随着这些构件标准模型的进一步发展,未来将是基于开放标准来规范平台和构件成为主流。基于开放标准,这些由不同软件开发商提供的平台和构件,可以相互配合,像搭积木一样为不同的用户需求组装出各种不同的应用。
近年来,面向服务架构(Service-Oriented Architecture,SOA)的全面兴起,正在将软件平台和构件的标准化推向新的高度,使全球软件产业在走向大规模定制上又迈出了重要一步。
面向服务架构的思想,最早是由于国际知名的IT研究与咨询机构Gartner在1996年提出的。Gartner不仅提出了面向服务架构的思想,还为面向服务架构描述了远景目标,其中包括让IT变得更有弹性,以更快地响应业务需求,实现实时企业(Real-Time Enterprise, RTE)等。到了2002年12月,Gartner又提出面向服务架构是“现代应用开发领域最重要的课题”,并预计到2008年,面向服务架构将成为占有绝对优势的软件工程实践方法。在我看来,究其根源,面向服务架构,可以视作是基于平台的架构思想的产物。采用面向服务架构,将企业应用过程中的一些业务逻辑以及处理过程,进行服务化封装,而且这种封装的业务功能或者是逻辑,不依赖于它底层的技术,通过一个标准接口进行对外交互。这样,企业可以非常灵活地利用已有的服务搭建新的应用,从而降低整个系统实施以及技术或者是业务变更带来的复杂度。当市场和业务流程发生变化时,面向服务架构能让用户方便地去重新构建应用。这种重新构造是在保留原有应用中有用服务的基础上,通过定制或者租用新的服务,甚至只是重新安排服务在业务流程中的先后顺序来实现。这样在很大程度上保护企业已有的IT投资。而对于软件和解决方案提供商来说,面向服务架构降低了软件系统维护的成本以及二次开发的难度。
目前,实现面向服务架构的主要障碍,仍在于行业标准或协议的制定和推广。面向服务架构要求的软件模块松耦合性和互操作性,必须完全建立在标准或协议之上。这种对标准或协议的要求,在传统制造行业中比比皆是。不妨还是以汽车行业为例,在手工作坊式的汽车生产模式下,由于各个作坊并不采用统一的量具系统,这就使得不同作坊打造出来的零件必须经过熟练技工的打磨才能顺利装配;经过亨利•福特对统一的量具的广泛采用,汽车企业可以逐步采用标准的量具系统。发展到今天,一辆汽车中数以万计的零部件,分别由不同的生产厂商来提供,每一种零部件都必须遵循标准进行生产,零部件之间按照协议可以互相组合。只有这样,整车厂商才有可能把这些标准零部件最终组装成客户要求的不同的汽车。同样,在软件产业中,一套统一的服务标准或协议,能保证各种不同功能的服务,可以作为软件模块,像乐高积木一样通过不同的组装形成不同的解决方案。
面向服务架构可以说是软件平台和构件标准化的集大成者。面向服务架构的标准化工作,不仅突破了单个厂商的界限,而且也跳出了操作系统、编程语言、通信方式等技术局限,将标准化推向了一个新的高度。这对于实现软件的构件化开发是很有帮助的。它的诞生和深入发展,有望进一步加速软件产业的工业化进程。
最后,模型驱动的自动代码生成等软件自动化开发工具使软件生产更方便快捷。从汽车工业一百年的发展历史来看,机床工业和专用机械的发展,对汽车工业劳动生产率的提高起到了举足轻重的作用。近年来,在软件产业领域,软件开发工具的发展也正在为提升软件开发效率,实现软件工业化生产逐渐铺平道路。借助软件建模和自动代码生成工具,今天的软件开发者已经无需像机器语言和汇编语言时代的前辈们那样,完全自己动手一条一条来编写代码。目前,基于建模驱动的开发,正在成为领先的企业级软件开发商的越来越重要的开发模式。基于建模驱动的软件开发过程并不是再像原来那样从头开始写源代码,而是侧重采用软件构件进行组装。而基于软件构件的产品组装也并不是像早些年的软件复用那样将源代码进行复制、粘贴,而是经过一个更加可视化和智能化的过程来实现:所用的软件构件按照标准接口定义开发出来后,分门别类地存储在知识库中。我们根据对客户需求的抽象进行企业业务建模;进而,我们根据建立起来的业务流程模型,通过图形化建模工具,用知识库中的软件构件描绘出流程模型;软件平台会自动按照模型,把后台的服务组合串联起来,这样就形成了一个自动化的软件生成和开发过程。相对于传统的软件开发模式,以建模驱动的软件开发的最大特点就是,我们把模型建好了,应用也就随之建好了;在这种模式下,所谓的软件开发过程,基本上就是在业务建模的基础上,做软件构件的选择和拼装。 |