ora 00900 已编译但有错误_技术分享|万万没想到!编译错误竟然还没灭绝???

e2755372be8ddd9a0f7c56f2afe991dc.png

CodeWisdom-技术分享

万万没想到!编译错误竟然还没灭绝???

复旦大学CodeWisdom团队的代码分析和挖掘小组针对开源软件项目持续集成过程中出现的编译错误,进行了大规模的经验研究。该研究分析了常见的编译错误类型、修复代价以及修复模式,研究结果对于开发人员和研究人员具有一定的启示作用。基于该研究的论文“A Large-Scale Empirical Study of Compiler Errors in Continuous Integration”发表在软件工程领域的顶级国际会议FSE 2019上。

论文作者包括复旦大学的张晨、陈碧欢、陈琳琳、彭鑫、赵文耘。

论文链接地址:

https://dl.acm.org/citation.cfm?id=3338917(阅读原文进入论文主页)

有bug了!

每个人都有自己的死穴。对于程序猿来说,这句话绝对在死穴排行榜上名列前茅。看着一份份染着鲜血的bug日志,血压都升高了。

582329537ac671e242e95ba6233d8f4f.gif582329537ac671e242e95ba6233d8f4f.gifb80ff6936e67deea2fb9ad9d920f644a.png582329537ac671e242e95ba6233d8f4f.gif582329537ac671e242e95ba6233d8f4f.gif

而持续集成(CI)就像是一个故意惩罚程序猿的魔鬼,让bug日志的暴风雨,比往日来的更猛烈了一些。

我们先来看看啥叫CI, CI是一种软件开发实践,它要求开发人员频繁的编译、静态分析、测试和集成变更代码。

相信聪明的你一眼看穿了CI的”本质”,可不就是更多的bug报告嘛!

但是事情往往不像表面看上去那样简单。由于CI频繁的构建代码,使得bug能被尽早发现,反而降低了程序猿负担。瞧!这一个个bug是不是变的可爱起来?

由于可以自动化构建过程,确保软件开发的速度和质量,CI得到了广泛的使用。尽管CI已被广泛使用,但它仍然存在许多问题。比如,CI构建经常失败。

编译错误作为导致构建失败的主要原因之一,我们对其还缺乏了解,例如常见的编译错误类型、修复代价以及修复模式。

f8ac166d8ff74bca37fd9db43585de70.png

因此,在这项研究中,我们爬取了Github上3,799个开源Java项目的Travis CI构建数据,从四个角度:频率、分布、修复代价以及修复模式,对编译错误进行了分析。

a699c7cee4febba8be17f4af6c07e424.gif

总数据量大概三四个TB吧,有需要的联系我们哦~

ea77b6fe622458e8be0a1b3a2bfd4d77.png

废话不多说,看看结果吧~

图1展示了编译错误出现的频率。75%的项目的构建出现过编译器错误。在失败的构建中,11%是由编译错误引起的。

嗯,看起来编译错误出现的还挺频繁的。咦?明明IDE会提醒代码中的编译错误,怎么还有这么多?毕竟总有些程序猿喜欢特立独行,偏偏不用IDE嘛!此外,你电脑的运行环境和CI的环境往往有一些差别,这可能导致问题在CI构建时才暴露出来哦!

2a4001fbab3ed4b0d759e9831e39e2a5.png

图1 频率

图2展示了常见的编译错误类型。最常见的错误类型是cant.resolve,占比54%。当编译器无法识别代码中的符号时,会报出此错误。doesnt.exist占比15.9%,该错误发生的原因是因为编译器无法找到代码中引用的包。在所有出现的编译错误中,最常见的10种类型占比90.2%。

所以,聪明的你知道在研究编译错误时,该针对哪些类型了吧。

1052e1e199983ad6dd0f7fc29d31cf2f.png

图2 分布

图3展示了10种最常见编译错误类型的修复时间,从左到右,修复时间由18分钟增长至97分钟。相比expected, doesnt.exist 和cant.resolve等错误, does.not.override.abstract 和method.does.not.override.superclass需要花费两倍以上的修复时间,因为它们的修复往往会涉及方法中逻辑代码的实现。

看起来,程序猿小哥哥和程序媛小姐姐似乎在碰到靠右边的错误类型时,更需要帮助呢~相信你开发的自动debug和修复工具会大大加快他们的工作效率。

5b4094b33d9312925fc3399295c2537b.png

图3 修复代价

