法律状态公告日
法律状态信息
法律状态
2017-07-28
授权
授权
2015-07-08
实质审查的生效 IPC(主分类):G06F11/36 申请日:20150318
实质审查的生效
2015-06-10
公开
公开
技术领域
本发明应用于软件缺陷分析领域,是一种基于开源软件缺陷代码修改模式的缺陷信息提 取方法。
背景技术
随着现代信息技术的发展,计算机软件的应用已经扩展到经济、国防的各个部门,在航 空、航天、核能、通讯等关键领域的应用也日益广泛,这些部门或领域都需要日益复杂的软 件来维持其正常的工作。软件一旦产生失效,就会对这些工作带来严重的后果,在某些高危 系统中甚至会导致灾难性的后果。软件缺陷是导致软件失效的根本原因,对软件缺陷的研究 可以提升软件质量。由于缺陷的数目和种类都很多,需要采集足够数量的软件缺陷数据,采 用合适的缺陷分析方法,才能对软件缺陷进行深入研究。
近年来,开源软件网站的发展汇集了大量的高水平编程人员,开源软件的数量也越来越 多。这些开源软件或通过个人努力或通过集体开发不断更新,逐步完善,积累了大量与软件 缺陷相关的历史信息,即版本演化信息。这些信息通常包含软件各版本的源代码,更改的文 本记录和变更代码等,能一定程度上反映软件的状态,为后续开发工作提供指导。因此,开 源软件的演化过程信息可作为软件缺陷分析研究的数据来源,而现在对开源软件缺陷信息的 分析还很少,因此可以借鉴相关的软件缺陷分析方法对开源软件信息进行分析,并采集缺陷 数据。
软件缺陷模式是对软件中出现的重复或类似的缺陷进行抽象得出的规律描述。对已有软 件缺陷的分析可知,很大数量的缺陷是重复的,或表现形式相同,或产生原因近似,即缺陷 及其产生过程遵循一定的规律。通过对其规律的总结与归纳,可获取软件的缺陷模式。利用 软件缺陷模式可避免类似缺陷的引入及发现类似的缺陷。开源软件演化过程的变更代码信息 也遵循一定的更改规律,可以通过对这些规律的总结归纳得到其缺陷代码修改模式,从而获 取开源软件中的缺陷信息。
因此,可以对开源软件演化过程信息进行分析,提取出其中的缺陷信息及缺陷代码样例, 一方面能够为软件缺陷分析提供数据基础,另一方面提出了一种获取软件缺陷信息的新途径, 在一定程度上促进了软件缺陷研究领域的研究工作。
发明内容
本发明针对目前软件缺陷数据较少,且开源软件演化过程信息未得到充分利用的情况, 提出了一种基于开源软件缺陷代码修改模式的缺陷信息提取方法。
本发明提出的一种基于开源软件缺陷代码修改模式的缺陷信息提取方法,包括以下步骤:
步骤1:根据开源软件演化过程信息,提取缺陷代码修改模式;
根据其变更代码的增删情况,归纳该类缺陷代码修改模式的缺陷特征项,针对单行语句 的特征提出基础缺陷特征项,针对多行语句间的关系提出对比缺陷特征项。基础缺陷特征项 包括代码增删标识、关键词、操作符和语句类型;对比缺陷特征项包括语句操作数变更、语 句操作符变更、函数调用参数变更、以及控制语句内容变更。将缺陷代码修改模式信息以xml 形式存储。
步骤2:分析待测的开源软件的变更代码信息,获取各行代码的信息,包括代码编号、 增删标志、关键词、操作符、语句类型及语句内容。
步骤3:将变更代码信息与缺陷代码修改模式进行匹配,包括基础缺陷特征项匹配和对 比缺陷特征项进行匹配。根据匹配结果从变更代码信息中提取出符合缺陷代码修改模式的缺 陷代码样例。
本发明与现有技术相比,具有以下明显优势:
本发明提出的缺陷信息提取方法,能够针对开源软件的演化过程,根据其缺陷信息变更 代码的特征进行分析,是通过比较各版本间的变更差异进行直接分析,所提出的缺陷代码修 改模式与传统的软件缺陷模式有一定区别;通过该方法能够有效地提取出开源软件演化信息 中的类似的缺陷信息,且能实现自动化的采集工作。能够为软件缺陷分析提供数据支持。
附图说明
图1是本发明开源软件缺陷信息提取方法的整体步骤示意图;
图2是本发明的缺陷代码修改模式的xml表示示意图;
图3是本发明的开源软件变更代码信息分析流程示意图;
图4是本发明的缺陷代码修改模式匹配流程示意图。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图对本发明作进一步的详 细描述。
本发明针对软件缺陷分析中缺陷数据不足,同时开源软件演化过程包含大量缺陷信息这 一情况,在借鉴软件缺陷分类,软件缺陷模式等软件缺陷分析方法的基础上,提出了基于开 源软件缺陷代码修改模式的缺陷信息提取方法,根据对开源软件演化过程中的缺陷更改形式 的归纳总结,得到其缺陷代码的修改模式,然后获取演化信息中变更代码的相关内容,将其 与已有的缺陷代码修改模式进行匹配,从开源软件演化信息的变更代码中提取出缺陷代码样 例信息。
本发明基于开源软件缺陷代码修改模式的缺陷信息提取方法主要由三个部分构成:开源 软件缺陷代码修改模式的获取,开源软件演化过程变更代码的分析,以及开源软件缺陷代码 的提取。
在基于开源软件缺陷代码修改模式的缺陷信息提取过程中,对缺陷代码修改模式的定义 如下:
缺陷代码修改模式是指在开源软件演化过程信息中重复出现的具有一定规律的缺陷代码 修改形式的统一描述。
基于开源软件缺陷代码修改模式的缺陷信息提取方法如图1所示,主要包括三个步骤: 开源软件缺陷代码修改模式的提取,开源软件变更代码的分析,开源软件缺陷代码样例的提 取,下面详细介绍每一步骤。
步骤1:开源软件缺陷代码修改模式的提取,是指对开源软件演化过程中缺陷信息的变 更代码内容进行分析和其规律的归纳总结,得到其缺陷代码修改模式的过程。根据开源软件 缺陷信息的变更代码的增删情况,归纳该类缺陷代码修改模式的缺陷特征项,针对单行语句 的特征提出基础缺陷特征项,针对多行语句间的关系提出对比缺陷特征项。并将缺缺陷代码 修改模式信息以xml形式存储
开源软件缺陷信息的变更代码给出了对该次变更的代码增删等修改情况。若有多个变更 代码的内容都出现相同形式的变更,则认为其属于同一类型的代码修改方式,结合对这些缺 陷变更的文本描述,对其进行抽象归纳可得到缺陷代码修改模式。开源软件缺陷代码修改模 式内容包括缺陷代码修改模式的名称,缺陷代码修改模式的描述以及缺陷特征项。
1)缺陷代码修改模式的名称,它是对该类缺陷信息代码修改规律的总结,指出该类缺陷 信息的主要特征。
2)缺陷代码修改模式的描述,它是对开源软件缺陷进行修改的原因和修改过程的描述, 便于工作人员对该类缺陷代码修改模式的初步了解。
3)缺陷特征项,它是对缺陷代码修改内容的具体阐释,表明了该类代码更改的主要内容 和具体修改方式,是缺陷代码匹配的主要依据。缺陷特征项包括基础缺陷特征项和对比缺陷 特征项两部分。a)基础缺陷特征项,它是缺陷代码修改模式中单行代码的特征。包括代码增 删标识,关键词,操作符,语句类型4项信息。其中,代码增删标识提供了该行代码的改动 情况,包括增添代码,删除代码,不变和其它;关键词和操作符提供了该行代码出现的关键 词和操作符信息,如“if”,“else”,“=”等;语句类型包含编程语言中常见的声明语句,表达式 语句,函数语句,控制语句等基本语句类型,以及空语句、注释语句、说明信息等其它语句 类型。b)对比缺陷特征项,它是两行或多行语句间的比较特征。主要有语句操作数变更,语 句操作符变更,函数调用参数变更,控制语句内容变更等信息。
对上述内容采用XML格式文档表示缺陷代码修改模式信息。图2是对缺陷代码修改模 式的表示。通过XML形式的缺陷代码修改模式文档的半结构化描述,可以了解缺陷修改模 式名称信息、描述信息和缺陷特征项信息。图2中,Name记录缺陷代码修改模式的名称, Description记录缺陷代码修改模式的描述,DefectFeature中是对缺陷特征项的描述,其中, Feature1,Feature2,……是对缺陷基础特征项的描述;CompareFeature是对对比缺陷特征项 的描述。
其中基础缺陷特征项包括代码增删标志,关键词,操作符和语句类型4项,其文档表示, 存储类型及内容如表1所示。
表1:缺陷代码修改模式基础缺陷特征项
对比缺陷特征项为多行语句之间的对比,以表达式形式给出。
步骤2:开源软件变更代码的分析,是指对待测的开源软件变更代码的内容进行提取的 过程,目的是获取各行代码的信息。获取的信息主要包括代码编号、增删标志、关键词、操 作符、语句类型以及各类型语句中的具体内容。其中代码编号是对各行代码的数字编号,增 删标志是该行代码的增删情况,关键词和操作符是该行代码中包含的关键词和操作符内容。 语句类型和内容存储了该行代码的类型和语句包含信息的详细情况,包括对声明语句、表达 式语句、函数语句和控制语句四类语句的类型和内容进行存储。开源软件变更代码分析得到 信息如表2所示。
表2:变更代码信息内容
开源软件的变更代码信息有特定的格式,在信息的提取过程中需要准备关键词表,以便 对变更代码的信息进行获取。关键词表主要包括C++关键字、操作符和特殊识别符。关键词 表如表3所示。
表3:变更代码信息提取关键词表
开源软件变更信息的分析流程如图3所示,对一次变更的变更代码信息,对其内容进行 逐行分析,首先为该行代码进行编号,记录该编号值,然后获取其增删标识符,关键词和操 作符信息,再根据语句中的内容判定语句类型和语句内容。获取语句类型和语句内容的具体 步骤如下:
1)根据“+++”,“---”“diff--git”,“@@”,“index”等特殊识别符判定该行代码是否为说明 内容,若是则该行代码的语句类型为说明语句,并开始进行下一行代码的判定。
2)根据“/*”,“*/”,“*”等注释符号判定该语句是否为注释信息,若是则该行语句类型为 注释语句,并开始进行下一行代码的判定。
3)根据函数关键词扫描结果,若有“void”,“assert”等关键字,则认为此行语句为函数声 明语句。将关键字存入函数名称,关键字后的内容存入函数参数。
4)若语句中的第一个词为基本数据类型关键词char,int,float,double或类型修饰关键 字short,long,signed,unsigned,则该行代码的语句类型为声明语句。将关键字存入声明类 型,关键字之后的数据存入声明内容。
5)若该行语句中有流程控制语句的关键词if,else,while,for等词,则语句类型为控制语 句。将关键字存入控制字,该关键字后的内容存入控制语句内容。
6)除去以上几种类型,再继续判定语句。若该行代码有且仅有一个“=”,则语句类型为 表达式语句。将“=”存入操作符,“=”左、右侧内容存入操作数中。
7)若该行语句无操作符,且有“(”与“)”符号,则该行语句类型为函数语句,将“(”之 前的内容存入函数名称,“(”与“)”之间的内容存入函数参数中。
8)若该行语句都不满足上面1)~7)的判断,则语句类型为其它语句。
根据上述步骤,得到该次变更每一行代码的信息。变更代码信息是缺陷代码匹配的输入。
步骤3:缺陷代码修改模式的匹配,它是将变更代码信息与缺陷代码修改模式进行对比, 找到符合缺陷代码修改模式的缺陷代码样例。缺陷代码修改模式匹配的主要包括基础特征项 的匹配、对比缺陷特征项的匹配和缺陷代码的提取三部分,图4是变更代码信息与缺陷代码 修改模式匹配流程图,首先进行基础缺陷特征项匹配,然后进行对比缺陷特征项匹配,最后 进行缺陷代码提取。
1)基础缺陷特征项匹配,它是变更代码信息与基础缺陷特征项的比较过程。对每行变更 代码进行比较,若某行语句的信息与某个基础缺陷特征项相同,则对该行语句进行标记。当 变更代码信息都比较完成后,提取出所有符合基础缺陷特征项的代码。
2)对比缺陷特征项的匹配,它是符合基础缺陷特征项的变更代码间的比较过程。若语句 信息满足某一个缺陷代码修改模式的全部基础缺陷特征项,则把所有符合该模式基础缺陷特 征项语句的信息内容进行对比,例如变更代码中a、b句符合基础缺陷特征项1,c、d句符合 基础缺陷特征项2,则进行a与c、a与d、b与c、以及b与d四次对比。提取出满足对比缺 陷特征项的语句。若满足对比缺陷特征项的代码编号接近,在设定的范围内,则认为该段变 更代码包含此类缺陷代码修改模式。因为符合缺陷代码修改模式的语句应该相邻或相近,需 要保证代码的间隔在一定范围内,这样可减少误判几率。
3)缺陷代码的提取,它是根据匹配结果从变更代码中提取出符合缺陷代码修改模式的信 息。当基础缺陷特征项和对比缺陷特征项都匹配好后,则将符合条件的变更代码内容导出, 作为该缺陷代码修改模式的代码样例。
通过以上三大步骤得到的基于开源软件缺陷代码修改模式的缺陷信息提取方法适用于软 件缺陷分析中。通过使用该方法对开源软件的缺陷代码样例进行提取,可以得到足够数量的 缺陷信息,作为软件缺陷分析的数据基础。
下面通过实例验证来说明本发明基于开源软件缺陷信息提取方法的有效性。通过对开源 软件网站Github中获取的开源软件演化过程变更代码信息,通过使用基于缺陷代码修改模式 的缺陷信息提取工具对的变更代码进行分析,获取缺陷代码样例,对得到的缺陷代码样例进 行判断,可判断本方法的准确性和可行性。具体实例验证步骤如下:
A.数据的准备。
1)开源软件实验对象的选取。从Github开源软件网站中选择了5个开源软件进行实例 验证,选取的开源软件基本信息如表4所示。
表4:开源软件基本信息表
开源软件程序均为C++语言,因此总结的缺陷代码修改模式也是基于C++语言的。为了 保证程序有足够的更改数和足够的普适性,每个开源软件的开发时间都不少于2年,并且开 发人数在均为10人以上。
2)开源软件缺陷代码修改模式的提取。根据对开源软件演化过程缺陷信息的分析,总结 出4个比较典型的缺陷代码修改模式,如表5所示。
表5:缺陷代码修改模式内容
B.缺陷代码的提取。
1)变更代码的分析,通过开源软件变更代码分析工具对上述5个开源软件的变更代码的 内容进行提取。
2)缺陷代码的匹配,将变更代码与缺陷代码修改模式匹配,得到缺陷代码样例。
其中,对变更代码分析的结果示例如表6所示。
表6:变更代码提取内容示例
对该变更代码分析结果与缺陷代码修改模式进行匹配,可知其信息符合“删除赋值语句” (第9句),“增添if语句”(第15句)。“增添赋值语句”(第16,19句)三个基础缺陷特征 项,同时符合“在if语句后增添赋值语句”的对比缺陷特征项。且其编号都比较接近,可知 其符合“变量赋值前缺少if判定语句错误”的缺陷代码修改模式。因此将符合条件的语句进 行提取,作为该类缺陷代码修改模式的缺陷代码样例。
C.实验结果分析
通过缺陷代码样例的提取,可以将开源软件变更代码中和缺陷代码修改模式相匹配的内 容提取出来,提取出的缺陷代码样例如表7所示。
表7:提取的缺陷代码样例
通过匹配得到的缺陷代码及结果如表8所示。
表8:缺陷代码样例匹配结果
D.实验结果评价
根据开源软件缺陷代码样例的提取结果可知,通过本发明的缺陷代码提取方法可从变更 代码中提取出符合缺陷代码修改模式的缺陷代码,其中匹配到14个if语句表达式内容错误, 10个赋值语句错误,8个函数调用语句参数错误和1个变量赋值前缺少if进行判定错误。且 获取的缺陷代码样例基本符合所提出的缺陷代码修改模式。通过该实例验证说明基于缺陷代 码修改模式的缺陷信息提取方法是可行的。利用本发明方法得到的缺陷代码信息可以为软件 缺陷的分析提供数据基础,该缺陷信息提取方法也可作为软件可靠性相关工作的参考。
机译: 基于动作的过程中软件缺陷预测基于软件开发活动的软件缺陷预测技术
机译: 基于动作的过程中软件缺陷预测基于软件开发活动的软件缺陷预测技术
机译: 基于聚类分析的软件缺陷修复模板提取方法