一种基于多源信息的技术债务严重程度识别方法技术

技术编号:37346238 阅读:11 留言:0更新日期:2023-04-22 21:40
本发明专利技术公开了一种基于多源信息的技术债务严重程度识别方法。方法首先将代码转换成抽象语法树(AST),并利用AST中不同语义路径的加权融合来表示其语义化信息;然后通过抽取方法中包含的不同指标来表示方法的结构化信息;最后基于XGBoost(eXtreme Gradient Boosting)构建分类模型识别方法存在严重技术债务的概率。同时,本发明专利技术使用了数据增强方法,能有效增加样本集多样性,提升模型性能。通过本发明专利技术方法,能有效缓解单一类型信息造成的偏差,更精确地识别技术债务的严重程度。确地识别技术债务的严重程度。确地识别技术债务的严重程度。

【技术实现步骤摘要】
一种基于多源信息的技术债务严重程度识别方法


[0001]本专利技术涉及软件技术债务治理领域,尤其涉及一种基于多源信息的技术债务严重程度识别方法。

技术介绍

[0002]得益于技术债务研究的发展,已经有许多高效的工具可以帮助开发者自动识别代码中的技术债务。然而,在软件开发和维护过程中,存在大量的技术债务,全部偿还是不可能也是不现实的。在实际开发中,由于时间或者资源有限,开发者倾向于优先偿还那些严重程度比较高的技术债务。因此,识别技术债务的严重程度是一项十分重要的任务,其能帮助开发者在新的软件版本发布之前做出最优的决策。
[0003]不幸地是,技术债务严重程度度量方面的研究相对较少。Mensah等人通过人工地对600,000条代码注释进行分析,抽取文本特征来区分严重的和不严重的技术债务,发现在ArgoUML、Chromium、Eclipse和Apache四个项目中,严重的技术债务分别占14%、55%、14%和17%。通过对Hibernate生态系统中的软件进行调研,Limahe等人发现技术债务消除时间与其本身的严重程度有着直接的关系,即严重程度越高的技术债务,需要花费更长时间和代价。同时,超过50%的软件的严重程度高的技术债务往往随着时间的推移,数量不断增加。
[0004]在技术债务严重程度识别问题中,已有的研究主要聚焦实证调研,尚缺乏可靠的方法来度量技术债务的严重程度。为此,本专利技术提出了一种基于多源信息的技术债务严重程度识别方法。方法同时考虑存在技术债务方法代码的语义信息和结构化信息,对技术债务的严重程度进行了精确预测。

技术实现思路

[0005]为了有效识别技术债务的严重程度,本专利技术提供一种基于多源信息的技术债务严重程度识别方法,通过将代码的语义信息和结构信息相结合,能有效提高预测性能。
[0006]本专利技术具体采用的技术方案如下:
[0007]步骤1.获取技术债务严重程度识别所需数据:
[0008]首先,从开源软件仓库中获得项目数据并筛选出其中的Java文件,这些文件都以“.java”结尾。
[0009]其次,使用JavaParser抽取出java文件的所有方法,以及方法对应的起始行和结束行信息,组成四元组mt=<file,method,start,end>,其中file表示文件名,method表示方法级代码,start表示方法起始行号,end表示方法结束行号;所有的四元组组成集合MT=(mt1,mt2,

,mt
l1
),其中l1代表四元组的数量。
[0010]然后,使用SonarQube扫描Java文件得到所有语句级别技术债务实例,每个语句级技术债务实例由一个三元组dt=<file,line,severity>表示,line表示代码行号,severity表示技术债务严重程度。这里的severity以SonarQube提供的度量为参考,并经过
人工检查对误报值进行了改正。所有的三元组组成集合DT=(dt1,dt2,

,dt
l2
),其中l2代表三元组的数量。
[0011]最后,对于MT中的一个四元组以及DT中的一个三元组,如果其file相同,line≥start且line≤end,则将其进行配对,生成一个样本sample=<method,severity>,用于代表方法级别技术债务实例。在配对过程中,当且仅当所有语句级别技术债务都具有相同的严重程度时,才将severity作为方法级别技术债务样本的严重程度,否则配对失败,不产生新样本。所有的样本组成集合S=(sample1,sample2,

,sample
l3
),l3代表样本数量。
[0012]步骤2.使用srcML工具获取Java源代码的XML文件,并进行结构化信息提取:
[0013]首先,对方法的规模size、复杂度complexity和耦合度coupling三个方面进行度量。其中,规模主要由语句数量和代码行数量(lines of code,LOC)度量;复杂度由圈复杂度、参数数量、注释数量、表达式数量、变量声明数量和标识符数量等度量;耦合度由方法调用次数度量。
[0014]然后,对度量值进行归一化处理以防止极端值对模型学习造成影响,对于度量X中的每个度量值x,归一化公式为:
[0015][0016]其中,x
min
和x
max
分别是X中所有度量值的最小值和最大值。
[0017]最后,将每个样本中的method转化为一个向量structuralV=[size,complexity,coupling],其代表方法代码的结构化信息,所有的structuralV构成集合STV=(structuralV1,structuralV2,

,structuralV
l3
)。
[0018]步骤3.使用JavaParser将每一个样本sample
i
(o=1,2,

,l3)中的方法method转化为抽象语法树(Abstract Syntax Tree,AST)并进行语义化信息提取:
[0019]首先,对于每一个方法,提取其对应的AST树中所有节点之间的不同路径。每一条路径p的开始和结束节点以及路径本身构成一个三元组ct=<x
s
,p,x
t
>,其中x
s
和x
t
表示开始和结束节点值,所有的ct组成集合CT=(ct1,ct2,

,ct
l4
),l4代表AST中的路径数量。
[0020]然后,利用词嵌入技术CBOW对所有ct进行训练得到每一个ct
i
(i=1,2,

,l4)的向量表示
[0021]最后,使用注意力机制将所有聚合为一个向量聚合为一个向量用于代表方法代码的语义化信息,其中α
i
为向量的注意力权重,所有semanticV组成集合SEV=(semanticV1,semanticV2,

semanticV
l3
)。
[0022]步骤4.将每一个样本中方法对应的structuralV和semanticV进行拼接,得到方法的最终向量表示methodV,methodV的每一维代表一个特征值,此时每一个样本可表示为sample=<methodV,severity>。
[0023]步骤5.使用卡方检测(CHI

Square Test)方法计算类别和特征之间的相关性得分,并选取得分前K%的特征。
[0024]步骤6.数据增强。对于集合中的一个少数类样本sample<本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于多源信息的技术债务严重程度识别方法,其特征在于,包括以下步骤:步骤1.获取技术债务严重程度识别所需数据;步骤2.使用srcML工具获取Java源代码的XML文件,对每一个样本sample
i
(i=1,2,...,l3)中的方法method进行结构化信息提取,得到向量structuralV和集合STV;步骤3.使用JavaParser将每一个样本sample
i
(i=1,2,...,l3)中的方法method转化为抽象语法树并进行语义化信息的提取,得到聚合向量semanticV和集合SEV;步骤4.将每一个样本中方法对应的structuralV和semanticV进行拼接,得到方法的最终向量表示methodV,每一个样本可表示为sample=&lt;methodV,severity&gt;,向量的每一维代表一个特征的值;步骤5.使用卡方检测计算类别和特征之间的相关性得分,并选取得分前K%的特征;步骤6.对样本集合中的少数类样本进行数据增强;步骤7.利用分层抽样的方法,将数据集划分为等量的十份,其中九份作为训练集,一份作为测试集,基于XGBoost训练分类器,将训练好的分类器用于技术债务严重程度识别。2.根据权利要求1所述的基于多源信息的技术债务严重程度识别方法,其特征在于,所述的步骤1包括以下子步骤:子步骤1

