梁广泰,华为云软件分析 Lab 技术专家 / Team Leader,北京大学计算机系博士。研究领域是软件分析、智能化开发、软件工程领域等。
本文以技术文章的方式回顾梁老师在 SIG-程序分析 技术沙龙上的分享,回顾视频也已经上传 B 站,欢迎小伙伴们点开观看。
https://www.bilibili.com/video/BV1a44y187eKhttps://www.bilibili.com/video/BV1a44y187eK
大家好,非常感谢大家来参加我们今天的 SIG-程序分析技术沙龙。我是来自华为云软件分析 Lab 的梁广泰,今天给大家分享的主题是 基于软件分析的智能化开发新型服务与技术。
# 技术趋势分析 #
先来看一下业界相关的技术趋势。我从云服务厂商的角度来给大家介绍一下,当前业界围绕该领域有做哪些事情。
# 缺陷检测与修复领域
首先看一下缺陷检测与修复 领域。
## Amazon - CodeGuru
Amazon 推出了一个叫 CodeGuru [1] 的 offering,其主要功能是通过全方位的缺陷检测和扫描,帮助程序员更快地识别出有问题的代码,并提供智能建议以进行代码修复。
CodeGuru: 自动执行代码审查、持续监控性能并识别低效代码,提供智能建议以提高代码质量,降低代码维护及运行总体成本 [1]
该 offering 提供了两个子服务:
CodeGuru Reviewer
顾名思义,Reviewer 子服务其实就是用机器学习的方式,通过自动化推理的算法提供智能化代码审查的服务,帮助程序员进行各种类型的代码查找,提供代码修复的建议。
CodeGuru Profiler
与其对应的另一个子服务是 Profiler。该服务更多的是利用插桩技术来监控程序运行时的状态,包括内存的消耗、CPU 的使用率等。通过分析运行时数据,提高程序的运行效率,甚至帮助程序员找到运行成本高昂的代码行。
## Microsoft - Azure
我们再来看一下微软的 Azure。
Github Code Scanning
Github 作为一个代码托管平台,同时也是全球最大的代码数据中心之一。围绕这个中心,Github 开展了各种各样的代码分析服务。微软收购 Github 之后,Azure 和 Github 进行了充分的集成,其中就包括了 Github 的 code scanning [2] 服务,可以在 Azure 上针对高危的 security issues 提供扫描的能力。
如下图示,在 Github 的代码提交页面上,Code Scanning 会自动地将识别到的缺陷告警显示在页面上,帮助程序员更快地去发现问题,从而在代码入库前拦截掉这些问题。
Github Code Scanning [2]
Pipeline
除此之外,Azure 的 Pipeline [3] 也支持配置各种类型代码扫描的任务。与其他云厂商思路不同的是,Pipeline 的缺陷分析工具并不是由微软自己来提供,用户可以自由地配置外部的 static analyzer。例如,用户可以在本地部署一些静态分析的服务,在 Azure 里配置相关的链接,包括扫描的命令等,从而将本地和云端进行一个有机的集成。
支持设置代码扫描任务,覆盖主流缺陷检测工具 [3]
Monitor within Visual Studio
与此同时,微软也在不断地繁荣自己的代码分析能力。如下图示,Visual Studio 提供了一些监控的手段,用来帮助程序员更快地识别程序里的潜在问题,并给出更新提示。这其实和刚才提到的 Amazon CodeGuru Profiler 有类似之处。
通过监控识别潜在性能问题,并给出优化建议 [4]
## 阿里云 - CodeUp
阿里云通过 CodeUp [5] 代码托管平台,也有在持续地拓展软件分析的能力。
依托 PMD 和 Sonar 插件完成合规检查
CodeUp 主要依托 开源代码扫描工具 PMD(Programming Mistake Detector)[6] 和 Sonar 插件(主要用于代码库全量自动化扫描阶段) 来完成相关的合规检查。
代码质量 - 规约检测 P3C [7]
融合 AI 提供自动修复 / 敏感信息检查 / 评审智能化
阿里云在 ICSE-SEIP’20 上发表了代码自动修复技术 PRECFIX [8],能够基于数据挖掘的方式做模式挖掘,从而提供代码修复能力。
代码质量 - PRECFIX [7]
提供多层敏感信息检测工具。
代码安全 - 敏感信息检测 SecretRadar [7]
提供代码智能评审,以提高程序员研发效率。
研发提效 - 智能评审 [7]
## CODING 平台
CODING [9] 平台(腾云扣钉科技有限公司,腾讯旗下全资子公司)也提供了代码扫描的能力。CODING 目前在内部集成了多种代码扫描工具、数千条规则,提供了很多主流编程语言的漏洞检测和修复的能力,同时支持用户配置方案,支持集成外部工具。
CODING 提供了分支代码质量分析的功能,可以帮助管理者快速了解分支的代码质量,例如:
分支概览
圈复杂度
查看 CODING 文档了解代码扫描更多功能:https://help.coding.net/docs/code-scan/intro.html
## 小结
-
国内该类 DevOps - 检查产品还不够成熟,目前各大云厂商也是初步布局阶段,尚未形成稳定格局,市场机会尤在
-
企业设施云化、数字化转型趋势下,软件质量(可用性、可靠性、安全、韧性)属性关注度将日益增强
-
主流云服务厂商,目前全部涉足该领域,对代码缺陷检测与修复关注度持续增强,进一步确认了该研究方向的投资价值和必要性
-
阿里围绕缺陷修复数据挖掘有研究成果发布,微软提供了 CodeQL 查询语言等,进一步确认了该项目关键技术路径(基于用户修复数据进行历史学习、基于 dsl 等提高缺陷检测能力可扩展性等)的合理性
# 开源成分治理领域
在这个部分我们介绍一下开源成分(即 Open-Source Components [10])治理。前面讲到的缺陷分析领域,更多是针对程序员自己开发出来的代码来分析,看里面是否有各种类型的问题。而开源成分更主要是围绕程序员在开发的过程中,可能大量复用的外部第三方的开源成分。
现代软件开发中开源成分的使用比例与日俱增,业界关注度也越来越高。那么,结合了开源成分的代码应该如何进行质量的保障?其实这也是需要通过一系列的智能化开发服务,或者软件分析服务来做到的。
那么,在开源成分治理领域,相关的云服务厂商正在做哪些实践呢?
## Microsoft Azure - Github Dependabot
我们还是先来看一下微软的 Azure。微软在 Github 上通过 Dependabot [11]