說(shuō)明:本文轉(zhuǎn)自:http://dev.yesky.com/348/2468848.shtml,
2006-07-03 08:00 作者: 出處: CSDN 責(zé)任編輯:方舟

 

如果想搭一個(gè)狗窩,備好木料、釘子和一些基本工具(如錘子、鋸和卷尺)之后,就可以開(kāi)始工作了。從制定一點(diǎn)初步計(jì)劃到完成 一個(gè)滿足適當(dāng)功能的狗窩,可能不用別人幫助,在幾個(gè)小時(shí)內(nèi)就能夠?qū)崿F(xiàn)。只要狗窩夠大且不太漏水,狗就可以安居。如果未能達(dá)到希望的效果,返工總是可以的, 無(wú)非是讓狗受點(diǎn)委屈。   


如果想為家庭建造一所房子,備好木料、釘子和一些基本工具之后,也能開(kāi)始工作,但這將需要較長(zhǎng)的時(shí)間,并且家庭 對(duì)于房子的需求肯定比狗對(duì)于狗窩的需求要多。在這種情況下,除非曾經(jīng)多次建造過(guò)房子,否則就需要事先制定出一些詳細(xì)的計(jì)劃,再開(kāi)始動(dòng)工,才能夠成功。至少 應(yīng)該繪制一些表明房子是什么樣子的簡(jiǎn)圖。如果想建造一所能滿足家庭的需要并符合當(dāng)?shù)亟ㄖ?guī)范的合格房屋,就需要畫(huà)一些建筑圖,以便能想清楚房間的使用目的 以及照明、取暖和水管裝置的實(shí)際細(xì)節(jié)問(wèn)題。做出這些計(jì)劃后,就能對(duì)這項(xiàng)工作所需的時(shí)間和物料做出合理的估計(jì)。盡管自己也可能建造出這樣的房屋,但若有其他 人協(xié)作,并將工程中的許多關(guān)鍵部分轉(zhuǎn)包出去或購(gòu)買預(yù)制的材料,效率就會(huì)高得多。只要按計(jì)劃行事,不超出時(shí)間和財(cái)務(wù)的預(yù)算,家庭多半會(huì)對(duì)這新房感到滿意。如 果不制定計(jì)劃,新房就不會(huì)完全令人滿意。因此,最好在早期就制定計(jì)劃,并謹(jǐn)慎地處理好所發(fā)生的變化。   


如果你要建造一座高層辦公大廈,若還是先備好木料、釘子和一些基本工具就開(kāi)始工作,那將是非常愚蠢的。因?yàn)槟闼褂玫馁Y金可能是別人的,他們會(huì)對(duì)建筑物的規(guī)模、形狀和風(fēng)格做出要求。同時(shí),他們經(jīng)常會(huì)改變想法,甚至是在工程已經(jīng)開(kāi)工之后。由于失敗的代價(jià)太高了,因此必須要做詳盡的計(jì)劃。負(fù)責(zé)建筑物設(shè)計(jì)和施工的是一個(gè)龐大的組織機(jī)構(gòu),你只是其中的一部分。這個(gè)組織將需要各種各樣的設(shè)計(jì)圖和模型, 以供各方相互溝通。只要得到了合適的人員和工具,并對(duì)把建筑概念轉(zhuǎn)換為實(shí)際建筑的過(guò)程進(jìn)行積極的管理,將會(huì)建成這座滿足使用要求的大廈。如果想繼續(xù)從事建 筑工作,那么一定要在使用要求和實(shí)際的建筑技術(shù)之間做好平衡,并且處理好建筑團(tuán)隊(duì)成員們的休息問(wèn)題,既不能把他們置于風(fēng)險(xiǎn)之中,也不能驅(qū)使他們過(guò)分辛苦地 工作以至于精疲力盡。   


奇怪的是,很多軟件開(kāi)發(fā)組織開(kāi)始想建造一座大廈式的軟件,而在動(dòng)手處理時(shí)卻好像他們正在倉(cāng)促地造一個(gè)狗窩。    


有時(shí)你是幸運(yùn)的。如果在恰當(dāng)?shù)臅r(shí)間有足夠的合適人員,并且其他一切事情都很如意,你的團(tuán)隊(duì)有可能(僅是可能)推出一個(gè)令用戶眼花繚亂的軟件產(chǎn)品。然而, 一般的情況下,不可能所有人員都合適(合適的人員經(jīng)常供不應(yīng)求),時(shí)間并不總是恰當(dāng)?shù)模ㄗ蛱炜偸歉茫渌氖虑橐膊⒉槐M如人意(常常由不得自己)。現(xiàn) 在對(duì)軟件開(kāi)發(fā)的要求正在日益增加,而開(kāi)發(fā)團(tuán)隊(duì)卻還是經(jīng)常單純地依靠他們唯一真正知道如何做好的一件事——編寫程序代碼。英雄式的編程工作成為這一行業(yè)的傳奇,人們似乎經(jīng)常認(rèn)為更努力地工作是面對(duì)開(kāi)發(fā)中出現(xiàn)的各種危機(jī)的正常反應(yīng)。然而,這未必能產(chǎn)生正確的程序代碼,而且一些項(xiàng)目是非常巨大的,無(wú)論怎樣延長(zhǎng)工作時(shí)間,也不足以完成所需的工作。    


如果真正想建造一個(gè)相當(dāng)于房子或大廈類的軟件系統(tǒng),問(wèn)題可不是僅僅編寫許多軟件。事實(shí)上,關(guān)鍵是要編出正確的軟件,并考慮如何少寫軟件。要生產(chǎn)合格的軟 件就要有一套關(guān)于體系結(jié)構(gòu)、過(guò)程和工具的規(guī)范。即使如此,很多項(xiàng)目開(kāi)始看起來(lái)像狗窩,但隨后發(fā)展得像大廈,原因很簡(jiǎn)單,它們是自己成就的犧牲品。如果對(duì)體 系結(jié)構(gòu)、過(guò)程或工具的規(guī)范沒(méi)有作任何考慮,總有一天狗窩會(huì)膨脹成大廈,并會(huì)由于其自身的重量而倒塌。狗窩的倒塌可能使你的狗惱怒;同理,不成功的大廈則將 對(duì)大廈的租戶造成嚴(yán)重的影響。   


不成功的軟件項(xiàng)目失敗的原因各不相同,而所有成功的項(xiàng)目在很多方面都是相似的。成功的軟件組織有很多成功的因素,其中共同的一點(diǎn)就是對(duì)建模的采用。   建模是一項(xiàng)經(jīng)過(guò)檢驗(yàn)并被廣為接受的工程技術(shù)。建立房屋和大廈的建筑模型,能幫助用戶得到實(shí)際建筑物的印象,甚至可以建立數(shù)學(xué)模型來(lái)分析大風(fēng)或地震對(duì)建筑物造成的影響。    


建模不只適用于建筑業(yè)。如果不首先構(gòu)造模型(從計(jì)算機(jī)模型到物理風(fēng)洞模型,再到與實(shí)物大小一樣的原型),就裝配新型的飛機(jī)或汽車,那簡(jiǎn)直是難以想像的。 新型的電氣設(shè)備(從微處理器到電話交換系統(tǒng))需要一定程度的建模,以便更好地理解系統(tǒng)并與他人交流思想。在電影業(yè),情節(jié)串聯(lián)板是產(chǎn)品的核心,這也是建模的 一種形式。在社會(huì)學(xué)、經(jīng)濟(jì)學(xué)和商業(yè)管理領(lǐng)域也需要建模,以證實(shí)人們??的理論或用最小限度的風(fēng)險(xiǎn)和代價(jià)試驗(yàn)新的理論。   


那么,模型是什么?簡(jiǎn)單地說(shuō):   


模型是對(duì)現(xiàn)實(shí)的簡(jiǎn)化。    


模型提供了系統(tǒng)的藍(lán)圖。模型既可以包括詳細(xì)的計(jì)劃,也可以包括從很高的層次考慮系統(tǒng)的總體計(jì)劃。一個(gè)好的模型包括那些有廣泛影響的主要元素,而忽略那些 與給定的抽象水平不相關(guān)的次要元素。每個(gè)系統(tǒng)都可以從不同的方面用不同的模型來(lái)描述,因而每個(gè)模型都是一個(gè)在語(yǔ)義上閉合的系統(tǒng)抽象。模型可以是結(jié)構(gòu)性的, 強(qiáng)調(diào)系統(tǒng)的組織。它也可以是行為性的,強(qiáng)調(diào)系統(tǒng)的動(dòng)態(tài)方面。   


為什么要建模?一個(gè)基本理由是:   建模是為了能夠更好地理解正在開(kāi)發(fā)的系統(tǒng)。


(備注:個(gè)人認(rèn)為表述成“建模是為了能夠更好地理解即將開(kāi)發(fā)的系統(tǒng)”更為恰當(dāng),畢竟,建模在開(kāi)發(fā)前發(fā)揮的作用更大(個(gè)人看法,一家之言)。當(dāng)然,因?yàn)榻8采w了軟件生命周期的全過(guò)程,作者的表述也可以。)   


通過(guò)建模,要達(dá)到4個(gè)目的:   


(1)模型有助于按照實(shí)際情況或按照所需要的樣式對(duì)系統(tǒng)進(jìn)行可視化。   

(2)模型能夠規(guī)約系統(tǒng)的結(jié)構(gòu)或行為。   

(3)模型給出了指導(dǎo)構(gòu)造系統(tǒng)的模板。   

(4)模型對(duì)做出的決策進(jìn)行文檔化。 【第2章討論UML如何完成這4件事情。】   


建模并不只是針對(duì)大的系統(tǒng)。甚至像狗窩那樣的軟件也能從一些建模中受益。

(備 注:個(gè)人認(rèn)為建狗窩就不需要建模了吧,基本上沒(méi)這個(gè)必要。在我們老家那,建豬圈和雞窩的時(shí)候,從來(lái)沒(méi)有見(jiàn)過(guò)誰(shuí)還畫(huà)過(guò)圖紙什么的,但是建樓房的時(shí)候,倒是畫(huà) 過(guò)幾張簡(jiǎn)圖(簡(jiǎn)單建模)。馬士兵老師說(shuō)過(guò):蓋雞窩的時(shí)候,你就應(yīng)該拿把瓦刀,拎幾塊磚,該蓋雞窩就蓋雞窩去,還建什么模型啊?但是,當(dāng)你建一所高樓大廈(比如北京奧運(yùn)會(huì)主場(chǎng)館鳥(niǎo)巢) 時(shí),你還拿把瓦刀,拎幾塊磚,扛幾根BG生產(chǎn)的優(yōu)質(zhì)鋼管,站在凜冽北風(fēng)中,茫然四顧,引得多少英雄豪杰為之傾倒。這時(shí)不建模型,就不合適了)。

然而,可以明確地講,系統(tǒng)越大、越復(fù)雜,建模的重要性就越大,一個(gè)很簡(jiǎn)單的原因是:

  因?yàn)椴荒芡暾乩斫庖粋€(gè)復(fù)雜的系統(tǒng),所以要對(duì)它建模。    


人對(duì)復(fù)雜問(wèn)題的理解能力是有限的。通過(guò)建模,縮小所研究問(wèn)題的范圍,一次只著重研究它的一個(gè)方面,這就是Edsger Dijkstra幾年前講的“分而治之”的基本方法,即把一個(gè)困難問(wèn)題劃分成一系列能夠解決的小問(wèn)題;解決了這些小問(wèn)題也就解決了這個(gè)難題。此外,通過(guò)建 模可以增強(qiáng)人的智力。一個(gè)適當(dāng)選擇的模型可以使建模人員在較高的抽象層次上工作。  


 任何情況下都應(yīng)該建模的說(shuō)法并沒(méi)有落到實(shí)處。事實(shí)上,一些研究指出,大多數(shù)軟件組織沒(méi)有做正規(guī)的建模,即使做了也很少。按項(xiàng)目的復(fù)雜性劃分一下建模的使用情況,將會(huì)發(fā)現(xiàn):項(xiàng)目越簡(jiǎn)單,采用正規(guī)建模的就越少。  


 這里強(qiáng)調(diào)的是“正規(guī)”這個(gè)詞。實(shí)際上,開(kāi)發(fā)者甚至對(duì)非常簡(jiǎn)單的項(xiàng)目也要做一些建模工作,雖然很不正規(guī)。開(kāi)發(fā)者可能在一塊黑板上或一小片紙上勾畫(huà)出他的想 法,以對(duì)部分系統(tǒng)進(jìn)行可視化表示,或者開(kāi)發(fā)組可能使用CRC卡片描述一個(gè)場(chǎng)景或某種機(jī)制的設(shè)計(jì)。使用任何一種這樣的模型都沒(méi)有什么錯(cuò)。如果它能行得通,就 可以使用。然而,這些非正規(guī)的模型經(jīng)常是太隨意了,它沒(méi)有提供一種容易讓他人理解的共同語(yǔ)言。建筑業(yè)、電機(jī)工程業(yè)和數(shù)學(xué)建模都有通用的建模語(yǔ)言,在軟件開(kāi) 發(fā)中使用一種共同的建模語(yǔ)言進(jìn)行軟件建模也能使開(kāi)發(fā)組織獲益匪淺。   


每個(gè)項(xiàng)目都能從一些建模中受益。即使在一次性的軟件開(kāi)發(fā)中——由于 可視化編程語(yǔ)言的支持,可以輕而易舉地扔掉不適合的軟件。建模也能幫助開(kāi)發(fā)組更好地對(duì)系統(tǒng)計(jì)劃進(jìn)行可視化,并幫助他們正確地進(jìn)行構(gòu)造,使開(kāi)發(fā)工作進(jìn)展得更 快。如果根本不建模,項(xiàng)目越復(fù)雜,就越有可能失敗或者構(gòu)造出錯(cuò)誤的東西。所有實(shí)用系統(tǒng)都有一個(gè)自然趨勢(shì):隨著時(shí)間的推移變得越來(lái)越復(fù)雜。雖然今天可能認(rèn)為 不需要建模,但隨著系統(tǒng)的演化,終將會(huì)對(duì)這個(gè)決定感到后悔,但那時(shí)為時(shí)已晚。

 

本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/yyg_juke/archive/2008/06/27/2591131.aspx