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