图4展示了常见编译错误的修复模式,第一列代表错误类型,第二列简要描述了该错误类型,第三列展示了相应的修复模式。我们发现大多数修复模式都很简单,只涉及几行代码的更改,这表明自动修复常见的编译器错误是可行的。但是,每种编译错误都对应多种修复方式,就拿cant.reslove来说吧,它有10种修复模式,这意味着对于每一个该类型的错误,你都有10种手段来解决,那究竟哪种是程序猿真正想要的?想想就让人头大。

92dbb8d6d9a78e1752cee94c6d6b1a64.png

图4 修复模式

当前IDE已经提供了一定的编译器错误修复功能。我们测试了两种被广泛使用的IDE, Eclipse和IntelliJ IDEA,来确定它们能否提供我们确定的修复模式作为修复建议,以及在不借助人工帮助的情况下,是否能够自动修复错误,上图中第四至第七栏展示了相关结果。

在48种修复模式中,Eclipse和IntelliJ IDEA分别提供32种和29种修复模式。在提供的模式中,Eclipse和IntelliJ IDEA只支持7种和4种模式的自动修复。从结果可以看出,当前IDE对于编译错误修复提供的支持非常有限。我们总结的修复模式可以用来进一步完善IDE的相关功能。

IDE的自动修复功能实在是要加把劲啊!

5e737aba1774e8372df5155f85f78e70.png

CodeWisdom

93d238254dc471026d0329507f12364c.pngfc5797987de6d0b2a94de7c59e076c0b.png

欢迎关注CodeWisdom,Codewisdom平台由复旦大学软件工程实验室运营,提供智能化软件开发平台及线上沙龙相关资讯,关注可了解更多智能化软件开发的最新消息~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用计算机心如止水,计算机网络数据链路层

