同行評(píng)審在軟件質(zhì)量管理中的應(yīng)用
■ 牛少紅 朱彩云
按當(dāng)代軟件工程的一般認(rèn)識(shí),嚴(yán)格的軟件測(cè)試是確保軟件質(zhì)量的重要手段。然而這是一項(xiàng)費(fèi)時(shí)、費(fèi)錢(qián)的浩大工程,用于測(cè)試的時(shí)間多于用于開(kāi)發(fā)的時(shí)間,用于測(cè)試的費(fèi)用多于用于開(kāi)發(fā)的費(fèi)用。即使通過(guò)嚴(yán)格的測(cè)試,發(fā)現(xiàn)的問(wèn)題得到全部解決,也不能保證軟件不再出現(xiàn)各種問(wèn)題。國(guó)外大型軟件公司在多年的實(shí)踐中,總結(jié)出了既能節(jié)約經(jīng)費(fèi),縮短開(kāi)發(fā)周期,又能提高軟件質(zhì)量的有效手段,這就是“同行評(píng)審”。
同行評(píng)審是指“由軟件開(kāi)發(fā)者的同行遵循已定義的規(guī)程對(duì)軟件產(chǎn)品進(jìn)行的技術(shù)評(píng)審”。其目的是及早和高效地從軟件開(kāi)發(fā)過(guò)程中識(shí)別并消除缺陷,讓軟件變得更易理解和維護(hù),同時(shí)減少傳遞到最終軟件產(chǎn)品中的缺陷。同行評(píng)審的主要目的,一是發(fā)現(xiàn)開(kāi)發(fā)過(guò)程中文檔和軟件的具體錯(cuò)誤,二是通過(guò)對(duì)這些錯(cuò)誤的分類(lèi)和統(tǒng)計(jì),發(fā)現(xiàn)共同的錯(cuò)誤類(lèi)型和將來(lái)避免這類(lèi)錯(cuò)誤的方法,提供今后對(duì)所發(fā)現(xiàn)的同類(lèi)錯(cuò)誤進(jìn)行控制的數(shù)據(jù)。通過(guò)對(duì)開(kāi)發(fā)過(guò)程中文檔和軟件的反饋和從錯(cuò)誤中汲取教訓(xùn),避免今后類(lèi)似的缺陷和錯(cuò)誤發(fā)生。
同行評(píng)審并不能代替軟件測(cè)試,就像自檢、互檢不能代替專(zhuān)檢一樣。那么,為什么要引入同行評(píng)審呢?這是因?yàn)?,有些軟件產(chǎn)品在早期階段就可以通過(guò)同行評(píng)審的方法發(fā)現(xiàn)缺陷,但無(wú)法對(duì)其進(jìn)行測(cè)試;即使到了編碼階段,測(cè)試活動(dòng)也不能發(fā)現(xiàn)某些特定類(lèi)型的缺陷(例如違反編程規(guī)范)。
在軟件的開(kāi)發(fā)過(guò)程中,上一階段軟件產(chǎn)品中隱藏的缺陷不斷往下一階段軟件產(chǎn)品傳遞并擴(kuò)散,最終形成的軟件產(chǎn)品是一個(gè)包含多種缺陷的距離用戶(hù)真正需求很遠(yuǎn)的一個(gè)“東西”。這也要求軟件開(kāi)發(fā)者在軟件開(kāi)發(fā)的過(guò)程中不斷進(jìn)行同行評(píng)審,盡量減少傳遞到下一個(gè)階段的缺陷。軟件開(kāi)發(fā)各階段缺陷放大圖如圖1所示:
成功的同行評(píng)審是提高軟件質(zhì)量和工作效率的重要因素,不管人們喜歡與否,審查過(guò)程會(huì)迫使每個(gè)人在一種開(kāi)放式的環(huán)境中工作。一旦軟件開(kāi)發(fā)人員意識(shí)到了他們的工作都要接受同行評(píng)審,他們就會(huì)較早地將他們的工作公之于眾,以待監(jiān)督。在同行評(píng)審上的投入能把組織的一些質(zhì)量成本從昂貴的測(cè)試以及后期大規(guī)模的返工轉(zhuǎn)變?yōu)樵缙诘娜毕莅l(fā)現(xiàn)。更重要的是,軟件開(kāi)發(fā)人員學(xué)到了如何將工作做得更好,提高了組織的整體素質(zhì),從而避免了缺陷。
雖然同行評(píng)審的準(zhǔn)備、活動(dòng)和跟蹤需要花費(fèi)一定的時(shí)間和工作量,但這些可以在測(cè)試中節(jié)省更多。從經(jīng)濟(jì)角度考慮,許多缺陷是在早期階段注入的,越早消除缺陷就越能降低開(kāi)發(fā)成本。據(jù)統(tǒng)計(jì),對(duì)于保存精確記錄的大系統(tǒng),一套完整的同行評(píng)審體系能夠使項(xiàng)目在每個(gè)測(cè)試階段出現(xiàn)的錯(cuò)誤減少90%。這樣一來(lái),即使在綜合考慮同行評(píng)審活動(dòng)成本的情況下,同行評(píng)審活動(dòng)也會(huì)使測(cè)試成本下降50%~80%。同時(shí),通過(guò)同行評(píng)審,開(kāi)發(fā)人員能夠及時(shí)地得到專(zhuān)家的幫助和指導(dǎo),加深對(duì)工作成果的理解,更好地預(yù)防缺陷,在一定程度上提高了開(kāi)發(fā)生產(chǎn)率。
圖1 開(kāi)發(fā)各階段缺陷放大圖
同行評(píng)審的種類(lèi)有很多,自從IBM的Fagan發(fā)明了同行評(píng)審之后,軟件行業(yè)提出了很多同行評(píng)審模型,比較著名的有IEEE1028評(píng)審、微軟的技術(shù)評(píng)審、GillGraham審查、VanEmden審查、Yourdon結(jié)構(gòu)化走查等。
(一)同行評(píng)審的種類(lèi)
本文中按照CMMI模型的提法,將同行評(píng)審分為3 類(lèi)。
1.正式評(píng)審(Inspection)。通常是由經(jīng)過(guò)同行評(píng)審培訓(xùn)的項(xiàng)目經(jīng)理或PPQA主持,規(guī)模在 3~7人之間為宜,一般在完成了一個(gè)階段軟件產(chǎn)品后對(duì)其進(jìn)行的評(píng)審。正式評(píng)審的目的在于定位并除去階段軟件產(chǎn)品中的缺陷。
2.技術(shù)審查(TechnicalReviews),或稱(chēng)內(nèi)部評(píng)審,通常由技術(shù)負(fù)責(zé)人或項(xiàng)目經(jīng)理召集,三人以上參加。技術(shù)審查一般是在階段軟件產(chǎn)品的中期進(jìn)行或完成了某部分獨(dú)立的階段軟件產(chǎn)品時(shí)進(jìn)行,也可在書(shū)寫(xiě)草案遇到問(wèn)題時(shí)就其中專(zhuān)門(mén)的一兩項(xiàng)問(wèn)題討論和審查,或是檢查階段軟件產(chǎn)品與規(guī)程、模板、計(jì)劃、標(biāo)準(zhǔn)的符合性或者變更是否被正確地執(zhí)行。技術(shù)審查的目的在于通過(guò)對(duì)開(kāi)發(fā)人員的階段軟件產(chǎn)品的技術(shù)審查,提出改進(jìn)意見(jiàn)。
3.走查(Walkthrough),又叫代碼走查或代碼走讀,審查的范圍根據(jù)需求的優(yōu)先級(jí)通常由管理人員來(lái)確定,主要是靜態(tài)質(zhì)量分析和編程規(guī)則檢查。通常是小型討論會(huì),一般是在階段軟件產(chǎn)品形成的早期進(jìn)行,編制者有一定的想法時(shí),希望從中獲得一些幫助或補(bǔ)充一些想法。當(dāng)然也可以在編制階段軟件產(chǎn)品的任何階段進(jìn)行,兩三個(gè)人參加,由編制者主持,主要是評(píng)估和提高階段軟件產(chǎn)品的質(zhì)量或教育參加者。
其中,“正式評(píng)審”是正式的同行評(píng)審方法,“技術(shù)審查”和“走查”是常用的非正式同行評(píng)審方法。
(二)同行評(píng)審的對(duì)象
同行評(píng)審的對(duì)象包括所有軟件開(kāi)發(fā)的中間和最終階段軟件產(chǎn)品,例如包括:
(1)產(chǎn)品需求規(guī)格說(shuō)明書(shū);
(2)用戶(hù)界面規(guī)范及設(shè)計(jì);
(3)架構(gòu)設(shè)計(jì)、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)及模型;
(4)源代碼;
(5)測(cè)試計(jì)劃、設(shè)計(jì)、用例及步驟;
(6)項(xiàng)目計(jì)劃,包括開(kāi)發(fā)計(jì)劃、配置管理計(jì)劃和質(zhì)量保證計(jì)劃等。
所有這些會(huì)涉及的評(píng)審內(nèi)容,應(yīng)該在編制的項(xiàng)目計(jì)劃或者小的開(kāi)發(fā)計(jì)劃中體現(xiàn),不應(yīng)該也不能是臨時(shí)性的安排。
根據(jù)同行評(píng)審的重要程度,正式評(píng)審、技術(shù)審查和走查三種形式的流程和評(píng)審結(jié)果的使用力度不盡相同,但其主要的步驟和內(nèi)容大體一致。
評(píng)審組的組成一般包括主持人一名、記錄人一名、評(píng)審人2-5人,被評(píng)人參加。
(一)正式評(píng)審流程
正式評(píng)審包括下述6個(gè)基本步驟。
1.預(yù)備:為保證評(píng)審的質(zhì)量,可以先進(jìn)行一個(gè)預(yù)備會(huì)議。
會(huì)議首先由作者花幾分鐘的時(shí)間向評(píng)審組概要介紹評(píng)審材料,例如講解一下本階段軟件產(chǎn)品的目標(biāo)是什么,其他相關(guān)的實(shí)現(xiàn)細(xì)節(jié)、開(kāi)發(fā)標(biāo)準(zhǔn)等。應(yīng)該允許甚至鼓勵(lì)評(píng)審組成員動(dòng)手查看階段軟件產(chǎn)品,或者查看開(kāi)發(fā)過(guò)程中所用到的檢查單等。這個(gè)講解的過(guò)程從某種角度上來(lái)說(shuō),也保證了作者提交階段軟件產(chǎn)品的質(zhì)量。會(huì)議結(jié)束時(shí)把文檔分發(fā)給每位與會(huì)者,下發(fā)的材料應(yīng)該控制在2小時(shí)之內(nèi)審核完成為宜。這些文檔可以包括:
? 要審查的階段軟件產(chǎn)品;
? 參考文檔;
? 階段軟件產(chǎn)品評(píng)審檢查表;
? 階段軟件產(chǎn)品審閱情況記錄表。
2.審查:在預(yù)備會(huì)和正式評(píng)審會(huì)之間,評(píng)審小組成員對(duì)階段軟件產(chǎn)品進(jìn)行徹底檢查,并依據(jù)相關(guān)標(biāo)準(zhǔn)和準(zhǔn)則評(píng)審階段軟件產(chǎn)品,記錄發(fā)現(xiàn)的缺陷、問(wèn)題種類(lèi)與嚴(yán)重程度、所用的時(shí)間等。
3.評(píng)審:在預(yù)定的正式評(píng)審時(shí)間內(nèi)(會(huì)議時(shí)間建議控制在2小時(shí)),評(píng)審小組成員以會(huì)議形式聚在一起,依次對(duì)產(chǎn)品進(jìn)行檢查。每個(gè)評(píng)審員花一定的時(shí)間(一般為十幾分鐘)指出問(wèn)題,并和作者確定問(wèn)題和定義問(wèn)題的嚴(yán)重程度。注意,評(píng)審過(guò)程中是發(fā)現(xiàn)錯(cuò)誤,而不是現(xiàn)場(chǎng)改正它們。
會(huì)議中,記錄員詳細(xì)記錄每一個(gè)已達(dá)成共識(shí)的缺陷,包括缺陷的位置、簡(jiǎn)短描述缺陷、缺陷類(lèi)別、該缺陷的發(fā)現(xiàn)者等。未達(dá)成共識(shí)的缺陷也將記錄下來(lái),加入“待處理”或者TBD標(biāo)識(shí),評(píng)審主持人將指派作者和評(píng)審員在會(huì)后處理評(píng)審會(huì)議中未能解決的問(wèn)題。
4.書(shū)寫(xiě)評(píng)審報(bào)告:評(píng)審主持人根據(jù)記錄員的記錄和自己的總結(jié),在一天內(nèi)寫(xiě)出評(píng)審報(bào)告,內(nèi)容包括:
? 根據(jù)評(píng)審專(zhuān)家個(gè)人的輸入創(chuàng)建總的問(wèn)題清單;
? 加入會(huì)議中發(fā)現(xiàn)的問(wèn)題;
? 剔除經(jīng)確認(rèn)屬于重復(fù)或者無(wú)效的問(wèn)題;
? 共同確定需要修改的問(wèn)題及修改的程度。
5.返工:作者根據(jù)評(píng)審報(bào)告的決議,負(fù)責(zé)解決確定的所有缺陷和問(wèn)題。
6.跟蹤:評(píng)審組長(zhǎng)必須確保所提出的每個(gè)問(wèn)題都得到了圓滿(mǎn)解決。必須仔細(xì)檢查對(duì)文檔的每個(gè)修正,以確保沒(méi)有注入新的錯(cuò)誤。
(二)技術(shù)審查流程
技術(shù)審查通常包括下述3個(gè)基本步驟。
1.準(zhǔn)備:評(píng)審組長(zhǎng)(通常是項(xiàng)目經(jīng)理)要求項(xiàng)目組成員提供需要考慮的特定問(wèn)題并分發(fā)評(píng)審材料。評(píng)審組長(zhǎng)確定評(píng)審重點(diǎn):
? 需要注意的特定問(wèn)題;
? 需要滿(mǎn)足的特殊標(biāo)準(zhǔn)或規(guī)格說(shuō)明;
? 需要審查的接口或依賴(lài)關(guān)系。
2.評(píng)審:評(píng)審人各自審查評(píng)審材料,目的是發(fā)現(xiàn)錯(cuò)誤,而不是改正它們(通常每次評(píng)審會(huì)不超過(guò)1小時(shí))。評(píng)審組組長(zhǎng)應(yīng)在一天內(nèi)寫(xiě)出評(píng)審報(bào)告。評(píng)審會(huì)議內(nèi)容包括:
? 匯總個(gè)人發(fā)現(xiàn)的問(wèn)題;
? 加入會(huì)議中發(fā)現(xiàn)的問(wèn)題。
3.跟蹤:作者負(fù)責(zé)解決評(píng)審報(bào)告中的所有錯(cuò)誤及問(wèn)題。評(píng)審組長(zhǎng)檢查所提出的每個(gè)問(wèn)題都得到了解決。組長(zhǎng)起草評(píng)審發(fā)現(xiàn)報(bào)告:
? 問(wèn)題或弱項(xiàng)清單;
? 小組對(duì)如何解決這些問(wèn)題或弱項(xiàng)清單的建議;
? 行動(dòng)事項(xiàng)。
(三)走查流程
走查對(duì)形式的要求更為簡(jiǎn)單,主要有下述兩種方式。
1.參與者驅(qū)動(dòng)法:參與者按照事先準(zhǔn)備好的列表,提出他們不理解的術(shù)語(yǔ)和認(rèn)為不正確的術(shù)語(yǔ)。作者必須回答每個(gè)質(zhì)疑,要么承認(rèn)確實(shí)有錯(cuò)誤,要么對(duì)質(zhì)疑做出解釋。
2.文檔驅(qū)動(dòng)法:作者向評(píng)審人仔細(xì)解釋文檔(或代碼)。在此過(guò)程中,可以將評(píng)審的內(nèi)容(如關(guān)鍵代碼、架構(gòu)圖、業(yè)務(wù)邏輯圖等)用投影儀投射到屏幕上,作者對(duì)階段軟件產(chǎn)品進(jìn)行講解,評(píng)審人不時(shí)針對(duì)事先準(zhǔn)備好的問(wèn)題或解釋過(guò)程中發(fā)現(xiàn)的問(wèn)題提出質(zhì)疑。它比參與者驅(qū)動(dòng)法可能更有效,往往能檢查出更多錯(cuò)誤。經(jīng)驗(yàn)表明,使用文檔驅(qū)動(dòng)法時(shí)許多錯(cuò)誤是由文檔講解者自己發(fā)現(xiàn)的。
在走查過(guò)程中,每個(gè)評(píng)審人都要記錄錯(cuò)誤或建議,會(huì)后要整理會(huì)議記錄,作為走查報(bào)告。階段軟件產(chǎn)品的作者可以根據(jù)自己的思路對(duì)走查報(bào)告質(zhì)疑。
圖2 三種同行評(píng)審方式的比較
對(duì)于同一個(gè)階段軟件產(chǎn)品,根據(jù)所處的階段可以使用不同的評(píng)審方式。如對(duì)于階段軟件產(chǎn)品剛剛勾畫(huà)、起草時(shí),可以采用走查方式;對(duì)于完成了某一個(gè)單獨(dú)的章節(jié),可以采用技術(shù)審查方式;待整個(gè)產(chǎn)品完成,使用正式評(píng)審全面考察。
(一)三種同行評(píng)審方式的比較
對(duì)不同的階段軟件產(chǎn)品,可以根據(jù)圖2建議結(jié)合項(xiàng)目情況進(jìn)行調(diào)整和裁剪。
(二)同行評(píng)審的結(jié)果
同行評(píng)審的結(jié)果通常有3種:
1.正常:評(píng)審專(zhuān)家做好了評(píng)審準(zhǔn)備,會(huì)議正常,結(jié)果明確,不需要再次評(píng)審;
2.延期:30%以上評(píng)審專(zhuān)家沒(méi)有做好準(zhǔn)備,會(huì)議無(wú)法正常進(jìn)行,需要確定再次評(píng)審時(shí)間;
3.取消:在初審階段就發(fā)現(xiàn)很多問(wèn)題,需要作者進(jìn)行修正,然后再進(jìn)行第二次同行評(píng)審。
實(shí)踐表明,應(yīng)用同行評(píng)審這一手段,可極大提高發(fā)現(xiàn)軟件缺陷的效率,降低測(cè)試費(fèi)用。AT&T的貝爾實(shí)驗(yàn)室在其開(kāi)發(fā)大型電力交換系統(tǒng)時(shí),發(fā)現(xiàn)單個(gè)錯(cuò)誤的成本降低了90%。在發(fā)現(xiàn)錯(cuò)誤方面,審查的成效是測(cè)試的20倍。TRW對(duì)一個(gè)大型軟件進(jìn)行了研究,發(fā)現(xiàn)2019個(gè)由用戶(hù)發(fā)現(xiàn)的錯(cuò)誤導(dǎo)致代碼變更。分析結(jié)果表明,在這些錯(cuò)誤中,通過(guò)代碼審查可以發(fā)現(xiàn)62.7%,通過(guò)設(shè)計(jì)審查可以發(fā)現(xiàn)57.7%。
(作者單位:駐北京地區(qū)軍事代表室,航天二院206所)