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

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

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

  1. nginx网站架构优化思路(原)

    本人接触的优化主要分为三大类 黑体的为本模块下的重点  ---------------安全优化 安全在生产场景中是第一位的 1.1 站点目录权限的优化 (修改权限755 644 所属用户root,需要 ...

  2. 体验AI乐趣:基于AI Gallery的二分类猫狗图片分类小数据集自动学习

    摘要:直接使用AI Gallery里面现有的数据集进行自动学习训练,很简单和方便,节约时间,不用自己去训练了,AI Gallery 里面有很多类似的有趣数据集,也非常好玩,大家一起试试吧. 本文分享自 ...

  3. AI基础架构Pass Infrastructure

    AI基础架构Pass Infrastructure Operation Pass OperationPass : Op-Specific OperationPass : Op-Agnostic Dep ...

  4. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  5. 【转帖】威盛x86 AI处理器架构、性能公布:媲美Intel 32核心

    威盛x86 AI处理器架构.性能公布:媲美Intel 32核心 https://www.cnbeta.com/articles/tech/920559.htm 除了Intel.AMD,宝岛台湾的威盛也 ...

  6. PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品,产品设计严格遵循国际数据挖掘标准CRISP-DM(跨行业数据挖掘过程标准),具备完备的数据准备、模型构建、模型评估、模型管理、海量数据处理和高纬数据可视化分析能力。

    http://www.meritdata.com.cn/article/90 PLUTO平台是由美林数据技术股份有限公司下属西安交大美林数据挖掘研究中心自主研发的一款基于云计算技术架构的数据挖掘产品, ...

  7. MySQL架构优化:定时计划任务与表分区

    转自: MySQL架构优化实战系列3:定时计划任务与表分区 - 今日头条(TouTiao.com)http://toutiao.com/a6304736482361049345/?tt_from=mo ...

  8. [解读REST] 4.基于网络应用的架构风格

    上篇文章介绍了一组自洽的术语来描述和解释软件架构:如何利用架构属性评估一个架构风格:以及对于基于网络的应用架构来说,那些架构属性是值得我们重点关注评估的.本篇在以上的基础上,列举一下一些常见的(RES ...

  9. Redis Cluster架构优化

    Redis Cluster架构优化 在<全面剖析Redis Cluster原理和应用>中,我们已经详细剖析了现阶段Redis Cluster的缺点: 无中心化架构 Gossip消息的开销 ...

  10. 转://从一条巨慢SQL看基于Oracle的SQL优化

    http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从 ...

随机推荐

  1. Travelling Salesman and Special Numbers

    prologue 模拟赛的一道题,结果没做出来,丢大人,败大兴.所以过来糊一篇题解. analysis 我们看到数据范围这么大,那么肯定不可以一个一个遍历(废话),所以就要考虑这个题目的性质. 我们先 ...

  2. Jackson--FastJson--XStream--代码执行&&反序列化

    Jackson--FastJson--XStream--代码执行&&反序列化 Jackson代码执行 (CVE-2020-8840) 影响范围 2.0.0 <= FasterXM ...

  3. C#学习笔记--面向对象三大特征

    C#核心 面向对象--封装 用程序来抽象现实世界,(万物皆对象)来编程实现功能. 三大特性:封装.继承.多态. 类与对象 声明位置:namespace中 样式:class 类名{} 命名:帕斯卡命名法 ...

  4. Jenkins相关概念

    1,Jenkins相关工具概念: 要熟练掌握Jenkins持续集成的配置.使用和管理,需要了解相关的概念.例如代码开发.编译.打包.构建等名称,常见的代码相关概念包括:JDK.JAVA.MAKE.AN ...

  5. Mybatis-plus 生成代码

    引入依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-g ...

  6. .net 温故知新【13】:Asp.Net Core WebAPI 缓存

    一.缓存 缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快. 从概念上讲,缓存是一种性能优化策略和设计考虑因素. 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性. ...

  7. 【Javaweb】什么是Listener监听器?

    1.Listener监听器它是Javaweb的三大组件之一.Javaweb的三大组件分别是:Servelt程序,Filter过滤器,Listener监听器. 2.Listener它是JavaEE的规范 ...

  8. mysql可视化工具有哪些?优点是什么?

    MySQL 是一种广泛使用的关系型数据库管理系统(RDBMS),由于其开放源代码和高度可定制化的优势,广受开发者欢迎.为了更加高效地管理 MySQL 数据库,我们通常需要使用 MySQL 可视化工具. ...

  9. jvm总结图解

    浅析jvm  内存模型 https://www.cnblogs.com/lewis0077/p/5143268.html

  10. [ICPC2014WF]Sensor Network

    题目描述 A wireless sensor network consists of autonomous sensors scattered in an environment where they ...