阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

Coverity:开源代码比商业代码缺陷少

  • 2012-03-12
  • 本文字数:911 字

    阅读完需:约 3 分钟

Coverity 的一项调查发现,在代码量相当的情况下,使用了 static analysis 的开源代码通常比商业私有代码的缺陷少。

Coverity Scan 是一个关注开源代码完整性的公私合营的研究项目,于 2006 年由美国国土安全部(U.S. Department of Homeland Security)发起并与斯坦福(Stanford)大学合办。在过去的五年中,Coverity Scan 采用 Coverity 公司的 static analysis 工具评估和改进了 300 多个开源项目的代码质量。比如在 2006 年,此工具就帮助开源代码修复了 6000 多个 Bug。

近期发布的 2011 Scan 报告(PDF)显示,开源项目的缺陷通常比商业私有项目少。该报告分析了 2011 年期间最活跃的前 45 个开源项目的代码,总共 37,000,000 多行代码,并且只有影响级别为中或高的缺陷参与采样分析。调研数据不涉及 QA 测试或后续发布过程中发现的缺陷。参与 Coverity Scan 计划的所有项目的代码都经过 Coverity Static Analysis 的测试和分析。

参与分析的开源项目的代码行数大部分在 100k-500k 行之间,只有 2 个项目超过了 7M 行,总代码量为 37,446,469 行,平均每个项目约 832,000 行。开源项目的缺陷率为每千行代码 0.45 个缺陷,而对于那些没有采用自动测试工具比如 static analysis 的公司,行业平均值大约是每千行代码 1 个缺陷。

Coverity Scan 覆盖了 14 种缺陷,开源代码中位列前五的缺陷是:

缺陷 数量 影响 控制流问题

3,128

空指针异常

2,818

未初始化的变量

2,051

内存越界

1,551

错误处理方面的问题

1,535

调查同时覆盖了 41 个使用了 static analysis 的商业私有项目。这些项目规模各异,也来自不同领域,总共超过 300M 行代码,平均每个项目代码量约有 7.4M 行。结果显示,在项目规模相当的情况下,开源代码的质量与私有的持平。例如,Linux 2.6 代码大约有 7M 行,缺陷密度为 0.62,私有代码则大约为 0.64。通常 Linux 的缺陷密度比较低,但其代码量在 2011 年从 5.3M 增至 6.8M。作为参考,PHP 5.3 和 PostgreSQL 9.1 的缺陷密度值则为每千行代码 0.2 和 0.21 个缺陷。

综合上述,此次调查清晰地表明,采用自动测试,包括 static analysis,能够很好地减少代码缺陷的数量。

查看英文原文: Coverity: Open Source Code Has Fewer Defects than Commercial One

2012-03-12 06:472548
用户头像

发布了 114 篇内容, 共 31.7 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

Java 常见的几种 OOM

hepingfly

Java OOM

Suricata-流的处理

Phantasm

网络安全 suricata flow

BGP、OSPF、MPLS路由协议RFC分享

Phantasm

求刚好大于当前数组组合,Code Review最佳实践,JVM框架原理,JVM垃圾回收原理 John 易筋 ARTS 打卡 Week 12

John(易筋)

Code Review ARTS 打卡计划 JVM虚拟机原理 JVM垃圾回收原理 Array算法

十年一梦,小米的原罪得到救赎了吗?

脑极体

【API进阶之路】帮公司省下20万调研费!如何巧用情感分析API实现用户偏好调研

华为云开发者联盟

反馈 API 华为云 API Explorer平台 用户调研

吃灰的旧显示器别扔!

小匚

学习 随笔杂谈

应用开发基础之-并发编程

superman

学了那么多技术,为何依然成不了架构师

菜根老谭

架构设计原则

一次好的聊天可以超过自己努力啃几周的书籍

良知犹存

程序人生

边云协同!EM-BOX视频分析盒加速安全生产场景落地AI应用

百度大脑

人工智能 人脸识别 图像识别 百度大脑 人体识别

微服务、DDD

chenzt

“云”上教与学,让教育不止步于课堂

Geek_116789

ARTS打卡 第11周

引花眠

ARTS 打卡计划

深化区块链技术的应用 体现其价值产业发展良机

CECBC

区块链技术 数字经济

那些不可貌相的代码规范

废材姑娘

代码质量

ARTS 打卡(20.07.20-20.07.26)

小王同学

ARTS打卡Week 10

teoking

一款基于 Python 语言的 Linux 资源监视器!

JackTian

Python GitHub Linux bashtop bpytop

内存总是不够?HBase&GeoMesa配置优化了解一下

华为云开发者联盟

内存模型 内存 HBase 大集群 GeoMesa

ARTS-WEEK10

一周思进

ARTS 打卡计划

程序的机器级表示-控制

引花眠

计算机基础

面试这么撩准拿offer,HashMap深度学习,扰动函数、负载因子、扩容拆分,原理和实践验证,让懂了就是真的懂!

小傅哥

Java 面试 hashmap 负载因子 扰动函数

云图说 | 3分钟创建一个游戏类工作负载

华为云开发者联盟

Docker 容器 华为云 工作负载 2048游戏

Android 原生 SQLite 数据库的一次封装实践

vivo互联网技术

sqlite android 数据库

当实证资产定价遇上机器学习

分析101

人工智能 学习 金融科技 金融 资产定价

设计模式之——JDK动态代理的源码分析

诸葛小猿

动态代理 cglib 代理模式 Proxy

十多位全球技术专家,为你献上近十个小时的.Net微服务介绍

newbe36524

容器 微服务 .net core netcore

计算机网络基础(十六)---传输层-可靠传输的基本原理

书旅

计算机网络 网络 协议族 网络层

品质网络的迭变之路,以及运营商的未来之匙

脑极体

《Java并发编程的艺术》读书笔记1:说说并发编程

Jason

多线程 并发

Coverity:开源代码比商业代码缺陷少_软件工程_Abel Avram_InfoQ精选文章