CN115221045A - 一种基于多任务多视角学习的多目标软件缺陷预测方法 - Google Patents

一种基于多任务多视角学习的多目标软件缺陷预测方法 Download PDF

Info

Publication number
CN115221045A
CN115221045A CN202210734560.4A CN202210734560A CN115221045A CN 115221045 A CN115221045 A CN 115221045A CN 202210734560 A CN202210734560 A CN 202210734560A CN 115221045 A CN115221045 A CN 115221045A
Authority
CN
China
Prior art keywords
defect
code
prediction
view
target software
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210734560.4A
Other languages
English (en)
Inventor
杨顺昆
杨明浩
侯展意
林欧雅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Original Assignee
Beihang University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CN202210734560.4A priority Critical patent/CN115221045A/zh
Publication of CN115221045A publication Critical patent/CN115221045A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Biomedical Technology (AREA)
  • Molecular Biology (AREA)
  • Biophysics (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明提出一种基于多任务多视角学习的多目标软件缺陷预测方法,能够基于目标软件已知缺陷情况的历史代码对未知缺陷情况的待测代码中的缺陷进行预测;解决传统软件缺陷预测方法仅能完成一项缺陷预测目标而对不同的缺陷预测目标采用不同预测方法时,使用复杂度与资源消耗较大的难题,并且能够有效地改善静态分析工具的误报与漏报情况。能够基于集成静态分析方法提取包含代码度量特征、缺陷空间结构特征与缺陷典型语义特征的多视角特征信息。通过所构建的多任务多视角神经网络模型,完成目标代码的缺陷倾向性、位置与类型预测,准确而高效地提供多个方面的缺陷预测信息,大幅度改善静态分析的漏报与误报情况,帮助开发者完成有效的缺陷挖掘。

Description

一种基于多任务多视角学习的多目标软件缺陷预测方法
技术领域
本发明提供一种基于多任务多视角学习的多目标软件缺陷预测方法,属于软件缺陷预测领域。
背景技术
准确而有效的软件缺陷预测对于软件可靠性保证和维护十分重要。然而,软件功能的丰富和软件结构的日益复杂对软件缺陷预测方法提出了更高的要求。因此,软件缺陷预测多年来一直是软件工程研究中的活跃领域。软件缺陷预测工作的核心就是,主要包含以下三项预测目标:
(1)预测代码的缺陷倾向性:预测目标软件的待测代码中是否包含缺陷;
(2)预测代码的缺陷位置:预测软件代码中的缺陷位置;
(3)预测代码的缺陷类型:预测软件代码中的缺陷类型。
然而,常见的缺陷预测方法大多数仅能够完成上述目标中的其中一种,即为单目标缺陷预测方法。它们仅能够提供某一个方面的缺陷预测信息,因此对开发人员进行缺陷挖掘的帮助相对有限。同时,针对不同的缺陷预测目标采用不同的缺陷预测方法又会大大增加缺陷预测工作的操作复杂度与时间消耗,从而导致可用性较差。因此,研发一个多目标的软件缺陷方法能够同时准确地完成多项缺陷预测目标,能够大大提升缺陷预测的效率,是十分有意义的。同时,多任务多视角学习是一种新颖的机器学习方法,它能够充分利用来自不同视角的信息从而有效的学习多个相关任务。它在计算机视觉与自然语言处理领域的优秀表现证明了,采取多任务多视角神经网络模型能够有效地提升模型的表现。并且,静态分析方法是一种通过直接扫描目标代码来提取缺陷警告的方法,能够提供充分的多个视角的缺陷信息,例如缺陷的位置信息、缺陷的类型信息等。因此本发明选择通过多任务多视角学习与静态分析方法构建一个多目标软件缺陷预测方法。
本发明提供了一种基于多任务多视角学习的多目标软件缺陷预测方法,能够基于目标软件已知缺陷情况的历史代码对未知缺陷情况的待测代码中的缺陷进行预测。它基于集成静态分析方法从源代码中提取了缺陷的空间分布和语义特征,深度挖掘了多视角的缺陷信息。之后,所构建的多任务多视角神经网络模型具有强大的学习能力,可以充分考虑各个任务与各个视角的特征间的关联关系,从而同时预测出待测代码的缺陷的倾向性、位置和类型。它充分考虑了多个软件缺陷预测任务之间和特征之间的相关性,并分享各个任务中学习的经验,从而有效地提高软件缺陷预测的效率与准确率,并且显着地减少了静态分析工具的误报和漏报情况。本发明能够从多个角度对软件开发者提供更加全面而准确的缺陷预测信息,从而高效的完成缺陷挖掘并有效地提升软件的质量与可靠性。
发明内容
(一)目的
本发明一种基于多任务多视角学习的多目标软件缺陷预测方法,能够基于目标软件已知缺陷情况的历史代码对未知缺陷情况的待测代码中的缺陷进行预测,属于软件缺陷预测领域。本发明方法可以解决传统软件缺陷预测方法仅能完成一项缺陷预测目标而对不同的缺陷预测目标采用不同预测方法时,使用复杂度与资源消耗较大的难题,并且能够有效地改善静态分析工具的误报与漏报情况。本发明能够基于集成静态分析方法提取包含代码度量特征、缺陷空间结构特征与缺陷典型语义特征的多视角特征信息。通过本发明所构建的多任务多视角神经网络模型,能够基于所提取的多视角特征信息同时完成目标代码的缺陷倾向性、位置与类型预测,准确而高效地提供多个方面的缺陷预测信息,大幅度改善静态分析的漏报与误报情况,帮助开发者完成有效的缺陷挖掘。
(二)技术方案
本发明一种基于多任务多视角学习的多目标软件缺陷预测方法,能够基于已知缺陷情况的目标软件的历史代码,对未知缺陷情况的待测代码中的缺陷进行预测,其具体实施步骤如下:如图1所示;
步骤1:收集目标软件历史代码的缺陷数据,包括代码是否存在缺陷、缺陷的代码行数与缺陷的类型,从而为后续的缺陷预测模型训练提供缺陷倾向性、缺陷位置与缺陷类型预测的标签;
步骤2:通过集成静态分析方法提取目标软件历史代码的缺陷信息,包括代码度量信息,代码经过扫描后是否存在缺陷告警,缺陷告警所在代码的位置信息以及具体的缺陷告警的描述信息;
步骤3:从集成静态分析得到的缺陷信息中提取软件代码的度量信息,包括代码行数、圈复杂度、分支语句数等,组成代码度量特征向量;
步骤4:从集成静态分析得到的缺陷信息中提取软件代码缺陷告警的位置信息,将源代码分为20个代码片段,并采用多热编码标记对应的缺陷位置,组成缺陷空间结构特征向量;
步骤5:从集成静态分析得到的缺陷信息中提取软件代码缺陷告警的描述信息,计算缺陷描述与每个缺陷类别描述的语义相似度,并采用多热编码标记对应的缺陷类别,组成缺陷典型语义特征向量;
步骤6:将步骤3-5中得到的代码度量特征向量、缺陷空间结构特征向量与缺陷典型语义特征向量组合为多视角特征向量;
步骤7:将目标软件历史代码的多视角特征向量与对应的标签数据输入构建的多任务多视角神经网络模型中完成训练与调优;
步骤8:对目标软件的待测代码按顺序执行步骤2-步骤6,得到待测代码的多视角特征向量;
步骤9:将目标软件待测代码的多视角特征向量输入步骤7中完成训练的多任务多视角神经网络模型中,得到待测代码的缺陷倾向性、位置与类型预测结果。
通过以上步骤,可以基于目标软件已知缺陷情况的历史代码对未知缺陷情况的待测代码中缺陷的有无,缺陷位置与缺陷类型同时进行预测,从而解决传统软件缺陷预测方法仅能完成一项缺陷预测目标而对不同的缺陷预测目标采用不同预测方法时使用复杂度与资源消耗较大的难题,并且能够有效地改善静态分析工具的误报与漏报情况。本发明能够基于集成静态分析与多任务多视角模型同时完成目标代码的缺陷倾向性、位置与类型预测,准确而高效地提供多个方面的缺陷预测信息,帮助开发者完成有效的缺陷挖掘。本发明的原理示意图如图2所示。本发明基于使用多个静态分析方法s1至sn对带分析软件的源代码f至fn得到的静态分析结果,之后对静态分析结果进行集成,提取其中的代码度量信息,代码经过扫描后是否存在缺陷告警,缺陷告警所在代码的位置信息以及具体的缺陷告警的描述信息。之后从集成静态分析结果中,提取出多视角特征,包含代码度量特征、缺陷空间结构特征与缺陷典型语义特征,并生成多视角特征向量。将多视角特征向量输入训练调优后的多任务多视角神经网络模型中,即可同时完成代码的缺陷倾向性预测、缺陷位置预测与缺陷类型预测,并得到相应的多目标缺陷预测结果。此时,本发明可完成准确而高效的多目标软件缺陷预测,并且有效地改善静态分析工具的漏报与误报情况。
其中,步骤1中所述的“收集目标软件历史代码的缺陷数据,包括代码是否存在缺陷、缺陷的代码行数与缺陷的类型,从而为后续的缺陷预测模型训练提供缺陷倾向性、缺陷位置与缺陷类型预测的标签”。其具体做法如下:从软件缺陷库或缺陷数据集中收集目标软件历史代码的缺陷信息,目标软件代码可以由常见的C/C++语言或Java语言编写。编写自动化提取工具将缺陷与否、缺陷的位置与缺陷的具体描述进行提取。之后通过热编码生成对应的缺陷倾向性、缺陷位置与缺陷类型预测的标签,并使用CSV文件进行统一储存。
其中,步骤2中所述的“通过集成静态分析方法提取目标软件历史代码的缺陷信息,包括代码度量信息,代码是否存在缺陷,缺陷所在代码位置以及具体的缺陷描述信息”。其具体做法如下:通过调用对应语言的多个静态分析工具对目标软件历史代码的缺陷进行扫描分析,将多个静态分析工具生成的不同静态分析结果进行提取与集成。其中,代码度量结果通过代码度量软件进行提取,而缺陷分析结果通过开源的静态分析工具进行提取,包括缺陷位置信息与具体描述信息。提取后的缺陷信息通过CSV文件进行统一储存。
其中,步骤3中所述的“从集成静态分析得到的缺陷信息中提取软件代码的度量信息,包括代码行数、圈复杂度、分支语句数等,组成代码度量特征向量”。其具体做法如下:从步骤2中提取的缺陷信息中筛选出11个代码度量指标,包括代码行数、除去空行后的代码行数、语句数、分支语句百分比、注释百分比、方法数、最复杂方法所在行数、最深嵌套块所在行数、最大嵌套深度、平均嵌套深度与圈复杂度。将上述指标合成为一个一维向量,即为代码度量特征向量。它是后续步骤训练预测模型时所需的输入特征的一部分。如果用F1至F11分别表示这11个代码度量指标,则代码度量特征向量可以表示为:
Feature1=[F1,F2,F3,...,F11]。
其中,步骤4中所述的“从集成静态分析得到的缺陷信息中提取软件代码缺陷告警的位置信息,将源代码分为20个代码片段,并采用多热编码标记对应的缺陷位置,组成缺陷空间结构特征向量”。其具体做法如下:从步骤2中提取的缺陷信息中筛选出缺陷所在的代码行数,将代码平均分为20个片段后,通过热编码方式针对缺陷告警行数所在的片段进行标记,生成位置标记向量。并且在标记时,针对每个工具的结果根据告警的严重程度将告警分为Error与Warning两类。将每个工具告警的缺陷位置标记向量进行组合,则可以得到缺陷空间结构特征向量。它也是后续步骤训练预测模型时所需的输入特征的一部分。如果用
Figure BDA0003715217690000061
Figure BDA0003715217690000062
分别表示20段代码中的Error告警数量与Warning告警数量,则缺陷空间结构特征向量可以表示为:
Figure BDA0003715217690000063
其中
Figure BDA0003715217690000064
代表向量间拼接。
其中,步骤5中所述的“从集成静态分析得到的缺陷信息中提取软件代码缺陷告警的描述信息,计算缺陷描述与每个缺陷类别描述的语义相似度,并采用多热编码标记对应的缺陷类别,组成缺陷典型语义特征向量”。其具体做法如下:从步骤2中提取的缺陷信息中筛选出缺陷告警的具体描述,计算缺陷告警的描述与缺陷类型描述的语义相似度,从而通过热编码方式针对缺陷的类型进行标记。其中,我们采用基于Common WeaknessEnumeration的缺陷分类方法Seven Pernicious Kingdoms,它将缺陷分为以下几个类别:如表1所示;
表1
Figure BDA0003715217690000071
之后在标记时,分别计算缺陷描述与缺陷类别名称的相似度,和缺陷描述与缺陷类别内容的相似度,全面地考察该缺陷描述的典型类型,并组成缺陷典型语义特征向量。它是后续步骤训练预测模型时所需的输入特征的最后一部分。如果用
Figure BDA0003715217690000081
Figure BDA0003715217690000082
分别表示缺陷告警的描述与8个缺陷类型名称和缺陷类型描述的相似度,则缺陷典型语义特征向量可以表示为:
Figure BDA0003715217690000083
其中
Figure BDA0003715217690000084
代表向量间拼接。
其中,步骤6中所述的“将步骤3-5中得到的代码度量特征向量、缺陷空间结构特征向量与缺陷典型语义特征向量组合为多视角特征向量”。其具体做法如下:在步骤2-步骤5之后,已经得到了目标软件历史代码的度量特征向量、缺陷空间结构特征向量与缺陷典型语义特征向量。则将上述三个向量进行顺序拼接,得到多视角特征向量,即:
Figure BDA0003715217690000085
其中,步骤7中所述的“将目标软件历史代码的多视角特征向量与对应的标签数据输入构建的多任务多视角神经网络模型中进行训练调优”。其具体做法如下:将目标软件历史代码的多视角特征向量作为构建的多任务多视角神经网络模型的输入特征,以对应的标签数据作为标准输出,配置好训练参数后开展多任务多视角神经网络模型的训练并自动化地完成模型调优。其中,所构建的神经网络模型结构,如下图3所示。它主要包含三个特征编码器与三个任务解码器。其中每个特征编码器都由一个卷积神经网络层(ConvolutionalNeural Networks Layer)、一个门控循环单元网络层(Gated Recurrent Units Layer)与两个全连接网络层组成,用CGRU来表示,且每个编码器对应来自一个视角的输入特征;而每个解码器均由一个门控循环单元网络层与两个全连接网络层组成,用GRU来表示,且每个解码器对应一种预测任务。同时,在编码器完成对于输入的多视角特征向量的编码后,通过向量拼接层进行组合,并输入到空间注意力层中进行训练,获取不同特征的空间重要性并完成多视角特征融合,使得解码器根据不同特征的空间重要性进行有效的解码。最终,三个解码器在训练后能够分别完成缺陷倾向性预测、缺陷位置预测与缺陷类型预测任务。即基于目标软件历史代码调优后的模型,可以用来完成后续针对目标软件待测代码的缺陷预测。
其中,步骤8所述的“对目标软件的待测代码按顺序执行步骤2-步骤6,得到待测代码的多视角特征向量”。其具体做法如下:对目标软件的待测代码进行预测时,需要重复步骤2至步骤6,分别得到目标软件待测代码的代码度量特征向量、缺陷空间结构特征向量与缺陷典型语义特征向量,并组合为多视角特征向量。
其中,步骤9所述的“将目标软件待测代码的多视角特征向量输入步骤7中完成训练的多任务多视角神经网络模型中,得到待测代码的缺陷倾向性、位置与类型预测结果”。其具体做法如下:将步骤8中的目标软件待测代码的多视角特征数据输入至步骤7中训练完成的多任务多视角神经网络模型,则可以获得待测代码的缺陷倾向性、位置与类型预测结果。与原始的静态分析结果相比,模型优化后的结果使漏报误报情况得到了极大的改善,能够准确而高效地实现缺陷的倾向性、位置与类型预测目标。
(三)优点及功效
本发明一种基于多任务多视角学习的多目标软件缺陷预测方法,属于软件缺陷预测领域。本发明方法可以解决传统软件缺陷预测方法仅能完成一项缺陷预测目标而对不同的缺陷预测目标采用不同预测方法时使用复杂度与资源消耗较大的难题,并且能够有效地改善静态分析工具的误报与漏报情况。本发明能够基于集成静态分析方法提取包含代码度量特征、缺陷空间结构特征与缺陷典型语义特征的多视角特征信息。通过本发明所构建的多任务多视角神经网络模型,能够基于所提取的多视角特征信息同时完成目标代码的缺陷倾向性、位置与类型预测,准确而高效地提供多个方面的缺陷预测信息,大幅度改善静态分析的漏报与误报情况,帮助开发者完成有效的缺陷挖掘。
附图说明
图1是本发明实施例提供的方法流程图。
图2是本发明实施例提供的一种基于多任务多视角学习的多目标软件缺陷预测方法的原理示意图。
图3是神经网络模型结构。
图4a是训练过程中三项预测任务的损失函数值变化曲线;其中,实线为训练集结果,而虚线为验证集结果。
图4b是训练过程中三项预测任务的预测准确率变化曲线;其中,实线为训练集结果,而虚线为验证集结果。
具体实施方式
为了更具体地说明本发明实施例中的具体实施方式,下面将以一个开源项目JulietTestSuite 1.3中的代码数据集为例,详细介绍本发明的具体实施方式。它包含用C与C++语言编写的64000多个测试用例与对应的缺陷信息,能够适用并验证本发明中的方法。
(1):收集目标数据集的缺陷数据,包括代码是否存在缺陷、缺陷的代码行数与缺陷的类型,作为相应缺陷预测任务的标签。之后将目标数据集分为历史代码与待测代码,其中历史代码占80%而待测代码占20%。在后续的缺陷预测过程中,本发明中的缺陷预测模型能够在基于目标数据集历史代码的训练调优后,对目标数据集待测代码的缺陷倾向性、缺陷位置与缺陷类型进行预测;
(2):通过集成静态分析方法提取目标软件历史代码的缺陷信息,包括代码度量信息,代码经过扫描后是否存在缺陷告警,缺陷告警所在代码的位置信息以及具体的缺陷告警的描述信息,保存为CSV文件。其中,我们选择了三个常见的针对C/C++语言的开源静态分析工具,分别为Cppcheck,Flawfinder和Tscancode;
(3):从集成静态分析得到的缺陷信息中提取软件代码的11种度量信息,包括代码行数、除去空行后的代码行数、语句数、分支语句百分比、注释百分比、方法数、最复杂方法所在行数、最深嵌套块所在行数、最大嵌套深度、平均嵌套深度与圈复杂度,即Feature1
(4):从集成静态分析得到的缺陷信息中提取软件代码缺陷告警的位置信息,将源代码分为20个代码片段,并采用多热编码标记对应的缺陷位置,组成缺陷空间结构特征向量,即Feature2
(5):从集成静态分析得到的缺陷信息中提取软件代码缺陷告警的描述信息,计算缺陷描述与每个缺陷类别描述的语义相似度,并采用多热编码标记对应的缺陷类别,组成缺陷典型语义特征向量,即Feature3
(6):将步骤3-5中得到的代码度量特征向量、缺陷空间结构特征向量与缺陷典型语义特征向量组合为多视角特征向量,即Feature。部分文件得到的多视角特征向量的前11列,如表2所示:
表2
name lines true_lines Statement sPercent Br Percent Lin Functions Line Numb Line Numb Maximum BAverage Bloc Average C
CWE134_Uncontrolled_Format_Str i148 99 57 10.5 23 5 32 50 5 1.56 2.2
CWE127_Buffer_Underread__mallo 154 101 69 10.1 31.8 5 57 31 4 1.7 2.4
CWE190_Integer_Overflow__int_m 189 132 75 21.3 24.3 7 48 36 3 1.45 3.29
CWE124_Buffer_Underwrite__new_ 157 102 60 6.7 29.3 5 59 33 3 1.57 1.8
CWE134_Uncontrolled_Format_Str i89 54 30 0 25.8 6 35 38 2 0.9 1
CWE23_Relative_Path_Traversal__w 196 144 75 12 16.8 4 66 86 4 1.61 3.5
CWE190_Integer_Overflow__int64_ 178 123 76 11.8 24.2 10 59 32 3 1.18 1.9
CWE124_Buffer_Underwrite__new_ 55 32 18 5.6 40 0 35 45 3 1.44 1.5
CWE122_Heap_Based_Buffer_Over 173 122 84 11.9 27.7 8 37 51 3 1.25 2.25
CWE190_Integer_Overflow__int64_ 105 61 44 0 29.5 5 30 22 1 0.7 1
CWE195_Signed_to_Unsigned_Con 83 42 29 0 37.3 4 24 26 1 0.66 1
CWE121_Stack_Based_Buffer_Over 116 74 48 0 30.2 4 28 46 3 1.23 1
CWE122_Heap_Based_Buffer_Over 102 56 36 0 28.4 4 30 32 1 0.69 1
CWE23_Relative_Path_Traversal__c 123 74 39 10.3 26 4 37 56 5 1.26 2.25
(7):将目标软件历史代码的多视角特征向量Feature与第一步得到的对应的标签数据输入构建如前文所述的多任务多视角神经网络模型中完成训练与调优,我们训练了100个循环,并且在训练集中选取了10%的样本作为验证集,验证训练过程是否出现欠拟合或过拟合情况,可以得到以下的训练过程记录;
由图4a和图4b可以得到,训练过程中训练精度不断提升且损失函数值不断下降并趋于稳定,同时在验证集中并未展示出过拟合或欠拟合的状况,依然能够保持较高的精度,因此训练与调优过程是成功的,可以进行接下来的针对待测代码的缺陷预测。
(8):对目标软件的待测代码按顺序执行步骤2-步骤6,得到待测代码的多视角特征向量;
(9):将目标软件待测代码的多视角特征向量输入步骤7中完成训练的多任务多视角神经网络模型中,得到待测代码的缺陷倾向性、位置与类型预测结果,具体内容如下:
1)缺陷倾向性预测结果,如表3所示;
表3
Figure BDA0003715217690000121
Figure BDA0003715217690000131
其中,Acc表示准确度Accuracy,Rec表示召回率Recall,Pre表示精准率Precision,F表示F1-measure评价指标。它们均为越高越好,且Rec与Pre均可以反应各个预测方法的误报与漏报情况。而下标中avg表示所有代码文件计算出的平均值。因此我们可以看出,本发明中的方法在完成缺陷倾向性预测时,与三种静态分析工具相比在准确度、召回率、精准率等评价指标方面均有较大的提升,同时有效地减少静态分析工具的漏报误报现象,能够完成有效的缺陷倾向性预测。
2)缺陷位置预测结果,如表4所示;
表4
Metric Cppcheck Tscancode FlawFinder Proposed
Sub<sub>acc</sub> 0.9682 0.9680 0.9535 0.9928
Sub<sub>pre</sub> 0.4867 0.2644 0.1081 0.9018
Sub<sub>rec</sub> 0.0114 0.0041 0.0653 0.8723
其中,Sub表示模型输出的结果,而下标中的acc代表准确度Accuracy,rec表示召回率Recall,pre表示精准率Precision。它们均为越高越好,且Rec与Pre均可以反应各个预测方法的误报与漏报情况。因此我们可以看出,本发明中的方法在完成缺陷位置预测时,与三种静态分析工具相比在准确度、召回率、精准率等评价指标方面均有较大的提升,同时有效地减少静态分析工具的漏报误报现象,能够完成有效的缺陷位置预测。
3)缺陷类型预测结果,如表5所示;
表5
Metric Cppcheck Tscancode FlawFinder Proposed
Sub<sub>acc</sub> 0.8659 0.8603 0.8437 0.9879
Sub<sub>pre</sub> 0.4046 0.2177 0.2798 0.9545
Sub<sub>rec</sub> 0.0051 0.0192 0.1019 0.9485
其中,Sub表示模型输出的结果,而下标中的acc代表准确度Accuracy,rec表示召回率Recall,pre表示精准率Precision。它们均为越高越好,且Rec与Pre均可以反应各个预测方法的误报与漏报情况。因此我们可以看出,本发明中的方法在完成缺陷类型预测时,与三种静态分析工具相比在准确度、召回率、精准率等评价指标方面同样均有较大的提升,同时有效地减少静态分析工具的漏报误报现象,能够完成有效的缺陷类型预测。
4)结果总结:
基于上述结果,我们可以验证本发明中的方法能够同时准确而有效地预测出待测代码中的缺陷倾向性、缺陷位置与缺陷类型,从而有效地提高软件缺陷预测的效率与准确率。并且与三种静态分析工具相比,本发明中的方法显着地减少了误报和漏报情况。因此,本发明能够从多个角度对软件开发者提供更加全面而准确的缺陷预测信息,从而高效的完成缺陷挖掘并有效地提升软件的质量与可靠性。

