如何快速响应市场的变化,如何推出更有竞争力的产品,如何在竞争中脱颖而出,是国内研发企业普遍面临的核心问题,为了解决这些问题,越来越多的企业开始重视创新与研发管理,加强研发过程的规范化,集成产品开发(IPD)、集成能力成熟度模型(CMMI)、敏捷开发(Scrum)是当前企业产品研发管理的最热门的3个体系,但是很多朋友并不真正了解这3套管理体系的适用范围和内涵,本文描述了它们之间的区别以及如何在企业研发管理过程中合理加以应用才能达到最优化的结果,使企业在市场竞争中保持不败之地并能脱颖而出。
上篇请参考:如何理解IPD+CMMI+Scrum一体化研发管理解决方案之IPD篇
http://blog.sina.com.cn/s/blog_81427a800102wqm5.html
中篇请参考:如何理解IPD+CMMI+Scrum一体化研发管理解决方案之CMMI篇
http://blog.sina.com.cn/s/blog_81427a800102wqm6.html
下篇请参考:如何理解IPD+CMMI+Scrum一体化研发管理解决方案之Scrum篇
http://blog.sina.com.cn/s/blog_81427a800102wqk7.html
敏捷开发是历史必然
软件生命周期模式的发展体现了软件工程理论的发展,最早的时候,软件处于无序、混乱的状态,为了管理和控制软件的开发过程,就把软件开发严格区分为多个不同的阶段,并在阶段间进行严格检查,体现了人们对软件过程的希望:严格控制、确保质量,这也就是瀑布开发模型的起源。
软件的特性是无形、多变、难以描述清楚,基本是零成本无限拷贝,人们切实感受到软件的独特价值后,开始对软件赋予越来越多的能力,软件变得非常庞大,从原来的辅助作用,已经发展为主导力量,按照传统瀑布开发模型,要求项目之初就需要把需求准确定义出来,并且在项目运作中严格控制和减少需求变更,而针对如此庞大的软件系统、针对一个未知的系统,项目之初就要求把需求严格清晰地定义出来,无疑是一个非常有挑战的事情;美国国防部审查早起采用瀑布开发模型的软件项目,结果发现75%的以失败而告终,只有2%的软件产品无需大量修改就能正常使用,已经迫切需要提升软件开发模式了。
为第一艘美国三叉戟潜艇开发的第一指挥控制系统是最早记载使用迭代和增量开发的主要软件项目之一,项目大约有一百万行代码,进行的非常成功。
2001年,17名编程大师分别代表极限编程、Scrum、特征驱动开发、动态系统开发方式、自适应软件开发、水晶方法、实用编程等开发流派,发表“敏捷软件宣言”,敏捷软件开发是一种软件管理的新模式,用以替代以文件驱动开发的瀑布开发模式。
Scrum是敏捷开发(Agile)的典型代表
Scrum相关的介绍资料已经很多了,在此就不再赘述,同时下图的Scrum框架图估计大家也都非常熟知了:
核心内容3-4-3,3个角色(产品所有者、ScrumMaster、团队成员)、4个会议(迭代计划会议、迭代验收会议、迭代回顾会议、每日站会)、3个产出(产品Backlog、迭代backlog、进度曲线图)。
CMMI和Scrum之英雄惺惺相惜
CMMI和Scrum都是当今优秀软件开发模型,最终的目的都是要交付一个让客户满意的软件系统,只是两者强调的重点不同:CMMI比较强调策划、计划、规范、监控、量化,尤其强调流程规范在软件开发中的价值;Scrum强调协作、变化、快速调整、尤其强调工具自动化在软件开发中的价值;其实这些内容对软件开发的成败都非常重要,只是不同产品、不同阶段、不同场景为了达到当前的目的,需要对有些方面给予更多重视而已。
不同产品,基于实际实践经验总结,CMMI更适合规模庞大、性命攸关、一旦出问题会带来重大损失的软件项目管理,例如军工控制系统、航天控制系统、卫星导航系统、银行大型交易系统;而Scrum比较适合需要快速响应市场、非核心控制系统的软件项目管理,例如互联网个人应用、企业非核心交易系统、军工中非核心系统软件等。
不同阶段,针对一个软件系统往往会同时采用CMMI和敏捷两种管理模式,通常情况构建全新软件系统1.0时,这个时候涉及比较多底层框架的构建,而底层框架的质量直接影响软件后续的生命力,同时底层框架的变动会导致比较多的推倒重来,严重影响项目进度;底层平台涉及比较多的核心算法,而这些内容难度大,需要强调文档化记录,便于产品持续继承和维护,所以这个阶段多采用CMMI模式,强调前期策划要充分,设计要到位,最大程度减少反复;而一旦产品1.0构建完成,后续就进入快速迭代、快速响应客户需求阶段,这个阶段尤其是小特性的开发项目,一般都采用Scrum敏捷开发模式。
Scrum和IPD是绝配
IPD强调市场驱动的产品开发、把产品开发作为投资来运作,确保产品开发的方向正确,有效支撑公司研发战略的落地,管理层次比较高;Scrum强调通过团队高效互动,从而适应市场变化、快速交付、持续改进,最终达到交付让客户满意产品的目的;IPD和Scrum的有效结合,可以一方面确保产品开发大方向的正确性,同时又能有效提升交付速度,从而更适应快速上市时代(第三代研发管理)的竞争要求。
案例分享:华为技术IPD+Scrum(项目级敏捷过程体系)
如上图所示,整体产品的端到端开发是按照IPD整体框架来运作,大的阶段划分为概念、计划、开发、验证、发布5个阶段;其中概念、计划、验证、发布是把产品当成一个整体来运作(概念阶段详细定义产品包需求、计划阶段进行产品整体设计、子系统设计,同时初步策划产品级(版本级)迭代计划,规划需要通过多少次大的迭代来实现产品所有的设计需求),而开发阶段把软件系统(模块)作为相对独立的管理单元,按照Scrum迭代模式来运作,按照标准的Scrum模式来运作;等所有功能全部迭代完成后,对产品进行全面回归验证,验证没有问题,就准入进行后续的系统集成验证(SIT),整点完成性能、外部系统融合等相关测试。
Scrum自动化工具是关键
Scrum强调拥抱变化、及时调整、增量迭代、质量优先、持续完成直接可以交付使用的产品,软件代码间是相互交错在一起的,有过软件开发经验的人就知道,软件最容易因为增加新功能而导致原来测试好的功能又出问题,同时往往因为修改一个Bug引出多个Bug,要保证软件每次迭代的交付质量,测试是Scrum模式非常重要的一环,而测试需要反复重复多次,如果采用Scrum模式,测试还停留在原始手工测试水平上,这样的Scrum可以基本判定是假的敏捷,不是真正意义的Scrum,势必会导致伴随功能越来越多,测试压力越来越大,结果无法保证每次迭代的交付质量,测试Scrum敏捷模式非常强调自动化工具的使用,如何是某公司Scrum持续集成工具体系: