青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術博客

感興趣領域:高性能服務器編程,存儲,算法,Linux內(nèi)核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數(shù)據(jù)加載中……

談目前項目組的代碼提交制度

(轉(zhuǎn)載請注明出自 http://m.shnenglu.com/converse 那誰)

一直以來想找機會談談目前這個項目組內(nèi)采用的代碼提交制度,今天整理一下.

分如下幾個流程:
1) 在trac系統(tǒng)上建立ticket,寫好這個任務的目的,并且accept這個ticket.
2) 修改代碼,把相關的修改過的代碼(一般還應包括相關的測試用例的代碼,后面會加以說明)提交到review board上.
3) 在review board上填寫如下幾個必要的信息:
a)第1)步建立的ticket的號碼(可以有好幾個,也就是一次修改可以針對好幾個任務),以明確這次提交針對的是哪個任務;
b)寫下測試了哪幾個測試用例,對這次的提交寫一段描述.
c)寫下給哪些人做review.reviewer的角色分為兩種,一種是負責人,另一種就是普通的組員.每一次提交,必須保證reviewer中有至少一個負責人,并且需要所有的reviewer都通過了這次修改,才能向代碼庫提交代碼.reviewer會針對提交的代碼進行批注回復.
4)一般情況下,代碼不會在第一次提交就能通過review,大多數(shù)情況會被打回修改,于是2)-4)三個步驟將循環(huán)進行下去直到代碼通過review為止.
5) 提交了代碼之后,1)中建立的ticket會被自動關閉,并且將在ticket的回復自動寫上本次提交修改的文件以及svn revision號,這樣以后再看起來就知道是哪次提交并且修改了哪些文件針對的又是哪個功能了.
6) 有一臺服務器專門作為buildbot機器, 這臺機器在每次提交了代碼之后, 將自動清空原來的代碼目錄,更新最新的代碼,重新編譯,然后把里面的測試用例全部跑一遍.我們的項目使用的tcmalloc,會檢查內(nèi)存泄漏,所以在測試用例測試失敗,以及有內(nèi)存泄漏的時候,buildbot都會失敗.需要補充一點的是,除了每次提交代碼會導致buildbot重新編譯新的代碼,在每晚的一個固定時間,即使沒有更新代碼,也會做相同的動作.buildbot的存在,就是為了不斷的清空編譯文件重新編譯再跑測試用例,以大量的測試消除隨機性保證正確性.

以上是整個代碼提交機制的大體流程說明,下面談里面的細節(jié).

1)上面的第1)步中,建立trac的ticket時,需要指定一個milestone,一般我們對必須做的事情是每周以日期命名建立一個milestone,這樣,你做的任務就會自然的變成每周可以去跟進的任務.
2)第2)步中,寫測試用例針對的是每個類或者每個頭文件對外暴露的API接口,比如對外的API c使用內(nèi)部的函數(shù)B,那么是沒有辦法對函數(shù)B編寫測試用例的.我們的要求是, 任何的一個新增的API都需要寫針對它進行測試的測試用例,不一定只有一個,因為需要考慮的情況可能很多,總而言之,盡可能的考慮齊全.假如本次修改修改了內(nèi)部函數(shù)B,那么依賴于函數(shù)B的API c它的測試用例也就需要再測試了.這些測試用的代碼也會一并提交到代碼庫中,因為這樣才能保證buildbot更新之后也按照最新的測試用例進行測試.
3) 代碼提交到reviewboard之前,還需要過lint這一關,對基本的代碼風格進行檢查.我們使用的是google c++ code style.
4) reviewer中的負責人角色很重要, 起著看門人的作用,任何的一次修改提交,都必須至少經(jīng)過一個負責人的review, 所以對他的要求就相對高些了,除了要完成自己的工作外,還需要認真review他人的代碼,而要review他人的代碼并且給出好的意見來,又要求他本人除了編碼能力外,還要在業(yè)務層面對別人的工作有大體的了解,不然沒法review了.
5) 從前文可以看出,review實在是一個繁雜的工作,很有可能在review階段被打回修改代碼,就我的經(jīng)驗而言,提交review的人要將提交的任務盡量的劃分的細一些就來的很重要了.在提交review的時候,我一直堅持DOTDIW原則(Do One Thing,Do It Well).相反的例子,我們組有個同事,做了一個很大的功能,光是完成這個大的功能,就花費好幾周的時間,提交review的時候代碼量大,有個幾千行的,這樣別人review起來也慢,而且一旦不通過需要修改,又是一個苦力活兒.這樣一折騰,一個月時間過去了.如果當時能對整體的功能有個把握,懂得劃分模塊層次,逐個提交,也許會好些.當然,大規(guī)模的代碼提交有時并不能完全的避免,比如一個比較大的重構,牽一發(fā)而動全身的,我只是說如果可能,應盡量避免大規(guī)模代碼的提交,并且最重要的是:每次提交最好僅針對一個功能點.

