1 引言
软件开发是一种组织良好、管理严格、各类人员协调配合、共同完成的工程项目。软件开发的核心资源是人,这与那些自动化生产线主要靠机器来工作不同,软件开发有太多的可变因素,因此对软件开发的管理应该也是具有一定的柔性,以适合不断变化的开发过程。
软件过程是生产软件的一系列流程,是为了获取所需要的软件产品而需要完成的一系列有关软件工程的活动。他一方面与软件生命周期、软件开发方法和工具、软件开发人员等诸多方面都有着密切联系,另一方面被软件公司的传统习惯、文化氛围和企业领导人的领导风格所影响。
软件过程并不是一个单一体,他是由一个主过程和若干辅助过程共同构成。一般的主过程就是软件开发必须经过的一些过程,称为开发过程。此过程中的任何一个环节都不可缺少,如最传统的瀑布模型中的软件开发过程为:需求分析、总体设计、详细设计、编码、测试、部署和维护。辅助过程则一般指软件开发中的配制管理、文档管理、质量保证、项目管理等过程。虽然软件开发只需要开发过程就能开发出软件,但是缺少辅助过程则会让整个开发过程变得混乱,甚至失去控制,因此辅助过程也是软件过程改进中的重要内容。
2 软件过程改进概述
软件过程改进(Software Process improvement,SPI)帮助软件企业对其软件过程的改进进行计划、过程诊断、过程改进方案制定以及实施。他的实施对象就是软件企业的软件过程,也就是软件产品的生产过程,当然也包括配制管理、软件维护之类的辅助过程,而对于其他的过程并不关注。
在软件企业,软件开发是企业最重要、最复杂的过程。软件产品是软件企业的生命,对软件企业进行流程优化和改进,最主要的还是对其软件过程进行改进。一个软件企业的消耗与收益都在软件产品上,开发过程失败则会给企业带来致命的打击,开发成功则能给企业带来大量的收入,如何降低开发成本,多、快、好、省的开发出所需要的软件是企业立足于市场的根本。
当一个软件企业一步步成长的时候,会发现原来的开发方法、管理模式开始不适应目前的开发。需要开发的软件越来越大、越来越复杂,而不断的增加人手对开发的进度的帮助越来越小。由于开发人员数量越多,沟通成本就越高,使得总体开发效率反而下降,因此需要在管理方面进行提高、在流程上进行优化,才能够提高开发效率、缩短开发周期、降低开发成本。
软件企业从软件作坊”进化到软件工厂”是一个跳跃式的改变,从开发模式、管理模式、企业运营模式都会发生质的变化。很多从团队发展起来的小软件企业很难实现这一步的跨越,生搬硬套更是可能让企业的生命过早结束。如何提升软件开发模式和企业的管理是中小型软件企业发展过程中遇到的最大问题,也是软件过程改进需要解决的问题。
目前在世界上用的最多的软件过程改进模型是CMM、CMMI和ISO9000系列标准。软件企业根据自声的软件过程情况,参照模型标准进行对照,找出自身与标准的差异,然后对自身的过程进行改进,以达到标准的要求。在这个过程中需要根据企业自身的情况分步实施,有计划、有组织的进行,如果一开始就全面铺开,波及的范围比较广,则会给企业带来较大的风险。如同有些企业一年内从CMM Level1级别一路升到CMM Level 4 级,不仅没有实施效果,还可能会让企业适应不了新的流程,而造成企业内部的混乱。总体规划、分步实施才能保证软件过程改进的效果,先僵化,后优化,再固化”才能够让过程改进落到实处。
3 国内软件过程改进的现状分析
自从2000 年,中国通过了第一个1+3 的评估以来,实施CMM/CMMI 的顾问团,中国在2006 年1 月份的企业,中国到目前为止已经有 128 家企业通过了评估,美国是158 家。在CMM认证通过的企业数量来看,考虑到中国第一次做评估的是2000 年,而印度要早十年,中国与印度的差距在一步步缩小。
国内能够如火如荼的开展CMM/CMMI评估的原因主要有:
3.1 政府的大力扶持
国务院2000年18号文件《鼓励软件产业和集成电路产业发展的若干政策》的发布表示了我国政府和领导对计算机软件产业的重视和支持。宽松的审批条件、优惠的退税政策、对ISO9000和CMM认证支持的专项资金,激励着国内软件企业通过认证的激情。在政府的扶植下,越来越多的软件企业通过了CMM认证。
3.2 外包业务的要求
新一轮全球产业布局调整的大潮,为中国软件外包市场赋予了高速成长的强大推进力。来自IDC的数据显示,全球应用软件外包服务市场正以平均每年29.2% 的速度增长,其中,中国软件外包市场在2004年的增长速度为49.9%,市场规模达到5.99亿美元。而Gartner研究公司更是预测,在2007到 2010年间,中国将成为全球最大的软件外包市场。国外软件公司选择外包软件公司的时候,一般都要求通过CMM3级认证,如果没有CMM证书的话,在软件外包市场这块就几乎无法进入。因此,软件外包业务的拓展,加速了我国软件企业通过CMM认证的进程。
3.3 软件企业本身发展的需求
软件过程改进是软件企业发展过程中的必经阶段,一个软件企业在业务越来越多,项目越来越复杂,开发对于日益庞大的情况下,为了降低开发和管理成本,必须对整个企业进行流程优化,在这个意义上BPR和CMM的目标是一致的。
4 软件过程改进中的问题
不管是CMM/CMMI还是ISO9000是一个相当复杂的标准,它为如何改进软件开发过程提供了很好的指导,它规定了应该做哪些事,没有规定应该如何去做。这种方法给客户留下了很大的空间来开发适合自己的软件过程、规范和标准,但是,也对客户提出了非常高的要求。而且,CMM标准本身就是一个理想化的东西。CMM有18个关键实践域,每个关键实践域的第一条基本原则就是,必须为这项管理/技术工作提供充足的资金、时间和资源。这条原则却是绝大多数企业无法满足的。
国内企业在进行CMM评估时,存在很多误区。例如,有的企业将CMM当成解决一切问题的圣经,没有很好地理解CMM的内涵;有的企业盲目追求轰动的市场效应,为了获得所谓的国际市场的入场券”,没有扎扎实实地进行企业软件工程能力的提高,纯粹是为了过级而过级,通过评估后,所有的开发过程基本上又回到原来的状态,完全违背了CMM的思想。
绝大多数企业希望通过CMM来提高自己的软件工程化水平,但却无从下手。其中,很多企业在准备实施CMM的初期,就被其繁琐的过程和高昂的费用所吓退。每一个采用传统的方法实施CMM认证的企业都需要大动干戈”,首先是全公司的培训;然后,把项目停下来补文档;最后,准备各种各样的问题和答案,准备应付评估师的随时提问,闹得整个企业不得安宁。因为即使CMM二级也有近百种实践要求,就是每个人培训一个星期,他还是很难记住这些操作。短时间参加CMM培训的人员的一个最显著的特征就是迷茫,不知道该怎么去实施,好像以前在开发软件方面还有一些心得,培训完后,就完全不知所措了,更别提将这些管理要求有机地结合到一个项目里去了。
这种做法的后果可想而知,这就是为什么很多企业在通过了评估以后,又回到原来做法的原因。总而言之,传统的CMM实施方法要求按部就班地进行,不仅周期长,对人员和经费要求高,而且,实施后效果保持难度很大。因此,如何真正快速有效地实施CMM,提高软件生产率是一个亟待解决的难题。
5 成功实施软件过程改进的三个要素
对于软件过程改进策略的选择,实在是仁者见仁,智者见智。也许并没有什么绝对的对错,关键看是否符合自身的实际情况。对国内广大中小软件企业而言,存在什么样的实际情况?应该采取什么样的软件过程改进策略呢?
中小企业的实际情况大致如下:管理基础薄弱,资源不足,生存压力大,缺乏统一而有力的文化,人员素质良莠不齐。在这中环境下实施软件过程改进,有很多因素是需要特别注意的。
5.1 企业领导树立正确的软件过程改进观点,全体员工有软件过程改进意识。
所谓态度决定一切”,正确的软件过程改进意识是软件过程改进成功实施的前提条件,那种为证书而改进,为CMM而CMM的改进过程除了能够取得证书外,并不能为企业的发展带来多大的帮助,最后高级低能”的企业现状并不能为企业发展助一臂之力。
过程改进不是领导的事情,而是企业的每一个员工的事情,过程改进实施能否进行得下去,由每个员工的态度来决定。一开始实施过程改进的时候,有些众所周知的烦琐、缺乏效率的流程被改进会赢得员工的支持,但是有些过程改进肯定会影响到部分员工的利益或者是工作量,会让那一部分人多过程改进产生排斥。另外一些要求规定了,对员工也提出了一些要求,如果员工因此而产生抵触情绪的话,过程改进的贯彻实施是比较困难的。国内一些公司出现CMM实施完毕后,文件都在,证书也下来了,但是员工还是按老方法做事情,最后再去补CMM要求的文档。这样的改进可以说比改进前的效率更低了。
因此,不管是企业的领导,还是企业的员工,在实施软件过程改进前,应该先将软件过程改进的理念贯彻到每个人的心中。这样在后面的实施过程中,每个人才能够主动的去接受改进。
5.2 客观准确的做好实施前的评估工作,掌握评估结果的实质。
在进行软件过程改进前,先要对软件企业目前的过程进行评估,评估的结果决定软件企业是否要进行改进,哪些方面需要改进,需要改进成什么样子。应该说,由咨询公司主持,公司改进项目组参加的评估过程是公正、客观的。但是,对于评估的结果还是需要仔细的推敲与检查。作为咨询公司从自己利益的角度考虑,可能会将企业软件过程方面的问题夸大。在对待评估结果上,需要冷静的思考与对待,客观的评价。
5.3 确定合理的目标
CMM模型划分为5个级别,共计18个关键过程域,52个目标,300多个关键实践。每一个CMM等级的评估周期(从准备到完成)约需12-30个月。无论一个软件企业的软件过程处于什么样的水平,都可以在CMM框架的5个级别中找到自己的位置。CMM框架的不同级别是针对处于不同管理水平的软件企业制定的,一个软件企业实施CMM,首先必须了解自己的管理现状,对照CMM的级别,找到自己在CMM中所处的位置,然后有针对性采取与自己所处级别相适应的措施,使企业迟早纳入CMM的进化阶段,使软件过程管理早日得到改善,最终达到提高软件质量,获取经济效益的目的。
因此,要实施CMM,首先应该对本企业的现状有一个准确的评估。企业目前处于什么水平,企业发展的问题是什么,借助CMM要达到的目的是什么。然后再结合企业的实际情况选择CMM的切入点,确定总体目标。这个目标包括在多长时间之内,需要投入多少人力、物力和财力,要达到哪一级。
由于软件过程的建立和改进是一个渐进的、分轻重缓急的、逐步完善的过程。所以,在总体目标已经确定的前提下,还要制订近期目标和长期目标。
6 总结
软件企业进行软件过程改进是一项大工程,是一个让企业脱胎换骨的过程。改进成功可以为企业带来广阔的发展前景,失败则可能让企业从此一蹶不振。因此在实施过程改进前,需要对本企业的现状有客观的了解,让全员树立改进意识,确定明确的改进目标,制定周详的改进计划,将改进贯彻到实处才能够确保软件过程改进的成功。