简介: 3月3日,阿里巴巴算法工程师别象在云效DevOps交流群中分享了《阿里巴巴代码缺陷检测探索与实践》。从阿里巴巴代码平台在探索缺陷检测和补丁推荐问题时遇到的挑战入手,介绍了目前业界和学术界较为流行的缺陷检测手段,并针对其局限性,提出PRECFIX方法。
目前PRECFIX技术已经在阿里巴巴集团内部落地并获得好评;关于“PRECFIX”技术的论文被国际软件工程大会(ICSE)收录。

张昕东(别象) 阿里巴巴 云研发事业部 算法工程师
【以下为别象分享实录】
阿里巴巴在缺陷检测技术方面遇到的三个挑战
编码是DevOps的重要一环,我所在的部门主要负责阿里巴巴集团的代码托管。在平台业务的背后,我们建设了一系列智能化能力用来赋能前线业务。依赖底层的代码图谱和离线数仓(离线数据仓库)的数据能力,代码智能衍生出了缺陷检测、代码生成、代码克隆、代码安全等能力。今天主要介绍一下我们在缺陷检测领域的初步探索和实践。
缺陷检测和补丁推荐几十年来一直是软件工程领域的难题,又是研究者和一线开发者最为关心的问题之一。这里讲的缺陷不是网络漏洞、系统缺陷,而是隐藏在代码中的缺陷,也就是程序员们戏称的“八阿哥”(即BUG)。每位开发者都希望有一种智能的缺陷检测技术来提升代码质量,避免踩坑。所谓“最迷人的最危险”,如此令人着迷的技术自然有着重重阻碍。
在研究了现有的一些解决方法以及阿里巴巴内部数据集的特征后,我们将缺陷检测技术在阿里巴巴产品落地上的挑战归纳为三个方面:
复杂的业务环境
首先阿里巴巴经济体业务种类繁多,有底层系统中间件的代码,有物流的代码,也有安全、人工智能等各个领域的代码,业务在变,代码缺陷类型也在变。代码数据只增不减,代码缺陷类型捉摸不透,缺陷检测的困难不言自明。
以Java语言为例,学术界的Java缺陷公开数据集常用的是Defect4J。Defect4J包含6个代码库,有将近400个人工确认的缺陷和补丁。这些代码库是比较基础常规的代码库,缺陷种类容易划分,一部分研究者也做了特定缺陷种类的研究,对症下药效果尚可,然而换了一种缺陷类型,那么检测的效果就很难令人满意了。
在阿里巴巴数据集中,有众多的缺陷类型难以定义,希望能有一种对缺陷类型泛化能力强的缺陷检测与补丁推荐的方法,不说“包治百病药到病除”,但希望能够适应不同的“病症”,提高代码“免疫力”。
有限的辅助资源
第二大挑战来源于有限的辅助资源,这也是导致许多学术界相关成果无法直接复现利用的原因。
何谓辅助资源,常用者有三:测试用例,缺陷报告,缺陷标签。
虽然大多数线上代码都已经达到了很高的测试覆盖率,但是由于代码质量参差,有一大部分代码库是缺乏测试用例的,我们也缺少足够的缺陷报告去直接定位缺陷。我们也想尝试过通过缺陷标签来学习缺陷模式,然而自动打标签的方法准确率不高,而人工给如此庞大的数据集打标签是不太现实的。
产品落地的要求
而最难现实的是第三大挑战,来自产品的落地要求。
作为一项技术,需要在产品中寻找落地的机会。而真实的落地又对技术有极高的要求:我们构想的主要落地场景是代码评审中的缺陷静态扫描及补丁推荐。产品经理说:“检测过程要高效,尽量不要给误报,定位缺陷还不够,补丁方案还得让用户知道。”

阿里巴巴算法工程师别象分享了在代码缺陷检测领域的探索与实践,介绍了PRECFIX方法,一种基于经验聚类的补丁推荐技术,已在集团内部广泛应用。
最低0.47元/天 解锁文章
4047

被折叠的 条评论
为什么被折叠?



