阿里巴巴专家教你如何在家安全高效开发软件
为响应国家号召,各“大厂”纷纷发出在家办公、延迟上班的通知,一时间“在线协同办公”成为热点。不同于大型集团公司,有足够财力和能力构建远程办公系统,中小企业既缺乏足够的预算又缺乏相应的经验。阿里云云效一直致力于成为数字企业的研发效能引擎,在这个特殊时期,我们希望可以将自己的经验和工具分享给中小企业,让他们在家也能安全高效地开发软件。
因此我们特别邀请了阿里巴巴高级技术专家张燎原,详解“在线协同开发”的要诀。
对于知识经济活动,高可见性,快速连接能力意味着灵活协作的可能,而在线化是这一切的基础,在线化让人们有机会在任何时候任何地方,快速集结、组织协作,让SOHO这样的远程办公方式成为可能。
下面我们将从“在线项目协同”“在线代码协同”“在线交付协同”三个方面,阐述如何实现在线协同研发,让身处不同地域,不同时区的你我他,能够快速连接起来,真正进入到数字化研发时代。
**在线项目协同
需求协作,从拉通和可视化端到端的价值流动开始**
可见,是协作的基础。通过电子看板,以需求为流动单元,端到端可视化价值流,以流动效率为核心组织需求交付。可视化端到端价值流必须做到:价值驱动,即每一个流动单元体现的都是体现用户价值的业务需求;前后拉通,即可视化的目标是“端到端”的价值流,始于用户问题的提出,终于用户问题的解决。
我们可以通过以下三个标准来检验可视化的效果,即:
•是否能反映端到端的交付过程
•是否能即时体现影响价值流动的瓶颈和问题
•是否能依据可视化的信息进行协作和做决定
同时,打通从项目协作到软件发布的全链路,代码提交和发布信息同样可以即时反映到需求卡片上,集中及时的工作状态同步,减少沟通基本靠吼的套路,使得项目管理的目标更关注在价值交付和问题解决上。
管理价值流动,构建价值反馈闭环,让交付更可控
软件交付的关键,是客户价值的流动,而组织壁垒、沟通延迟、协作阻塞是主要障碍。基于端到端可视化的价值流看板,产品需求排期,还是团队每日站会的任务指派,围绕需求看板,来组织日常的项目协作。自右往左检视需求的交付状态,从测试工程师、开发工程师到产品经理,跨职能协同。同时,需求的任何风险及问题,高亮显性地展示在看板上,以钉钉等即时通信工具,快速反馈到责任人,做到即时发现、即时响应,就问题快速链接集结。
形成从需求规划、需求排期、每日站会,再到需求复盘的完整价值反馈闭环。从整体交付节奏上,形成月规划、周排期、日站会的节奏。而这一切,完全可以通过在线化的电子看板进行。
限制在制品数量,加速业务需求交付
影响需求(价值)流动效率的关键是批量和并行,通过限制在制品数量(我们称之为束水攻沙),加速需求交付。同时,数字化协作,有利于研发过程中,效能数据的沉淀,建立效能改进的基线和愿景目标,以客户响应周期和质量提升为目标,驱动问题的发现和解决,建立持续改进的基础。
在线代码协同
代码协作是代码集体所有制(Collective Code Ownership)
团队成员共同为代码负责。基于Git分布式版本控制系统,实现了基本的代码托管理能力。在当前的代码协作概念中,分支即是协作的载体,世界各地的开发者们可以根据产品需求,建立不同分支,同时开发。恰当的分支模式,让分散的工作,快速集成在一起,并在版本上可追溯。每个代码库的readme信息详细说明代码设计,建立基本的代码质理管理标准(如单元测试和自动化的增量代码静态扫描),保证持续增量代码不会影响已有功能,让协作成为可能。
提升代码的可见性,助力代码协作
无论从简单的复杂度、重复度分析、依赖分析,再到领域语言识别,安全敏感信息识别等,像阿里巴巴代码规约等工具,提大提升了代码的可见性,程序员们已经完全可以从大量的代码中,抓住关键信息。
同时,借助云端IDE、云端分布式代码托管工具,有效地促进社交化编程,无论是结对编程,还是代码评审,让代码本身及编码过程显性化,可以:
•促进团队内部知识共享,提高团队整体水平,确保团队统一规范,不出现“天书”代码;
•同时,工具的早期介入潜在缺陷发现率可以提升30%;
•透明的代码,多人的讨论可以促进正向鼓励,主动思考和追求卓越。
代码安全
代码在线化协同,代码共享、复用文化的建立都依赖于代码平台复杂的权限控制体系,这是一把双刃剑,越开放意味着代码泄露的风险越大,但是越封闭意味着协同效率低下。为了让开发者可以更好地享受代码协作带来的红利,需要重点注意以下几个方面:
•代码中的敏感信息:比如数据库密码,被有意或无意泄露后会导致公司业务出现致命打击。
•访问权限控制:常见的有访问IP控制,离职权限回收,代码库可见范围设置等。
•异常行为风险识别:拥有事后审计,事前预警的能力,比如大量下载代码异常行为检测和预警。
代码协作是技术卓越的追求,是培养软件匠艺精神的机会,借助先进的代码协作工具及技术手段,促进代码及编码过程的可见性,同时,让每一位程序员能够有信心地提交每一行代码。
在线发布协同
现代化企业级软件交付过程常常是多人多角色协作,跨越多个系统交互,同时为了保障交付可靠,交付流程往往也是复杂和难以完全标准化。而阿里巴巴为什么能紧跟市场变化,快速写出高质量软件,这得益于多年沉淀出的一套完整DevOps方法论和产品,确保软件交付过程在线高效可靠。
从流程标准,工序改进,建立在线发布协作
在线发布协同,需要基于同一个交付流水线进行,首先,需要拉通软件集成发布的完整流程。打通从变更到交付的完整系统;将流程工具化,通过工具串起整个集成交付过程;同时,明确流程中各阶段的准入准出标准,下游活动基于上游产出质量。其次,按工序建立质量守护系统,并使每一道工序自动化。再次,建立反馈机制,有问题能够精准定位,即时响应,快速修复。建立相应的度量反馈机制,还能对流程和工序进行持续优化。
真正的在线发布协同,应该是满足:流程工具化、部署无人化、测试自动化、反馈数字化的要求。
特性分支驱动多人多角色在线协作
为了实现多人研发不打扰,代码功能可以自由可靠组合交付,阿里巴巴生产经验积累出一套AoneFlow代码分支管理方法,以特性变更为单元,使用CI/CD 流水线完整的覆盖了从构建、测试到部署整个持续交付过程,过程中的每一个步骤和任务的信息都可以通过消息、邮件、钉钉机器人等告知和追溯,使研发、测试、运维、配管等角色能在线协同,异步工作。
用云原生技术打破开发与运维的边界
以 Kubernetes、Serverless、Service Mesh、Cloud IDE 为代表的多项云原生技术在过去一年让人印象深刻。这套开箱即用的开源软件,让中小公司快速的获得了以往互联网大厂才有的精英软件交付能力,比如复杂的流量治理能力,灰度发布能力,A/B Test 能力,多环境管理能力,基础设施一键拉起,快速扩缩能力等等。但在企业采纳新技术的同时,也面临着诸多挑战,比如开源软件复杂的搭建过程,黑屏化的交互设计,缺乏研发管理方法,缺乏企业权限管理能力等。阿里巴巴也在积极将 CI/CD 工具、测试环境管理方法、应用运维理念、DevOps 协同方法论等与云原生技术融合贯通,为开发者提供开箱即用的新技术解决方案。
使用“云效”轻松实现一站式在线研发协同
工欲善其事必先利其器,云效可以提供从“需求 ->开发->测试->发布->运维->运营”端到端的在线协同服务和研发工具,让你轻松实现一站式研发协同。
我们可以这样使用云效来完成一天的工作:
•晨会上团队基于精益看板进行需求、任务对齐,完成任务指派
•开发同学根据特性开发,创建变更分支
•通过线下或云端开发环境进行编程工作,然后提交代码
•代码自动触发自动的代码扫描,并发送给指定的代码评审员进行评审
•完成评审的代码自动触发集成发布流水线,自动化的完成构建,生成Docker镜像,分别在开发环境、集成环境及预发环境进行部署,完成相应的验证工作;验证完之后处于待发布状态,触发上线审核流程,运维完成审核发布上线
•过程中任何问题通过钉钉,遵循no news is good news的原则,及时反馈到指定负责人,做到准确反馈、即时响应,快速恢复。尽量避免垃圾短信式反馈,过多的噪音,反而会降低协作的效率。
我们希望将云效多年积累的研发实战经验和先进的工具分享出来,让小企业,具备大智慧,快速开展在家研发软件工作。同时,为降低中小企业的采购成本,云效推出小微企业扶植计划,30人以下研发团队可以免费使用云效全部功能。