写点什么

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

  • 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:316447
用户头像

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

关注

评论 1 条评论

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

技术贴 | 如何基于 KWDB 快速实现工业物联网智能电表系统设计?

KaiwuDB

数据库·

模块化和DID能让UBI惠及所有人吗?

BlockChain先知

深入剖析低代码:实现24小时产品上线的技术机制与优化策略

JeeLowCode低代码平台

低代码 低代码平台 低代码前端 低代码缺点 低代码,

【AI智能助手】轻松打造智能助手,定制专属个性风格

JEECG低代码

AI大模型 AI应用 AIGC AI智能助手

区块链ETF软件系统的技术方案

北京木奇移动技术有限公司

区块链技术 软件外包公司 区块链ETF

【AI】我没写一行 SQL,就让 AI 查出了销售报表

非晓为骁

人工智能 AI BI MCP

局域网聊天工具,哪款更适合政企的即时通讯需求?

BeeWorks

即时通讯 IM 私有化部署 局域网

“全球金牌敏捷课程” · 7月19-20日CSM认证课程 · Jim老师引导讨论AI & Agility话题

ShineScrum

敏捷 敏捷教练 CSM认证 CSM认证培训 敏捷认证

深化合作!港华集团数智升级,构建一体化管控平台

用友BIP

哈尔滨等保、备案单位如何选择备案地?

黑龙江陆陆信息测评部

区块链RWA软件系统技术方案

北京木奇移动技术有限公司

区块链技术 软件外包公司 RWA开发

MCP与华为云CSE珠联璧合,打造AI时代微服务生态引擎

华为云开发者联盟

微服务 华为云开发者联盟 MCP 华为云CSE

区块链RWA系统开发框架

北京木奇移动技术有限公司

区块链技术 软件外包公司 RWA开发

模块化和DID能让UBI惠及所有人吗?

股市老人

高途公布2025年第一季度未经审计业绩及新股票回购计划

财见

模块化和DID能让UBI惠及所有人吗?

加密眼界

产品经理用什么软件做竞品分析?AI生成产品报告攻略奉上!

职场工具箱

AI 产品经理 竞品分析 办公软件 AIGC

葵花药业集团与用友战略签约,共启医药行业数智化新篇章

用友BIP

针对大事务问题对业务存储过程改造

GreatSQL

英特尔携手壳牌打造浸没式液冷认证方案,助力数据中心迈向高效未来

E科讯

第五章:数据治理启动的契机

数据小吏

数据治理

Blender 入门教程(四):动画制作

北桥苏

游戏引擎 blender CocosCreator

MiniMax 新语音模型登顶 TTS 全球榜单;AI 会议笔记 Granola 融资 6700 万美元,估值 2.5 亿丨日报

声网

AI应用及数据驱动型HR决策呈激增态势

财见

利用 Amazon Bedrock Data Automation(BDA)对视频数据进行自动化处理与检索

亚马逊云科技 (Amazon Web Services)

0.4元/TB/月!天翼云HBlock打响软件定义存储价格战

天翼云开发者社区

存储 天翼云HBlock

模块化和DID能让UBI惠及所有人吗?

石头财经

Addepar完成2.3亿美元G轮融资

财见

0元打造520浪漫神器,用CodeBuddy生成专属爱情故事书

不惑

CodeBuddy

内网im聊天软件,私有化部署安全可控

BeeWorks

即时通讯 IM 私有化部署

向日葵、ToDesk、网易UU远程、RayLink,哪款远控软件最适合设计师?

科技热闻

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