以上是對流程從整體到細節(jié)的描述.現(xiàn)在談談我的看法.
先來談優(yōu)點:
1) 通過codereview制度,保證了項目組成員之間能夠在代碼層面上直接的進行交流.我想這一點是最重要的,沒有之一.
如果你是一個水平差一些的程序員,那么有比你牛叉的人幫你review,相當于是讀書的時候有老師幫你閱卷修改作業(yè),可以指正你的問題所在.我在被人review的過程中就聽到了別人對我很多的意見.而如果是一個水平較高的人,是不是對水平差的人進行codereview就是浪費他的時間了呢?我個人認為,這個事情分怎么看.從團隊的角度看,按照木桶理論,最短的短板往往決定了能達到的水平.總不能指望所有的事情都由老鳥完成,所以老人在幫新人review代碼的時候間接的幫助了新人的成長,同時作為項目組中資歷比較深的人,也應該對項目多費一些時間進行把關.我覺得這一點無可厚非.同時,即使是新人,通過閱讀他人的代碼并且交流,也可以學習到別人的思想.
codereview制度從上面的角度上保證了項目成員可以直接通過代碼進行交流,簡單的說,誰寫的代碼質(zhì)量如何,一到了review,一目了然.寫的好的通過的快,寫的不好被打回修改多了自己也會長記性,還可以多看別人的代碼進行學習.這樣,在一定層面上可以使項目組成員的能力盡可能的接近.我能力長了一級,相應的也會拉動項目組中的人升級.

2) 測試用例.我之前提到的測試驅(qū)動開發(fā),想法就來自于項目組中編寫測試用例+buildbot執(zhí)行測試用例的做法.如何證明一個API是確定無誤的?我覺得這個問題似乎非常難.除了一些可以通過數(shù)學上邏輯上證明的情況外,還需要考慮很多其他的隨機情況.比如線程的切換是隨機的,某個文件夾恰好存在是隨機的,等等.這些隨機出現(xiàn)的問題,很多時候不能在某一次測試中顯現(xiàn)出來.但是如果有了buildbot,不停的更新,編譯,執(zhí)行,總會有暴露問題的一天.另外,之前我也提到過,腦中如果有了測試用例的概念存在,每寫一個API時都會考慮到針對它的用例應該是怎樣的,從另一個角度,也幫助你的設計--你需要考慮這個API的輸入,輸出,異常情況都有哪些,如何測試到.測試用例的存在,保證項目盡量的做到了"可控制".

缺點:
1) 從上面的流程可以看出,走完一個代碼提交的流程需要花費大量的精力/時間(有一些還是他人的精力/時間),所以,也許這個制度并不適合于那種時間壓力比較大的項目.

2) 有幾個地方很難堅持,比如codereview時,有些reviewer會走過場,也沒怎么看代碼就直接通過了,這樣就會流于形式了.還有編寫測試用例,也是一件很耗時間的事情.

3) 由于codereview制度的存在,給review中的負責人帶去的壓力很大,因為本身他有自己的工作,又要盡量對他人的業(yè)務/代碼進行了解,就像那種負載很大的服務器一樣,有時候會不堪重負.這一點上,我的想法是,項目組內(nèi)的其他成員,如果能積極主動一些,多花時間了解別人的代碼,盡量分擔review的任務,或者試著成長為負責人級別(降低單點故障率:),也許是一個好辦法.不過,這還得看人了.

