本文分享自华为云社区《华为云基于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. Sentinel源码改造,实现Nacos双向通信!

    Sentinel Dashboard(控制台)默认情况下,只能将配置规则保存到内存中,这样就会导致 Sentinel Dashboard 重启后配置规则丢失的情况,因此我们需要将规则保存到某种数据源中 ...

  2. 2D物理引擎 Box2D for javascript Games 第五章 碰撞处理

    2D物理引擎 Box2D for javascript Games 第五章 碰撞处理 碰撞处理 考虑到 Box2D 世界和在世界中移动的刚体之间迟早会发生碰撞. 而物理游戏的大多数功能则依赖于碰撞.在 ...

  3. 【不限框架】超好用的3d开源图片预览插件推荐

    今天给大家推荐一款超好用的图片预览插件-image-preview 简单说明 image-preview是一款主要面向移动端web应用,同时兼容pc,基于原生js,不限框架,react,vue,ang ...

  4. MVVM前后端分离:web接口规范

    大前端前提下,开发采用前后端分离的方式,前端和后端主要通过接口进行分离, 后端开发接口,前端使用接口,前后端接口开发告一段落以后,接口联调差不多就进入开发尾声,准备送测了. 那么,对接口的约束和规范就 ...

  5. AtCoder Beginner Contest 327 (ABC327)

    A. ab 直接根据题意模拟即可. Code B. A^A 直接枚举 \(i= 1, 2,\dots, 15\),每次看看 \(i ^ i\) 是否等于 \(A\) 即可. Code C. Numbe ...

  6. 【Azure Durable Function】PowerShell Activity 函数遇见 Newtonsoft.Json.JsonReaderException: The reader's MaxDepth of 64 has been exceeded.

    问题描述 创建PowerShell Azure Durable Function,执行大量的PowerShell脚本操作Azure Resource,遇见了一个非常非常奇怪的问题: Function ...

  7. bool数据类型用法

    1 来自百度 1.bool为布尔型用作逻辑判断 2 2.bool只有一个字节 3 3.bool取值false和true,0为false,非0为true.(例如-1和2都是true). 4 4.bool ...

  8. Welcome to YARP - 8.分布式跟踪

    Welcome to YARP - 1.认识YARP并搭建反向代理服务 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 - 配 ...

  9. 全屏API及vue3 hook封装

    最近在一个大屏项目遇到一个需求:用户可以通过一个按钮,触发页面部分模块全屏.通过以下API可以实现: Element.requestFullscreen()方法用于发出异步请求使元素进入全屏模式. 且 ...

  10. 【LOJ NOI Round#2 Day1 T1】单枪匹马(矩阵乘法)

    题目传送门 操作二要求的东西是一个循环迭代的东西,手推相邻两项找下规律,发现相邻两项的分子分母间含有线性关系,考虑用矩阵乘法求解.对于 \([1,n]\)的询问,从后往前倒推, \(x_{n-1}=a ...