软件缺陷预测方法及系统技术方案

技术编号:27935026 阅读:23 留言:0更新日期:2021-04-02 14:14
本申请涉及一种软件缺陷预测方法方法及系统,其中,该方法包括:数据获取步骤,用于获取软件历史仓库、缺陷分析报告及待测软件;训练样本获取步骤,用于结合所述软件历史仓库及缺陷分析报告对软件源码是否存在缺陷进行标记构造第一训练样本集,并对存在缺陷的所述软件源码标记源码段对应的缺陷类型构造第二训练样本集;模型预训练步骤,用于构建软件缺陷倾向性分类器及缺陷类型预测模型,并利用所述第一训练样本集及第二训练样本集进行训练构建软件缺陷预测模型;软件缺陷预测步骤,用于将所述待测软件利用软件缺陷预测模型进行软件缺陷预测。通过本申请,可以有效利用源码语法语义信息,缩小缺陷预测的细粒度,还可预测缺陷类型。

【技术实现步骤摘要】
软件缺陷预测方法及系统
本申请涉及软件缺陷预测
,特别是涉及基于深度学习的软件缺陷预测方法及系统。
技术介绍
随着计算机技术日益发展,软件应用在各个领域,如军事装备、航空航天以及人们的日常业务和活动中的影响越来越大,同时,软件功能的多样化与复杂化让软件的规模和结构复杂度不断提高,从而导致的潜在缺陷数量与种类也不断增多,带有缺陷的软件在运行中引起失效轻则会增加开发和维护成本,降低客户满意度,重则将带来无法预料的结果和重大的损失。使用传统的软件测试方法在大型软件密集项目上通过人工审查每个模块的代码来查找软件缺陷需要较高的成本,并且将影响项目进程。传统软件缺陷预测是从软件历史仓库中提取相关记录(软件度量元)来预测当前软件模块的缺陷倾向性。即传统缺陷预测技术可以对软件各个模块的缺陷数量,缺陷概率做出预测,进行排名,通过该排名列表可以反映代码检查或单元测试的优先级。传统软件缺陷预测技术主要从文件、模块或包的层级来进行预测。例如,一个软件缺陷预测模型可以预测一个巨大的文件有缺陷,但是对于开发人员来说,搜索所有的项目文件来找到缺陷是一个非常耗时和耗费精力的项目。传统的缺陷预测技术主要通过软件的一些度量元,如行数、词频数、复杂度度量等来构造预测模型,但是往往忽略了语法和语义方面的捕捉,这样一来会使得某些情况下设计特性不能够准确反映出源代码的缺陷,另一方面主要集中在对软件项目中的文件、模块、包等粗粒度对象进行预测,无法提供具体的缺陷信息,如缺陷类型,以及目前工作的缺陷预测粒度基本都在函数级,粒度太粗导致无法定位缺陷的具体位置。该类信息对于开发者很重要,它们能够指导开发者快速定位缺陷位置,及时修补缺陷。这在代码片段过长(例如,数十行,数百行代码等)时显得尤为重要,但该问题一直未得到有效解决,给开发人员和代码审核人员带来了极大的困难。因而限制了相关技术在真实软件中应用。
技术实现思路
本申请实施例提供了一种软件缺陷预测方法方法及系统,本申请实施例对比传统软件缺陷方法不仅可以有效利用源码语法语义信息,缩小缺陷预测的细粒度,还可预测缺陷类型。第一方面,本申请实施例提供了一种软件缺陷预测方法,包括:数据获取步骤,用于获取软件历史仓库、缺陷分析报告及待测软件;训练样本获取步骤,用于通过对所述软件历史仓库中的软件源码根据设定软件度量元进行度量抽取后利用所述缺陷分析报告标记是否存在缺陷构造第一训练样本集,并通过对存在缺陷的所述软件源码进行解析、提取源码切片及标记源码段对应的缺陷类型构造第二训练样本集;模型预训练步骤,用于构建一软件缺陷倾向性分类器及一缺陷类型预测模型,并利用所述第一训练样本集及第二训练样本集分别对所述软件缺陷倾向性分类器及所述缺陷类型预测模型进行模型训练及参数调整,利用经训练及参数调整的所述软件缺陷倾向性分类器及所述缺陷类型预测模型构建软件缺陷预测模型;软件缺陷预测步骤,用于将所述待测软件经度量后利用所述软件缺陷倾向性分类器预测得到所述待测软件中程序模块是否存在缺陷,并将存在缺陷的代码模块经切片处理并转换为向量后利用所述缺陷类型预测模型预测得到所述待测软件中程序模块的缺陷类型及缺陷位置信息。在其中一些实施例中,所述训练样本获取步骤进一步包括:第一训练样本集获取步骤,用于利用所述缺陷分析报告获取缺陷分布记录并根据所述缺陷分布记录以不同细粒度采集软件源码,得到若干程序模块;根据一设定软件度量元对若干所述程序模块中的软件源码进行度量,并根据所述缺陷分析报告标记所述程序模块是否存在缺陷,构建得到第一训练样本集;具体的,所述第一训练样本集中的样本是由多个特征值组成的向量;其中,所述设定软件度量元用于对软件中的模块属性的定量分析,定量衡量模块的规模、复杂度以及模块与模块之间的关系,具体的,本申请实施例的度量过程考虑但不限于软件的规模度量、复杂性度量、Halstead软件科学法度量和McCabe度量法其一或其任意组合。第二训练样本集获取步骤,用于对存在缺陷的所述程序模块进行解析获取所述软件源码的数据依赖图、控制依赖图与抽象语法树,并根据所述数据依赖图、控制依赖图与抽象语法树对所述软件源码进行切片得到若干源码段,并根据所述缺陷分布记录标记所述源码段对应的缺陷类型,若无缺陷则标注0,有缺陷标注对应的缺陷序号,构建得到第二训练样本集。在其中一些实施例中,所述第一训练样本集获取步骤还包括:删除重复、矛盾的数据,并对缺陷中缺少的特性信息进行补充。在其中一些实施例中,所述第二训练样本集获取步骤还包括:对程序模块进行解析后,过滤源码中的非ASCII字符,举例而非限制,如提示性文字或汉字。在其中一些实施例中,所述模型预训练步骤进一步包括:软件缺陷倾向性分类器预训练步骤,用于构建一基于BP神经网络的软件缺陷倾向性分类器,并利用所述第一训练样本集进行训练,得到预测结果最优的软件缺陷倾向性分类器;缺陷类型预测模型预训练步骤,用于构建一缺陷类型特征学习器,并将所述第二训练样本转换为向量后输入所述缺陷类型特征学习器进行模型训练,将训练结果经一多分类器进行分类,得到预测结果最优的缺陷类型预测模型。具体的,所述缺陷类型特征学习器为基于双向长短时记忆神经网络(Bi-LSTM)构建得到的,所述多分类器为基于softmax层构建得到的。在其中一些实施例中,软件缺陷预测步骤进一步包括:缺陷预测步骤,对所述待测软件根据所述设定度量元进行度量并经软件缺陷倾向性分类器,识别得到存在缺陷的待测软件中程序模块;缺陷类型预测步骤,获取所述待测软件的抽象语法树及关注节点,根据所述抽象语法树生成数据依赖图及控制依赖图后,结合所述关注节点、数据依赖图及控制依赖图对所述待测软件的源码进行切片、标记及向量表示,并利用所述缺陷类型预测模型得到所述待测软件的缺陷类型及其位置信息。进一步的,所述关注节点进一步包括:API调用、运算符使用、跳转、数组创建与引用、指针引用、实例创建。在其中一些实施例中,所述第二训练样本集获取步骤进一步包括:抽象语法树获取步骤,用于利用Clang工具解析所述软件源码获取所述软件源码对应的抽象语法树;图结果获取步骤,用于通过所述抽象语法树分析所述软件源码中每条语句的自定义变量和自定义函数,使用标识符分别按顺序替换自定义变量和自定义函数,生成数据依赖图、控制依赖图;数据切片步骤,用于根据所述关注节点结合所述数据依赖图、控制依赖图对所述软件源码进行切片,切片过程中保留每行源码在原文件中的行数,以确认其位置信息;数据标记步骤,根据所述缺陷分布记录标记所述源码段对应的缺陷类型,若无缺陷则标注0,有缺陷标注对应的缺陷序号。在其中一些实施例中,所述软件缺陷倾向性分类器预训练步骤进一步包括:数据采样步骤,用于利用SMOTE上采样算法(全称theSyntheticMinorityOversamplingTechnique)对所述第一训练样本集进行数据采样,得到采样数据;数据清洗步骤,用于将所述采样数据利用本文档来自技高网
...

