1. 程式人生 > >程式設計師教程-5章-軟體工程基礎知識 軟體設計之UML—UML中的六大關係

程式設計師教程-5章-軟體工程基礎知識 軟體設計之UML—UML中的六大關係

  先給出目錄結構

  5.1 軟體工程概述

    5.1.1 軟體生存週期

      1 問題定義

      2 可行性分析

      3 需求分析

      4 總體設計

      5 詳細設計

      6 編碼和單元測試

      7 綜合測試

      8 維護

    5.1.2 軟體生存週期模型

      1 瀑布模型

      2 增量模型

      3 演化模型

      4 螺旋模型

      5 噴泉模型

      6 統一過程

      7 敏捷方法

    5.1.3 軟體過程評估

      1 軟體能力成熟度模型

      2 能力成熟度模型整合

    5.1.4 軟體工具

      1 軟體開發工具

      2 軟體維護工具

      3 軟體管理和軟體支援工具

    5.1.5 軟體開發環境

  5.2 軟體需求分析

    5.2.1 軟體需求的定義

    5.2.2 軟體需求分析的基本任務

    5.2.3 需求建模

  5.3 軟體設計

    5.3.1 軟體設計的基本任務

      1 軟體概要設計的基本任務

      2 軟體詳細設計的基本任務

    5.3.2 軟體設計原則

      1 抽象

      2 模組化

      3 資訊隱蔽

      4 模組獨立

  5.4 結構化分析與設計方法

    5.4.1 結構化分析方法

      1 結構化分析的過程

      2 資料流圖

      3 資料字典

      4 加工邏輯的描述

    5.4.2 結構化設計方法

      1 結構圖

      2 資料流圖到軟體體系結構的對映

      3 資料流圖對映到結構圖的步驟

    5.4.3 結構化程式設計方法

  5.5 面向物件分析與設計方法

    5.5.1 面向物件的基本概念

      1 物件

      2 訊息

      3 類

      4 繼承

      5 多型

      6 動態繫結

      7 面向物件原則

    5.5.2 面向物件分析與設計

      1 面向物件分析

      2 面向物件設計

      3 面向物件程式設計

    5.5.3 UML概述

      1 事務

      2 關係

      3 UML中的圖

    5.5.4 設計模式

      1 建立型設計模式

      2 結構型設計模式

      3 行為型設計模式

  5.6 軟體測試與執行

    5.6.1 軟體測試的目的及原則

      1 軟體測試的目的

      2 軟體測試的原則

      3 測試過程

      4 測試工具

    5.6.2 軟體測試方法

      1 靜態測試

      2 動態測試

      3 測試用例的設計

    5.6.3 軟體測試過程

    5.6.4 軟體測試設計和管理

    5.6.5 軟體除錯

    5.6.6 軟體執行與維護

      1 系統執行概述

      2 系統維護概述

      3 軟體的可維護性

  5.7 軟體專案管理

    5.7.1 管理範圍

    5.7.2 成本估算

    5.7.3 風險分析

    5.7.4 進度管理

  5.8 軟體質量與軟體質量保證

    5.8.1 軟體質量特性

    5.8.2 軟體質量保證

  軟體是計算機系統中的重要組成部分,它包括程式、資料及相關文件。軟體工程是指應用電腦科學、數學及管理科學等原理,以工程化的原則和方法來解決軟體問題的工程,以目的是提高軟體生產率、提高軟體質量、降低軟體成本。

  5.1 軟體工程概述:1968年在德國提出以克服軟體危機

    5.1.1 軟體生存週期

    同任何事務一樣,一個軟體產品或軟體系統也要經歷孕育、誕生、成長、成熟、衰亡的許多階段,一般稱為軟體生存週期。

    1、問題定義,2、可行性分析,3、需求分析,4、總體設計,5、詳細設計,6、編碼和單元測試,7、綜合測試,8、維護

    5.1.2 軟體生存週期模型

      1 瀑布模型:將軟體生存週期各個活動規定為依線性順序連線的若干階段的模型。

      

      2 增量模型:增量模型融合了瀑布模型的基本成分和原型實現的迭代特徵,它假設可以將需求分段為一系列增量產品,每一增量可以分別地開發。

      

      3 演化模型:針對事先不能完整定義需求的軟體開發,是在快速開發一個原型的基礎上,根據使用者在使用原型的過程中提出的意見和建議對原型進行改進,獲得原型的新版本。

      4 螺旋模型:對於複雜的大型軟體,開發一個原型往往達不到要求。螺旋模型將瀑布模型和演化模型結合起來,加入了兩種模型均忽略的風險分析,彌補了這兩種模型的不足。

      

      5 噴泉模型:是一種以使用者需求為動力,以物件作為驅動的模型,適合於面向物件的開發方法。

      

      6 統一過程:將整個軟體開發專案劃分為許多個小的“袖珍專案”,每個“袖珍專案”都包含正常軟體專案的所有元素:計劃、分析和設計、構造、整合和測試,以及內部和外部發布。

      統一過程定義了5個階段及其製品

      1)起始階段

      2)精化階段

      3)構建階段

      4)移交階段

      5)生產階段

      7 敏捷方法:總體目標是通過“儘可能早地、持續地對有價值的軟體的交付”使客戶滿意。通過在軟體開發過程中加入靈活性,敏捷方法使使用者能夠在開發週期的後期增加或改變需求。

      敏捷過程的方法:極限程式設計(XP),水晶法(Crystal),並列爭求法(Scrum),自適應軟體開發(ASD)

    5.1.3 軟體過程評估

      1 軟體能力成熟度模型(CMM):目的是提供一種評價軟體承接方能力的方法,同時它可用於幫助軟體組織改進其軟體過程。

      5個成熟度級別:(1)初始級,(2)可重複級,(3)已定義級,(4)已管理級,(5)優化級

      2 能力成熟度模型整合(CMMI)

    5.1.4 軟體工具:用來輔助軟體開發、執行、維護、管理和支援等過程中的活動的軟體稱為軟體工具

      1 軟體開發工具:有需求分析工具,設計工具,概要設計工具,編碼與排錯工具,測試工具

      2 軟體維護工具:版本控制工具,文件分析工具,開發資訊庫工具,逆向工程工具,再工程工具

      3 軟體管理和軟體支援工具:專案管理工具,配置管理工具,軟體評價工具

    5.1.5 軟體開發環境:是支援軟體產品開發的軟體系統。它由軟體工具集和環境整合機制構成,前者用來支援軟體開發的相關過程、活動和任務,後者為工具整合和軟體開發、維護和管理提供統一的支援,它通常包括資料整合、控制整合和介面整合。

  5.2 軟體需求分析

  在需求分析階段,通過開發人員與使用者之間的廣泛交流,不斷澄清一些模糊的概念,最終形成一個完整的、清晰的、一致的需求說明。

    5.2.1 軟體需求的定義:(1)功能需求,(2)非功能需求,指產品必須具備的屬性或品質,如可靠性、效能、響能時間、容錯性和擴充套件性(3)設計約束,也稱為限制條件、補充規約,這通常是對解決方案的一些約束說明

    5.2.2 軟體需求分析的基本任務

    需求分析主要是確定待開發軟體的功能、效能、資料和介面等要求。

    (1)確定軟體系統的綜合要求

    (2)分析軟體系統的資料要求

    (3)匯出系統的邏輯模型

    (4)修正專案的開發計劃

    (5)如有必要,可開發一個原型系統

    在此需要強調的是,需求分析階段主要解決“做什麼”的問題,而“怎麼做”則是由設計階段來完成

    5.2.3 需求建模:通常情況下,分析人員用圖形符號來建立模型,將資訊、處理、系統行為和其他相關特徵描述為各種可識別的符號,同時與符號圖形相配套,並輔助於文字描述,可使用自然語言或某種特殊的專門用於描述需求的語言來提供輔助的資訊描述。

    常用的需求分析方法:面向資料流的結構化分析方法(SA),面向資料結構的分析方法,面向物件的分析方法(OOA)

  5.3 軟體設計

   常用的設計方法有以下兩種:面向資料流的結構化設計方法,面向物件的設計方法

    5.3.1 軟體設計的基本任務

      1 軟體概要設計的基本任務

      1)設計軟體系統總體結構,2)資料結構及資料庫設計,3)編寫概要設計文件,4)評審

      2 軟體詳細設計的基本任務

      (1)對每個模組進行詳細的演算法設計

      (2)對模組內的資料結構進行設計

      (3)對資料庫進行物理設計

      (4)其他設計:程式碼設計,輸入輸出設計,使用者介面設計

      (5)編寫詳細設計說明書

      (6)評審

    5.3.2 軟體設計原則

      1 抽象:抽象是在軟體設計的規模逐漸增大的情況下,控制複雜性的基本策略。主要手段是過程抽象(功能抽象)和資料抽象

      2 模組化:模組是可組合、可分解和可更換的單元模組化是指解決一個複雜問題時自頂向下逐層把軟體系統劃分成若干模組的過程

      (1)劃分模組時,儘量做到高內聚、低耦合

      (2)一個模組的作用範圍應在其控制範圍內

      (3)軟體結構的深度、寬度、扇入和扇出應適當

      (4)模組的大小要適中

      3 資訊隱蔽:指在設計和確定模組時,使得一個模組內包含的資訊對於不需要這些資訊的其他模組來說,是不能訪問的

      4 模組獨立:指模組只完成系統要求的獨立的子功能,並且與其他模組的介面簡單,符合資訊隱蔽和資訊區域性化原則,模組間關聯和依賴程度儘可能小。

      (1)內聚:內聚性由低到高:偶然內聚(巧合內聚),邏輯內聚,時間內聚,過程內聚,通訊內聚,順序內聚,功能內聚

      (2)耦合:耦合性由低到高:無直接耦合,資料耦合,標記耦合,控制耦合,外部耦合,公共耦合,內容耦合

  5.4 結構化分析與設計方法

  是面向資料流的傳統軟體開發方法,以資料流為中心構建軟體的分析模型和設計模型。結構化分析,結構化設計,結構化程式設計構成了完整的結構化方法

    5.4.1 結構化分析方法:基本思想是將系統開發看成工程專案,採用“自頂向下,逐層分解”的開發策略

      結構化分析的結果由以下幾部分組成:

    (1)一套分層的資料流圖

    (2)一本資料字典

    (3)一組小說明(也稱加工邏輯)

      1 結構化分析的過程:略

      2  資料流圖(Data Flow Diagram DFD)是結構化方法中用於表示系統邏輯模型的一種工具,描述系統的輸入資料流如何經過一系列的加工,逐步變換成系統的輸出資料流。實際是反映系統的某種功能或子功能

      3 資料字典:資料字典用來定義資料流圖中各個成分的具體含義的

      4 加工邏輯:也稱小說明,用以下3種工具描述

      (1)結構化語言(2)判定表(3)判定樹

    5.4.2 結構化設計方法:結構化設計是將結構化分析得到的資料流圖對映成軟體體系結構的一種設計方法,強調模組化、自頂向下逐步求精、資訊隱蔽、高內聚、低耦合。在結構化方法中,軟體設計分為概要設計和詳細設計兩個步驟。

      1 結構圖:描述軟體系統的體系結構,指出一個軟體系統由哪些模組組成,以及模組之間的呼叫關係。基本成分有模組、呼叫和資料。

      結構圖的形態特徵:深度,寬度,扇出,扇入

      2 資料流圖到軟體體系結構的對映

      在需求分析階段,用結構化分析方法產生了資料流圖。面向資料流的設計能方便地將DFD轉換成軟體的體系結構(結構圖)。

      DFD的資訊流大體上可以分為兩種型別:一種是變換流,一種是事務流

      3 資料流圖對映到結構圖的步驟:略

    5.4.3 結構化程式設計方法

    基本要點:(1)自頂向下、逐步求精(2)使用3種基本控制結構構造程式

  5.5 面向物件分析與設計方法

  面向物件方法以客觀世界的物件為中心,採用符合人們思維方式的分析和設計思想,分析和設計的結果與客觀世界的實際情況比較接近,容易被人們接受。

    5.5.1 面向物件的基本概念

      1 物件 2 訊息 3 類 4 繼承 5 多型 6 動態繫結 7 面向物件的原則

    5.5.2 面向物件分析與設計

      1 面向物件分析:略

      2 面向物件設計:略

      3 面向物件程式設計:略

    5.5.3 UML概述

    統一建模語言(Unified Modeling Language,UML):由3個要素構成:UML基本構造塊,支配這些構造塊如何放置在一起的規則和運用於整個語言的一些公共機制

    UML詞彙表包含3種構造塊:事物、關係和圖。事物是對模型中最具有代表性的成分的抽象;關係把事物結合在一起;圖聚集了相關的事物

      1 事務:UML中有4種事物:結構事物,行為事物,分組事物和註釋事物

      2 關係:UML中有4種關係:依賴,關聯,泛化和實現(其實有依賴,關聯,聚集,組合,泛化(繼承),實現:軟體設計之UML—UML中的六大關係

      3 UML中的圖:圖是一組元素的圖形表示,大多數情況下把圖畫成頂點(代表事物)和弧(代表關係)的連通圖。UML2.0提供了13種圖,分別是類圖、物件圖、用例圖、序列圖、通訊圖、狀態圖、活動圖、構件圖、部署圖、組合結構圖、包圖、互動概覽圖和計時圖。序列圖、通訊圖、互動概覽圖和計時圖均被稱為互動圖。

    5.5.4 設計模式:核心在於提供了相關問題的解決方案

    設計模式一般有如下4個要素:模式名稱,問題,解決方案,效果

      1 建立型設計模式:與物件的建立有關,抽象了例項化過程,它們幫助一個系統獨立於如何建立、組合和表示它的那些物件。一個類建立型模式例用繼承改變被例項化的類,而一個物件建立型模式將例項化委託給另一個物件

      2 結構型設計模式:結構型模式處理類或物件的組合,涉及如何組合類和物件以獲得更大的結構。結構型類模式採用繼承機制來組合介面或實現。

      3 行為型設計模式:行為模式對類或物件怎樣互動和怎樣分配職責進行描述,涉及演算法和物件間職責的分配。

  5.6 軟體測試與執行

    5.6.1 軟體測試的目的及原則

      1 軟體測試的目的:測試的目的就是希望以最少的人力和時間發現潛在的各種錯誤和缺陷。

      2 軟體測試的原則:略

      3 測試過程:(1)擬定測試計劃(2)編制測試大綱(3)根據測試大綱設計和生成測試用例(4)實施測試(5)生成測試報告

      4 測試工具:略

    5.6.2 軟體測試方法

      1 靜態測試:靜態測試是指被測試程式不在機器上執行,而是採用人工檢測和計算機輔助靜態分析的手段對程式進行檢測

      2 動態測試:動態測試是指通過執行程式發現錯誤。

      3 測試用例的設計:測試用例由測試輸入資料和與之對應的預期輸出結果組成。在設計測試用例時,應當包括合理的輸入條件和不合理的輸入條件

      1)用黑盒法設計測試用例

      黑盒測試也稱為功能測試。這種方法將軟體看成黑盒子,在完全不考慮軟體的內部結構和特性的情況下,測試軟體的外部特性

      2)用白盒法設計測試用例

      白盒測試也稱為結構測試,這種方法將軟體看成透明的白盒。根據程式的內部結構和邏輯來設計測試用例,對程式的路徑和過程進行測試,檢查是否滿足設計的需要

    5.6.3 軟體測試過程

    軟體測試實際上分成4步進行:(1)單元測試(2)整合測試(3)確認測試(4)系統測試:常見的系統測試主要有恢復測試、安全性測試、強度測試、效能測試、可靠性測試和安裝測試

    5.6.4 軟體測試設計與管理:軟體測試活動大致可以分為測試計劃、測試設計、測試執行和測試總結

    5.6.5 軟體除錯:除錯的任務就是根據測試時所發現的錯誤,找出原因和具體的位置,進行改正。(1)試探法(2)回溯法(3)對分查詢法(4)歸納法(5)演繹法

    5.6.6 軟體執行與維護

      1 系統執行概述:當系統開發完成並交付到實際生產環境中使用時,就進入執行。系統執行包括系統的日常操作、維護等

      2 系統維護概述:系統維護主要是指根據需求變化或硬體環境的變化對已交付並投入執行的系統進行部分或全部的修改。

      1)軟體維護的型別

      根據目的的不同:正確性維護,適應性維護,完善性維護,預防性維護

      根據內容的不同:程式維護,資料維護,程式碼維護,裝置維護

      2)軟體維護的副作用:編碼副作用,資料副作用,文件副作用

      3)軟體維護技術:面向維護的技術和維護支援的技術

  5.7 軟體專案管理

  要考慮軟體開發的工作範圍,花費的工作量(成本),可能遇到的風險,進度的安排,要實現的任務,經歷的里程碑以及需要的資源(人、硬/軟體)

    5.7.1 管理範圍:有效的專案管理集中於4P,即人員(People),產品(Product),過程(Process)和專案(Project)

    5.7.2 成本估算:主要靠分解和類推的手段進行。常見的分解技術有基於問題的估算,基於程式碼行估算,基於功能點的估算,基於過程的估算,基於用例的估算

    基本的成本估算方法有如下幾種:

    (1)自頂向下估算方法(2)自底向上估算方法(3)差別估算方法

    5.7.3 風險分析:關注3個方面,一是關心未來,二是關心變化,三是必須解決需要做出選擇的問題。

    風險分析實際上是貫穿軟體工程中的一系列風險管理步驟,其中包括風險識別、風險估計、風險管理策略、風險解決和風險監控

    5.7.4 進度管理:進度安排包括把一個專案的工作分解為若干個獨立的活動,並描述這些活動之間的依賴關係,估算完成這些活動所需的工作量,分配人力和其他資源,制定進度時序。

    (1)Gantt圖

    (2)PERT圖

    

    

  5.8 軟體質量與軟體質量保證:軟體質量是指反映軟體系統或軟體產品規定或隱含需求的能力的特徵和特性全體

  1)ISO/IEC 9126軟體質量模型

    2)Mc Call軟體質量模型

 

    5.8.2 軟體質量保證

    軟體質量保證是指為保證軟體系統或軟體產品充分滿足使用者要求的質量而進行的有計劃、有組織的活動,其目的是生產高質量的軟體。強調3個要點:滿足使用者規定的需求,遵循規定標準所定義的一系列開發準則,滿足某些隱含的需求