我想強(qiáng)調(diào)幾個(gè)問(wèn)題。
一是要分清問(wèn)題域與系統(tǒng)責(zé)任。系統(tǒng)責(zé)任是指所要開發(fā)的軟件應(yīng)該完成的功能,而問(wèn)題域是包含所有相關(guān)的部分。例如你要開發(fā)一個(gè)程控機(jī)計(jì)費(fèi)程序,程控機(jī)已經(jīng)是現(xiàn)成,輸出的數(shù)據(jù)格式也已經(jīng)是固定的,你的程序僅僅需要從程控機(jī)中讀取相應(yīng)的信息,那么,"程控機(jī)"在你的系統(tǒng)里只是一個(gè)外部的東西,把它作為一個(gè)類也許是不必要的,僅僅需要一個(gè)類來(lái)完成讀數(shù)據(jù)的操作。又如,你需要在一個(gè)已經(jīng)存在的數(shù)據(jù)庫(kù)上開發(fā)一些應(yīng)用,數(shù)據(jù)庫(kù)的格式已經(jīng)固定,并且已經(jīng)有一個(gè)后臺(tái)程序在運(yùn)行,你需要開發(fā)一個(gè)新的前臺(tái)程序,這時(shí),服務(wù)器程序?qū)δ銇?lái)說(shuō)是一個(gè)外部的東西。但是,象這種外部的內(nèi)容必須在分析文檔中有一些說(shuō)明,作為系統(tǒng)的外在約束。
二是需求獲取與需求分析的關(guān)系。
用什么方法來(lái)完成需求的獲取,在很大程度上影響了需求分析的做法。
例如當(dāng)初采用Use Case來(lái)表示用戶需求,那么從各種序列圖中選出相互交互的各個(gè)實(shí)體,是一個(gè)個(gè)類。
三是分析與設(shè)計(jì)過(guò)程的銜接。
分析過(guò)程的內(nèi)容是用類的結(jié)構(gòu)來(lái)表示目標(biāo)系統(tǒng),并不設(shè)計(jì)具體實(shí)現(xiàn),如采用什么編程語(yǔ)言,在什么操作系統(tǒng)平臺(tái)上運(yùn)行等等。這些具體實(shí)現(xiàn)是在設(shè)計(jì)階段來(lái)完成的。面向?qū)ο蠓椒ǖ膬?yōu)點(diǎn)是分析、設(shè)計(jì)、編碼過(guò)程表示法統(tǒng)一,能比較好的銜接。但是,是把分析和設(shè)計(jì)階段分開,采用瀑布式開發(fā),還是采用其他方式,要看具體的情況。
對(duì)于需求潛在變化不大的項(xiàng)目,可以采用瀑布模型,有一個(gè)很明顯的設(shè)計(jì)階段,這樣做的好處是有一份比較完整的分析文檔,這樣以后如果需要采用不同的編程語(yǔ)言、或者采用其他的平臺(tái)時(shí),便可以以這份分析文檔作為開發(fā)的基礎(chǔ)。
對(duì)于需求變化頻繁的項(xiàng)目,可能采用少量分析->少量設(shè)計(jì)->少量編碼->測(cè)試的方式更合適,而且隨時(shí)可能要返回到前面某個(gè)一階段去進(jìn)行修改。但是這意味著可能沒有一份完整的分析文檔。
現(xiàn)在很多CASE工具并不區(qū)分分析和設(shè)計(jì)的階段。但是,這并不意味著開發(fā)可以對(duì)分析和設(shè)計(jì)不加區(qū)分,CASE工具如同一支筆,如何用好還得還人。
3.設(shè)計(jì)過(guò)程
設(shè)計(jì)階段的工作包括:
對(duì)分析模型必要的修改?赡苄枰獙(duì)某些類結(jié)構(gòu)進(jìn)行一些修改,這些修改的原因可能是編程環(huán)境的要求,或者為了重用以前的某些工作。
定義界面部分、數(shù)據(jù)訪問(wèn)(數(shù)據(jù)庫(kù))部分。
由于目前很多編程語(yǔ)言都可以可視化地設(shè)計(jì)界面,所以界面部分工作往往留到了編碼階段來(lái)完成。于是設(shè)計(jì)階段的工作量并不大。
4.編碼
進(jìn)入編碼工作之后,可能會(huì)發(fā)現(xiàn)前面分析或設(shè)計(jì)階段的某些錯(cuò)誤,這時(shí)應(yīng)返回到前面的階段進(jìn)行必要的修改。
5.測(cè)試
如前所述,即使是小項(xiàng)目,也應(yīng)該嚴(yán)格地進(jìn)行測(cè)試。
四、人員的安排
比較小的項(xiàng)目,往往是幾個(gè)人來(lái)完成,這幾個(gè)人基本上從頭到尾參加開發(fā)。在這幾個(gè)人中,有一位項(xiàng)目負(fù)責(zé)人,負(fù)責(zé)分析、設(shè)計(jì)和協(xié)調(diào)的工作。由于項(xiàng)目小,項(xiàng)目負(fù)責(zé)人也要參加編程,那么這人必須把時(shí)間合理運(yùn)用,
經(jīng)驗(yàn)告訴我?guī)讞l原則:
1.協(xié)調(diào)幾個(gè)人的工作比自己完成一段編碼更重要.
由于協(xié)調(diào)上出了漏洞,可能導(dǎo)致很大的問(wèn)題,所以項(xiàng)目負(fù)責(zé)人必須隨時(shí)監(jiān)控各開發(fā)人員的工作,包括內(nèi)容是否與要求發(fā)生偏差,進(jìn)度是否滯后等等。
只有在完成這些工作之后,項(xiàng)目負(fù)責(zé)人剩下的時(shí)間才能用于編程。
2.給每個(gè)開發(fā)人員明確的任務(wù)書.
不管是用面向?qū)ο蠡蛘咂渌椒ㄩ_發(fā),分析、設(shè)計(jì)模型只是從功能的角度來(lái)描述系統(tǒng)。但是,具體開發(fā)時(shí)每個(gè)開發(fā)人員必須非常明確自己的任務(wù),這些任務(wù)應(yīng)該采用明確的文檔來(lái)表示。
3.讓大家都大致熟悉設(shè)計(jì)模型.
讓每個(gè)開發(fā)人員都清楚自己所做的工作在整個(gè)系統(tǒng)中處于什么地位,有時(shí)侯可能會(huì)發(fā)現(xiàn)設(shè)計(jì)模型中的漏洞,避免了各人的代碼編寫完畢之后又要修改的后果。