阿里云云效智能化代码平台的探索与实践

简介: 2020年6月13日,在2020阿里巴巴研发效能峰会“架构设计与代码智能专场”中阿里巴巴高级技术专家张玉明(玄坛)发表题为《阿里巴巴智能化代码平台的探索与实践》的主题演讲,详细介绍了阿里巴巴打造智能化代码管理平台的起因、技术难点和解决思路以及应用案例,并发布云效智能研发助手“云豆”。本文节选自玄坛的分享,为方便开发者阅读,删除“背景”介绍部分,将集中讲解云效代码管理平台中智能化技术的应用以及实现原理。

2020年6月13日,在2020阿里巴巴研发效能峰会“架构设计与代码智能专场”中阿里巴巴高级技术专家张玉明(玄坛)发表题为《阿里巴巴智能化代码平台的探索与实践》的主题演讲,详细介绍了阿里巴巴打造智能化代码管理平台的起因、技术难点和解决思路以及应用案例,并发布云效智能研发助手“云豆”。本文节选自玄坛的分享,为方便开发者阅读,删除“背景”介绍部分,将集中讲解云效代码管理平台中智能化技术的应用以及实现原理。
人工智能赋能开发者 解决软件研发问题
作为一名开发者,在日常工作中会遇到哪些问题?主要有以下四点:需求不明确或需求经常变动;缺陷难发现:在开发的代码中经常隐藏难以发现的BUG;编码效率低:编码效率不够高,没办法合理安排编码时间;线上问题难定位。

有没有解决以上问题的灵丹妙药呢?云效团队给出的解法是“工具+数据+智能”。其实我们每天在使用的云效代码管理平台、钉钉等都是非常好用的工具。在这些工具基础之上,结合大数据、智能化手段是否可以在代码编写提效、代码质量、安全提升方面做一些探索呢?
01.PNG
首先看一下我们在“大数据”方面是如何做的。在阿里巴巴集团内部的代码管理平台上每天都会产生大量代码数据,我们将其中公开的代码离线存储到代码仓库中去构建代码数仓。基于代码数仓可以构建代码图谱,比如我们会以代码、用户、代码库这些维度进行抽象,将其转化为实体,并通过对这些实体关系的标签化,从而构建代码画像、用户画像、代码库画像。进而为上层的智能化服务提供有力的数据支撑。同时我们以代码为中心,去拉通研发数据、协作数据、应用运行数据,去构建研发图谱,围绕整个研发生命周期去提供数据方面的支撑。

02.PNG

那么有了这些数据,我们可以做什么事情?基于评论数据,结合智能化手段,可以做到需求分析自动化,比如可以基于前台用户咨询的问题,结合智能化手段来帮助产品经理明确用户诉求,提炼产品文档。基于代码数据,可以实现代码分析自动化,如可以应用到代码缺陷检测和代码自动编写等领域中。基于用户的操作数据,可以做到软件测试自动化,如现在很火爆的UI测试、Mock测试等。基于日志数据,可以实现故障诊断自动化,如日志自动打点、日志智能分析以及服务智能降级等。

云效推智能研发助手“云豆” 代码评审更智能

接下来看一下我们是如何在云效代码管理平台(Codeup)中将代码智能化能力进行落地的。首先来看代码评审。

03.PNG

传统的代码评审分为三个阶段:新建评审、评审中、评审结束。在这三个阶段中,用户都会产生哪些行为呢?在新建评审阶段,首先需要选定某个分支,然后选择评审人,最后需要填写评审描述,通过这三步操作就新建了一个评审任务。在评审中,评审者首先要查看评审文件,然后提出问题,最后由开发者解决问题。如果评审通过,并完成合并代码,则评审结束。

在上述过程中存在哪些痛点呢?在选择评审人环节,开发者经常不知道应该选择谁作为这段代码的评审者;在评审环节,评审者写不清评审描述;变更文件过多,无法有效评审;在评审结束环节,经常需要人工去解决代码冲突这类问题。

其实有“痛点”就有“机会点”,针对这些在代码评审过程中的痛点,我们还可以做什么呢?比如,是否可以智能推荐评审人?智能生成评审描述?是否可以对改动过多的“大评审”进行自动化拆解?在出现代码冲突时,是否可以进行智能化修复?
https://yunxiao-video.oss-cn-beijing.aliyuncs.com/fenghui/jEG8iVExT1pxUxAMRQt_268072585024_hd_hq.mp4?spm=a2c6h.14478567.J_2510131820.3.767c2e76ro4wIg&file=jEG8iVExT1pxUxAMRQt_268072585024_hd_hq.mp4
请大家看一下这支视频,视频中出现的可爱形象是云效智能研发助手——云豆。“云豆”可以在智能引导环节分享更规范的工作方法,在智能评审环节快速定位问题高效完成工作,在智能答疑环节推荐最优解法。比如在新建评审环节,当选择好评审分支后,云豆可以智能推荐最佳评审者;云豆支持预估评审耗时,并可以根据预估评审耗时合理安排评审优先级,帮助开发者利用好碎片时间评审。在代码质量方面,云豆具备自动化质量和安全检测能力,并可自动推荐修复方案。

05.PNG

我们可以将云效智能研发助手“云豆”提供的智能化评审过程抽象为上面这张图,当一个开发者新建了一个代码评审,云豆可以结合智能化及传统自动化检测手段对这段代码进行全方位的检测,并给出一个非常综合的评审意见。此时评审者只需要在云豆提供的评审意见之上,结合自己的工作经验及对业务逻辑的理解给出补充的评审意见即可。

智能研发助手云豆背后的能力:代码缺陷检测与补丁推荐-PRECFIX
在云效智能研发助手云豆提供的智能评审过程中,究竟涉及哪些智能化的能力呢?首先,我们来看代码缺陷检测与补丁推荐技术-PRECFIX。

06.PNG

在日常研发工作中,我们经常会用到P3C、PMD、FindBugs等传统自动化检测工具,但这些工具并不能完全解决阿里巴巴面临的代码质量问题。因为传统工具多是基于规则匹配,泛化能力不强,基于业务场景的缺陷很难识别出来。因此我们希望有一种对缺陷类型泛化能力比较强的缺陷检测方法或者工具,于是提出PRECFIX方法(Patch Recommendation by Empirically Clustering)。PRECFIX的目标是通过智能化手段,可以实现毫秒级检测,能够修复部分偏业务缺陷,并给出对应的补丁推荐方案。

PRECFIX代码检测过程主要分为三个阶段:风险识别、缺陷定位、补丁推荐。这个过程会涉及行为数据、代码数据、日志数据的处理,以及聚类算法、推荐算法、代码建模、特征提取、深度学习等算法技术。

PRECFIX的技术实现思路其实并不复杂,首先我们从阿里巴巴集团内部海量的公开代码数据中提取代码提交(Commit)信息,基于一定规则挖掘出“缺陷修复对”(缺陷代码片段和补丁代码片段的组合),然后通过聚类算法将相似的“缺陷修复对”聚类,提取出对应的代码模板。在用户发起评审时,系统会自动扫描变更代码,若与缺陷模板库匹配,则会推荐给用户补丁模板用于修复。

07.PNG

PRECFIX方法已经在阿里巴巴集团内部落地,其误报率在5%以下,在内部公开代码库中扫描出了800多种缺陷类型,3万多个缺陷,提取出了3000多个补丁模板。
智能研发助手云豆背后的能力:评审耗时预估
08.PNG
当存在多个待处理评审的情况时,“评审耗时预估”可以帮助评审人预知评审的工作量,合理安排评审时间,利用碎片化时间进行充分的评审,提升评审效率。

“评审耗时预估”的技术实现思路是怎样的呢?首先从几百万次的代码评审历史浏览数据中抽取特征,包括评审总行数、编程语言、历史评审时长、历史逐行时长等几十个维度的特征,从而去训练机器学习模型。当一个开发者提交了代码评审时,“云豆”会从他提交的diff文件中提取这些特征,从而估算这次评审需要的耗时。

智能研发助手云豆背后的能力:敏感信息检测SecretRadar

09.PNG

近年来,业内发生多起敏感信息(API Key、 Database credential、Private token)通过某些站点被无意识地泄露出去的事件,给企业带来了安全风险。开发者和企业管理者亟需一款稳定健全的敏感信息检测方法和系统。通过调研我们了解到,目前已有的敏感信息检工具要么单纯考虑规则匹配,要么采用信息熵技术实现,其召回率或准确率均无法满足预期。因此我们在规则匹配和信息熵技术的基础上,结合了多层检测模型和上下文语义检测,打造了一款敏感信息检测工具 ——SecretRadar。

10.PNG

SecretRadar的技术实现思路主要分为三层,第一层采用规则匹配这种传统敏感信息识别技术,“规则匹配”具有良好的准确度和扩展性,但是非常依赖比较固化的长度、前缀、变量名,难以应对不同开发者的不同编码风格,容易造成漏报。针对难以固定规则捕捉的场景,在第二层我们采用了信息熵算法。信息熵算法用于衡量代码行混乱程度,对随机生成型密钥和随机身份信息识别效果良好。但信息熵算法也有其局限性,伴随召回的提升是误报率的增加。因此在第三层我们采用了模板聚类的方法进行过滤优化。针对信息熵结果集聚合提取常见关键字,并结合上下文分析完成二次过滤。同时通过问题的修复情况建立二分类数据集,完成算法优化。进而从词法识别迭代为语义识别。

智能研发助手云豆背后的能力:代码补全
代码补全是当前代码智能化领域研究的热点。目前代码补全工具主要分为三种:基于语法解析器的代码补全;基于统计机器学习的代码补全;基于深度学习的代码补全。基于语法解析器的代码补全工具最为大家熟知,我们平时使用的IDE中内置的补全工具基本都属于这类。这种补全工具有个问题,就是补全结果没有进行合理排序。基于统计机器学习的代码补全工具不仅可以给出更加合理的补全候选方案,还可以从“补全概率”的维度对候选方案进行排序。但这种补全方式也有其局限性,推荐的结果比较固定。

