軟體工程/質量/程式碼審查簡介
程式碼審查是對計算機原始碼進行的系統性檢查(通常是同行評審)。其目的是發現和修復在初始開發階段被忽視的錯誤,從而提高軟體的整體質量和開發人員的技能。審查以各種形式進行,例如結對程式設計、非正式的程式碼走查和正式的程式碼審查。[1]
程式碼審查通常可以發現並消除常見的漏洞,例如格式字串漏洞、競爭條件、記憶體洩漏和緩衝區溢位,從而提高軟體安全性。基於 Subversion(使用 Redmine 或 Trac)、Mercurial、Git 或其他工具的線上軟體儲存庫允許團隊成員協作審查程式碼。此外,用於協作程式碼審查的專用工具可以促進程式碼審查流程。
自動程式碼審查軟體透過系統地檢查原始碼中已知的漏洞,減輕了開發人員審查大量程式碼的任務。
Capers Jones 對 12,000 多個軟體開發專案的持續分析表明,正式審查的潛在缺陷發現率在 60% 到 65% 之間。對於非正式審查,該數字低於 50%。[需要引用] 大多數形式的測試的潛在缺陷發現率約為 30%。[2]
典型的程式碼審查速度約為每小時 150 行程式碼。對於關鍵軟體(例如安全關鍵嵌入式軟體),每小時檢查和審查超過幾百行程式碼可能太快而無法發現錯誤。[3] 行業資料表明,程式碼審查最多可以實現 85% 的缺陷去除率,平均去除率約為 65%。[4]
程式碼審查實踐可分為三大類:結對程式設計、正式程式碼審查和輕量級程式碼審查。[1]
正式的程式碼審查,例如 Fagan 檢查,涉及一個謹慎且詳細的流程,包括多個參與者和多個階段。正式程式碼審查是傳統的審查方法,軟體開發人員參加一系列會議,逐行審查程式碼,通常使用材料的列印副本。正式審查非常徹底,已被證明可以有效地發現被審查程式碼中的缺陷。
輕量級程式碼審查通常比正式程式碼審查需要更少的開銷,但如果正確執行,它同樣有效。[需要引用] 輕量級審查通常作為正常開發流程的一部分進行
- 肩並肩 - 一名開發人員站在作者的肩膀上,作者向他們講解程式碼。
- 電子郵件傳遞 - 原始碼管理系統在程式碼簽入後自動透過電子郵件將程式碼傳送給審閱者。
- 結對程式設計 - 兩名作者在同一工作站上共同開發程式碼,這在極限程式設計中很常見。
- 工具輔助程式碼審查 - 作者和審閱者使用專門設計用於同行程式碼審查的工具。
其中一些也可能被稱為“程式碼走查”(非正式)或“評論”(快速且非正式)。
許多避免使用傳統正式程式碼審查的團隊在他們的正常開發流程中使用上述輕量級審查形式之一。一本名為同行程式碼審查的最佳保密秘訣的書中發表的一項程式碼審查案例研究發現,輕量級審查發現的錯誤與正式審查一樣多,但速度更快,成本效益更高。
從歷史上看,正式程式碼審查需要在審查活動和執行時間上投入大量資金。
有些人認為,熟練、有紀律地使用一些其他開發實踐可以帶來類似的高潛在缺陷發現/避免率。此外,XP 支持者可能會爭論,疊加額外的 XP 實踐,例如重構和測試驅動開發,將導致與傳統方法相當的潛在缺陷水平,而無需投入。[需要引用]
程式碼分析工具的使用可以支援這項活動。特別是那些在 IDE 中工作的工具,因為它們為開發人員提供關於編碼標準合規性的直接反饋。
- ↑ a b Kolawa, Adam (2007). 自動缺陷預防:軟體管理最佳實踐. 約翰·威利父子公司-IEEE 計算機學會出版社. 第 260 頁. ISBN 0470042125.
{{cite book}}: More than one of|pages=and|page=specified (help); Unknown parameter|coauthors=ignored (|author=suggested) (help) - ↑ Jones, Capers; Christof, Ebert (2009 年 4 月). "嵌入式軟體:事實、數字和未來". IEEE 計算機學會. 檢索於 2010-10-05.
- ↑ Ganssle, Jack (2010 年 2 月). "程式碼檢查指南" (PDF). Ganssle 集團. 檢索於 2010-10-05.
- ↑ Jones, Capers (2008 年 6 月). "缺陷潛力和缺陷消除效率的度量". 交叉對話,國防軟體工程雜誌. 檢索於 2010-10-05.
- Jason Cohen (2006). 同行程式碼審查的最佳秘訣(現代方法。實用建議。). Smartbearsoftware.com. ISBN 1599160676.
- 安全程式碼審查常見問題
- 安全程式碼審查指南
- 輕量級工具支援有效程式碼審查 白皮書
- 程式碼審查最佳實踐 白皮書,作者 Adam Kolawa
- 同行程式碼審查最佳實踐 白皮書
- 程式碼審查案例研究
- "程式碼檢查指南"(Jack G. Ganssle)
- 文章 實用程式碼審查的四種方法