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