軟體體系結構1~5章知識點整理

2020-08-13 11:05:17

緒論

案例一:聖·瑪麗亞大教堂
案例二:瑞典瓦薩戰艦
由建築體系架構——>軟體體系結構。
總體的系統結構設計比計算演算法和數據結構更爲重要。

1.軟體體系結構發展史
高階語言 程序導向開發 物件導向開發 面向服務開發 雲和移動服務開發 智慧化軟件開發。

無體系結構——>概念和理論體系形成——>理論完善且普及應用
體系結構出現:1968年北大西洋公約組織(NATO)會議上第一次出現詞語「Software Architecture」(軟體體系結構/軟體架構)。

概念體系和理論體系形成:軟體體系結構定義逐漸明確,相關書籍出版。

理論完善與普及應用:1999年,1st IFIP軟體架構會議召開;Markup架構描述語言提出,支援廣泛的模型架構共用;軟體產品線被提出,引起了大量大型企業的關注;IEEE 1471—2000發佈,爲軟體架構普及定製標準化規範。

2.軟體體系結構定義
軟體體系結構=元件+連線件+約束
元件:具有某種功能的可重用的軟體模組單元,表示了系統中重要的計算單元和數據儲存。
連線件:表示元件之間的互動。簡單連線件有:管道,過程呼叫,事件廣播等;複雜連線件有:客戶—伺服器通訊協定,數據庫和應用之間SQL連線。
約束:表示元件和連線件的拓撲邏輯和約束。

3.軟體體系結構的研究活動
軟體體系結構要解決的問題,軟體體系結構研究的內容,自適應軟體體系結構。

4.軟體體系結構的作用
軟體生命週期中的作用

第一章 軟體工程和軟體設計概述

1.1軟體的本質
軟體是一系列按照特定順序組織的計算機數據和指令的集合。
軟體不是有形的物理產品,而是人類思維的產物。
軟體不是被製造出來的 ,而是思考出來的。
軟體的限制—>軟體的複雜性

軟體特質和分類:

  • 軟體是設計開發的
  • 軟體不會磨損和老化
  • 隨着構建構造模式的發展,軟體需要根據客戶需要定製
  • 不斷變更是軟體退化的根本原因

軟體分類:

  • 系統軟體
  • 應用軟體
  • 嵌入式軟體
  • 科學和工程計算軟體產品線軟體
  • 產品線軟體
  • 人工智慧軟體
  • Web應用軟體

2.軟體工程
2.1軟體工程是:(1)將系統化的,規範化的,可量化的方法應用於軟件開發、執行和維護,即將工程化方法應用於軟體。(2)對(1)中所述的方法進行研究。

2.2軟體流程和軟體工程實踐
軟體流程:是工作產品構建時所執行的一系列活動、動作、任務的集合。

  • 活動:實現寬泛的目標。
  • 動作:包含了主要工作產品生產過程中的一系列任務。
  • 任務:關注小而明確的目標,能夠產生實際產品。

2.一個通用的軟體工程過程包含一下5個內容活動:溝通,策劃,建模,構建,部 署。
3.軟體工程和軟體流程實踐——七條原則:存在價值,保持簡簡潔,保持願景,關 注 使用者,面向未來,計劃複用,認真思考。

2.3網路環境帶來的影響
(1)計算機軟體 = 程式 + 數據結構 + 文件
(2)計算機軟體 = 滿足需求的資訊 + 服務工具

3.軟體設計
3.1軟體工程過程中的設計
軟體設計在軟體工程過程中處於核心技術。

  • 分析模型
  • 數據/類設計
  • 體系結構設計
  • 介面設計
  • 構建級設計

3.2軟體設計原則

  • 抽象(過程抽象/數據抽象)
  • 體系結構
  • 模式
  • 模組化
  • 資訊隱蔽
  • 功能獨立(內聚/耦合)
  • 求精
  • 重構
  • 設計類(使用者介面類/業務域類/過程類/持久類/系統類)

軟體設計原則——設計類:完整性和充分性,原始性,高內聚性,低耦合性。
體系結構與設計:體系結構是系統設計的一部分,突出了某些細節,並通過抽象省略掉一些細節。所以,體系結構是設計的一個子集。

3.3軟體體系結構的內容——體系結構的研究領域
(1)通過提供一種新的體系結構描述語言解決體系結構描述問題
(2)體系結構領域知識的總結性研究
(3)針對特定領域的框架的研究
(4)軟體體系結構形式化支援的研究

3.4軟體體系結構設計方法:是指通過一系列的設計活動,獲得滿足系統功能性需求,並符合一定非功能性需求約束的軟體體系結構模型。
軟體體系結構設計方法分類:
(1)FR驅動的軟體體系結構設計
(2)NFR驅動的軟體體系結構設計
(3)集合FR和NFR的方法

3.5軟體體系結構設計經驗總結與複用
軟體體系結構所採用的主要手段:
(1)體系結構風格和模式

  • 非形式化描述模型,並將其引入到體系結構設計過程中。
  • 提供形式化規約,精確的說明風格的特徵,並用於高層性質驗證

(2)領域特定的軟體體系結構和軟體產品線

第二章 軟體模型和描述

2.1什麼是軟體模型

  • 模型:一般指客觀世界中事物存在的一種抽象,事物可以是具體的,也可以是抽象的。
  • 模型表達方法:用數學語言表達的模型稱爲數學模型(形式化最高級別);使用自然語言或圖形語言表達的模型是定性的描述(形式化級別較低)。
  • 軟體模型:軟體的一種抽象,一般通過非數學模型來描述。

軟體模型可以看作是一種元模型。
軟體模型作爲軟體組成的最基本單元的抽象,既反映軟體體系結構構建的核心思想,也奠定了軟體體系結構構建的基礎。

2.2軟體模型的發展歷程
功能模型—>物件模型—>元件模型—>設定型元件模型—>服務模型—>抽象模型

2.3軟體模型解析
1.功能模型
功能模型也可以成爲過程模型或函數模型,它是模型化軟體構件方法的第一基本模型。
功能模型的基本原理:將一個系統分解爲若幹個基本功能模組,基本功能模組之間可以根據需求進行呼叫。
基本功能模型的抽象和耦合
功能模型的核心
遞回思想的具體實現

