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