本文分享自华为云社区《华为云基于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. RK3588平台产测之ArmSoM-W3软硬件重启测试

    1. 简介 专栏总目录 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得 ...

  2. YCSB对MongoDB数据库性能测试

    一.安装部署 1.1前置条件 Install Java and Maven Go to http://www.oracle.com/technetwork/java/javase/downloads/ ...

  3. [Python急救站课程]输出水仙花数

    python #d = 0 print("所有三位数中的水仙花数如下所示:") for i in range(100, 1000): a = i // 100 # 求百位数 b = ...

  4. Jail 【Python沙箱逃逸问题合集】

    借助NSS平台题目,以2022年HNCTF为例展开分析 背景: 由于目前很多赛事有时候会出现一些pyjail的题目,因此在这里总结一下以便以后遇见可以轻松应对. 注:由于Python3中的unicod ...

  5. 多巴胺所表达的prediction error信号

    Dopamine reward prediction-error signalling: a two-component response (Wolfram Schultz; NATURE REVIE ...

  6. AndroGenshin

    是一个apk文件 jadx打开以后发现主要操作 找到mainactivity,研究代码可以知道主要操作就是对两个字符串进行RC4加密再进行一次换表的base64操作,最后再将加密后的结果与flag做对 ...

  7. Wampserver搭建DVWA和sqli-labs问题总结

    Wampserver 搭建 DVWA 和 sqli-labs 问题总结 遇到问题解决的思路方法 百度,博客去搜索相关的问题,人工智能 chatgpt 查看官方文档,查看注释. 本次解决方法就是在文档的 ...

  8. PTA作业4、5、6及期中考试的总结

    一.前言 本次博客是针对面向对象程序设计课程布置的PTA第4.5.6次作业以及期中考试的编程题而写的总结分析,重点分析了菜单计价系列题目.期中考试的编程题等具有一定难度和特色的问题. 二.PTA第四次 ...

  9. SpringBoot + 通义千问 + 自定义React组件,支持EventStream数据解析!

    一.前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 最近ChatGPT非常受欢迎,尤其是在编 ...

  10. 数据驱动决策,Datainside引领可视化报告新时代

    数据驱动决策已经成为当今社会中的重要趋势,而Datainside作为一家数据可视化报告平台,正引领着可视化报告的新时代.下面是关于Datainside平台的详细描述. 数据集成与连接 Datainsi ...