一种基于机器学习的软件缺陷确认方法技术

技术编号:21059835 阅读:16 留言:0更新日期:2019-05-08 06:46
本发明专利技术涉及一种基于机器学习的软件缺陷确认方法,包括:步骤一:构建特征向量;步骤二:基于聚类分析的缺陷代码知识库构建,包括:以缺陷代码特征向量集作为数据集输入,聚类集成;对一个数据集进行聚类集成,首先要产生多个聚类结果,然后对这些聚类进行集成;包括进行多个聚类结果收集以及多个聚类结果集成;形成缺陷代码知识库样本;步骤三:基于监督学习的缺陷代码确认,包括:以获得的缺陷代码知识库样本为输入,构建多类分类器并用测试样本判断分类器是否满足评价指标;若不满足评价指标,引入代价函数对分类器进行迭代优化直至满足指标。本发明专利技术完成对误报缺陷和非误报缺陷的分离工作,达到软件缺陷精确确认、提高测试效率的目的。

【技术实现步骤摘要】
一种基于机器学习的软件缺陷确认方法
本专利技术涉及一种软件技术,特别涉及一种基于机器学习的软件缺陷确认方法。
技术介绍
随着软件复杂度日益提高,代码量不断增长,软件的缺陷检测确认也越来越重要。传统的软件静态分析是不执行程序代码而寻找代码中可能存在的错误或评估程序代码的过程,通过扫描程序代码正文对程序的数据流和控制流等进行分析,使系统的设计符合模块化、结构化、面向对象的要求,通过对代码标准及质量的监控提高代码可靠性。现有的软件静态分析经常是基于近似的分析方法,其提供的信息并不总是精确的。不实际执行程序,只是通过对代码的静态扫描来对程序进行分析。软件静态分析所得到的结果中存在大量的误报,需要人工筛选出软件缺陷,这种通过人工判定检测结果的做法已经不足以满足未来软件高速发展的要求。
技术实现思路
本专利技术的目的在于提供一种基于机器学习的软件缺陷确认方法,用于解决上述现有技术的问题。本专利技术一种基于机器学习的软件缺陷确认方法,包括:步骤一:构建特征向量,包括:首先逐条提取缺陷代码集中的缺陷代码片段,采用基于切片分析的代码过滤将缺陷代码片段过滤为最小化缺陷代码片段,然后使用语法分析树方法将代码片段转化为抽象语法树,并根据不同的代码规则,选择合适的C语言关键字集组成多行代码的特征矩阵,再依据特征矩阵合并方法,最终得到缺陷代码特征向量集,供后续机器学习使用;步骤二:基于聚类分析的缺陷代码知识库构建,包括:以缺陷代码特征向量集作为数据集输入,聚类集成;对一个数据集进行聚类集成,首先要产生多个聚类结果,然后对这些聚类进行集成;包括进行多个聚类结果收集以及多个聚类结果集成;形成缺陷代码知识库样本;步骤三:基于监督学习的缺陷代码确认,包括:以获得的缺陷代码知识库样本为输入,构建多类分类器并用测试样本判断分类器是否满足评价指标;若不满足评价指标,引入代价函数对分类器进行迭代优化直至满足指标。本专利技术提出一种基于机器学习的软件缺陷确认方法,以软件静态分析工具的检测结果作为输入,首先,通过切片分析方法提取出缺陷代码行对应的最小化缺陷代码片段,并基于语法树构建最小化缺陷代码特征向量;然后聚类分析依据特征向量,通过特征选择、聚类集成技术构建缺陷代码知识库;最后,基于缺陷代码知识库和监督学习方法构建软件缺陷代码确认模型并进行训练,不断优化模型直至达到规定的准确度,完成对误报缺陷和非误报缺陷的分离工作,达到软件缺陷精确确认、提高测试效率的目的。附图说明图1所示为代码特征向量构建方法的流程;图2为一段简单的程序静态切片示例图;图3为对示例代码的语法抽象树的构建过程示意图;图4所示为聚类集成过程示意图;图5所示为一对其余法分类问题示意图;图6所示为四类问题DAG结构图。具体实施方式为使本专利技术的目的、内容、和优点更加清楚,下面结合附图和实施例,对本专利技术的具体实施方式作进一步详细描述。本专利技术一种基于机器学习的软件缺陷确认方法包括:步骤一:构建特征向量;图1所示为代码特征向量构建方法的流程,如图1所示,代码特征向量构建主要使用了基于切片分析的代码过滤技术和基于语法分析树的特征向量构建方法,本专利技术首先逐条提取缺陷代码集中的缺陷代码片段,采用基于切片分析的代码过滤将缺陷代码片段过滤为最小化缺陷代码片段,然后使用语法分析树方法将代码片段转化为抽象语法树,并根据不同的代码规则,选择合适的C语言关键字集组成多行代码的特征矩阵,再依据特征矩阵合并方法,最终得到量化、精确描述的缺陷代码特征向量集,供后续机器学习使用。1、基于切片分析的代码过滤包括:采用静态切片方法对缺陷代码进行切片分析,首先从一段缺陷代码片段(一条或几条语句)中提取出对应的一组关注变量,然后根据静态后向切片准则,过滤掉无关性代码,提取源代码中对关注的这组变量值有影响的语句,组成新的代码片段,即得到与该变量值相关的最小化缺陷代码片段。为后续软件代码的特征向量构建提供支撑。图2为一段简单的程序静态切片示例图,如图2所示,根据静态后向切片准则,采用基于系统依赖图(SDG)的静态切片算法,实现基于切片分析的代码过滤。SDG静态切片算法把控制依赖和数据依赖以及过程调用关系包含在单个结构中。其兴趣点p是语句“system.out.println(product)”,关注变量为“product”。如图1所示,2、基于语法分析树的特征向量构建,包括:基于语法分析树的特征向量构建是通过对核心代码片段的语法和语义特征分析,从语法分析树抽取特定的关键节点类型对代码进行全方位描述,并构造对应的特征向量,实现对代码特征的量化,作为构建缺陷代码知识库和软件缺陷确认模型的基础。如图1所示,建立基于规则集的代码关键字库包括:通过分析《GJB5369航天型号软件C语言安全子集》、《GJB8114-2013C/C++语言编程安全子集》等C语言编程规范,对软件系统的代码结构、函数名称、参数变量、常量、操作符等制定常见的C语言代码规则集;然后根据规则库中的每条规则,设计其对应代码的关键字库。如表1所示,C语言关键字库示例。表1编号关键字节点命名关键字节点表示信息1forfor循环结构2stmtexp一条语句3decl声明操作4incr自加操作5cond比较操作6vari普通变量7para环境变量8assign赋值操作9block大括弧包含的程序10mul乘法操作11add加法操作12cons常量13type变量类型14fun_call函数调用15fname函数名称建立语法分析树包括:针对上一个环节抽取的最小化缺陷代码片段集,并根据不同规则的关键字,实现代码到语法分析树的映射,语法分析树采用树的形式表达源代码语法、语义结构逻辑信息,一棵子树表示一段连续的源代码,每段代码被解析成由多种类型的节点构成的语法分析树。建立代码特征矩阵和特征向量包括:通过统计各相关节点在语法分析树中出现的次数,以构造相应的特征矩阵。对于目标代码片段,需要分别生成关注点上下文的不同特征向量以构建特征矩阵。建立代码特征矩阵和特征向量具体包括:特征向量生成包括:对于上述代码片段的语法分析树,其中定义了6个非关键节点(for、vari、para、cons、type、和block)。考虑具体整个的语法结构,需要通过定义for节点、block节点为非关键节点来隐藏不同的循环结构的差异;代码中出现了某些参数、变量的添加和删除操作,因此,将vari、para和cons节点定义为非关键节点来隐去参数和变量带来的代码差异。为清晰起见,图3中描述的特征向量忽略了6个非关键节点。上述示例可以用10维向量(stmtexp、decl、incr、cond、assign、mul、add、fun_call、fname、fpara)来描述。特征矩阵生成包括:特征矩阵的生成是对特征向量生成的一个扩展,每个特征矩阵的行向量对应关注点上下文的关键节点向量。本例是对for根节点的特征矩阵的生成描述,其特征矩阵为所有子节点特征矩阵和for节点初始化特征矩阵的累加和。模型需要对整棵树进行一次后续遍历操作生成某些节点的特征矩阵。特征矩阵合并包括:在此过程中,需要设置参数控制合并节点的数量,该参数与节点的词法单元总数,合并节点数量相关,选取的原则是尽可能地降低误报率,最终才能得到量化、精确描述的代码特征向量。步骤本文档来自技高网...

