一、軟件架構(gòu)
軟件架構(gòu)(Software Architecture, SA)并非可運(yùn)行軟件,確切地說,它是一種表達(dá),使軟件工程師能夠:
1. 分析設(shè)計在滿足所規(guī)定的需求方面的有效性;
2. 在設(shè)計變更相對容易的階段,考慮體系結(jié)構(gòu)可能的選擇方案;
3. 降低與軟件構(gòu)造相關(guān)聯(lián)的風(fēng)險。
軟件架構(gòu)設(shè)計的生命周期包括:
1. 需求分析階段。
2. 設(shè)計階段。
3. 實現(xiàn)階段。
4. 構(gòu)件組裝階段。
5. 部署階段。
6. 后開發(fā)階段。
二、基于架構(gòu)的軟件開發(fā)方法
基于體系結(jié)構(gòu)的軟件設(shè)計(Architecture-Base Software Design, ABSD)方法是由構(gòu)成體系結(jié)構(gòu)的商業(yè)、質(zhì)量和功能需求的組合驅(qū)動的。ABSD方法有三個基礎(chǔ):
1. 功能的分解。
? ? 使用已有的基于模塊的內(nèi)聚和耦合技術(shù)。
2. 通過選擇體系結(jié)構(gòu)風(fēng)格來實現(xiàn)質(zhì)量和商業(yè)需求。
3. 軟件模板的使用。
1 基于體系結(jié)構(gòu)的開發(fā)模型
傳統(tǒng)的軟件開發(fā)過程可以劃分為:
1. 問題定義。
2. 需求分析。
3. 軟件設(shè)計。
4. 軟件實現(xiàn)。
5. 軟件測試。
ABSD模型把整個基于體系結(jié)構(gòu)的軟件過程劃分為以下六個子過程:
1. 需求。
2. 設(shè)計。
3. 文檔化。
4. 復(fù)審。
5. 實現(xiàn)。
6. 演化。
1.1 體系結(jié)構(gòu)需求
體系結(jié)構(gòu)需求過程主要是獲取用戶需求,標(biāo)識系統(tǒng)中所要用到的構(gòu)件。
如果以前有類似的系統(tǒng)體系結(jié)構(gòu)的需求,我們可以從需求庫中取出,加以利用和修改,以節(jié)省需求獲取的時間,減少重復(fù)勞動,提高開發(fā)效率。
1. 需求獲取。
? ? 一般來自系統(tǒng)的質(zhì)量目標(biāo)、系統(tǒng)的商業(yè)目標(biāo)、系統(tǒng)開發(fā)人員的商業(yè)目標(biāo)。
2. 標(biāo)識構(gòu)件。
? ? 又可分為三步:生成類圖、對類進(jìn)行分組、把類打包成構(gòu)件。
3. 架構(gòu)需求評審。
? ? 所獲取的需求是否真實地反映了用戶的要求,類的分組是否合理,構(gòu)件合并是否合理等。
1.2 體系結(jié)構(gòu)設(shè)計
1. 提出軟件體系結(jié)構(gòu)模型。
? ? 在建立體系結(jié)構(gòu)的初期,選擇一個合適的體系結(jié)構(gòu)風(fēng)格是首要的。
2. 把已標(biāo)識的構(gòu)件映射到軟件體系結(jié)構(gòu)中。
? ? 產(chǎn)生一個中間結(jié)構(gòu)。
3. 分析構(gòu)件之間的相互作用。
4. 產(chǎn)生軟件體系結(jié)構(gòu)。
? ? 對中間結(jié)構(gòu)進(jìn)行精化。
5. 設(shè)計評審。
1.3 體系結(jié)構(gòu)文檔化
體系結(jié)構(gòu)文檔化過程的主要輸出結(jié)果是兩個文檔:
1. 體系結(jié)構(gòu)規(guī)格說明。
2. 測試體系結(jié)構(gòu)需求的質(zhì)量設(shè)計說明書。
1.4 體系結(jié)構(gòu)復(fù)審
體系結(jié)構(gòu)能否滿足要求、質(zhì)量需求是否在設(shè)計中得到體現(xiàn)、層次是否清晰、構(gòu)件的劃分是否合理、文檔表達(dá)是否明確、構(gòu)件的設(shè)計是否滿足功能與性能的要求等。
1.5 體系結(jié)構(gòu)實現(xiàn)
所謂“實現(xiàn)”就是要用實體來顯示出一個軟件體系結(jié)構(gòu),即要符合體系結(jié)構(gòu)所描述的結(jié)構(gòu)性設(shè)計決策,分割成規(guī)定的構(gòu)件,按規(guī)定方式互相交互。
體系結(jié)構(gòu)的實現(xiàn)過程分為以下階段:
1. 復(fù)審后的文檔化的體系結(jié)構(gòu)。
2. 分析與設(shè)計。
3. 構(gòu)件實現(xiàn)。
4. 構(gòu)件組裝。
5. 系統(tǒng)測試。
1.6 體系結(jié)構(gòu)的演化
體系結(jié)構(gòu)演化是使用系統(tǒng)演化步驟去修改應(yīng)用,以滿足新的需求。主要包括以下六個步驟:
1. 需求變化歸類。
2. 制訂體系結(jié)構(gòu)演化計劃。
3. 修改、增加或刪除構(gòu)件。
4. 更新構(gòu)件的相互作用。
5. 構(gòu)件組裝與測試。
6. 技術(shù)評審。
三、軟件架構(gòu)風(fēng)格
1 數(shù)據(jù)流體系結(jié)構(gòu)風(fēng)格
1.1 批處理體系結(jié)構(gòu)風(fēng)格
在批處理風(fēng)格的軟件體系結(jié)構(gòu)中,每個處理步驟是一個單獨的程序,每一步必須在前一步結(jié)束后才能開始,并且數(shù)據(jù)必須是完整的,以整體的方式傳遞。
1. 基本構(gòu)件:獨立的應(yīng)用程序。
2. 連接件:某種類型的媒介。
1.2 管道-過濾器體系結(jié)構(gòu)風(fēng)格
當(dāng)數(shù)據(jù)源源不斷地產(chǎn)生,系統(tǒng)就需要對這些數(shù)據(jù)進(jìn)行若干處理(分析、計算、轉(zhuǎn)換等)?,F(xiàn)有的解決方案是把系統(tǒng)分解成幾個序貫的處理步驟,這些處理步驟之間通過數(shù)據(jù)流連接,一個步驟的輸出是另一個步驟的輸入。每個處理步驟由一個過濾器(Filter)實現(xiàn),處理步驟之間的數(shù)據(jù)傳輸由管道(Pipe)負(fù)責(zé)。
1. 基本構(gòu)件:過濾器。
? ? 每個處理步驟都有一組輸入和輸出。過濾器從管道中讀取輸入的數(shù)據(jù)流,經(jīng)過內(nèi)部處理,然后產(chǎn)生輸出數(shù)據(jù)流并寫入管道中。
2. 連接件:數(shù)據(jù)流傳輸管道。
? ? 將一個過濾器的輸出傳到另一過濾器的輸入。
2 調(diào)用/返回體系結(jié)構(gòu)風(fēng)格
利用調(diào)用-返回實際上是一種分而治之的策略,其主要思想是將一個復(fù)雜的大系統(tǒng)分解為若干子系統(tǒng),以便降低復(fù)雜度,并且增加可修改性。程序從其執(zhí)行起點開始執(zhí)行該構(gòu)件的代碼,程序執(zhí)行結(jié)束,將控制返回給程序調(diào)用構(gòu)件。
2.1 主程序/子程序風(fēng)格
主程序/子程序風(fēng)格一般采用單線程控制,把問題劃分為若干處理步驟。
1. 構(gòu)件:主程序和子程序。
? ? 子程序通??珊铣蔀槟K。
2. 連接件:過程調(diào)用。
? ? 調(diào)用關(guān)系具有層次性,其語義邏輯表現(xiàn)為子程序的正確性取決于它調(diào)用的子程序的正確性。
2.2 面向?qū)ο篌w系結(jié)構(gòu)風(fēng)格
目前軟件界已普遍轉(zhuǎn)向使用面向?qū)ο笙到y(tǒng)。這種風(fēng)格建立數(shù)據(jù)抽象和面向?qū)ο蠡A(chǔ)上,數(shù)據(jù)的表示方法和它們的相應(yīng)操作封裝在一個抽象數(shù)據(jù)類型或?qū)ο笾小?/p>
1. 構(gòu)件:對象,或者說是抽象數(shù)據(jù)類型的實例。
2. 連接件:對象之間的交互。
2.3 層次型體系結(jié)構(gòu)風(fēng)格
層次系統(tǒng)組成一個層次結(jié)構(gòu),每一層為上層提供服務(wù),并作為下層的客戶。
在一些層次系統(tǒng)中,除了一些精心挑選的輸出函數(shù)外,內(nèi)部的層接口只對相鄰的層可見。
1. 構(gòu)件:在層上實現(xiàn)了虛擬機(jī)。
2. 連接件:由通過決定層間如何交互的協(xié)議來定義。
? ? 拓?fù)浼s束包括對相鄰層間交互的約束。
2.4 客戶端/服務(wù)器體系結(jié)構(gòu)風(fēng)格
C/S(客戶端/服務(wù)器)軟件體系結(jié)構(gòu)是基于資源不對等,且為實現(xiàn)共享而提出的。
兩層C/S體系結(jié)構(gòu)有三個主要組成部分:
1. 數(shù)據(jù)庫服務(wù)器。
? ? 負(fù)責(zé)數(shù)據(jù)管理。
2. 客戶應(yīng)用程序。
? ? 完成與用戶的交互任務(wù)。
3. 網(wǎng)絡(luò)。
三層C/S結(jié)構(gòu)是在兩層C/S結(jié)構(gòu)的基礎(chǔ)上增加了一個應(yīng)用服務(wù)器。整個應(yīng)用邏輯駐留在應(yīng)用服務(wù)器上,只有表示層存在于客戶機(jī)上。應(yīng)用功能分為:
1. 表示層。
? ? 應(yīng)用的用戶接口部分,通常使用圖形用戶界面。
2. 功能層。
? ? 應(yīng)用的主體,實現(xiàn)具體的業(yè)務(wù)處理邏輯。
3. 數(shù)據(jù)層。
? ? 數(shù)據(jù)庫管理系統(tǒng)。
3 以數(shù)據(jù)為中心的體系結(jié)構(gòu)風(fēng)格
3.1 倉庫體系結(jié)構(gòu)風(fēng)格
倉庫是存儲和維護(hù)數(shù)據(jù)的中心場所。
1. 構(gòu)件:中央數(shù)據(jù)結(jié)構(gòu)以及一組對中央數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的獨立構(gòu)件。
2. 連接件:倉庫與獨立構(gòu)件之間的交互。
3.2 黑板體系結(jié)構(gòu)風(fēng)格
黑板系統(tǒng)是一種問題求解模型,是組織推理步驟、控制狀態(tài)數(shù)據(jù)和問題求解之領(lǐng)域知識的概念框架。
4 虛擬機(jī)體系結(jié)構(gòu)風(fēng)格
虛擬機(jī)體系結(jié)構(gòu)風(fēng)格的基本思想是人為構(gòu)建一個運(yùn)行環(huán)境,在這個環(huán)境之上,可以解析與運(yùn)行自定義的一些語言,這樣來增加架構(gòu)的靈活性。
4.1 解釋器體系結(jié)構(gòu)風(fēng)格
一個解釋器通常包括完成解釋工作的解釋引擎,一個包含將被注釋代碼的存儲區(qū),一個記錄解釋引擎當(dāng)前工作狀態(tài)的數(shù)據(jù)結(jié)構(gòu),以及一個記錄源代碼被解釋執(zhí)行進(jìn)度的數(shù)據(jù)結(jié)構(gòu)。
具有解釋器風(fēng)格的軟件中含有一個虛擬機(jī),可以仿真硬件的執(zhí)行過程和一些關(guān)鍵應(yīng)用。
解釋器通常被用來建立一種虛擬機(jī)以彌合程序語義與硬件語義之間的差異。其缺點是執(zhí)行效率較低。
4.2 規(guī)則系統(tǒng)體系結(jié)構(gòu)風(fēng)格
基于規(guī)則的系統(tǒng)包括規(guī)則集、規(guī)則解釋器、規(guī)則/數(shù)據(jù)選擇器及工作內(nèi)存。
5 獨立構(gòu)件體系結(jié)構(gòu)風(fēng)格
獨立構(gòu)件風(fēng)格主要強(qiáng)調(diào)系統(tǒng)中的每個構(gòu)件都是相對獨立的個體,它們之間不直接通信,以降低耦合度,提升靈活性。
5.1 進(jìn)程通信體系結(jié)構(gòu)風(fēng)格
1. 構(gòu)件:通常是命名過程。
2. 連接件:消息傳遞。
? ? 可以是點到點、異步或同步方式及遠(yuǎn)程過程調(diào)用等。
5.2 事件系統(tǒng)體系結(jié)構(gòu)風(fēng)格
事件系統(tǒng)風(fēng)格基于事件的隱式調(diào)用風(fēng)格的思想是構(gòu)件不直接調(diào)用一個過程,而是觸發(fā)或廣播一個或多個事件。
系統(tǒng)中的其他構(gòu)件中的過程在一個或多個事件中注冊,當(dāng)一個事件被觸發(fā),系統(tǒng)自動調(diào)用在這個事件中注冊的所有過程,這樣,一個事件的觸發(fā)就導(dǎo)致了另一模塊中的過程的調(diào)用。
基于事件的隱式調(diào)用風(fēng)格的主要特點是事件的觸發(fā)者并不知道哪些構(gòu)件會被這些事件影響。這使得不能假定構(gòu)件的處理順序,甚至不知道哪些過程會被調(diào)用,因此,許多隱式調(diào)用的系統(tǒng)也包含顯式調(diào)用作為構(gòu)件交互的補(bǔ)充形式。
四、軟件架構(gòu)復(fù)用
1 軟件產(chǎn)品線、核心資產(chǎn)庫、軟件復(fù)用
軟件產(chǎn)品線是指一組軟件密集型系統(tǒng),它們共享一個公共的、可管理的特性集,滿足某個特定市場或任務(wù)的具體需要,是以規(guī)定的方式用公共的核心資產(chǎn)集成開發(fā)出來的。即圍繞核心資產(chǎn)庫進(jìn)行管理、復(fù)用、集成新的系統(tǒng)。
核心資產(chǎn)庫包括軟件架構(gòu)及可剪裁的元素,更廣泛地,它還包括設(shè)計方案及其文檔、用戶手冊、項目管理的歷史記錄、軟件測試計劃和測試用例。
軟件復(fù)用是指系統(tǒng)化的軟件開發(fā)過程:開發(fā)一組基本的軟件構(gòu)造模塊,以覆蓋不同的需求/體系結(jié)構(gòu)之間的相似性,從而提高系統(tǒng)開發(fā)的效率、質(zhì)量和性能。軟件架構(gòu)復(fù)用的分類包括:
1. 機(jī)會復(fù)用。
? ? 指開發(fā)過程中,只要發(fā)現(xiàn)有可用的資產(chǎn),就對其進(jìn)行復(fù)用。
2. 系統(tǒng)復(fù)用。
? ? 指在開發(fā)之前,就要進(jìn)行規(guī)劃,以決定哪些需要復(fù)用。
2 軟件架構(gòu)復(fù)用的對象
以下通通能復(fù)用(程序人的事情能叫抄嗎?):
1. 需求。
2. 架構(gòu)設(shè)計。
3. 元素。
4. 建模與分析。
5. 測試。
6. 項目規(guī)劃。
7. 過程、方法和工具。
8. 人員。
9. 樣本系統(tǒng)。
10. 缺陷消除。
3 軟件架構(gòu)復(fù)用的基本過程
1. 構(gòu)造/獲取可復(fù)用的軟件資產(chǎn)。
2. 管理可復(fù)用資產(chǎn)。文章來源:http://www.zghlxwxcb.cn/news/detail-518185.html
3. 使用可復(fù)用資產(chǎn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-518185.html
到了這里,關(guān)于系統(tǒng)架構(gòu)設(shè)計師 7:系統(tǒng)架構(gòu)設(shè)計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!