來聊一聊軟件開發中的同行評審
在《浪潮之巔》這本書中,吳軍老師描述了在Google早期的工作方式,其中有一段是這么寫的:我一般會在吃完晚飯后把代碼修改的清單發給克雷格做代碼審核,他一般晚上10點左右會回復我,給我修改意見,詳細到某一行多了一個空格。吳軍老師所描述的內容,其實就是軟件開發過程中的同行評審流程。
對于同行評審,我有相當的體會。之前在某大公司工作的時候,我參與了多個軟件版本的維護工作,發現不同版本程序質量差別很大。究竟是什么原因造成的?細究之后才發現,程序質量高的項目組在最終提交版本之前,無一例外都做了一件事情,那就是同行評審??磥恚性u審真的是十分重要。
對于任何一個軟件公司來說,幾乎在所有的軟件項目中,都需要同行評審。一個人不管能力多強,看問題的角度總會受到限制,寫出來的程序和文檔等也不會是十全十美的。如果能夠讓懂行的同事給參閱一下,并提出他們認為正確的意見,那么勢必會彌補單個開發人員思維的缺陷,并在一定程度上提高程序和產品的質量。
什么是同行評審?
同行評審(Peer Review)是一種結構化的正式評審,由生產者(作者)的同行,為識別異常和需要修改的部分而對工作產品進行的有組織、有計劃的檢查。
同行評審并不是對個人的工作不信任,其目的是盡早有效地消除軟件產品中的異常。
為什么要做同行評審?
在學校的時候,老師教導我們要獨立完成作業,因此,如果你在那個時候對別人的作業或在考試過程中進行“同行評審”,就是違規的。但軟件開發是一項團隊性的工作,需要大家協作來完成,所以,那種不愿意公開自己工作成果接受他人審閱的做法是行不通的。
為什么要做同行評審?
第一,凡是人皆有出錯的時候,要保證你做出的東西錯誤盡量少,就需要他人對其進行評審。這就是所謂的“三個臭皮匠,頂個諸葛亮。”
第二,對于軟件產品來說,缺陷發現得越早,糾正缺陷所需的費用就越少。因此,在軟件的開發階段,如果嚴格進行同行評審,那么后續流程中出現的錯誤就會很少,這也可以為公司節約糾錯的成本。
第三,同行評審過程中發現的錯誤可作為案例傳承下去,避免開發人員再次掉進同一個陷阱。“前事不忘,后事之師”,別人所犯的錯誤對自己有警示的作用。特別是對于新員工來說,經常參與同行評審,可減少試錯的次數,也能夠達到對新工作及早上手的目的。
同行評審的對象是什么?
在產品開發的各個階段中,需要參與同行評審的對象包括:
- 概念階段:產品需求說明書等。
- 計劃階段:系統方案、項目計劃等。
- 開發階段:詳細設計、單元測試規程(方案)、集成測試規程(方案)、代碼、數據庫腳本等。一般而言,在開始編碼之前,先要進行詳細設計評審,以確保程序流程的正確性,減少后續修改帶來的不良影響。
- 驗證階段:系統測試計劃、系統測試規程(方案)等。
同行評審有哪幾種類型?
同行評審的類型包括:審查、走查、單人復審和多人復審等。
什么是審查?審查的角色都有哪些?審查的步驟有哪些?有效評審的原則有哪些?
審查是同行評審的一種,在軟件項目中占有重要地位。
1.審查的定義:審查(Inspection)是一種正規的同行評審,適用于重要性和重復性較高的軟件產品。
2.審查的角色:包括主持人、講解員、記錄員、作者和審查員。一般說來,參與審查的有3到7人。各角色的分工如下:
- 主持人:需要具備領導技巧,負責管理審查過程,是審查流程中的關鍵角色。
- 作者:提供審查材料,并提供概要介紹;此外,作者也可以充當評審員。
- 記錄員:按照主持人的示意記錄產品和程序等的異常,在記錄的同時要對異常進行分類。
- 講解員:充分理解審查材料,并在講解的同時加以解釋。該角色不能由作者擔當。
- 審查員:所有參與審查的人員都可以是審查員;主要負責理解被審材料、進行個人檢查、做好準備并參加審查會議。
3.審查活動的步驟有7個,如下圖所示:
4.有效評審的原則包括:
- 第一,在預審期間要使用檢查單,檢查單用以記錄發現的缺陷。
- 第二,避免過度依賴檢查單。
- 第三,審查會議要限制在2小時之內,以避免長時間討論而偏離了審查會議的主題。
- 第四,審查的對象是產品而非生產者(作者),因此要避免對作者本人進行人身攻擊。
- 第五,“磨刀不誤砍柴工”,要給評審員提供足夠的預審時間,一般以提前兩天為佳。
- 第六,如果有與會人員未準備好,則將會議延期;如果有人確實抽不出時間,則取消評審。
當然,以上有效評審的原則很難同時滿足,各項目組要根據實際的情況來組織評審。
什么是代碼評審?其目的是什么?
對于軟件開發工程師來說,代碼評審是不可缺少的一個環節,也是提高代碼質量的一種有效的手段。
1.代碼評審的定義:代碼評審是一種正式的針對程序發起的一項同行評審活動,它由一組職責明確的主持人、作者、記錄員、審查員等人員通過一系列明確定義的過程對代碼進行靜態檢查來發現代碼中的異常。
2.代碼評審的目的:提早發現代碼缺陷、去除缺陷,以降低開發成本并提高產品質量。
如何徹底地執行同行評審?
同行評審流程固然重要,但要徹底地執行下去,需要做到以下幾點:
第一,公司要明確規定所有的軟件開發項目必須走同行評審的流程,并定期抽查同行評審的執行情況。
第二,作者本人要持有開放心態,愿意分享自己的工作成果,并勇于承認自身的不足而加以改進。很多人都不大樂意被別人指出自身的問題,而同行評審的目的就是要發現問題,因此,這在一定程度上是對作者心態的考驗。作者本人要明白是產品有缺陷,要對產品中的問題進行完善。
第三,評審人員要對事不對人,要懂得同行評審是為了發現產品的缺陷,而非人自身的問題。不要將同行評審活動變性為針對作者本人的人身攻擊,這就有傷整個團隊的凝聚力。同行評審的一個宗旨就是大家在一起學習,取長補短,共同提高。
第四,公司要對同行評審的結果進行總結,并以文檔的形式保存起來,方便后期查閱。很多軟件產品出現的問題都是相似的。在著手開發產品之前,如果能夠了解前期類似產品中出現的問題,那么大家就可以少走很多彎路,工作效率和產品質量也在無形中得到了提高。
總結
不管是成熟團隊也好,創業團隊也罷,為了確保軟件產品的質量,所有的工作成果(包括程序、文檔、圖形等)都應該接受同行評審。“三人行,則必有我師”,不管是老員工,還是新員工,都能夠從同行評審中受益。
【本文是51CTO專欄作者周兆熊的原創文章,作者微信公眾號:周氏邏輯(logiczhou)】