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日志,血压都升高了。

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

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

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

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

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

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

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

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

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

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

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

图1 频率

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

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

图2 分布

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

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

图3 修复代价

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

图4 修复模式

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

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

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

CodeWisdom

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

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

  1. mysql 编码错误_【分享】MySQl操作系统提示错误编码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 Unix 系统中,使用 perror 程序来显示操作系统错误编码的含义,它包含在 MySQL 的分发中. 下面的列表显示常见的 Linux 系统错误代 ...

  2. try catch finally执行顺序_技术大佬:我去,你竟然还在用 try–catch-finally

    二哥,你之前那篇 我去 switch 的文章也特么太有趣了,读完后意犹未尽啊,要不要再写一篇啊?虽然用的是 Java 13 的语法,对旧版本不太友好.但谁能保证 Java 不会再来一次重大更新呢,就像 ...

  3. mysql 客户端_技术分享 | MySQL 客户端连不上(1045 错误)原因全解析

    作者:Carlos Tutte.Marcos Albe 翻译:管长龙 在我们学习 MySQL 或从事 MySQL DBA 工作期间,时常会遇到:"我尝试连接到 MySQL 并且收到1045 ...

  4. freescale imx6 编译 linux ltib,TQIMX6Q技术分享——LTIB安装配置(转)

    TQIMX6Q_BASEC开发板是天嵌科技在2015年重磅推出的顶级开发平台,采用飞思卡尔的I.MX6Q芯片,真四核运行,1G Hz主频,2G DDR3内存,8G EMMC FALSH.TQIMX6Q ...

  5. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  6. oracle 查看索引大小_技术分享|简述Oracle统计信息

    于树文 云技术管理处 在Oracle的11g版本中,统计信息为自动收集功能.在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能).有时候在生产环境中, ...

  7. mysql 错误编码_【分享】MySQl操作系统提示错误编码

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 Unix 系统中,使用 perror 程序来显示操作系统错误编码的含义,它包含在 MySQL 的分发中. 下面的列表显示常见的 Linux 系统错误代 ...

  8. java编译时注解_简单介绍 Java 中的编译时注解

    1. 前言 上一篇 主要介绍了什么是 注解 (Annotation) 以及如何读取 运行时注解 中的数据, 同时用注解实现了简单的 ORM 功能. 这次介绍另一部分: 如何读取 编译时注解 ( Ret ...

  9. mysql log-update 错误_记一次修复MySQL socker 错误

    问题描述 初次往数据库中source 一个超大的文件,过了一会sql报错 table is full 然后去data 目录查看大小,发现一个表的ibd文件2G,果断删除了这个文件. 没想到继续报错. ...

最新文章

  1. php中url重写,使用PHP重写URL
  2. palm基础----7 获取系统信息
  3. Linux常用的基本命令cp、mv、rm、cat、find(三)
  4. c语言怎么往栈中输入元素,C语言栈操作
  5. 错误 Failed to load module “canberra-gtk-module“ 解决方案
  6. Django-model进阶
  7. java面向对象编程集合边框_JAVA 面向对象 集合框架
  8. 「钓鱼攻击」免杀钓鱼上线捆绑利器
  9. 第一章 软件工程概论
  10. c语言远控,CC远控工具:WebSocket C2
  11. ASP.NET判断是否为手机登录
  12. Java基础(二):基本数据类型和变量类型
  13. java在底层捕获异常_Java正确捕获异常的真实类
  14. 基于FPGA的CNN算法移植(一)概述
  15. ps抠图头发丝 智能半径
  16. 2017-Appearance-and-Relation Networks for Video Classification视频分类中的外观与关系网络
  17. ios android混合开发框架,iOS基于Cordova框架的混合开发
  18. 隐私信息检索(隐匿查询)
  19. AutoCAD 2007打开慢
  20. 懒,不想登录Cisco Packet Tracer 7.3怎么办?

热门文章

  1. python里删除range里的数字_python中range函数与列表中删除元素
  2. C++ PAT 乙级 1007——素数对猜想
  3. gateway动态路由_无语!SpringCloud Gateway动态路由之Nacos,我已经讲得很清楚了
  4. 安卓 多条通知_安卓11第一版发布:原生滚动截屏、屏幕录像、抄国内ROM这么多...
  5. kafka使用_Kafka介绍与使用
  6. OpenCV_ cv2.imshow()
  7. php分页代码 页数太多,php分页函数示例代码分享
  8. Jmeter BeanShell采样器提取接口响应写入csv文件(四)
  9. 【Jmeter篇】如何利用Jmeter配置元件计数器、随机变量制造批量数据和变量参数化?
  10. 【Android】Android Studio打包生成正式签名的APK