PPTOK課件站

展開

首頁 > 課件PPT
軟件系統設計方案ppt模板
  • 立即下載
  • PPT預覽

    • 軟件系統設計方案ppt模板

    PPT摘要

    這是軟件系統設計方案ppt模板,包括了軟件系統設計基本概念,體系結構設計,用戶界面設計,數據庫設計,模塊設計,數據結構與算法設計,小結等內容。


    目錄
    1. 軟件系統設計基本概念
    2. 體系結構設計
    3. 用戶界面設計
    4. 數據庫設計
    5. 模塊設計
    6. 數據結構與算法設計
    7. 小結
    參考書:《軟件工程與項目管理解析》,林銳 著,電子工業出版社,2003
    1. 軟件系統設計基本概念
    1.1 基本概念
    設計師與程序員的地位。系統設計的技術難度要比編程、測試的高。所以程序員、測試員稱為“員”,而設計師尊稱為“師”。 
    系統設計的好壞在根本上決定了軟件系統的優劣。我們可以斷言“差的系統設計必定產生差的軟件系統”,但是不能保證“好的系統設計必定產生好的軟件系統”。因為在設計之前有需求開發工作,在設計之后還有編程、測試和維護工作,無論哪個環節出了差錯,都會把好事搞砸了。
    據說上帝把所有的女士都設計成天使,可是天使們在下凡的時候,有些人雙腳先著地,有些人臉先著地。上帝的這一疏忽讓很多女士傷透了心。所以我們在開發軟件時,一定要吸取這個教訓。
    系統設計之源是軟件需求,包括“功能性需求”與“非功能性需求”。系統設計的目標就是使所設計的系統能夠被開發方順利地實現,并且恰如其分地滿足用戶的需求,使開發方和用戶的利益極大化。開發人員不萬不能偏離需求,為了追求技術的先進性而開展系統設計工作。
    依據“分而治之”的思想,我們把系統設計過程劃分為兩個階段:高層設計階段和詳細設計階段。高層設計階段的重點是體系結構設計。詳細設計階段的重點是用戶界面設計、數據庫設計、模塊設計、數據結構與算法設計等。
    著名3D游戲軟件Quake設計師Michael Abrash 的總結:“所有真正杰出的設計一旦被設計好,看起來都是那么的簡單和顯而易見。但是在獲得杰出設計的過程中,需要付出令人難以置信的努力。”
    1. 軟件系統設計基本概念
    1. 軟件系統設計基本概念
    1.2 軟件系統與人體的比喻
    體系結構如同人的骨架。如果某個家伙的骨架是猴子,那么無論怎樣喂養和美容,這家伙始終都是猴子,不會成為人。人的身材大小取決于骨架大小,天生小個子的人基本上不可能成為威猛的大漢,后天再努力(例如鍛煉和吃喝)也白搭。由此可見,體系結構乃是系統設計的重中之重。
    用戶界面如同人的外表,最容易讓人一見鐘情或一見惡心。象人類追求心靈美和外表美那樣,軟件系統也追求(內在的)功能強大和(外表的)界面友好。我們在設計軟件時不要沉迷于技術,而要多多思考什么樣的界面才能讓用戶更加喜歡。
    數據庫是存儲和處理數據用的。人體的數據庫是大腦,知識相當于數據,全存在大腦里。如果腦子里存儲的知識很多,那么這個人就顯得博學。如果腦子處理知識的速度很高,那么這個人就顯得聰明。數據庫設計的主要挑戰是“高速處理大容量的數據”。
    模塊如同人的器官。每個器官都具有特定的功能,器官們依附在骨架上。模塊是軟件系統的部件,它們安插在體系結構上(否則運行起來掉光光了)。在設計模塊時要重視功能獨立性,還要追求“高內聚、低耦合” 。
    數據結構與算法如同人的神經和肌肉,它分布在全身,讓器官具有生命并能發揮功能。人之所以能夠全身運動,那是無數的神經和肌肉在起作用。如果局部的神經和肌肉失效了,那么會導致對應的器官殘廢。如果全局的神經和肌肉失效了,那么人就癱瘓了。同理,數據結構與算法也有全局和局部之分,都要慎重設計。
    1. 軟件系統設計基本概念
    1.3 漫談設計模式
    20世紀90年代,面向對象(Object-Oriented)方法與技術在國內軟件業界十分火爆,人們熱衷于談論“對象”并引以為榮。十多年來,人們發表、出版了無數的文章和書籍。現在,該寫的似乎都寫完了,沒有新花樣玩了,真是一片無聊。設計模式(Design Pattern)及時問世,面向對象愛好者們終于有了新的追求。
    1995年,Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(戲稱“四人幫”)出版了Design Patterns: Elements of Reusable Object-Oriented Software,該書的中譯本已于2000年出版 .
    “四人幫”這本書的主要貢獻是:確立了設計模式這個術語,創導了一種新的面向對象設計思潮。該書出版后,全世界參與設計模式研究的人數呈爆炸性地增長。該書的負面效應是:這本書深奧無比,讀者被分成兩類,即“看得懂設計模式的”和“看不懂設計模式的”,后者居多。很多人剛入門時就被嚇住了,知難而退。
    何為“模式”和“設計模式” ?模式描述了在我們周圍不斷重復發生的問題,以及該問題的解決方案的核心,這樣你就能一次又一次地使用該解決方案而不必重復勞動。
    模式就是一種公式化的表現,究竟公式化是不是好事?(蔡學庸精辟的解釋)  
    盡管軟件技術發展非常快,但是仍然有非常多的設計模式可以讓我們套用,包括體系結構模式、數據結構模式、接口模式等。  
    小結:設計模式的應用價值在于它能幫助人們簡便地復用以前成功的設計方案。設計模式不是憑空產生的,只有對應用域問題及其解決方案進行抽象和分析,發現本質,并按照一定的格式記錄下來,才能成為可以被人們復用的設計模式。
    2. 體系結構設計
    2.1 體系結構設計原則
    中國科學院的楊叔子院子如是言:
    文學中有科學,音樂中有數學,漫畫中有現代數學的拓撲學。漫畫家可以“幾筆”就把一個人畫出來,不管怎么美化或丑化,就是活像。為什么?因為那“幾筆”不是別的,而是拓撲學中的特征不變量,這是事物最本質的東西。
    體系結構是指軟件系統的基本和主體的形態,也就是軟件系統中“最本質”的東西。一個軟件系統的體系結構設計得好不好,可以用“合適性、結構穩定性、可擴展性、可復用性”這些特征量來評估。
    合適性:即體系結構是否適合于軟件的“功能性需求”和“非功能性需求”。
    設計師可以充分發揮主觀能動性,根據需求的特征,通過推理和歸納的方法設計出合適的體系結構。經驗不豐富的設計師往往把注意力集中在“功能性需求”而疏忽了“非功能性需求”,殊不知后者恰恰是最能體現設計水平的地方。
    高水平的設計師高就高在“設計出恰好滿足客戶需求的軟件,并且使開發方和客戶方獲取最大的利益,而不是不惜代價設計出最先進的軟件。(以設計住宅為例)…
    對于軟件系統而言,能夠滿足需求的設計方案可能有很多種,究竟該選哪一種?此時商業目標是決策依據,即選擇能夠為開發方和客戶方帶來最大利益的那個設計方案。大部分軟件開發人員天生有使用新技術的傾向,而這種傾向對開發商業產品而言可能是不利的,切記切記。
    2. 體系結構設計
    結構穩定性:
    當前中國有幾句流行的至理名言:“穩定壓倒一切”、“發展是硬道理”。發展的前提條件是穩定,社會如此,開發軟件產品也是如此。
    體系結構一旦設計完成,應當在一定的時間內保持穩定不變,只有這樣才能使后續工作順利開展。如果體系結構經常變動,那么建筑在體系結構之上的用戶界面、數據庫、模塊、數據結構等等也跟著經常變動,用“樹倒猢猻散”來比喻很恰當,這將導致項目發生混亂。
    高水平的設計師應當能夠分析需求文檔,判斷出哪些需求是穩定不變的,哪些需求是可能變動的。于是根據那些穩定不變的需求設計體系結構,而根據那些可變的需求設計軟件的“可擴展性”。
    可擴展性:可擴展性是指軟件擴展新功能的容易程度。可擴展性越好,表示軟件適應“變化”的能力越強。可擴展性越來越重要,這是由現代軟件的商業模式決定的:
    社會的商業越發達,需求變化就越快。
    現代軟件產品通常采用“增量開發模式”,開發商不斷地推出軟件產品的新版本,從而不斷地獲取增值利潤。
    穩定性和可擴展性之間存在辨證的關系:如果系統不可擴展的話,那么就沒有發展前途,所以不能只關心穩定性而忽視可擴展性;而軟件系統“可擴展”的前提條件是“保持結構穩定”,否則軟件難以按計劃開發出來,穩定性是使系統能夠持續發展的基礎。所以穩定性和可擴展性都是體系結構設計的要素。
    如果每次變化都導致體系結構發生大的變動,那簡直就是“傷筋動骨”,這樣的體系結構無疑是敗筆之作。(例如房屋裝修)
    2. 體系結構設計
    可復用性 :
    復用就是指“重復利用已經存在的東西”。被復用的對象可以是有形的物體,也可以是無形的知識財富。復用不是人類懶惰的表現而是智慧的表現。因為人類總是在繼承了前人的成果,不斷加以利用、改進或創新后才會進步。 
    復用的有利于提高產品的質量、提高生產率和降低成本。由經驗可知,通常在一個新系統中,大部分的內容是成熟的,只有小部分內容是創新的。一般地可以相信成熟的東西總是比較可靠的(即具有高質量),而大量成熟的工作可以通過復用來快速實現(即具有高生產率)。勤勞并且聰明的人們應該把大部分的時間用在小比例的創新工作上,而把小部分的時間用在大比例的成熟工作中,這樣才能把工作做得又快又好。
    復用的意義很容易理解,人們也樂意復用以前的成果,但是前提條件是該成果具有比較好的可復用性。可復用性是指成果被復用的容易程度。
    可復用性是設計出來的,而不是偶然碰到的。要使體系結構具有良好的可復用性,設計師應當分析應用域的共性問題,然后設計出一種通用的體系結構模式,這樣的體系結構才可以被復用。
    2. 體系結構設計
    2.2 體系結構設計流程
    體系結構設計流程:6個步驟
    《體系結構設計報告》模板見word文檔
    2. 體系結構設計
    2.3 層次結構介紹
    層次結構是最常見的體系結構模式,它體現了“分而治之”的思想:當我們沒法一口氣解決復雜的原始問題時,就把該問題切割成許多個小的相對簡單的問題,然后逐個解決。水平方向切割產生的層稱為Layer,而豎直方向切割產生的層稱為Tier。
    層次結構在人類社會里隨處可見。有個村長曾得意地向老婆吹牛:“全中國只有四個人比我的官兒大,鄉長、縣長、省長和國務院總理”。政府的行政結構應當劃分為多個Layer和Tier。如果Layer和Tier的數目太少了,那么各級政府的領導人會非常勞累。反之如果Layer和Tier的數目太多了,那么導致政府機構太臃腫,辦公效率極低。
    古代中國文人的學歷大體分為兩層:秀才和舉人。這種劃分太粗了(即Layer數目太少),對發展教育是很不利的。很多老百姓讀不起幾年書,拿不到秀才畢業證書的人就被歸類為文盲,不幸成為社會下層人物。雖然社會上的秀才人數也不少,但是從秀才到舉人的跨度太大、門檻太高,很多秀才考舉人考了一輩子也考不上。
    典型的例子是《儒林外史》里的范進,范進在青年時期就成為秀才,可惜他考舉人考了幾十年!等他碰巧考上舉人的時候,已經是個老頭了,只給朝廷增加負擔而沒有貢獻。后人吸取了經驗教訓,于是逐步建立了現代的學歷層次結構,將學歷劃分為5個層次:小學、中學、學士、碩士、博士。這樣人們讀書的選擇面廣了,工作面也廣了。
    “層次結構”是應用最為廣泛的體系結構模式。其最大的優點是具有良好的可擴展性,人們在擴充或修改功能時,基本不會破壞原有結構的穩定性。但是萬事有利必有弊,層次結構的系統的主要缺點是:管理多個Layer和Tier比較麻煩,運行效率可能比較低。所以,一個具備良好層次結構的系統,其Layer和Tier的數目要恰如其分。 
    3. 用戶界面設計
    3.1 什么是好的用戶界面
    通俗地講,用戶界面“好不好”主要看它是否“容易使用”和“美觀”。
    易用性是指用戶使用軟件的容易程度。現代人的生活節奏快,干啥事都想圖個方便。誰都不樂意掏錢買很難用的東西,所以把易用性作為用戶界面的重要屬性對待無可非議。
    除了要求軟件易用之外,人們還希望用戶界面美觀。電影《食神》里的一段精彩故事情節可以幫助我們理解界面美觀的重要性。
    美觀的界面能消除用戶由感覺引起的乏味、緊張和疲勞(情緒低落),大大提高用戶的工作效率,從而進一步為發揮用戶技能和為用戶完成任務作出貢獻。人們對美的向往和追求是與生俱有的。顯然沒有開發人員愿意丑化自己的軟件,也沒有用戶嗜好丑陋的界面。軟件開發者要設計美,用戶要享受美,所以界面的美是開發者與用戶的共同需求。
    全世界無數人使用Microsoft公司的操作系統DOS, Windows 3.1, Windows 9x, Windows 2000和 Windows XP,這些操作系統的確是越來越好用了,并且越來越漂亮了。界面的“易用性”和“美”充分體現了人機交互作用中人的特性與意圖,越來越多的用戶將通過具有吸引力而令人愉快的人機界面與計算機打交道。  
    3. 用戶界面設計
    3.2 開發人員的能力缺陷
    盡管國內有很多技術出色、聰明過人的軟件開發人員,但是他們未必開發得出“易用”的和“美觀”的軟件。主要原因有:
    國內絕大多數大學的計算機學科教育存在缺陷:沒有開設人機工程學、美學、心理學這些必修課。由于學生們接受的教育幾乎全是科學與技術,他們根本不知道怎樣才能設計出易用、美觀的用戶界面,很多人甚至想都沒有想過。當他們畢業后真正參與軟件產品開發時,只好憑著個人的經驗與感覺設計軟件的用戶界面,這樣產生的界面往往得不到大眾用戶的認可。
    開發人員在設計用戶界面方面不僅存在先天的教育缺陷,更加糟糕的是還常常犯“錯位”的毛病,即他以為只要自己感覺用戶界面漂亮、使用起來方便,那么用戶也一定會滿意。俗話說“王婆賣瓜,自賣自夸”。當開發人員向用戶展示軟件時,常會得意地講:“這個軟件非常好用,我操作給你看,……是很好用吧!蠻漂亮的吧!”
    軟件是否易用、是否美觀要讓用戶來評價。如果用戶對界面很不滿意,開發人員不要有逆反心里“到哪里找來的笨蛋!”。其實不是用戶笨,是自己開發的軟件太笨了。當用戶真的感到軟件很好用時,一股溫暖的感覺油然而生,于是就用“界面友好”來表揚這個軟件。
    3. 用戶界面設計
    3.3 用戶界面設計原則(10個)
    用于提高易用性的界面設計原則有8個:
    用戶界面適合于軟件的功能
    容易理解
    風格一致
    及時反饋信息
    出錯處理
    適應各種用戶
    國際化
    個性化
    用于提高美觀程度的設計原則有:
    合理的布局
    和諧的色彩
    3. 用戶界面設計
    設計原則1:用戶界面適合于軟件的功能
    用戶界面的合適性是指界面與軟件功能相融洽的程度。軟件的功能需要通過用戶界面來展現。毫無疑問,用戶界面一定要適合于軟件的功能,這是最基本的要求。否則用戶無法通過這個界面來使用軟件,如果連用都不能用,“易用性”根本就無從談起。
    例如,對于一個三維建模軟件而言,如果用戶不能使用鼠標對模型進行旋轉、移動、縮放等操作,那么這個軟件的用戶界面就不適合于軟件的功能。如果不改進用戶界面的話,即使軟件的內核功能很強(如算法很先進),這個軟件也很難賣得出去。
    合適性差的界面無疑會混淆軟件意圖,致使用戶產生誤解。即使它不損害軟件功能與性能,也會使用戶產生不該有的情緒波動。
    “用戶界面適合于軟件的功能”是基本的設計原則,它提醒設計者不要片面追求界面外觀漂亮而導致華而不實。界面的合適性既提倡外美內秀,又強調恰如其分。
    設計原則2:容易理解。如果用戶很難理解界面的意圖,那么他使用起來肯定很費勁。所以“容易理解”是“容易使用”的前提條件。提高用戶界面可理解性的一些規則如下:
    界面中的所有元素(如菜單、工具條等)沒有錯誤,也不會讓人誤解。
    所有的界面元素應當提供充分而必要的提示,例如當鼠標移動到工具條上的某個圖標按鈕時,應當在該圖標旁邊出現功能提示。
    界面結構能夠清晰地反映工作流程,以便用戶按部就班地操作。
    對于復雜的用戶界面而言,最好提供界面“向導”,及時讓用戶知道自己在界面結構中所處的位置。例如對于基于Web的應用軟件,應該在界面上顯示“當前位置”,否則用戶很容易在眾多的頁面中迷失方向。
    3. 用戶界面設計
    設計原則3:風格一致
    軟件的用戶界面中,同類的界面元素應當有相同的視感和相同的操作方式。例如命令按鈕是最常見的界面元素,所有命令按鈕的形狀、色彩以及對鼠標的響應方式都是一致的
    同一類型軟件的用戶界面應當有一定程度的相似性。例如Microsoft公司的Office家族里有Word、Excel、PowerPoint、Outlook等軟件,這些軟件提供的“復制、剪切、粘貼”功能的操作方式都是相同的。
    對于用戶界面而言,風格一致的最大好處就是能夠減少用戶的記憶量、減少出錯幾率,并且迅速積累操作經驗。所以熟悉Word軟件的人基本上不用翻閱手冊就能使用PowerPoint軟件,可謂“無師自通”。
    通用軟件產品的界面設計很注重一致性。設計者必須密切注意在相同應用領域中最流行的軟件的界面,必須尊重用戶使用這些軟件的習慣。例如DOS和Windows下的軟件習慣于設置F1鍵為幫助熱鍵,如果某個設計者別出心裁地讓F1鍵成為軟件終止的熱鍵,那么在用戶渴望得到幫助而伸手擊F1鍵的一剎那,他的工作就此完蛋。相信這個用戶會被這另類的F1氣瘋了。
    目前流行的軟件開發工具如Visual C++、Visual Basic、Delphi、Java Builder、Power Builder等,都能夠快速地開發出非常相似的圖形用戶界面。在Internet/Intranet領域,瀏覽器幾乎成了唯一的客戶端軟件,因為Internet用戶希望用完全一致的瀏覽方式來完成千變萬化的任務。
    3. 用戶界面設計
    設計原則4:及時反饋信息
    用戶進行某項操作后,如果過了一會兒(幾秒鐘)用戶界面一點反應都沒有,這將使用戶感到迷茫和不安,因為他不知道是自己操作錯了還是軟件死機了。所以及時反饋信息很重要,至少要讓用戶心里有數,知道該任務處理得怎么樣了,有什么樣的結果。
    例如下載一個文件,界面上應當顯示“百分比”或相關數字來表示下載的進度,否則人們不知道要等待多少時間。如果某些事務處理不能提供進度等數據,那么至少要給出提示信息如“正在處理,請等待…”,最好是提供合適的動畫讓用戶明白軟件正在干活、沒有死機。
    設計原則5:出錯處理。用戶在使用軟件的過程中,不可避免地會出現一些錯誤的操作。在設計用戶界面時必須考慮出錯處理,目的是讓用戶不必為避免犯錯誤而提心吊膽、小心翼翼地操作。常見的錯誤處理方式有:
    提供對輸入數據進行校驗的功能。當用戶輸入錯誤的數據時,及時提醒用戶改正數據。
    對于在某些情況下不應該使用的菜單項和命令按鈕,將其“失效”(屏蔽)可以有效防止該項功能被錯誤地使用。例如:對于某些管理軟件,不同的用戶有不同的操作權限。如果低權限的用戶登錄到系統,那些只有高級權限用戶才能使用的功能應當被屏蔽(如變成“灰色”不可操作)。
    提供Undo功能,用以撤銷不期望的操作。
    執行破壞性的操作之前,應當獲得用戶的確認。例如用戶刪除一個文件時,應當彈出對話框:“真的要刪除該文件嗎”,當用戶確認后才真正刪除文件。
    3. 用戶界面設計
    設計原則6:適應各種用戶
    一個軟件產品可能有許多類型的用戶,例如有些用戶對計算機比較外行,有一些用戶可能是計算機的行家。在設計用戶界面必時應當盡可能多地了解用戶的需求和技能水平,努力使用戶在操作軟件的時候感覺不到差異和麻煩。為了達到這個目標,一般需要提供多種操作途徑以適應各種水平的用戶。
    例如使用Windows下的文件管理器,對于一個初學者來說,他愿意使用鼠標和菜單一步一步地操作;而對于技術專家而言,他也許更愿意使用熱鍵來獲取更高的效率。
    更了不起的是,一些優秀的軟件為患有疾病的人們提供了很好的用戶界面。例如全世界的計算機用戶中可能有成千上萬的人患有色盲或色弱,他們都是正常人,但是當他們面對花花綠綠的軟件時會一片茫然。因此通用的軟件如瀏覽器、字處理軟件等都要經過色盲人群的測試。設計者越為用戶著想,用戶就越喜歡這樣的軟件。
    設計原則7:國際化
    中國已經進入了WTO,軟件的國際化是大勢所趨。為了能夠更好地適應國內和國際市場,在設計用戶界面的時候應當充分考慮語言和文化的差異。盡可能使用標準的圖解方式和國際通行的語言,要求簡單易懂,易于翻譯,方便于不同母語的用戶。
    特別要留意下列易變的元素:字體、提示信息、在線幫助;貨幣、度量單位;數字、日期格式;人的名字、電話號碼、通信地址;圖標、標簽;聲音;閱讀順序或習慣;
    3. 用戶界面設計
    設計原則8:個性化
    用戶界面的“個性化”與“一致性”之間存在微妙的矛盾關系。對于一些非常注重安全性的商業軟件(如銀行軟件)而言,用戶界面的“一致性”要比“個性化”重要得多,因為一致的界面可以減少用戶出錯的幾率。例如,國內所有銀行的自動取款機的用戶界面都是非常相似的,誰也不會想著設計一些新花樣。
    而對于普通的應用軟件(尤其是娛樂領域的軟件)而言,有個性化的界面自然比泯然于眾的界面更具有吸引力。
    設計人員應當根據軟件的需求以及廣大用戶的喜好,在使用戶界面具備必要的“一致性”的前提下,突出該軟件的“個性”。不僅讓用戶使用起來方便,而且對軟件留下深刻的印象。
    設計原則9:合理的布局 
    首先,界面的布局應當符合邏輯,最好能夠與工作流程吻合。界面設計人員只有仔細地分析軟件的需求,才能提取對界面布局有價值的信息。
    其次,界面的布局應當整潔(整齊清爽)。界面元素應當在水平或者垂直方向對齊,行、列的間距保持一致。窗體的尺寸要合適,各種控件不能過分擁擠也不能過分寬松。要善于利用窗體和控件的空白,以及分割用的線條。
    3. 用戶界面設計
    設計原則10:和諧的色彩
    用戶界面是否美觀,主要取決于該界面的布局和色彩搭配。對于界面設計人員而言,實現“合理的布局”相對比較容易一些,因為絕大多數的界面元素的形狀已經標準化,而且界面元素的組合方式也有約定俗成的規矩可循。然而設計和諧的色彩太困難了,因為色彩的組合千變萬化,并且人們對顏色的喜好也極不相同。
    對于廣大軟件開發人員而言,雖然我們沒有必要讓普通軟件的界面漂亮到Windows XP這種程度,但是掌握一些界面色彩的設計原則無疑是非常有益的。
    (1)如果不是為了顯示真實感的圖形和圖像,那么應當限制一幀屏幕的色彩數目,因為人們在觀察屏幕的時候很難同時記住多種色彩。
    (2)應當根據對象的重要性來選擇顏色,重要的對象應當用醒目的色彩表示。
    (3)使用顏色的時候應當保持一致性,例如錯誤提示信息用紅色表示,正常信息用綠色表示,那么切勿篡用紅色和綠色。
    (4)在表達信息時,不要過分依賴顏色,因為有些用戶是色盲或色弱。
    3. 用戶界面設計
    3.4 用戶界面設計流程
    文檔模板略
    示例及細節設計規則見《軟件工程與項目管理解析》
    4. 數據庫設計
    4.1 概念
    首先要搞清楚容易混淆的兩個概念:“數據庫系統”和“應用軟件的數據庫”。
    數據庫系統是指數據庫廠商提供的數據庫服務器,目前著名的大型數據庫系統有Oracle、DB2、Informix、Sybase,中型數據庫系統如Microsoft SQL Server。
    而應用軟件的數據庫則是指開發者在數據庫系統中創建的庫,用于存儲應用軟件的數據。一般地,人們可以從上下文判斷“數據庫”究竟是指哪一個?
    簡而言之,數據庫是存儲和處理數據用的。數據庫設計的主要工作是:
    (1)設計數據庫的表(數據就存在表里面),表的結構就是數據的存儲結構。
    (2)對這些表中的數據進行操作,常見操作如查詢、插入、修改、刪除等。
    數據庫設計的難易程度取決于兩個要素:“數據關系的復雜程度”和“數據量的大小”。如果應用軟件只涉及幾張簡單的表,并且數據量特別小,那么設計這樣的數據庫就非常容易(例如設計一個班級的學生成績單數據庫)。但是你絕對不能盲目樂觀:以為所有的數據庫設計都是那么簡單。
    從前有個財主姓萬,他請了一個秀才教兒子寫字。 …
    軟件開發人員學習數據庫設計的特點是:入門很容易,但是成為高手非常難。大家千萬不要學萬公子寫字噢。
    4. 數據庫設計
    4.2 數據庫設計的主要困難與對策
    一、開發與平臺無關的數據庫應用程序
    目前國際上應用最廣泛的數據庫系統有Oracle、DB2、Informix、Sybase和SQL Server。這些數據庫系統之間的激烈競爭即有好處又有壞處。競爭的好處是使數據庫系統不斷發展和完善,并且避免價格壟斷。競爭的最大壞處是逼迫數據庫廠商不斷開發出獨特的功能以吸引更多的用戶,所以各個數據庫系統的獨特功能無法形成統一標準,導致用戶難以開發出與平臺無關的數據庫應用程序,因為用戶很難抵御數據庫系統獨特功能的誘惑。
    SQL是數據庫系統的標準查詢語言。可是數據庫廠商提供了太多超出SQL標準的特色功能,使人們陷入了進退兩難的境地:(1)如果你想使程序與數據庫平臺無關,那么只能使用SQL,放棄各個數據庫系統的獨特功能。(2)如果你超越SQL,使用了某個數據庫系統的獨特功能,那么這樣的程序就是與平臺相關的。
    類似問題也存在于操作系統、Web瀏覽器這些領域。理論上講,只有絕對壟斷才能形成絕對統一的標準,但是人們既希望打破壟斷又希望有統一的標準,這種矛盾無法徹底解決,只能折衷、妥協。
    如果你開發的是通用的數據庫應用軟件,不想讓應用軟件與特定的數據庫系統捆綁在一起,那么你就老老實實地用SQL語言寫程序。
    如果你開發的是行業專用的數據庫應用軟件,并且這個行業已經指定了數據庫系統(這種局部壟斷現象普遍存在),最近若干年都不會改變的話,那么你可以超越SQL使用該數據庫系統的獨特功能。 (例如公安部采用Oracle,銀行采用Informix)   
    4. 數據庫設計
    二、數據庫性能優化問題
    數據庫設計的主要挑戰是“高速處理大容量的數據”。如何優化數據庫的性能是設計人員經常面臨的問題。數據庫性能優化主要有兩種途徑:“優化表結構本身”和“優化數據庫的環境參數”。
    在表的物理設計階段,設計人員應當按照第三范式設計表結構(即規范化處理)。這樣做的好處是:表中沒有冗余數據,表結構很清晰,將來修改或者擴充非常方便。但是按第三范式設計也存在一些缺點:產生了許多表,每個表有相對較少的列,并且這些列必須使用“主健/外健”關聯起來,因此某個查詢操作可能會產生復雜的表鏈接,導致性能降低。
    反規范化處理是指對第三范式的表進行修改,通過合并一些表,或者在表中創建冗余的列,從而減少表鏈接操作代價,達到提高性能的目的。要注意的是反規范化處理存在很大的負面影響:管理冗余數據很麻煩,如果冗余數據不同步的話,那么會發生數據錯誤這種嚴重的問題。
    對表進行第三范式的規范化處理是第一重要的,而反規范化處理則需謹慎考慮、不宜過多使用。“規范化處理”以及“反規范化處理”不是自相矛盾之舉,而是性能優化的策略。
    除了優化表結構之外,優化數據庫的環境參數也能夠提高數據庫的性能。例如給服務器配置更快的CPU,增加內存。運行數據庫是非常消耗內存的,內存對數據庫性能影響比較大。由于現在市場上的內存條越來越便宜,所以為服務器配置足夠多的內存恐怕是成本最低、難度最低、見效最快的性能優化方法。
    能否有效地優化應用軟件數據庫的性能,主要取決于開發者對數據庫系統的熟悉程度以及開發經驗。
    4. 數據庫設計
    4.3 數據庫設計流程
    數據庫設計一般要經歷“邏輯設計—>物理設計->安全性設計->性能優化”等步驟,通常要迭代進行。
    《數據庫設計報告》的模板見 word 文檔。
    5. 模塊設計
    5.1 何為“模塊”與“模塊化”
    對于軟件而言,我們習慣從功能角度描述模塊。所以模塊泛指軟件系統的功能部件。在軟件的體系結構設計完成之際,我們就已經確定了所有模塊的功能,并且把模塊們安放在體系結構的恰當位置上。
    每個模塊都具有特定的、明確的功能(否則不能成為模塊)。人們在設計模塊時應當盡量使模塊的功能獨立,因為功能獨立的模塊可以降低開發、測試、維護的代價。但是功能獨立并不意味著模塊是絕對孤立的。所有的模塊應當能夠被集成為一個系統,所以模塊之間必定要交流信息、相互配合。
    比如手和腳是兩個“功能獨立”的模塊。沒有腳時,手照樣能干活。沒有手時,腳仍可以走路。但如果想讓人跑得快,那么邁左腳時一定要伸右臂甩左臂,邁右腳時則要伸左臂甩右臂。所以在設計模塊時不僅要考慮“這個模塊應當有什么樣的功能”,還要考慮“這個模塊應該怎樣與其它模塊交流信息”。
    “模塊化”(Modularization)是指:將系統分解為一系列功能模塊,然后逐一實現這些模塊,最后把所有的模塊集成為原來的系統。這樣做的好處是能夠大大降低系統的開發難度。
    是否將系統分解得非常細、得到的功能模塊越多越好呢?不是的。雖然這樣做可以使實現模塊的代價更低,但是把功能模塊集成為原來系統的代價卻增大了很多,得不償失,所以一個系統的模塊數量不能過多也不能過少。那么多少算是恰如其分呢?不知道,要靠設計師的判斷。  
    5. 模塊設計
    5.2 模塊設計原則
    信息隱藏
    在一節不和諧的課堂里,老師嘆氣道:“要是坐在后排聊天的同學能象中間打牌的同學那么安靜,就不會影響到前排睡覺的同學。”
    這個故事告訴我們,如果不想讓壞事傳播開來,就應該把壞事隱藏起來,家丑不可外揚就是這個道理。為了盡量避免某個模塊的行為干擾同一系統中的其它模塊,在設計模塊時就要注意信息隱藏。應該讓模塊僅僅公開必須要讓外界知道的東西,而隱藏其它一切內容。
    接口設計是模塊設計的核心工作之一,體現了信息隱藏這一原則。接口是模塊的外部特征,應當公開;而數據結構、算法、實現體等則是模塊的內部特征,應當隱藏。
    高內聚
    內聚(Cohesion)是一個模塊內部各成分之間相關聯程度的度量。文獻[Pressman99,p249] 歸納了7種內聚類型,繪制了模塊的“內聚譜系”,內聚程度從低到高大致劃分為低端、中段和高端。模塊設計者沒有必要確定內聚的精確級別,重要的是盡量爭取高內聚,避免低內聚。 
    低耦合
    耦合(Coupling)是模塊之間依賴程度的度量。內聚和耦合是密切相關的,與其它模塊存在強耦合的模塊通常意味著弱內聚,而強內聚的模塊通常意味著與其它模塊之間存在弱耦合。
    模塊設計應當爭取“高內聚、低耦合”,而避免“低內聚、高耦合”。
    5. 模塊設計
    5.3 模塊設計流程
    模塊設計的核心工作是“接口設計”和“數據結構與算法設計”。前者是模塊的外部特征,應當公開,而后者是模塊的內部特征,應當隱藏。
    模塊設計屬于系統設計的詳細設計階段,那么模塊設計應當詳細到什么程度?
    由于現代的軟件開發工具越來越先進,模塊的詳細設計和編程可以很好地融合一起,而且效率相當高,有些開發工具甚至具有代碼自動生成的功能。所以模塊設計究竟要詳細到什么地步,應當視問題復雜性以及所采用的開發工具而定。
    一般地,只要確定了每個模塊的主要接口、數據結構與算法,能夠清楚地指導模塊編程即可。總之,不必花太多時間用于設計模塊的細節。
    模塊設計報告的模板見word文檔。
    6. 數據結構與算法設計
    6.1 學生的掌握情況
    數學系和物理系的學生通常對科學計算算法比較精通,但是對數據結構知之甚少。盡管他們能夠編寫出諸如解微分方程這等復雜的算法,但是不懂得有效地組織程序,甚至連指針、鏈表都不會用。程序之中充滿了數組和變量,冗長無比。
    計算機系的學生熟悉常用的數據結構與算法,編程技能高超。但是很多學生沒有學過“科學計算算法”,面對具有數學難度的軟件,根本無從下手。我曾經多次在軟件工程培訓課上測試這樣的小題目:請編寫浮點變量x與零值比較的if語句,竟然有50%以上的程序員這樣寫
        if(x==0)
          DoSomething();
        他們根本沒有意識到浮點變量有精度限制,x不能用“==”或者“!=”直接與數值比較。很多程序員在讀書的時候沒有學過數值計算,在工作的時候連基本的誤差處理都不會。
    6.2 觀點
    學會設計數據結構與算法,可以讓我們編寫出高效率的程序。也許有人要問,在計算機速度日新月異的今天,為什么還需要高效率的程序?因為我們的雄心與能力是一起增長的,技術進步最快也快不過人們欲望的增長。計算速度和存儲容量上的革新僅僅提供了處理更復雜問題的有效工具,所以高效率的程序永遠不會過時。
    設計高效率的程序是基于良好的數據結構與算法,而不是基于編程小技巧。因此,大學里計算機科學(或工程)系都把“數據結構與算法設計”作為本科生的必修課程。
    6. 數據結構與算法設計
    6.3 設計理念
    每一種數據結構與算法都有其時間、空間的開銷和收益。當面臨一個新的設計問題時,設計者要徹底地掌握怎樣權衡時空開銷和算法有效性的方法。這就需要懂得算法分析的原理,而且還需要了解所使用的物理介質的特性(例如數據存儲在磁盤上與存儲在內存中,就有不同的考慮)。
    與開銷和收益有關的是時間——空間的權衡。通常可以用更大的時間開銷來換取空間的收益,反之亦然。時間——空間的權衡普遍地存在于軟件開發的各個階段中。
    程序員應該充分地了解一些常用的數據結構與算法,避免不必要的重復設計工作。
    數據結構與算法為應用服務。我們必須先了解應用的需求,再尋找或設計與實際應用相匹配的數據結構。
    6.4 一般流程
    數據結構與算法有全局和局部之分,先設計全局的,后設計局部的(通常在模塊設計時進行)。
    根據問題的特征,先查找已經存在的數據結構與算法,挑選最合適的(并不一定是最先進的)。如果不存在現成的,那么自己設計。
    設計并且編寫代碼之后要進行測試,如果不滿足性能要求,那么要進一步優化數據結構和算法。
     

    相關PPT

    工業設計史第十一章ppt:這是一個關于工業設計史第十一章ppt,主要介紹了走向多元化、理性主義與"無名性"設計、新現代主義與高技術風格、波普風格、綠色設計等內容。
    第四章-高層平面設計ppt:這是第四章-高層平面設計ppt,包括了高層辦公建筑標準層平面,高層旅館建筑標準層平面,高層住宅建筑標準層平面,高層建筑裙房和地下車庫設計等內容,歡迎點擊下載。
    emc設計ppt:這是emc設計ppt,包括了開關電源系統要求的確定,開關電源方案的選擇,開關電源原理圖設計,開關電源EMC設計,開關電源PCB設計,開關電源性能測試等內容,歡迎點擊下載。
    《軟件系統設計方案ppt模板》是由用戶孤稚于2017-03-22上傳,屬于課件PPT。
    顯示全部

    相關PPT

    熱門推薦

    熱門下載

    青青青伊人