浅谈E公司研发团队软件开发模式转型
2017-08-12柏松伟
柏松伟
摘要:文章首先介绍敏捷开发模式发展趋势和特点,在现在企业中软件开发模式转型的必要性,着重介绍作者在一家外资企业担任敏捷教练(Agile Coach),通过对该企业软件开发模式现状进行分析,帮助该企业成功导入敏捷开发模式、理念和敏捷文化,建立起正确的工作习惯和工作方法,希望通过对该企业软件开发模式转型中的发展过程进行分析,为软件企业软件开发模式转型提供一些参考和可借鉴的方法。
关键词:软件开发模式;敏捷开发;转型
一、引言
随着软件技术的发展和经济的全球化,软件从原先逻辑结构简单、实现内容和技术较单一,逐步发展演变为市场需求复杂多变、融合多种技术快速、高质量的实现。在这种状况下,软件开发领域中传统的瀑布开发模式越来越不能很好的应对,如何在激烈的市场竞争中快速响应客户不断的需求变化,交付给用户满意并且高质量的软件产品,已经成为影响软件开发成功的关键因素,在这个背景下,软件行业借鉴了制造业“敏捷制造”的思想,一种轻量级的方法学“敏捷”因此也应运而生,逐步形成了敏捷软件开发这一新型软件开发模式。敏捷开发模式得到了日益增多的关注度,与过去也就是传统的瀑布开发模式相比,该模式强调以人为本,专注于交付对客户有价值的软件,在高度协作的开发环境中,使用迭代增量式的开发方法,经常使用反馈进行思考、反省和总结,不停的进行自我调整和改进。
二、敏捷开发模式分析与实践
1.敏捷开发模式特点
20世纪90年代,敏捷开发(Agile development)在软件行业内获得了高度关注。敏捷开发是一种以人为核心、迭代式增量开发的方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。与其他开发模式相比,敏捷开发模式具有以下两个特点:
(1)敏捷开发方法是“适应性”而非“预设性”
在软件开发的项目中,软件的设计难处在于软件需求的不稳定,从而导致软件过程的不可预测。但是传统的控制项目模式都是试图对一个软件开发项目在很长的时间跨度内做出详细的计划,然后依计划进行开发。所以,这类方法在不可预测的环境下,很难适应变化,甚至是拒绝变化。与之相反的敏捷方法则是欢迎变化,目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。
(2)敏捷开发方法是“面向人”而非“面向过程”
Martin Fowler认为:“在敏捷开发过程中,人是第一位的,过程是第二位的。所以就个人来说,应该可以从各种不同的过程中找到真正适合自己的过程。”在传统的软件开发工作中,项目团队分配工作的重点是明确角色的定义,以个人的能力去适应角色,而角色的定义就是为了保证过程的实施,即个人以资源的方式被分配给角色,同时,资源是可以替代的,而角色不可以替代。然而,传统软件开发的这些方法在敏捷开发方式中被颠覆。敏捷开发试图使软件开发工作能够利用人的特点,充分发挥人的创造能力。
敏捷开发的目的是建立起一个项目团队全员参与到软件开发中,包括设定软件开发流程的管理人员,只有这样软件开发流程才有可接受性。同时敏捷开发要求研发人员独立自主在技术上进行决策,因为他们是最了解什么技术是需要和不需要的。再者,敏捷开发特别重视项目团队中的信息交流,有调查显示:“项目失败的原因最终都可追溯到信息没有及时准确地传递到应该接受它的人。”
2.敏捷开发的价值观
(1)个体和交互胜过过程和工具
宣言认为,虽然流程和工具重要(尤其是大型组织),但是它们无法替换有能力的个体和高效的互动,个体的技能和他们之间的互动才是最关键的。
(2)可以工作的软件胜过面面俱到的文档
宣言认为,传统的软件开发是采用“大量的预先设计“将需求文档看作是关键文档。客户最终所需要的是可以运行的软件,在软件开发迭代完成时候,已集成、已测试、潜在准备发布的产品才是关键度量,它能够有效地跟踪项目进度和对发布做出决策。
(3)客户合作胜过合同谈判
宣言认为,不论是客户还是供应商,客户协作胜过合同谈判是一种全新的业务模式,能够让客户在设计过程中参与到软件开发中并密切合作,超越谈判并尝试提升与客户的合作,建立以合作为基础的关系,而不是靠公司內的正式接口。相对而言,敏捷把对客户努力及合作程度的审视当成更重要的事项。
(4)响应变化胜过遵循计划
宣言认为,外部环境的变化会引起软件需求的变更,敏捷欢迎需求变化,哪怕是开发后期,只有快速响应外部环境的变化,才能降低响应这些变更的成本。
3.敏捷开发的12个原则
(1)最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
(2)拥抱需求变更,即使到了开发的后期,也欢迎改变需求。
(3)频繁地交付可以工作的软件,交付时间从几周到几个月,交付的时间间隔越短越好
(4)在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
(5)围绕被激励起来的个人来构建项目。
(6)在团队内部,最具有效果并且富有效率的传递信息的方法是面对面的交谈。
(7)可以工作的软件是首要的进度度量标准。
(8)敏捷过程提倡可持续的开发速度。
(9)不断地关注优秀的技能和好的设计会增强敏捷性。
(10)尽量用艺术化来简单阐述未完成工作室很有必要的。
(11)最好的构架、需求和设计出自于自组织的团队。
(12)每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
4.国内外企业敏捷开发转型的相关实践
国内外很多企业尝试敏捷开发的转型,涵盖了众多类型和众多领域的软件项目,如互联网、银行、教育、医疗、通讯等行业。国内外众多知名企业,如微软、雅虎、爱立信、通用电气、诺西、百度、阿里巴巴、腾讯、华为、中兴通讯、创新工场等都存在敏捷实践落地的痕迹或者说本身是其成功转型的典型案例。
2006年的互联网高潮后,IBM的软件部门受到全球IT经济低迷的冲击,股票开始下滑,面对开始失去信心的股东、董事会,为了生存,IBM不得不将战略导向从稳定业务转向了动态业务,提出“随需应变”的核心战略,软件部由此提出了敏捷研发方法,最大化地提高生产力,将产品更快、更好地推向市场。2008年,软件部总裁在其个人业绩承诺计划PBC(Personal Business Commitment)中包括了关于敏捷实践的两个重要条目:一是加快敏捷实践的普及,并运用精益Lean的原则,提高开发者的工作效率和对客户需求的响应速度;二是将IBM的“可扩展敏捷”业务模式展现给客户。IBM软件部因为推行敏捷开发模式,节省了超过30亿美元的软件研发成本。截至2012年,80%的IBM软件开发团队使用敏捷开发,员工人数超过62000人(2011年下半年为57000人),跨越346个产品领域均使用了RTC(Rational Team Concert),帮助所有人实现了项目实时可视性,保证了项目的健康并行。
通过对雅虎公司内部使用敏捷开发模式的员工调查显示,68%受访者认为使用敏捷后生产率方面得到显著提高;52%受访者认为团队品质得到提升;63%受访者认为适应性得到加强;85%的开发团队表示愿意继续使用敏捷开发模式。而国内企业百度早在2009年就开始在多个方面和维度吸纳敏捷的特征,淘宝的搜索广告引擎团队使用敏捷開发模式进行转型。
三、E公司研发团队软件开发模式转型现状分析
1.E公司研发简介
E公司是一家外资企业,拥有员工2万多名,充分利用互联网、云计算、大数据等新型技术,为数据中心关键基础设施、交换式电源、工业自动化、基础设施管理、电源开关与控制、网络通讯相关产品。该企业研发中心设立在中国(北京、上海、深圳、成都、青岛、南京和西安)、美国以及欧洲等地区。
软件SA开发团队根据公司内部的业务需求为内部客户开发互联网产品并提供支持服务,市场部门根据行业研究和特定客户访问等方式发现业务机会,然后通过分析将业务目标和需求传达给系统开发团队,再由软件开发团队完成产品需求定义、开发和测试等工作。由于业务的不确定性,需求及其优先级时常变化,所以快速交付和及时响应成为系统开发团队研发管理的重要目标。
2.E公司产品研发过程中存在的问题
软件SA开发团队虽然已经建立了一套研发流程并有严格要求执行,但是管理层注意到软件SA开发团队运作仍然存在很多问题:
●现有研发流程设计得比较繁琐,执行时没能产生相应的价值
●对于频繁产生及变化的需求响应不足,软件版本交付周期长,项目中修改计划成本较大
●系统研发团队整体上属于单兵作战,缺乏规范的项目管理过程和正确的方法作为指导
●项目采用个人经验对功能进行估算的方式,导致对现有的功能模块估算不够准确,项目缺乏历史迭代速率和标准故事点基准
●系统研发团队工作环境缺少持续集成工具支撑
软件SA开发团队希望借助敏捷开发及管理的思想和方法,优化现有流程,并且建立针对快速交付要求的流程。
四、软件开发模式转型的实施过程
在软件开发模式转型过程中实施过程包括项目策划、项目准备、一期试点、阶段总结、二期试点、敏捷推广六个步骤来对工作流程、管理架构、理念和能力进行变革。
1.项目策划
●深入现场与客户高层管理人员进行沟通,了解组织软件开发模式转型的实施目标和对转型实施的期望,同时确定试点项目和敏捷团队成员
●通过访谈相关人员了解公司整体情况、业务发展方向、项目实施状况、研发团队人员组成、成员的想法和困扰,一般访谈人员包括EPG、QA、项目经理、配置管理,需求分析人员以及测试人员等
●通过对研发流程现状进行差距分析,找出管理架构上的问题及其根本原因
●召开项目启动会议
2.项目准备
●组建敏捷改进小组ETC(Enterprise Transition Community),ETC的成员通常不超过12人,包括工程与开发的资深人员、产品管理、市场、销售、运营、人事等等各个小组的领导
●与敏捷改进小组ETC共同定义敏捷改进具体目标
●制定ETC改进计划
●制定敏捷培训计划
3.一期试点
●与ETC共同确定1个敏捷试点项目,试点项目的选取需要综合考虑项目规模、项目持续时间、项目的重要性和发起人的投入程度等因素,试点项目团队人员控制在5-9人
●按照敏捷培训计划对敏捷试点项目团队成员完成敏捷培训,传递敏捷开发原则、敏捷思想和方法,通过持续不断地尽早交付有价值的软件使客户满意
●执行ETC改进计划
4.阶段总结
●通过目标评估,确定一期试点项目的工作成果是否满足预期要求,如果有偏差,调整ETC改进计划
●根据一期试点效果制定二期目标和方案
5.二期试点
●与ETC共同确定第2个敏捷试点团队,敏捷试点团队人员在5-9人
●敏捷转型过程中,敏捷教练帮助SA团队建立正确的工作习惯和工作方法,培养公司内部敏捷教练,推广一期试点成果
●敏捷教练结合全程参与过程中了解的情况以及敏捷应用中出现的问题,帮助组织优化现有流程文件和模板,作为后续敏捷项目的工作基础。
6.敏捷推广
与敏捷改进小组ETC共同讨论如何保障辅导成果,建立推广计划,指导公司落实成果。在完成2个试点项目敏捷模式导入后,针对开发团隊之间实践高效的Scrum of Scrums,采用Scrum ofScrums可以将将开发团队与团队栖身的产品关联在一起,从多个层面建立起Scram团队和P0之间的关联,将有助于在大型组织中采用敏捷,敏捷推广过程中我们从两个层面建立起这样的关联:
●项目层面:每个团队都拥有一位产品负责人,他们结合各自团队的能力,使用产品待办事项列表(Product Backlog)来推动其工作
●产品层面:每个项目的P0需要进行相互合作,在推广过程中我们设置一个“P0 Leader”的角色,由三个试点项目其中一位P0担任,由他负责管理横跨各个项目的产品待办事项列表
Scram of Scrams帮助开发团队的成员们按照自组织的方式协调与合作,提升开发团队之间的自组织技能,更快速地消除团队之间阻碍,产出更高质量的产品,并在更短的时间内交付更高的价值。
五、E公司研发团队敏捷转型的效果分析
转型是公司长久发展的生命线,是提高公司综合竞争力的关键。敏捷开发模式改变了原有的运营模式、资源配置方式及其相应的组织方式,通过敏捷开发模式企业重塑竞争优势。该组织在接受敏捷开发模式之前已经在小范围内尝试了敏捷的部分实践,但是工作中遇到一些具体的困难,通过导入敏捷开发模式,帮助该企业解决的问题包括:
●在组织内部对敏捷开发方法中的概念建立了一致的理解,培养团队敏捷开发习惯和方法
●将敏捷开发中的组织关注的实践映射于现有的流程中,并根据实践要求优化了现有流程
●建立组织级完整的敏捷开发流程文件、模板和范例
●建立并帮助组织理解敏捷项目启动、迭代过程中各项活动在项目中的具体操作,并与现有的管理系统相结合,明确了敏捷项目的工作量管理、进度汇报、需求管理等活动在管理系统中的要求
除此之外,帮助组织建立了以CmiseControl、Ant和SVN为Android持续集成环境,建立了以Jenkins、Xcode和SVN为ios为解决方案的持续集成环境,建立了以Junit为框架的单元测试开发规范,实现了从编译、测试、代码检查到部署全过程的自动化覆盖,大大降低了重复性的人工工作,提升了代码规范及质量,并确保了发布版本的正确性。
敏捷注重组织和团队,敏捷更强调发挥个人的主观能动性,对于项目管理管理复杂、需求变更影响大、需要快速响应客户业务要,敏捷提供了很好的解决方法,通过敏捷开发模式实施提高了团队的整体水平。
六、总结
总体而言,该组织通过本次敏捷教练咨询,为该企业从传统开发模式向敏捷开发转型,快速、正确的掌握和应用敏捷开发思想提供了一种有效的途径,让企业体会到如何正确的实施敏捷开发方法并有效避免常见错误,为企业大大缩短了导入时间和降低了导入的成本,为企业建立了符合其业务特点的、基于敏捷的研发流程、模板和范例,能够快速响应业务需求、及时调整项目计划、准确展示项目进展情况,在质量管理投入和产出上找到了管理层期望的平衡点。本文中实践的内容是大型软件研发团队如何通过战略思考和软件产品研发的准时交付的能力,为软件研发企业的发展提出了一些可供借鉴的思路和具体方法。