一种基于区块链溯源与信息检索的软件缺陷定位方法转让专利

申请号 : CN202110280035.5

文献号 : CN113051156B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴晓鸰曾志兵凌捷

申请人 : 广东工业大学

摘要 :

本发明提供一种基于区块链溯源与信息检索的软件缺陷定位方法,包括以下步骤:将所有历史缺陷报告和对应的被修改的源代码文件保存在区块链系统的区块上;对当前新缺陷报告预处理后,构建查询语句;若区块链系统上有未搜索的区块,查询语句在区块链系统中溯源式回选n个区块进行检索;如果不存在未搜索的区块,查询语句对所有源代码文件进行检索;计算检索过程中的最终相关度分数,并对其从大到小进行排序;按照排序结果逐个检查对应的被修改的源代码文件,进行缺陷定位;缺陷定位成功后,将当前新缺陷报告和相应被修改的源代码文件打包保存进新区块,上链区块链系统,完成此次缺陷定位。本发明进行缺陷定位时,兼具效率高和精度高的优点。

权利要求 :

1.一种基于区块链溯源与信息检索的软件缺陷定位方法,其特征在于,所述方法包括以下步骤:

S1:获取历史缺陷报告和历史缺陷报告对应的被修改过的源代码文件,保存在区块链系统的区块上;

S2:向区块链系统提交当前新缺陷报告;

S3:对当前新缺陷报告进行预处理;

S4:基于预处理后的当前新缺陷报告的描述信息构建查询语句,利用查询语句对区块进行搜索;

S5:判断区块链系统上是否存在未搜索过的区块;如果存在未搜索过的区块,转入步骤S6;如果不存在未搜索过的区块,转入步骤S7;

S6:利用查询语句在区块链系统中溯源式回选n个区块进行检索;

S7:利用查询语句在对所有源代码文件进行检索;

S8:计算检索过程中查询语句与历史缺陷报告的第一相关度分数、查询语句与历史缺陷报告对应的被修改的源代码文件的第二相关度分数,整合第一相关度分数和第二相关度分数,获得最终相关度分数;预先设置最终相关度分数的阈值,对大于预设阈值的最终相关度分数从大到小进行排序;

计算最终相关度分数的具体步骤为:S8.1:利用TF‑IDF算法计算查询语句中的词语在当前新缺陷报告中的权重weight(t,q)、查询语句中的词语在历史缺陷报告中的权重weight(t,r)和查询语句中的词语在对应的被修改的源代码文件中的权重weight(t,d),具体方法为:weight(t,q)=tf(t,q)×idf(t,Q)weight(t,r)=tf(t,r)×idf(t,R)weight(t,d)=tf(t,d)×idf(t,D)其中,tf(t,q)为词语t在当前新缺陷报告q中出现的频率;idf(t,Q)为逆文本频率,等于tf(t,q)的导数的对数值;tf(t,r)为词语t在历史缺陷报告r中出现的频率;idf(t,R)为逆文本频率,等于tf(t,r)的导数的对数值;tf(t,d)为词语t在源代码文件d中出现的频率;

idf(t,D)为逆文本频率,等于rf(t,d)的导数的对数值;

S8.2:基于weight(t,q)和weight(t,r),计算当前新缺陷报告和历史故障报告的第一余弦相似度cos(q,r);基于weight(t,q)和weight(t,d),计算当前新缺陷报告和对应的被修改的源代码文件的第二余弦相似度cos(q,d),具体方法为:

2 2

其中weight (t,q)表示weight(t,q)的平方值,weight (t,r)表示weight(t,r)的平方2

值, weight(t,d)表示weight(t,d)的平方值;

S8.3:基于第一余弦相似度cos(q,r)计算第一相关度分值Score(q,r);基于第二余弦相似度cos(q,d)计算第二相关度分值Score(q,d);

S8.4:基于第一相关度分值Score(q,r)和第二相关度分值Score(q,d)计算最终相关度分值S;

S9:按照最终相关度分数的排序结果逐个检查对应的被修改的源代码文件,进行缺陷定位;

