CMMI最佳實踐之同行評審提升軟件品質

CMMI最佳實踐之同行評審提升軟件品質
2008-11-20 作者:張瑾 來源:希賽網

軟件企業提高產品質量的手段,已經不僅僅是通過軟件測試人員(SQC)的努力,而是越來越多的按照「測試前行」的理念配合同行評審(Peer Review)來提高軟件產品的質量。其目的是爲了及早和高效地從軟件工作產品中識別並消除缺陷。但很多企業都會遇到一個問題,大家覺得同行評審的效果沒有達到預期的目的,有些時候只是一個形式主義。那麼如何才能將同行評審這把利器發揮的更有效果,下面將和大家一起對其進行徹底的剖析。

同行評審Peer Review的起源

在CMMI中同行評審是作爲VER(VERIFICATION)驗證的一個SG(特殊目標)被定義出來的。瞭解CMMI的朋友都會注意到CMMI中有VER驗證和VAL確認兩個PA,很多人都會有疑問,爲什麼同行評審Peer Review是屬於VER而不是VAL呢?

這可以從ISQTB對軟件靜態測試的定義來分析。靜態測試是相對於動態測試而言的,靜態測試是不動態執行程序代碼而尋找程序中可能存在的錯誤或評估程序的過程。相對於動態測試而言,靜態測試成本更低,效率更高。因爲靜態測試可以在軟件開發生命週期的早期就發現缺陷和問題,從而減少返工的成本。

所以同行評審是軟件測試領域的一種技術手段,只是大家以前沒有注意而已,所以CMMI纔將其放在VER驗證的下面。

同行評審的類型

按照被評審的對象進行劃分,可以分爲對代碼的走查和對各種工作產品(Work Product)的評審。這裏工作產品的意思是指在軟件開發生命週期中所產生的各種對象,包括各種文檔、組件等。

代碼走查依據的是每個公司頒佈的編碼規範等技術標準,可以通過事先制定好的檢查表(CheckList)進行檢查。

從同行評審的形式上可以分爲正式評審和非正式評審。非正式評審更加靈活、更加簡單,但其過程不夠嚴謹,適合對較小的工作產品進行檢查。本文主要針對技術文檔的正式評審過程進行講解。

同行評審的準備工作

首先要識別參與的人員,應該避免單一角色的人員參與評審。例如:對需求文檔的評審應該保證所有項目關係人的參與,其中客戶代表和軟件測試人員的參與是至關重要的;概要設計和詳細設計文檔的評審,開發人員的參與也十分關鍵。

第二,評審工作是要被計劃的。很多項目管理人員在制定項目計劃時,往往只關注軟件產品本身,而忽略了例如同行評審、週會等小的、週期性的事件和任務,這是WBS分解不完整的典型錯誤。項目經理應該認識到如果這些小的任務累加起來,所花費的工作量也是十分驚人的。

第三,制定同行評審准入條款。爲了避免在評審會上才發現待評審的工作產品是未完成的,因此,需要制定相關的檢查條件,由作者或第三方對其進行事先檢查。例如:需求文檔中是否存在遺漏的功能,需求文檔的格式是否符合要求,需求文檔中的UseCase是否正確等等。一般會推薦項目經理來檢查待評審的工作產品,因爲大多數的評審會是由項目經理主持的。

第四,明確同行評審的方法。因爲在評審會上仁者見仁智者見智,爲了避免無休止的爭論,事先確定評審的方法就非常重要的。常用的方法有一票否決制,加權打分法。

第五,制定同行評審的準出條款。也就是說什麼樣的工作產品是符合需求的,什麼樣的工作產品是可以得到與會人員的認可並通過本次同行評審的。例如:待評審的工作產品不能存在嚴重級別爲1~3的缺陷;待評審的產品必須覆蓋所有的業務功能等等。只有提前定義了準出的原則,那麼在評審會上就不會發生無休止的爭論。

第六,對本次同行評審的方法、准入條款和準出條款進行評審。如果這些內容不能得到與會人員的廣泛認可,那麼與會人員就沒有一個共同的起點和目標,評審效果將大打折扣。對於不同工作產品評審的方法、准入和準出的條款,一般在組織範圍內會提前定義,項目組只要使用就好。

第七,與會人員事先熟讀文檔。在公司範圍內要逐漸營造一種氛圍,評審工作也是和開發、設計、測試同等重要的。同行評審是一個集體活動,誰忽略了同行評審就等於浪費自己和大家的時間,是對集體的不尊重。另外,項目組要預留足夠的時間給大家看文檔,這也就是爲什麼同行評審是需要被提前計劃的原因。

第八,定義同行評審的準則。在評審會上做到有備而來,這一點也是同行評審的核心部分。既然是多人、多角色的參與評審,那麼每個人的視角就會不同,如何提高評審的效率,就只能是所有人都使用相同的尺子進行檢查,本次評審的準則就是尺子上的刻度。在組織範圍內可以先對不同的工作產品制定通用的準則,但項目是具有獨特性的,因此每個項目還要在此基礎上添加個性化的內容。

