【IT168 技术文章】
从事过两三年软件项目管理的经理们大都有过一种无奈的体验:用户不断催促,可系统提交日期一拖再拖,项目经理对此一筹莫展,束手无策。开发活动如同一个黑箱子,资金扔进去了,人员扔进去了,设备资源扔进去了,但不知道什么时候会出来结果,更没有把握出来的东西是否是用户所要的东西。若这时候打开这个黑箱子,恐怕会使所有人退避三舍。因此,在软件项目管理中,关键是——
软件系统开发的基本问题是如何管理开发过程。SW-CMM的第一个进行目标(即第2级的目标)就是通过建立关键的管理过程域,使得开发过程可控且可重复。SW-CMM2级共有6个关键过程域(KPA):
·需求管理(RM);
·软件项目计划(SPP);
·软件项目跟踪与监控(SPTO);
·子合同管理(SSM);
·软件质量保证(SQA);
·软件配置管理(SCM)。
在软件开发中,有3个基本的管理对象:软件需求、开发活动和产品(包括工作产品和提交给用户的产品)。这6个KPA正是对这3个对象的管理,管理关系如下图所示。
需求管理
任何一个软件产品都应满足用户相应的需求。但是这样同时会存在两个问题:
一个问题是需求在开发过程中会发生变化,如何控制和管理这些变化?
另一个问题是从需求到产品要经过许多步骤,如系统设计、详细设计、编码等。如何保证这些步骤没有背离软件的需求?
需求管理关键过程域针对这两个问题提出了相应的目标。
软件的需求可能是系统需求的一部分(系统工程的一部分)或是全部(单纯的软件工程)。无论是哪种情况,需求管理的第一个目标就是软件需求应能被控制,并可产生一个可用于软件工程过程和管理过程的基线。RM的第二个目标是确保软件项目计划、开发活动、产品与软件需求一致。
需求管理的目的是在用户与实现用户需求的项目之间达成一种共识。这意味着用户的需求应该是合理可行的,项目的目标应能满足用户的需求。需求管理活动是建立并维护这种共识。
软件项目计划
软件项目计划常常不能按期完成,主要原因有两个方面:一个方面是由于计划执行和管理的能力不够;另一个方面是计划本身是否合理和有效,计划的不合理性和无效性造成了大多数项目拖延,甚至失败。SPP的目的是建立一个合理有效的软件项目计划。软件项目跟踪与监督则是如何保证计划的执行和维护。
建立合理的软件计划的基础是对软件项目规模、资源要求和风险等要有一个合理的估算。这个估算过程应是规范的,而不是任意的。例如,如果提出一个项目计划需十个软件工程师工作六个月的计划,那么就要问这些数据是如何得到的。用户提出的时间和费用的要求仅能作为项目计划约束的条件,而不能作为项目计划的基础。 软件计划要包括所有项目活动和所有参加方面的责任,这些活动和责任要文档化,以保证有效地将计划传达给项目各个参加方。在项目计划执行前,各个项目参加方要认同所承担的项目责任,这种认同是项目计划有效性的一个基本保证。
软件项目跟踪与监控
软件工程项目是否成功的主要因素在于项目管理,而项目是否能有效地进行管理的关键在于项目过程的可见性。由于软件项目过程是一个逻辑活动过程的组合,因此,它不具备一个物理过程那样的可见性。软件项目跟踪与监控的目的就是为项目实际过程提供充分的可见性,以保证当项目执行偏离项目计划时能采取有效的解决手段。 项目跟踪是基于计划的,对一个项目要设定适当的检查点。在检查点上要将执行结果、执行状态和软件项目计划进行比较。若发现较大的差异,则采取适当的步骤进行调整。在必要的情况下,也需对计划本身进行修改和维护。若在修改计划时,改变了某些项目的责任,那么这些改变必须得到有关责任方的重新认同。
子合同管理
由于SW-CMM是美国国防部投资研究的项目,而美国军方有大量的子合同转包,因此子合同管理成为一个基本的关键过程域。子合同管理的目的就是选择合格的软件承包商,并可进行有效地管理。 软件子承包商选择应由项目责任者(业主或主承包商)负责,子承包商的选择是基于能力的,项目的责任者与子承包商对所承包的项目责任要有一致的认同,并保持不断地交流。项目的责任者负责根据合同的责任跟踪子承包商实际工作结果。
软件质量保证
软件质量保证是项目管理提供的过程可见性的一个工具。由于用于开发软件系统或软件产品的过程是决定项目成功与否的关键因素,因此软件质量保证的工作是评审和审计软件活动和软件产品。评审和审计的依据是规定用于项目的步骤和相关标准。软件质量保证活动不能是随意的,必须经过充分的讨论和协商。相关的组织和个人要了解质量保证的活动和质量保证活动的结果。为了解决质量保证组织与开发组织对某些项目开发活动或开发出的产品的评价所发生的争议和分歧,企业要定义更高层次的管理组织,负责解决这些争议和分歧。
软件配置管理
软件从需求分析开始到最后提交产品要经历多个阶段,每个阶段的工作产品又会产生出不同的版本,如何在整个生存期内建立和维护产品的完整性是软件配置管理的目的。CMM软件配置管理关键过程域遵循了传统软件配置管理的概念,其基本工作内容是标识软件配置项,建立产品基线库,对配置项的修改加以系统的控制。产品基线库的状态可以随时了解。此外,同软件质量保证活动一样,软件配置管理活动必须制定计划,而不是随意的行为。