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





