首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈深度学习在软件缺陷分配中的应用

软件缺陷分配简介

软件缺陷分配(Bug Assignment)是指将一个软件缺陷报告分配给一个合适的开发人员的过程。图1表示的是Hadoop Common项目的一个缺陷报告,缺陷报告的内容包括摘要(Summary)、相关信息(Details)、详细描述部分(Description)等。当一个缺陷报告被某个开发人员、测试人员或用户提交到缺陷管理系统时,通常会由一个经验丰富的开发人员根据自己的经验对缺陷报告进行人工分配。在软件规模不大时,由人工进行软件缺陷报告的分配是可行的,但是随着软件规模越来越大,仅由人工进行软件缺陷报告分配变得越来越不可行。一方面,软件规模越大,越容易出现软件缺陷,提交到缺陷管理系统中的缺陷报告也越来越多,例如Eclipse项目在2015年9月份收到的新的缺陷报告约为2500份,平均每天收到80份新的缺陷报告[1];另一方面,软件规模越大,参与开发的人员规模也越大,要从中选出合适的修复者也越来越困难。因此对于大规模软件的缺陷报告分配任务,需要引入自动化的软件缺陷分配方法来辅助开发人员进行软件缺陷分配以提高软件缺陷报告分配的效率。

自动化的软件缺陷分配方法可以分为基于活动信息的方法和基于缺陷位置的方法[2]。基于活动信息方法的基本想法是通过对开发者在缺陷管理系统中的活动信息(如某个开发者处理了哪些缺陷报告等)进行挖掘,利用挖掘得到的信息进行缺陷报告分配,代表性工作有 [3][4][5]等,它们把软件缺陷报告分配任务作为一个文本分类问题,即把一个缺陷报告中的摘要和详细描述这两部分内容作为要分类的文本,分类的类别标签为某个开发人员。这类方法的重点在于缺陷报告的特征表示以及分类器的构建。

基于缺陷位置的方法的假设是某块代码的作者或修改者应该对这块代码有深入的了解,因此如果这块代码含有缺陷,则应该由这块代码的作者或者修改过这块代码的开发人员进行修复。基于这样的假设,这类方法的基本想法都是先根据软件缺陷报告找出含有该软件缺陷的源代码文件或者是修复该软件缺陷需要修改的源代码文件,再把缺陷报告分配给修改过这些源代码文件的开发者,代表性工作有[2][6]等。

图1 Hadoop Common项目中的软件缺陷报告Hadoop-15171

基于深度学习的软件缺陷报告分配

文献[7]是韩国中央大学和LG公司合作完成的,发表在ESEC/FSE 2017上,也是我目前找到的最早将深度学习应用到软件缺陷报告分配的工作。文献[7]将CNN模型和Word2Vec模型用于软件缺陷报告分配,CNN模型的结构如图1所示。作者首先用缺陷报告中的摘要以及详细描述这两部分作为语料来训练得到一个Word2Vec模型,从而得到每个摘要和详细描述中每个词的向量表示。这里使用Word2Vec模型来构建词向量表示是为了处理缺陷报告中存在多种语言的情况。像LG这样的跨国公司,其开发中心位于多个国家,因此缺陷管理系统中的缺陷报告往往是由英语或韩语来写的,使用Word2Vec来构建词向量的表示可以使得不同语言中语义相近的词在向量空间中的距离相近。训练得到Word2Vec模型后,就可以将缺陷报告中的摘要部分以及详细描述部分表示为两个矩阵,矩阵中的每一行是某个词的向量表示,接着用CNN模型对两个矩阵进行卷积和池化操作,最后过一个Softmax层来预测该将缺陷报告分配给哪个开发人员。这个工作的创新之处在于使用Word2Vec模型来构建缺陷报告的特征表示以及使用CNN模型作为分类模型。与人工分配缺陷报告相比,文献[8]中的方法在分配的准确率以及节省的时间两个指标上都优于人工分配。

图2 文献[7]中提出的用于自动分配缺陷报告的CNN模型结构

文献[8]是IBM印度研究院的工作,作者认为用文本分类的方法来解缺陷报告分配问题的关键在于缺陷报告的特征表示方法,而过去的工作使用的是词袋模型(BOW)或Word2Vec作为缺陷报告的特征表示方法,作者认为这些方法都存在一些问题,例如词袋模型(BOW)忽略了词序、丢失了语义信息;Word2Vec虽然可以表示单个词的语义信息,但是无法表征句子或段落的上下文信息等。

图3 文献[8]方法总体流程

因此作者设计了一个基于注意力机制的双向LSTM语言模型(DBRNN-A)来构建缺陷报告的特征表示。作者提出的方法的总体流程如图3所示。首先需要对缺陷报告的文本内容做预处理,作者这里只使用了缺陷报告中的摘要以及详细描述这两部分,并且去掉了其中包含的URL,代码片段以及日志等作者认为不好处理且会带来噪音的数据。接着构建词表,训练word2vec模型,得到词的向量表示,作为DBRNN-A模型的输入。

作者用未分配的缺陷报告(相当于没有分类标签的数据)来训练构建DBRNN-A模型,接着用该模型推断得到已分配的缺陷报告的向量表示,然后用该向量表示及其分类标签训练一个分类器完成缺陷报告分类。因为这个工作的重点是用于构建缺陷报告向量表示的DBRNN-A模型,因此在实验部分作者用了一个简单的Softmax分类器作为缺陷报告的分类器。另外值得一提的是,作者还做了一个跨项目的迁移实验。作者将在Chromium项目缺陷报告数据上训练得到的DBRNN-A模型用于Core项目以及Firefox项目中,在Chromium项目、Core项目以及Firefox项目测试数据上的分配准确率分别为42.7%,39.6%和43%。

图4 基于注意力机制的双向LSTM语言模型

结语

本文先对软件缺陷报告分配进行了简要介绍,又以两个代表性工作 [7](基于CNN模型的方法)和 [8](基于LSTM模型的方法)为例,介绍了深度学习方法在软件缺陷报告分配中的应用,希望以上内容能够给大家的工作带来一些启发,如果有错误或不严谨的地方,还请指出,谢谢。

参考文献

[1] Learning to Rank for Bug Report Assignee Recommendation. Yuan Tian, Dinusha Wijedasa,David Lo, Claire Le Goues. ICPC 2016.

[2] Why So Complicated? Simple Term Filtering and Weighting for Location-Based Bug Report Assignment Recommendation. Ramin Shokripour, John Anvik, Zarinah M. Kasirun. MSR 2013.

[3] Automatic bug triage using text categorization. Davor Čubranić. SEKE 2004.

[4] Who Should Fix This Bug? John Anvik, Lyndon Hiew. ICSE 2006.

[5] Automating Bug Report Assignment. John Anvik. ICSE 2006.

[6] Triaging Incoming Change Requests: Bug or Commit History, or Code Authorship? Denys Poshyvanyk, Hoang Dang, Kamal Hossen. ICSM 2012

[7] Applying Deep Learning Based Automatic Bug Triager to Industrial Projects. Sun-Ro Lee, Min-Jae Heo, Chan-Gun Lee, Milhan Kim, Gaeul Jeong. ESEC/FSE 2017.

[8] DeepTriage: Exploring the Effectiveness of Deep Learning for Bug Triaging. Senthil Mani, Anush Sankaran, Rahul Aralikatte. arXiv:1801.01275

作者简介

夏文圣,前沿交叉学科研究院

硕士二年级

研究方向:基于日志分析的分布式系统故障诊断

作者往期文章

深度学习在基于日志分析的系统异常检测中的应用

关注我们

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190114G0KSYJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券