2.物件模型
物件模型:以物件爲核心,通過物件進行數據組織的抽象並實現數據組織和數據處理的統一,並在此基礎上建立物件導向的軟體構造方法。
物件模型的基本原理:將一個系統分解爲若幹個物件,物件之間可以通過發送訊息按需求進行共同作業。
數據型別的抽象:允許使用者按需根據定義自己的數據型別:

  • 物件模型的核心
  • 同構(或同族)
  • 物件關係的定義:體現在繼承和多型兩方面

3.元件模型
3.1元件模型:在物件模型的基礎之上,強調異族物件關係以及獨立性問題。
異族物件關係:元件內部完成元件功能的物件可以是同族的,也可以是異族的。
獨立性:元件建立在二進制基礎之上並獨立封裝,可以獨立部署。

3.2元件模型以介面爲核心,通過介面抽象元件行爲,並在此基礎上建立面向介面 的軟體構造方法。介面:值物件動態行爲的集合,支援繼承機制 機製。元件:能完成特 定功能並能獨立部署的軟體合成單元,一個元件一般具有一個多個介面,每個 介面的功能由一個或多個方法實現。

3.3元件物件模型是基於Windows平臺的一套元件物件介面標準,由一組構造規範 和元件物件庫組成。

3.4一般的物件由數據成員和作用在其上的方法組成,而元件物件與一般的物件雖 有相似性,但也有較大不同。元件物件不使用方法而是介面描述自身。

3.5介面被定義爲「在物件上實現的一組語意上相關的功能」,其實質是一組由元件 實現的提供給客戶使用的函數,是一個包含函數指針陣列的記憶體結構,陣列元素是 一個由元件實現的函數地址。

3.6一個元件物件實現的介面數量沒有限制。
3.7框架:已實現部分功能的某類程式結構的實現。

3.8框架分類:(1)水平型:一般面向通用類程式的構造,與特定的應用領域無關。 (2)垂直型:一般面向特定應用領域,它抽象和封裝了該應用領域程式的基本構 造和共性基本元件。(3)符合文件型:是一種比較通用的框架,它將一個程式抽象 爲一個文件,將構造程式的各個元件看作是文件中不同的的獨立元素,這些獨立元 素通過事件訊息相互聯繫。

4.設定型元件模型
設定型元件模型又稱爲伺服器元件模型,它專門針對應用伺服器,定義其基於元件 的基礎結構模型。
設定型元件模型的基本原理:將應用業務邏輯與系統基礎服務兩者解耦,由系統基 礎服務構成一個服務容器,自動隱式的爲各種業務邏輯按需統一提供相應的基礎服 務。應用業務邏輯可以按需提出不同的基礎服務要求,即他是可設定的。

5.服務模型
服務:指一個封裝着高階業務概念、實現公共需求功能、可遠端存取的獨立應用程 序模組。
服務一般由數據、業務邏輯、介面及服務描述構成。
服務模型的基本原理:明確服務提供者和服務使用者,並通過服務中介實現兩者的 耦合。
服務模型的標準主要是Web Services.

6.抽象模型
基於歸納思維策略的可恢復程式語句元件模型
抽象模型
基於演繹思維策略的元模型
兩者都是面向抽象層的應用業務邏輯的描述,而不關注描述的具體實現平臺和環境,具有完整的技術獨立性和應用發展的適應性。

2.4深入認識軟體模型
2.4.1軟體體系結構的描述

  • 軟體體系結構的描述指的是通過某種語言表達軟體體系結構。
  • 描述的目的是爲了實現對軟體體系結構的認識、理解和交流。
  • 進而,基於描述,可以對軟件系統的各種行爲和特徵進行各種理論分析和模擬模擬, 以及實現軟件系統程式碼的自動生成。

2.4.2軟體體系結構的描述—非形式化描述
典型代表——UML(一種通用的視覺化建模語言)
非形式化描述的缺陷:

  • 語意含糊
  • 由語意含糊引起的溝通障礙
  • 無法實現系統驗證

不適於描述體系結構行爲
2.4.3軟體體系結構的描述—形式化描述
用於軟體和硬體系統的說明、開發和驗證的數學化方法。
理論基礎是數學化理論。

形式化的特點:

  • 可以用於系統描述,並且可以在不同層次上進行描述
  • 在體系結構行爲描述上更勝一籌
  • 使得系統驗證變得可行

2.4.4軟體體系結構的描述—典型的形式化描述

  • Petri網
  • Z語言
  • 形式化描述的本質在於抽象,抽象的級別不同將導致方法的適用的範圍不同。

形式化描述存在的問題:

  • 說明與實際程式碼間的差距仍然巨大
  • 受本身性質所限,形式化描述方法很難與軟件開發過程整合

2.4.5軟體體系結構的設計

  • 基本任務:識別出構成系統的子系統並建立子系統控制和通訊的基本框架,以滿足 系統功能性和非功能性需求。
  • 軟體體系結構設計:使用某種體系結構描述方法或語言,通過某種設計工具和環境, 針對一個特定的軟件系統的構造,爲其邏輯構成做出決策的一種創造性活動。
  • 水平型設計:運用通用建模設計工具和表達語言所進行的軟 件體系結構的設計。
  • 垂直型設計:運用面向體系結構的專用建模設計工具及其表 達模型所進行的軟體體系結構的設計。

2.5ADL簡介
體系結構描述語言:一種用於描述體系與體系結構的計算機語言,它可以在指定的抽象 層次上描述軟體體系結構。
ADL關注抽象層次上的整體結構而不是任意程式碼模組的實現細節,作爲一種經典理論, Shaw和Garland定義了ADL的元素:

  • 構件:抽象級別上組成系統的計算模組。
  • 操作:構件之間的互動機制 機製。
  • 模式:構建元素依照特定方式進行的組合。
  • 閉包用於實現分層描述的概念。
  • 規格說明:包括功能、效能、容錯能力等。

第三章 軟體體系結構建模和UML

3.1軟體體系結構建模概述
體系結構模型分爲以下五類:

  • 結構模型

  • 框架模型

  • 動態模型

  • 過程模型

  • 功能模型

