CN115525552B - 一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法 - Google Patents

一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法

Info

Publication number
CN115525552B
CN115525552B CN202211156898.2A CN202211156898A CN115525552B CN 115525552 B CN115525552 B CN 115525552B CN 202211156898 A CN202211156898 A CN 202211156898A CN 115525552 B CN115525552 B CN 115525552B
Authority
CN
China
Prior art keywords
defect
source code
report
reports
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.)
Active
Application number
CN202211156898.2A
Other languages
English (en)
Other versions
CN115525552A (zh
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.)
Guangdong University of Technology
Original Assignee
Guangdong University of Technology
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 Guangdong University of Technology filed Critical Guangdong University of Technology
Priority to CN202211156898.2A priority Critical patent/CN115525552B/zh
Publication of CN115525552A publication Critical patent/CN115525552A/zh
Application granted granted Critical
Publication of CN115525552B publication Critical patent/CN115525552B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/362Debugging of software
    • G06F11/366Debugging of software using diagnostics

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法,包括:对历史缺陷报告和该缺陷报告中的源代码文件进行方法体提取,计算其余弦相似度并且进行排序;对排序后的方法体进行扩充处理;将历史缺陷报告和该缺陷报告中的源代码文件中提取的所有方法体保存在区块链系统的区块上;提交当前新的缺陷报告;对当前新的缺陷报告经过方法体提取以及扩充处理后,构造查询语句;判断区块链系统中是否存在未检索过的区块,或构造查询语句继续查询,或计算余弦相似度并进行排名并进行缺陷定位;判断软件缺陷定位是否成功,或进行信息处理并打包上传,或构造查询语句并重新进行查询,直到定位成功。本发明将软件缺陷定位精细化到方法级,解决了方法体中的词项稀疏问题,同时利用区块链技术,使基于方法级别的细粒度软件缺陷定位技术在工程应用等方面提供更加有效的管理和实现,降低了缺陷定位技术的实现成本和难度,提供了统一的数据存储和管理,并且具有一定的安全性和可靠性。

Description