【技术保护点】
1.一种软件缺陷预测方法,其特征在于,包括:/n数据获取步骤,用于获取软件历史仓库、缺陷分析报告及待测软件;/n训练样本获取步骤,用于通过对所述软件历史仓库中的软件源码根据设定软件度量元进行度量抽取后利用所述缺陷分析报告标记是否存在缺陷构造第一训练样本集,并通过对存在缺陷的所述软件源码进行解析、提取源码切片及标记源码段对应的缺陷类型构造第二训练样本集;/n模型预训练步骤,用于构建一软件缺陷倾向性分类器及一缺陷类型预测模型,并利用所述第一训练样本集及第二训练样本集分别对所述软件缺陷倾向性分类器及所述缺陷类型预测模型进行模型训练及参数调整,利用经训练及参数调整的所述软件缺陷倾向性分类器及所述缺陷类型预测模型构建软件缺陷预测模型;/n软件缺陷预测步骤,用于将所述待测软件经度量后利用所述软件缺陷倾向性分类器预测得到所述待测软件中程序模块是否存在缺陷,并将存在缺陷的代码模块经切片处理并转换为向量后利用所述缺陷类型预测模型预测得到所述待测软件中程序模块的缺陷类型及缺陷位置信息。/n

【技术特征摘要】
1.一种软件缺陷预测方法,其特征在于,包括:
数据获取步骤,用于获取软件历史仓库、缺陷分析报告及待测软件;
训练样本获取步骤,用于通过对所述软件历史仓库中的软件源码根据设定软件度量元进行度量抽取后利用所述缺陷分析报告标记是否存在缺陷构造第一训练样本集,并通过对存在缺陷的所述软件源码进行解析、提取源码切片及标记源码段对应的缺陷类型构造第二训练样本集;
模型预训练步骤,用于构建一软件缺陷倾向性分类器及一缺陷类型预测模型,并利用所述第一训练样本集及第二训练样本集分别对所述软件缺陷倾向性分类器及所述缺陷类型预测模型进行模型训练及参数调整,利用经训练及参数调整的所述软件缺陷倾向性分类器及所述缺陷类型预测模型构建软件缺陷预测模型;
软件缺陷预测步骤,用于将所述待测软件经度量后利用所述软件缺陷倾向性分类器预测得到所述待测软件中程序模块是否存在缺陷,并将存在缺陷的代码模块经切片处理并转换为向量后利用所述缺陷类型预测模型预测得到所述待测软件中程序模块的缺陷类型及缺陷位置信息。


