争论背后的编程语言:谁最容易出bug?

【IT168 评论】10月份,ACM发布了一个关于编程语言对软件质量的影响的研究报告,在报告中有一些关于bug的有趣发现。

研究人员Baishakhi Ray,Daryl Posnett,Premkumar Devanbu和Vladimir Filkov使用GitHub数据进行了一次大规模的实验性调查,主要研究程序员对于哪种编程语言针对某个特定任务是最好的争论。研究院通过多重回归建模、可视化以及文本分析等结合在一起的方法,研究了静态和动态语言的特性,以及编程语言对软件质量的影响。

分析得到的结论可以简单表述为:

语言设计确实对软件质量有显著的影响。最值得注意的是,看起来不允许类型混淆的情况要比允许的稍微好一点,而且在函数式语言中,静态类型也比动态类型要好一些。我们还发现函数式语言比过程语言稍好一些。

这个研究的目的在于阐明编程语言是否会同时影响编程的过程和结果,重点在于静态和动态语言的比较:

倡导静态类型语言强大的人认为静态可以及早发现缺陷,对于他们来说预防远比治疗要好得多;而动态类型语言的倡导者则认为保守的静态类型检查是开发资源的浪费,而且还可以依靠强大的动态类型检查来捕捉类型错误。当然,这些争论大多还是停留在纸上谈兵的阶段,缺乏事实证据支撑。

为了进行这项调查,团队选择了GitHub排名前19位的编程语言,并且添加TypeScript作为第20种编程语言,然后以每种语言编写的前50个项目为样本,同时放弃了提交次数少于28次的项目,如果是多种语言提交的项目,那么使用该语言的有效提交次数少于20次也会被放弃。

然后,如上表所示,这项研究分析了以17种语言开发的728个项目。这些项目跨越了18年的历史,囊括了2.9万名不同的开发人员,157万次提交和564625次错误修复提交。

接下来,团队定义了语言类,区分了三个编程范例:程序、脚本和功能;两类类型检查:静态和动态;隐式类型转换是否被禁止或允许,以及管理内存或未管理内存:

使用关键字搜索错误修复信息的10%来训练一个错误分类器,研究人员确定了每个bux-fix提交的原因和影响。

要解决的第一个问题是“有些语言比其他语言更容易出现缺陷吗?”“这是用回归模型来比较每种语言对所有语言平均缺陷数量的影响,并针对缺陷修复提交:

在这张表的顶部是一些变量,这些变量被用来控制可能与之相关的因素。项目年龄主要是反映了在一些较老的项目中,通常会有更多的缺陷修复;参与的开发人员的数量和项目的原始大小也会影响到bug的数量,最终提交的数量也是很大影响因素。

具有最强正系数的语言即与缺陷修复更相关的编程语言是c++、C、objective - C,以及PHP和Python。而Clojure、Haskell、Ruby和Scala都有显著的负系数,这意味着这些语言不太可能导致缺陷修复提交。对于语言类来说,函数式语言的缺陷比程序或脚本语言都要少。

研究人员接下来将注意力转移到缺陷的倾向上,即缺陷修复对每种语言总提交数的比率,并生成了一个热图,其中颜色越深表明越容易出现错误:

从上面的热图中可以得出结论:应用领域与语言缺陷倾向性之间没有一般的关系。但是观察语言类和错误类别之间的关系表明:

缺陷类型与语言紧密相关;内存错误和并发错误等一些缺陷类型也依赖于语言原语。对于特定类别,语言比缺陷整体来说更重要。

由于这个热图显示了Proc-Static-Implicit-Unmanaged 类与并发性和内存错误之间的强关系。它还表明,静态语言通常更容易出现故障和性能错误,其次是 Functional-Dynamic-Explicit-Managed 语言,如Erlang。

这次调查的最终结论

数据表明,函数式语言优于过程语言,不允许隐式类型转换要比允许更好;静态类型优于动态类型。而且,管理内存使用比未管理好。此外,一般而言,语言的缺陷倾向与软件领域没有关联。此外,与总体bug相比,语言更与单个的bug类别相关。

本文来自企鹅号 - IT168媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程

设计模式六大原则(3):依赖倒置原则

定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过...

19170
来自专栏java一日一条

程序员面试技巧总结

热爱技术。表达你对你所做的一切感到骄傲,你对自己的选择充满自信,你对语言和工作流有着自己的看法。

6820
来自专栏企鹅号快讯

对主流编程语言的吐槽

1.C 语言 ? ? 作为拥有「便携式汇编语言」头衔的 C 语言, 绝对充斥着各种问题!相信没有人会喜欢编写,大量独立的头文件,也更没有几个人能在使用预处理器的...

24480
来自专栏CSDN技术头条

帮你提升 Python 的 27 种编程语言

【编者按】本文作者是 Python 的设计者之一 Nick Coghlan,总结了提升 Python 的 27 种编程语言,包括过程式编程、面向对象的数据模型、...

35880
来自专栏python小白到大牛

一行代码结果叹为观止,能做到这么极致的也只有python了

Python 这门语言非常的有趣,不仅可以做高大上的人工智能、大数据、机器学习。还可以用来做 Web、爬虫。还有其它很多的应用。今天我就给大家展示下一行 Pyt...

16030
来自专栏数据结构与算法

BZOJ4868: [Shoi2017]期末考试

Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布。第i位同学希望在第ti天 或之前得知所.有.课程的成绩。...

35860
来自专栏C语言及其他语言

【干货】27种主流编程语言分类及优劣

导读: 数据科学家 David Robinson 称,Python 是访问量增长最快的主流编程语言。在 Stackoverflow 上,主流编程语言如 Jav...

836100
来自专栏Python中文社区

Why Not Python?

Python是一款简单强大又好用的动态语言,但我不解的是,为何这样一个好用的语言,在国外已经流行了十几年,但在国内不要说流行,问很多人的答案都是...

30480
来自专栏大数据文摘

数据清洗要了命?这有一份手把手Python攻略

23730
来自专栏PPV课数据科学社区

Eric Raymond 对于几大开发语言的评价

来源:孟岩 英文:Eric Raymond 链接:blog.csdn.net/myan/article/details/1923 【译注】:Eric Raym...

36460

扫码关注云+社区

领取腾讯云代金券