一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法
技术领域
本发明属于软件缺陷定位领域,具体涉及一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法。
背景技术
软件缺陷是计算机程序或系统中的错误、故障或瑕疵,导致其产生不正确或意料之外的行为方式,会导致软件产品在某种程度上不能满足用户的需求,在软件项目开发过程中,一些缺陷跟踪系统通常被用于管理缺陷,如Bugzilla、JIRA,这些缺陷跟踪系统被用于管理软件项目开发中缺陷报告的提交、确认、分配、修复、关闭等整个软件缺陷的生命周期,对于一个大型软件项目来说,每天都会收到用户提交的大量软件缺陷报告,而且修复这些软件缺陷耗费了缺陷修复人员大量的时间和精力。
一旦软件缺陷报告被缺陷管理人员所确认和分派给开发人员进行缺陷修复,那么被指派的缺陷修复人员就要进行缺陷定位,也就是找出为修复该缺陷所需修改的代码片段,然后进行缺陷修复。对于一个软件维护人员来说,想要修复一个缺陷,首先必须对缺陷相关信息进行充分了解。因此,软件维护人员必须阅读大量的软件源代码来帮助自己确定缺陷所在的位置。当缺陷报告和源代码文件的数量非常多的时候,软件缺陷定位就是一件非常费时费工的任务。如果一个缺陷久久不能定位到正确的位置,那么缺陷修复的时间就会增加,相应的软件项目的维护成本也会增加,同时用户对软件产品的满意度会下降。所以如果有一种自动化的技术来帮助缺陷修复人员进行缺陷定位,那将大大减少缺陷修复所耗费的时间,同时也会减少软件维护成本。
软件缺陷定位方法一般分为静态定位方法和动态定位方法。静态缺陷定位依赖于软件缺陷报告、源代码和开发过程静态信息来进行软件缺陷定位。动态缺陷定位依赖于插桩技术、执行监控和形式化方法等技术来进行软件运行时状态跟踪,以确定软件缺陷可能发生的位置。目前的缺陷定位方法,无论是静态定位方法还是动态定位方法大多数将缺陷定位的位置放在了文件级别。也就是说,现有的缺陷定位技术在很大的粒度上辅助缺陷修复人员找到了引起缺陷发生的某些源代码文件。但是,具体在该源代码文件中的哪个位置(即缺陷发生在该文件中的哪个方法),还需要软件维护人员进一步修改调试加以确定。
发明内容
为了解决背景技术问题,本发明提供了基于区块链溯源与方法级别的细粒度软件缺陷定位方法,该方法的方法级别的细粒度软件缺陷定位将软件缺陷定位为方法级别,解决了方法体中的词项稀疏问题,同时利用区块链技术,使基于方法级别的细粒度软件缺陷定位技术在工程应用等方面提供更加有效的管理和实现,降低了缺陷定位技术的实现成本和难度,提供了统一的数据存储和管理,并且具有一定的安全性和可靠性。
从数据存储的角度理解,区块链是一种数据存储的单位。区块链技术是一种按照时间顺序将数据区块以链条的方式组合成特定数据结构,并以密码学方式保证其不可篡改、不可伪造的去中心化共享总账,能够安全存储简单的、有先后关系、能在系统内验证的数据。在区块链中,数据存储在链式结构相连的数据区块中,每个区块被分为区块头和区块体两部分:区块头中包含前一个区块的哈希值、时间戳等信息;区块体包含一系列由交易方对其进行数字签名的交易记录;新区块按照时间顺序添加在前一个区块的后面,逐渐形成一条拥有时间维度的链条,能够记录所有交易的分布式账本,从而保证数据的真实性和可追溯性。
对于目前大多数大型软件项目开发和维护会利用多个系统进行,现有的基于信息检索的软件缺陷定位技术利用这些系统中的多种特征来提高算法的有效性,从而使得软件缺陷定位技术数据存储和管理复杂,缺乏安全性和可靠性。
本发明提出了一种基于区块链溯源和方法级别的细粒度软件缺陷定位技术,首先,将所有源文件经过处理后上传到区块链系统的区块中作为查询对象,对于当前新的缺陷报告(包括缺陷报告中的总结内容summery,描述内容discription,和评论内容comment),进行处理,利用区块链智能合约技术,构造查询语句和查询重建。
本发明的一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法结合了IRBL技术和区块链溯源技术,并且将IRBL技术降低到方法级别的细粒度的软件缺陷定位技术,基于word2vec词向量的文档向量表示方法中的Skip-gram模型对历史缺陷报告中的源代码方法体内容进行向量表示。具体地,本软件缺陷定位方法,包括以下步骤:
S1:对历史缺陷报告和该缺陷报告中的源代码文件进行方法体提取,计算其余弦相似度并且进行排序,具体实施步骤:
S101:从源代码文件中通过抽象语法树AST来实现对源代码文件的解析,提取出的方法体记作mi,其中,1<=i<=n,n为源代码方法体的总数;
S102:每个方法体进行文本预处理,包括依据Java编程驼峰命名规则从方法名中分离英文单词,去掉停用词,去掉Java保留关键字、去掉各种符号,得到预处理后的方法m′i
S103:将所有的缺陷报告bri和方法m′i通过Skip-gram模型训练,得到m′i中每个词对应的N为词向量w,w=(v1,v2,...,vN),其中vN表示在第N个维度的值;Skip-gram模型的最低频率设置为1,窗口数设置为5,并且维度N的值设置为300;
S104:计算每个词向量的tfidf值,{t1,t2,...,tm}表示从方法体m′i中提取出的词项,m表示词干总数,对于单个词项ti,其tfidf计算公式为:
tfidf(ti)=tf(ti)×idf(ti)
tfidf公式中词汇频率tf(ti),逆文本频率idf(ti)公式如下:
是指方法mj中的词干ti的频率,是指词干ti的方法数量,|M|表示所有源文件中方法数量的总和;对于每个方法Mj,其中,1≤j≤|M|,其经过词向量表示集合tfidf处理后的表示形式为:
其中,表示此项ti的词向量;
S105:以第k,其中,1≤k≤|M|个方法作为查询,将其他方法其中,i≠k视作为查询对象;通过计算的余弦相似度进而对其中,i≠k进行排序,由此得到一个大小为|M|-1的序列,通过对所有|M|个方法中的每一个方法的相似方法进行排序,从而得到|M|个大小为|M|-1的序列;方法和方法的夹角余弦相似度为Sk,1,Sk,2,...,Sk,|M|-1,其对应的公式为:
S2:对排序后的方法体进行扩充处理;
S3:将历史缺陷报告和该缺陷报告中的源代码文件中提取的所有方法体保存在区块链系统的区块上;
S4:提交当前新的缺陷报告;
S5:对当前新的缺陷报告经过方法体提取以及扩充处理后,构造查询语句;
S6:判断区块链系统中是否存在未检索过的区块,如果存在未检索过的区块,则构造查询语句,在区块链系统中溯源世往回选取n个区块进行检索,n是人为规定的自然数,如果不存在未检索过的区块,则计算余弦相似度并进行排名,选取排名靠前的方法体进行软件缺陷定位;
S7:判断软件缺陷定位是否成功,如果软件缺陷定位成功,将此次缺陷定位的缺陷报告和对应的被修改的文件信息经过方法体提取和扩充处理打包放进新区块,上传到区块链系统,如果软件缺陷定位不成功,则构造查询语句,重新进行查询。
优选地,所述的步骤S2具体实施过程为:
根据S1提取得到的方法其中,1≤k≤|M|,计算方法与其他|M|-1个方法之间的夹角余弦相似度的平均值θk,其计算公式如下:
比较方法的夹角余弦相似度的平均值θk和方法与方法之间的夹角余弦相似度Sk,i,如果Sk,ik,则将方法i的向量表示扩充到第k个方法中;并且为了保持方法的原始向量在扩充后的方法向量中占主导地位,需要在方法扩充的时候添加一个启发式扩充速率α,用于控制其他方法其中,i≠k对的扩充影响,扩充后的第k个方法的向量表示为:
优选地,所述的步骤S3具体实施过程为:
将历史缺陷报告和该缺陷报告中的源代码文件中提取的所有方法体保存在区块链系统的区块上;对于当前新缺陷报告,先检索已修复的类似缺陷以及修改过的源代码文件提取出的方法体会缩短检索时长,提高缺陷定位效率和准确度;并且,如果一个源代码文件经过多次修改以修复同一个缺陷或同一个功能,那么这个源代码文件更有可能是有缺陷的。
优选地,所述的步骤S5包括具体实施步骤:
S501:对于第k个新的缺陷报告brk,其包含的词项为将新的缺陷报告通过skip-gram模型进行训练,利用词向量将新的缺陷报告brk中的每个词项wki表示为其中表示在第N个维度的值;
S502:将缺陷报告brk中所有的词向量进行聚集利用最大池化MaxPooling方法在每个特征维度上选取最大值作为brk的表示向量在该维度上的最大值,即中的第i个维度的值为
S503:通过计算缺陷报告和区块上的方法ami之间的余弦相似度来构造查询语句和查询重建,选取相似度较大的方法进行软件缺陷定位,其余弦相似度计算为:
理后的方法体的模。
优选地,本软件缺陷定位方法还包括对定位结果准确率的评估方法,其步骤如下:
S11:计算前N排名Top N Rank:它表示缺陷报告对应做出变更的方法体出现在返回结果的前N,其中,N=(1,5,10)中的数量比率;对于给定的缺陷报告,如果前N个查询结果包含至少一个修复缺陷的方法体,就认为缺陷被准确定位;
S12:计算平均准确率Mean Average Precision,MAP:表示所有缺陷报告进行定位后的准确率的平均值;MAP值反映了缺陷定位方法在全部缺陷上准确定位所有需要修改的源代码的单值指标,检索出来的相关方法体排名越靠前,MAP值越大;单个缺陷的平均精度公式为:
其中R表示一次缺陷定位中所能正确定位的源代码方法体排序的集合,|R|表示正确定位的源代码方法体个数,rankk表示第k个正确的源代码方法体的排名;
所有缺陷报告的MAP公式为:
其中,Q为缺陷报告的集合,|Q|表示Q中缺陷报告的数目,AvgPj表示第j个缺陷报告的平均精度值;
S13:计算平均倒数排名Mean Reciprocal Rank,MRR:表示相关方法体的位置倒数的平均值,该值越高说明方法准确率越高;
平均倒数排名计算公式为:
其中,Q为缺陷报告的集合,|Q|表示Q中缺陷报告的数目,ranki表示定位出的与第i个缺陷报告相关的方法体最靠前排名的位置
本发明的有益效果:
本发明将软件缺陷定位精细化到方法级,解决了方法体中的词项稀疏问题,同时利用区块链技术,使基于方法级别的细粒度软件缺陷定位技术在工程应用等方面提供更加有效的管理和实现,降低了缺陷定位技术的实现成本和难度,提供了统一的数据存储和管理,并且具有一定的安全性和可靠性。。
附图说明
图1本发明实施例方法的流程示意图;
图2本发明实施例中方法体提取与扩充处理流程示意图;
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互结合,下面结合附图和具体实施例对本发明作进一步详细说明。
本发明实施例中若有方向性指示(诸如上、下、左、右、前、后……)仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。
另外,在本发明中若涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。
本发明实施例主要提出了一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法辅助软件缺陷修复人员进行缺陷定位,结合IRBL技术和区块链溯源技术,本发明使用了基于word2vec词向量的文档向量表示方法中的Skip-gram模型对历史缺陷报告(包括缺陷报告中的总结内容summary,描述内容discription,评论内容comment)和历史缺陷报告中的源代码方法体内容进行向量表示,并且计算其余弦相似度进行排序;得到提取和排序好后的方法,对于排序好后的方法体进行方法体扩充处理;将历史缺陷报告和该缺陷报告中的源代码文件中提取排序后的方法保存在区块链系统的区块上;对于当前新提交的缺陷报告,经过方法体提取处理后,通过计算余弦相似度构造查询语句;判断区块链系统是否存在未检索过的区块,如果存在,则构造查询语句,在区块链系统中溯源式往回选取n个区块进行检索,如果不存在未检索过的区块,计算检索过程中的每个经过方法体提取和扩充新提交的缺陷报告与经过方法体提取和扩充的源文件与缺陷报告之间的余弦相似度,并按照由高到低的顺序进行排名,根据排名结果,软件缺陷修复者可以由排序的开头逐个检查对应的源文件,判断此次缺陷定位是否成功,如果成功,将此次缺陷定位的缺陷报告和对应的被修改的文件信息经过方法体提取和扩充处理打包进新区块,上传到区块链系统,如果不成功,则重新构造查询语句重新查询。
请参考图1~2,具体地,本发明实施例的结合了区块链溯源技术以及方法级别的细粒度软件缺陷定位技术,包括以下步骤:
(1)对历史缺陷报告和该缺陷报告中的源代码文件进行方法体提取,计算其余弦相似度并且进行排序;
(2)对排序后的方法体进行扩充处理;
(3)将历史缺陷报告和该缺陷报告中的源代码文件中提取的所有方法体保存在区块链系统的区块上;
(4)提交当前新的缺陷报告;
(5)对当前新的缺陷报告经过方法体提取以及扩充处理后,构造查询语句;
(6)判断区块链系统中是否存在未检索过的区块,如果存在未检索过的区块,则构造查询语句,在区块链系统中溯源世往回选取n个区块进行检索,如果不存在未检索过的区块,则计算余弦相似度并进行排名,选取排名靠前的方法体进行软件缺陷定位;
(7)判断软件缺陷定位是否成功,如果软件缺陷定位成功,将此次缺陷定位的缺陷报告和对应的被修改的文件信息经过方法体提取和扩充处理打包放进新区块,上传到区块链系统,如果软件缺陷定位不成功,则构造查询语句,重新进行查询;
所述步骤(1)过程如下:首先,从源代码文件中通过抽象语法树(AST)来实现对源代码文件的解析,提取出的方法体记作mi,其中,1<=i<=n,n为源代码方法体的总数;然后每个方法体进行文本预处理,包括依据Java编程驼峰命名规则从方法名中分离英文单词,去掉停用词,去掉Java保留关键字、去掉各种符号,
得到预处理后的方法m′i
将所有的缺陷报告bri和方法m′i通过Skip-gram模型训练,得到m′i中每个词对应的N为词向量w,w=(v1,v2,...,vN),其中vN表示在第N个维度的值。Skip-gram模型的最低频率设置为1,窗口数设置为5,并且维度N的值设置为300;
计算每个词向量的tfidf值,{t1,t2,...,tm}表示从方法体m′i中提取出的词项,m表示词干总数,对于单个词项ti,其tfidf计算公式为:
tfidf(ti)=tf(ti)×idf(ti)
tfidf公式中词汇频率tf(ti),逆文本频率idf(ti)公式如下:
是指方法mj中的词干ti的频率,是指词干ti的方法数量,|M|表示所有源文件中方法数量的总和;对于每个方法Mj,其中,1≤j≤|M|,其经过词向量表示集合tfidf处理后的表示形式为:
这里,表示此项ti的词向量。
以第k,其中,1≤k≤|M|个方法作为查询,将其他方法其中,i≠k视作为查询对象。通过计算的余弦相似度进而对其中,i≠k进行排序,由此得到一个大小为|M|-1的序列,通过对所有|M|个方法中的每一个方法的相似方法进行排序,从而得到|M|个大小为|M|-1的序列。
方法和方法的夹角余弦相似度为Sk,1,Sk,2,...,Sk,|M|-1,其对应的公式为:
所述步骤(2)过程如下:
从(1)提取得到的方法其中,1≤k≤|M|,计算方法与其他|M|-1个方法之间(不包括)的夹角余弦相似度的平均值θk,其计算公式如下:
比较方法的夹角余弦相似度的平均值θk和方法与方法之间的夹角余弦相似度Sk,i,如果Sk,ik,则将方法i的向量表示扩充到第k个方法中;并且为了保持方法的原始向量在扩充后的方法向量中占主导地位,需要在方法扩充的时候添加一个启发式扩充速率α,用于控制其他方法其中,i≠k对的扩充影响,扩充后的第k个方法的向量表示为:
所述步骤(3)过程如下:
将历史缺陷报告和该缺陷报告中的源代码文件中提取的所有方法体保存在区块链系统的区块上;对于当前新缺陷报告,先检索已修复的类似缺陷以及修改过的源代码文件提取出的方法体会缩短检索时长,提高缺陷定位效率和准确度。并且,如果一个源代码文件经过多次修改以修复同一个缺陷或同一个功能,那么这个源代码文件更有可能是有缺陷的。
所述步骤(5)过程如下:
对于第k个新的缺陷报告brk,其包含的词项为将新的缺陷报告通过skip-gram模型进行训练,利用词向量将新的缺陷报告brk中的每个词项wk,i表示为其中表示在第N个维度的值。
将缺陷报告brk中所有的词向量进行聚集利用最大池化MaxPooling方法在每个特征维度上选取最大值作为brk的表示向量在该维度上的最大值,即中的第i个维度的值为
通过计算缺陷报告和区块上的方法ami之间的余弦相似度来构造查询语句和查询重建,选取相似度较大的方法进行软件缺陷定位,其余弦相似度计算为:
后的方法体的模。
相应地,发明实施例提出对软件缺陷定位结果准确率的评估方法:
1)计算前N排名(Top N Rank):它表示缺陷报告对应做出变更的方法体出现在返回结果的前N,其中,N=(1,5,10)中的数量比率。对于给定的缺陷报告,如果前N个查询结果包含至少一个修复缺陷的方法体,就认为缺陷被准确定位。
2)计算平均准确率(Mean Average Precision,MAP):表示所有缺陷报告进行定位后的准确率的平均值。MAP值反映了缺陷定位方法在全部缺陷上准确定位所有需要修改的源代码的单值指标。检索出来的相关方法体排名越靠前,MAP值越大。单个缺陷的平均精度公式为:
其中R表示一次缺陷定位中所能正确定位的源代码方法体排序的集合,|R|表示正确定位的源代码方法体个数,rankk表示第k个正确的源代码方法体的排名。
所有缺陷报告的MAP公式为:
其中,Q为缺陷报告的集合,|Q|表示Q中缺陷报告的数目,AvgPj表示第j个缺陷报告的平均精度值。
3)计算平均倒数排名(MeanReciprocalRank,MRR):表示相关方法体的位置倒数的平均值,该值越高说明方法准确率越高。平均倒数排名计算公式为:
其中,Q为缺陷报告的集合,|Q|表示Q中缺陷报告的数目,ranki表示定位出的与第i个缺陷报告相关的方法体最靠前排名的位置。
上述的对实施方式的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。