3.2基於軟體體系結構的開發
體系結構的軟件開發過包括以下主要活動:
1.通過對特定領域應用軟體進行分析,提煉其中的穩定需求和易變需求,建立可 複用的領域模型。
2.在領域模型的基礎上提煉特定領域的軟體體系結構。
3.低層設計主要解決具體構件和連線件的設計問題,通過複用設計件庫中存放的 設計模式、物件和其他型別的可複用設計件,或根據情況設計情的構件,並提煉入 庫。低層設計的結果可以直接程式設計實現。

體系結構——>宏觀上描述系統的總體構件——>高層設計
設計模式和物件——>從微觀上解決設計的問題——>低層設計

3.3UML概述
3.3.1UML的特點和用途

  • 統一標準
  • 物件導向的特徵
  • UML在演變過程中還提出一些新的概念
  • 獨立於過程
  • UML對系統的邏輯模型和實際模型都能清楚地表示,可以用於複雜軟件系統 的建模

3.3.2UML2.0的建模機制 機製

  • 語言定義精確度提高
  • 改良的語言組織
  • 重點改進大規模的軟件系統模型性

3.4物件導向方法
物件導向方法學的出發點和基本原則是儘可能模擬人類習慣的思維方式,使開發軟體的 方法與過程儘可能接近人類認識世界、解決問題的方法與過程。
物件導向構造法則:

  • 區分物件及其屬性
  • 區分整體物件及其組成部分
  • 不同對象類的形成以及區分

3.4.1 物件導向方法中的基本概念
(1)物件:物件指的是一個獨立的、非同步的、併發的實體。
(2)類:類的定義,包括一組數據屬性和在數據上的一組合法操作。
(3)繼承性:廣義地說,繼承是指能夠直接獲得已有的性質和特性,而不必反覆 反復 定義他們。
(4)多型性:指子類物件可以向父類別物件那樣使用,同樣的訊息既可已發送給父 類物件也可以發送給子類物件。
(5)過載:有兩種過載:函數過載是指在同一作用域內的若幹個參數特徵不同的 函數可以使用相同的函數名;運算子過載是指同意運算子可以施加於不同類型的操 作數上面。
(6)訊息和方法:在物件導向領域,兩個物件的賈湖是通過訊息的發送和接收來 完成的。訊息分爲簡單訊息、同步訊息和非同步訊息。
(7)聚集:在客觀世界中有若幹類,這些類之間有一點的結構聯繫。通常有兩種 主要的結構聯繫,即一般——具體結構關係,整體——部分結構關係。

3.4.2 物件導向方法的優勢

  • 支援軟體的重用性
  • 提高軟體可維護性和安全性

3.5 UML2.0中的結構建模
UML2.0中的結構建模包括:

  • 類圖
  • 包圖
  • 物件圖
  • 構件圖
  • 組合結構圖
  • 部署圖

3.5.1 類圖——類
(1)類是來描述具有相同特徵、約束和語意的一樂物件,這些物件具有共同的操 作和屬性。
(2)類圖中的類可以簡單的只給出類名,也可以具體的列出該類擁有的成員變數 和方法,甚至更詳細的描述可見性、方法參數、變數型別等資訊。

3.5.2 類圖——抽象類
(1)抽象類是指只提供操作名,而不對其進行實現。
(2)對這些操作的實現可以由其子類實現,並且不同的子類可以對同一操作具有 不同的實現。

3.5.3 類圖——介面
3.5.4 類圖——關聯關係
(1)描述了類結構之間的關係。
(2)當關聯使雙向的,那麼就可以用無向連線表示。
(3)一般的關聯關係語意較弱。也有兩種語意較強,分別是聚合和組合。

3.5.5 類圖——依賴關係
(1)兩個類之間存在依賴關係,表明一個類使用或需要知道另一個類中包含的信 息。
(2)有多種形式,例如系結、友元等。

3.5.6 類圖——聚合關係
3.5.7 類圖——合成關係
3.5.8 類圖——聚合關係與合成關係的區別
(1)聚合關係使has-a關係,組合關係是contains-a關係。
(2)聚合關係表示整體與部分的關係較弱,組合關係表示比較強。

3.5.9 類圖——泛化關係
泛化關係在物件導向中一般稱爲繼承關係,存在於父類別與子類,父介面與子介面之間。

3.5.10 物件圖
物件是類的範例,物件圖可以看作類圖的範例,物件之間的連線是類之間關聯關係 的範例。
物件圖顯示類的多個物件範例而不是真實的類。

3.5.11 構件圖
(1)構件圖用於靜態建模,是表示構建型別的組織以及各種構件之間依賴關係的圖。
(2)構建通過對構件間依賴關係的描述來估計修改系統構件可能給系統帶來的影響。
(3)構件的根本特徵在於它的封裝性和可複用性,其內部構件被隱藏起來,只能通過介面向外部提供服務或請求外部的服務。
(4)構件是系統中遵從一組介面且提供其實現的物理的、可替換的部分。
(5)構件能獨立完成功能,它是軟件系統的組成部分。

3.5.12 部署圖
(1)部署圖描述的是系統執行時的,展示了硬體的設定及其軟體如何部署到網路 結構中。
(2)一個系統模型只有一個部署,部署圖通常用來理解分佈式系統。

3.5.13 行爲建模(動態建模)
行爲建模:刻畫系統中的動態行爲、動作和過程。
UML行爲建模中提供的試圖可以從不同側面描述軟件系統的動作過程。
1.用例圖
(1)用例圖定義:

  • 被稱爲參與者的外部使用者所能觀察到的系統功能的模型圖
  • 用例圖列出了系統中的用例和系統外的參與者,並顯示哪個參與者參與了哪個用例的執行
  • 用例圖多用於靜態建模階段(主要業務建模和需求建模)
  • 參與者:指在系統外部與系統直接互動的人或事物。

用例:

  • 用例的定義:是系統外部可見的一個系統單元。
  • 參與者與用例之間的關係:關聯表示參與者與用例之間的互動、通訊途 徑。

用例之間的關係:

  • 包含:箭頭指向的用例爲被包含的用例,稱爲包含用例;箭頭出發 的 用例爲基用例。包含用例是必選的,如果缺少包含用例,基用例 就不完整;包含用例必須被執行,不需要滿足某種條件,器質性不會 改變基用例的行爲。
  • 拓展:箭頭執行的用例爲被拓展的用例,稱爲拓展用例;箭頭出發 的用例爲基用例。拓展用例是可選的,如果缺少拓展用例,不會影響 基用例的完整性,拓展用例在一定條件下纔會執行,並且其執行會改 變基用例的行爲。
  • 參與者之間的關係:泛化關係是一般和關係,發出箭頭的一方表示特殊 的一方,箭頭指向的一方代表一般的一方,特殊的一方繼承了一般方的特 性並增加了新的特性。

2.順序圖

  • 順序圖描述物件之間的動態互動關係,着重表現對象間訊息傳遞的時間順序。
  • 順序圖有兩個座標軸:縱座標軸表示時間,橫座標軸表示不同的物件。
  • 順序圖中的物件用一個矩形框表示,框內表有物件名。從表示物件的矩形框向下的垂直虛線是物件的「生命線」,用於表示在某段時間內該物件是存在的。

3.通訊圖
通訊圖主要關注參與互動的物件通過連線組成的結構。

4.互動概覽圖
互動概覽圖有兩種形式:

  • 以活動圖爲主線
  • 以順序圖爲主線

5.時序圖
時序圖是顯示物件之間互動的圖。這些物件是按時間排列的,時序圖中顯示的是參與互動的物件及其物件之間訊息互動的順序。

6.狀態圖
狀態圖使用有窮狀態變遷圖的方式刻畫系統或元素的離散行爲,可以用來描述一個類的範例、子系統甚至整個系統在其生存週期內,所處狀態如何隨外部刺 激而發生變化。

7.活動圖

  • 活動圖是UML用於對系統的動態行爲建模的另一種常用工具,他描述活動的順序,展現從一個活動到另一個活動的控制流。
  • 活動圖在本質上是一種流程圖,是內部處理驅動的流程。
  • 活動圖主要用於:業務建模時,用於詳述業務用例,描述一項業務的執行過程;設計時,描述操作的流程。
  • UML活動圖包含的元素有動作狀態、活動狀態、動作流、分支與合併(分叉與匯合)、泳道和物件流等。

第四章 軟體設計過程

4.1軟體設計基礎
軟體設計主要針對需求分析過程得到的軟體需求規格說明,綜合考慮各種制約因素,探 求切實可行的軟體解決方案並最終給出方案的邏輯表示,包括文件、模型等。
軟體設計的主要活動:
(1)軟體設計計劃

  • 明確設計過程的輸入製品並使其處於就緒狀態

  • 定義設計過程的目標、輸出製品及驗收準則

  • 確定覆蓋設計過程中各個階段的全域性性設計策略

  • 分配設計過程中相關人員的職責

  • 針對設計過程中的活動指定設工作計劃

(2)體系結構設計
目標是建立軟件系統的體系結構,有時也稱「頂層設計」。
在軟體體系結構設計過程中,需要注意以下規則:

  • 改進軟體結構,提高模組獨立性
  • 模組規模應該適中
  • 深度、寬度、扇入、扇出都應該適當
  • 模組的作用域應該在控制域之內
  • 力爭降低模組介面的複雜程度
  • 設計單入口、單出口模組
  • 模組功能應該可以預測

(3)介面設計

  • 結構設計
  • 互動設計
  • 視覺設計

良好的用戶介面一般都符合下列用戶介面規範:

  • 易用性原則
  • 規範性原則
  • 幫助設施原則
  • 合理性原則
  • 美觀與協調性原則
  • 容錯性考慮原則

(4)模組/子系統設計
設計目標:

  • 確定模組的具體介面定義,並設計模組的內部結構
  • 儘量保持模組的功能獨立性,遵循「高內聚,低耦合」的設計思想
  • 力求將模組的影響限制在模組的控制範圍之內,使得軟體的日後修改和維護工作更加簡單

(5)過程/演算法設計
主要任務是對模組內部工作和執行過程進行描述,給出有關處理的精確說明。
(6)數據模型設計

  • 把數據結構設計,數據庫設計,甚至數據檔案設計都統一稱爲數據模型設計
  • 持久數據操作

4.2軟體體系結構設計
軟體設計一般首先設計軟體體系結構設計,然後再逐步精化進行更詳細的設計,知道設計可以被實現的程度。
軟體體系結構的設計方法是指通過一系列的設計活動,獲得滿足系統能性需求,並且符合一定非功能性需求約束的軟體體系結構模型。
(1)多重檢視建模(包含邏輯、開發、物理、過程檢視)
(2)基於評估與轉換的設計方法
對體系結構進行轉換可以通過下述三種方式實現:

  • 使用合適的體系結構分割和模式,或者設計模式來改進體系結構設計。
  • 把非功能性需求轉換爲功能性解決方案,該功能性方案可以與問題與無關,但可以滿足品質屬性的要求。

(3)模式驅動的設計方法
常用的軟體體系結構風格如下:

  • 數據流風格:批次處理和管道/過濾器
  • 呼叫/返迴風格:主程式/子程式、層次結構和客戶機/伺服器
  • 物件導向風格
  • 獨立部件風格:進程通訊和事件驅動
  • 虛擬機器風格:直譯器和基於規則的系統
  • 數據共用風格:數據庫系統和黑板系統

(4)領域特定的軟體體系結構設計方法
領域特定的軟體體系結構是領域工程的核心部分,領域工程分析應用領域的共同特徵和可變特徵,對刻畫這些特徵的物件和操作進行選擇和抽象,形成領域模型,並進一步生成DSSA。
DSSA與體系結構風格的區別:

  • DSSA和軟體體系結構風格是從不同角度出發研究問題的兩種結果,前者從問題域出發,後者從解決域出發。
  • DSSA只在某個特定的領域中進行經驗知識的提取、總結和組織,但可以使用多種軟體體系結構風格;而一種軟體體系結構風格所呈現的公共結構和設計方法可以拓展到多個應用領域。
  • DSSA的體系結構表示和工具一般只適用於較小的範圍,在其他領域中是不適用並難以複用的。

(5)軟體產品線
指一組可管理的,具有公共特性的軟體應用系統的集合。
軟體產品線的主要組成部分:核心資源和軟體產品集合。
軟體產品的基本活動包括核心資源開發,利用核心資源的產品開發以及在這兩部風 中所需要的技術協調和組織管理。
在一個軟體產品線中,新產品形成的步驟如下:

  • 從公共資產庫中選取合適的構件
  • 使用預定義變化機制 機製進行裁剪,如參數化,繼承等
  • 必要時增加新的構件
  • 在整個產品線範圍內公共的體系結構指導下進行構件的組裝,形成系統