【技术保护点】
1.一种基于机器学习的软件缺陷确认方法,其特征在于,包括:步骤一:构建特征向量,包括:首先逐条提取缺陷代码集中的缺陷代码片段,采用基于切片分析的代码过滤将缺陷代码片段过滤为最小化缺陷代码片段,然后使用语法分析树方法将代码片段转化为抽象语法树,并根据不同的代码规则,选择合适的C语言关键字集组成多行代码的特征矩阵,再依据特征矩阵合并方法,最终得到缺陷代码特征向量集,供后续机器学习使用;步骤二:基于聚类分析的缺陷代码知识库构建,包括:以缺陷代码特征向量集作为数据集输入,聚类集成;对一个数据集进行聚类集成,首先要产生多个聚类结果,然后对这些聚类进行集成;包括进行多个聚类结果收集以及多个聚类结果集成;形成缺陷代码知识库样本;步骤三:基于监督学习的缺陷代码确认,包括:以获得的缺陷代码知识库样本为输入,构建多类分类器并用测试样本判断分类器是否满足评价指标;若不满足评价指标,引入代价函数对分类器进行迭代优化直至满足指标。

【技术特征摘要】
1.一种基于机器学习的软件缺陷确认方法,其特征在于,包括:步骤一:构建特征向量,包括:首先逐条提取缺陷代码集中的缺陷代码片段,采用基于切片分析的代码过滤将缺陷代码片段过滤为最小化缺陷代码片段,然后使用语法分析树方法将代码片段转化为抽象语法树,并根据不同的代码规则,选择合适的C语言关键字集组成多行代码的特征矩阵,再依据特征矩阵合并方法,最终得到缺陷代码特征向量集,供后续机器学习使用;步骤二:基于聚类分析的缺陷代码知识库构建,包括:以缺陷代码特征向量集作为数据集输入,聚类集成;对一个数据集进行聚类集成,首先要产生多个聚类结果,然后对这些聚类进行集成;包括进行多个聚类结果收集以及多个聚类结果集成;形成缺陷代码知识库样本;步骤三:基于监督学习的缺陷代码确认,包括:以获得的缺陷代码知识库样本为输入,构建多类分类器并用测试样本判断分类器是否满足评价指标;若不满足评价指标,引入代价函数对分类器进行迭代优化直至满足指标。2.如权利要求1所述的基于机器学习的软件缺陷确认方法,其特征在于,基于切片分析的代码过滤包括:采用静态切片方法对缺陷代码进行切片分析,首先从一段缺陷代码片段中提取出对应的一组关注变量,然后根据静态后向切片准则,过滤掉无关性代码,提取源代码中对关注的这组变量值有影响的语句,组成新的代码片段,得到与该变量值相关的最小化缺陷代码片段。3.如权利要求2所述的基于机器学习的软件缺陷确认方法,其特征在于,根据静态后向切片准则,采用基于系统依赖图的静态切片算法,实现基于切片分析的代码过滤。4.如权利要求2所述的基于机器学习的软件缺陷确认方法,其特征在于,基于语法分析树的特征向量构建,包括:建立语法分析树,包括:针对抽取的最小化缺陷代码片段集,根据不同规则的关键字,进行代码到语法分析树的映射,语法分析树采用树的形式表达源代码语法以及语义结构逻辑信息,一棵子树表示一段连续的源代码,每段代码被解析成由多种类型的节点构成的语法分析树,建立代码特征矩阵和特征向量;通过统计各相关节点在语法分析树中出现的次数,以构造相应的特征矩阵,对于目标代码片段,需要分别生成关注点上下文的不同特征向量以构建特征矩阵;特征矩阵生成包括:对整棵树进行一次后续遍历操作生成某些节点的特征矩阵;并进行特征矩阵合并。5.如权利要求1所述的基于机器学习的软件缺陷确认方法,其特征在于,聚类集成过程包括:假设数据集X有n个数据对象,X={x1,x2,...,xn},首先对数据集X使用N次聚类算法,得到N个聚类,P={P1,P2,...,PN},其中Pi(i=1,2,3,...,N)为第i次聚类算法得到的聚类结果,通过一致性函数T对P中的聚类结果进行集成得到一个新的数据划分P’。6.如权利要求1所述的基于机器学习的软件缺陷确认方法,其特征在于,基于缺陷代码知识库的缺陷分类器构建包括:在步骤一和步骤二中将缺陷代码根据提取的特征向量进行聚类分析,得到...

【专利技术属性】
技术研发人员:柯文俊刘悦悦江山李雅斯王坤龙
申请(专利权)人:北京计算机技术及应用研究所
类型:发明
国别省市:北京,11

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

1