软件需求的快速增长推动了软件产业的发展,也推动了软件过程的思想。今天,软件过程已经越来越被软件人员所认识和追捧,国内很多的软件企业甚至将SW-CMM当成了成功的宝典。殊不知,尽管软件过程的先驱SW-CMM提出了作为软件企业应该具有的过程域,但SW-CMM只提供了一个软件企业进行过程改进、增加企业软件成熟度的改进建议框架,而没有告诉一个软件企业该如何进行过程实施。换而言之,它描述了软件过程的期望,而没有指导企业如何实现。因此,在软件过程上我们应该谋求一些更具体、更可操作的方法和步骤。过程管理在软件项目中的作用 人们很早就注意到,在软件开发过程中,如果将关注点只放在最终的产品上,不关注开发过程,那么不同的开发队伍或者开发个人可能就会采用不同的开发方式,从而导致结果无法预期,因为这时软件产品质量的高低完全依赖于个人的素质和能力。反过来,在软件开发过程中,如果将关注点放在项目的开发过程中,那么,不管谁来做,也不管是谁提出的需求,经过同一过程开发的软件,产品的质量是一样的。为了保证软件的质量,人们很自然地开始重视软件过程。 简而言之,软件过程的目的是保证软件产品具有相对稳定的质量。对于软件企业来说,软件过程的质量是企业能力的体现,它不应依赖于个人。也就是说,产品的质量依赖于企业的过程能力,而不依赖于个人能力。如果企业的过程不是很完善,其软件质量可能也不是很高,但可以通过不断完善过程,来不断提高产品的质量。 在软件开发中的过程经验有很多,如需求管理、设计方法以至于编码的风格、技巧等,还有很多的
项目管理过程中的技巧方法等。最初,这些成功的过程只在成功者的头脑中的,没有被企业内部共享和重复利用,从而使得这些本应从属于企业的巨大财富被人们所忽视,这无形中给企业带来了巨大的损失,特别是当人员流动时,企业的这种财富也随之流失。如果企业将成功的过程进行有效的积累,形成可重复的过程,让过程能够被共享、复用,并得到持续的改进,这岂不是很好的方式!软件过程管理可以达到这个目的。在
项目管理的时候,可以通过参照过程管理来提高
项目管理的质量,同时,通过实际项目管理过程中的经验和教训来提高过程质量,以便为将来的项目管理提供更多的经验。 软件过程在软件项目中的作用就相当于硬件生产的工艺一样。在生产硬件的时候,工艺是判断产品质量的标准。但是,目前软件没有这样的惟一判断标准,什么时候软件过程完善到可以作为判断软件惟一标准的时候,那可能就是软件发展到了一个成熟的阶段了。 过程管理的主要内容包括过程定义与过程改进。过程定义是对最佳实践加以总结,以形成一套稳定的可重复的软件过程。过程改进是根据过程的使用情况,对过程中有偏差或不够切合实际的地方进行优化的活动。在软件项目管理过程中,如果能很好地定义和控制软件过程,就能很好地控制项目,从而保证软件产品的质量。 适用的软件过程来自积累 好的软件过程能支持软件项目的管理,而不正确的过程定义会起反作用,成为软件开发的束缚。有的软件企业照搬照抄某些过程标准或者照搬其他企业的过程定义,而在实施过程中这些过程定义由于不适合企业的具体项目,结果导致大量的会议和提交大量无用的文档等无用功,而且增加了管理难度,增加了成本,最后却没有带来产品质量的提高。所以,正确的软件过程应该是适合自己企业,适合自己项目的软件过程。 目前很多的软件企业通过了CMM的二级、三级以至于四级、五级的评估,但是其中的一些企业,它们只是给外人看的,不是给自己用的,而且无形中给自己的企业增加了很大的包袱,这些企业好像本来是穿30号鞋,现在却给自己穿上40号鞋子的感觉一样。 CMM过程管理体系的确描绘出了一个美好的软件过程蓝图,这个蓝图就像一座壮观的高楼大厦,但是罗马不是一天建成的,冰冻三尺,非一日之寒。高楼大厦是一层层建造起来的,软件开发过程也需要一步一步建立,而不应该将别人的高楼大厦搬过来使用。过程的建立需要坚实的基础,否则企业会劳民伤财,有付出没有回报。 笔者在实施软件过程体系中,也遇到企业内软件人员的层层障碍,原因之一就是过程制定得不合适。过程实施不当会限制开发人员的创造力,制约开发人员的灵活性。这样希望提高软件质量的过程变成束缚软件开发的负担。 现在,有些机构或者企业也希望开发一些可以多次使用或者可以作为标准的统一过程(例如RUP)。作为一个软件企业,开始的时候没有足够的过程管理积累,可以采取摸索、实践、提炼、改进的步骤进行。第一阶段,可以针对具体项目制定具体的过程,而且一定要简单实用,然后逐步调整过程。也就是说第一步应该是针对具体项目制定过程,等积累了一定的项目管理经验后,第二阶段就可以针对企业制定相应的过程策略。最后,我们可以期望软件行业的过程标准。所以,软件项目过程的制定应该是循序渐进的。不一定仿照某些标准,简单实用是最重要的。 一个可以被更多人认可并行之有效的软件过程是实践出来的,而且软件过程也不是枯燥的、抽象的条款,而是具体的、生动的、有实际意义的、可操作的工具。在具体进行过程定义的时候,应该是从项目级过程逐步积累到企业级过程,再由企业级过程裁剪为项目过程。如果所有的软件企业内部都能够做到企业级的过程管理,那么实现软件界的过程统一就不远了。如果软件行业有了可以通用的统一过程标准,证明软件发展到了一个成熟的阶段了。 这里还要强调一点,谈到软件过程的重要性时,常常说软件过程可以消除依赖个人英雄主义的状况。我们也应该看到,软件过程不推崇个人英雄,但是并不是说软件项目不需要具有优秀技术的个人,好的软件过程可以加速优秀个人的成长;同理,好的软件过程也可以加速软件企业的成长。 美国NASA的经验 在探索软件过程管理的过程中,首先是不能盲从。比如,对等评审(Peer Review)是CMM中非常重要的一个关键过程域,CMM、PMBOK等项目管理体系都对走查(Walkthroughs)、审核(Inspection)等对等评审有相应的说明,但它们都没有对如何实施这个过程明确定义操作流程。如果软件企业没有很好的实践而照搬其他企业的审核或者走查等对等评审过程,那么在实施过程中可能会遇到层层的障碍,导致得不偿失。只有经过实践之后总结出来的过程,才会带来很好的结果。 又如,我们曾经在开发一个软件项目过程中发现,有些人开发的软件质量很高,而且效率也很高,测试中发现的缺陷很少。原来这些人在编译前后都进行代码走查,后来我们就要求项目组的所有开发人员都要进行自我代码走查,编译前进行一次,编译之后进行一次,保证测试之前执行两次代码走查。结果取得了非常好的效果,软件的质量得到了很大的提高。为此,将这个方法推荐给其他项目,其他项目在试用过程中发现如果进行交叉代码走查,即开发人员互相进行代码走查,效果会更好。这样逐渐总结开发代码的过程,经过多个项目的过程提炼可以编制企业的开发过程。在企业的代码开发过程中,明确说明什么时间进行代码走查,如何进行代码走查。这样通过有效的过程来提高软件产品的质量。 美国NASA Space ShuttleOnboard软件项目,在实施软件过程管理中得到了实实在在的好处。为了满足NASA约翰空间中心关于项目高安全和高性能标准的要求,Shuttle Onboard项目必须开发出高质量的软件。为此,项目团队精心制作并实践了可以提高产品质量的软件过程,经过十几年的努力和实验,摸索和开发了可以精确控制的过程,最终使软件达到零缺陷。在此期间它们参照、实验了很多的软件过程,包括需求管理、配置管理、对等评审、审查、测试、项目管理等。为了消除缺陷的根源,项目组成立“问题疏漏分析”组,分析诸如审核、测试、验证等检错方法中疏漏缺陷的原因,也就是研究这些质量过程中存在的问题,这个提高质量过程的过程包括如下四个步骤: 1.从技术上分析缺陷的原因,并且提出纠正的措施。 2.标识纠错过程中的问题,并更正过程,以消除将来采用此过程可能疏漏错误的可能性。 3.改进纠错过程中的具体方法程序,这些方法程序曾经让缺陷逃过了,没有及时捕获缺陷。 4.检查Shuttle Onboard项目中采用此过程方法的其他部分,这些部分可能同样遗漏了一些类似的缺陷,需要重新检查,以便确认没有缺陷。 通过详细的情景式分析确定缺陷的根本原因,然后将这些情景式的经验反馈给开发过程,它们对改进纠错过程起到了非常好的作用。项目组将它应用到了其他过程的分析中,诸如需求分析等,也取得了很好的效果。 同样的,Shuttle Onboard项目通过不断地度量过程、完善过程,最后达到提高项目质量的目的。过程的质量来源于实际的度量结果。同样项目的质量也可以通过高质量的过程来得到保证。