1,从开源软件仓库中获得项目数据并筛选出其中的Java文件;子步骤1

2,使用JavaParser抽取出java文件的所有方法,以及方法对应的起始行和结束行信息,组成四元组mt=&lt;file,method,start,end&gt;,其中file表示文件名,method表示方法级代码,start表示方法起始行号,end表示方法结束行号;所有的四元组组成集合MT=(mt1,mt2,...,mt
l1
),其中l1代表四元组的数量;子步骤1

3,使用SonarQube扫描Java文件得到所有语句级别技术债务实例,每个语句级技术债务实例由一个三元组dt=&lt;file,line,severity&gt;表示,line表示代码行号,severity表示技术债务严重程度;所有的三元组组成集合DT=(dt1,dt2,...,dt
l2
),其中l2代表三元组的数量;子步骤1

4,对于MT中的一个四元组以及DT中的一个三元组,如果其file相同,line≥start且line≤end,则将其进行配对,生成一个样本sample=&lt;method,severity&gt;,用于代表方法级别技术债务实例;在配对过程中,当且仅当所有语句级别技术债务都具有相同的严重程度时,才将severity作为方法级别技术债务样本的严重程度,否则配对失败,不产生新样本;所有的样本组成集合S=(sample1,sample2,...,sample
l3
),l3代表样本数量。3.根据权利要求1所述的基于多源信息的技术债务严重程度识别方法,其特征在于,所述的步骤2包括以下子步骤:子步骤2

1,使用srcML工具获取Java源代码的XML文件,对方法的规模size、复杂度complexity和耦合度coupling三个方面进行度量;规模由语句数量和代码行数量度量;复杂度度量包括:圈复杂度、参数数量、注释数量、表达式数量、变量声明数量和标识符数量;耦合度由方法调用次数度量;子步骤2

2,对度量值进行归一化处理以防止极端值对模型学习造成影响,对于度量X
中的每个度量值x,归一化公式为:其中,x
min
和x
max
分别是X所有度量值中的最小和最大值;子步骤2

3,将每个样本中的method转化为一个向量3,将每个样本中的method转化为一个向量其代表方法代码的结构化信息,所有的structuralV构成集合STV=(structuralV1,structuralV2,...,structuralV
l3
)。4.根据权利要求1所述的基于多源信息的技术债务严重程度识别方法,其特征在于,所述的步骤3包括以下子步骤:子步骤3

...

【专利技术属性】
技术研发人员:俞东进李斯诚陈信孙添
申请(专利权)人:杭州电子科技大学
类型:发明
国别省市:

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

1