[发明专利]一种面向开源软件缺陷特征深度学习的软件缺陷预测方法有效
| 申请号: | 201910907932.7 | 申请日: | 2019-09-25 |
| 公开(公告)号: | CN110597735B | 公开(公告)日: | 2021-03-05 |
| 发明(设计)人: | 艾骏;王飞;许嘉熙;郭皓然;邹卓良;施韬 | 申请(专利权)人: | 北京航空航天大学 |
| 主分类号: | G06F11/36 | 分类号: | G06F11/36;G06F8/41;G06N3/04;G06N3/08;G06K9/62 |
| 代理公司: | 北京永创新实专利事务所 11121 | 代理人: | 祗志洁 |
| 地址: | 100191*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 面向 软件 缺陷 特征 深度 学习 预测 方法 | ||
本发明提供了一种面向开源软件缺陷特征深度学习的软件缺陷预测方法,属于软件工程技术领域。本发明包括:采集开源软件缺陷信息,构建软件缺陷数据库,将源代码生成抽象语法树;利用社团检测算法将抽象语法树进行剪枝得到缺陷子树,然后结合修复描述和项目基础信息、源代码来建立缺陷子树的信息语料库,从中提取主题单词并转化为向量表示,作为缺陷子树中节点的属性;最后建立基于图分类的卷积神经网络的软件缺陷预测模型,将缺陷子树表示为邻接矩阵和属性矩阵作为模型的输入训练卷积神经网络,识别待预测软件模块源代码是否具有缺陷倾向性。本发明利用深度学习的方法直接从结构化的软件代码中提取缺陷深度特征,能够取得更好的缺陷识别效果。
技术领域
本发明属于软件工程领域,涉及一种面向开源软件的基于抽象语法树结构特征学习的软件缺陷预测方法。
背景技术
随着软件系统的规模和复杂度的增长,软件缺陷也与日俱增,如何提高软件的质量并及早的识别、预测、修复软件的缺陷,已成为整个软件生命周期中必须始终关心和设法解决的问题。软件缺陷预测能够根据软件代码特征和历史缺陷信息,及早的识别出存在能影响软件可靠性的软件缺陷倾向的模块,从而充分利用有效的资源提高软件产品的质量与可靠性。
机器学习技术的逐渐成熟使得基于统计学习的数据驱动型软件缺陷预测变得更为有效。大量实例的研究表明,利用机器学习中的关联规则、分类器算法、聚类算法等,取得了很好的缺陷预测效果,对于提高软件可靠性有着显著的作用。早期基于机器学习的软件缺陷预测主要是用项目历史数据作为训练,得到模型在用于该项目未来版本中的软件缺陷,这种预测方法被称为项目内缺陷预测。然而项目内缺陷预测的预测结果受项目历史数据数量的限制明显,在工程场景中往往很难获取充足的训练数据,因此无法通过改进模型来提高预测的效果。针对项目内缺陷预测中训练数据不足和获取困难的瓶颈,一些研究人员建议利用其他项目数据来训练模型进行预测,提出跨项目缺陷预测。跨项目缺陷预测核心思想是使用其他软件中分布相似的度量数据给出待预测软件中的缺陷模块,其难点在于选择能够在项目间迁移的数据和缺陷度量元。开源软件为跨项目缺陷预测带来了规模巨大的可用数据,目前Github用户总量达到3100万,项目总数超过了9600万,合并请求超过了2亿次,其中包含海量的软件缺陷修复数据,缺陷代码的大数据使建立复杂深层的学习模型成为可能。
获取有效的软件缺陷相关的度量元是准确识别高风险模块的关键。传统度量元集中在基于软件规模等度量元的缺陷预测方面,研究缺陷和软件规模、复杂度、模块耦合性等属性之间的关系,以此预测软件可能存在的缺陷数量。比较有代表性的度量元包括代码行数、McCabe复杂性度量、Halstead程序复杂度度量等。随着面向对象方法的普及,越来越多的面向对象程序的度量元得到越来越多的应用。面向对象中最为典型的是CK度量元和MOOD度量元。但是目前的度量元主要是将软件程序元素离散化处理,由文件或类颗粒度上的统计结果设定特征指标,属于可认知的浅层特征,然而现实世界中的很多软件缺陷并不具备某些特定的线性特征,而是包含难以挖掘的深层特征,因此传统度量元在实际的软件工程项目中效果不太理想。
最近部分研究人员将抽象语法树应用在软件缺陷预测中,将抽象语法树转化为数值序列,使用深度学习的方法获取缺陷的有效表征(参考文件1:Wang S,Liu T,Nam J,etal.Deep Semantic Feature Learning for Software Defect Prediction[J].IEEETransactions on Software Engineering,2018,PP(99):1-1.参考文件2:Dam H K,TranT,Pham T T M,et al.Automatic feature learning for predicting vulnerablesoftware components[J].IEEE Transactions on Software Engineering,2018,PP(99):1-1.)。然而数值序列是树状结构的一种有损转换,并且原始的代码模块中缺陷信息被大量的无关信息所掩埋,实际预测效果仍然有待提高。
发明内容
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京航空航天大学,未经北京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910907932.7/2.html,转载请声明来源钻瓜专利网。





