[发明专利]基于代码异味的软件重构预测方法在审
申请号: | 202111468006.8 | 申请日: | 2021-12-03 |
公开(公告)号: | CN114138328A | 公开(公告)日: | 2022-03-04 |
发明(设计)人: | 俞东进;翁乐辉;陈洁;陈信;陈宇廷;叶佳萍 | 申请(专利权)人: | 杭州电子科技大学 |
主分类号: | G06F8/72 | 分类号: | G06F8/72 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 310018 浙江省杭州*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 代码 异味 软件 预测 方法 | ||
1.基于代码异味的软件重构预测方法,其特征在于包括以下步骤:
步骤一:给定待分析系统中m*n个源代码文件版本集合F=(F1,1,F1,2,...,Fi,j,...,Fm,n),其中Fi,j表示源代码文件Fi的第j个版本,利用代码解析工具解析每一个源代码文件,将每一个源代码文件版本Fi,j的结构与异味信息度量表示为Si,j=className,classVersion,structure,hasSmell的形式,i=1,2,...,m,j=1,2,...,n,其中className表示源代码文件版本Fi,j的类名,设一个源代码文件包含一个类;classVersion表示源代码文件版本Fi,j在项目历史中的版本号,structure表示源代码文件版本Fi,j的结构特征集合W,hasSmell表示源代码文件版本Fi,j中是否存在某种代码异味,1表示存在异味,0则表示不存在;
特征集合W=wLOC,wNOA,wCBO,wMPC,wTCC,wMcCabe,wWMC,其中wLOC表示该文件的代码行数,wNOA表示该文件中属性的个数,wCBO表示与该文件相耦合的目标类的数量,耦合即该文件中的方法调用了目标类的方法或变量;wMPC表示该文件中的方法调用其他方法的个数,wTCC表示通过访问相同的属性而直接发生联系的方法个数,wMcCabe表示该文件通过McCabe度量法计算得到的复杂度,wWMC表示该文件中方法的圈复杂度的和;
步骤二:如果源代码文件版本Fi,j被识别为存在某种代码异味,判别是否具有这种代码异味的特征阈值集为T=w1|b1,...,wg|bg,...,wt|bt,其中wg为W中的一个特征,bg为识别为这种代码异味的特征wg对应的阈值,g=1,2,...,t,通过以下公式计算得到异味强度:
其中,m(wg)表示待分析系统中存在的、由于特征wg引起某种代码异味的最大或最小值:当wg超过bg时引起某种代码异味的时候选用最大值,当wg小于bg时引起某种代码异味的时候选用最小值;
添加强度信息后源代码文件版本Fi,j的结构与异味信息度量表示为:
S′i,j=className,classVersion,structure,hasSmell,intensity;
步骤三:获取源代码文件历史信息度量:
设源代码文件Fi在某个历史版本p中引入了代码异味,源代码文件Fi当前版本为j,则源代码文件版本Fi,j中关于历史信息度量可以表示为:
Hi,j=className,classVersion,diffDays,diffVersions,action
其中,diffDays表示版本p和j之间间隔的自然天数,diffVersions表示版本p和j之间间隔的版本数,action表示版本p和j之间文件Fi发生修改的次数;
步骤四:我们在源代码文件集合F中找到所有的代码异味消除的源代码文件版本,分成以下两类:
1)Fi,j的hasSmell=1,而Fi,j+1的hasSmell=0;
2)Fi,j的hasSmell=1,且j是源代码文件Fi的最后一个版本;
根据1)和2)中的策略,在源代码文件集合F中获取到存在某种代码异味的所有的最后一个源代码文件版本Fi,j,组成代码异味消除的源代码文件集合,并通过过采样技术SMOTE将其进行扩充,形成ζP,即为数据集中的正样本,将源代码文件集合F中剩余的源代码文件版本作为数据集的负样本ζN,最后得到了完整的样本数据集:ζ=ζP∪ζN,其中ζP中每一个源代码文件版本对应的重构标签值y为1,ζN中的每一个源代码文件版本对应的重构标签值y为0;
步骤五:使用特征递归消除技术、Random Forest Classifier和LGBM Classifier来保留最重要的z个特征,记为W*=(w1,w2,...,wz);经过特征选择之后的源代码文件版本Fi,j可以用(S*i,j,H*i,j)来表示,其中S*i,j表示保留的结构与异味信息度量,H*i,j表示保留的历史信息度量;
步骤六:将数据集中的一部分数据作为训练集ζtrain;
步骤七:对于每一个源代码文件版本的信息表示(S*i,j,H*i,j),将S*i,j输入到LGBM中得到输出h1,将H*i,j输入到Logistic Regression中得到输出h2,最终模型的输出表示重构的预测概率其中a1和a2表示权重,且a1+a2=1;
步骤八:使用交叉熵损失函数来计算重构标签值y和输出之间的损失,损失函数的定义如下:
其中d表示训练的样本数;
步骤九:利用训练集ζtrain来训练LGBM和Logistic Regression模型参数,直至达到最大迭代次数MaximumIter,获得训练之后最佳参数的LGBM和Logistic Regression模型;
步骤十:对于一个源代码文件,首先按步骤一、步骤二、步骤三,获取到文件与异味信息度量和历史信息度量,然后根据步骤五抽取出最佳的特征,将这些特征输入到步骤九获得的模型中,最终获得关于此文件是否需要进行重构的预测概率,如果概率大于等于0.5则说明要进行重构,小于0.5则说明不需要。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202111468006.8/1.html,转载请声明来源钻瓜专利网。