摘要

代码异味是不良的设计和代码实现的症状,可能阻碍代码理解、增加代码更改和出错的可能性。以前的研究专注于单一模型在代码异味上的检测,并且无法为开发人员提供重构建议。针对上述问题,提出一种基于Bagging异构集成模型的代码异味检测与重构优先级划分方法,该方法利用分类器间的异质性,通过F1集成策略来检测Complex Class、Long Method、Spaghetti Code等三种代码异味,并将模型输出的异味概率转化为可能性分布后,为开发人员提供重构意见。实验在6个开源系统的32个版本上验证、评估:(1)基分类器的稳定性以及与代码异味的关系;(2)Bagging异构集成模型检测上述代码异味的性能;(3)将异味概率转化为可能性分布并作为重构优先级的有效性。实验结果表明,最佳基分类器因代码异味类型而异。同时,Bagging异构集成模型相较于基分类器,F1提高0.06%~40.51%,AUC提高0.45%~28.37%。最后将Bagging异构集成模型的重构优先级与6名受访者的重构优先级进行Kappa一致性检验,两者具有高度一致性。