(6)其他軟體體系結構設計方法
(1)基於目標圖推理的體系結構設計方法:該方法的目標是使模式背後的推理顯 示化,並且服從於系統的分析;該方法使用目標圖,表達模式在各種需求上的應用 效果。
(2)基於屬性的體系結構設計方法:是對通常體系結構風格描述的一種擴充,用 於獲取結構化分析SA層次上的結構和分析技巧,顯式地把推理框架(定性或定量) 與體系結構風格關聯起來。

4.3高可信軟體設計
(1)可信軟體的特點:

  • 可信軟體:是指軟件系統的的執行行爲及其結果總是符合人們的預期,而且在受到幹擾時仍能提供聯繫服務。
  • 軟件系統的可信性質:只是該系統需要滿足的關鍵性質,當軟件系統一旦違背這些性質,會造成不可容忍的損失時,稱這些性質爲高可信性質。

(2)軟體可信性質分爲以下幾種:

  • 可靠性:在規定的環境下、規定的時間內軟體無失效執行的能力。
  • 可靠安全性:軟體執行不引起危險、災難的能力。
  • 保密安全性:軟件系統對數據和資訊提供保密性、完整性、可用性、真實性保障的能力。
  • 生存性:軟體在受到攻擊或失效出現時連續提供服務並在規定時間內恢復所有服務的能力。
  • 容錯性:軟體在故障(硬體,環境異常)出現時保證提供服務的能力。
  • 實時性:軟體在規定時間內完成反應或提交輸出的能力。

(3)容錯設計

  • 完全防止軟體失效在實踐中不可能的,任何試圖消除軟體失效的方法都會導致很高的成本,並且不能保證時效不會發生。
  • 爲了保證高可信系統即使在極端條件下也能按其規格說明執行,對硬體和軟體同時採用容錯計算非常重要。
  • 爲了達到硬體容錯,需要對所有關鍵硬體部件進行備份,爲了軟體免受故障的影響,軟體邏輯和數據也必須備份。

恢復塊
軟體容錯設計方法
N—板塊程式設計
設計多樣性可以通過以下幾種方式達到:

  • 使用不同的設計方法來實現需求
  • 使用不同的程式設計語言來完成
  • 使用不同的開發工具,且在不同的開發環境中完成
  • 明確要求在實現某些關鍵過程時使用不同的演算法

(4)軟體失效模式和影響分析
軟體失效模式和影響分析主要是在軟件開發階段的早期,通過識別軟體失效模式,研究分析各種失效模式產生的原因及其造成的後果,尋找消除和減少有害 後果的方法,以儘早發現潛在問題,並採取相應措施,從而提高軟體的可靠性 和安全性。

  • 軟體失效:泛指程式在執行中喪失了全部或部分功能、出現偏離預期的正常狀態的事件。
  • 軟體失效模式:指軟體失效的不同類型,通常用來描述軟體失效發生的方式,以及對裝置執行可能產生的影響。
  • 軟體失效的影響:指軟體失效模式對軟件系統的執行、功能或狀態等造成的後果。

(5)軟體故障樹分析
軟體故障樹是在軟件系統設計過程中,通過對可能造成系統故障的因素(包括硬體、軟體、環境、人爲等因素)進行分析,畫出邏輯框圖(即故障樹),從而確定系統故障原因的各種可能組合,採取相應的糾正措施,提高系統可靠性的一種設計分析方法。
(6)形式化方法
形式化方法是在計算系統的開發中進行嚴格推理的理論、技術和工具,主要包括形式規約技術和形式驗證技術。
形式規約技術:使用具有嚴格數學定義語法和語意的語言刻畫軟件系統及其性質,可以儘早發現需求和設計中的錯誤、歧義、不一致和不完全。、
形式驗證技術:是在行使規約的基礎上建立軟件系統及其性質的關係,即分析系統是否具有所期望性質的過程,主要分爲模型檢驗和定理證明。

4.4軟體設計規格說明

  • 軟體設計過程中的各個活動的結果應該文件化,形成正式的軟體規格說明,作爲軟體設計的輸出。
  • 形成的軟體規格說明將被評審,並作爲後續軟體實現的依據。
  • 軟體設計規格說明並沒有統一的格式,例如IEEE標準、IOS標準、各行業標準所建議的格式不盡相同。
  • 使用不同的軟體設計方法學所得的設計模型也會有很大不同,導致設計規格的說明也會明顯不同。

4.5軟體設計評審
軟體設計評審的目標是確保軟體設計規格說明書能夠實現所有的軟體需求,及早發現設計中的缺陷和錯誤,並確保設計模型已經精化到合格的軟體實現工程師能夠構造出符合軟體設計者期望的目標軟件系統。
設計評審中需要重點關注的內容包括:

  • 設計模型是否能夠充分地、無遺漏地支援所有軟體需求的實現。
  • 設計模型是否已經精化至合理的程度,可以確保合格的軟體實現工程師能夠構造出符合軟體設計者期望的目標軟件系統。
  • 設計模型的品質屬性,即設計模型是否都已經充分的優化,以確保依照設計模型構造出來的軟體產品能夠表現出良好的軟體品質屬性。

爲了使設計評審達到預期效果,下面 下麪給出設計評審的一些建議性原則:

  • 對產品進行評審,而不是開發人員
  • 要有針對性,不要漫無目的
  • 進行有限的爭辯
  • 闡述問題所在,但不要嘗試去解決問題
  • 要求事先準備,如果評審人你沒有準備好,則取消會議重新安排時間
  • 爲被評審的產品開發一個檢測表
  • 缺點軟體元素是否遵循規格說明或標準,記錄任何不一致的地方
  • 列出發現的問題、給出建議和解決該問題的負責人
  • 堅持記錄並文件化

第五章 軟體體系結構風格

5.1軟體體系結構風格概述

  • 軟體體系結構設計的一個核心問題是能否使用重複的體系結構模式,即能否達到體系結構級的軟體重用。

  • 能否在不同的軟件系統中使用同一種體系結構。

  • 軟體體系結構風格是描述某一特定應用領域系統組織方式的慣用模式。體系結構風格定義一個系統家族,即一個體繫結構定義一個詞彙表和一種約束。

  • 體系結構風格反映了領域中衆多系統所共有的結構和語意特徵,並指導如何講各個模組和子系統有效地組織成一個完整的系統。

  • 按照這種方式理解,軟體體系結構風格定義了描述系統的術語表和知道構建系統的規則。