Claims (5)

1.一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法,其特征在于,包括以下步骤:
S1:对历史缺陷报告和该缺陷报告中的源代码文件进行方法体提取,计算其余弦相似度并且进行排序,具体实施步骤:
S101:从源代码文件中通过抽象语法树AST来实现对源代码文件的解析,提取出的方法体记作mi,其中,1<=i<=n,n为源代码方法体的总数;
S102:每个方法体进行文本预处理,包括依据Java编程驼峰命名规则从方法名中分离英文单词,去掉停用词,去掉Java保留关键字、去掉各种符号,得到预处理后的方法m′i
S103:将所有的缺陷报告bri和方法m′i通过Skip-gram模型训练,得到m′i中每个词对应的N为词向量w,w=(v1,v2,...,vN),其中vN表示在第N个维度的值;Skip-gram模型的最低频率设置为1,窗口数设置为5,并且维度N的值设置为300;
S104:计算每个词向量的tfidf值,{t1,t2,...,tm}表示从方法体m′i中提取出的词项,m表示词干总数,对于单个词项ti,其tfidf计算公式为:
tfidf(ti)=tf(ti)×idf(ti)
tfidf公式中词汇频率tf(ti),逆文本频率idf(ti)公式如下:
是指方法mj中的词干ti的频率,是指词干ti的方法数量,|M|表示所有源文件中方法数量的总和;对于每个方法Mj,其中,1≤j≤|M|,其经过词向量表示集合tfidf处理后的表示形式为:
其中,表示此项ti的词向量;
S105:以第k,其中,1≤k≤|M|个方法作为查询,将其他方法其中,i≠k视作为查询对象;通过计算的余弦相似度进而对其中,i≠k进行排序,由此得到一个大小为|M|-1的序列,通过对所有|M|个方法中的每一个方法的相似方法进行排序,从而得到|M|个大小为|M|-1的序列;方法和方法的夹角余弦相似度为Sk,1,Sk,2,...,Sk,|M|-1,其对应的公式为:
S2:对排序后的方法体进行扩充处理;
S3:将历史缺陷报告和该缺陷报告中的源代码文件中提取的所有方法体保存在区块链系统的区块上;
S4:提交当前新的缺陷报告;
S5:对当前新的缺陷报告经过方法体提取以及扩充处理后,构造查询语句;
S6:判断区块链系统中是否存在未检索过的区块,如果存在未检索过的区块,则构造查询语句,在区块链系统中溯源世往回选取n个区块进行检索,n是人为规定的自然数,如果不存在未检索过的区块,则计算余弦相似度并进行排名,选取排名靠前的方法体进行软件缺陷定位;
S7:判断软件缺陷定位是否成功,如果软件缺陷定位成功,将此次缺陷定位的缺陷报告和对应的被修改的文件信息经过方法体提取和扩充处理打包放进新区块,上传到区块链系统,如果软件缺陷定位不成功,则构造查询语句,重新进行查询。
2.根据权利要求1所述的基于区块链溯源与方法级别的细粒度软件缺陷定位方法,其特征在于,所述的步骤S2具体实施过程为:
根据S1提取得到的方法其中,1≤k≤|M|,计算方法与其他|M|-1个方法之间的夹角余弦相似度的平均值θk,其计算公式如下:
比较方法的夹角余弦相似度的平均值θk和方法与方法之间的夹角余弦相似度Sk,i,如果Sk,ik,则将方法i的向量表示扩充到第k个方法中;并且为了保持方法的原始向量在扩充后的方法向量中占主导地位,需要在方法扩充的时候添加一个启发式扩充速率α,用于控制其他方法其中,i≠k对的扩充影响,扩充后的第k个方法的向量表示为:
3.根据权利要求1所述的基于区块链溯源与方法级别的细粒度软件缺陷定位方法,其特征在于,所述的步骤S3具体实施过程为:
将历史缺陷报告和该缺陷报告中的源代码文件中提取的所有方法体保存在区块链系统的区块上;对于当前新缺陷报告,先检索已修复的类似缺陷以及修改过的源代码文件提取出的方法体会缩短检索时长,提高缺陷定位效率和准确度;并且,如果一个源代码文件经过多次修改以修复同一个缺陷或同一个功能,那么这个源代码文件更有可能是有缺陷的。
4.根据权利要求1所述的基于区块链溯源与方法级别的细粒度软件缺陷定位方法,其特征在于,所述的步骤S5包括具体实施步骤:
S501:对于第k个新的缺陷报告brk,其包含的词项为将新的缺陷报告通过skip-gram模型进行训练,利用词向量将新的缺陷报告brk中的每个词项wk,i表示为其中表示在第N个维度的值;
S502:将缺陷报告brk中所有的词向量进行聚集利用最大池化MaxPooling方法在每个特征维度上选取最大值作为brk的表示向量在该维度上的最大值,即中的第i个维度的值为
S503:通过计算缺陷报告和区块上的方法ami之间的余弦相似度来构造查询语句和查询重建,选取相似度较大的方法进行软件缺陷定位,其余弦相似度计算为:
其中,表示缺陷报告的模,|ami|表示区块上经过扩充处理后的方法体的模。
5.根据权利要求1所述的基于区块链溯源与方法级别的细粒度软件缺陷定位方法,其特征在于,还包括对定位结果准确率的评估方法,其步骤如下:
S11:计算前N排名Top N Rank:它表示缺陷报告对应做出变更的方法体出现在返回结果的前N,其中,N=1,5,10,的数量比率;对于给定的缺陷报告,如果前N个查询结果包含至少一个修复缺陷的方法体,就认为缺陷被准确定位;
S12:计算平均准确率MeanAverage Precision,MAP:表示所有缺陷报告进行定位后的准确率的平均值;MAP值反映了缺陷定位方法在全部缺陷上准确定位所有需要修改的源代码的单值指标,检索出来的相关方法体排名越靠前,MAP值越大;单个缺陷的平均精度公式为:
其中R表示一次缺陷定位中所能正确定位的源代码方法体排序的集合,|R|表示正确定位的源代码方法体个数,rankk表示第k个正确的源代码方法体的排名;
所有缺陷报告的MAP公式为:
其中,Q为缺陷报告的集合,|Q|表示Q中缺陷报告的数目,AvgPj表示第j个缺陷报告的平均精度值;
S13:计算平均倒数排名MeanReciprocal Rank,MRR:表示相关方法体的位置倒数的平均值,该值越高说明方法准确率越高;
平均倒数排名计算公式为:
其中,Q为缺陷报告的集合,|Q|表示Q中缺陷报告的数目,ranki表示定位出的与第i个缺陷报告相关的方法体最靠前排名的位置。
CN202211156898.2A 2022-09-22 2022-09-22 一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法 Active CN115525552B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211156898.2A CN115525552B (zh) 2022-09-22 2022-09-22 一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211156898.2A CN115525552B (zh) 2022-09-22 2022-09-22 一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法