項目組可以制定一個評審準備表的模板,用於收集所有與會人員個人對本次評審所需要討論和關注的地方,也就是本項目個性化的準則。項目經理可以採用Delphi法對其進行收集。對收集後的內容進行彙總,就形成本次同行評審的準則。這個準則同樣需要得到所有與會人員的共同認可。

第八,發通知給所有與會人員,確定開會的時間和地點,以及誰是本次同行評審的主持人,誰是本次會議的記錄人。通常會比較推薦誰的工作產品誰記錄的原則,因爲開會的時間有限,記錄的內容也都是簡短精煉的,這樣可以避免遺漏重要的信息。另外他人寫的東西往往別人是看不懂的。

第九,確定評審的度量指標。這些度量指標是爲了最後衡量評審的效果和效率,一般可以在組織範圍內制定,評審會的主持人按照要求進行收集即可。

至此,同行評審的準備工作就完成了。雖然步驟十分多,但要做一次有效的、正式的同行評審,這些都是必須執行的。由此可見,高效的同行評審關鍵在於評審的準備工作是否到位。

進行同行評審

首先要明確同行評審的對象是工作產品,而不是該工作產品的作者。很多時候同行評審會就像批鬥會那樣給作者帶來很大的壓力,因此需要在公司範圍內要營造一種良好的氣氛。

同行評審會的焦點是本次評審的準則,也就是對所有與會人員提交上來評審準備表彙總後的內容。

同行評審會是針對問題進行討論的,而不是業務或技術的培訓會,更不是頭腦風暴會,這是提高同行評審效率的關鍵。

評審會的主持人要注意控制會議的內容,使其始終圍繞評審的準則開展討論。並記錄評審會所需要收集的度量數據,以便對本次評審的效果和效率進行客觀的衡量。

在評審過程中,作者對準則上的問題進行逐一解答,並且將所發現的問題或缺陷進行記錄。

最後同行評審會產生最終的結果,一般分爲:通過、有條件通過和不通過三種情況。這個評審的結果是依據本次評審所採用的方法來確定的。達不到之前定義的本次評審的準出條款,那麼本次評審就不能通過。如果絕大部分符合本次評審的準出條款,但又發現工作產品存在一定的缺陷,經過與會人員的討論和確認,這些缺陷是可以被修復的,並且影響不大,那麼本次評審可以有條件通過。但是這種情況下,主持人需要指派相應人員對發現的缺陷進行跟進,確保作者在會後對其進行修改,而且修改的結果符合要求。

分析同行評審的數據

爲了對同行評審的效果和效率進行客觀的評價,主持人依據提前定義的同行評審度量指標對評審會上的數據進行收集,並將度量的基礎數據提交專人進行統計和分析。這個步驟是標準同行評審必不可少的環節。這也是今後如何提高同行評審效果和效率的依據。在定義度量指標時需要切記,不能將這些數據與工作產品作者的個人績效進行掛鉤,否則同行評審就變成其個人的批鬥會。

至此一個標準的、正式的同行評審流程就結束了。可以看到要想將評審做好、做到位是不容易的。要想進一步提高同行評審的效果和效率,只按照以上步驟執行還不夠。接下來爲大家講解一些同行評審的技巧。

同行評審的一般技巧

1、 同行評審不是批鬥會,與會人員共同制定的評審準則應該在開會前給作者看看。這樣做的原因有兩個方面,第一:讓作者放下負擔參加評審,使本次評審徹底擺脫批鬥會的可能。第二:作者可以提前準備解決方案,使評審更有針對性,進一步提高評審的效果和效率。

2、 在組織範圍內應該建立一個例如TD那樣的缺陷管理平臺。同行評審發現所的問題和軟件測試人員測試發現的Bug同屬於軟件的缺陷,因此同行評審發現的缺陷也需要納入該平臺進行管理。

3、 爲了使同行評審更加有效,應該讓不同角色的相關人員都參與進來。參與評審的人員不是越多越好,而是越有經驗越好。要挑選有豐富工作經驗的人,而不是有充足時間的人。

4、 同行評審的工作量很大,特別是準備階段的工作量佔了很大的比例。而準備階段的工作量往往會被項目管理人員忽略,這就造成與會人員沒有時間理解待評審的工作產品,這也是同行評審被形式化的主要原因。因此,我們才強調同行評審是要被計劃的。

5、 針對不同的工作產品,評審準則在公司範圍內可以預先定義一些通用的內容,這樣可以降低評審準備階段的工作量。

6、 同行評審要想作出效果,必須先爭取高層的支持和理解。

如何進一步提高同行評審的效果

很多項目都會遇到同樣的問題,評審流程很正規,評審準則等也事先進行了討論和評審,與會人員也花了足夠的時間理解待評審的工作產品。但在項目結束後經過質量的回溯,就會發現有些產品缺陷其實應該在評審會上就被發現,也就是說評審的效果還不最佳的。如果遇到這種情況,還可以從以下兩個方面來進一步提高。

首先,防止落入檢查表的誤區。同行評審的準則其實就是檢查表中所要檢查的內容。當人們使用檢查表的時候,往往注意力就只集中於該表上所羅列的檢查項,而這些檢查項也往往集中與工作產品本身,而忽略了其他各種邊界的情況。如果是升級某個系統,就要考慮新系統與原有系統之間的接口是否匹配;如果是新開發的項目,也要考慮客戶原有數據如何導入的問題。總之可以將軟件測試中邊界值的理論從微觀的函數或方法的級別擴展到更大的範疇。

同行評審的準則是彙總了與會人員填寫評審準備表中的內容,因此,在評審準備表的模板中可以事先增加一些關於各種邊界信息,提醒不同角色的與會人員,從不同角度對各種邊界進行思考。

其次,工作產品的漏測率是與抽樣率是成反比的。如何提高同行評審的抽樣率呢?首先大家要知道同行評審所使用的抽樣就是同行評審準則中記錄的每個檢查項。只要檢查項覆蓋面足夠,那麼同行評審自然就會有效果。如果評審主持人收集回來的評審準備表中反饋的內容太少,那就沒有必要繼續進行評審,因爲這樣的評審只能是走過場。

評審的主持人和作者可以先將工作產品的內容進行分解,與WBS的分解方法相同,然後再將與會人員的反饋對應到每個分解出來的待評審的功能點,以此來判斷檢查項的覆蓋率是否足夠。例如表1所示:

表1- xxx概要設計文檔評審覆蓋率分析表

待評審的功能點

功能完整性

技術複雜度

可維護性

產品性能

功能點A1

X

X

功能點A2

X

X

功能點A3

X

X

功能點A4

X

X

功能點B1

X

X

功能點B2

X

功能點B3

X

X

X

……..

通過一個類似這樣表格,主持人就會發現有那些地方大家還沒有考慮到,沒有考慮到的地方可以在評審會上集中討論,或者在同行評審的準備階段讓與會人員還需要繼續提出建議。

如果提高同行評審的效率

要提高同行評審的效率,首先就要知道以往評審的度量信息,通過對度量的數據進行分析,找到可以改進的關鍵點,這其實就是CMMI進行過程改進的方法。在之前已經提到同行評審準備階段就需要明確收集相關度量的信息,本文將舉些常用的例子給大家參考。

同行評審發現缺陷數量

有些時候與會人員爲了應付評審,在填寫評審準備表時只爲了湊數量,而不注重質量,那麼可以通過對本次評審發現問題的數量進行分類統計,如果某次評審發現的問題較少,那麼有可能(只是有可能)是評審準備的工作沒有做好。

200810288834.jpg

同行評審ROI(投資回報率)

同行評審ROI是對評審效果的直接衡量。

投資回報率:在同行評審中就是所有與會人員花費在本次評審中的成本與本次評審所發現缺陷所具有的價值之間的比例。也就是每投入1塊錢在同行評審上可以得到多少錢的回報。公式如下:

與會人員在本次評審所花費的時間UT=本次評審準備工作的時間+開會的時間+[ 如果會後某些人員還需要對缺陷進行跟進的時間
 與會人員在本次評審所花費的成本UA=該人員的單位小時成本 * UT
 所有與會人員在本次評審總的花費PC(元)=UA1 + UA2 +UA3+……

公司可以通過一段時間的積累或討論,按照不同工作產品、不同的嚴重程度來評估該缺陷如果沒有被及時發現,那麼其返工的成本爲多少。例如:在對需求文檔和設計文檔進行評審時,發現同等級別嚴重程度的缺陷,其返工的成本是不同的,需求評審所發現的缺陷價值更高。

返工成本RC(元)=D1+D2+D3+……

同行評審ROI=返工成本RC / 所有與會人員在本次評審總的花費PC

在項目組內通過對同行評審ROI的度量可以看到每次評審的效果,如下圖所示,詳細設計的投資回報率是負數,但這並不能夠確定本次評審的效果不好,也可能是該設計文檔寫的太完美了,造成與會人員發現不了問題。

200810284963.jpg

同行評審抽樣率

如表1所示,經過經工作產品的分解,統計該表格有多少檢查項CI,有多少項是被覆蓋的CC。

同行評審抽樣率=被覆蓋的檢查項CC / 總檢查項CI * 100%

如下圖所示,本項目的覆蓋率都達到70%以上,符合公司的要求。

200810284774.jpg

這只是舉了幾個關於同行評審度量的例子,關於度量的理論,以及如何所制定的各種度量指標不是本文所要關注的內容。項目管理人員只需要通過度量分析的結果,關注有異常發生的點,並使用多個度量指標對其進行綜合分析,找到問題的根源,才能發現在同行評審中存在的問題。

至此,整個軟件同行評審的流程、方法和技巧都介紹完了。希望廣大軟件從業人員可以瞭解同行評審的重要性,以及如何才能將評審會開好並達到預期的目的。如需瞭解更多軟件工程的知識,也可以訪問我的個人網站www.zhang-jin.net與我進行交流。