免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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

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

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

关注

评论 1 条评论

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

【案例教学】华为云API图引擎服务 GES的便捷性—AI帮助快速处理图片小助手

华为云PaaS服务小智

人工智能 云计算 华为云

LED显示屏租赁市场“价格”与“质量”的联系

Dylan

广告 LED显示屏 led显示屏厂家

软件测试|App自动化之Appium工作原理

霍格沃兹测试开发学社

软件测试|TCP三次握手四次挥手

霍格沃兹测试开发学社

一文解读智能远程监考方案的技术架构与应用实景

阿里云视频云

云计算 视频云

软件测试|Pycharm搜索替换功能

霍格沃兹测试开发学社

软件测试|Python基础之面向对象(三)

霍格沃兹测试开发学社

软件测试|Python内置模块使用(一)

霍格沃兹测试开发学社

软件测试|Python基础之面向对象(二)

霍格沃兹测试开发学社

数据研发“新人”如何快速落地?

阿里技术

数据研发

软件测试|Pycharm版本控制与分支管理

霍格沃兹测试开发学社

深入浅出:SPI机制在JDK与Spring Boot中的应用

华为云开发者联盟

后端 开发 华为云 华为云开发者联盟 企业号9月PK榜

将你的接口数据一目了然,借助 Apifox 的可视化响应功能

Apifox

前端 后端 Apifox API 可视化响应

飞书深诺AI系列--如何写出一个好的Prompt

飞书深诺技术团队

软件测试/测试开发丨利用ChatGPT自动生成测试用例思维导图

测试人

人工智能 软件测试 思维导图 测试开发 ChatGPT

可视化的报表系统

风清扬

Qt For OpenHarmony

OpenHarmony开发者

OpenHarmony

单元测试|Unittest setup前置初始化和teardown后置操作

霍格沃兹测试开发学社

软件测试|Python基础之面向对象(四)

霍格沃兹测试开发学社

软件测试|Python基础之模块导入和使用

霍格沃兹测试开发学社

淘天集团联合爱橙科技开源大模型训练框架Megatron-LLaMA

阿里技术

大模型 AIGC

阿里云PAI-灵骏大模型训练工具Pai-Megatron-Patch正式开源!

小偏执o

提高效率的神器!企业级SQL审核与开发工具

NineData

数据库 团队协作 企业 SQL开发 NineData

软件测试|数据库的内连接,左连接,右链接分别是什么

霍格沃兹测试开发学社

beaTunes5 for Mac(多功能音乐播放器) 5.2.33永久激活版

mac

windows 苹果mac beaTunes5 音乐管理和分析软件

通过UltraSync减轻主节点负担、提升业务系统性能,AntDB如何做到?

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

如何用华为云ModelArts平台玩转Llama2

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号9月PK榜

软件开发中的资料整理与归档,软件产品开发文档合集

金陵老街

项目管理 文档管理软件

软件测试|Pycharm运行与调试

霍格沃兹测试开发学社

软件测试|Python基础之包的使用和软件开发目录规范及常用内置模块

霍格沃兹测试开发学社

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