受到这一发展势头的感染,三位科学家涉足了另一个“雷池”——软件开发过程。软件业一直在寻找一种类同于硬件的开发方法或者过程,虽然从软件诞生起,人们就提出了各种各样的软件开发过程,以帮助人们提高软件的开发效率,保证软件质量,然而不下几十种的软件开发过程模型仍然存在不少缺陷,而在对统一的软件开发方法的探索近几年几乎没有大的进展,这与软件产业在各国所受到的重视程度大相径庭。于是,三位科学家于1997年提出了“统一的软件开发过程(The United Software Development Process)”。在经过了多年的努力后,人们开始接受这一方法。然而UML是一种独立于过程之外的建模语言,它并不直接和软件开发过程相关,人们的问题是:统一的软件开发过程对软件开发是一剂灵丹妙药吗?软件开发过程能统一吗?
软件的危机来自何方?
软件在我国信息产业的发展中具有极其重要的战略地位,随着我国加入WTO,政府要求在“十五”计划期间在软件上能有所突破的迫切性很强,同时出台了一系列鼓励与支持软件发展的政策,这对软件界无疑是一个极大的支持。但是软件发展有许多自身的规律,正像1968年“软件危机”出现以来,人类在软件开发方面的进步很大,但却从来没有真正解决软件“危机”问题。
2002年3月22日,以探讨亚洲国家经济发展为中心的美国圣路易华盛顿大学亚洲国际顾问委员会首次在北京举行会议。该团的成员美国圣路易华盛顿大学计算机系主任Catalin Roman博士接受记者采访时认为,其实,软件的核心是人,软件是逻辑产品,不是硬件中的制造,而是开发,是人的智力的高度发挥。人尽管是最聪明的,但也最容易犯错误。软件中的许多错误都是由于人的认识、知识、经验不足,或开发过程中的疏忽或交流不够(误解)而造成的。而这种错误又是由于受到测试条件的限制未能发现而产生的。
从事软件工程研究的专家、北航杨文龙教授也认为,由于受人的惰性(习惯)的影响,人类多有不愿改变现状的倾向。尽管软件技术进步了,但软件人员中的许多人常常反对改变,行动时又拒绝改变。同时计算机的所有应用(从开始的数值计算,到后来的数据、文字、图形、图像、声音、多媒体、虚拟世界,甚至知识处理等)都仍然依赖于软件问题的解决,应该说这是不公平的。
因 此,软件工程一直在寻求解决自身在软件开发中问题的方法。Roman博士说,软件开发过程是一个欲罢不能不得不谈的话题。
统一软件开发过程是一种进步
我们已经习惯于听到类似的故事:软件项目工期延迟,费用超支。更为严重的情况是项目即使不被取消,最终的软件产品也不符合用户的期望。造成这种结果的原因,很大程度上不是技术原因,而是开发过程问题。
目前面向对象开发过程模型主要有Rational Unified Process (RUP)、OPEN 和 Object-Oriented Software Process (OOSP) 等几种。另外还存在一些考虑到特定开发队伍背景的过程,如改进的结构化开发模型、适用于小型团队开发的XP (eXtreme Programming) 的开发过程等。这些过程都存在一些问题。而统一的软件开发过程是软件生存期模型发展迄今为止的一个里程碑,它集中了所有生存期模型的优点。
统一的软件开发过程的优势主要有:基于UML,而UML作为面向对象系统建模语言的国际标准,得到了众多国际上顶级软件开发商和开发工具供应商的支持;强调早期就能确定或获得稳定的软件体系结构,从而降低系统开发风险; 以用例 (use case) 作为系统需求的核心表示,并驱动整个开发过程的完成,从而保证最终得到的系统正是用户真正所需要的产品; 采用增量式、迭代式开发,缩短了产品投放市场的时间,并能适应用户需求的变化。
因此,当三位科学家提出了统一的软件开发过程后,虽然没有像UML一样得到一片掌声,但也引起了软件工程界的高度重视,许多公司在软件开发中采用了这一方法,并取得了很好的效果。在国内大力推介统一软件开发过程的杨文龙教授说:“我们需要学习别人成熟的东西,对我们而言,这是一次机会。”
好东西,但需要完善
说统一软件开发过程要统一“软件开发过程”,可能许多人有不同的看法。Roman博士在接受记者采访时说,统一软件开发过程的作用是显著的,但它同样存在一些问题,在目前情况下这些问题还不能解决,这也是很多客户没有采用它的原因。
Roman博士说,对于基于UML的统一的软件开发过程,两个不同的人,在看同一个UML过程时,会得出不同的结论。其实,注解和设计是两种不同的方法,将两者混淆就会出现这种情况。这可能是统一软件开发过程的主要缺陷之一。
同时对于一个软件开发方法,它的通用性越大,实用性就越差。试图建立一个通用的软件开发过程,就必须研究大量的应用实例,总结这些实例的通用特点,并验证它的正确性。有时越简单的东西越受欢迎。
杨文龙教授认为,要把这种方法加以实施还需要开发大量的相应工具和环境,如果没有工具和环境的支持,只能说是纸上谈兵。因此,他认为通用的软件开发过程是一个好东西,但仍需要不断完善。
客户需要定制的软件过程
那么,能统一软件的开发过程吗?
Roman博士认为,统一软件开发的过程可以说是人们的一个美好的愿望,软件工程的专家们为此做出了许多努力。但是在软件开发理论上的统一和普遍适用却在产业应用上处处碰壁,遇到了许多问题。
实际上,软件开发过程包括项目的开发阶段、开发方法、技术等方面的决策和与软件及其相关工件(如项目计划、文档、系统模型、源码、测试用例和使用手册等)相关的一系列活动。软件开发机构不仅需要一个软件开发过程,更需要一个适合自己需求的软件开发过程。不同的应用软件需要不同的方法,因此为客户定制软件开发方法或过程的业务受到了用户的欢迎,也是一个新兴的产业。
Roman 博士还是一名软件工程顾问。他的咨询工作就涉及为客户定制软件工程方法和培训计划。而他以前的客户包括美国和日本的一些政府机构和公司。在咨询中,客户经常会提出这样的问题:什么样的软件开发过程能够保证按时开发出最高质量的软件产品?什么样的开发过程最适合我的项目并最有效地控制错误?我的软件预算和进度是可控的吗?软件咨询就是帮助用户确定哪些类型的开发过程最适应于哪些类型的项目,介绍有效并且操作性强的错误控制方法,改善软件质量并提高生产效率。
目前,软件开发过程最好的解决方案是:为用户定制自己的软件开发过程。