5.2管道—過濾器
在管道—過濾器模式下,功能模組成爲過濾器;功能模組間的連線看作是輸入、輸出數據流的通道,所以稱爲管道。
(1)適應的設計問題
如果要建立一個必須處理或轉化輸入數據流的系統,用單個元件實現會顯得臃腫,需求不容易變動,所有可能要通過替換或重新排列處理步驟爲靈活性做規劃。處理步驟的內部鏈接必須考慮一下步驟:

  • 未來系統的升級通過替換處理步驟或重組處理步驟就能完成
  • 不同的語境中小的處理步驟要比元件更易於重用
  • 不相連的處理步驟不共用資訊
  • 存在不同的輸入數據源,例如網路連線或通過硬體感測器提供讀數
  • 可以用多種方式給出或存放最終結果
  • 明確存放中間結果
  • 可能有並行或非同步處理的要求

(2)解決方案

  • 管道—過濾器的體系結構模式把系統任務分成幾個連貫的處理步驟。這些步驟通過系統的數據流鏈接,一個步驟的輸出是下一個步驟的輸入。
  • 每個處理步驟由一個過濾器元件實現
  • 過濾器消耗或轉發增長的數據,在產生輸出之前消耗它的所有輸入以達到低延遲並能夠真正的處理。
  • 數據源、過濾器和數據匯點由管道順序連線起來,實現相連處理步驟間的數據流動。
  • 通過管道聯合的過濾器序列稱爲處理流水線。
  • 從整個系統的輸入和輸出關係來看,各個過濾器對其輸入進行區域性的地理處理交換,就可以產生部分計算結果。
  • 過濾器按照啓用方式可以分爲被動式過濾器(通過函數或過程呼叫激發)和主動式過濾器(作爲獨立的執行緒任務激發工作)。
  • 過濾器是獨立執行的部件,不受其他過濾器的影響;非臨近的過濾器不共用任何狀態,自身也是無狀態的。
  • 整個結果的正確性不依賴於各個過濾器執行的先後 先後次序。

每種風格具有以下特徵:

  • 構建即過濾器,對輸入流進行處理轉換,處理的結果在輸出端流出。而這種計算常常是遞進的,所以可能在所有輸入接受完之前就開始輸出,可以並行地使用過濾器。
  • 連線件位於過濾器之間,起到資訊流的導管作用,即管道。
  • 每個管道都有輸入/輸出集合 ,構建在輸入處讀取數據流,在輸出出生成數據流。
  • 過濾器必須是獨立的實體。

採用管道—過濾器模式建立的系統具有如下優點:

  • 由於每個構建的行爲不受其他構建的影響,因此整個系統的行爲比較易於理解。
  • 支援功能模組的複用。任意兩個過濾器只要在相互的輸入、輸出管道管道格式上達成一致,就可以連線在一起。
  • 具有較強的可維護性和可拓展性。可維護性體現在系統過濾器部件的更新或升級。
  • 支援特殊的分析:如吞吐量計算和死鎖檢測等。
  • 支援併發執行。

管道—過濾器的不足:

  • 往往會導致系統處理的成批操作。
  • 在處理兩個獨立但又相關的數據流時可能會遇到困難。
  • 在需求對數據傳輸處理進行特定的處理時,會導致對於每個過濾器的解析輸入和格式化輸出要做更多的工作,從而帶來系統複雜性的上升。根據實際設計的要求,需求對數據傳輸進行特定處理(如爲了防止數據泄露而採取加密手段),導致過濾器必須對輸入、輸出管道中的數據流進行解析或反解析,增加了過濾器具體實現的複雜性。
  • 並行處理獲得的效率往往是一種假象。

5.3數據抽象和麪向物件風格

  • 該風格建立在數據抽象和麪向物件的基礎之上,數據的表示方法和它們相應的操作封裝在一個抽象數據型別或物件中。
  • 該風格的構建是物件,或者說是抽象數據型別的範例。
  • 物件是一種被稱爲管理者的構件,因爲它負責保持資源的完整性。
  • 物件是通過函數和過程呼叫來互動的。

優點:

  • 因爲對相對其他物件隱藏它的表示,所以可以改變一個物件的表示,而不影響其他的物件。
  • 設計者可以將一些數據存取操作的問題,分解爲一些互動代理程式的集合。

缺點:

  • 爲了使一個物件和另一個物件通過過程呼叫等進行互動,必須知道物件的標識,只要一個物件的標識變了,就必須修改所有其他明確呼叫它的物件。
  • 必須修改所有顯式呼叫它的其他物件,並消除由此帶來的一些副作用。

5.4基於事件的隱式呼叫風格

  • 基於事件的隱式呼叫風格的思想是構件不直接呼叫一個過程,而是觸發或廣播一個或多個事件。
  • 系統中的其他構件中的過程在一個或多個事件中註冊,當一個事件被觸發,系統自動呼叫在這個事件中註冊的所有過程,這樣,一個事件的觸發就導致另一個模組中的過程呼叫。

主要特點:事件的觸發者並不知道哪些構件會被這些事件影響。
優點:

  • 爲軟體重用提供了強大的支援。當需要將一個構件加入現存系統時,只需將它註冊到系統的事件中。
  • 爲改進系統帶來了方便。當用一個構件代替另一個構件時,不會影響其他構件的介面。

缺點:

  • 構件放棄了對系統計算的控制。
  • 數據交換的問題。
  • 既然過程的語意必須依賴於被觸發事件的上下文約束,關於正確性的推理就存在問題。

5.5分層系統風格

  • 所謂分層系統,就是按層次組織軟體的一種軟體體系結構,其中,每一層軟體建立在第一的軟體層上。
  • 位於同一層的軟件系統或子系統具有同等的通用性,在下一層的軟體比在上一層的軟體通用性更強。
  • 一個層次可以視爲同等通用檔次的一組系統。
  • 一個分層的系統按照層次結構組織,每一層向它的上層提供服務,同時又是它下層的客戶。
  • 在某些系統中,除了鄰接的層,一個內部層次對於其他外部層次是隱藏的,對體系結構的約束包括把系統的互動限制在鄰接層次之間。
  • 互動只在相鄰的層間發生,並且,這些互動按照一定協定進行。
  • 連線件可以用互動鍵的協定定義。
  • 每一層是由不同的部件構成的實體集合。層內的部件可以互動。
  • 相鄰層的部件可以直接從上向下呼叫,還可以設計統一的曾呼叫介面對層進行保護。