S10:判断缺陷定位是否成功;如果缺陷定位不成功,构建新查询语句,重复步骤S5‑S9,直到缺陷定位成功;如果缺陷定位成功,将当前新缺陷报告和相应被修改的源代码文件打包保存进新区块,上链区块链系统,完成此次缺陷定位。

2.根据权利要求1所述的基于区块链溯源与信息检索的软件缺陷定位方法,其特征在于,所述S1中,保存历史缺陷报告和对应的被修改的源代码文件时,分别将每个历史缺陷报告和对应的被修改的源代码文件打包保存在区块链系统的一个区块上。

3.根据权利要求2所述的基于区块链溯源与信息检索的软件缺陷定位方法,其特征在于,所述S3中,预处理具体包括:对当前新缺陷报告进行文本标准化、停用词移除和词根还原。

4.根据权利要求3所述的基于区块链溯源与信息检索的软件缺陷定位方法,其特征在于,所述S4中,构建查询语句前,利用修订的向量空间模型,将预处理后的当前新缺陷报告的描述信息表示为向量;预处理后的当前新缺陷报告的描述信息包括堆栈跟踪信息、报告者信息和API库的描述。

5.根据权利要求1所述的基于区块链溯源与信息检索的软件缺陷定位方法,其特征在于,所述S8.3中,第一相关度分值Score(q,r)和第二相关度分值Score(q,d)的具体方法为:Score(q,r)=g(#term r)×cos(q,r)Score(q,d)=g(#term d)×cos(q,d)其中,g(#term r)表示历史缺陷报告的长度,g(#term d)表示源代码文件长度。

6.根据权利要求5所述的基于区块链溯源与信息检索的软件缺陷定位方法,其特征在于,所述S8.4中,计算最终相关度分值S的具体方法为:S=α*Score(q,r)+(1‑α)*Score(q,d)其中,α为权重系数。

7.根据权利要求6所述的基于区块链溯源与信息检索的软件缺陷定位方法,其特征在于,所述S8中,采用无需标准化的协调上升算法获得相关度分数从大到小的排序结果。

说明书 :

一种基于区块链溯源与信息检索的软件缺陷定位方法

技术领域

[0001] 本发明涉及信息科学的技术领域,更具体地,涉及一种基于区块链溯源与信息检索的软件缺陷定位方法。

背景技术

[0002] 为修复软件缺陷,开发者需要根据缺陷报告描述,确定该缺陷的源代码位置,即软件缺陷定位。软件工程领域已有基于动态程序分析与静态程序分析的缺陷定位技术帮助开
发者定位缺陷。动态缺陷定位技术是指通过分析程序运行时执行行为判断缺陷位置,此类
方法可以较细粒度的确定缺陷语句在被测程序内的可能位置,但需要耗费很大的运行时间
成本和资源成本,且测试用例的数量和质量对缺陷定位性能影响较大。静态缺陷定位技术
不需要执行测试用例,利用源代码静态分析,对比一系列编程规则,具有判断缺陷位置执行
成本低、使用简单的优点。由于编程规则与程序语言相关,该方法受程序语言限制,定位粒
度比较粗糙,通常定位到文件和方法级别粒度。当前静态缺陷定位研究的一类主流方法是
基于信息检索的软件缺陷定位(IRBL,Information Retrieval‑based Bug Localization)
技术,其目的在于利用缺陷报告内容,半自动或全自动的确定相关源代码文件或函数,从而
降低开发成本,提高开发效率。然而IRBL技术也存在着作为静态缺陷定位方法的不足,目前
IRBL技术只能定位到方法粒度,无法定位到具体代码行,而且缺陷定位准确度受缺陷报告
质量影响较大。
[0003] 2013年6月26日公开的中国专利CN103176905A公开了一种缺陷关联方法,包括:从缺陷报告中提取缺陷对应的代码块,根据所提取的代码块生成缺陷相关代码块序列信息
库;获取所述缺陷相关代码块序列信息库的基本频繁子序列,并消除所述基本频繁子序列
中不满足约束条件的频繁子序列;依据当前频繁子序列对应的缺陷,对缺陷报告中的缺陷
进行分组;根据预设的缺陷关联模式,精化分组的缺陷。该方法可以对缺陷进行精确的分
组,减少部分缺陷的识别工作,提高了工作效率,但无法实现对缺陷的高精度定位。

发明内容

[0004] 本发明为克服上述现有技术对软件缺陷进行定位时,无法兼具效率高和精度高的问题,提供一种基于区块链溯源与信息检索的软件缺陷定位方法,实现了对软件缺陷进行
定位时,兼具效率高和精度高的优点。
[0005] 为解决上述技术问题,本发明的技术方案如下:
[0006] 本发明提供一种基于区块链溯源与信息检索的软件缺陷定位方法,所述方法包括以下步骤:
[0007] S1:获取历史缺陷报告和历史缺陷报告对应的被修改过的源代码文件,保存在区块链系统的区块上;
[0008] S2:向区块链系统提交当前新缺陷报告;
[0009] S3:对当前新缺陷报告进行预处理;
[0010] S4:基于预处理后的当前新缺陷报告的描述信息构建查询语句,利用查询语句对区块进行搜索;
[0011] S5:判断区块链系统上是否存在未搜索过的区块;如果存在未搜索过的区块,转入步骤S6;如果不存在未搜索过的区块,转入步骤S7;
[0012] S6:利用查询语句在区块链系统中溯源式回选n个区块进行检索;
[0013] S7:利用查询语句对所有源代码文件进行检索;
[0014] S8:计算检索过程中查询语句与历史缺陷报告的第一相关度分数、查询语句与历史缺陷报告对应的被修改的源代码文件的第二相关度分数,整合第一相关度分数和第二相
关度分数,获得最终相关度分数;预先设置最终相关度分数的阈值,对大于预设阈值的最终
相关度分数从大到小进行排序;
[0015] S9:按照最终相关度分数的排序结果逐个检查对应的源代码文件,进行缺陷定位;
[0016] S10:判断缺陷定位是否成功;如果缺陷定位不成功,构建新查询语句,重复步骤S5‑S9,直到缺陷定位成功;如果缺陷定位成功,将当前新缺陷报告和相应被修改的源代码
文件打包保存进新区块,上链区块链系统,完成此次缺陷定位。
[0017] 优选地,所述S1中,保存历史缺陷报告和对应的被修改的源代码文件时,分别将每个历史缺陷报告和对应的被修改的源代码文件打包保存在区块链系统的一个区块上。
[0018] 将历史缺陷报告和该缺陷报告对应的被修改过的源代码文件存储在一个区块中,上链区块链系统;对于当前新缺陷报告,先检索已修复的类似缺陷及修改过的源代码文件
会缩短检索时长,提高缺陷定位的效率和准确度。并且,如果一个源代码文件多次修改以修
复同一个缺陷或实现同一个功能,那么这个源代码文件就更有可能是有缺陷的。
[0019] 优选地,所述S3中,预处理具体包括:对当前新缺陷报告进行文本标准化、停用词移除和词根还原。
[0020] 文本标准化:移除当前新缺陷报告中的特殊字符和标点符号后切分成不连续的单词;针对标准化后的当前新缺陷报告,借助英文中的常用停用词进行移除,停用词是指在各
个文档中频繁出现,但在区分不同文档时作用极小的单词;最后将单词转换成对应的词根
形式。
[0021] 优选地,所述S4中,预处理后的当前新缺陷报告的描述信息包括堆栈跟踪信息、报告者信息和API库的描述。
[0022] 堆栈跟踪信息显示了在软件崩溃之前执行的指令序,也可以被认为是可能与缺陷相关的源代码文件的排序列表。使用堆栈跟踪信息的原因是堆栈跟踪信息中具有更高排名
的源代码文件更容易出错,此外,利用堆栈跟踪信息还能减少搜索空间,提高检索效率。基
于报告者信息是因为同一个报告者可能会报告来自相同或类似软件的问题。使用的API库
的描述可以弥合缺陷报告和源代码文件之间的语义代沟,提高了定位性能。
[0023] 优选地,所述S4中,构建查询语句前,利用修订的向量空间模型,将预处理后的当前新缺陷报告的描述信息表示为向量。
[0024] 经典的向量空间模型排序时对待不同文本不是一视同仁的:越短的文本更容易排名靠前,越长的文本通常具有较低的相似性,因而很难排名靠前。然而,在缺陷定位算法中,
较大的源代码文件往往更容易包含缺陷。所以利用修订的向量空间模型,优化文本长度对
相似性的影响。修订后的向量空间模型是基于信息检索的软件缺陷定位技术中常用的相似
度计算方法。
[0025] 优选地,所述S8中,计算最终相关度分数的具体步骤为:
[0026] S8.1:利用TF‑IDF算法计算查询语句中的词语在当前新缺陷报告中的权重weight(t,q)、查询语句中的词语在历史缺陷报告中的权重weight(t,r)和查询语句中的词语在对
应的被修改的源代码文件中的权重weight(t,d);
[0027] S8.2:基于weight(t,q)和weight(t,r),计算当前新缺陷报告和历史故障报告的第一余弦相似度cos(q,r);基于weight(t,q)和weight(t,d),计算当前新缺陷报告和对应
的被修改的源代码文件的第二余弦相似度cos(q,d);
[0028] S8.3:基于第一余弦相似度cos(q,r)计算第一相关度分值Score(q,r);基于第二余弦相似度cos(q,d)计算第二相关度分值Score(q,d);
[0029] S8.4:基于第一相关度分值Score(q,r)和第二相关度分值Score(q,d)计算最终相关度分值S。
[0030] 优选地,所述S8.1中,计算查询语句中的词语在当前新缺陷报告中的权重weight(t,q)、查询语句中的词语在历史缺陷报告中的权重weight(t,r)和查询语句中的词语在对
应的被修改的源代码文件中的权重weight(t,d)的具体方法为:
[0031] weight(t,q)=tf(t,q)×idf(t,Q)
[0032] weight(t,r)=tf(t,r)×idf(t,R)
[0033] weight(t,d)=tf(t,d)×idf(t,D)
[0034] 其中,tf(t,q)为词语t在当前新缺陷报告q中出现的频率;idf(t,Q)为逆文本频率,等于tf(t,q)的导数的对数值;tf(t,r)为词语t在历史缺陷报告r中出现的频率;idf(t,
R)为逆文本频率,等于tf(t,r)的导数的对数值;tf(t,d)为词语t在源代码文件d中出现的
频率;idf(t,D)为逆文本频率,等于tf(t,d)的导数的对数值。
[0035] 优选地,所述S8.2中,计算第一余弦相似度cos(q,r)和第二余弦相似度cos(q,d)的具体方法为:
[0036]
[0037]
[0038] 其中weight2(t,q)表示weight(t,q)的平方值,weight2(t,r)表示weight(t,r)的2
平方值weight(t,d)表示weight(t,d)的平方值。
[0039] 优选地,所述S8.3中,第一相关度分值Score(q,r)和第二相关度分值Score(q,d)的具体方法为:
[0040] Score(q,r)=g(#term r)×cos(q,r)
[0041] Score(q,d)=g(#term d)×cos(q,d)
[0042] 其中,g(#term r)表示历史缺陷报告的长度,g(#term d)表示源代码文件长度。
[0043] 优选地,所述S8.4中,计算最终相关度分值S的具体方法为:
[0044] S=α*Score(q,r)+(1‑α)*Score(q,d)
[0045] 其中,α为权重系数。
[0046] 优选地,所述S8中,采用无需标准化的协调上升算法获得相关度分数从大到小的排序结果。
[0047] 与现有技术相比,本发明技术方案的有益效果是:
[0048] 本方法将历史缺陷报告和对应的被修改的源代码文件,保存在区块链系统的区块上;对于当前新缺陷报告,构建查询语句,若区块链系统中存在未搜索的过的区块,则查询
语句在区块链系统中溯源式检索;不存在未搜索的过的区块时,查询语句再对所有源代码
文件进行检索;通过计算检索过程中的最终相关度分数,对大于预设阈值的最终相关度分
数从大到小进行排序,按照排序结果逐个检查对应的源代码文件,进行定位;定位成功后,
将当前新缺陷报告和相应被修改的源代码文件打包保存进新区块,上链区块链系统,完成
本次缺陷定位,并充实区块链系统中的历史缺陷报告。本发明通过在区块链系统中检索已
修复的历史缺陷及修改过的源代码文件会缩短检索时长,提高缺陷定位的效率和准确度;
计算检索过程中的最终相关度分数,对大于预设阈值的最终相关度分数从大到小,按照排
序结果从最终相关度分数大的源代码文件开始检查,能够更快定位到缺陷,提高缺陷定位
的效率;本方法基于上述步骤,实现了对软件进行缺陷定位时,兼具效率高和精度高的优
点。

附图说明

[0049] 图1为实施例1所述的基于区块链溯源与信息检索的软件缺陷定位方法的流程图。

具体实施方式

[0050] 附图仅用于示例性说明,不能理解为对本专利的限制;
[0051] 为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
[0052] 对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
[0053] 下面结合附图和实施例对本发明的技术方案做进一步的说明。
[0054] 实施例1
[0055] 本实施例提供一种基于区块链溯源与信息检索的软件缺陷定位方法,如图1所示,所述方法包括以下步骤:
[0056] S1:获取所有历史缺陷报告和历史缺陷报告对应的被修改过的源代码文件,保存在区块链系统的区块上;
[0057] S2:向区块链系统提交当前新缺陷报告;
[0058] S3:对当前新缺陷报告进行预处理;
[0059] S4:基于预处理后的当前新缺陷报告的描述信息构建查询语句,利用查询语句对区块进行搜索;
[0060] S5:判断区块链系统上是否存在未搜索过的区块;如果存在未搜索过的区块,转入步骤S6;如果不存在未搜索过的区块,转入步骤S7;
[0061] S6:利用查询语句在区块链系统中溯源式回选n个区块进行检索;
[0062] S7:利用查询语句在对所有源代码文件进行检索;
[0063] S8:计算检索过程中查询语句与历史缺陷报告的第一相关度分数、查询语句与历史缺陷报告对应的被修改的源代码文件的第二相关度分数,整合第一相关度分数和第二相
关度分数,获得最终相关度分数;预先设置最终相关度分数的阈值,对大于预设阈值的最终
相关度分数从大到小进行排序;
[0064] S9:按照最终相关度分数的排序结果逐个检查对应的源代码文件,进行缺陷定位;
[0065] S10:判断缺陷定位是否成功;如果缺陷定位不成功,构建新查询语句,重复步骤S5‑S9,直到缺陷定位成功;如果缺陷定位成功,将当前新缺陷报告和相应被修改的源代码
文件打包保存进新区块,上链区块链系统,完成此次缺陷定位。
[0066] 所述S1中,保存历史缺陷报告和对应的被修改的源代码文件时,分别将每个历史缺陷报告和对应的被修改的源代码文件打包保存在区块链系统的一个区块上。
[0067] 将历史缺陷报告和该缺陷报告对应的被修改过的源代码文件存储在一个区块中,上链区块链系统;对于当前新缺陷报告,先检索已修复的类似缺陷及修改过的源代码文件
会缩短检索时长,提高缺陷定位的效率和准确度。并且,如果一个源代码文件多次修改以修
复同一个缺陷或实现同一个功能,那么这个源代码文件就更有可能是有缺陷的。
[0068] 所述S3中,预处理具体包括:对当前新缺陷报告对当前新缺陷报告进行文本标准化、停用词移除和词根还原。
[0069] 所述S4中,预处理后的当前新缺陷报告的描述信息包括堆栈跟踪信息、报告者信息和API库的描述。
[0070] 堆栈跟踪信息显示了在软件崩溃之前执行的指令序,也可以被认为是可能与缺陷相关的源代码文件的排序列表。使用堆栈跟踪信息的原因是堆栈跟踪信息中具有更高排名
的源代码文件更容易出错,此外,利用堆栈跟踪信息还能减少搜索空间,提高检索效率。基
于报告者信息是因为同一个报告者可能会报告来自相同或类似软件的问题。使用的API库
的描述可以弥合缺陷报告和源代码文件之间的语义代沟,提高了定位性能。
[0071] 所述S4中,构建查询语句前,利用修订的向量空间模型,将预处理后的当前新缺陷报告的描述信息表示为向量。
[0072] 经典的向量空间模型排序时对待不同文本不是一视同仁的:越短的文本更容易排名靠前,越长的文本通常具有较低的相似性,因而很难排名靠前。然而,在缺陷定位算法中,
较大的源代码文件往往更容易包含缺陷。所以利用修订的向量空间模型,优化文本长度对
相似性的影响。
[0073] 所述S8中,计算最终相关度分数的具体步骤为:
[0074] S8.1:利用TF‑IDF算法计算查询语句中的词语在当前新缺陷报告中的权重weight(t,q)、查询语句中的词语在历史缺陷报告中的权重weight(t,r)和查询语句中的词语在对
应的被修改的源代码文件中的权重weight(t,d);
[0075] S8.2:基于weight(t,q)和weight(t,r),计算当前新缺陷报告和历史故障报告的第一余弦相似度cos(q,r);基于weight(t,q)和weight(t,d),计算当前新缺陷报告和对应
的被修改的源代码文件的第二余弦相似度cos(q,d);
[0076] S8.3:基于第一余弦相似度cos(q,r)计算第一相关度分值Score(q,r);基于第二余弦相似度cos(q,d)计算第二相关度分值Score(q,d);
[0077] S8.4:基于第一相关度分值Score(q,r)和第二相关度分值Score(q,d)计算最终相关度分值S。
[0078] 所述S8.1中,计算查询语句中的词语在当前新缺陷报告中的权重weight(t,q)、查询语句中的词语在历史缺陷报告中的权重weight(t,r)和查询语句中的词语在对应的被修
改的源代码文件中的权重weight(t,d)的具体方法为:
[0079] weight(t,q)=tf(t,q)×idf(t,Q)
[0080] weight(t,r)=tf(t,r)×idf(t,R)
[0081] weight(t,d)=tf(t,d)×idf(t,D)
[0082] 其中,tf(t,q)为词语t在当前新缺陷报告q中出现的频率;idf(t,Q)为逆文本频率,等于tf(t,q)的导数的对数值;tf(t,r)为词语t在历史缺陷报告r中出现的频率;idf(t,
R)为逆文本频率,等于tf(t,r)的导数的对数值;tf(t,d)为词语t在源代码文件d中出现的
频率;idf(t,D)为逆文本频率,等于tf(t,d)的导数的对数值。
[0083] 所述S8.2中,计算第一余弦相似度cos(q,r)和第二余弦相似度cos(q,d)的具体方法为:
[0084]
[0085]
[0086] 其中weight2(t,q)表示weight(t,q)的平方值,weight2(t,r)表示weight(t,r)的2
平方值weight(t,d)表示weight(t,d)的平方值。
[0087] 所述S8.3中,第一相关度分值Score(q,r)和第二相关度分值Score(q,d)的具体方法为:
[0088] Score(q,r)=g(#term r)×cos(q,r)
[0089] Score(q,d)=g(#term d)×cos(q,d)
[0090] 其中,g(#term r)表示历史缺陷报告的长度,g(#term d)表示源代码文件长度。
[0091] 所诉S8.4中,计算最终相关度分值S的具体方法为:
[0092] S=α*Score(q,r)+(1‑α)*Score(q,d)
[0093] 其中,α为权重系数。
[0094] 所述S8中,采用无需标准化的协调上升算法获得相关度分数从大到小的排序结果。
[0095] 本实施例结合了基于信息检索的软件缺陷定位技术和区块链溯源技术,充分利用了基于信息检索的软件缺陷定位技术的优点:与基于动态程序分析的缺陷定位相比,基于
信息检索的软件缺陷定位技术计算成本更低。与传统基于静态程序分析的缺陷定位相比,
基于信息检索的软件缺陷定位技术普适性更强。同时,基于信息检索的软件缺陷定位技术
针对性更强,能够针对给定当前新缺陷报告和历史缺陷报告,充分利用缺陷报告提供的信
息,分析缺陷所在源代码文件位置。同时利用区块链技术,使基于信息检索的软件缺陷定位
技术在数据预处理和工程应用等方面提供更加有效的管理和实现,提高算法的有效性,降
低了算法实现的成本和难度,提供了统一的数据存储和管理,具有更高的安全性和可靠性。
[0096] 显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可
以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本
发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求
的保护范围之内。