新聞中心
我們需要哪些文檔,工具和努力

軟件項(xiàng)目肯定離不了文檔和管理工具,如果您的項(xiàng)目還沒(méi)有它們,那么請(qǐng)從現(xiàn)在開(kāi)始。那么文檔是不是越多越好呢?老話說(shuō)的好,合適的才是最好的。小而精的文檔和工具會(huì)讓我們事半功倍,大而全的文檔會(huì)讓我們疲于奔命,最后迷失在文檔的海洋中。
向您推薦上一篇系列文章:《我們?nèi)绾伍_(kāi)始對(duì)項(xiàng)目進(jìn)行管理:需要什么樣的人》
我們寫(xiě)代碼的都知道,錯(cuò)誤的注釋比沒(méi)有注釋更可怕;同樣的,沒(méi)有及時(shí)得到更新的文檔比沒(méi)有文檔更可怕,因?yàn)槲臋n就是項(xiàng)目的注釋。那么我們是否有必要去更新那些我們根本沒(méi)有用到的文檔呢?很顯然,那是非常沒(méi)有必要的,是對(duì)資源的浪費(fèi)。文檔說(shuō)起來(lái)其實(shí)就是一個(gè)工具,是一個(gè)讓我們開(kāi)發(fā)時(shí)有依據(jù),可以追溯開(kāi)發(fā)過(guò)程以及記錄開(kāi)發(fā)結(jié)果的工具。我們只有用到它,它才有存在的必要。
那么文檔過(guò)于少或者干脆沒(méi)有文檔,不是更簡(jiǎn)潔?我想說(shuō):不寫(xiě)代碼不是更簡(jiǎn)潔?玩笑歸玩笑,沒(méi)有文檔或者文檔太少會(huì)導(dǎo)致的問(wèn)題大家可能也都遇到過(guò):那就是過(guò)程不可追溯,有些非常重要的邏輯沒(méi)有記錄,需要用到時(shí)團(tuán)隊(duì)成員各執(zhí)一詞,甚至需要重新找客戶確認(rèn)而是客戶認(rèn)為我們不夠?qū)I(yè);有些非常重要的設(shè)計(jì)沒(méi)有記錄,導(dǎo)致代碼維護(hù)困難,以至于維護(hù)人員破口大罵開(kāi)發(fā)人員寫(xiě)的什么垃圾代碼做的什么垃圾設(shè)計(jì)。有些設(shè)計(jì)非常的巧妙,非常的值得學(xué)習(xí),然而就是因?yàn)闆](méi)有留下記錄而被初學(xué)者如我一樣的人罵了N次。在反省自己不夠聰明時(shí),是否也該讓寫(xiě)代碼的人反省一下為什么沒(méi)能留下點(diǎn)兒記錄?
有一種觀點(diǎn)是最好的設(shè)計(jì)就是代碼,意思是代碼就是設(shè)計(jì),代碼應(yīng)該非常的優(yōu)秀,可讀性特別好,讓人一看就明白,我完全同意。如果代碼寫(xiě)到這種程度,那文檔就真的沒(méi)用了。那么請(qǐng)自問(wèn),您是這樣嗎?如果是,沒(méi)文檔,沒(méi)問(wèn)題;如果不是,請(qǐng)把重要的東西寫(xiě)下來(lái)。那么,哪些是重要的呢?
哪些是必須的, 哪些是Optional的。對(duì)于哪些文檔更重要些,應(yīng)該由項(xiàng)目的具體情況而定,特別是項(xiàng)目的大小,邏輯的復(fù)雜程度,人員的情況等等很多因素。在我做過(guò)的項(xiàng)目中,我個(gè)人認(rèn)為最重要的一些文檔和工具如下所述:
1, 功能說(shuō)明書(shū)(Functional Specification)------按獨(dú)立功能劃分優(yōu)先級(jí),每一條記錄都是一個(gè)可交付物,都是一個(gè)功能。整個(gè)文檔就描述了整個(gè)項(xiàng)目的交付功能和優(yōu)先級(jí)。項(xiàng)目中的所有人,都應(yīng)該關(guān)注這個(gè)文檔:測(cè)試用它來(lái)寫(xiě)測(cè)試用例;開(kāi)發(fā)人員用它來(lái)決定先開(kāi)發(fā)哪個(gè)功能;PM用它來(lái)查看功能的完成和驗(yàn)證狀態(tài)。它通常不應(yīng)該內(nèi)容過(guò)多(由項(xiàng)目規(guī)模決定),我覺(jué)得最多兩行字就可以描述一個(gè)獨(dú)立工作的功能,至于對(duì)這個(gè)功能的理解,應(yīng)該由負(fù)責(zé)它的程序員來(lái)完成。
2, 核心流程圖。這個(gè)流程圖可能描述了用戶使用該系統(tǒng)的過(guò)程;也可能描述系統(tǒng)中數(shù)據(jù)的流轉(zhuǎn);也可能描述表單的流轉(zhuǎn)??傊枋鲆粋€(gè)過(guò)程,這個(gè)過(guò)程對(duì)用戶來(lái)說(shuō)非常重要。這個(gè)圖有時(shí)候也會(huì)被其它的圖,如順序圖代替。
3, 部署文檔。該文檔描述了該系統(tǒng)應(yīng)該如何部署,它不一定非要是一個(gè)word文檔,也可能僅是一個(gè)bat文件而已。這個(gè)文檔應(yīng)該描述該項(xiàng)目如何部署,步驟是怎么樣的,需要哪些文件,需要哪些硬件支持,以及需要注意什么。部署歷來(lái)都不太被重視,大家覺(jué)得只要東西做出來(lái)了,部署不就是放上去嗎?其實(shí)不然。在經(jīng)歷了一定周期的開(kāi)發(fā)后,開(kāi)發(fā)過(guò)程中積累的配置,對(duì)環(huán)境的要求,在真正部署的時(shí)候很多就忘了,所以部署可能會(huì)花費(fèi)很多沒(méi)必要的時(shí)間,我覺(jué)得這也是微軟要做daily build的原因之一,每天都build一個(gè)可用的版本,當(dāng)然部署就沒(méi)有問(wèn)題了。我們剛開(kāi)始可能不需要每天都build一個(gè)版本,但最少要一周或者兩周部署一個(gè)版本吧。每次部署都整理一個(gè)自動(dòng)化的腳本或者文檔,會(huì)讓你最后上線的時(shí)候非常的從容。
4, 測(cè)試用例。我不是一個(gè)測(cè)試人員,測(cè)試也是我覺(jué)得一直沒(méi)有做到位的地方??陀^的說(shuō),我覺(jué)得用例應(yīng)該花很大心思去編寫(xiě),就像用戶真正的在使用軟件一樣。項(xiàng)目應(yīng)該在設(shè)計(jì)和開(kāi)發(fā)的時(shí)候就以滿足用例為目標(biāo),而不是開(kāi)發(fā)完了才想起來(lái)用例,去測(cè)試,發(fā)現(xiàn)問(wèn)題再修改,回頭想想,這可能就是測(cè)試驅(qū)動(dòng)開(kāi)發(fā)產(chǎn)生的原因吧。我們知道用戶發(fā)現(xiàn)錯(cuò)誤修改的成本高于我們自己發(fā)現(xiàn)的錯(cuò)誤;同樣的,設(shè)計(jì)和開(kāi)發(fā)階段就解決的問(wèn)題成本也遠(yuǎn)遠(yuǎn)小于測(cè)試階段發(fā)現(xiàn)的。正是,問(wèn)題發(fā)現(xiàn)的越早,解決起來(lái)就越容易,成本就越低。
5, Bug管理工具。這個(gè)管理工具可以是一個(gè)excel,當(dāng)然,我并不推薦這么做,畢竟excel卻是不那么自動(dòng)化。但是,只要比excel自動(dòng)化一點(diǎn)點(diǎn)兒的信息系統(tǒng)就可以了,它需要可以記錄問(wèn)題,可以傳截圖,這就夠了。我推薦使用bug tracker,這是個(gè)dotnet開(kāi)發(fā)的開(kāi)源的bug管理工具,其實(shí)也可以管理需求,是非常實(shí)用的。
以上五個(gè)是我認(rèn)為最重要的,我覺(jué)得是項(xiàng)目開(kāi)始進(jìn)行管理的階段必不可少的;而下面幾個(gè),則是大家視情況可選的。
6, 核心類圖。這個(gè)可能是可選的,因?yàn)橛袝r(shí)候,類的關(guān)于沒(méi)那么復(fù)雜,也就沒(méi)有必要有這個(gè)圖;相反,則需要進(jìn)行記錄。
7, 數(shù)據(jù)庫(kù)設(shè)計(jì)。數(shù)據(jù)庫(kù)設(shè)計(jì)文檔可能在review的時(shí)候用到。
8, 系統(tǒng)間接口圖。如果產(chǎn)品有若干個(gè)子系統(tǒng),如web service等等,那么我認(rèn)為需要一個(gè)描述系統(tǒng)間接口和交互關(guān)系的圖,這個(gè)圖應(yīng)該在設(shè)計(jì)的早期就開(kāi)發(fā)出來(lái)供大家使用并且隨時(shí)保持更新和關(guān)注。
有了文檔和工具,是不是就一切OK了呢?不對(duì),就像大而全的文檔并不能幫助我們成功一樣,有了文檔并不代表項(xiàng)目就能成功,如何維護(hù)和使用這些文檔和工具是相當(dāng)重要的。每個(gè)文檔都應(yīng)該有人去維護(hù),那么誰(shuí)去做這個(gè)事呢?我認(rèn)為項(xiàng)目經(jīng)理應(yīng)該經(jīng)常拿著功能說(shuō)明書(shū)開(kāi)會(huì),它也可以被看做是WBS的初級(jí)版本,可以被標(biāo)注狀態(tài)和優(yōu)先級(jí);所有人都應(yīng)該熟悉流程圖,并隨時(shí)提出對(duì)流程圖進(jìn)行檢驗(yàn)和review;應(yīng)該指定一個(gè)人負(fù)責(zé)構(gòu)建,這并不需要花費(fèi)很多時(shí)間,但是需要細(xì)心和一些完美主義精神;測(cè)試人員自然要維護(hù)好測(cè)試用例;每個(gè)人特別是開(kāi)發(fā)人員,都應(yīng)該有一種覺(jué)悟,那就是一旦想起了哪些重要的邏輯,不管是業(yè)務(wù)的邏輯還是系統(tǒng)的算法,都應(yīng)該記錄到bug管理工具上。Bug管理工具完全可以記錄這些零散但卻重要的東西,以便將來(lái)方便查詢。
在這里我也是根據(jù)自己的經(jīng)歷簡(jiǎn)單的談了一些我的看法,這并不是金科玉律,我還得說(shuō),合適你的才是最好的。
(四) 代碼規(guī)范的選擇
做開(kāi)發(fā)不可避免的遇到代碼規(guī)范,從上學(xué)時(shí)就會(huì)學(xué)習(xí)到一些規(guī)范,但是每個(gè)公司都不同,那么我們到底要遵守哪些規(guī)范呢?我個(gè)人認(rèn)為,一個(gè)合格的程序員應(yīng)該可以隨時(shí)調(diào)整自己適應(yīng)任何一種規(guī)范,這是一種職業(yè)素養(yǎng)和能力。而何時(shí)該遵循何種規(guī)范,這也有一定的原則。
1, 在現(xiàn)有系統(tǒng)(代碼)基礎(chǔ)上進(jìn)行開(kāi)發(fā)。這種情況下,我們應(yīng)該盡量的去遵循原有系統(tǒng)的規(guī)范,不論是命名還是注釋。因?yàn)槿绻@時(shí)你非要按照自己的習(xí)慣寫(xiě),那么系統(tǒng)就會(huì)出現(xiàn)兩種完全不同風(fēng)格的代碼,這對(duì)將來(lái)的維護(hù)是一種噩夢(mèng)。但是,遵循原有規(guī)范不是遷就原有錯(cuò)誤。如果發(fā)現(xiàn)原有的規(guī)范會(huì)造成一定的問(wèn)題,就要立刻改正,不能裝傻充愣假裝看不見(jiàn)。
2, 新建團(tuán)隊(duì)開(kāi)發(fā)新的系統(tǒng)。新建的團(tuán)隊(duì)中團(tuán)隊(duì)成員可能來(lái)自不同的環(huán)境,對(duì)規(guī)范的選擇傾向一定是不完全一樣的,此時(shí)要怎么做呢?這時(shí),項(xiàng)目的領(lǐng)導(dǎo)者應(yīng)該組織大家一起做一個(gè)決定,討論如何定義變量,如何給控件取名等等。在出現(xiàn)意見(jiàn)不統(tǒng)一又誰(shuí)都說(shuō)服不了誰(shuí)的情況時(shí),項(xiàng)目經(jīng)理應(yīng)該做出明確的決定。此時(shí)選擇一種規(guī)范遠(yuǎn)比同時(shí)遷就兩個(gè)人要來(lái)的好,不然造成新系統(tǒng)中存在兩種規(guī)范,同樣是維護(hù)的噩夢(mèng)。
3, 穩(wěn)定團(tuán)隊(duì)開(kāi)發(fā)新的系統(tǒng)。這種情況就容易得多,團(tuán)隊(duì)穩(wěn)定后團(tuán)隊(duì)成員漸漸的了解了互相的習(xí)慣,互相學(xué)習(xí)后就更容易達(dá)成妥協(xié)。只要注意讓新加入的成員適應(yīng)就可以了。
有人可能覺(jué)得代碼規(guī)范沒(méi)什么大不了,功能正確沒(méi)有bug不就行了?當(dāng)然,如果沒(méi)有bug那肯定沒(méi)問(wèn)題,然而一個(gè)系統(tǒng)運(yùn)行到退休還沒(méi)有bug,哪位見(jiàn)過(guò)呢?我做了一些運(yùn)維工作之后才漸漸了解到,不同風(fēng)格的代碼讀起來(lái)就像是一會(huì)兒在赤道,一會(huì)兒在南極,非常的痛苦,有時(shí)甚至?xí)斐上到y(tǒng)很多的不一致,大大增加了維護(hù)的工作量。我們的目標(biāo)之一不就是增加系統(tǒng)的可維護(hù)性嗎?
網(wǎng)頁(yè)題目:我們?nèi)绾伍_(kāi)始對(duì)項(xiàng)目進(jìn)行管理:文檔很重要
文章出自:http://m.fisionsoft.com.cn/article/dhsogeo.html


咨詢
建站咨詢