優點:

  • 由於對層次的鄰接層進行限制,所以系統易於改進和拓展。
  • 每一層的軟體都易於重用,並可爲某一層次提供可互換的具體實現。
  • 分層系統所支援的設計體現了不斷增加的抽象層次,這樣,一個複雜問題的求解被分解爲一系列遞增的步驟。
  • 標準化支援。
  • 區域性性依賴。
  • 可替換性。

缺點:

  • 如何界定層次間的劃分是一個較爲複雜的問題。
  • 更改行爲的重疊。
  • 降低效率。
  • 不必要的工作。

5.6倉庫風格和黑板風格
倉庫風格的體系結構由兩個構件組成:一箇中央數據結構,它表示當前狀態;一個獨立構件的集合,它對中央數據結構進行操作。
對於系統中數據和狀態的控制方法有兩種:一個傳統的方式是,由輸入事務進行選擇進行何種處理,並把執行結果作爲當前狀態儲存到中央數據結構中,這時,倉庫是一個傳統的數據庫體系結構;另一種方法是,由中央數據結構的當前狀態決定進行何種處理。這時,倉庫是一個合辦體系結構,即黑板體系結合是倉庫體系結構的特殊化。

5.7模式—檢視—控制器風格——MVC模式

  • MVC結構是爲那些需要爲同樣的數據提供多個檢視的應用程式而設計的,它很好地實現了技術層與表現層的分離。
  • 作爲一種開發模型,MVC通常用於分佈式系統的設計和分析中,以及用於確定系統各部分間的組織關係。
  • 對於介面可變性的需求,MVC把互動系統的組成分解爲模型、檢視、控制器三種部件。
  • 模型部件:是軟體所處理問題邏輯在獨立與外在顯示內容和形式情況下的內在抽象,封裝了問題的核心技術數據、邏輯和功能的計算關係,它獨立於具體的介面表達和I/O操作。
  • 檢視部件:把表示模型數據及邏輯關係和狀態的資訊吉他頂形式展示給使用者,它從模型獲得顯示資訊,對於相同的資訊可以有多個不同的顯示形式或檢視。
  • 控制部件:用於處理使用者和軟體的互動操作,其職責是控制所提供模型中任何變化的傳播,確保用戶介面和莫相間的對應關係。通常,一個檢視具有一個控制器。
  • 模型類:包含了應用問題的核心數據、邏輯關係和計算功能。它封裝瞭解決應用問題所需的數據,提供了問題處理的操作過程。
  • 檢視類:通過顯示資訊的形式把資訊傳達給使用者,不同試圖通過不同的顯示來表達數據和狀態資訊。
  • 控制類:通過實踐處理過程對輸入事件進行處理,併爲每個事件提供操作服務,把事件轉換成對模型或相關使徒的激發操作。

MVC的實現:

  • 分析應用問題,對系統進行分離
  • 設計和實現每個檢視
  • 設計和實現每個控制器
  • 使用和安裝、解除安裝控制器

5.8直譯器風格
直譯器風格通常用於建立一種虛擬機器以彌合程式的語意與作爲計算引擎的硬體的間隙。又有直譯器時間上建立了一個軟體虛擬出來的機器,所以這種風格又常常被稱爲虛擬機器風格。
程式設計語言的編譯器;基於規則的系統,;指令碼語言。
由一個執行引擎+三個記憶體,一共四個構件組成:

  • 正在被解釋的程式
  • 執行引擎
  • 被解釋的程式的當前狀態
  • 執行引擎的當前狀態

優點:

  • 有助於應用程式的可移植性與程式設計語言的跨平臺能力。
  • 可以對爲實現的硬體進行模擬。

缺點:
額外的間接層次帶來的系統效能的下降。

5.9C2風格
C2體系結構風格可以概括爲通過連線件系結在一起的、按照一組規則運作的並行構件網路。C2風格中的系統組織規則如下:

  • 該系統的構建與連線件都有一個頂部和一個底部。
  • 構件的頂部應連線到某連線件的底部,構件的底部應連線到某連線件的頂部,而構件與構件之間的直接連線是不允許的。
  • 一個連線件可以和任意數目的其他構件和連線件連線。
  • 當兩個連線件進行直接連時,必須由其中一個的底部到另一個的頂部。
  • C2風格是最常用的一種軟體體系結構風格。

C2風格具有如下特點:

  • 系統中的構建可以實現應用需求,並能將任意複雜度的功能封裝在一起。

  • 所有構件之間的通訊時通過以連線件爲終結的非同步資訊互動機制 機製來實現的。

  • 構件相互獨立,構件之間依賴性較少。

5.10 C/S風格

  • C/S體系結構有3各主要組成部分: 數據庫伺服器、客戶應用程式和網路。

伺服器負責有效的管理系統的資源,其任務集中於以下幾個方面:

  • 數據庫安全性的要求
  • 數據庫存取併發行的控制
  • 數據庫前端的客戶應用程式的全域性數據完整性規則
  • 數據庫的備份與恢復

用戶端應用程式的主要任務:

  • 提供使用者與數據庫互動的介面
  • 向數據庫伺服器提交使用者請求並接受來自數據伺服器的資訊
  • 利用用戶端應用程式對存在與用戶端的數據執行應用邏輯要求
  • 網路通訊軟體主要作用是完成數據庫伺服器和用戶端應用程式之間的數據傳輸。

優點:

  • 系統的用戶端應用程式和伺服器構件分別執行在不同的計算機上,系統中的每台伺服器都可以是合格構件的要求,這對於硬體與軟體的變化顯示出極大的適應性和靈活性,而且易於對系統進行擴充和縮小。
  • 在C/S體系結構中,系統中的功能充分分離,用戶端應用程式的開發集中於數據的現實和分析,兒數據伺服器的開發則集中於數據的管理,不必在每個新的應用程式中都對DBMS進行編碼。
  • C/S體系結構具有強大的數據操作和事務處理能力,模型思想簡單,易於人們理解和接受。

