软件开发通常需要团队成员的协作,选择软件开发团队至关重要,换句话说,那些和软件开发相关的事情,是由不同的人完成的。而且,一件事情的完成情况,可能会影响另一个人正在做的另一件事情。在这种情况下,仅仅依靠个人的想法,片面决定自己的工作内容,就可能会对团队目标的实现造成负面的影响。有一种例外情况,如果团队成员非常稳定,而且他们在长期的共事中形成了一种默契,也许不用过多强调过程的意义。
当人们需要共同完成一件事情时,常常需要一些契约来规范人们的行为。在软件开发中,这些契约以过程的形式存在着。为了使契约更加合理,选择软件开发团队需要对过程进行系统地思考和总结。这是一种持续的行为。另外,在软件开发实践中,过程会不断地得到优化。那些更合理的过程,会被保存下来并重复使用,最终成为知识资产的一部分。在理想的情况下,CMM所关注的软件开发过程,应该是解决软件开发中各种混乱现象的一种理想方案。但是,在现实中,CMM往往被很多软件开发组织、甚至软件开发人员个人所排斥。有一种说法是这样的。因为软件项目的计划经常受各种不确定的因素干扰,所以,要保证严格遵守繁琐的过程是不现实的。
这种想法是错误的。在选择软件开发团队实践中,软件开发费用是多少?我们经常会遇到很多模糊的反对意见。在不成熟阶段产生的判断,被固定成一些错误的想法,而这些错误想法,又会阻止一切迈向成熟的尝试。糟糕的是,这些反对意见往往来自掌握话语权的软件开发人员。这有点像司法中的“有罪认定”。原告(反对者)没有举证的义务,当他指控一个人或一件事的时候,只需要一分钟的时间。这有点不公平。虽然我并不完全认同CMM,但是,我仍然非常感慨。因为这种“有罪认定”,很多软件开发组织甚至放弃了尝试了解CMM的机会。我一直认为,排斥CMM是错误的。CMM中包含了很多有价值的想法,尽管它很少提及人的因素(在敏捷软件开发中,人的因素得到了充分的关注,甚至有被夸大的嫌疑)。