原始碼管理是專案管理的一個重頭戲,不要小看了,現在很多管理者覺得業務才是必要的,開發的人不值錢,程式碼推到了可以重來,加加班,沒有什麼大不了的,對於技術不重視,對於原始碼的管理就更加的忽略了,只有出現了問題,才說這說那的。

我覺得一個較好的程式碼風格,程式碼習慣,程式碼結構,程式碼管理工具,程式碼管理流程對於一個軟體專案的成功尤為重要,對於一個產品專案,甚至是網際網路專案來說,那就甚是重要了。至少不比業務次要,試想如果基礎沒有打好,業務再吹噓也是徒勞。

當然了,業務也不能疏忽,我是覺得大家都是為了共同的目標,共同做事,分工不同,不應該分主次,厚此薄彼的。

程式碼管理可以從下面幾方面入手來進行改進。

1.程式碼規範

根據自己公司和專案的情況,制定一個大概的程式碼規範,例如:字首,字尾,方法的命名,變數的命名,必要的註釋等等。這樣不是為了框死每個人,而是為了大家好交流,減少無用溝通,使得整個開發過程更愉快,大家更容易進步,集中精力做事。但也不要太死板,造成大家無所適從。

剛開始有些人會不習慣,通過後面的 review,改掉不好的習慣,這樣慢慢就會好起來了。

2.原始碼管理工具

找一款適合專案和團隊的程式碼管理工具,充分使用原始碼管理工具中的主幹、分支及合併功能。這方面嚴重不推薦微軟的VSS,個人覺得太不能滿足要求了。推薦中心伺服器方式的svn或者是cvs,甚至是分散式的git就更好了。

3.code review

程式碼的review很重要。最好可以找一個專人或者幾個專人來做code review,重點模組、重點人的程式碼還是需要仔細review的。前面說過了,通過review,可以慢慢的調整整體的程式碼可讀性和健壯性,還有程式碼的結構。

4.其他的方面就請大家補充了。哈哈!!!

 

接下來我說一下程式碼管理中關於主幹,分支,合併的一些概念和使用場景。

1.多人同一檔案同一時間的編輯需求

有一個檔案,A正在編輯裡面的一個方法methodA,這時候同時需要維護檔案的methodB。

一種做法是A放下手上的活,趕緊來完成,但是完成後又不敢checkin,因為剛才有未完成的methodA,恐怕編譯不過,就算編譯通過了,可是功能沒有測試,不敢保證methodA是正確的,頭大了。

還有一種做法是A寫完手頭的再來維護,但是等不及了,就需要並行開發,頭大了。

還有一種做法是由B來完成這次維護,但是檔案被A簽出,如果使用VSS的預設模式,是不支援多人簽出的,而且VSS也不提倡多人簽出,頭大了。

並行開發,也是為了提高效率,加快速度,縮小迭代週期。

這時候就需要主幹,分支的概念,或者允許多人簽出,編輯完成之後,再進行合併。維護的人,就可以搞一個分支,去維護分支中的同一個檔案,待後面再合併回來。

2.模組的開發和維護並行

使用VSS管理原始碼,配置不允許多人checkout,模組1正在由B進行修改,B邊開發邊checkin,但是這些checkin的沒有經過測試,這時候C需要維護模組2,模組1是模組2的後續處理,可是C獲取最新的時候,同時獲取了正在修改的模組1的程式碼,是有點問題的,雖然可以編譯通過,但是功能是錯誤的,就算C修改完了模組2也不能進行測試,因為B本地的模組1的程式碼不能正常執行,導致後續的模組2沒有辦法工作。

你也不能不讓每個人checkin,或者只讓可以測試的才checkin,或者checkout也不能,只能checkout測試沒有問題的,你會發現,有了這些約束,就沒有辦法工作了。局面就是那個人都不敢checkin,那個人也不敢checkout。這樣也不行啊。

究其原因,就是因為只有一個主幹,大家都是在主幹上面開發,導致一個人的修改對其他所有人都有影響,這就很可怕了,尤其是專案做得複雜了,時間長了,人員多了,問題就會更多。

這時候很需要主、分支概念,我覺得應該是有一個主幹,然後每個人都有自己的一個分支,這樣就可以較好的避免上面的問題。在自己的分支上進行開發,可以不獲取別人修改但是又沒有測試通過的程式碼。同時也支援,而且也提倡大家常常的checkin。而且構建可以構建主幹的程式碼,不會因為大家的重構而影響主幹的功能。因為重構之後可能還沒有充分測試,但是又checkin了重構的程式碼。

這方面覺得git做的就更加好了,git是分散式的,本地也有一個git庫,就是本地也存在一個程式碼管理庫,也有版本管理的概念,不用時時聯網才能提交或者獲取。可以盡情的在本地建立版本管理,等到聯網之後再提交或者更新,而且不用擔心原始碼管理器的完蛋導致所有版本都消失的惡果。

而且git的另外一個好處是-速度,因為他是打包上傳,不是單個檔案的上傳,所以速度更快。

缺點就是git提倡完全的開源,對於瀏覽和修改沒有做任何的控制,不過這方面有一些第三方的方案可以借鑑,例如gitosis等等。估計也是因為git的完全開源,才使得它更需要本地的版本庫,才使得它更強大吧。

結論

當然了,工具畢竟是工具,它不是萬能的,不能什麼都交給它,希望它幫我們做好一切,那是不切實際的。

但是不可否認,一個好的工具,已經對於工具的正確使用,可以提高我們的效率,可以提高做事的愉悅程度,可以加快我們的進度。