?????? ?前言:這是我在公司內(nèi)部的一個培訓(xùn),培訓(xùn)完之后特地整理成一篇文章。
?
??????? 應(yīng)該說這是一個很大的題目,在這里我只是簡單談?wù)勎业囊恍┬牡皿w會,不當(dāng)之處,還請大家賜教。
?
??????? 要論述軟件開發(fā)中資源處理,首先要明確軟件開發(fā)中涉及到哪些資源。軟件開發(fā)中涉及三方面的資源:人力資源、代碼資源和文檔資源。本文重點(diǎn)談?wù)撊绾喂芾泶a資源和文檔資源。
?
???????? 代碼資源一般需要通過版本管理工具進(jìn)行管理。為什么需要版本管理工具?一方面是因?yàn)楝F(xiàn)代軟件開發(fā)是一個團(tuán)隊(duì)活動,是需要進(jìn)行協(xié)作開發(fā)的;另一方面版本管理具有回溯歷史版本的功能,在排錯中具有重要意義。
?
那么一般常用的版本管理工具有哪些呢?在我剛參加工作時,使用的是微軟出品的VSS 6.0。VSS 6.0的優(yōu)點(diǎn)是簡單,上手快,缺點(diǎn)是不適合復(fù)雜的協(xié)作開發(fā)環(huán)境,比如它不支持多人同時遷出同一個文件。當(dāng)然后來微軟對VSS 6.0做了升級,不過我沒使用過比VSS6.0更高的版本?,F(xiàn)在使用的是SVN。SVN是一個開源的集中式的源碼版本管理工具,在IT界中廣泛使用?,F(xiàn)在廣泛使用的還有Git。Git是一個開源的分布式的源碼管理工具,在開源社區(qū)廣泛使用?,F(xiàn)在它在IT企業(yè)中也慢慢流行。
?
我最經(jīng)常使用的SVN有四個操作:
遷出(check out):將服務(wù)器的版本下載到本地作為一個副本。
提交(commit):將本地修改的代碼上傳到服務(wù)器
更新(update):下載服務(wù)器上最新代碼到本地
恢復(fù)(revert):將本地修改的代碼還原到上一個版本
?
???????? 使用SVN常見的目錄結(jié)構(gòu)是怎樣的?具體如下圖:
??????? 從上圖可以看到一個svn版本庫下一般有三個目錄:trunk、branches和tags。trunk很好理解,就是存放最新版本代碼的目錄。為什么會有branches和tags?就是說它們的作用是什么?branches作為存放分支版本的目錄,主要起到一個試驗(yàn)的作用。比如當(dāng)你試驗(yàn)一個新的繪圖引擎,你在主干版本試驗(yàn)就不太合適。因?yàn)橹鞲砂姹镜拇a是經(jīng)常處在劇烈變動的狀態(tài),很可能導(dǎo)致試驗(yàn)無法進(jìn)行,同時你編寫試驗(yàn)代碼也會影響其它人的代碼。因此穩(wěn)妥的辦法是你復(fù)制一份主干版本到branches目錄下作為一個分支來試驗(yàn),待試驗(yàn)通過后再和主干版本進(jìn)行代碼合并。tags主要作用在于存放不作改動的比較穩(wěn)定的歷史版本。比如你要對外發(fā)布版本,你不可能編譯最新代碼來獲取一個版本來對外發(fā)布,因?yàn)檫@個版本雖然是最新的,但肯定不是最穩(wěn)定的,因?yàn)闆]有經(jīng)過嚴(yán)格測試。因此你需要從tags目錄下找一個穩(wěn)定的歷史版本來發(fā)布。
?
說完了自主代碼的管理,我們再談?wù)劦谌綆斓墓芾?。首先第一個問題是:為什么需要第三方庫?第三方庫的作用在于資源重用,減少開發(fā)時間。很多時候如果沒有第三方庫,要按時完成一個軟件項(xiàng)目的開發(fā)是一件很困難的事情!
?
其次談一下第三方庫的種類。第三方庫大致分為兩種:商業(yè)第三方庫和非商業(yè)的開源第三方庫。其中商業(yè)第三方庫又可以分為提供源碼的商業(yè)第三方庫和僅提供接口文件和庫文件的商業(yè)第三方庫。
?
如何選擇第三方庫?我的建議有以下幾條:
1.?????? 優(yōu)先選擇開源第三方庫。理由是:可以降低開發(fā)成本,同時利于定制。
2.?????? 在沒有好的開源第三方庫的情況下優(yōu)先選擇提供源碼的第三方庫。理由是方便定制。
3.?????? 優(yōu)先選擇成熟度高的第三方庫。那么如何判斷一個第三方庫的成熟度?可以從以下方面考察:考察第三方庫的更新頻率,毫無疑問更新頻率越高表示越活躍,也有利于其成熟;是否有活躍的交流社區(qū),有表示成熟度更高;考察其在搜索引擎的搜索結(jié)果條數(shù),條數(shù)越多表示越成熟。
?
如何利用第三方庫?最基礎(chǔ)是直接使用其提供的接口,高級一點(diǎn)是根據(jù)需要添加接口,同時修改它的bug。比較高級的是在剖析它的源碼之后進(jìn)行定制。比如淘寶對MySQL和hadoop的定制。
?
談完了軟件開發(fā)中代碼管理,再談?wù)勡浖_發(fā)中的文檔管理。我們談?wù)勗谲浖_發(fā)中文檔可以分為一下幾類:
1.?????? 設(shè)計(jì)文檔。如概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)
2.?????? 交流文檔。如內(nèi)部會議記錄、和甲方的交流郵件
3.?????? 經(jīng)驗(yàn)總結(jié)。如技術(shù)總結(jié)、開發(fā)中用到的電子書
?
??????? 文檔在軟件開發(fā)的作用其實(shí)是不亞于代碼的,但是現(xiàn)實(shí)中開發(fā)人員往往對文檔不夠重視。其中一個重要原因是不少開發(fā)人員體會不到文檔的作用。那么文檔到底有什么用?在我看來至少有兩方面作用:首先設(shè)計(jì)方面的文檔本身就是甲方要求的,你不想寫都不行;二是文檔可以作用過程資產(chǎn)來共享。比如項(xiàng)目經(jīng)理不可能每來一個新同事都通過口頭來介紹項(xiàng)目情況(因?yàn)轫?xiàng)目經(jīng)理沒有這個精力和時間),肯定是需要發(fā)一些文檔來給他看,讓他自己來學(xué)習(xí)。又比如開發(fā)人員離職,不通過文檔又如何把工作順利交接到同事手中呢?
?
文檔也是經(jīng)常變動的,因此它也是需要版本管理工具進(jìn)行管理的。
?
最后我們看到一個版本數(shù)據(jù)庫的目錄可以是這樣的:
在trunk目錄是這樣的:
在doc目錄是這樣的: