在软件工程飞速发展今天,软件项目管理,与其称之为一项工程,倒更不如说是一门艺术。在这个过程当中,不只要根据软件项目的具体环境中巧妙整合软件技术,经济学和人际关系,更好考虑到高人员密集度,长时期跨度下可能出现的各类风险和问题。最近,根据对600多家公司的调查代表,35%的公司至少有一个失控的软件项目。一方面,顺序的,经典的流程驱动的瀑布模型使得人们在理解其风险和影响以前,过分地提出具备约束力的需求规范中的软件功能。另外一方面,代码主导的开发过程,每每诱使企业过度注重功能复杂和代码实现,而忽略了需求,工期,质量,资源等因素间的平衡。工做时"用程序代替用户需求",其结果必然如目前媒体"程序员生存情况"所言,以开发人员在时间的牺牲为代价来换取项目的结束。无数软件开发的残酷的现实告诉咱们:没有规则的软件开发过程带来的只多是没法预料的结果。如何改善咱们的软件开发管理,其实有许多的原则和经验值得咱们为之借鉴。程序员
一.平衡原则 工具
在咱们讨论软件项目为何会失败时能够列出不少的缘由,如 管理问题、技术问题、人员问题等,可是有一个根本的思想问题是 最容易忽视的,也是软件系统的用户、软件开发商、销售代理商最 不想正视的,那就是:需求、资源、工期、质量这四个要素之间的 平衡关系问题。结合实际,咱们能够通俗地理解这四者之间彼此的联系,需求的增多,必然会带来资源消耗的增多和工期的延长;而用户的需求又与工期密切关联,用户不但愿工程交付过晚;相对而言,追求更高的质量,须要咱们投入更多的人力物力资源,甚至更长的工期;一样,一个高质量的产品,也不是盲目得赶工期,多投入就能够完成的。这就要求咱们在实际中考虑平衡需求,资源,工期,质量并获得各方面均衡的一个最优解。在软件项目中咱们不只仅是关注项目的进度,质量,范围和成本四要素的平衡。还须要关注人员角色分工的平衡,冒险和保守的平衡,外部和内部的平衡,纪律和灵活性间的平衡等等。任何一个方面失去平衡,项目均可能处于危险中。性能
这就要求咱们在软件开发伊始,就创建细致长远的开发和管理计划,平衡各要素间的分配。没有计划,就无从知道何时控制和变动。制定一个详尽的计划,以详细到开发人员能够理解的程度为宜。计划可以告诉你何时应该作什么。因为没有计划或是计划太粗糙、不切实际,不少项目1/3甚至1/2的时间花在返工上面。由于计划中遗漏了某一项关键任务,或者由于计划太过简陋,就会出如今实际开发过程当中,一旦遇到大的问题,急于解决的过程当中就会使得本来设计好的需求,资源,工期与质量间的平衡被打破,随之带来的,不管是工期上的延长,仍是质量上的纰漏,均可能致使项目最终宣告失败。学习
二.高效原则网站
记得看过一篇facebook创始人扎克伯格回忆本身创业之初的故事,有一句话让我印象深入,“真正决定人生高度的,是你作事的速度”。当初,心血来潮的扎克伯格从产生想法,到实现一款简单的应用--大头照对比评分应用FaceMash,仅用了6个小时。在短短的时间内,他独自一人完成了产品的设计,开发,上线....这在当时多是一个小型企业两天的平常工做量。而他的对头,在哈弗就读的Winklevoss兄弟,总说扎克伯格抄袭了他们的创意,才有了后来的facebook,而事实呢?在Winklevoss兄弟在犹豫是否要投入作社交网站时,扎克伯格的facebook已经覆盖了29所学校,7.5万注册用户。促成他们之后差距的,正是两者执行力的差距。也只有像这样在短期内完成高质量的任务才能称之为高效。google
在实际状况中,软件项目的人力资源分配大体符合Norden-Rayleigh曲线分布。①区域表明开始阶段,人力过剩;②区域表示开发的中后期,人手不足;③区域表示后来的补偿时间过晚,反而会出现Brooks定律的状况:“向一个已经拖延的项目追加新的开发人员,可能会使这个项目完成得更晚”。由于做为新加入的员工来讲,相关培训、环境熟悉和人员之间的沟统统路的增长,迫使项目的工做效率急剧下跌。工做效率降低须要加班来进行弥补,但加班形成的疲劳会再次使工做效率下降。同时工做成本却不断的向上攀升。spa
基于高效性原则,须要对项目管理考虑如下几个方面:1.选择精英成员,虽然现实中开发人员不可能,也作不到像扎克伯格那样拥有天才般的速度和执行力,但总能够从现有人力资源中挑选出其中精英,对不一样专长的人安排不一样分工;2.目标要明确,范围要清楚,明确开发目标和功能的覆盖范围,并在实际操做过程当中坚决地保持始终如一;3.沟通要及时、充分,沟通管理是对项目过程当中产生的各类信息进行收集、存储、发布和最终处理,由沟通计划编制、信息发送、性能报告和阶段的结束构成。沟通,不只包括项目组内部程序员和项目经理的沟通,还须要客户与项目组的沟。沟通的不足会致使效率的下降;4.要在激励成员上下工夫,经过评估咱们能够激励人员,保证绩效。良好的绩效管理能够一目了然地反映项目成员的业绩,一切以数听说话,更能体现公平。绩效考核分项目绩效和我的绩效两个部分,项目绩效从项目成本、利润、完成计划状况、项目质量、规范程度、文档水平、技术、产品化和共享度方面评价项目效果。设计
三.优先原则
代理
在软件工程中存在这样的PARETO定律:在实际中企业80%的问题能够用20%的投资解决,而20%的次要问题则须要花费80%的投资的。在软件项目中,若是出现了过多的需求,一般会致使项目超出预算和预约进度,最终致使软件项目的失败,此时需求的优先级可能比需求自己更为重要。仔细分析一下,这些项目要求分为必须的非必须的,所以咱们建议是压缩非必须的部分或是暂时将其放在一边没必要过重视。软件项目开发事实告诉咱们,开发人员在非必须的项目要求上耗费了太多的精力,用户的需求变动的大部分出如今"最好有"这一部分,实际上用户并不看重这些需求(即便去除这些需求),而咱们所作的,每每是舍本求末。blog
在实际状况中,软件开发负责人员每每会面临需求方提出的一系列繁复的需求,在实施过程当中必定要将需求划分为不一样的优先级,创建项目开发的需求优先级队列,对于一个管理良好的软件工程必不可少。反之,盲目追求对细枝末节的全覆盖,反而会极大拖慢工期进度,甚至影响产品质量。
四.分解原则
“分而治之”是计算机领域的一个重要思想,对于软件项目来说,能够将大的项目划分红几个小项目来作,将周期长的项目化分红几个明确的阶段。在需求管理中首先要进行分类管理,将软件需求分出层次,不一样层次需求的侧重点、描述方式和管理方式是不一样的。对于管理层而言,提出的需求可能会更加偏向于全局性的目标需求,对于底层实现和分工并不关心;而中层须要将具体的操做,代码分配给不一样部分,人员进行实现,同时须要考虑各部分之间的相互衔接。项目越大对项目组的管理人员、开发人员的要求越高,参与的人员越多,须要协调沟通的渠道越多,周期越长,开发人员也容易疲劳,将大项目拆分红几个小项目,能够下降对项目管理人员的要求,减小项目的管理风险,并且可以充分地将项目管理的权力下放,充分调动人员的积极性,目标会比较具体明确,易于取得阶段性的成果,使开发人员有成就感。
五.风险原则
某家知名软件公司曾总结出排行前几的为软件管理埋下风险的罪魁祸首,分别是:
1.人为缺陷;2.不切实际的时间表和预算;3.开发错误的功能和属性;4.开发错误的用户交互;5.多此一举;6.持续的需求更改.....
软件项目管理的过程当中,惟一不变的就是"变化"。风险管理也是始终贯穿于软件项目管理之中的重要元素,在项目中不考虑可能发生的变化是难以想象的。不过在面对项目可能发生变化而带来的项目风险时,项目管理人员每每会怀有逃避的态度。经济学里大名鼎鼎的风险规避原则即是项目管理人员心理的有效描述。做为项目管理人员来讲,应该及早预测可能出现的风险,作好风险储备。虽然风险储备不能解决全部的问题,但预防胜于治疗"。经过学习项目管理知识掌握风险识别、量化、对策研究、反应控制的工具和方法,掌握项目风险管理所必备的知识。经过增强对项目规划中风险管理计划的审核提升项目组的风险管理意识。
小结:
随着软件开发的深刻、各类技术的不断创新以及软件产业的造成,人们愈来愈意识到软件过程管理的重要性,管理学的思想逐渐融入软件开发过程当中,项目开发的管理日益受到重视。然而,实施切实有效的软件项目管理在实际操做中绝非易事,了解和运用上述原则是不够的,若要达成软件工程管理的最终目标——保证软件项目可以按照预约的成本,进度,质量定期,顺利地交付用户使用,还必须深刻学习项目管理、管理心理学、质量管理学、组织变革、系统论等方面的知识,并在工做中不断的总结和实践。
参考文献:
[1]BARRY W. BOEHM,SENIOR MEMBER.Theory-W Software Project Management: and Examples,IEEE
[2]Software project management,维基百科词条
[3]BARRY W. BOEHM,Defense Advanced Research Projects Agency.Software Risk Management: Principles and Practices,IEEE
[4]曾祥鹏.浅谈软件开发项目管理,今日科苑
[5]孙鸿飞,武慧娟.浅谈软件开发项目管理的意义和原则,商场现代化