【技术实现步骤摘要】
一种基于多图多标记学习的软件Bug检测方法
[0001]本专利技术属于软件缺陷检测
,具体涉及一种基于多图多标记学习的软件Bug检测方法。
技术介绍
[0002]由于软件缺陷是影响软件开发效率和软件质量的关键因素,软件缺陷发现成为了软件工程领域的热点问题,缺陷发现的目的是定位缺陷具体所在的源代码的位置(如组件、包、文件或代码行),进而引导开发人员及时消除缺陷,以提高软件开发效率和提升软件质量,节省软件开发成本。目前,在海量的代码仓库背景下,基于文本静态分析的软件缺陷检测方法受到了越来越多的关注。
[0003]基于文本静态分析的软件缺陷检测方法主要基于Bug报告和程序源代码两个语料库来进行缺陷发现。如Zhou等人提出的Bug检测方法是基于Bug报告和程序源代码两个语料库的,该方法在语料库中使用诸如停用词删除、词干提取等文本处理方法,进一步通过向量空间模型(rVSM)测量两个语料库的相似性,该方法准确性不高。Lukins等人提出基于方法级Bug检测方法,该方法以源代码中的方法为度量单位,使用停用词删除、词干处理等技 ...
【技术保护点】
【技术特征摘要】
1.一种基于多图多标记学习的软件Bug检测方法,其特征在于,该方法包括以下步骤:步骤1:基于程序源代码对应的Bug报告获得所述程序源代码的Bug多标记,从而生成程序源代码的多标记数据;步骤2:生成程序源代码的多图数据MG,从而获得与程序源代码相对应的多图多标记数据;步骤3:从步骤2获得的多图数据MG中挖掘频繁子图,获得频繁子图集frequencyG;步骤4:从步骤3获得的频繁子图集frequencyG中筛选出能够区分不同标记的子图,将这些子图命名为区分子图,所有区分子图构成区分子图集featureG;步骤5:基于步骤4获得的区分子图集featureG实现多图的向量化,将每个程序源代码文件对应的多图多标记数据转化成多示例多标记数据;步骤6:将步骤5获得的多示例多标记数据退化为单示例多标记数据;步骤7:利用步骤6获得的单示例多标记数据对神经元网络学习模型进行学习训练;步骤8:将待检测的程序源代码输入到训练后的神经元网络学习模型中执行软件Bug检测,模型返回结果即为Bug检测结果。2.根据权利要求1所述的基于多图多标记学习的软件Bug检测方法,其特征在于,所述步骤1进一步包括如下步骤:步骤1
‑
1:获取原始的程序源代码和对应的Bug报告,给定停用词表ST和标记个数L;步骤1
‑
2:初始化文本列表T1为空,初始化向量列表T2为空;步骤1
‑
3:根据停用词表ST将Bug报告中的停用词删除,将删除后剩下的词存入文本列表T1中,作为语料库;步骤1
‑
4:将T1中的单词构建成词典Dic并计算文本向量,且将文本向量存入向量列表T2中;步骤1
‑
5:计算T1中每个单词的TF
‑
IDF值;步骤1
‑
6:根据每个单词的TF
‑
IDF值、给定的标记个数L以及所述词典Dic和步骤1
‑
4得到的向量列表T2,获得每个Bug报告对应的关键词信息,并以这些关键词作为对应程序源代码的Bug多标签,生成多标记数据D1。3.根据权利要求1所述的基于多图多标记学习的软件Bug检测方法,其特征在于,所述生成程序源代码的多图数据MG的方法为:针对每一个程序源代码文件P,以方法为粒度,将每个方法均转换成对应的程序依赖图PDG,且由于一个方法对应一个程序依赖图,而一个源代码文件中包括很多方法,因此,一个程序源代码文件P对应一个图包Bag,从而获得该程序源代码文件P对应的多图数据MG。4.根据权利要求1所述的基于多图多标记学习的软件Bug检测方法,其特征在于,使用gspan算法从步骤2获得的多图数据MG中挖掘频繁子图。5.根据权利要求3所述的基于多图多标记学习的软件Bug检测方法,其特征在于,所述步骤4进一步包括如下步骤:步骤4
‑
1:输入步骤3得到的频繁子图集frequencyG和预期的区分子图个数k,k由用户指定;步骤4
‑
2:初始化区分子图集featureG为空,区分度阈值τ为0;步骤4
‑
3:遍历频繁子图集frequencyG,对于其中的每一个子图,若已选择的子图个数
小于k或者该子图的区分度大于当前的区分度阈值τ,则将该频繁子图添加到区分子图集featureG中;若区分子图集featureG中的区分子图个数大于k,则剔除区分子图集featureG中区分度最小的子图,并将区分度阈值τ更新为当前区分子图集featureG中具有最小区分度的子图的区分度;所述区分度阈值τ按照下式进行更新:其中g
i
表示区分子图集featureG中的第i个子图;D
s
表示区分度;步骤4
‑
4:返回区分子图集featureG。6.根据权利要求5所述的基于多图多标记学习的软件Bug检测方法,其特...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。