1、数据链路层使用的信道类型:点对点信道(1对1)广播信道(1对多),如:集线器、交换机2、链路与数据链路:链路:点对点的物理线路段,中间无任何其他交换结点数据链路:通信协议 软件 硬件(一般用适…

easyui tree动态加载_动态路由:Gin vs SpringMVC

这两天在接触Gin,对它的动态路由功能比较感兴趣,特意做了笔记,顺便跟SpringMVC作下对比。1.简介Gin是使用Go/golang语言实现的HTTP Web框架。接口简洁,性能极高。截止1.4.0版本,包含测试代码,仅14K,其中测试代码9K左右,也就是说框架源码仅5K左…

伍德里奇---计量经济学第6章部分计算机习题详解(stata),伍德里奇---计量经济学第6章部分计算机习题详解(STATA)...

所以,log bwg t7.5840.0180npvis?0.00041npvis20.0254mage?0.00041mage20.1370.00370.000120.0093 (0.00015)n1764,R20.0256,R20.0234。当孩子的出生体重最大时,对应的年龄为mage? β12β20.0254[2?0.00041] 30.96&#xff0c…

vue菜单点击html,基于vue.js实现侧边菜单栏

侧边菜单栏应该是很多项目里必不可少的 自己手写了一个下面是效果图下面就说一下实现的过程 还是比较简单的首先导入一下需要的文件接下来就是我的html主页系统用户管理权限设置操作日志设备运行日志防区 防区管理警报 历史报警曲线报表统计警情处理设备然后是css* {margin: 0;…

centos7 mysql启动失败_Mysql主从复制

​好在,别人如何分析我,跟我本身是一点关系也没有的。(by 三毛)主从复制的常见用途1.数据备份对备份来说,复制是一项很有意义的技术补充,但复制既不是备份也不能取代备份2.负载均衡(读写分离)通过MySQL主从复制,可以把写操作放在主库(master)&#xff0c…

计算机应用基础知道,谁知道计算机应用基础练习题的答案?

谁知道计算机应用基础练习题的答案?46.简述美籍匈牙利数学家冯诺依曼(Von Neumann)在1946年提出的关于计算机的体系结构和“程序存储”的设计思想。47.简要说明Windows98中安装存放在CD—ROM上的应用程序的操作过程。48.简述Windo…

计算机程序编辑器中文版,小说编辑器(Atomic Scribbler)

AtomicScribbler是一款功能强大的电脑小说编辑器,快速编辑、创作你的小说,也可以直接导入文本二次编辑,内置了丰富的文字编辑工具,完全能够满足日常创作小说、编辑文字使用需求。。相关软件软件大小版本说明下载地址AtomicScribbl…

信号与系统sa函数求积分_瞎扯数学分析微积分(1~4)

算法数学之美日期:2019年10月30日正文共:12013字0图预计阅读时间:31分钟来源:豆瓣 wxmang这一篇帖子主要介绍人类如何从一个基于几何直观或直觉的计算技巧或计算方法,进化到逻辑基础严密的公理体系的例子,想说明人类抽…

Cocos2D研究院之CCNode详解(三)

http://www.xuanyusong.com/archives/950 上一章我们了解了cocos2d的项目路径以及工作原理,这次作者要真刀真枪地讲解代码了,咱们先来看看cocos2d最常用、也是作者认为最核心的类——CCNode。 之前说过,cocos2d的所有类都以CC开头&#xff0c…

计算机第二课堂教学计划,小学的第二课堂教学计划

小学的第二课堂教学计划开展内容丰富,形式多样的第二课堂活动,通过活动,使学生受到爱国主义及道德情感教育,掌握技能,全面提高他们的素质,使其成为全面发展的一代新人。下面是小编分享给大家的小学的第二课…

webstorm两个文件比对_webstorm怎么更改文件名称?或者是重命名

在开发的过程中,我们一个项目中会有很多的文件,每个文件中也会有很多的层级关系,有时候新建一个文件的时候,一不下心就会出错,位置出错我们可以移动更换位置,名称命名错误,我们可以重命名&#…

秒懂物理计算机出题规划,57张动图, 让你秒懂高中物理原理! 考试次次拿第一

原标题:57张动图, 让你秒懂高中物理原理! 考试次次拿第一物理不像语文或者英语,文科的东西记的东西偏多,理解的成分偏少,但物理理解的成分很重,要死记硬背的东西反而很少。要想把物理学好,先要把简单的概念…

matlab机器人自动分拣_极智嘉分拣系统落地 助力打造智慧物流引擎

全球AMR引领者极智嘉(Geek)近日宣布已为知名跨境电商企业棒谷科技(Banggood)部署全柔性智能AMR分拣系统,以支持棒谷科技日益增长的海外跨境电商业务需求。棒谷科技业务体系遍及全球200多个国家。随着电商业务的加速转变,棒谷科技的发展面临线上销售增长快、业务需求难以预测、劳…

n分频器 verilog_时钟分频系列——分数分频电路的Verilog实现

IC君的第47篇原创文章上一篇文章时钟分频系列——偶数分频/奇数分频/分数分频,IC君介绍了各种分频器的设计原理,其中分数分频器较为复杂,这一篇文章IC君再跟大家聊聊分数分频的具体设计实现。一个分数分频器由两部分组成:以ZN和ZN…

通过gdb调试分析Linux内核的启动过程

作者:吴乐 山东师范大学 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一、实验流程 1.打开环境 执行命令:cd LinuxKernel/ 执行命令:qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img M…

清除服务器上传队列的文件,webUploader上传demo

最近,要做文件上传功能,在同事推荐下,选择了webUploader插件。WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件,详情请看官网(直接百度webUploader,应该是第…

HappyLeetcode64:Sqrt(x)

Implement int sqrt(int x). 这道题本质上是求sqrt(x)下最大的整数。二分查找是比较容易想到的方法。另&#xff0c;在网上又学习了下别人的牛顿迭代法。 这是我原来的写法&#xff0c;写入是错误的&#xff0c;复杂度太高 class Solution { public:int sqrt(int x) {if (x <…

德云斗笑社何九华为什么没参加_狗狗的身体卡在了门上,女主人低头一看忍不住笑了:这是膨胀了...

大家应该有看过长得像煤气罐一样体型圆圆的狗狗吧&#xff1f;它们可能是因为疾病导致的&#xff0c;也可能是被主人喂得过于肥胖了。这个故事中的狗狗被过分宠溺&#xff0c;才短短的几个月&#xff0c;它居然画风突变&#xff0c;不禁想问这是去参加宠物变形记了吗&#xff1…

服务器绑定域名可修改吗,云服务器可以绑定域名吗

云服务器可以绑定域名吗 内容精选换一换访问IIS搭建的网站不通&#xff0c;报错404。IIS上绑定的域名只填写了主机名&#xff0c;没有指定IP地址。本节操作指导用户修改IIS上绑定的域名&#xff0c;以Windows Server 2008 R2操作系统云服务器为例。登录服务器&#xff0c;选择“…

杭州保俶塔实验机器人_【科教有闻】高照实验学校Pepper机器人课程亮相2020(杭州)国际数字教育大会“智能教育引领未来”论坛...

“数化世间万物&#xff0c;一切皆有可能”&#xff0c;数字经济时代的教育新画卷正在浙江杭州徐徐展开。12月10日至11日&#xff0c;2020(杭州)国际数字教育大会(2020iDEE)在杭州国际博览中心正式开幕&#xff0c;这是一场关乎数字和创新的盛宴&#xff0c;也是一次洞见未来教…