Claims (10)

1.一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:
步骤1:收集目标软件历史代码的缺陷数据,包括代码是否存在缺陷、缺陷的代码行数与缺陷的类型,为后续的缺陷预测模型训练提供缺陷倾向性、缺陷位置与缺陷类型预测的标签;
步骤2:通过集成静态分析方法提取目标软件历史代码的缺陷信息,包括代码度量信息,代码经过扫描后是否存在缺陷告警,缺陷告警所在代码的位置信息以及具体的缺陷告警的描述信息;
步骤3:从集成静态分析得到的缺陷信息中提取软件代码的度量信息,包括代码行数、圈复杂度及分支语句数,组成代码度量特征向量;
步骤4:从集成静态分析得到的缺陷信息中提取软件代码缺陷告警的位置信息,将源代码分为20个代码片段,并采用多热编码标记对应的缺陷位置,组成缺陷空间结构特征向量;
步骤5:从集成静态分析得到的缺陷信息中提取软件代码缺陷告警的描述信息,计算缺陷描述与每个缺陷类别描述的语义相似度,并采用多热编码标记对应的缺陷类别,组成缺陷典型语义特征向量;
步骤6:将步骤3-5中得到的代码度量特征向量、缺陷空间结构特征向量与缺陷典型语义特征向量组合为多视角特征向量;
步骤7:将目标软件历史代码的多视角特征向量与对应的标签数据输入构建的多任务多视角神经网络模型中完成训练与调优;
步骤8:对目标软件的待测代码按顺序执行步骤2-步骤6,得到待测代码的多视角特征向量;
步骤9:将目标软件待测代码的多视角特征向量输入步骤7中完成训练的多任务多视角神经网络模型中,得到待测代码的缺陷倾向性、位置与类型预测结果。
2.根据权利要求1所述的一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:在步骤1中,具体为:从软件缺陷库或缺陷数据集中收集目标软件历史代码的缺陷信息,目标软件代码由常见的C/C++语言或Java语言编写;编写自动化提取工具将缺陷与否、缺陷的位置与缺陷的具体描述进行提取;之后通过热编码生成对应的缺陷倾向性、缺陷位置与缺陷类型预测的标签,并使用CSV文件进行统一储存。
3.根据权利要求1所述的一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:在步骤2中,具体为:通过调用对应语言的多个静态分析工具对目标软件历史代码的缺陷进行扫描分析,将多个静态分析工具生成的不同静态分析结果进行提取与集成;其中,代码度量结果通过代码度量软件进行提取,而缺陷分析结果通过开源的静态分析工具进行提取,包括缺陷位置信息与具体描述信息;提取后的缺陷信息通过CSV文件进行统一储存。
4.根据权利要求1或2或3所述的一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:在步骤3中,具体为:从步骤2中提取的缺陷信息中筛选出11个代码度量指标,包括代码行数、除去空行后的代码行数、语句数、分支语句百分比、注释百分比、方法数、最复杂方法所在行数、最深嵌套块所在行数、最大嵌套深度、平均嵌套深度与圈复杂度;将上述指标合成为一个一维向量,即为代码度量特征向量;它是后续步骤训练预测模型时所需的输入特征的一部分;用F1至F11分别表示这11个代码度量指标,则代码度量特征向量表示为:Feature1=[F1,F2,F3,...,F11]。
5.根据权利要求1或2或3所述的一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:在步骤4中,具体为:从步骤2中提取的缺陷信息中筛选出缺陷所在的代码行数,将代码平均分为20个片段后,通过热编码方式针对缺陷告警行数所在的片段进行标记,生成位置标记向量;并且在标记时,针对每个工具的结果根据告警的严重程度将告警分为Error与Warning两类;将每个工具告警的缺陷位置标记向量进行组合,得到缺陷空间结构特征向量;它也是后续步骤训练预测模型时所需的输入特征的一部分;用
Figure FDA0003715217680000031
Figure FDA0003715217680000032
分别表示20段代码中的Error告警数量与Warning告警数量,则缺陷空间结构特征向量表示为:
Figure FDA0003715217680000033
其中
Figure FDA0003715217680000034
代表向量间拼接。
6.根据权利要求1或2或3所述的一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:在步骤5中,具体为:从步骤2中提取的缺陷信息中筛选出缺陷告警的具体描述,计算缺陷告警的描述与缺陷类型描述的语义相似度,从而通过热编码方式针对缺陷的类型进行标记;其中,采用基于Common Weakness Enumeration的缺陷分类方法SevenPernicious Kingdoms,它将缺陷分运行环境、告警处理、API处理不当、输入验证不当、代码质量较差、封装不充分、安全特征相关及时间和状态相关,共计8个缺陷类型;之后在标记时,分别计算缺陷描述与缺陷类别名称的相似度,和缺陷描述与缺陷类别内容的相似度,全面地考察该缺陷描述的典型类型,并组成缺陷典型语义特征向量;是后续步骤训练预测模型时所需的输入特征的最后一部分;用
Figure FDA0003715217680000041
Figure FDA0003715217680000042
分别表示缺陷告警的描述与8个缺陷类型名称和缺陷类型描述的相似度,则缺陷典型语义特征向量表示为:
Figure FDA0003715217680000043
其中
Figure FDA0003715217680000044
代表向量间拼接。
7.根据权利要求6所述的一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:在步骤6中,具体为:在步骤2-步骤5之后,已经得到了目标软件历史代码的度量特征向量、缺陷空间结构特征向量与缺陷典型语义特征向量;则将上述三个向量进行顺序拼接,得到多视角特征向量,即:
Figure FDA0003715217680000045
8.根据权利要求7所述的一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:在步骤7中,具体为:将目标软件历史代码的多视角特征向量作为构建的多任务多视角神经网络模型的输入特征,以对应的标签数据作为标准输出,配置好训练参数后开展多任务多视角神经网络模型的训练并自动化地完成模型调优;其中,所构建的神经网络模型结构,它包含三个特征编码器与三个任务解码器;其中每个特征编码器都由一个卷积神经网络层Convolutional Neural NetworksLayer、一个门控循环单元网络层GatedRecurrentUnitsLayer与两个全连接网络层组成,用CGRU来表示,且每个编码器对应来自一个视角的输入特征;而每个解码器均由一个门控循环单元网络层与两个全连接网络层组成,用GRU来表示,且每个解码器对应一种预测任务;同时,在编码器完成对于输入的多视角特征向量的编码后,通过向量拼接层进行组合,并输入到空间注意力层中进行训练,获取不同特征的空间重要性并完成多视角特征融合,使得解码器根据不同特征的空间重要性进行有效的解码;最终,三个解码器在训练后能够分别完成缺陷倾向性预测、缺陷位置预测与缺陷类型预测任务;即基于目标软件历史代码调优后的模型,用来完成后续针对目标软件待测代码的缺陷预测。
9.根据权利要求1所述的一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:在步骤8中,具体为:对目标软件的待测代码进行预测时,需要重复步骤2至步骤6,分别得到目标软件待测代码的代码度量特征向量、缺陷空间结构特征向量与缺陷典型语义特征向量,并组合为多视角特征向量。
10.根据权利要求1所述的一种基于多任务多视角学习的多目标软件缺陷预测方法,其特征在于:在步骤9中,具体为:将步骤8中的目标软件待测代码的多视角特征数据输入至步骤7中训练完成的多任务多视角神经网络模型,获得待测代码的缺陷倾向性、位置与类型预测结果;与原始的静态分析结果相比,模型优化后的结果使漏报误报情况得到了改善,实现缺陷的倾向性、位置与类型预测目标。
CN202210734560.4A 2022-06-27 2022-06-27 一种基于多任务多视角学习的多目标软件缺陷预测方法 Pending CN115221045A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210734560.4A CN115221045A (zh) 2022-06-27 2022-06-27 一种基于多任务多视角学习的多目标软件缺陷预测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210734560.4A CN115221045A (zh) 2022-06-27 2022-06-27 一种基于多任务多视角学习的多目标软件缺陷预测方法