最近几年,随着NLP(自然语言处理)领域对自然语言建模能力的大幅度提升,这种能力也被应用到代码补全上。相对于基于统计机器学习的代码补全工具而言,基于深度学习的代码补全系统能够更大范围的了解上下文语义,并结合大量数据,给开发者提供动态的代码补全推荐。当然这种方式在训练阶段以及推理计算时会需要更强大的算力,因此在普通的PC机上基本没办法使用这种系统。业内通常的做法是将训练好的模型部署到远端服务器上,本地去进行实时查询,因此对网络的依赖比较强。

在代码补全的探索中我们遇到很多挑战和难点,主要有四个方面:不完整代码上下文理解难度大;代码片段补全准确率要求极高,对错误的容忍度非常低;多Token补全搜索空间无限大,算法效率和准确度难以提升;代码中单词的数目是无限大的,一般模型难以处理如此大的词表。

针对以上问题,我们的策略是采用“算法手段+工程手段”相结合的解决方案。算法方面,采用本地+深度模型共同补全,挑选合适的分词算法(如BPE分词算法),并结合规则匹配的手段进行实现。在工程方面,通过整合现有语法服务给用户带来综合体验的提升。

11.PNG

我们的代码补全流程设计如图所示,分为预处理阶段、实时补全阶段、后处理阶段。在预处理阶段,会进行变量/字符串替换、分词、索引变量等处理。在实时补全阶段,采取本地个性化补全模型和云端深度补全模型相结合的方法,然后对多模型候选项进行合并、筛选和重排。在后处理阶段,会进行变量名替换和填充、语义格式化等操作,并将最终补全候选方案推荐给开发者。

总结:
目前云效智能研发助手“云豆”主要可提供智能代码评审、评审耗时预估、智能推荐评审人、代码补全等智能化能力,未来“云豆”还可以结合开发者个人研发习惯,提供更多功能。云豆已经集成在云效代码管理平台(Codeup)中,大家可以登录云效官网免费“领养”。

以上内容节选自张玉明(玄坛)的主题演讲《阿里巴巴智能化代码平台的探索与实践》,如果想了解完整分享内容可以进入2020阿里巴巴研发效能峰会官方网站收看回放视频。

想了解更多信息,观看阿里巴巴研发效能峰会精彩回放:https://developer.aliyun.com/topic/2020/1?s=主论坛&v=2728

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
SVN版本控制系统
SVN是现在软件开发之中的主流软件版本控制工具,在工作之中利用SVN可以有效的解决多人开发的代码管理问题,本课程将为读者讲解SVN服务器的配置以及基于MyEclipse的SVN客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
目录
相关文章
|
15天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
39 2
|
1月前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成的实现之旅
本文旨在通过一个实际案例,向读者展示如何将DevOps理念融入日常工作中,实现自动化部署和持续集成。我们将从DevOps的基础概念出发,逐步深入到工具的选择、环境的搭建,以及流程的优化,最终实现一个简单而高效的自动化部署流程。文章不仅提供代码示例,更注重于实践中的思考和问题解决,帮助团队提高软件开发和运维的效率。
|
1月前
|
监控 安全 Devops
DevOps实践中,如何平衡开发速度和安全审核的效率
DevOps实践中,如何平衡开发速度和安全审核的效率
|
1月前
|
运维 监控 Devops
DevOps实践:自动化部署与持续集成的融合之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为一种文化和实践,它倡导开发(Dev)与运维(Ops)之间的协作与整合。本文将引导读者了解如何通过自动化部署和持续集成(CI)的实践来提升软件交付的速度和质量。我们将探讨一些实用的工具和技术,以及它们是如何帮助团队高效地管理代码变更、测试和部署的。文章将不包含代码示例,但会详细解释概念和流程,确保内容的通俗易懂和条理性。
131 62
|
6天前
|
运维 安全 Devops
DevOps实践中的安全审核和合规性
DevOps实践中的安全审核和合规性
|
6天前
|
监控 安全 Devops
DevOps实践中,如何平衡开发速度和安全审核的效率?
DevOps实践中,如何平衡开发速度和安全审核的效率?
|
7天前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
9天前
|
运维 安全 Devops
DevOps实践中的安全审核和合规性
DevOps实践中的安全审核和合规性
|
16天前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
44 4
|
16天前
|
运维 监控 Devops
DevOps文化:持续交付与持续反馈的文化构建与实践
【10月更文挑战第26天】DevOps作为一种将开发与运维紧密结合的文化和实践,通过促进团队协作与自动化流程,实现快速、稳定且高质量的软件交付。本文重点探讨持续交付与持续反馈两大支柱,通过实际案例和示例代码,展示其构建与实践过程。例如,使用Jenkins构建CI/CD流水线,通过Grafana和Prometheus实现实时监控,确保软件质量和快速响应。
28 1