Reifer咨询有限责任公司发表了一份名为“敏捷方法定量分析1”的基准报告,这份报告比较了敏捷方法软件生产率、成本、持续时间和质量与传统的计划驱动项目的差异。这份报告分析了800个项目(其中有250个敏捷项目)的工作数据,跨越10年,使用了由60个组织提供的完整工作数据。
读者可以在我们的敏捷研究中找到以下十个“知识点”,我们所参考的基准报告中记录了相关研究成果。这份报告目前售价795美元,可在此订购,点击这里可以详细了解国际软件基准组织。
1. 敏捷生产率——敏捷生产率(以产出/单元投入成本进行度量)高于已交付产品的由计划驱动的项目的经验基准。该经验基准取自10年中在名义值上下浮动50%的数据,采用敏捷后一年内生产率平均最多能提升10%到20%。但是,这些提升取决于应用的领域,并且受许多因素的影响(如劳动力构成结构、产品复杂度、项目规模等等)。例如,有一些项目需要通过认证的形式(比如飞行安全和安全认证等),这些项目看起来就不太适用于敏捷方法。Capers Jones的数据2证实了我们提出的观点,此类项目使用像RUP3(统一软件开发过程)和TSP4(团队软件过程)之类的结构化过程可以更快地通过认证。
驱动因子:改善团队工作,使用轻量级过程,重点关注产品、可执行的代码和潜在的霍索恩效应。
问题:开发、维护或组织问题,过程僵化和教条,过于严格的管理,外包问题,缺少产品管理的核心。
应对措施:我们提出以下几个提升敏捷生产率的建议:
2. 敏捷成本——敏捷成本(以开销/单元产出进行度量)低于以计划驱动项目的经验基准。该经验基准范围取自10年间在名义值上下浮动100%的数据。采用敏捷后一年内平均最多能降低20%到40%的成本。同样,这种成本变化在很大程度上也取决于所在的应用领域,并且受许多因素(包括劳动力构成结构和工资水平)的影响。
驱动因子:降低人工费用率、降低管理费用、简化沟通机制、更加关注产品而不是过程。
问题:更重视开发而非规避维护成本、机构重组和角色澄清、僵化的过程、治理过于严格、外包问题以及不重视产品的管理。
应对措施:我们提出以下几个降低敏捷成本的建议:
3. 敏捷上市时间——敏捷上市时间(度量软件从开始到最终交付的总体有效时间)比计划驱动项目的经验基准要短10%到60%,在采用敏捷之后平均最多能缩短20%到50%(不同项目规模会有所差异)。但需要注意的是,一味地想要加速交付周期常常会遗漏一些需求,使交付的功能和特性无法完全满足客户或用户需求,从而降低了客户满意度。
驱动因子:关注正在开发的工件,在sprints期内快速开发,在最终投入市场之前增量交付演示版本。
问题:sprints期内未能完成所有工作承诺,待办任务未能清空,客户或用户可能没有成为团队成员,管理者可能没参加到敏捷工作中来。
应对措施:我们提出以下几个缩短敏捷上市时间的建议:
4. 敏捷质量——敏捷质量(以发布后的缺陷密度进行度量)比计划驱动项目的经验基准要高2%到8%,交付后的质量甚至能高出20%到30%。同样,质量取决于应用的领域并受许多因素的影响,其中包括质量控制和质保实践。
驱动因子:过程监督执行不利,过多地强调测试而没有做整体项目的质量保证,没有产品质量目标,在设计产品时未考虑质量,缺少指导决策的质量文化。
问题:在敏捷初期没有强调质量就急着直接编码、把测试视为质量保证、不执行质量控制、不收集质量指标、不应用成熟的质量控制和质保实践。
应对措施:我们提出以下几个提升敏捷质量的建议:
5. 敏捷的竞争优势——敏捷最具竞争性的优势在于它能让组织发挥优势、改进不足。使用敏捷不仅可以提高生产力、降低成本、加速上市时间,它还能帮我们吸引和留住人才,这些人才是智力成本,能让我们在竞争激烈的市场中脱颖而出。但是,有些应用领域不要使用敏捷方法,敏捷在这些领域起不到应有的作用也没有什么意义,比如需要认证资质的应用以及大型的分布式的复杂的开发等。
驱动因子:敏捷已经被过度夸大和使用,任何新鲜事物都会被质疑,许多公司并不把软件作为竞争格局的一部分(例如,软件只是辅助性服务而不是创收的生产活动)。
问题:既要了解敏捷的优点,也要了解敏捷的缺点,采用敏捷需要做出一定的组织变更(比如一些新的角色和职责),对于组织来说转用敏捷像采用别的新做法一样充满风险。
应对措施:我们提出以下几个更能发挥敏捷优势的建议:
6. 具有一定规模的敏捷——一直以来,在大型项目中都难以应用敏捷方法。基于我们的数据分析(60个不同组织的800个项目,其中有很多已经使用了10多年的敏捷),敏捷不适用于大型复杂项目。虽然有一些大型项目也使用敏捷取得过一些显著的成就,但由于缺乏针对大型项目的体系和指南,软件工程实践者需要面对很多不利条件。从我们收集的数据来看,当项目员工总数超过100人,而且他们处于不同的地理位置、分属多个民族时,应用敏捷方法的工作效果是达不到平均值的。另外,从我们和Capers Jones的数据来看,当用户和客户总数超过100时敏捷就会出现问题,因为大家对系统愿景有着各自不同的理解。或许,造成这种局面的根本原因就是大多数大型项目并不直接面对用户,这与敏捷是有所背离的。反之,这些项目在真正投入使用之前要先交付给一些集成和测试组,经历各种严格的系统测试(性能、可用性等)。
驱动因子:敏捷实践在大多数情况下只适用于小型团队和项目。虽然也有人提出过一些针对一定规模项目的敏捷方法,但由于它们并未重视和应用传统的项目管理技术,我们并不太认可这些方法。此外,正如前文所说,敏捷项目应快速交付给客户或用户,但大型系统要先经过系统集成和测试后才能交付使用。
问题:无法协调、监控、跟踪和调整分散在不同地域、不同团队的开发人员,无法跟踪产品业绩和里程碑完成情况,流程不当,无法满足客户期望。
应对措施:针对大型项目的敏捷应用我们提出以下几个建议:
7. 敏捷系统工程——你需要更新系统工程实践以提升敏捷化程度。否则,因为不适用的过程会使组织产生很多冲突。举个例子,因为系统工程师开发系统需求,并把它们从硬件到软件进行逐层定位,所以应随着软件开发过程同步开发系统需求。未来的发展趋势是系统扮演客户,但如果不暴露出各种操作角色,就无法达成这样的目标。再举一个例子,由于架构是软件运行的平台,所以在过程初期应该拥有稳定的系统架构。
系统工程经常无法做到这一点,即便他们采纳了软件工程师针对面向特性和即插即用功能的建议。最后再举一个例子,通常情况下测试工程师也隶属于软件工程师,为了确保增量开发出的系统能够满足需求,需要他们支持持续集成和测试的理念。不幸的是,系统工程师不接受这种按待办任务交付的方式,因为他通常都认为每次增量之间要交付的内容是不能延迟的。为了集成和测试系统中的软件部分,测试工程师还需要与软件团队一起定置相应的机制和工具。有时系统在交付使用之前需要让实际用户(或系统操作人员)用真实的设备先予以验证。
驱动因子:过于严谨和理论化的系统工程,孤立的系统、软件文化和过程,缺乏真正的跨领域的和整体团队的概念。
问题:太晚提供软件需求,未定义系统接口,直到编程末期才开始关注系统测试而在初期根本就没有关注,系统测试和集成的机制建立得太晚,系统和软件过程不匹配,缺乏跨领域团队协作,缺乏其他领域体制的尊重,发生系统工程故障时互相推诿。
应对措施:我们提出以下能够改善敏捷系统工程的几个建议:
8. 敏捷软件维护——敏捷是否适用于软件维护?评审委员会还没有给出最后的定论。本阶段的开发使用敏捷方法有哪些利弊?我们可以从Reifer咨询公司近期针对软件维护的研究成果中找到一些答案。本次研究发现,由开发期的预算和进度计划是由需求驱动的,会有较大差异,而用于软件维护任务的资源较为固定。所以,软件维护团队的一项很重要的任务就是充分考虑工作(修复、变更、更新、优化等)的优先级,使他们能在固定的预算下尽可能完成更多的工作。其实,完成那些积累下来的变更申请和待处理的故障报告只是他们最基本的工作任务。
本次研究还发现,同一个团队要并行完成以下四种版本的开发任务:
为了在软件维护期能够更好地执行敏捷方法,必须让敏捷方法能够处理以上四种版本的相关工作。我们的研究表明,与软件开发期相比这些工作环节的组成和分布均有所不同。例如,这类工作在很多时候要用回归测试的方式验证最新的版本变更。另外,这类工作可能需要现场支持和运行测试的参与。
驱动因子:不清楚维护期的工作性质,当计划内的任务和紧急任务产生冲突时,不清楚怎么为维护活动或设施做预算才能更合理地完成功能增强、问题修复、性能优化等任务。
问题:分不清做的是软件开发项目还是维护项目,不适用于维护的过程或预算,预算不足导致工作积压,每次变更都要重新验证版本,产品分布式管理的问题和缺乏产品管理规范。
应对措施:我们针对软件维护期的敏捷提出以下几个建议:
9. 敏捷风险管理——你们必须要拥抱敏捷风险管理实践,特别是面向更具规模更加复杂的敏捷项目时。虽然有一些现有的技术可以用来做敏捷风险管理(比如风险燃尽表),但在我们的数据中却很少有组织使用过这些技术。按我们通常的理解这些技术可能更适用于国防和通讯领域。
驱动因子:把风险管理看成重量级过程,团队领导并不把它当成项目管理(比方说没有风险管理任务),缺少项目管理规范和实践(特别是具有一定规模的敏捷项目)。
问题:移除在预算内按时交付高质量产品的不利因素,尽可能地满足客户的预期,提升识别风险和缓解风险的能力。
应对措施:我们提出以下几个加强敏捷风险管理的建议:
10.敏捷外包——我们需要精确的敏捷外包实践。目前,合同管理员和甲方并不清楚如何规定敏捷承包或分包的具体合同类型、工作范围、工作状态、交付物、里程碑、支付、条款和条件。我们可以通过这些条款准确地推导出敏捷合同中要使用的时间和资源,而不是为了鼓励组织高效地工作笼统地制定激励措施。
驱动因子:敏捷是一个相对较新的商业模式,几乎没有公司做过涉及到采购方的敏捷,在实际工作中也没有多少可供参考的合同样本。
问题:缺乏针对工作效率的激励和鼓励机制,没有合约性的控制与保障措施,甲方觉得敏捷无法控制所以不想采用。
应对措施:我们针对敏捷外包提出以下几个建议:
因为对于大多数调查过的组织来说敏捷方法是一种全新的商业模式,所以在前文讨论了大家比较感兴趣的“知识点”。很明显,还有许多问题(比如敏捷外包、一定规模的敏捷等)一直困扰着组织,仍然需要一段时间的过渡可能才能解决。鉴于现在已经掌握的素材,我们整理了以下五个主要研究成果,希望在读者采用敏捷方法时能够有所帮助。
你可能想要了解更多关于敏捷的信息,比如敏捷的优势和弱点,敏捷投资回报率,这十年的动态和我们关于敏捷软件生产率、成本和质量调查研究相关的细节,我们建议你从[email protected]或从这里订购“敏捷方法定量分析”报告。这份报告在下列十个应用领域中按行业报告了这些敏捷软件生产率、成本和质量的结果。
1 Reifer咨询有限责任公司2013年7月1日发表的《敏捷方法定量分析》No. 7, v1.3。
2 Capers Jones2013年6月25日在Namcook起草的《软件方法与结果的并行比较》。
3 Ahmad K.Shuja和Jochen Krebs在IBM出版社2008年发表的《IBM统一软件开发过程参考和认证指南》。
4 Watts S.Humphrey在Addison-Wesley在2005年发表的《TSP: 领导开发团队》。
5 Henrik Kniberg在2011年在Pragmatic Bookshelf发表的《源自战壕的精益:用看板管理大规模项目》。
6 Donald J.Reifer在CRC出版社2011年发表的《软件维护成功秘诀》。
7 点击此处查阅。
作者非常认可评论者对本文做出的有价值的评论。
许多评论者对本文收集的敏捷项目数据进行了检验,文中也记录了这些检验结果,这些检验证实了此白皮书提供的大量研究成果和结论。
Reifer咨询股份有限公司是Arizona的一家股份有限公司,它专门研究软件工程经济、度量与测量、基准管理和经验性分析等领域。自1980年创立以来,Reifer咨询向客户提供了全方位的软件服务,包括准备软件商业策略和案例、开发独立估算、插入度量和测量程序、开发估算模型、指导竞争力分析和执行独立风险评估。该公司具备十年以上的教练经验,指导客户规避大量不利条件,以充分利用敏捷方法。他们曾经帮助过十多个居于财富500强中的公司,帮他们有序地过渡到敏捷方法。联系方式:Reifer咨询股份有限公司,地址:14820 N. Dragons Breath Lane, Prescott, AZ 86305,电话:928-237-9060, 电子邮箱: [email protected].
本文发表了特定主题的官方信息。Reifer咨询公司不对特定内容、表述和暗示做任何担保和承诺,包括商销性担保和特定应法的适用性。另外,Reifer咨询公司不对本文内包含的任何信息的准确性、完整性和(或)有效性做任何担任。最后,Reifer咨询公司在文中提到了若干商品、过程或服务,但这并不代表Reifer咨询公司对它们的支持和认可。
所有商业名称、商标或注册商标均由它们的所有者所有。
查看英文原文:Ten ‘Take Aways’ from the Reifer “Quantitative Analysis of Agile Methods” Study