第五章 系 統 設 計
系統設計是把需求轉化為軟件系統的最重要的環節。系統設計的優劣在根本上決定了軟件系統的質量。就象“一切帝國主義都是紙老虎”那樣可以斷定“差的系統設計必定產生差的軟件系統!彼晕覀円ΡWC系統設計“根正苗紅”,把一切左傾、右傾的設計思潮消滅在萌芽狀態。
Windows NT的一位系統設計師擁有8輛法拉利跑車,讓Microsoft公司的一些程序員十分眼紅。但你只能羨慕而不能憤恨,因為并不是每個程序員都有本事成為復雜軟件系統的設計師。系統設計要比純粹的編程困難得多。即便你清楚客戶的需求,卻未必知道應該設計什么樣的軟件系統——既能掙最多的錢又能讓客戶滿意!疤煜挛骱,最美是杭州”,千年前蘇東坡大學士對西湖精采絕倫的系統設計,使杭州榮升為“天堂”,讓后人只剩下贊嘆和破壞的份了。
本章講述系統設計的四方面內容:體系結構設計、模塊設計、數據結構與算法設計、用戶界面設計。如果將軟件系統比喻為人體,那么:
(1)體系結構就如同人的骨架。如果某個家伙的骨架是猴子,那么無論怎樣喂養和美容,這家伙始終都是猴子,不會成為人。
(2)模塊就如同人的器官,具有特定的功能。人體中最出色的模塊設計之一是手,手只有幾種動作,卻能做無限多的事情。人體中最糟糕的模塊設計之一是嘴巴,嘴巴將最有價值但毫無相干的幾種功能如吃飯、說話、親吻混為一體,使之無法并行處理,真乃人類之不幸。
(3)數據結構與算法就如同人的血脈和神經,它讓器官具有生命并能發揮功能。數據結構與算法分布在體系結構和模塊中,它將協調系統的各個功能。人的耳朵和嘴巴雖然是相對獨立的器官,但如果耳朵失聰了,嘴巴就只能發出“啊”“嗚”的聲音,等于喪失了說話的功能(所以聾子天生就是啞巴),可人們卻又能用手勢代替說話。人體的數據結構與算法設計真是十分神奇并且十分可笑。
(4)用戶界面就如同人的外表,最容易讓人一見鐘情或一見惡心。象人類追求心靈美和外表美那樣,軟件系統也追求(內在的)功能強大和(外表的)界面友好。但隨著生活節奏的加快,人們已少有興趣去品味深藏不露的內在美。如果把Unix系統比作是健壯的漢子和婦人,那么Windows系統就象嫵媚的小白臉和狐貍精。想不到Windows系統竟然能興風作浪,占去大半市場。有鑒于此,我們應該鼓勵女士多買化妝品(男士付錢)以獲得更好的界面。
在進行系統設計時,我們要深情地關注軟件的質量因素,如正確性與精確性、性能與效率、易用性、可理解性與簡法性、可復用性與可擴充性等等。即使把系統設計做好了,也并不意味著就能產生好的軟件系統。在程序設計、測試、維護等環節還要做大量的工作,無論哪個環節出了差錯,都會把好事搞砸了。據說上帝把所有的女士都設計成天使,可是天使們在下凡時有些雙腳先著地,有些臉先著地。上帝的這一疏忽讓很多女孩傷透了心。我們在開發軟件時,一定要吸取這個教訓。
5.1 體系結構設計
楊叔子院子曾這樣指點其弟子:
文學中有科學,音樂中有數學,漫畫中有現代數學的拓撲學。漫畫家可以“幾筆”就把一個人畫出來,不管怎么美化或丑化,就是活像。為什么?因為那“幾筆”不是別的,而是拓撲學中的特征不變量,這是事物最本質的東西。
體系結構是軟件系統中最本質的東西:
(1)體系結構是對復雜事物的一種抽象。良好的體系結構是普遍適用的,它可以高效地處理多種多樣的個體需求。一提起“房子”,我們的腦中馬上就會出現房子的印象(而不是地洞的印象)!胺孔印笔侨藗儗ψ∷藁蜣k公環境的一種抽象。不論是辦公樓還是民房,同一類建筑物(甚至不同類的建筑物)之間都具有非常相似的體系結構和構造方式。如果13億中國人民每個人都要用特別的方式構造奇異的房子,那么960萬平方公里的土地將會變得千瘡百孔,終日不得安寧。
(2)體系結構在一定的時間內保持穩定。只有在穩定的環境下,人們才能干點事情,社會才能發展?茖W告訴我們,宇宙間萬物無時無刻不在運動、飛行。由于我們的生活環境在地球上保持相對穩定,以致于我們可以無憂無慮地吃飯和睡覺,壓根就意識不到自己是活生生的導彈。軟件開發最怕的就是需求變化,但“需求會發生變化”是個無法逃避的現實。人們希望在需求發生變化時,最好只對軟件做些皮皮毛毛的修改,可千萬別改動軟件的體系結構。就如人們對住宿的需求也會變動,你可以經常改變房間的裝璜和擺設,但不會在每次變動時都要去折墻、拆柱、挖地基。如果當需求發生變化時,程序員不得不去修改軟件的體系結構,那么這個軟件的系統設計是失敗的。
良好的體系結構意味著普適、高效和穩定。本節將論述兩種非常通用的軟件體系結構:層次結構和客戶機/服務器(Client/Server)結構。
5.1.1 層次結構
層次結構表達了這么一種常識:有些事情比較復雜,我們沒法一口氣干完,就把事情分為好幾層,一層一層地去做。高層的工作總是建立在低層的工作之上。層次關系主要有兩種:上下級關系和順序相鄰關系。
一、上下級關系的層次結構
我們從小學一直讀到博士研究生畢業,要讀20多年,可以分為五個層次。而范進的知識結構只有兩層:“私塾”和“秀才”,但讀了五十多年,如圖5.1所示。一般地處于較高層次的學生應該懂得所有低層次的知識,而處于低層次學生無法懂得所有高層次的知識。圖5.1的層次結構存在上下級關系,如同在軍隊中,上級可以命令下級,而下級不能命令上級。如果把圖5.1的層次結構當成是一個軟件系統的結構,那么上層子系統可以使用下層子系統的功能,而下層子系統不能夠使用上層子系統的功能。
二、順序相鄰關系的層次結構
順序相鄰關系的層次結構表明通訊只能在相鄰兩層之間發生,信息只能被一層一層地順序傳遞。這種層次結構的經典之作是計算機網絡的OSI參考模型,如圖5.2所示。為了減少設計的復雜性,大多數網絡都按層(Layer)或級(Level)的方式組織。每一層的目的都是向它的上一層提供一定的服務,而把如何實現這一服務的細節對上一層加以屏蔽。一臺機器上的第n層與另一臺機器上的第n層進行對話。通話的規則就是第n層的協議。數據不是從一臺機器的第n層直接傳送到另一臺機器的第n層。發送方把數據和控制信息逐層向下傳遞。最低層是物理介質,它進行實際的通訊。接收方則將數據和控制信息逐層向上傳遞。
每一對相鄰層之間都有接口。接口定義了下層提供的原語操作和服務。當網絡設計者在決定一個網絡應包含多少層,每一層應當做什么的時候,其中很重要的工作是在相鄰層之間定義清晰的接口。接口可以使得同一層能輕易地用某一種實現(Implementation)來替換另一種完全不同的實現(如用衛星信道來代替所有的電話線),只要新的實現能向上層提供同一組服務就可以了。[Tanenbaum 1998]
小 學 (5-6年)
碩 士(2-3年)
考上“舉人”時已五十多歲了
本 科(4年)
復習報考“舉人”用了幾十年
中 學(6年)
私 塾
秀 才
博 士(3-4年)
圖5.1(a)從小學讀到博士存在的五個學習階段 圖5.1(b)范進的知識結構
數據鏈路層
網絡層
傳輸層
會話層
表示層
應用層
數據鏈路層
網絡層
傳輸層
會話層
表示層
應用層
物理層
舉人
主
機
A
主
機
B
物理層
圖5.2 計算機網絡的OSI參考模型
三、其它的層次結構
目前在大型商業應用軟件系統中還流行一種包含中間件(Middleware)的層次結構,如圖5.3所示[Jacobson 1997]。中間件支持與平臺無關的分布式計算,可以用DCOM和CORBA對象來實現。
Middleware
Business-specific Components
Application Systems
文章來源于領測軟件測試網 http://www.kjueaiud.com/