当前位置:首页 >  技术 >  正文

哪种编程语言最容易出bug?

 2018-01-03 08:49  来源:程序师  我来投稿

  小程序创业扶持计划 实现月入10万创业梦

  最近,ACM发布了一个关于编程语言对软件质量的影响的研究报告,在报告中有一些关于bug的有趣发现。

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

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

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

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

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

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

  

583ead3fced61cb5e6b1d5f48b8b2fb5.jpeg-wh_651x-s_1223148800

 

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

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

  

e9fa772e88007b6c43a9317ec9ed8f1a

 

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

  

907a2b650c4b40778c43eb829198bbdb

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

  

e8ae536c453ea0bec5c519ff021032cd

394cd2235cd5d549e2c1bc1bd1ba6367

 

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

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

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

  

242107b880ff7becaba4233508e2fd68.jpeg-wh_600x-s_2257135135

 

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

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

  

553eb1c75501a430c1953c52798c6876

 

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

  最终结论

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

申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!

责任编辑:西瓜

相关标签
编程语言

相关文章

  • 技术干货 | 为什么说SLAM2.0时代到来?

    高仙是全球最早从事SLAM技术研发和应用探索的公司之一,成立于2013年,5年间,高仙已成功向下游近百家智能机器人终端企业提供完整的SLAM商用解决方案,并实现了在国内该领域超过60%的市场占比,机器人总体运行超过百万公里。

  • 易观方舟V2.9发布:智能路径分析、维度字典、时间对比正式上线

    数据分析驱动产品迭代,而作为精细化运营分析工具的易观方舟,经过程序员们群策群力的优化改进,近日也迎来了新的功能更新,方舟迭代是为了更好地服务客户数据精细运营。本次易观方舟V2.9版本,主要新增了智能路径分析模型、事件分析-时间维度的对比、维度字典功能。具体功能更新如下:

  • 数据库选型解读,分布式数据库带来的技术革命

    对所有企业来说,数据库都是其IT系统的核心应用。随着企业的创新与转型,业务日益增加与复杂,产生的数据量也越来越庞大,对数据库也有了更高的要求。大规模、高可靠、高扩展及高性能成为新一代数据库的选型标准。

  • 分布式关系型数据库RadonDB体验归来

    前段时间收到吴老师的邀请,是参加青云QingCloud分布式数据库(RadonDB)的一个技术体验活动,从今天的技术体验来算,收获还是很多的,大家相聊甚欢,交流了很多工作中和工作之外的想法,原来那些我们看起来难走的路大家都曾经走过。

    标签:
    数据库设计
xm

热门排行

信息推荐

扫一扫关注最新创业资讯