写点什么

某些编程语言更容易出错?研究人员提出质疑

  • 2019-02-11
  • 本文字数:1876 字

    阅读完需:约 6 分钟

某些编程语言更容易出错?研究人员提出质疑

在人们的印象中,使用某些编程语言往往更容易出现 bug,但是这种印象基本还处于比较“唯心”的阶段,在近来的研究中几乎没有发现有力的证据。


在 2014 年软件工程基础(FSE)大会上发表的一篇学术论文“A Large Scale Study of Programming Languages and Code Quality in Github”声称,某些计算机编程语言具有更高的代码错误率,并由此引发了一场开发者大讨论。


这篇论文由加州大学戴维斯分校计算机科学家 Baishakhi Ray、Daryl Posnett、Vladimir Filkov 和 Premkumar Devanbu 共同撰写,论文指出,使用 C 语言、C++、Objective-C、JavaScript、PHP 和 Python 编写的代码比其他语言包含了更多的缺陷。


来自马萨诸塞州阿默斯特大学、美国东北大学和布拉格捷克技术大学的计算机科学家们试图重现这项研究结果。


在最近的一篇题为“On the Impact of Programming Languages on Code Quality”的 ArXiv 论文中,Emery Berger、Celeste Hollenbeck、Petr Maj、Olga Vitek 和 Jan Vitek 重新回顾了 2014 年论文中的四个主要发现,以此来评估有关编程语言设计重要性的假设。


但他们并没有发现任何有力的证据。他们尝试重现 2014 年的研究成果,但大多以失败告终。他们的分析表明,C++代码中实际出现的缺陷比它们应该出现的频率更高,但即便如此,他们认为,这从统计学方面来看仍然是无关紧要的。

相关性和因果关系

马萨诸塞州阿默斯特大学计算机科学教授 Emery Berger 在接受“The Register”的电话采访时表示,最重要的是要区分重现失败的含义和实际情况之间的区别。


他说,最初的研究旨在建立编程语言与缺陷之间的相关性,而人们误将这种相关性看成是一种因果关系。


Berger 说,“这并不意味着它就是不对的,只能说明他们的很多说法站不住脚。在数据科学家们当中流行着一个玩笑——如果你对数据进行足够长时间的折磨,它们最终会说话。仅仅因为拥有数据并不意味着它们就是建立某些特定主张的正确数据。GitHub 代码库的数据是一个很好的资源,但并不能通过分析这些数据来确定所有的事实”。


2014 年分析 GitHub 代码得出的发现还包括:


  • “某些语言与缺陷的相关性比其他语言更高,尽管效果没有那么明显。”

  • “语言类别和缺陷之间存在着一个很小但却很重要的关系。函数式语言与缺陷的相关性比过程式语言或脚本语言要小一些。”

  • “领域和语言缺陷倾向之间不存在一般性关系。”

  • “缺陷类型与语言密切相关。”


但是,当研究人员试图重现早期的研究结果时,大多数情况下却做不到。对于第一个命题,他们在编程语言与其缺陷数量关系方面发现了一些细微差别,但这并不重要。


他们无法重现其余三个命题的结果,最后两次试图重现结果的努力因数据缺失而以失败告终。

这是一门科学

Berger、Hollenbeck、Maj 和 Vitek 在他们的论文中写道:“我们已经发现 FSE 研究中存在很多问题,这些问题导致其关键结果无效。我们的目的不是要责备谁,基于大规模代码库对编程语言进行统计分析本来就是一件很困难的事情”。


未能重现结果并不意味会得出相反的结果:无论是使用函数式、过程式还是面向对象编程语言并不重要,语言是静态类型的还是动态类型、是强类型的还是弱类型的也不重要。实际上,数据并没有告诉我们这些信息。


Berger 表示,除了这项研究之外,更重要的是编程语言是否会产生影响。


他说:“我心里是这么认为的,但在现实当中不可能通过实验来证实”。


他说,使用 Haskell 的程序员比普通 Python 程序员受过更多的学术训练,“我们假设 Haskell 程序的错误更少,可能是因为使用 Haskell 的程序员大都拥有博士学位”。


换句话说,有很多上下文信息没有被纳入到 GitHub 的数据分析中。


结果的反面是科学的运作方式、实验结果应该针对可重复性进行测试,但这种情况通常不会发生。《自然》杂志 2016 年发布的一份报告显示,在接受调查的 1576 名科学家中,有一半甚至无法重现自己的研究成果。


