摘要:本文先介绍了使用传统项目管理技术管理软件开发项目的方法,然后介绍了使用敏捷项目管理的初步实践,通过两者比较,提出了使用敏捷项目管理进行软件开发的方法。
关键词:敏捷开发、极限编程、XP、项目管理
一、使用传统项目管理技术管理软件开发项目的方法
按照《人月神话》的说法,软件开发是个焦油坑,书店里关于软件开发管理的书籍林良满目,各个软件开发组织也在尝试和应用不同的软件开发管理办法,希望寻找到“软件开发的银弹”。
在软件开发管理中,引入项目管理的办法,已经得到广大软件开发管理人员的一致认同,但对于具体实施何种项目管理办法,各个软件开发组织都有不同的答案,更多的迷茫,因为引入的项目管理办法不能从根本上解决软件开发项目面临的进度拖后、费用超支等问题,软件开发的银弹到底在哪里?
以下是笔者对国内软件开发组织不同项目管理成熟度的归纳和总结,大概可以分如下几类;1)小作坊、混沌形的,这样的组织还处在接单求生存的阶段,管理者还根本没有项目的意识,以满足客户需求、定制开发和回款为第一要务;2)尝试按照项目管理的思路与方法管理软件开发项目,但发现推行困难,不得要领,目前很多中小型的软件开发组织都处于这个阶段;3)大型的软件企业,已经通过CMM|ISO认证、有足够的资源做保障,实行规范的项目管理做法,如一些软件外包工厂。
本文主要讲述处于第二个层次的软件开发组织的项目管理问题。软件开发项目管理涉及非常多的内容,从软件开发本身的业务出发,有需求管理、变更控制、配置管理、测试管理、系统分析与设计等;从项目管理的知识领域角度,有范围管理、时间管理、沟通管理、人力资源管理等内容。
按照传统的经典项目管理方法,通过一定的项目管理模板与IT工具,总结多个项目的经验,笔者总结有如下经典步骤来完成项目管理的计划编制与进度控制过程:
计划编制的经典步骤:
①建立企业和项目资源库:这个是进行项目管理的基础工作。
②设置项目日历、资源日历。
③设置项目的主要里程碑点。
④在WBS(工作包)下列出工作清单(Task,Activity)。工作分解结构(WBS)和作业是进行项目范围管理的好途径。
⑤对每个Task估计工期。
⑥连接每个Task间的逻辑关系(SS,FS,FS,FF,延时)。
⑦加载完成每个Task所需要的资源和资源数量。
⑧进度计算后,看开完工里程碑是否符合合同或业主要求,看资源负荷是否过大。
⑨看进度计划是否需要调整。
⑩调整的方法为:压缩关键路径上Task的工期,多投入资源以缩短工期,分解较长工期的作业。
⑾看调整后的进度计划是否合适。合适的话,则把第一份计划,保存为目标计划(Baseline)。
⑿张榜发布第一版本计划,通知项目干系人。
进度控制的经典步骤:
①确定进度报告的周期,以周计还是以月计。
②下发第一个报告周期内所有成员的Task清单(例如内容、质量要求、时间要求)。
③第一个报告周期结束时,各个成员反馈自己负责的Task实际进展(例如实际开始时间、实际结束时间、完成百分比、尚需工期、本期的资源消耗数量、工作结果的提交)
④汇总各个成员的进度报告,产生实际进度计划。
⑤把实际进度计划与目标计划(Baseline)做对比,监控主要的里程碑点是否还符合业主或合同的要求,周例会上针对每个员工的任务完成情况作对比。
⑥如果不符合,则调整计划,并存储为新的目标计划。
⑦下发下一报告周期项目成员工作内容清单(Task)。
⑧……循环往复,直到项目结束。
计划编制的其他技巧:
①团队成员依据责任分工,协同完成计划编制工作。
②编制多层计划(适用于大型的项目,项目群管理)。
③编制滚动计划(适用于工期很长的项目)。
上述方法对于任何传统项目或IT实施服务项目,都是适用的,而且可以达到很好的项目,也是实施项目管理的必由之路。笔者对于本事业部所有的IT服务项目,都是使用这个方法进行管理,达到了项目进度控制的目的。
但对于软件开发活动,由于其与传统项目如工程建设项目的显著区别,在应用上述方法与步骤时,往往达不到理想的效果,很多软件开发组织在推行这套管理思路与方法的时候,也遇到了很多困难。主要表现在:
1)传统项目的时间估算可能存在历史或经验数据,而软件开发的活动工期估算却是因人而异;
2)软件开发包含大量创新性活动,而这些创新性活动很难确定合适的工期;
3)经典的计划编制方法中,强调作业间的依赖性(逻辑关系),以作业间逻辑关系来推算和安排项目进度,而在实际的软件开发活动中,意义不大;
4)新型的软件开发方法,如迭代开发,很难单个作业(功能点)反馈进度,因为某个功能开发在周期内是反复进行的,进度反馈可操作性差。
5)我们需要反思这样一个问题:“项目管理如何为一个项目增加价值”,因为很多开发人员把项目管理活动如工时填报、进度反馈做为额外的负担,认为项目管理师日常行政管理活动,不为项目增加价值;