软件研发管理问题和解决方案常见问题分析基础方法论介绍整体解决方案林锐博士火龙果整理uml.org.cnPage2火龙果整理uml.org.cn目录1.企业研发管理的理念2.常见问题分析3.中型企业的研发管理需求4.基础方法论介绍-CMM5.基础方法论介绍-PMBOK6.基础方法论介绍-敏捷开发7.基础方法论介绍-RUP8.面向企业的软件研发管理解决方案9.基于Web的集成化项目管理系统Future3.0Page3火龙果整理uml.org.cn1.企业研发管理的理念1.1目标企业的根本目标是“合法地赚取尽可能多的利润,使企业利益最大化”。企业所有的特定目标和行动都是围绕根本目标开展的。根本目标进一步决定了企业研发管理的目标和策略。企业研发管理的基本目标是:让所有人员有条不紊地开展工作,在预定的时间和成本之内,开发完成质量合格的产品,从而使企业和个人获得预定的利益。企业研发管理的奋斗目标是:调动一切积极因素,努力提高产品质量、提高工作效率并且降低成本,使企业和个人获得比预定目标更多的利益。1.2质量、进度(时间)、成本“质量、进度(时间)、成本”通常是衡量企业研发管理“优劣”的三个关键指标。不同的企业,甚至同一企业在不同时期,对三者的重要性看法是不一样的。如果出现“三者难以同时兼得”的情况,那么产品的决策者一定要搞清楚质量、进度(时间)、成本之间的复杂关系,判断孰重孰轻,给出优化和折衷的措施。1.3规范化vs.超越规范化在企业里,大部分的工作是成熟的,有成功的模式可以套用,应当走规范化的路线;而另外小部分的工作可能是独特的,并不适宜套用规范(也可能没有规范可以套用),那么应当采用超越规范化的管理方式。通常前者约占80%,而后者约占20%Page4火龙果整理uml.org.cn2.1常见问题分析:立项管理2.1.1自主研发产品的立项问题拥有决策权的领导人独自决定,或者招集有关人员开会商议是否开发某个产品。决策过程中的主观臆断比较多,风险很高。如果决策错误,即使人们努力开发出功能很好的产品,却可能在商业上失败。由于没有进行充分必要的调研、可行性分析、立项建议、立项评审等工作,企业领导在组建开发团队时难以给出恰当的资源和进度计划。团队只知道干活,却不了解产品的开发背景,不清楚用户期望的产品应该是什么样的。在开发过程中经常迷失方向,导致进度延误、费用超支等问题。2.1.2合同项目的立项问题委托方(客户方)和承包方(开发方)在签订合同的时候,双方对软件需求的了解并不深入,合同中对“开发什么”的描述比较空洞。合同签订之后,客户经常变更需求,开发方被迫不断修改软件,弄得疲惫不堪。夸张地概括:除了合同金额不变,其它一切都可能改变。刚签订合同时开发方似乎赚钱了,后头却可能得不偿失。双方在签订合同的过程中给出了一些空头承诺(例如对进度、质量、费用的估计过于乐观),在实际执行时却难以兑现这些承诺。处理不好将引发合同纠纷,轻则双方提前终止合同,重则双方反目成仇。2.1.3建议创建一种群体决策的立项管理规范,不仅让群众贡献智慧,而且让群众分担责任,使成功的经验被企业不断复用,并升华成为企业的制度。Page5火龙果整理uml.org.cn2.2常见问题分析:结项管理2.2.1共性问题某些项目由于进度拖延,不能按计划结项;某些项目即使开发完成了,由于利益关系也不愿结项。这些“不良”项目或者已经完成的项目一直占用企业资源(如人力资源和设备),无疑违背企业利益最大化的目标。在结项时,人们往往对财务和设备进行了详细的清算,却忽视了对知识财富、经验教训的总结。殊不知设备越用越差,但是知识财富越用越好,可谓主次颠倒。没有对项目的价值进行评估,开发人员干完活后,不知道自己的工作成果产生多大的效益,缺乏成就感。结项后,不能对员工的业绩进行公正考核,自然不能很好地激励员工。合同软件项目在结项之前,还面临“客户验收”的一些问题。例如缺乏双方认同的“验收标准”,导致验收过程混乱,过多地消耗双方的精力。2.2.2建议首要措施是建立企业的“结项管理规范”和“验收与发布”规范。自主研发的软件产品在结项之前,公司内部要进行类似的“验收”,防止不良项目蒙混过关。Page6火龙果整理uml.org.cn2.3常见问题分析:项目规划2.3.1共性问题在项目刚开始阶段,人们对产品需求和技术的了解还比较肤浅,项目不确定因素比较多,此时很难对工作量和进度作出比较准确的估算。软件工程教科书和CMM推荐的COCOMO模型、代码行估算方法等等,对大多数国内项目无法适用,效果如同“电脑算命”。由此制定的项目计划可能不切实际,后面经常发生项目计划的变更(所以业界流传“计划快不如变化快”),将导致项目管理的复杂性和风险提高。项目的人员已经被上级领导限定死了,再多的活也是那几个人干;项目的结束日期早就被领导和客户指定了,不管合理不合理,反正时间一到就要交付软件;除了办公计算机和工资外,这个项目没有其它经费,项目经理只有干活的权利没有用钱的权利。如果人员、资金、时间都已经被毫无道理地指定了,那么项目规划就失去意义,这样的项目在国内非常普遍。2.3.2建议建立企业的“项目规划规范”,给出合适的项目估算方法和项目计划模板。使用方便的软件工具,帮助项目经理进行项目规划。Page7火龙果整理uml.org.cn2.4常见问题分析:项目监控2.4.1共性问题许多项目经理肩负重要的软件开发工作,他们往往把注意力集中在开发上面,很少认真考虑如何进行项目监控。没有突出项目监控的重点,项目经理要么什么都不监控(导致项目失控),要么监控得太多而陷入琐碎事务中。项目经理写周期性项目进展报告时,记流水帐,或者复制上次的报告,应付了事。懒得动脑筋分析项目遇到的一些问题,例如某些任务的进度延误了,不分析为什么延误了,就顺延。导致问题越积越多。项目实际执行情况与原定的项目计划严重脱节,领导、客户、市场人员、开发团队不了解项目真正的状况,使项目计划行同虚设。2.4.2建议建立企业的“项目监控规范”,使用方便的软件工具,帮助项目经理进行项目监控。上级领导和相关人员每周都要检查项目的监控要素,及时发现问题,及时解决问题,既要关心结果也要关心过程。Page8火龙果整理uml.org.cn2.5常见问题分析:配置管理和变更管理2.5.1共性问题有些软件机构竟然不使用软件配置管理工具,用最原始的方式手工管理代码和文档,经常出现“成果丢失、版本混乱”等问题。不少机构按照的CMM的要求制定了配置管理规范。该规范在理论上比较完善,面面俱到,但是实际操作比较麻烦,没有突出重点。久而久之,人们厌烦后就逐渐放弃了规范,按自己的习惯操作,留下了隐患。例如不少程序被checkout后长久没有checkin;有些程序保留在开发者本机,根本就没有放入配置库。维护期间修改了程序,但是没有放入配置库。没有变更控制流程,经常随意变更需求、设计、代码等,严重影响项目的正常开发进程。2.5.2建议建立简单有效的“配置管理规范”和“变更管理规范”。并使用方便的工具,帮助团队进行软件配置管理和变更管理。Page9火龙果整理uml.org.cn2.6常见问题分析:质量管理2.6.1共性问题虽然人们大都认可软件的质量很重要,但是许多软件人员并不懂得如何有效地改善软件质量属性如正确性、健壮性、可靠性、性能、易用性、安全性、可扩展性、可复用性、兼容性、可移植性等等。不会分析当前软件的质量要素是什么,没有把精力集中在改善对经济效益贡献最大的质量要素上面。有些软件机构没有软件质量管理的措施,开发人员把完成功能当成终极目标。用户在使用软件的过程中发现许多Bug,导致开发方的纠错性维护代价很高。有些软件机构虽然很重视软件质量,按照ISO,CMM的要求建立了管理规范,但是效果不明显。人们搞不清楚软件测试、技术评审、质量保证的作用和关系。不懂得内建质量,主要靠修补错误的方式提升质量,代价比较高。很多人误以为提高软件质量是质量保证人员和测试人员的责任,没有意识到任何开发人员、管理人员都会对质量产生影响,都要对质量负责。另外,质量保证人员的权力比较小,很难推动质量改进措施。2.6.2建议让人们理解“什么是软件质量”及常见的软件质量属性,树立全面软件质量管理的理念(模型),制定软件测试、技术评审、质量保证的规范。并使用方便的工具,帮助团队进行软件质量管理。Page10火龙果整理uml.org.cn2.7常见问题分析:需求开发与管理2.7.1共性问题对于大部分软件机构而言,需求开发与需求管理是问题最多、最难解决的过程域。软件机构中,通晓需求调查、需求分析、需求定义、需求评审、需求跟踪、需求变更控制的人员本来就比较少,也不容易招聘和培养这样的人才。用户说不清楚需求、用户经常变更需求是普遍现象,令开发方非常头痛。开发人员不善于写文档,很难写出清楚、完整的软件需求规格说明书。后续开发人员可能误解需求,做出与需求不一致的设计、代码、测试用例等等,最后不得不大量返工重做。最难办的事情是莫过于“拒绝客户提出的需求变更请求”。客户会想当然地以为变更需求是他的权利,因为他付钱给开发方。通常情况下开发方是不敢得罪客户的,但是无原则地退让将使开发小组陷入困境。2.7.2建议建立“需求开发与管理规范”,给出合适的文档模板,采用方便的需求分析和管理工具。还要多请有经验的人来培训、传授实战经验。制定应对需求变更的办法,例如:(1)双方签订需求变更管理协议;(2)将重大需求变更延缓到下个软件版本中实现;(3)让客户欠下人情。Page11火龙果整理uml.org.cn2.8常见问题分析:软件设计2.8.1共性问题对于大部分软件机构而言,用户界面设计是弱项。国内绝大多数大学的计算机学科没有开设人机工程学、美学、心理学这些必修课。由于学生们接受的教育几乎全是科学与技术,他们根本不知道怎样才能设计出易用、美观的用户界面,很多人甚至想都没有想过。当他们毕业后真正参与软件产品开发时,只好凭着个人的经验与感觉设计软件的用户界面,这样产生的界面往往得不到大众用户的认可。大部分软件机构都有一些技术出色的软件人员,他们在系统构架、数据库方面的设计能力相当不错。但是很多人不愿意、不善于写系统设计报告,这不利于后续的软件开发和维护。软件设计应当“细到什么程度”很难把握。太粗了的话,对后续开发工作的指导价值不高;反之倘若太细的话,耗费时间就比较多,如果后面不断改进设计的话,前面的设计浪费太多。2.8.2建议建立“软件设计规范”,给出合适的文档模板,采用方便的设计工具。还要多请有经验的人来培训、传授实战经验。Page12火龙果整理uml.org.cn2.9常见问题分析:编程与调试2.9.1共性问题软件机构的大部分程序员的技能是合格的,但是他们编写的程序风格差异较大,代码质量有高有低。大多数软件机构没有编程规范,即使有的话,开发人员也没有很好地按规范编程。相当多的程序员没有养成对所有代码进行“单步跟踪调试”的习惯。嫌单元测试很麻烦,懒得执行,却没有替代方案。2.9.2建议制定简单明了、重点突出的“编程规范”,让团队遵照此规范编写程序。采用集成化的开发调试工具,提高编程质量和效率。Page13火龙果整理uml.org.cn2.10常见问题分析:软件测试2.10.1共性问题许多软件人员没有系统地学习过软件测试,搞不清楚各种测试的概念,例如单元测试、集成测试、验收测试、黑盒测试、白盒测试、功能测试、性能测试等等,混为一谈,不知如何下手。测试人员没有掌握有效测试的方法,大多凭感觉测试,结果重复测试已经测试过的,那些深藏的bug却发现不了。客户在使用软件的过程中发现的bug比公司内部测试时发现的还多,不仅改错代价高,而且降低了客户对产品的满意度。团队没有采用有效的缺陷跟踪工具。测试人员发现bug时,口头告知有关人员或者记在Word、Excel文件中,修改bug信息或者测试报告时非常麻烦。难以及时从bug列表中找出规