整個代碼提交流程上的軟件,目前我所知的都是使用的開源軟件:SVN, google c++ code style lint,review board,buildbot,trac,測試用例的編寫上使用的是google的測試用例框架gtest.不過,整合起這些軟件搭建好這個流程就不是那么容易了,用了一人/半年左右的時間,才讓這個流程基本穩(wěn)定下來.

總之,這套機制中,既有人為的干涉,也有機器層面上的干涉,也許并不是最完美的,但是盡了最大的力量去保證項目的正確性和可控性.

以正確的方式正確的制度做事,是將事情做好的一個關鍵.

posted on 2010-07-08 01:53 那誰 閱讀(18037) 評論(20)  編輯 收藏 引用 所屬分類: 其他經(jīng)驗教訓

評論

# re: 談目前項目組的代碼提交制度[未登錄]  回復  更多評論   

很強悍,每次遞交都會rebuild,像我這樣習慣修改幾行就check in的可能會受不了啊
2010-07-08 09:31 | rr

# re: 談目前項目組的代碼提交制度  回復  更多評論   

搞個nightly build 要 一人/半年左右的時間 !!!!


2010-07-08 10:16 | cui

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@cui
沒懂你的意思?我是說把這些軟件整合在一起搭建整個流程花了這么多時間.

2010-07-08 10:18 | 那誰

# re: 談目前項目組的代碼提交制度  回復  更多評論   

Visual Studio 2010 Ultimate + Team Foundation Server幾個小時就搞定了。
2010-07-08 11:41 | 陳梓瀚(vczh)

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@陳梓瀚(vczh)
呵呵,請問你微軟做好那個軟件花了多少人力/時間呢?是不是說,你寫一個軟件完成要求的功能只花費了幾秒,工作量就可以定為只有幾秒呢?

2010-07-08 11:46 | 那誰

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@陳梓瀚(vczh)
另外,我們寫的是服務器端的程序,必然不是跑在windows平臺的,微軟那套東西用不上.
2010-07-08 11:55 | 那誰

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@那誰
但那已經(jīng)做好了啊,所以你只需要安裝就行了,不需要你做。當然是這么衡量的。你不能說使用linux,把開發(fā)linux本身的cost也算進去吧。
2010-07-08 12:46 | 陳梓瀚(vczh)

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@那誰
嗯,用linux對于程序員來說的確是一件很可惜的事情。對于我個人來說,雖然平時寫的是編譯器,這些東西跟操作系統(tǒng)基本毫無關系,其實換到linux也就是改那么一點點代碼(ascii互轉(zhuǎn)utf16的兩個函數(shù))而已。不過windows上面的工具的確是強大,可以讓我專心寫編譯器,而不需要在寫編譯器的同時還要專心呵護我用來編譯編譯器的那個編譯器,和呵護我用來寫編譯器的那個編輯器。效率就提高了好多。工具呵護我,才是正確的。

當然在被“呵護”的同時是不能被慣壞的,不過就算變成了這樣,也是程序員的錯,不能怪工具做得太好。
2010-07-08 12:49 | 陳梓瀚(vczh)

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@陳梓瀚(vczh)
我是這么看的,因為linux下面并沒有完整的這樣一套系統(tǒng),所以我們自己整合這些軟件搭建這個系統(tǒng)的工作,類比于微軟開發(fā)那套軟件的工作.

而不是搭建這個系統(tǒng)的工作,類比于使用微軟這套軟件搭建系統(tǒng)的工作.

哦 我自己說的都拗口,但愿表達清楚意思了.

2010-07-08 12:54 | 那誰

# re: 談目前項目組的代碼提交制度  回復  更多評論   

每次提交都一次review,人工開銷是不是太大了?
過多的review可能會導致這個流程變成形式,而起不到實質(zhì)的效果。

如果團隊距離很近,都在一個辦公室,沒必要用review board這種工具。
要提交代碼時,直接叫reviewer過來檢查就行了,開發(fā)人員一邊說自己的思路,reviewer一邊聽一邊檢查。我覺得比review board這種頁面的效果好多了。
2010-07-08 13:44 | sdww

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@sdww
提交到reviewboard,另一方面是為了讓你做的改動是有白紙黑字可查的,如果只是口頭上的說明,起不到這個效果,類似于工作中重要的事情需要發(fā)郵件確認.當然,這里也并沒有排斥口頭上的交流啊.

2010-07-08 13:49 | 那誰

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@sdww
如果這樣,那證明招人的時候門檻太低
2010-07-08 13:59 | 陳梓瀚(vczh)

# re: 談目前項目組的代碼提交制度  回復  更多評論   

可以考慮用下商業(yè)的,比如http://www.fogcreek.com/fogbugz/
我們公司就用這個,版本控制用 mercurial,code review,代碼庫等都提交到fogbugz上。費用大概是20USD/人。
2010-07-08 14:07 | Cykit

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@Cykit
codeplex免費,可以支持TFS+SVN。google code免費,僅支持SVN。
2010-07-08 16:09 | 陳梓瀚(vczh)

# re: 談目前項目組的代碼提交制度  回復  更多評論   

每次提交都要review會不會太細了?還是說你們必須做完一個完整的功能才能提交?至于那個好幾周,幾千行代碼才提交的我只能無語了。
2010-07-09 16:00 | Sparkle

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@Sparkle
當然是每次checkin都review,因此功能應該劃分的足夠細,使得每一次checkin的改動都不會過大。
2010-07-09 16:59 | 陳梓瀚(vczh)

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@Sparkle
是的,這樣做才能嚴格控制checkin代碼的質(zhì)量,不可能隨便改幾行代碼,也不說明改了什么,就讓你提交到代碼庫中的.
2010-07-09 18:54 | 那誰

# re: 談目前項目組的代碼提交制度  回復  更多評論   

@陳梓瀚(vczh)
話說我已經(jīng)開始覺得搭建這個一個系統(tǒng)也是一個有利于他人的事情了....
2010-07-09 21:43 | 那誰

# re: 談目前項目組的代碼提交制度  回復  更多評論   

表示公司現(xiàn)在的review已經(jīng)流于形式了
2013-07-03 14:16 | hailong

# re: 談目前項目組的代碼提交制度  回復  更多評論   

