基于AI的架构优化:创新数据集构造法提升Feature envy坏味道检测与重构准确率

本文分享自华为云社区《华为云基于AI实现架构坏味道重构取得业界突破,相应文章已被软工顶会FSE 2023收录》,作者: 华为云软件分析Lab。

基于AI技术实现架构坏味道检测与重构建议是当前业界比较流行的做法,但此做法往往存在一个通病,即训练数据集的质量问题,如何构建大规模、高质量的训练数据成为制约算法有效性的关键挑战。针对这项挑战,我们以Feature envy架构坏味道为例,利用一系列启发式规则和一个基于决策树的分类器,实现了一种基于真实数据的高质量重构数据集构造方法,并利用此方法构建的数据集将Feature envy架构坏味道的检测与重构准确率提升到业界SOTA水平。此工作来自华为云技术创新Lab和北京理工大学刘辉教授团队的合作项目,相应产出已落地至华为公司内部研发工具,相关研究成果已被软件工程领域顶会ESEC/FSE 2023(CCF A类)正式收录,文章详细内容已经公开,欢迎查阅。

图1 Feature envy检测方法概览

如何获得真实世界的移动方法重构数据集

我们通过一系列启发式规则和一个基于决策树的分类器来自动过滤现有的重构检测工具的误报。如果移动方法重构的源类在新版本中不存在或者目标类在旧版本中不存在,我们过滤这样的重构,因为它们通常是与其它重构紧密相关的,例如提取类重构。其次我们也过滤掉重写方法,测试方法,以及构造函数,因为测试方法与生产代码无关,其目的是为了测试生产代码中某个方法是否符合开发者的预期。而重写方法和构造函数通常不能被移动由于其编程特性。我们也利用了一个决策树分类器来进一步过滤简单的启发式规则无法解决的情况。由于移动方法通常会涉及调用关系的迁徙,因此我们分别提取移动方法在两个版本上的调用关系以及它们的语句匹配关系作为决策树的特征。通过这两步过滤,使开发者可以在大量提交中自动挖掘移动方法重构,降低其误报的存在。

如何实现Feature envy的智能检测与重构

通过在大量的项目和提交上挖掘移动方法重构,并应用我们的误报过滤方法,我们可以自动地收集真实世界中由开发者所执行的大量且高质量的移动方法重构示例。为了训练一个Feature envy检测模型,我们也在相同的项目中随机地等比例采样了未移动的方法作为训练数据集中的负样本。我们的模型输入包括文本度量和结构度量两部分。其中文本度量由移动方法名,源类名,和目标类名三方面组成。结构度量包含移动方法分别和源类以及目标类之间的Jaccard距离(dist),与源类和目标类中的方法的调用次数(mcmc),以及与源类和目标类中的方法的调用个数(cbmc)。基于训练好的模型,我们可以检测真实世界中的项目是否存在Feature envy方法。并为其提供解决方案。对于待检测的方法,我们也提出了一系列启发式规则来降低误报的可能性。包括数据类和工具类的过滤等。这样的类通常是为了向外部提供数据访问和操作。因此它们会被外部的方法频繁访问但访问此类的方法并不应该被移动到这样的类中。

图2 Feature envy模型

方法效果评估

表1 评估结果

我们选择了当前最先进的基于深度学习的方法(feDeep)以及知名的基于启发式的方法(JDeodorant和JMove)。我们的方法在5个真实世界的项目上与这些方法相比,针对Feature envy检测的准确性有明显的提升。我们由此推断出利用真实世界代码训练出的模型在实际检测的过程中具备更好的表现。另外,所提出的方法在重构推荐上相比于现有的基于深度学习的方法也有明显的提升。

PaaS技术创新Lab隶属于华为云,致力于综合利用软件分析、数据挖掘、机器学习等技术,为软件研发人员提供下一代智能研发工具服务的核心引擎和智慧大脑。我们将聚焦软件工程领域硬核能力,不断构筑研发利器,持续交付高价值商业特性!加入我们,一起开创研发新“境界”!

点击关注,第一时间了解华为云新鲜技术~

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/4526289/blog/10315705

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。