缺點:

  • 開發成本高
  • 用戶端程式設計複雜
  • 資訊內容和形式單一
  • 用戶介面風格不一,使用複雜,不利於推廣使用。
  • 軟體移植困難
  • 軟體維護和升級困難
  • 新技術不能輕易應用

5.11 三層C/S結構風格
表示層:

  • 表示層是應用的使用者介面部分,它擔負着應用與使用者之間的對話功能,用於檢查使用者從鍵盤等輸入的數據,顯示應用輸出的數據。
  • 再變更用戶介面時,只需改寫顯示控制和數據檢查程式,而不影響其他兩層。
  • 檢查的內容也僅限於數據得形式和取值範圍,不包括業務本身的處理邏輯。

功能層:

  • 功能層相當於應用的本體,用於將具體的業務處理邏輯編入程式。
  • 表示層和功能層之間的數據互動要儘可能簡潔。
  • 在功能層中包含確認使用者對應用與數據庫存取許可權的功能以及記錄系統處理日誌的功能。

數據層:

  • 數據層就是數據庫管理系統,負責管理對數據庫的讀寫操作。
  • 數據庫管理系統必須能迅速執行大量數據的更新和檢索。
  • 中介軟體:一個用API定義的軟體層,是具有強大通訊能力與良好可延伸性的分佈式軟體 管理框架。
  • 功能:在客戶機和伺服器或者伺服器和伺服器之間傳送數據,實現客戶叢集和伺服器羣之間的通訊。
  • 工作流程:在客戶機中的某個應用程式選喲駐留網路上某個伺服器的數據或服務時,搜 索此程式的C/S應用程式需要存取中介軟體系統,該系統將查詢數據源或服務,並在 發送應用程式請求後重新響應,將其傳送迴應用程式。

三層C/S結構的優點:

  • 允許合理的劃分三層結構的功能,使之在邏輯上保持相對獨立性,從而使整個系統的邏輯結構更爲清晰,能提高系統與軟體的可維護性和可拓展性。
  • 允許更靈活有效的選用相應的平臺與硬體系統,使之在處理負荷能力上和處理特徵上分別適應於結構清晰的三層,而且這些平臺與各個組成部分可以具有良好的可升級性和開放性。
  • 應用的各層可以並行開發,各層也可以選擇各自最適合的開發語言,使之能並行的而且高效率的進行開發,達到較高的性價比,對每一層的處理邏輯的開發和維護也會更容易一些。
  • 允許充分利用功能層有效的隔離開表示層與數據層,未授權的使用者難以繞過功能層而利用數據庫工具或駭客工具去非法的存取數據層,這就爲嚴格的安全管理奠定了堅實的基礎,整個系統的管理層次也更加合理和可控。

5.12B/S風格
B/S軟體體系結構是隨着Internet技術的興起,對C/S結構改進後得到的一種結構。
在B/S體系結構下,用戶介面完全通過WWW瀏覽器實現,部分事務邏輯在前端實現,但主要是無邏輯在伺服器端實現。
他利用瀏覽器技術,結合瀏覽器的多種指令碼語言並通過瀏覽器就實現了原本需要複雜的專業軟體才能 纔能實現的強大功能,是一種全新的軟體體系結構。

  • 優點:
    簡化了用戶端,無需像C/S模式那樣在不同的客戶機安裝不同的用戶端應用程式,而只需安裝通用的瀏覽器軟體,就可以享受到無限豐富的永遠在不斷變化和發展中的資訊服務。

特別適用於網上資訊的發佈。
通過Internet技術統一存取不同種類的數據庫,提供了異種機器、異種網路、異種應用服務之間的統一服務 的最現實開發基礎。

5.13C/S與B/S混合結構風格

  • 優點: 外部使用者不直接存取數據庫,從而能保證企業數據庫的相對安全, 企業內部的互動性較強,數據查詢和修改的的響應速度較快。
  • 缺點: 企業外部使用者修改和維護數據時的速度較慢,較繁瑣,數據的動態互動性不強。

5.14 正交軟體體系結構的概念

  • 正交軟體結構由組織層和線索的構件構成。
  • 層是由一組具有相同抽象級別的構件構成的。
  • 線索是子系統的特例,它由完成不同層次功能的構件構成(通過相互呼叫來關聯),每一條線索完成整個系統中相對獨立的一部分功能。
  • 每一條線索的實現與其他線索的實現無關或關聯很少,在同一層中的構件之間是不存在相互呼叫的。

正交軟體體系結構的主要特徵:

  • 正交軟體體系結構有完成不同功能的n(n>1)個線索(子系統)組成。
  • 系統具有m(m>1)個不同抽象級的層。
  • 線索之間是相互獨立的。(正交的)
  • 系統有一個公共驅動層(一般爲最高層),和公共數據結構(一般爲最底層)。

正交軟體體系結構的優點:

  • 結構清晰,易於理解
  • 易修改,可維護性強
  • 可維護性強,重用粒度大

5.15 異構結構風格
使用異構結構的原因:

  • 從最根本上來說,不同的結構由不同的處理能力的強項和弱點,一個系統的體系結構應該根據實際需要進行選擇,已解決實際問題。
  • 軟語軟體包、框架、通訊以及其他一些體系結構上的問題,目前存在多種標準。
  • 實際工作中,總會遇到一些遺留下來的程式碼,它們仍有效用,但是卻與信系統有某種程度上的不協調。
  • 即使在某一單位中,規定了共用共同的軟體包或相互關係的一些標準,仍會存在解釋或表示習慣上的不同,在UNIX中就可以發現這類問題:即使規定用單一的標準(ASCII)來保證過濾器之間的通訊,但不同人對關於在ASCII流中資訊如何表示的不同假設,不同的過濾器之間仍可能不協調。

異構體系結構範例——「內外有別」模型
優點:

  • 外部使用者不直接存取數據庫伺服器,能保證企業數據庫的相對安全。
  • 企業內部使用者的互動性較強,數據查詢和修改的速度較快。

缺點:

  • 企業外部使用者修改和維護數據時的速度較慢,較繁瑣,數據的動態互動性不強。

異構體系結構範例——「查改有別」模型
缺點:

  • 外部使用者能夠直接通過Internet連線到數據庫伺服器,企業數據容易暴露給外部使用者,給數據安全造成一定威脅。