評審尤其是同行評審,是提前發(fā)現缺陷,降低開(kāi)發(fā)成本的有效方法;但是很多企業(yè)并不重視,或者效果不佳。
原因有很多:沒(méi)有獲得合適的專(zhuān)家、組織不合理、方法不當等。針對代碼評審,我想簡(jiǎn)單地談幾點(diǎn)(其實(shí)其它工程文檔的評審存在同樣問(wèn)題):1、評審要計劃。
因為大家都很忙,各領(lǐng)域的專(zhuān)家也都有各自的工作,評審結果的好壞對他們工作績(jì)效沒(méi)有影響,所以專(zhuān)家投入多少精力來(lái)用于評審不受控,完全靠他們自己的職業(yè)精神。 所以,這就要求項目經(jīng)理比較有影響力,能夠爭取到足夠的、合適的專(zhuān)家來(lái)參與評審。
專(zhuān)家最好要提前協(xié)調,當然項目經(jīng)理首先要知道要請哪些專(zhuān)家(如系統專(zhuān)家、領(lǐng)域專(zhuān)家、測試人員、QA等),這些專(zhuān)家在哪里?能否獲得專(zhuān)家資源的支持,是項目經(jīng)理的項目管理能力一個(gè)重要體現。評審時(shí)間的投入比例,一般是第一次版本準備時(shí)間的3/5以上。
2、評審要分層次和重點(diǎn)。作為項目成員,在代碼編寫(xiě)完成后,首先是自檢,這時(shí)發(fā)現的缺陷不計算;然后是項目組內的評審,這時(shí)發(fā)現的缺陷應計算;最后才是外部評審。
應提前把相關(guān)文檔和代碼交給評審專(zhuān)家,讓他們各自評審;根據項目和評審結果的情況,決定是否召開(kāi)評審會(huì )議,評審會(huì )議以確認問(wèn)題為主,而不是討論解決方案。對于重要的核心的代碼,要投入重點(diǎn)評審力量;另外,對于能力不足的成員所完成的代碼,也要重點(diǎn)評審。
每個(gè)角色也應明白各自評審重點(diǎn),如QA重點(diǎn)放在編程規范、測試人員側重在可測性、系統專(zhuān)家側重在從整體來(lái)考慮(如對其它功能的影響、性能等)。3、問(wèn)題的確認與跟蹤。
評審專(zhuān)家發(fā)現問(wèn)題后,首先與該代碼的完成人進(jìn)行確認,如果大家達成一致認可這個(gè)問(wèn)題,然后由代碼完成人提出解決方案,這個(gè)解決方案要得到問(wèn)題發(fā)現者的同意,然后編程人員編碼實(shí)現該方案,并進(jìn)行測試和驗證,并將驗證結果提交問(wèn)題發(fā)現人,問(wèn)題發(fā)現人確認無(wú)誤后,該問(wèn)題就可關(guān)閉。所以,評審專(zhuān)家發(fā)現問(wèn)題后并沒(méi)有結束,而是要負責跟蹤該問(wèn)題。
總之,評審活動(dòng)的組織其實(shí)比較復雜,也是項目經(jīng)理項目管理能力的一個(gè)重要體現,項目經(jīng)理對評審活動(dòng)負有重要責任。
代碼review主要就是事前的準備,執行,和后期的跟蹤事前的準備也叫做review的輸入,這個(gè)輸入是在什么條件下可以做為輸入,可以是個(gè)人檢查完了,也可以是相互交叉的檢查,這里有個(gè)檢查的標準,如有個(gè)檢查單什么的,等規定的輸入完成之后,進(jìn)行review的執行在review中,主要就是首先保證什么人參加,這是最主要的,如果找幾個(gè)沒(méi)有什么經(jīng)驗的,那review的效果肯定是打折扣的,review的多少時(shí)間跟蹤,主要是問(wèn)題的跟蹤和后期的數據的度量你上面說(shuō)的相互評審,主要是項目?jì)炔康膔eview,review分好幾種,有內部的,專(zhuān)家的,客戶(hù)的review代碼時(shí)主要看是否符合編碼規范,特別是是否符合設計書(shū)(需求)的要求,邏輯是否正確,主要是專(zhuān)家級!。
常用的評標方法有 1單項評議法 2綜合評標法 3合理單價(jià)評標法 常用的評標方法介紹 1單項評議法 單項評議法,又稱(chēng)單因素評議法、低標價(jià)法,是一種只對投標人的投標報價(jià)進(jìn)行評議從而確定中標人的評標定標方法,主要適用于小型工程。
單項評議法的主要特點(diǎn)是僅對價(jià)格因素進(jìn)行評議,不考慮其他因素,報價(jià)低的投標人中標。當然,這里未考慮的其他因素,實(shí)際上在資格審查時(shí)已獲通過(guò),只不過(guò)不作為評標定標時(shí)的考慮因素,因而也不是投標人競爭成敗的決定性因素。
采用單項評議法評標定標,決定成敗的唯一因素是標價(jià)的高低。但不能簡(jiǎn)單的認為,標價(jià)越低越能中標。
一般的做法是,通過(guò)對投標書(shū)進(jìn)行分析、比較,經(jīng)初審后,篩選出低標價(jià),通過(guò)進(jìn)一步的澄清和答辯,經(jīng)終審證明該低標價(jià)確實(shí)是切實(shí)可行、措施得當的合理低標價(jià)的,則確定該合理低標價(jià)中標。合理低標價(jià)不一定是最低投標價(jià)。
所以,單項評議法可以是最低投標價(jià)中標,但并不保證最低投標價(jià)必然中標。 采用單項評議法對投標報價(jià)進(jìn)行評議的方法多種多樣,主要有以下三類(lèi)具有代表性的模式: (1)將投標報價(jià)與標底價(jià)相比較的評議方法 這種方法是將各投標人的投標報價(jià)直接與經(jīng)招標投標管理機構審定后的標底價(jià)相比較,以標底價(jià)為基礎來(lái)判斷投標報價(jià)的優(yōu)劣,經(jīng)評標被確認為合理低標價(jià)的投標報價(jià)即能中標。
(2)將各投標報價(jià)相互進(jìn)行比較的評議方法 從純粹擇優(yōu)的角度看,可以對投標人的投標報價(jià)不做任何限制、不附加任何條件,只將各投標人的投標報價(jià)相互進(jìn)行比較,而不與標底相比,經(jīng)評標確認投標報價(jià)屬最低價(jià)或次低價(jià)的(即為合理低標價(jià)的),即可中標。 這種對投標報價(jià)的評議方法,優(yōu)點(diǎn)是給了投標人充分自主報價(jià)的自由,標底的保密性不成問(wèn)題,評標工作也比較簡(jiǎn)單。
不足之處是,招標人無(wú)需編制標底,或雖有標底但形同虛設,不起什么作用,因而導致投標人對投標報價(jià)的預期和認同心中無(wú)數,事實(shí)上處于一種盲目狀態(tài),很難說(shuō)清楚是否科學(xué)、合理。而投標人為了中標常常會(huì )進(jìn)行竟相壓價(jià)的惡性競爭,也極易形成串通投標。
(3)將投標報價(jià)與標底價(jià)結合投標人報價(jià)因素進(jìn)行比較的評議方法 這種方法的特點(diǎn),是要借助于一個(gè)可以作為評標定標參照物的價(jià)格。這個(gè)在評標定標中作為參照物的價(jià)格,是指投標報價(jià)最接近于該價(jià)時(shí)便能中標的價(jià)格,我們稱(chēng)之為“最佳評標價(jià)”。
2綜合評標法 綜合評議法,是對價(jià)格、施工組織設計(或施工方案)、項目經(jīng)理的資歷和業(yè)績(jì)、質(zhì)量、工期、信譽(yù)和業(yè)績(jì)等因素進(jìn)行綜合評價(jià)從而確定中標人的評標定標方法。它是適用最廣泛的評標定標方法,各地通常都采用這種方法。
綜合評議法按具體分析方式的不同,可分為定性綜合評議法和定量綜合評議法。 (1)定性綜合評議法(評議法) 定性綜合評議法,又稱(chēng)評議法。
通常的做法是,由評標組織對工程報價(jià)、工期、質(zhì)量、施工組織設計、主要材料消耗、安全保障措施、業(yè)績(jì)、信譽(yù)等評審指標,分項進(jìn)行定性比較分析,綜合考慮,經(jīng)評議后,選出其中被大多數評標組織成員認為各項條件都比較優(yōu)良的投標人為中標人,也可用記名或無(wú)記名投票表決的方式確定中標人。定性評議法的特點(diǎn)是不量化各項評審指標。
它是一種定性的優(yōu)選法。采用定性綜合評議法,一般要按從優(yōu)到劣的順序,對各投標人排列名次,排序第一名的既為中標人。
但當投標人超過(guò)一定數量(如在5家以上)時(shí),可以選擇排序第二名的投標人為中標人。 采用定性綜合評議法,有利于評標組織成員之間的直接對話(huà)和交流,能充分反映不同意見(jiàn),在廣泛深入地開(kāi)展討論、分析的基礎上,集中大多數人的意見(jiàn),一般也比較簡(jiǎn)單易行。
但這種方法,評議標準彈性較大,衡量的尺度不具體,各人的理解可能會(huì )相去甚遠,造成評標意見(jiàn)懸殊過(guò)大,會(huì )使評標決策左右為難,不能讓人信服。 (2)定量綜合評議法(打分法、百分法) 定量綜合評議法,又稱(chēng)打分法、百分制計分評議法(百分法)。
通常的做法是,事先在招標文件或評標定標辦法中將評標的內容進(jìn)行分類(lèi),形成若干評價(jià)因素,并確定各項評價(jià)因素在百分之內所占的比例和評分標準,開(kāi)標后由評標組織中的每位成員按照評分規則,采用無(wú)記名方式打分,最后統計投標人的得分,得分最高者(排序第一名)或次高者(排序第二名)為中標人。 采用定量綜合評議法,原則上實(shí)行得分最高的投標人為中標人。
但當招標工程在一定限額(如1000萬(wàn)元)以上,最高得分者和次高得分者的總得分差距不大(如差距僅在2分之內),且次高得分者的報價(jià)比最高得分者的報價(jià)低到一定數額(如低2%以上)的,可以選擇次高得分者為中標人。對此,在制定評標定標辦法時(shí),應作出詳盡說(shuō)明。
定量綜合評議法的主要特點(diǎn)是要量化各評審因素。對各評審因素的量化是一個(gè)比較復雜的問(wèn)題,各地的做法不盡相同。
從理論上講,評標因素指標的設置和評分標準分值的分配,應充分體現企業(yè)的整體素質(zhì)和綜合實(shí)力,準確反映公開(kāi)、公平、公正的竟標法則,使質(zhì)量好、信譽(yù)高、價(jià)格合理、技術(shù)強、方案優(yōu)的企業(yè)能中標。 3合理單價(jià)評標法 “合理低價(jià)評標法”應該是“最低價(jià)中標”評標法的一次揚棄,存其優(yōu)化競爭的一面,棄。
代碼走查(code walkthrough)和代碼審查(code inspection)是兩種不同的代碼評審方法,
代碼審查是一種正式的評審活動(dòng),而代碼走查的討論過(guò)程是非正式的。
最近對項目組進(jìn)行代碼評審,發(fā)覺(jué)需要對代碼評審中找到的問(wèn)題進(jìn)行一下分類(lèi),大概可以分成以下幾類(lèi)問(wèn)題:
1. Comment
注釋沒(méi)寫(xiě),或者格式不對,或者毫無(wú)意義
2. Coding Standard
沒(méi)遵守代碼規范
3. Existing Wheel
重復現成的代碼,或者是開(kāi)源項目,或者公司已有代碼
4. Better practice
Java或者開(kāi)源項目,有更好的寫(xiě)法
5. Performance bottle and Improvement
性能瓶頸和提高
6. Code Logic Error
代碼邏輯錯誤
7. Business Logic Error
業(yè)務(wù)邏輯錯誤
代碼審查列出問(wèn)題的類(lèi)型,并有解決情況報告
1、根據《評標委員會(huì )和評標方法暫行規定(國家發(fā)展計劃委員會(huì )、國家經(jīng)濟貿易委員會(huì )、建設部、鐵道部、交通部、信息產(chǎn)業(yè)部、中水利部令第12號)》規定:
“第二十九條 評標方法包括經(jīng)評審的最低投標價(jià)法、綜合評估法或者法律、行政法規允許的其他評標方法。”
2、根據上文,評標方法分為最低投標價(jià)法、綜合評估法兩大類(lèi)。實(shí)際應用的各種評標方法多種多樣,基本屬于以上兩類(lèi)。其中最低投標價(jià)法定義簡(jiǎn)單、明確。而綜合評估法設定方法多種多樣,內容繁多,體現形式也各有不同。
3、抽簽法等不能體現競爭、擇優(yōu)評標方法,不屬于法律認可范圍。
代碼走查(code walkthrough)和代碼審查(code inspection)是兩種不同的代碼評審方法,
代碼審查是一種正式的評審活動(dòng),而代碼走查的討論過(guò)程是非正式的。
最近對項目組進(jìn)行代碼評審,發(fā)覺(jué)需要對代碼評審中找到的問(wèn)題進(jìn)行一下分類(lèi),大概可以分成以下幾類(lèi)問(wèn)題:
1. Comment
注釋沒(méi)寫(xiě),或者格式不對,或者毫無(wú)意義
2. Coding Standard
沒(méi)遵守代碼規范
3. Existing Wheel
重復現成的代碼,或者是開(kāi)源項目,或者公司已有代碼
4. Better practice
Java或者開(kāi)源項目,有更好的寫(xiě)法
5. Performance bottle and Improvement
性能瓶頸和提高
6. Code Logic Error
代碼邏輯錯誤
7. Business Logic Error
業(yè)務(wù)邏輯錯誤
代碼審查列出問(wèn)題的類(lèi)型,并有解決情況報告
什么是Code Review?
Code Review代碼評審是指在軟件開(kāi)發(fā)過(guò)程中,通過(guò)對源代碼進(jìn)行系統性檢查的過(guò)程。通常的目的是查找各種缺陷,包括代碼缺陷、功能實(shí)現問(wèn)題、編碼合理性、性能優(yōu)化等;保證軟件總體質(zhì)量和提高開(kāi)發(fā)者自身水平。 Code Review是輕量級代碼評審,相對于正式代碼評審,輕量級代碼評審所需要的各種成本要明顯低得多,如果流程正確,它可以起到更加積極的效果。正因如此,輕量級代碼評審經(jīng)常性地被引入到軟件開(kāi)發(fā)過(guò)程中。
為什么Code Review?
1. 提高代碼質(zhì)量。
2. 及早發(fā)現潛在缺陷,降低修改/彌補缺陷的成本。
3. 促進(jìn)團隊內部知識共享,提高團隊整體水平。
4. 評審過(guò)程對于評審人員來(lái)說(shuō),也是一種思路重構的過(guò)程。幫助更多的人理解系統。
5. 是一個(gè)傳遞知識的手段,可以讓其它并不熟悉代碼的人知道作者的意圖和想法,從而可以在以后輕松維護代碼。
6. 鼓勵程序員們相互學(xué)習對方的長(cháng)處和優(yōu)點(diǎn)。
7. 可以被用來(lái)確認自己的設計和實(shí)現是一個(gè)清楚和簡(jiǎn)單的。
評審尤其是同行評審,是提前發(fā)現缺陷,降低開(kāi)發(fā)成本的有效方法;但是很多企業(yè)并不重視,或者效果不佳。
原因有很多:沒(méi)有獲得合適的專(zhuān)家、組織不合理、方法不當等。針對代碼評審,我想簡(jiǎn)單地談幾點(diǎn)(其實(shí)其它工程文檔的評審存在同樣問(wèn)題):1、評審要計劃。
因為大家都很忙,各領(lǐng)域的專(zhuān)家也都有各自的工作,評審結果的好壞對他們工作績(jì)效沒(méi)有影響,所以專(zhuān)家投入多少精力來(lái)用于評審不受控,完全靠他們自己的職業(yè)精神。 所以,這就要求項目經(jīng)理比較有影響力,能夠爭取到足夠的、合適的專(zhuān)家來(lái)參與評審。
專(zhuān)家最好要提前協(xié)調,當然項目經(jīng)理首先要知道要請哪些專(zhuān)家(如系統專(zhuān)家、領(lǐng)域專(zhuān)家、測試人員、QA等),這些專(zhuān)家在哪里?能否獲得專(zhuān)家資源的支持,是項目經(jīng)理的項目管理能力一個(gè)重要體現。評審時(shí)間的投入比例,一般是第一次版本準備時(shí)間的3/5以上。
2、評審要分層次和重點(diǎn)。作為項目成員,在代碼編寫(xiě)完成后,首先是自檢,這時(shí)發(fā)現的缺陷不計算;然后是項目組內的評審,這時(shí)發(fā)現的缺陷應計算;最后才是外部評審。
應提前把相關(guān)文檔和代碼交給評審專(zhuān)家,讓他們各自評審;根據項目和評審結果的情況,決定是否召開(kāi)評審會(huì )議,評審會(huì )議以確認問(wèn)題為主,而不是討論解決方案。對于重要的核心的代碼,要投入重點(diǎn)評審力量;另外,對于能力不足的成員所完成的代碼,也要重點(diǎn)評審。
每個(gè)角色也應明白各自評審重點(diǎn),如QA重點(diǎn)放在編程規范、測試人員側重在可測性、系統專(zhuān)家側重在從整體來(lái)考慮(如對其它功能的影響、性能等)。3、問(wèn)題的確認與跟蹤。
評審專(zhuān)家發(fā)現問(wèn)題后,首先與該代碼的完成人進(jìn)行確認,如果大家達成一致認可這個(gè)問(wèn)題,然后由代碼完成人提出解決方案,這個(gè)解決方案要得到問(wèn)題發(fā)現者的同意,然后編程人員編碼實(shí)現該方案,并進(jìn)行測試和驗證,并將驗證結果提交問(wèn)題發(fā)現人,問(wèn)題發(fā)現人確認無(wú)誤后,該問(wèn)題就可關(guān)閉。所以,評審專(zhuān)家發(fā)現問(wèn)題后并沒(méi)有結束,而是要負責跟蹤該問(wèn)題。
總之,評審活動(dòng)的組織其實(shí)比較復雜,也是項目經(jīng)理項目管理能力的一個(gè)重要體現,項目經(jīng)理對評審活動(dòng)負有重要責任。
首先,我們先來(lái)看看Code Reivew的用處:
Code reviews 中,可以通過(guò)大家的建議增進(jìn)代碼的質(zhì)量。
Code reviews 是一個(gè)傳遞知識的手段,可以讓其它并不熟悉代碼的人知道作者的意圖和想法,從而可以在以后輕松維護代碼。
Code reviews 也鼓勵程序員們相互學(xué)習對方的長(cháng)處和優(yōu)點(diǎn)。
Code reviews 也可以被用來(lái)確認自己的設計和實(shí)現是一個(gè)清楚和簡(jiǎn)單的。
你也許注意到了在上面的Code Reivew中的諸多用處中,我們沒(méi)有提到可以幫助找到程序的bug和保證代碼風(fēng)格和編碼標準。這是因為我們認為:
Code reviews 不應該承擔發(fā)現代碼錯誤的職責。Code Review主要是審核代碼的質(zhì)量,如可讀性,可維護性,以及程序的邏輯和對需求和設計的實(shí)現。代碼中的bug和錯誤應該由單元測試,功能測試,性能測試,回歸測試來(lái)保證的(其中主要是單元測試,因為那是最接近Bug,也是Bug沒(méi)有擴散的地方)
Code reviews 不應該成為保證代碼風(fēng)格和編碼標準的手段。編碼風(fēng)格和代碼規范都屬于死的東西,每個(gè)程序員在把自己的代碼提交團隊Review的時(shí)候,代碼就應該是符合規范的,這是默認值,屬于每個(gè)人自己的事情,不應該交由團隊來(lái)完成,否則只會(huì )浪費大家本來(lái)就不夠的時(shí)間。我個(gè)人認為“meeting”是奢侈的,因為那需要大家在同一時(shí)刻都擠出時(shí)間,所以應該用在最需要的地方。代碼規范比起程序的邏輯和對需求設計的實(shí)現來(lái)說(shuō),太不值得讓大家都來(lái)了。
10年前,上面這兩件事會(huì )是理所當然的(10年前的中國的軟件開(kāi)發(fā)還沒(méi)有Code Reivew呢),今天,在中國的很多公司上面這兩件事依然被認為是Code Reivew最重要的事,所以,我能夠看到很多開(kāi)發(fā)Team抱怨Code Review就是一個(gè)形式,費時(shí)費力不說(shuō),發(fā)現的問(wèn)題還不如測試,而評審者們除了在代碼風(fēng)格上有些見(jiàn)術(shù),別的也就沒(méi)什么用了,長(cháng)而久之,大家都會(huì )開(kāi)始厭煩這個(gè)事了。
所以,在今天,請不要把上面的那兩件事分散了Code Review的注意力,取而代之的是,對于Bug,程序的作者要在Review前提交自己的單元測試報告(如:XUnit的測試結果),對于代碼規范,這是程序作者自己需要保證的,而且,有一些工具是可以幫你來(lái)檢查代碼規范的。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.953秒