值得称赞的是,研究人员最初预见了工作中存在缺陷的可能性,并指出了在结论有效性方面存在的几个潜在威胁。


这些研究人员对数据科学陷阱提出了警告,并强调了通过自动化研究来实现可重现研究的必要性。


他们总结说:“虽然统计分析与大数据语料库相结合是一种强大的工具,可以用来解答最难的研究性问题,但这些研究所涉及的工作量以及出错的可能性是巨大的”。


英文原文:https://www.theregister.co.uk/2019/01/30/programming_bugs


学术论文 A Large Scale Study of Programming Languages and Code Quality in Github:http://web.cs.ucdavis.edu/~filkov/papers/lang_github.pdf


学术论文 On the Impact of Programming Languages on Code Quality:https://arxiv.org/pdf/1901.10220.pdf


2019-02-11 10:316349
用户头像

发布了 731 篇内容, 共 463.4 次阅读, 收获喜欢 2005 次。

关注

评论 1 条评论

发布
用户头像
C++又中枪
2019-07-12 09:41
回复
没有更多了
发现更多内容

一位Android程序员入坑Flutter后整理出一份超详细的学习笔记

android 程序员 移动开发

一文读懂 AOP _ 你想要的最全面 AOP 方法探讨,kotlin数据库框架

android 程序员 移动开发

一次违反常规的大厂OPPO面试经历(文末有面试答案领取)

android 程序员 移动开发

腾讯云李纲:国产数据库即将进入规模化阶段,未来五年助力1000家金融机构完成核心国产化

科技热闻

一个优秀程序员不可避免的问题:内存泄漏,ffmpeg音视频开发实战6下载

android 程序员 移动开发

腾讯云音视频发布腾讯云视立方等多款新品,助力全行业快速构建音视频能力

科技热闻

一次奇葩面试经历,没去过BAT的Android研发就不配面试架构师?

android 程序员 移动开发

一直认为Android不好找工作的同学,你的问题在这里!,移动软件开发

android 程序员 移动开发

一篇文带你了解程序员的生存环境到底有多难!(1),Android端简单易用的SPI框架

android 程序员 移动开发

【面试专题】2021年字节,面试安卓工程师会问到那些问题

android 程序员 移动开发

一个34岁出来面试还被拒绝的Android程序员有多惨?,android开发软件安装JAVA路径

android 程序员 移动开发

一个五年Android开发者小米、阿里、字节跳动,最新阿里+头条+腾讯大厂Android笔试真题

android 程序员 移动开发

一文了解Dart语法,kotlin密封接口

android 程序员 移动开发

一文理解模块化、组件化、插件化的区别,最新Android高级面试题汇总

android 程序员 移动开发

构筑“数据连接器”,腾讯云大数据推出“开源开放”战略

科技热闻

【需求解决系列之四】Android App 在线 自动更新,android观察者模式

android 程序员 移动开发

一篇文章教你搞清楚——Kotlin-进阶---不变型,android开发框架mvp

android 程序员 移动开发

一篇不太一样的RxJava介绍,2021年Android开发者跳槽指南

android 程序员 移动开发

下一个三年,联想要寻找取天火的人

脑极体

【面试官爸爸】来给我讲讲View绘制,腾讯T2亲自教你

android 程序员 移动开发

一个Android开发真实的996生活,我们到底在追求什么?,kotlin中文教程

android 程序员 移动开发

一个HashMap,阿里面试官竟然跟我扯了半个小时!,掌握这6大技能体系

android 程序员 移动开发

一篇文带你了解程序员的生存环境到底有多难!,android开发案例教程与项目实战

android 程序员 移动开发

【译】Flutter vs React Native vs Native,android开发社区

android 程序员 移动开发

一年Android工作经验,一举拿下百度、网易,38岁的中年失业者怎么活下去

android 程序员 移动开发

一篇文章教你搞定内存泄漏与排查流程——安卓性能优化,20道高频面试题(含答案)

android 程序员 移动开发

浪潮云说丨千呼万唤,浪潮云智能视觉来了!

云计算

【转载】3-5年的Android工程师最容易遇到4个瓶颈是什么

android 程序员 移动开发

一直认为Android不好找工作的同学,你的问题在这里!(1)

android 程序员 移动开发

一篇文章搞懂Android 自定义viewgroup的难点,又是一年金九银十

android 程序员 移动开发

【译】Flutter 2,Android程序员必会

android 程序员 移动开发

某些编程语言更容易出错?研究人员提出质疑_语言 & 开发_Thomas Claburn_InfoQ精选文章