2.根据权利要求1所述的软件缺陷预测方法,其特征在于,所述训练样本获取步骤进一步包括:
第一训练样本集获取步骤,用于利用所述缺陷分析报告获取缺陷分布记录并根据所述缺陷分布记录以不同细粒度采集软件源码,得到若干程序模块;根据一设定软件度量元对若干所述程序模块中的软件源码进行度量,并根据所述缺陷分析报告标记所述程序模块是否存在缺陷,构建得到第一训练样本集;
第二训练样本集获取步骤,用于对存在缺陷的所述程序模块进行解析获取所述软件源码的数据依赖图、控制依赖图与抽象语法树,并根据所述数据依赖图、控制依赖图与抽象语法树对所述软件源码进行切片得到若干源码段,并根据所述缺陷分布记录标记所述源码段对应的缺陷类型,构建得到第二训练样本集。


3.根据权利要求2所述的软件缺陷预测方法,其特征在于,所述模型预训练步骤进一步包括:
软件缺陷倾向性分类器预训练步骤,用于构建一基于BP神经网络的软件缺陷倾向性分类器,并利用所述第一训练样本集进行训练,得到预测结果最优的软件缺陷倾向性分类器;
缺陷类型预测模型预训练步骤,用于构建一缺陷类型特征学习器,并将所述第二训练样本转换为向量后输入所述缺陷类型特征学习器进行模型训练,将训练结果经一多分类器进行分类,得到预测结果最优的缺陷类型预测模型。


4.根据权利要求1所述的软件缺陷预测方法,其特征在于,软件缺陷预测步骤进一步包括:
缺陷预测步骤,对所述待测软件根据所述设定度量元进行度量并经软件缺陷倾向性分类器,识别得到存在缺陷的待测软件中程序模块;
缺陷类型预测步骤,获取所述待测软件的抽象语法树及关注节点,根据所述抽象语法树生成数据依赖图及控制依赖图后,结合所述关注节点、数据依赖图及控制依赖图对所述待测软件的源码进行切片、标记及向量表示,并利用所述缺陷类型预测模型得到所述待测软件的缺陷类型及其位置信息。


5.根据权利要求2所述的软件缺陷预测方法,其特征在于,所述第二训练样本集获取步骤进一步包括:
抽象语法树获取步骤,用于利用Clang工具解析所述软件源码获取所述软件源码对应的抽象语法树;
图结果获取步骤,用于通过所述抽象语法树分析所述软件源码中每条语句的自定义变量和自定义函数,使用标识符分别按顺序替换自定义变量和自定义函数,生成数据依赖图、控制依赖图;
数据切片步骤,用于根据所述关注节点结合所述数据依赖图、控制依赖图对所述软件源码进行切片,切片过程中保留每行源码在原文件中的行数,以...

【专利技术属性】
技术研发人员:刘影郭栋周进登张泽奇孙凤丽杨隽杨昕
申请(专利权)人:中国航天系统科学与工程研究院
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1