我国软件项目管理中的危机和解决方案汪庆龙200717020317信管07103从1968年“软件危机”、“软件工程”,第一次被提出,至今软件工程已走过了40多年的历程,但“软件危机”并未被彻底解决。我国软件产品研发项目仍然存在许多问题,也就是还没有真正把项目管理理论与方法运用到软件产品研发管理中来;没有确定的组织结构与合用的软件产品研发管理体系;软件产品研发管理团队组建不合理;不注重软件研发项目的启动与收尾管理,仍停留在软件过程与工程的层面上;经常出现有计划无控制的局面;最重要的是缺少对“人”这种非标准化资源的有效“管理”。针对这些问题,本文主要介绍了如何通过一些项目管理方法来避免问题,更好地达到目的。1现有软件产品研发管理模式分析目前几种常见的软件产品研发管理模式一般是基于以下一种或几种体系与方法而建立起来的。CMM对软件过程改进有很多有益的指导,但它对企业“如何进行软件过程改进”没有强制要求,对开发工作的直接指导性较弱,而且CMM投入很大、产生效益时间长,所以国内大部分软件开发企业不具备这样的条件。IBM总结的IPD作为一套先进的产品开发模式、理念和方法,更适合于指导大型企业的研发管理流程改进。但IPD的实施风险较大,失败比成功的可能性要高得多。RUP是软件业界迄今为止商品化最成功的软件过程模型。它是一个通用过程框架,适应性广,同时配套的软件工具相当完备,可以说它是重量级的软件研发管理解决方案。但大部分国内软件企业是没有能力来实施RUP的,只能借用其中某些适合的方法论。敏捷开发方法表达了“简单、快速、实用”的软件开发思想,但它不是成熟的理论、也不是事实上的标准可供企业广泛接受。敏捷开发方法对于提高局部的工作效率可能是很有帮助,但指导大中型软件企业的研发管理是有很高风险的。2基于项目管理的软件产品研发管理模式设计目前很多企业都在推行CMM,ISO9000等体系,并把项目管理作为这些体系的重要组成部分之一。但是大部分公司只是做了一些软件开发管理规范,却没有形成适合自己公司特点的软件产品研发管理模式,所以他们没有从根本上解决软件产品研发的质量、进度、成本控制等问题。项目和项目管理都是在一个大于项目本身的环境中进行的,软件产品研发项目也不例外。我们将软件产品研发项目生命周期分为4个基本的项目阶段:项目启动、项目策划、项目执行与控制、项目结尾。本文不讨论组织结构的设计等环境建设,只对项目各阶段所应注意的关键问题进行分析。2.1项目启动做好一个项目的首要任务就是要做好立项管理,也就是确定项目的目的:“做正确的事情”。从整个软件产品研发项目来看,项目启动阶段也就是项目定义与决策的阶段,有人“发现问题”,并对“问题”进行必要的调研分析,然后提出具体的项目建议书、项目可行性分析报告,最终做出项目方案的抉择和项目的决策。简单说,就是正式认定一个项目应该开始,并且向这个项目提供资源。本阶段主要输出成果是项目可行性分析报告、项目建议书、立项评审报告、项目任务书。在本阶段已确定了项目的初步范围说明,并设立两个项目管理者的职位:项目经理和设计师,项目经理负责小组人力资源、非技术方面的管理,并向上级负责,设计师负责项目的规划设计、方案选择等并为此负责。2.2项目规划项目规划阶段的主要活动就是制定软件研发项目计划,本阶段需要确定软件的功能设计、任务分配及相关的成本、资源等的预算。软件研发项目计划管理面临的最大挑战就是计划的准确性差,大多数项目实际完成时间都会超过估算进度的20%~100%。为了加大软件计划的准确性(主要指成本、质量、进度三大要素),需要按照计划颗粒度由大到小、由小到大的循环过程来制定计划,也就是采用逆向目标管理。2.2.1制订计划的基本步骤本阶段输入软件开发项目任务书,通过需求分析、任务分解、任务分派、进度确定、计划评审等子过程,最终输出软件开发项目计划书、系统设计说明书。第一,“选择正确的人”“快乐”能够带来更高的效率、更好的成果,建立“兴趣小组”是很好的软件项目团队模式。“兴趣”包含着两层意思:其一是对整个软件产品的研发兴趣,其二是主动挑战自己有能力完成的、并有信心做好的任务目标。让全体团队成员主动参与到项目管理中来,这是对当前我国软件项目管理的“被动式管理”状态的改善。第二,进行软件功能的设计,把用户的业务需求转变成功能需求,并进行功能的排序以判断各项功能的必要性与紧急性。第三,进行任务分解与工作分配。为了使得预期的工期与成本更加合理,首先按照项目管理中的工作任务分解结构(WBS)方法进行工作单元划分,并由“兴趣者”去估算它的时间与资源需求,通过逆向三级计划法得出各级计划时间表。除了要保证计划在时间点上的各级计划保持一致外,我们还需要对时间流通过网络图来计算关键路径,以保证工作的并行度以及把力量集中在瓶颈上。最后制定其他配置管理计划、质量管理计划等独立计划,风险、成本、沟通等附属计划,一切就绪后就可以进行计划的评审。2.2.2逆向三级计划法各项目管理层所关注的项目范围是不同的,一般公司管理层关注的是整个项目的进度安排与进展情况,项目经理关注各个子任务的进度安排与进展情况,各项目成员关注的是日工作任务的安排与完成情况。我们通过三级计划来满足不同层次的需要,一级计划是最高层次的计划,它的准确性必须由二级计划来保障,而二级计划又必须有三级计划的保障,如图1所示。第一级计划:根据项目的要求与各方面的估计给出开发实施阶段,并提出资源需求。它由项目设计师和项目经理根据用户需求制定,给出项目进行的主要阶段和各种需求,此计划需要经过审核通过后方可执行。第二级计划:由参与项目的所有人员共同制定,它将细化任务的内容和具体执行者。它由项目经理、项目设计师、以及所有的参与人员共同制定。二级计划是一级计划的任务分解。第三级计划:由每个具体执行任务个人来制定。计划的内容包括每天的任务和需要提交的文档。根据二级计划中的任务安排每个人制定自己的三级计划。2.3项目执行与控制实施过程控制是保证项目实施到位的重要手段。2.3.1逆向三级控制法项目执行与控制采取逆向三级目标管理控制法。各级控制的回顾检查的基本目的是检查各级计划的完成情况,有偏差时采取纠正措施,并将各级计划做出相应的调整与细化,同时提供一个交流机会。第三级控制(每日回顾检查):在每个工作日的开始,针对三级计划所进行的一次全体团队成员的回顾检查短会。第二级控制(任务同步检查):针对二级计划的任务执行同步情况,每周进行一次会议形式的例会,会议一般可由项目经理来主持、记录与公布。第一级控制(整体进展审查):为了跟踪项目是否在向原定目标进展,使得每个人都了解整体项目的进展情况,每月(或不定期)进行一次会议形式的审查会议,会议一般由项目经理来主持、记录与公布。当涉及到二级计划、一级计划的偏差纠正时,除了要采用三级逆向计划方式之外,还要进行相应的网络图来计算关键路径,以保证计划的流向合理性。2.3.2加强团队凝聚力软件开发团队就是一个临时家庭,团队成员之间可能会产生各种冲突,团队和谐关系也可能会陷入紧张局面,甚至出现敌视、强烈情绪以及向领导者挑战的情形,成员之间的沟通变得不通畅。那么除了采取良好的沟通计划,合理的激励机制等硬性管理措施之外,项目管理者还必须注意以下的柔性管理方法:首先我们必要摸清团队性格,这需要项目管理者进行每天的观察和沟通;其次就是项目管理者优秀的人格魅力和以身作则的示范将会无形中给团队注入正面的驱动力;最重要的一点就是让团队成员保持成就感,让开发团队具有使命感。总之,团队基础是(兴趣小组),只有在这个“临时家庭”里培养相互激励、关心的良好团队气氛才能更好地保持团队积极性与凝聚力。2.4项目收尾软件产品准备提交时,软件开发团队需要进行项目的收尾工作。成功的软件项目收尾除了产品的提交之外还要进行项目总结、结项会议等工作。软件开发管理中没有一劳永逸的特效药,必须时刻用心让每个项目最大程度迈向成功,才可以让开发团队、开发企业快速地成长。3案例分析以某公司研发“错峰管理系统”为例来进一步分析。在项目启动过程中通过项目预研、项目评审等子过程来确定项目目的,保证了“做正确的事情”(电力市场有“错峰管理”信息化的需求并制定了相应的技术规范等标准)。本公司有着丰富的电力系统研发经验,项目经理结合历史项目的总结以及人力资源储备等信息,并通过面谈、双向选择等方式组建了一个“兴趣小组”模式的项目团队,进而保证了“选择正确的人”。在项目策划过程中,首先由项目设计师对错峰用电管理系统进行功能设计与划分,并通过工作分解结构、网络图以及三级逆向目标管理等一系列的方法来制定项目计划。有了逆向三级目标管理的计划方法,使得工作分解结构及网络图的使用也发挥了真正的作用,项目策划所产生的计划也是相对比较合理的。在项目执行过程中,始终保持着项目团队的良好工作环境与气氛,同时项目团队都“肩负着某市本年夏季有序用电的重大责任”这一使命,并通过每日站会、周例会、月(或阶段)总结会来进行逆向三级目标管理的控制方法,根据实际情况对项目计划、项目范围进行不断地细化、不断地调整,直到项目执行完成。项目结尾也不仅是项目的验收,项目的总结、知识与经验的积累同样需要重视,并兑现奖励承诺,这样这个项目就算成功完成了。4结论国内已有许多软件研发组织试图将项目管理技术应用于软件开发过程中,但真正能够运用、执行起来的却是少之又少,尤其是中小型软件组织。本文介绍了通过硬性管理制度与柔性管理艺术的相互结合及促进的管理模式来增强软件研发可执行性的主要方法。并通过实例分析说明加强启动管理大大提高了项目的成功系数;通过逆向三级目标管理方法与现有计划与控制方法的结合大大增强了计划的合理性、可执行性;成功的收尾加强了经验积累、持续改进,解决我国软件项目管理中的危机。