Github 上编程语言和代码质量的大规模研究

Communications of the ACM上的一篇文章《A Large-Scale Study of Programming Languages and Code Quality in Github》,基于Github上数据收集及分析,研究编程语言对软件质量的影响。

方法论

数据收集

共收集了17 种语言开发的、有 18 年历史的 728 个项目。共包括 29,000 名开发人员、157 万次提交和 564,625 次错误修复提交。

表1: 每种语言Top 3项目

表2:数据集

由于一个项目可能使用多种语言,因此表2的第二列显示以某种容量(该语言至少在项目中有20次提交)使用某种语言的项目总数。我们进一步从项目中排除了该语言提交次数少于 20 次的某些语言。例如,我们发现 220 个项目在 C 语言中使用了 20 多个提交。这确保了每个语言-项目对都有足够的活动。

语言分类

便于后续分析,从不同的维度对编程语言进行了分类。包括编程范式(命名式过程、命名式脚本、函数式)、类型检查(静态检查、动态检查)、隐式类型转换、内存管理方式等维度。

表3: 编程语言的不同分类

识别项目域

便于后续分析,对所有项目进行了领域分类。

表4:领域及特征

Bug分类

通过提交日志对修复的Bug进行分类。根据错误的原因影响对错误进行分类。原因进一步分为不相交的错误子类别:算法、并发、内存、通用编程和未知。影响也分为四个不相交的子类别:安全、性能、故障和其他未知类别。

表5:Bug分类及在数据集中的分布

统计方法

采用回归方法,使用negative binomial regression (NBR) 方法进行建模。

结果

RQ1. Are some languages more defect-prone than others?

某些语言是否比其他语言更容易出现缺陷?

Result 1: Some languages have a greater association with defects than other languages, although the effect is small.

某些语言与缺陷的关联性比其他语言更大,尽管影响很小。

表6:某些语言比其他语言产生的缺陷更少 

RQ2. Which language properties relate to defects?

哪些语言属性与缺陷相关?

Result 2: There is a small but significant relationship between language class and defects. Functional languages are associated with fewer defects than either procedural or scripting languages.

语言等级和缺陷之间存在微小但显着的关系。与过程语言或脚本语言相比,函数式语言的缺陷更少。

表7:与其他语言类别相比,函数式语言与缺陷的关系较小,而过程性语言则大于或接近平均值 

RQ3. Does language defect proneness depend on domain?

语言缺陷倾向是否取决于领域?

Result 3: There is no general relationship between application domain and language defect proneness.

应用领域和语言缺陷倾向之间不存在一般关系。

RQ4. What is the relation between language and bug category?

语言和 bug 类别之间有什么关系? 

Result 4: Defect types are strongly associated with languages; some defect type like memory errors and concurrency errors also depend on language primitives. Language matters more for specific categories than it does for defects overall.

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值