qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          如何做好Code Review:思考、方法和實(shí)踐

           最近被要求做一個(gè)關(guān)于Code Review的講演。首先要說明的是,我并不是太擅長開展Code Review的活動(dòng)。做這個(gè)完全是因?yàn)榇饝?yīng)了別人又不好反悔。不過在做準(zhǔn)備的過程中還是有一些感想。

            關(guān)于Code Review我所了解到的行業(yè)中最著名的是Bill Gates匯報(bào)。這是微軟軟件開發(fā)過程中的一個(gè)重要環(huán)節(jié),因?yàn)锽ill Gates親自參加而備受關(guān)注,在行業(yè)中廣為流傳。

            Ok,進(jìn)入正題了。

            我們面臨的共同問題:

            1、對于開發(fā)周期較長的軟件項(xiàng)目,可維護(hù)差的代碼對項(xiàng)目造成了極大的困擾

            2、結(jié)構(gòu)復(fù)雜的,體系不清楚的代碼會導(dǎo)致新成員或者外部干系人很難融入。

            3、軟件項(xiàng)目代碼質(zhì)量低下,Bug眾多并且有關(guān)聯(lián)累積效應(yīng)。

            以上三個(gè)問題是我在以往的Code Review活動(dòng)中總結(jié)出來,可以被影響或者解決的問題。也就是說我的觀點(diǎn)是如果沒有上述問題,或者在目前的軟件產(chǎn)品的規(guī)模、開發(fā)過程的成熟度還沒有達(dá)到一定級別時(shí)Code Review是可以不做的。當(dāng)然優(yōu)秀的開發(fā)人員會做自我審查,這是另外一個(gè)問題了。

            總而言之,我認(rèn)為開展Code Review活動(dòng)的前提是

            1、開發(fā)過程和質(zhì)量控制達(dá)到了一定的成熟的。

            Code Review必然與重構(gòu)相關(guān)聯(lián)。如果開發(fā)過程中更本就沒有重構(gòu)這樣的活動(dòng),那估計(jì)Review出來的結(jié)果不太容易得到執(zhí)行。

            其次是各種標(biāo)準(zhǔn)和規(guī)范的齊備性,沒有規(guī)矩是不能成方圓的,如果只有一個(gè)命名規(guī)范,那可想而知Review的內(nèi)容不會太深入,效果因此大打折扣。

            2、代碼達(dá)到一定那個(gè)的規(guī)模一般來說,功能單一的小型項(xiàng)目的體系結(jié)構(gòu)不會太復(fù)雜。不太會出現(xiàn)Bug的累積效應(yīng)。小型項(xiàng)目完全可以通過daily meeting和Test來保證。

            Code Review并不是一個(gè)隨便就可以做,或者做了就有好結(jié)果的活動(dòng)。不過無論如何,一旦條件成熟或者資源充足都應(yīng)該積極的開展Code Review的活動(dòng)。因?yàn)樗诉M(jìn)行質(zhì)量控制以外,還是一個(gè)團(tuán)隊(duì)成員之間進(jìn)行溝通和相互學(xué)習(xí)的好機(jī)會。

            Code Review的內(nèi)容:

            1、代碼的規(guī)范性

              a、混亂而散漫的命名,例如使用a、b、c這樣的單字母對變量進(jìn)行無意義的命名

              b、隨處可見的magic number或則hard code。軟件中const在所難免,不過這些const應(yīng)該被集中管理起來。而不是可以隨意、隨處的出現(xiàn)

              c、缺少注釋,或者注釋不完備甚至錯(cuò)誤

            2、代碼的結(jié)構(gòu)問題

              a、巨大的類或者巨大的方法

              b、過于復(fù)雜的實(shí)現(xiàn)

              c、緊耦合

              d、重復(fù)的代碼

           3、其他問題

              a、缺少驗(yàn)證和異常處理。例如不對數(shù)據(jù)進(jìn)行驗(yàn)證,或者不處理異常又或者捕獲無法處理的異常

              b、對工具和框架的錯(cuò)誤使用。例如有的ORM框架提供非常方便的運(yùn)行時(shí)延遲加載功能,方便倒是方便,濫用卻會有性能隱憂

              c、缺少可讀性。注釋和命名規(guī)范是一個(gè)問題,不過過深的調(diào)用層次都會影響代碼可讀性。

              d、缺少擴(kuò)展性。例如在沒有DLR的情況下在業(yè)務(wù)層使用匿名對象。

              e、缺少安全控制

              f、性能隱患。例如在C#中使用了非托管資源而沒有進(jìn)行釋放,或者說有過多、過于頻繁的I/O訪問

            4、測試問題

              a、沒有測試或者覆蓋度不夠

              b、測試代碼滯后,在更改邏輯后沒有對測試進(jìn)行同步更新

            以上是一些通常的Code Review的內(nèi)容了。當(dāng)然這里再強(qiáng)調(diào)一點(diǎn)的就是規(guī)范的完備性,和開發(fā)過程的成熟度。Code Review是一種相對高級軟件開發(fā)活動(dòng),沒有必要一定要執(zhí)行。不過一旦實(shí)施成功將會有巨大的回報(bào)。

            在實(shí)施過程中還有一些心得:

            1、做好準(zhǔn)備。如果對項(xiàng)目很熟的話,應(yīng)該知道哪些地方會有問題,Code Review是重新審視和從內(nèi)因上解決這些問題的良機(jī)。

            2、不要考慮業(yè)務(wù)邏輯。完全專注于代碼的實(shí)現(xiàn),例如算法的效率,抽象的粒度。整個(gè)代碼體系結(jié)構(gòu)的平衡性

            3、虛心學(xué)習(xí)。不要有針對性

            4、在原則和現(xiàn)實(shí)之間平衡。不可能所有事情都完美,所以有的時(shí)候我們堅(jiān)持原則,有的時(shí)候修改規(guī)范。

            5、不要讓自己Review自己的代碼

            6、總結(jié)跟進(jìn)Review的結(jié)果,并且堅(jiān)持開展這個(gè)活動(dòng)。這才是最重要的

          posted on 2013-03-18 10:11 順其自然EVO 閱讀(575) 評論(0)  編輯  收藏 所屬分類: 測試學(xué)習(xí)專欄敏捷測試

          <2013年3月>
          242526272812
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 运城市| 台州市| 通化县| 彭水| 湖南省| 响水县| 临泽县| 中超| 长乐市| 珲春市| 巴青县| 阳高县| 孝感市| 大同市| 新绛县| 绥芬河市| 龙川县| 陵水| 天镇县| 历史| 临漳县| 视频| 高要市| 新津县| 曲水县| 阳西县| 沁阳市| 庐江县| 石楼县| 沽源县| 舞钢市| 潍坊市| 文化| 星子县| 务川| 合肥市| 若尔盖县| 康平县| 固原市| 芜湖市| 定南县|