Coverity的一項(xiàng)調(diào)查發(fā)現(xiàn),在代碼量相當(dāng)?shù)那闆r下,使用了static analysis的開源代碼通常比商業(yè)私有代碼的缺陷少。
Coverity Scan是一個(gè)關(guān)注開源代碼完整性的公私合營的研究項(xiàng)目,于2006年由美國國土安全部(U.S. Department of Homeland Security)發(fā)起并與斯坦福(Stanford)大學(xué)合辦。在過去的五年中,Coverity Scan采用Coverity公司的static analysis工具評估和改進(jìn)了300多個(gè)開源項(xiàng)目的代碼質(zhì)量。比如在2006年,此工具就幫助開源代碼修復(fù)了6000多個(gè)Bug。
近期發(fā)布的2011 Scan報(bào)告(PDF)顯示,開源項(xiàng)目的缺陷通常比商業(yè)私有項(xiàng)目少。該報(bào)告分析了2011年期間最活躍的前45個(gè)開源項(xiàng)目的代碼,總共37,000,000多行代碼,并且只有影響級別為中或高的缺陷參與采樣分析。調(diào)研數(shù)據(jù)不涉及QA測試或后續(xù)發(fā)布過程中發(fā)現(xiàn)的缺陷。參與Coverity Scan計(jì)劃的所有項(xiàng)目的代碼都經(jīng)過Coverity Static Analysis的測試和分析。
參與分析的開源項(xiàng)目的代碼行數(shù)大部分在100k-500k行之間,只有2個(gè)項(xiàng)目超過了7M行,總代碼量為37,446,469行,平均每個(gè)項(xiàng)目約832,000行。開源項(xiàng)目的缺陷率為每千行代碼0.45個(gè)缺陷,而對于那些沒有采用自動測試工具比如static analysis的公司,行業(yè)平均值大約是每千行代碼1個(gè)缺陷。
Coverity Scan覆蓋了14種缺陷,開源代碼中位列前五的缺陷是:
缺陷 | 數(shù)量 | 影響 |
控制流問題 |
3,128 |
中 |
空指針異常 |
2,818 |
中 |
未初始化的變量 |
2,051 |
高 |
內(nèi)存越界 |
1,551 |
高 |
錯(cuò)誤處理方面的問題 |
1,535 |
中 |
調(diào)查同時(shí)覆蓋了41個(gè)使用了static analysis的商業(yè)私有項(xiàng)目。這些項(xiàng)目規(guī)模各異,也來自不同領(lǐng)域,總共超過300M行代碼,平均每個(gè)項(xiàng)目代碼量約有7.4M行。結(jié)果顯示,在項(xiàng)目規(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個(gè)缺陷。
綜合上述,此次調(diào)查清晰地表明,采用自動測試,包括static analysis,能夠很好地減少代碼缺陷的數(shù)量。
查看英文原文:Coverity: Open Source Code Has Fewer Defects than Commercial One