菲洛嘉青春动能素135HA FILLMED® NCTF 135HA LED指示灯的常见故障分析 智微智能 Elkhartlake K075终端,零售产业新选择 天空蓝拓客管理系统详细介绍版 muso公链项目 天使计划 是什么?[秘] 独家揭秘最前沿的家装“黑科技”——掌赋 天博体育欧洲杯特辑,东道主法兰西的失意2016 亚马逊的送货侦察员 学习听起来像挡泥板 Google Comics Factory使ML变得容易 笑着说-男性或女性 Amazon Rekognition中更好的人脸检测 关于Spaun的真相-大脑模拟 两个聊天机器人彼此聊天-有趣又怪异 GANPaint:将AI用于艺术 WCF和WF给予社区 从耳朵到脸 所有神经网络的深层缺陷 蠕虫在尾巴上平衡杆子 Kickstarter上的OpenCV AI套件 TensorFlow-Google的开源AI和计算引擎 众包取代新闻工作者 Google的DeepMind学会玩街机游戏 哑机器人V智能机器人 .NET与.NET 5融为一体 Google的深度学习-语音识别 LInQer将.NET LINQ移植到Javascript 机器人TED演讲-新的图灵测试? GAN的发明者加入苹果 您的智能手机会监视您键入的内容 人工智能帮助改善国际象棋 Zalando Flair NLP库已更新 TensorFlow 1.5包含移动版本 AlphaGo输了一场比赛-比分3-1 虚拟机器学习峰会 Microsoft开源AI调试工具 SharePoint走向移动 F#4.0发出文化变革的信号 克里斯蒂拍卖AI艺术品 人工智能如何区分 Facebook在蒙特利尔的新AI实验室 Mozilla想要您的声音 微软使用极深的神经网络赢得ImageNet 建立AI合作伙伴关系 .NET Core 3-Microsoft几乎回到了起点 神经网络-更好的销售商? Google使用AI查找您的住所 虹膜-适用于Android的Siri证明苹果没有优势 TensorFlow 2提供更快的模型训练 深度学习研究人员将为Google工作
您的位置:首页 >大数据 >

哪些语言容易出错

十月份的ACM通讯中报告了对编程语言对软件质量的影响的研究。在2017年这个最受欢迎的新闻中,我们报告了与bug流行有关的一些主要发现。

研究人员Baishakhi Ray,Daryl Posnett,Premkumar Devanbu和Vladimir Filkov使用GitHub上的数据进行了大规模的实证研究,以调查程序员之间关于哪种语言最适合特定任务的争论。他们将多重回归建模与可视化和文本分析相结合,以研究语言功能(例如静态类型与动态类型)以及允许类型与禁止类型混淆对软件质量的影响。

他们的结论的简短形式摘要如下:

语言设计确实对软件质量有显着但适度的影响。最值得注意的是,似乎确实不允许类型混淆比允许类型混淆要适度,并且在功能语言中,静态类型也比动态类型好。我们还发现功能语言比过程语言要好一些。

练习的目的是阐明一种想法,即编程语言选择的选择会影响编码过程和最终的编程,重点是静态类型对动态类型:

主张采用强类型的静态类型的拥护者倾向于认为静态方法可以尽早发现缺陷。对他们而言,一盎司的预防胜于一磅的治疗。但是,动态类型的提倡者认为,保守的静态类型检查会浪费开发人员资源,并且最好依靠强动态类型检查来捕获类型错误。但是,这些争论主要是扶手椅式的,只有轶事证据支持。

为了进行此调查,团队从GitHub中选择了前19种编程语言,并将Typescript添加为第20种语言,并确定了主要用每种语言编写的前50个项目。然后,他们丢弃了提交少于28个(第一个四分位数)的项目,并且放弃了多语言项目中使用的少于20个提交的任何语言。

学习表语言

如上表所示,这为研究提供了用17种语言开发的728个项目。这些项目跨越18年的历史,包括29,000个不同的开发人员,157万次提交和564,625次错误修复提交。

接下来,团队定义语言类,区分三种编程范例:过程,脚本和功能;类型检查分为两类:静态和动态;是否不允许隐式类型转换或允许隐式类型转换和托管内存,而不是非托管类型:

学习表语言类

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

学习错误类型需要解决的第一个问题是“某些语言是否比其他语言更容易出现缺陷?”并使用回归模型将每种语言对缺陷数量的影响以及所有语言的平均影响与缺陷修复提交进行了比较:

研究缺陷

该表的顶部是变量,用于控制可能相关的因子。项目年龄已包括在内,因为较旧的项目通常会具有大量的缺陷修复程序;预计所涉及的开发人员数量和项目的原始大小也会影响bug的数量,最终会影响提交的数量。发现所有四个都具有显着的正系数。正系数最强的语言-与大量缺陷修复相关的语言包括C ++,C和Objective-C,以及PHP和Python;而Clojure,Haskell,Ruby和Scala均具有显着的负系数,这意味着与语言相比,功能语言与程序或脚本语言相比,与缺陷语言相关的缺陷更少。

研究人员接下来将注意力转移到缺陷倾向性上,错误修复提交与每个域每种语言的总提交之比,并生成一个热图,其中较深的颜色表示更容易出现错误:

学习领域

从上面的热图可以得出结论,应用程序领域与语言缺陷倾向之间不存在一般关系。但是,查看语言类和错误类别之间的关系表明:

缺陷类型与语言密切相关。一些缺陷类型(例如内存错误和并发错误)也取决于语言原语。语言对于特定类别比对整体缺陷更重要。

研究错误类型

由于该热图显示了 Proc-Static-Implicit-Unmanaged类与并发和内存错误之间的密切关系。它还表明,静态语言通常更容易出现故障和性能错误,其次是功能动态明确管理的语言,例如Erlang。

总结调查结果,报告的结论是:

数据表明功能语言优于过程语言;它表明禁止隐式类型转换比允许隐式类型转换更好。静态类型胜于动态类型;并且托管内存使用情况比非托管情况要好。此外,语言的缺陷倾向通常与软件领域无关。此外,语言与单个错误类别的相关性要比整体错误更多。

研究

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。