【导读】软件项目管理的实质就是软件项目计划的编制和软件项目计划的跟踪控制,这里计划是项目成功实施的指南和跟踪控制的依据,而跟踪控制又保证项目计划的成功执行。本文以实例具体分析在软件开发过程中如何进行这两项工作。
在软件项目中有两条非常重要的线索,一条是软件项目开发过程,另外一条是软件项目管理过程。通常,人们容易注意软件项目开发过程,而忽略软件项目管理过程的线索。事实上,后者很重要,有时其重要性甚至超过项目开发过程。项目管理可以让一个项目获得高额的盈利也可以让一个项目损失惨重,而编码的影响力则相对小一些。现实中由于出色的项目管理,将已经亏损很严重的项目又重新扭亏为盈的例子并不少见。
项目管理在生活中的例子很多。例如进行一次商品采购,你会在一张纸上记录所有需要购买的东西(即采购清单),这个采购清单帮助你不要遗漏采购项,你可以采用“完成一个采购项,在采购清单上打一个勾”的方法协助你完成采购。与此类似,软件项目管理也是如何管理好软件项目的内容、花费的时间(进度)以及花费的代价(规模成本)。为此需要制定一个好的项目计划,然后控制好这个计划。编制软件项目计划、跟踪控制软件项目计划这就是软件项目管理的实质。其中,计划是项目成功实施的指南和跟踪控制的依据,而跟踪控制是项目计划成功执行的保证。
确定软件项目开发的策略
项目经理的首要任务是编制项目计划。项目计划有三大核心目标: 确定项目范围、项目预算、项目进度,即明确项目做什么、花多少钱、需要多长时间。为了制定一个合理有效的计划,项目经理需要从项目需求开始确定项目范围,然后将项目的需求进行分解,以便于估算、安排资源和合理的进度等。这样就形成了三个核心计划:
范围计划、成本计划和进度计划。此外,作为完整的项目计划,质量计划、风险计划、沟通计划等同样也必不可少。没有质量管理的项目是失败的项目,没有风险管理的项目会时时处于风险之中,没有沟通的项目是很难完成的。项目规划从合同阶段就开始了,其实任何一个合同的主要内容也是确定项目的范围、时间和成本。
软件项目最终的结果是根据用户的需求提交一个用户满意的产品,这是一个从无到有的过程。因此计划首先应该确定项目开发的策略,即项目的生存期模型。瀑布、V、原型、螺旋、渐进式阶段提交等模型是几种常见的生存期模型,渐进式阶段提交模型体现了软件项目渐进性的特点,同时,分阶段提交项目结果,也有利于软件项目开发。RUP(Rational的统一过程)提及的软件项目生存期模型就是一种渐进式阶段提交模型。图1的模型是笔者曾经参与的一个银行业务系统的生存期模型,它是渐进阶段提交的模型。
图1 某银行业务系统渐进式阶段提交模型
如果项目周期不是很长,可以不分阶段提交结果,而只是分阶段开发,这样渐进式阶段提交模型就演化为增量模型。例如笔者曾完成的一个《校务通管理平台信息系统》项目,它是对学校教务和教学活动进行综合管理的平台系统。尽管分阶段实施项目是比较理想的项目管理模型,但是由于这个项目不大,没有必要分阶段提交一个执行系统,所以采用增量的模型。
生存期模型中可以定义软件开发中采用的过程、程序,如果过程定义得很明确,或者过程定义的操作性很强,那么作为工厂化的软件开发就会很顺利,项目管理的过程也会很顺利,所以在软件项目中的这两条线索也是相辅相成的。
制定项目核心计划
项目的核心计划是范围、时间、成本的确定,这三方面并不是截然分开的,而在项目计划的制定过程中相互交织。
确定项目范围要从需求入手,将一个项目分解为更多的工作细目或者子项目,使项目变得更小、更易管理、更易操作。目的是为了提高估算(成本、时间和资源)的准确性,使工作变得更易操作,责任分工更加明确。任务分解的结果是WBS
(Work Breakdown Structure)。只有在WBS中的工作才属于该项目的工作范围。
任务分解之后,可以根据分解的结果,估算任务的规模、成本,同时可以根据分解的结果进一步分解详细的项目活动,以便安排任务之间的关联关系,估算每个任务的工期,然后进一步估算项目总的工期。
项目的规模和进度估算有一定的关系。进度估算是从时间的角度对项目进行规划,而成本估算则是从费用的角度对项目进行规划。类比估算法、参数模型估算法、自下而上估算法等都是规模成本估算的方法,而经验导出模型、工程评价技术(PERT,Program
Evaluation and Review Technique)、关键路径法(CPM,Critical Path Method)等都是进度估算的方法。在项目的进行过程中,可能要不断重复进行估算,以减少估算的误差。在项目的不同阶段可以采用不同的估算方法,开始可能很粗糙,随着项目的进展会逐步精确。
在安排项目进度的时候,可以根据WBS的分解情况,继续分解相应的活动(任务),分析确定各个活动之间的顺序关系,画出任务的网络图(例如PDM网络图或者ADM网络图)。图中的每一项任务必须有一个前驱和后继,除了项目中的第一项和最后一项任务。确定关键路径在哪里、哪些任务还有变化,然后结合资源、成本等情况,再不断进行资源调整优化以及工期、活动关系的调整等。计划调整的过程虽然很费时费力,但也是一个关键的过程,要经过多次调整、修改、评审讨论等,最后才能确定一个计划,将此计划存为基准计划。这个基准计划可以存入项目管理系统中,例如MS
Project。
通过这个基准计划可以确定项目的范围即项目所有的任务,还可以确定项目的时间进度表,这个计划也确定了各个任务的资源(人力资源、物力资源等),当然项目的成本就可以确定下来。
仍以《校务通管理平台信息系统》为例,根据项目WBS的分解情况,继续分解相应的活动(任务),然后确定各个活动之间的关系,系统的功能采用增量方式实现,实施阶段分6个增量,对各个任务(活动)分配相应的资源,经过多次的活动调整以缩短工期,多次的资源调配以解决资源冲突和减少成本,最终形成了基准计划,如图2所示。
图2 《校务通管理平台信息系统》基准计划
制定辅助计划
1. 质量保证计划
质量保证的主要活动包括过程评审和产品审计。过程评审和产品审计的目的是为了确保在项目进展过程的各个阶段和各个方面采取各项措施来保证和提高产品质量。
产品审计 产品审计由质量保证人员来进行,检查项目产品是否达到质量目标。质量保证人员对项目生存期中创建的工作产品可以有选择性地进行审计,以验证是否符合适当的标准,是否进行了质量检查。
过程评审 过程评审是检查项目是否严格按照组织定义的软件过程进行开发,过程评审的具体依据可以参照企业的过程规范,以保证项目中的所有过程活动都在实施范围内。在每次评审之后,要对评审结果做出明确地决策并形成评审记录。评审可采取文件传阅、评审会等形式。
这里质量保证人员负责对项目过程进行监督,发现的问题和解决情况在每周的例会上通报,对没有解决的问题进行讨论,对不能解决的问题提交高级管理者处理。
要注意的事,项目的质量活动包括质量保证和质量控制,质量保证是一种管理职能、质量控制是一种检查职能,质量保证是确定项目完成的是否正确,质量控制是确定项目是否正确地在进行。有时将质量控制归类到开发活动中,质量控制活动更多由开发人员完成。
2. 配置管理计划
软件配置管理贯穿于软件生存期的全过程,目的是用于建立和维护软件产品的完整性和可追朔性。软件配置管理是一组追踪和控制活动,软件配置管理可以管理好项目进行的中间产品以及它们之间的关系。配置管理计划中包括很多的内容,例如配置管理工具、配置项计划、基线计划、配置管理规程等。
3. 沟通计划
为了保证项目开发过程的顺利进行和信息的有效沟通,从而使一些重要的项目信息实时、最新、及时获取,做到实时同步,就必须有一个灵活而且容易使用的沟通方法和沟通计划。
4. 风险管理计划
任何项目都有一定的不确定性,如果没有很好的风险管理,项目就可能遇到麻烦。所以,软件项目管理过程中,风险计划同样必不可少。风险管理中常用的工具是TOP10风险清单,它是通过一系列的风险识别、风险评估、风险规划得到的。表2是《校务通管理平台信息系统》项目的TOP
10风险列表。
项目计划的跟踪控制
如同采购时,你通过采购单(在其上打勾)保证采购的顺利进行; 在聚会演出时,你通过节目清单(你的计划)来控制节目的顺利进行等。同样,软件项目管理也需要跟踪控制,跟踪控制就是为了保证项目能够按照预先制定的计划进行,使项目不要偏离预定的发展进程。
跟踪控制的对象就是项目计划。在项目进展过程中,项目经理根据项目计划来及时跟踪项目实际的执行情况,关注项目的范围、成本、进度、质量、风险等情况,记录实际的进展情况,对照计划与实际的情况,发现问题并及时解决。进行项目跟踪控制的基本步骤如下:
(1) 建立标准,即建立项目正确完成应该达到的目标;
(2) 建立项目监控和报告体系,确定控制项目必要的数据;
(3) 测量和分析结果,将项目的实际结果与计划进行比较;
(4) 采取必要措施,如果实际的结果同计划有误差时,采取必要的纠正措施,必要时修改项目计划;
(5) 控制反馈,如果修正计划,应该通知有关人员和部门。
软件项目经理要确定如何获取项目的时间、成本、范围的进展信息等(例如计划中可以规定跟踪频率和步骤,设置专门人员负责收集项目数据或者项目人员按照规定的度量标准统计上报项目数据)。然后将项目的实际结果与计划进行比较,采用一定的方法分析项目的进展情况,如偏差分析和挣值分析等。
表1 校务通平台软件生存期中各阶段的定义(点击小图看大图)
项目跟踪分析应该根据计划的要求实时进行,要随时了解项目的进展情况,以便做出正确的决定。另外,还要跟踪其他计划的执行情况,特别要关注风险管理计划,项目经理应该定期回顾和维护风险计划,及时更新风险清单,对风险进行重新排序,并更新风险的解决情况,这些活动应该包含在项目计划中,以防遗忘。只有这样才能使项目经理们经常思考这些风险,居安思危,对风险的严重程度保持警惕。
项目管理一个非常重要的手段是进行项目评审。项目评审的主要目的是根据项目计划对项目的执行活动进行检查,及时进行沟通,发现问题,研究解决对策,纠正偏差,保证项目的顺利实施。评审可以针对产品的评审,例如设计评审,或者针对质量的评审,例如质量过程评审,但更多的是针对管理的评审,例如定期的周例会等,以及针对突发事情的评审等。
项目的最后一项是进行项目总结,这是一项必要的工作。就如同我们聚会活动结束之后,要核算或者说总结,节目单的活动执行的如何?费用如何?时间如何?同样,作为项目管理的最后一件事情也是总结,即最后评审,总结经验教训,编写项目总结报告等,为以后的项目提供参考。
软件项目计划与实际进展的比较方法
一般来讲主要有两种方法: 一个是偏差分析,相当于简单的减法。在项目的某一点,计划值与实际值相减,这个计划值和实际值包括范围、时间、成本等,判断其中的差值是否超出可以接受的范围;
另一个是挣值分析,相当于加权的减法。在项目的某一点,计划值与实际值不是简单的相减,而是进一步分析实际完成的任务与成本和时间的关系,以判断项目进展如何。
偏差分析是将实际费用和计划费用简单相减,在下图中就是当前日期的实际费用(ACWP)和计划费用(BCWS)相减。而挣值分析是进一步分析实际完成工作的情况,如下图,尽管当前的实际费用(ACWP)比计划费用(BCWS)花费得多,但是当前实际完成工作量比计划多,这时就引入一个挣值的概念,即实际完成工作量的价值(BCWP,已完成工作的预算成本,又称已获取价值)。挣值分析的输入如下:
项目计划与项目实际进展的比较
BCWS (Budgeted Cost of Work Scheduled)计划完成工作的预算成本: 是到目前为止的总预算成本。它表示“到目前为止原来计划成本是多少”或者说“到该日期为止本应该完成的工作是多少”,它是根据项目计划计算出来的。
ACWP (Actual Cost of Work Performed)已完成工作的实际成本: 是到目前为止所完成工作的实际成本,它说明了“到该日期为止实际花了多少钱”,可以由项目组统计。
BCWP (Budgeted Cost of Work Performed)已完成工作的预算成本,又称已获取价值,是到目前为止已经完成的工作的原来预算成本,它表示了“到该日期为止完成了多少工作?”
BAC(Budgeted At Completion)工作完成的预算成本: 是项目计划中的成本估算结果。是项目完成的预计总成本。
理想状态下BCWP、BCWS、ACWP三条曲线可以重合。
挣值分析过程如下:
1. 进度差异:SV(Schedule Variance)=BCWP-BCWS。若此值为零,表示按照进度进行; 如果为负值,表示项目进度落后;
如果为正值,表示进度超前。
2.费用差异:CV(Cost Variance)=BCWP-ACWP。若此值为零,表示按照预算进行; 如果为负值,表示项目超出预算;
如果为正值,表示低于预算。
3.进度效能指标: SPI(Schedule Performance Index)=BCWP/BCWS。表示完成任务的百分比。若此值为1,表示按照进度进行,如果小于1,表示项目进度落后,如果大于1,表示超进度进行。
4.成本效能指标: CPI(Cost Performance Index)=BCWP/ACWP。表示花钱的速度。若此值为1,表示按照预算进行;
如果小于1,表示项目超出预算; 如果大于1,表示低于预算。研究表明: 项目进展到20%左右,CPI应该趋于稳定的,如果这时CPI值不理想的话,应该采取措施,否则这个值会一直持续下去的。
5.项目完成的预测成本: EAC(Estimate At Completion )=BAC/CPI。
6.项目完成的成本差异VAC(Variance At Completion)=BAC-EAC。
7.项目完成的预测时间: SAC(Schedule At Completion )=完成时的进度计划/SPI。
|