為什么開源代碼比商業(yè)代碼缺陷少?

2012-03-13 10:22:23來源:InfoQ作者:

Coverity的一項調(diào)查發(fā)現(xiàn),在代碼量相當(dāng)?shù)那闆r下,使用了static analysis的開源代碼通常比商業(yè)私有代碼的缺陷少。

Coverity的一項調(diào)查發(fā)現(xiàn),在代碼量相當(dāng)?shù)那闆r下,使用了static analysis的開源代碼通常比商業(yè)私有代碼的缺陷少。

Coverity Scan是一個關(guān)注開源代碼完整性的公私合營的研究項目,于2006年由美國國土安全部(U.S. Department of Homeland Security)發(fā)起并與斯坦福(Stanford)大學(xué)合辦。在過去的五年中,Coverity Scan采用Coverity公司的static analysis工具評估和改進(jìn)了300多個開源項目的代碼質(zhì)量。比如在2006年,此工具就幫助開源代碼修復(fù)了6000多個Bug。

近期發(fā)布的2011 Scan報告(PDF)顯示,開源項目的缺陷通常比商業(yè)私有項目少。該報告分析了2011年期間最活躍的前45個開源項目的代碼,總共37,000,000多行代碼,并且只有影響級別為中或高的缺陷參與采樣分析。調(diào)研數(shù)據(jù)不涉及QA測試或后續(xù)發(fā)布過程中發(fā)現(xiàn)的缺陷。參與Coverity Scan計劃的所有項目的代碼都經(jīng)過Coverity Static Analysis的測試和分析。

參與分析的開源項目的代碼行數(shù)大部分在100k-500k行之間,只有2個項目超過了7M行,總代碼量為37,446,469行,平均每個項目約832,000行。開源項目的缺陷率為每千行代碼0.45個缺陷,而對于那些沒有采用自動測試工具比如static analysis的公司,行業(yè)平均值大約是每千行代碼1個缺陷。

Coverity Scan覆蓋了14種缺陷,開源代碼中位列前五的缺陷是:

缺陷 數(shù)量 影響

控制流問題

3,128

空指針異常

2,818

未初始化的變量

2,051

內(nèi)存越界

1,551

錯誤處理方面的問題

1,535

調(diào)查同時覆蓋了41個使用了static analysis的商業(yè)私有項目。這些項目規(guī)模各異,也來自不同領(lǐng)域,總共超過300M行代碼,平均每個項目代碼量約有7.4M行。結(jié)果顯示,在項目規(guī)模相當(dāng)?shù)那闆r下,開源代碼的質(zhì)量與私有的持平。例如,Linux 2.6代碼大約有7M行,缺陷密度為0.62,私有代碼則大約為0.64。通常Linux的缺陷密度比較低,但其代碼量在2011年從5.3M增至6.8M。作為參考,PHP 5.3和PostgreSQL 9.1的缺陷密度值則為每千行代碼0.2和0.21個缺陷。

綜合上述,此次調(diào)查清晰地表明,采用自動測試,包括static analysis,能夠很好地減少代碼缺陷的數(shù)量。

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

關(guān)鍵詞:開源代碼開發(fā)

贊助商鏈接: