软件研发流程(CMM-敏捷-DevOps)

未来的企业都离不开软件,不做软件也得用软件,不用软件的企业就少之又少了;现在开个小店都得有收银系统。
我做软件多年,作为华为软件产品线第一个CMM大项目经理,参与了软件产品线cmm认证华为工作组成员;软件产品线第一个敏捷项目项目经理;企业云devops推行责任人,还真是见证了华为公司软件研发流程的变迁,也是随着软件行业研发流程变迁的升级打怪。
通过合适的研发流程管理软件研发组织的工作,以达到可控的的软件交付件,不同的流程适合研发不同种类的软件,不同的组织可以选择不同的研发流程。
我今天分享一下我对各种流程的个人见解,供软件企业参考。
1、CMM:
1)CMM是由美国卡内基梅隆大学软件工程研究所1987年研制成功的,是国际上最流行最实用的软件生产过程标准和软件企业成熟度等级认证标准。被很多组织接纳,成为软件企业产品准入的门槛。
2)强调研发的过程的管理,坚信好的过程会带来好的结果,详细的定义个软件开发过程的各个阶段,每个阶段的输入、输出标准、评审、交付件模板、收集的度量数据、严格的各阶段的总结和度量数据收集。
3)适合强质量控制、需求变化小、强进度要求的项目,尤其软硬件结合的研发项目。
4)按照功能划分组织,组织之间有严格的分工,有严格的交付件接收标准,需求-方案设计、开发、测试、服务分属不同的部门。
2、敏捷软件开发:
1)是一种从1990年代开始逐渐引起广泛关注的新型软件开发方法,是一种能应对快速变化需求的软件开发能力。它们的具体名称、理念、过程、术语都不尽相同,相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通(认为比书面的文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发过程中人的作用。
2)强调敏捷理念和实践,强调拥抱变化,强调最终交付件代码,强调沟通和反馈;“show me your code”;强调自动化工具,通过持续构建、持续集成?持续交付来提高效率和快速交付;拥抱变化,认为不变的是变化,要通过快速迭代出产品,让用户体验(show case)。
3)适合需求变化快的软件研发过程,适合互联网这种创新和试错性的软件研发,通过快速的迭代开发,来适配需求的变化和创新的不断试错,而不是强调需求问题、需求明确的开发流程,这是跟CMM的核心区别。
4)强调全功能的组织、打破部门边界、研发是一个组织需求-设计、开发、测试一体化团队。
3、devops:
1)敏捷的延续和扩展,敏捷的多功能团队里面没有包括运维人员,这就造成了一个鸿沟,研发人员目标研发尽量多的特性,尽快上线获得用户反馈;运维人员目标是系统运行稳定,避免网上问题;两者目标的冲突导致很多问题,DevOps就是来调和这样一种合作关系的。
2)DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。
3)它是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
4)它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运维工作必须紧密合作。打通研发和服务,服务能力前置到软件开发中,减少手工的维护,能自动化的都自动化,减少网工的需要;强调服务化和共享重用。“吃自己的狗粮”,“自己做的降落伞自己跳”。
5)建立研发流水线,为了落实流程,靠管理、靠模板、靠项目经理,可控度低,太依赖个人能力;因此出现了利用工具链,把研发流程工具化;同时研发过程工具打通串联,形成一致化的工具;重用工具、降低研发门槛,提高研发效率。
6)适合互联网服务,云服务这类在线服务的软件类研发企业;因为服务的实时在线,所以要爆炸产品的试错迭代能够高效进行,又能避免网上问题,减少问题对于用户的影响,尽量做到问题用户无感知和新特性友好知会到用户选择。