朱伟斌
摘要传统的生产模式越来越难以满足飞速增长的软件需求,要提高软件生产效率,必须研究软件生产模式。本文对当前提出的新的软件生产模式(MDA、软件工厂)进行了剖析,提出了进行改进软件生产模式实践的要点。
关键词软件生产模式 MDA软件工厂DSL 软件模式软件开发方法学
1 引言
在高需求、高投入、高竞争的环境下,软件生产的规模和效率成为软件企业最需要解决的问题之一。随着软件工程理论和CASE工具的发展,突破传统软件开发方式的方法论逐步被提了出来。OMG在UML的基础上提出了模型驱动构架(简称MDA),为从软件抽象模型到软件代码的自动生成指出了一个方向。这个概念很快就得到工具厂商的响应,目前大多数主流UML工具都支持MDA的部分功能。而在Microsoft即将发布的Visual Studio.Net 2005中更是加入支持软件工厂的工具Team System。可以预见,以软件自动化生成为特点的软件生产方式的革命即将来临。
事实上,各种新型CASE工具正在悄悄地改变我们的软件开发模式。然而,自动化的软件生产时代并不会马上到来。软件生产自动化并不仅仅是几个软件工具,它更是一种新的软件开发的方法学。它需要我们的管理人员、开发人员转变传统的开发观念,使我们的技术积累、过程管理等方面都适应新的开发模式。而且,从传统开发模式到自动化开发模式必定是一个渐进的过程。我们正处在变革的初级阶段,必须应用与此阶段相适应的开发模式。
2 传统软件生产方式和MDA开发过程
到目前为止,大多数软件代码的生产仍然依靠程序员来人工完成。这种传统的软件生产方式为软件产业带来了许多问题。首先,软件生产的效率低下,项目延期率极高;其次,软件产品的质量没有保证;再次,软件开发团队的规模受到局限;最后,软件产品难于修改和维护。
这里,有一个问题困扰着软件界:程序员所进行的大量工作都是集中在抽象层次较低的软件编码上,软件应用的抽象层次和程序代码的抽象层次相距较远;程序代码对应用需求的准确程度难于测量,程序员的个人能力成为制约软件产品质量的关键。而且,随着软件规模的越来越大,软件项目也变得难以控制。
针对传统软件开发模式存在的弊病,MDA被提出来了。尽管,MDA仍然不成熟,但是它确立了一种新的软件开发架构。MDA的全称是模型驱动架构,它不仅仅是一种标准,更是一种重要的开发方法学。2002年,国际权威的对象建模标准化组织OMG将MDA作为其战略方向。短短三年过去,几乎所有的主流UML建模工具都融入了MDA功能。
顾名思义,MDA是使用软件建模语言作为软件编程语言来直接产生软件的一种体系结构,它定义了平台无关模型(PIM)和平台相关模型(PSM)这两个概念。PIM是具有高抽象层次、独立于任何实现技术的模型,它描述软件系统如何支撑业务,并不关心软件是在哪个平台上实现的。PSM是使用特定平台的术语描述如何实现业务的模型,例如关系数据库模型使用表、视图、外键约束等描述业务对象及其之间的关系。
MDA的最大特点就是这些变换是自动进行的。如果用MDA的概念套入传统的开发生命周期,传统的开发也可以看作是模型的变换。然而,传统的变换是需要程序员手工进行的,唯一的自动变换是高级语言代码到可执行目标代码的变换。由于从PIM到代码的变换可以自动进行,MDA过程迭代时,开发人员就可以从PIM模型开始,而非从代码开始。这样,分析设计文档就不会和代码相分离,整个软件也就更容易理解了。
MDA的目标就是将程序开发工作的抽象层次提高。软件技术发展史,也是开发抽象层次逐步提高的历史。例如在语言方面,我们从机器语言开始,经历了汇编语言、高级语言、4GL的发展历程,高级语言也从结构化语言发展到面向对象的语言,现在又出现了基于模式的编程。每一次转变都是一次抽象层次的提高。然而到目前为止,实现MDA仍然面临一些现实问题,如怎样根据自身需求构造变换,如何使得构造过程足够简单。
3软件自动化生产模式的实践策略
MDA的提出让软件界看到了软件生产模式变革的新希望,许多新的方法论也被提了出来。微软公司提出了软件工厂的定义:一个使用基于软件架构(Software Schema)的软件模板来配置的可扩展的工具,它是可以为产品系列提供生产设备的软件产品系列。微软提出的软件工厂,其创新之处就是在于生产流程的自动化。
软件工厂的概念体现了先进的自动化编码概念,提高了开发人员工作的抽象层次,同时也给开发人员的手工加工提供了空间。虽然MDA远未成熟,但是改变生产模式,提高软件生产的效率,是每个软件项目管理人员和开发人员必须要做的努力。
在软件生产自动化的初级阶段,笔者认为超前要求软件完全自动化生产几乎是不可能的,但是完全可以运用现有的工具进行半自动化的软件开发。图1描述了一种切实可行的半自动化软件生产模式。
这种软件生产模式分成两条主线。一条主线是软件体系结构方面的研发工作。这是软件自动化生产的一个前提,可以将这一步工序认为是生产线的建造。通过软件体系结构方面的开发,我们可以得到两个对于自动化生产至关重要的部件,一个是软件支持库,另一个是软件自动编码工具。另一条主线是真正应用软件产品的研发。软件产品研发的第一步是自动化进行的,是通过已经配置好的软件自动化编码工具将业务需求模型自动转换为待加工的半成品代码,我们可以将这个过程看成是生成毛坯的过程。第二步是通过手工进行的,是对自动生成的代码进行修改、微调的过程,我们可以将这一过程称为精加工过程。经过程序员的精加工,一个符合用户功能和性能需求的高质量软件产品就产生了。
这种模式可以加快开发进程,使软件符合企业所研发的技术架构,代码更一致,可维护性更强,稳定性也更有保证;同时,它也避免了自动化生成代码刻板,细节难以自动生成的问题。这样的方案比理想化的MDA模型更容易实现,同时它也符合软件工厂的一些基本特点。
4 结束语
运用图1所示的生产模式,笔者所在的公司已经进行了一些成功的实践。在进行软件自动化实践的时候,我们得到了以下几点宝贵的经验。
(1)在先进的理论指导下,运用各种行之有效的模式,探索适合自身发展的生产模式。
(2)重视软件开发团体自身的技术积累,以更好运用软件自动化生产工具。否则,就会陷入巧妇难为无米之炊的窘境。
(3)转换开发人员的心态和习惯,及时培训开发人员、解除开发人员的疑虑。在刚开始实施根据数据库模式生成代码时,笔者所在的公司曾出现过这样一些情况:开发人员对生成工具不熟悉,认为不如手工编码方便,还认为使用生成工具不灵活,限制了他们的创造力,不愿意修改由软件工具生成的代码。在这样的情况下,项目管理人员不得不反复讲解软件生成工具的原理,强调在当前条件下生成工具只是生成毛坯,还需要精加工过程。
软件自动化生产模式需要逐步完善,其成功实践也不是一朝一夕能够取得的。随着软件工程技术的发展,软件自动化生产模式的探索已不仅仅是停留在理论上。软件生产模式的革新将为我们带来更高的软件生产力。无论我们在观念上更倾向于MDA、微软软件工厂、面向语言编程,进行软件生产模式创新都是势在必行的。这不仅仅是软件企业竞争发展的需要,也是中国软件产业走向强大的必由之路。
参考文献
1 Anneke Kleppe, Jos Warmer, Wim Bast. 鲍志云译.解析MDA.北京:人民邮电出版社,2004
2 David S. Frankel. 鲍志云译.应用MDA. 北京:人民邮电出版社,2004
3 张亚勤.全球软件行业现状、趋势与挑战.http://research.microsoft.com/asia/news/displayArticle.aspxid=1004
4 Umlchina.袁峰摘译.Forrester发布MDA和基于模式开发报告.http://www.umlchina.com/News/Content/190.htm,2005
5 Jack Greenfield.软件工厂简介.http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/aj3softfac.mspx,2004
6 Jack Greenfield.通过模式、模型、框架和工具装配应用程序.http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/SoftFactAssApp.mspx,2004