都是太過主觀的人,選用什么形式卻絕你公司的規(guī)模
2013-07-19 11:36 | caisos
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久热re这里精品视频在线6| 99v久久综合狠狠综合久久| 国产亚洲精品aa| 国产精品久久一区二区三区| 欧美精品尤物在线| 欧美日韩国产在线观看| 欧美日韩成人综合在线一区二区 | 亚洲网站啪啪| 在线亚洲精品| 亚洲欧美亚洲| 久久国产精品黑丝| 久久综合色综合88| 欧美人成免费网站| 国产精品视频自拍| 在线观看亚洲专区| 日韩午夜剧场| 久久www免费人成看片高清| 久久青草欧美一区二区三区| 欧美aaaaaaaa牛牛影院| 亚洲国内精品| 亚洲国产精品成人| 在线性视频日韩欧美| 国产精品v欧美精品v日韩精品 | 亚洲少妇在线| 欧美一区二区高清| 久久在线免费观看| 国产精品国产自产拍高清av| 激情成人av在线| 亚洲精品小视频在线观看| 亚洲欧美99| 免费一级欧美片在线观看| 一区二区三区久久网| 久久久久久尹人网香蕉| 欧美日韩精品欧美日韩精品一| 国产一区av在线| 99综合精品| 免费在线观看成人av| 亚洲欧美日韩国产一区二区三区| 女同一区二区| 激情婷婷久久| 销魂美女一区二区三区视频在线| 欧美黄色影院| 欧美一级成年大片在线观看| 欧美日韩国产123| 亚洲第一二三四五区| 午夜精品久久久久久久白皮肤 | 亚洲六月丁香色婷婷综合久久| 香蕉久久精品日日躁夜夜躁| 亚洲三级国产| 麻豆成人在线播放| 狠狠色综合一区二区| 欧美一区二区三区男人的天堂| 亚洲国产三级| 欧美91精品| 一区二区三区在线免费观看| 欧美一区二区三区免费视频| 一区二区三区|亚洲午夜| 欧美大胆成人| 91久久在线播放| 欧美肥婆在线| 麻豆精品视频在线观看视频| 黄色一区二区三区四区| 久久精品国产欧美激情| 亚洲欧美日韩中文视频| 国产精品爱久久久久久久| 中文精品一区二区三区| 亚洲精品女人| 欧美电影在线| 日韩网站免费观看| 亚洲免费电影在线| 欧美日韩国产综合一区二区| 99国产一区二区三精品乱码| 亚洲精品乱码久久久久久蜜桃91| 欧美黄色影院| 亚洲一区二区网站| 亚洲性av在线| 国模叶桐国产精品一区| 免费看的黄色欧美网站| 一区二区三区欧美日韩| 亚洲午夜精品在线| 亚洲一级黄色av| 国产精品日本一区二区| 亚洲欧美日韩直播| 欧美在线观看一区| 亚洲第一在线综合网站| 亚洲日本理论电影| 国产精品毛片va一区二区三区 | 欧美 日韩 国产精品免费观看| 免费中文日韩| 亚洲丝袜av一区| 欧美一区二区三区免费视| 亚洲成人原创| 99pao成人国产永久免费视频| 国产精品欧美日韩| 免费日韩av片| 欧美日韩在线免费观看| 久久国产精品毛片| 欧美激情1区2区3区| 欧美亚洲免费在线| 欧美成人精品| 久久国产精品网站| 欧美日韩视频一区二区三区| 久久精品久久综合| 欧美精品91| 麻豆91精品| 国产精品一区一区| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美精品一区二区三区在线看午夜| 国产一区99| 亚洲欧洲中文日韩久久av乱码| 国产精品美女999| 亚洲国产色一区| 韩国免费一区| 亚洲免费综合| 一区二区三区四区在线| 久久视频精品在线| 新67194成人永久网站| 欧美成人一二三| 久久三级视频| 国产精品香蕉在线观看| 猫咪成人在线观看| 欧美三级小说| 美女网站在线免费欧美精品| 亚洲一区二区三区精品在线观看| 国内成+人亚洲+欧美+综合在线| 亚洲国产日韩欧美在线动漫| 国产精品热久久久久夜色精品三区 | 亚洲在线观看免费视频| 亚洲欧美日韩在线| 久久精品av麻豆的观看方式| 亚洲人成网站在线观看播放| 亚洲深爱激情| 最新亚洲激情| 亚洲欧美日本在线| 99精品视频网| 欧美成人精品一区| 欧美激情精品| 亚洲欧洲一区| 欧美福利在线| 亚洲国产日本| 999在线观看精品免费不卡网站| 欧美一区二区三区四区在线观看 | 欧美肥婆在线| 亚洲精品美女在线| 欧美激情国产精品| 亚洲欧洲一级| 亚洲无线观看| 国产精品久久久久7777婷婷| 亚洲一区二区在线免费观看视频| 亚洲免费一在线| 国产精品高潮视频| 亚洲国产99| 国产一区二区三区久久久久久久久 | 日韩亚洲综合在线| 欧美国产精品v| 欧美激情影音先锋| 一区二区高清在线| 国产精品a级| 欧美在线观看网站| 亚洲二区三区四区| 亚洲欧美日本日韩| 国产精品久久久久9999| 久久国产精品一区二区三区四区 | 精品成人一区二区| 欧美成人黑人xx视频免费观看| 99pao成人国产永久免费视频| 欧美一区2区三区4区公司二百| 国内精品久久久久影院 日本资源| 小黄鸭精品aⅴ导航网站入口| 免费一级欧美在线大片| 亚洲一区国产一区| 一区二区三区在线观看视频| 欧美精品一区二区在线观看| 午夜精品福利视频| 亚洲风情亚aⅴ在线发布| 欧美一级艳片视频免费观看| 在线看一区二区| 国产精品福利网| 久久综合伊人77777尤物| 一区二区欧美激情| 亚洲成人在线视频播放 | 久久婷婷国产综合精品青草| 亚洲品质自拍| 久久精品午夜| 一区二区三区黄色| 含羞草久久爱69一区| 国产精品女同互慰在线看| 韩国av一区二区三区四区| 欧美1区3d| 欧美在线三级| 亚洲一区二区在线免费观看视频 | 国产嫩草一区二区三区在线观看 | 在线免费观看欧美| 国产精品视频| 欧美乱大交xxxxx| 久久婷婷亚洲| 欧美在线播放| 亚洲综合视频网| 中文有码久久| 99re热精品|