前言 有规则的软件开发过程带来的只可能是无法预料的结果,这是很多项目管理者在亲身经历了一次次的项目失败之后,逐渐领悟到的道理。尽管有人依然怀念日渐远去的技术精英时代,但随着软件项目的规模不断加大,参与人员的增多,对规范性的要求愈加严格,告别个人英雄主义的开发模式成为必然,基于软件项目管理的、工程化的软件开发时代已经来临。软件项目管理的作用一方面是提高质量,降低成本,而另一方面则是软件的工程化开发提供保障。 依赖软件技术精英的时代已经一去不会返了。很多项目管理者在实际开发中,经历了多次可怕的梦魇:一次次的失败,一次次的返工。比如,不少项目管理者纷纷提到软件需求变更带来的可怕影响。但是正如完整的法律体制不能制止犯罪,没有完整的法律体制犯罪会更加猖獗一样,频繁的软件变更固然可怕,而没有一个完整的项目管理对应机制,我们无法相像项目最终会是一个什么样子。运用项目管理的经验和方法是软件项目成功的前提和保证,这已是今天的软件业内人士的共识! 软件开发中实行项目管理的意义 项目管理就是在项目活动中运用一系列的知识、技能、工具和技术,以满足或超过相关利益者对项目的要求,实际上就是通过项目各方干系人的合作,把各种资源应用于项目,以实现项目的目标,满足项目干系人的需求,其本质就是对时间、质量和成本的管理。 随着软件开发的深入、各种技术的不断创新以及软件产业的形 成,人们越来越意识到软件过程管理的重要性,管理学的思想逐渐融入软件开发过程中,项目开发的管理日益受到重视。 目前在软件项目管理中存在的误区 现在大多数企业都认识到了在项目中进行管理的重要性,但是仍然有许多企业在实施项目管理的过程中存在着这样那样的误区,主要表现在: (1) 项目经理不够专业 在软件企业中,缺乏专业的项目管理人员来实施项目管理及担任项目经理,通常被任命的项目经理主要是因为他们能够在技术上独当一面,但是他们在管理方面特别是项目管理方面的知识比较缺乏。 (2)项目计划缺乏纲领性 项目经理对总体计划、阶段计划的作用认识不足,因此制定总体计划时比较随意,不少事情没有仔细考虑:阶段计划因工作忙等理由经常拖延,造成计划与控制管理脱节,无法进行有效的进度控制管理。 (3)缺乏有效的管理意识 部分项目经理不能从总体上把握整个项目,而是埋头于具体的技术工作,造成项目组成人员之间忙的忙、闲的闲,计划不周、任务不均、资源浪费。有些项目经理没有很好的管理方法,不好安排的工作只好自己做,使项目任务无法有效、合理地分配给相关成员,以达到“负载均衡”。 (4) 缺乏有效的沟通制度和机制 在项目中一些重要信息没有进行充分和有效的沟通。在制定计 划、意见反馈、情况通报、技术问题或成果等方面与相关人员的沟通不足,造成各做各事、重复劳动,甚至造成不必要的损失:有些人没有每天定时收邮件的习惯,以至于无法及时接收最新的信息。 (5)风险管理意识淡泊 有些项目经理没有充分意识到风险管理的重要性,对计划书中风险管理的章节简单应付了事,随便列出几个风险,随便地写一些简单的对策,对于后面的风险防范起不到什么指导作用。 (6)项目干系人的不确定性 在范围识别阶段,项目组对客户的整体组织结构、有关人员及其关系、工作职责等没有足够了解以至于无法得到完整需求或最终经权威用户代表确认的需求:或者是多个用户代表各说各话、昨是今非,但同时又要求项目尽早交付:项目后期需求变化随意,造成项目范围的蔓延,进度的拖延,成本的扩大。 (7)缺乏项目团队的合理分工 项目团队内部有时由于各阶段不同角色或同阶段不同角色之间的责任分工不够清晰而造成工作互相推诿、责任互相推卸的现象;有时各阶段不同角色或同阶段不同角色之间的责任分工比较清晰,但是各项目成员只顾完成自己那部分任务,不愿意与他人协作。这些现象都将造成项目组内部资源的损耗,从而影响项目进展。 解决软件项目管理中存在的误区的有效策略 要想解决上面描述的误区,归根到底还是要从管理学的角度入手,即在软件项目的开发过程中加入过程管理的内容,这样我们可以 在软件开发中对各个过程的质量加以控制,从而达到保证软件产品质量的目的。为了有效提高管理水平,我们应该努力做到: (1)项目经理接受系统的项目管理知识培训是非常必要的,有了专业领域的知识与实践,再加上项目管理知识与实践和一般管理的知识和经验的有机结合,必能大大提高项目经理的项目管理水平。 (2)计划的制定需要在一定条件的限制和假设之下采用渐近明细的方式进行不断完善。提高项目经理的计划意识,采用项目计划制定相关知识、技术、工具,加强对开发计划、阶段计划的有效性进行事前事后的评估。 (3)加强项目管理方面的培训,并通过对考核指标的合理设定和宣传引导项目经理更好地做好项目管理工作。技术骨干在担任项目经理之前,最好能经过系统的项目管理知识,特别是其中的人力资源管理、沟通管理的学习,并且在实际工作中不断提高自己的管理素质,丰富项目管理经验,提高项目管理意识。 (4)制定有效的沟通制度和沟通机制,提高沟通意识:采取多种沟通方式,提高沟通的有效性。通过制度规定对由于未及时收取邮件而造成损失的责任归属;对于特别重要的内容要采用多种方式进行有效沟通以确保传达到位,例如:除发送邮件外还要电话提醒、回执等,重要的内容还要通过举行各种会议进行传达。 (5)通过学习项目管理知识掌握风险识别、量化、对策研究、反应控制的工具和方法,掌握项目风险管理所必备的知识。通过加强对项目规划中风险管理计划的审核提高项目组的风险管理意识。总结 本行业项目中常见的风险及其对策作为风险管理计划中必要的风险内容,并切实评估相应对策的有效性和可行性。 (6)项目的目的就是实现项目干系人的需求和愿望。项目干系人管理应当从项目的启动开始,项目经理及其项目成员就要分清项目干系人包含哪些人和组织,通过沟通协调对他们施加影响,驱动他们对项目的支持,调查并明确他们的需求和愿望,减小其对项目的阻力,以确保项目获得成功。 (7)项目经理应当对项目成员的责任进行合理的分配并清楚地说明,同时应强调不同分工、不同环节的成员应当相互协作,共同完善。 实施有效的项目管理绝非易事,对于软件企业而言,这不是一个小的改变,而是一种变革,企业需要为此付出艰苦的努力,同时,成熟有效的项目管理无疑将对企业起着至关重要的作用,项目管理的水平将是企业核心竞争力之一。 案例分析 二年前,我单位用了半年时间为部队开发了一套作战指挥控制系统,作为该项目的主要负责人,直接参与了项目管理、系统分析和编程的部分工作,根据该项目的开发进度及中间遇见的问题,结合实际情况讨论下在项目的管理过程主要注意的问题。 .1.项目前期准备 在进行任何一项较大的项目开发时,首先要进行项目的可行性分析和研究,因为这些项目中的问题并不都有明显的解决办法,这样就 很难在预定的时间、费用之内解决这些问题,如果这些问题没有可以行得通的解决办法,贸然开始这些项目,就可能导致项目的失败,造成巨大的损失(包含经济损失和合作单位的信誉度的降低)。 软件项目开发的生命周期见图1 .1.1可行性分析 软件项目可行性研究的目的是用最小的代价和最短的时间,确定该项目是否能够开发,值得开发,其实质是要进行一次简化的、抽象的需求分析和设计过程,主要应从以下几个方面进行分析。 5.1.1.1技术可行性 对要开发项目的功能,性能和限制条件进行分析,确定在现有的资源条件下技术风险有多大,项目是否能够实现;现有的资源包括硬件资源、软件资源、现有的技术人员和技术水平、已经有的工作基础等,判断技术上是否可行,主要需要考虑以下几个问题: (1) 开发的风险 ; 即在给定条件下 能否实现目标的功能和性能。 (2)资源的有效性; (3)技术的发展性; 由于需求未经过详细的调研,存在模糊性和可能的变化,开发人员进行技术可行性评估时,存在比较大的风险,一旦出现估计的错误,将可能导致灾难性的后果。 .1.1.2经济可行性 进行软件开发项目的成本估算以及了解取得的效益估算,确定该项目是否值得开发,对于大多数项目,衡量经济可行性,应考虑一个“底线”,同时应考虑本单位的长期经营策略,潜在市场前景等因素。 5.1.1.3社会可行性 应考虑项目是否存在任何侵权、责任等问题,考虑在现有的制度、法规下是否行得通,包括合同、责任、法律等多种因素。 5.1.2需求调研 在项目前期工作中,需求调研是其中最重要的一个环节,今后的许多工作都依赖于需求调研的结果,需求调研的过程是渐进的,在可行性分析阶段,主要关注的是本项目规模、范围和重点的功能,在项目进入正是开发流程以后,我们需要更加全面、准确地了解系统的需求,不重视需求过程的项目队伍将自食其果,需求工程中的缺陷将给项目成功带来极大风险。如:无足够用户参与导致产品无法被接受;用户需求的增加带来过度的耗费和降低产品的质量;模棱两可的需求说明可能导致时间的浪费和返工;用户增加一些不必要的特性和开发人员画蛇添足;过分简略的需求说明以致遗漏某些关键需求;忽略某类用户的需求将导致众多客户的不满;不完善的需求说明使得项目计划和跟踪无法准确进行。 .1.3项目团队的组织 建立项目团队是项目开发过程的开始,一切工作都是由项目团队的成员完成的,在整个项目的运行过程中,需要很多不同的角色参与到项目中,完成不同阶段的任务。所以在建立项目团队的过程中要把握好人员角色的划分、特别人员管理与激励、监督等。整个人员的管理是项目管理的关键,因为人是活的,而项目是死的,只要人员管理妥当,项目开发一般是不会出什么问题的。 .1.4项目开发计划 软件项目的特征之一就是需求的不确定性和开发过程中存在的技术风险,按照通常的方法,制定一个项目的计划应该是先根据项目的需求,进行详细的任务分解,从而找出实现的方法,估计出项目的工作量,再根据项目资源的状况,制定出项目的计划。 但是,再现实的工作中,项目的时间表往往是事先确定的,给开发留出的时间也是事先定好的。而我们能够利用的资源,主要是开发的人力资源,也被事先基本确定了,在被确定的这两个前提条件下,我们如何根据项目的需求,合理地安排人力和时间,完成项目的开发,这是现实中项目管理者经常遇到的问题;如果事先确定的时间表是相对比较合理的,至少应该是我们够完成的,我们制定的开发计划才是有意义的,否则,按照这个时间表制定出来的计划只能是失败的,在这种情况下,项目管理者唯一可以做的是对用户的需求进行剪裁,去掉某些耗时长而且不太重要的功能,或是在开发中适当降低质量要求,或许可以完成项目的进度。当然这必须最终要得到用户的认可。 .2.项目开发过程管理 .2.1 详细设计 在详细设计阶段,由于任务已经详细地分解,总体地解决方案和技术框架已经确立,详细设计地目的就主要是针对某个特定地模块或对象,根据需求、技术框架的要求和模块间的接口,描述出我们实现功能的方法,主要内容包括: (1)内部算法描述; (2)内部数据组织; (3)相关接口详细设计。 .2.2设计评审 在设计完成后,必须安排设计评审以保证设计的质量,通常设计评审以小组内部的评审会的方式进行,参与人员包含项目小组内部的人员及其负责人,由开发者介绍其设计思路、关键算法的突破及模块功能的划分等,评审人员要相对了解该项目的背景并对其设计质量进行评审。评审的内容主要包括: (1)关键算法的可行性; (2)接口是否符合概要设计的要求; (3)技术清晰度是否符合设计标准; (4)文档的完备性。 评审通过的设计,才能够开始编码工作,评审的结果应记录到开 发文档当中。 .2.3编码 在编码阶段,主要需要在编码工作结束后,进行代码审核,这项工作非常重要主要应该由项目小组的技术负责人完成,审核的目的并不是为了检验代码的正确性,而是需要对编码是否按照规范进行审核。主要内容包括: (1)变量、包、方法等的命名是否符合规则; (2)注释是否填写完整,是否符合规范; (3)代码的可读性、编写风格是否符合规范; (4)是否有明显的造成系统运行低效率的处理方法; (5)公共变量的定义和使用。 5.2.4调试 编码工作完成以后,通常需要开发人员自己进行单元测试,有些部分需要编写相应的测试程序及用例。应该避免发生这类的情况,有些开发人员认为自己不应该进行测试工作,在编写完代码以后,只要编译成功,就直接提交成果,将测试工作完全交给测试人员去做,这样做不仅仅给测试人员增加了许多的工作量,同时增加了许多因为交流产生的时间的拖延,造成进度的延迟,管理人员应该杜绝程序员的这样的思想,同时在管理中予以考虑,可以将提交成果产生的 bug数量作为考核程序员业绩的标准之一。 .3.项目后期管理 .3.1项目的验收 项目验收,是整个项目生命周期中最后一个环节。一般来说,软件项目的验收一般来说有2个阶段,第一个阶段是验收测试,当验收测试成功结束后,一般会有一个阶段的试运行阶段,只有当 2个阶段全部结束后,整个项目才算真正结束,可以收回全部的工程款项,该软件也进入其运行维护期。验收测试应按照软件的需求,质量要求进行测试验收,需要甲乙双方共同建立验收小组,或请第三方测试机构进行验收测试,在验收测试之前,开发方应提供一系列的开发设计文档供验收测试使用。 .3.2软件维护 编程大师曾说 “哪怕程序只有三行长,总有一天你也不得不对它维护。”, 很多软件产品不是一次性的买卖,比如在电信、金融等领域,有些软件系统要用十几年,对软件进行维护是必不可少的,软件公司的决策者没有哪一个喜欢被维护的费用吓一跳,但软件维护的代价通常是高昂的。对软件而言 “维护”是个不太直观的术语,因为软件产品在重复使用时不会被磨损,并不需要进行像对车辆或电器那样的维护,软件维护是人们对既丰富多彩又会令人心酸的活动的统称,其中丰富多彩的活动是指那些反映客观世界变化,能使软件系统更加完善的修改和扩充工作,令人心酸的活动是指那些永无休止,并且改了旧错却引起新错让人欲哭无泪的工作。 总之:良好的项目沟通管理;合理的人力资源配臵;用风险评估在进度和质量之间进行权衡;重视需求变化的客观性,强化测试,保证软件功能完整、正确、高效是我在该系统项目中的整体管理中的几方面主要感受,为项目的顺利完成奠定了坚实的基础。在以后的项目管理工作中,不仅要注重项目的前期准备工作,还要主要开发过程的管理以及加强测试的系统性和科学性,注重各方利益的权衡,继续深化各方的沟通,协调好开发工作各个部分及各个方面的关系,更好地完成项目。
信息发布:广州名易软件有限公司 http://www.myidp.net
|