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

简介: 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客户端插件的配置与使用,并且在讲解之中着重讲解了冲突的产生于解决。
目录
相关文章
|
16天前
|
缓存 Devops Shell
云效产品使用报错问题之云效代码域迁移失败,但分组已经创建,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
16天前
|
运维 Devops
云效产品使用报错问题之代码域修改配置后,删除了代码组,代码未删除,但是项目现在看不到了,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
2天前
|
存储 监控 Apache
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
网易的灵犀办公和云信利用 Apache Doris 改进了大规模日志和时序数据处理,取代了 Elasticsearch 和 InfluxDB。Doris 实现了更低的服务器资源消耗和更高的查询性能,相比 Elasticsearch,查询速度提升至少 11 倍,存储资源节省达 70%。Doris 的列式存储、高压缩比和倒排索引等功能,优化了日志和时序数据的存储与分析,降低了存储成本并提高了查询效率。在灵犀办公和云信的实际应用中,Doris 显示出显著的性能优势,成功应对了数据增长带来的挑战。
查询提速11倍、资源节省70%,阿里云数据库内核版 Apache Doris 在网易日志和时序场景的实践
|
8天前
|
测试技术 块存储 开发者
阿里云块存储团队软件工程实践
本文介绍了阿里云团队软件工程实际开发流程,并简述了开发过程中遇到的一些问题。且附带案例,以及遇到案例中出现的情况应当如何应对。
|
8天前
|
人工智能 自然语言处理 IDE
如何让阿里云AI001号员工帮我写代码(含IDEA插件使用)
AI 智能时代,将改变所有人的思维方式,学习方式,更注重人的创造力和思考力,如果你懒,你将会被 AI 替代,如果你只想干简单不用动脑的活,你将会被 AI 替代,如果你只会打螺丝,更会被 AI 替代。当下的 AI 人工智能时代,被认为是第四次工业革命的到来,我们更应该看到的是机会,而非跳进焦虑、困惑、悲观的一群人潮中。
|
8天前
|
SQL DataWorks Java
DataWorks操作报错合集之在阿里云 DataWorks 中,代码在开发测试阶段能够成功运行,但在提交后失败并报错“不支持https”如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
24 1
DataWorks操作报错合集之在阿里云 DataWorks 中,代码在开发测试阶段能够成功运行,但在提交后失败并报错“不支持https”如何解决
|
9天前
|
弹性计算 JSON 运维
Serverless 应用引擎产品使用之阿里云serverless的s deploy,本地的代码编译后的镜像无法推送上去如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
27 0
|
12天前
|
人工智能 自然语言处理 供应链
阿里云联合伙伴发起“物流智能联盟”
物流行业内首个专注于大模型应用研究与实践的联盟“物流智能联盟”在杭州成立,旨在加速大模型在物流领域落地,用AI助力物流行业增效降本和业务创新。该联盟由阿里云、菜鸟、高德地图、中远海运、东航物流、圆通速递、申通快递、中通快递、德邦快递、G7易流、地上铁、浙江大学智能交通研究所等在2024数智物流峰会上共同成立。
|
16天前
|
运维 Kubernetes 测试技术
云效产品使用报错问题之webhook触发失败,代码路径或者代码分支未匹配,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
16天前
|
运维 Devops Shell
云效产品使用报错问题之在codeup上创建的代码分支或者代码变动,同步到gitlab失败如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。