Publications (1)

Publication Number Publication Date
CN115221045A true CN115221045A (zh) 2022-10-21

Family

ID=83609793

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210734560.4A Pending CN115221045A (zh) 2022-06-27 2022-06-27 一种基于多任务多视角学习的多目标软件缺陷预测方法

Country Status (1)

Country Link
CN (1) CN115221045A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115629995A (zh) * 2022-12-21 2023-01-20 中南大学 基于多依赖lstm的软件缺陷定位方法、系统及设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115629995A (zh) * 2022-12-21 2023-01-20 中南大学 基于多依赖lstm的软件缺陷定位方法、系统及设备

Similar Documents

Publication Publication Date Title
CN110413788B (zh) 会话文本的场景类别的预测方法、系统、设备和存储介质
CN111949535B (zh) 基于开源社区知识的软件缺陷预测装置及方法
CN110162972B (zh) 一种基于语句联合编码深度神经网络的uaf漏洞检测方法
CN113127339B (zh) 一种Github开源平台数据的获取方法及源代码缺陷修复系统
CN113920053A (zh) 基于深度学习的瑕疵检测方法、计算设备和存储介质
CN113961241A (zh) 一种基于gat图神经网络模型的代码克隆检测方法
CN113138920B (zh) 基于知识图谱与语义角色标注的软件缺陷报告分派方法及装置
CN108664237B (zh) 一种基于启发式和神经网络的非api成员推荐方法
CN111858323B (zh) 一种基于代码表示学习的即时软件缺陷预测方法
CN112270187A (zh) 一种基于bert-lstm的谣言检测模型
CN112035345A (zh) 一种基于代码片段分析的混合深度缺陷预测方法
CN117215935A (zh) 一种基于多维度代码联合图表示的软件缺陷预测方法
CN110825642B (zh) 一种基于深度学习的软件代码行级缺陷检测方法
CN115221045A (zh) 一种基于多任务多视角学习的多目标软件缺陷预测方法
US11727052B2 (en) Inspection systems and methods including image retrieval module
CN117520561A (zh) 直升机装配领域知识图谱构建的实体关系抽取方法及系统
CN115017015B (zh) 一种边缘计算环境下程序异常行为检测方法及系统
CN115495085A (zh) 一种基于深度学习细粒度代码模板的生成方法及装置
CN114722960A (zh) 一种业务过程事件日志不完整轨迹检测方法与系统
Jin et al. Machine learning-based categorization of source terms for risk assessment of nuclear power plants
CN114936158B (zh) 一种基于图卷积神经网络的软件缺陷定位方法
CN117251376B (zh) 一种软件缺陷预测方法和系统
CN114356743B (zh) 一种基于序列重建的异常事件自动检测方法和系统
CN114416421B (zh) 一种代码缺陷的自动定位与修复方法
KR102574512B1 (ko) 은유 탐지 장치 및 방법

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination