轉(zhuǎn)自:http://dev.yesky.com/348/2468848.shtml
如果想搭一個(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)買(mǎi)預(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)常單純地依靠他們唯一真正知道如何做好的一件事——編寫(xiě)
程序代碼。英雄式的編程工作成為這一行業(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)于房子或大廈類(lèi)的軟件系統(tǒng),問(wèn)題可不是僅僅編寫(xiě)許多軟件。事實(shí)上,關(guān)鍵是要編出正確的軟件,并考慮如何少寫(xiě)軟件。要生產(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ī)或汽車(chē),那簡(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)。
通過(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)。甚至像狗窩那樣的軟件也能從一些建模中受益。然而,可以明確地講,系統(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í)已晚。