Publications (2)

Publication Number Publication Date
CN115525552A CN115525552A (zh) 2022-12-27
CN115525552B true CN115525552B (zh) 2025-08-19

Family

ID=84699886

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211156898.2A Active CN115525552B (zh) 2022-09-22 2022-09-22 一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法

Country Status (1)

Country Link
CN (1) CN115525552B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111309607A (zh) * 2020-02-12 2020-06-19 扬州大学 一种代码方法级别的软件缺陷定位方法
CN114546699A (zh) * 2022-02-24 2022-05-27 北京工业大学 一种基于查询扩展的新增软件缺陷定位方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105095091B (zh) * 2015-09-23 2018-01-09 南京大学 一种基于倒排索引技术的软件缺陷代码文件定位方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111309607A (zh) * 2020-02-12 2020-06-19 扬州大学 一种代码方法级别的软件缺陷定位方法
CN114546699A (zh) * 2022-02-24 2022-05-27 北京工业大学 一种基于查询扩展的新增软件缺陷定位方法

Also Published As

Publication number Publication date
CN115525552A (zh) 2022-12-27

Similar Documents

Publication Publication Date Title
WO2021175009A1 (zh) 预警事件图谱的构建方法、装置、设备及存储介质
US20100293179A1 (en) Identifying synonyms of entities using web search
CN110716539B (zh) 一种故障诊断分析方法和装置
JP2003519828A (ja) トレーニングデータから導かれる確率的なレコードリンクモデル
TW201421395A (zh) 用以遞迴檢閱網際網路及其他來源以識別、收集、管理、判定及鑑定商業身分與相關資料之系統及方法
CN107844414A (zh) 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法
US9270749B2 (en) Leveraging social media to assist in troubleshooting
CN115422372A (zh) 一种基于软件测试的知识图谱构建方法和系统
CN116680162B (zh) 一种测试用例复用方法、装置、介质、设备及产品
CN115422371A (zh) 一种基于软件测试知识图谱的检索方法
CN116627796A (zh) 一种自动协同进化生产代码和测试用例的方法
CN118467688A (zh) 大模型检索增强生成方法及装置
CN112286799B (zh) 结合句嵌入和粒子群优化算法的软件缺陷定位方法
CN114879945B (zh) 面向长尾分布特征的多样化api序列推荐方法及装置
CN115525552B (zh) 一种基于区块链溯源与方法级别的细粒度软件缺陷定位方法
Revindasari et al. Traceability between business process and software component using Probabilistic Latent Semantic Analysis
CN115048501A (zh) 知识库的优化方法、装置、电子设备及存储介质
CN117194410B (zh) 一种人工智能语言模型生成业务报表的方法及系统
CN111814457B (zh) 一种电网工程合同文本生成方法
CN113051156B (zh) 一种基于区块链溯源与信息检索的软件缺陷定位方法
Hovy Data and knowledge integration for e-government
CN120849301B (zh) 一种测试用例复用自动化管理方法、系统、设备及介质
US20250077528A1 (en) Fast record matching using machine learning
CN119515520B (zh) 事件故障根源定位方法及装置
CN112084577B (zh) 一种基于仿真试验数据的数据处理方法

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
GR01 Patent grant
GR01 Patent grant