[发明专利]基于代码异味的软件重构预测方法在审

专利信息
申请号: 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则说明不需要。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于杭州电子科技大学,未经杭州电子科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/202111468006.8/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top