軟件體系結(jié)構(gòu)設(shè)計_第1頁
軟件體系結(jié)構(gòu)設(shè)計_第2頁
軟件體系結(jié)構(gòu)設(shè)計_第3頁
軟件體系結(jié)構(gòu)設(shè)計_第4頁
軟件體系結(jié)構(gòu)設(shè)計_第5頁
已閱讀5頁,還剩201頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

軟件體系結(jié)構(gòu)的設(shè)計是軟件開發(fā)的關(guān)鍵,隨著軟件規(guī)模的擴大和復(fù)雜性的提高,軟件體系結(jié)構(gòu)的設(shè)計越來越受到人們的重視。當前,對于軟件體系結(jié)構(gòu)設(shè)計的共識之一是,體系結(jié)構(gòu)設(shè)計應(yīng)當支持對軟件系統(tǒng)質(zhì)量的需求。例如,對健壯性、適應(yīng)性、可重用性和可維護性的需求。這是因為,軟件體系結(jié)構(gòu)包括了早期的設(shè)計決定,體現(xiàn)了系統(tǒng)的全局結(jié)構(gòu),對于整個系統(tǒng)的質(zhì)量有著決定性的影響。但是,正如軟件體系結(jié)構(gòu)的其它概念和方法一樣,對于體系結(jié)構(gòu)設(shè)計人們也沒有形成統(tǒng)一的認識。第5章軟件體系結(jié)構(gòu)設(shè)計參照軟件工程、結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟪绦蛟O(shè)計原理,結(jié)合軟件體系結(jié)構(gòu)設(shè)計本身的特點,總結(jié)出軟件體系結(jié)構(gòu)設(shè)計過程中用到的原理主要有以下幾個:抽象、封裝、信息隱藏、模塊化、注意點分離、耦合和內(nèi)聚、接口和實現(xiàn)分離、分而治之、層次化等。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理1、抽象原理抽象是人們透過事務(wù)繁雜的表面現(xiàn)象,揭示事物本質(zhì)特征的方法,也是軟件體系結(jié)構(gòu)設(shè)計中要用到的基本原理。抽象原理貫穿整個軟件體系結(jié)構(gòu)設(shè)計過程,它是從許多事物中舍棄個別的、非本質(zhì)的特征,抽取共同的、本質(zhì)性的特征。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理抽象可以簡單分成兩類,一類屬于過程抽象,另一類則屬于數(shù)據(jù)抽象。過程抽象是指任何一個具體的操作序列,若它們完成一項邏輯意義上的功能,則其使用者都可把它看作一個單一的邏輯概念。過程抽象的例子,如一個門的“入口”,它隱含了一個很長的過程步的序列(走到門口,伸出手,握住門把,旋轉(zhuǎn)門把和推門,走進門等)。運用過程抽象軟件開發(fā)者可以將一個較大的過程分解成為一些子過程,這些過程都完成一些特定的功能。這就使得開發(fā)者可以在不同的抽象層次上考慮問題。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理數(shù)據(jù)抽象將數(shù)據(jù)類型和施加于該類型對象上的操作作為整體來定義,并限定了對象的值只能通過使用這些操作修改和觀察。數(shù)據(jù)抽象的例子如:一個“工資單”,這個數(shù)據(jù)對象實際上是許多不同信息的集合(開始為單位、姓名、工資總額;接著就是扣除部分,如房租、水電費、取暖費等;最后才是實發(fā)金額)。在說明這個數(shù)據(jù)抽象名時,指的是所有數(shù)據(jù)。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理抽象在眾多的設(shè)計原理當中起著非常重要的作用:抽象是封裝的基礎(chǔ);在處理系統(tǒng)復(fù)雜性方面,抽象起到了重要作用;抽象有助于減少部件耦合、接口和實現(xiàn)的分離等。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理2、封裝原理封裝是將事物的屬性和行為結(jié)合在一起,并且保護事物內(nèi)部信息不受破壞的一種方式。封裝使不同抽象之間有了明確的界限。封裝有利于非功能特性的實現(xiàn),例如可變性和可重用性。封裝由內(nèi)部構(gòu)成和操作服務(wù)兩個方面組成。例如,可以通過對象、模塊設(shè)計和訪問接口設(shè)計實現(xiàn)封裝。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理封裝與信息隱藏有著密切的聯(lián)系。事實上,人們對信息隱藏的認識來源于封裝,封裝則為信息隱藏提供了支持。封裝保證了模塊間的相對獨立性,使得程序的維護和修改較為容易。對應(yīng)用程序的修改僅限于類的內(nèi)部,因而可以將應(yīng)用程序修改帶來的影響減少到最低限度。抽象和信息隱藏從兩個不同的方面說明了模塊化設(shè)計的特征。抽象幫助定義了構(gòu)成軟件的過程實體,而信息隱藏實施了過程細節(jié)的約束。這些對模塊化設(shè)計帶來了莫大的益處。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理在軟件體系結(jié)構(gòu)的定義中,構(gòu)件和連接件被公認為體系結(jié)構(gòu)的兩大類構(gòu)成部分。在這里,封裝原理的應(yīng)用起了關(guān)鍵作用。一般認為,構(gòu)件是具有一定的功能,能夠獨立工作或能同其它構(gòu)件裝配起來協(xié)調(diào)工作的軟件實體,并且構(gòu)件的使用與它的開發(fā)、生產(chǎn)無關(guān)。從抽象化的角度來看,面向?qū)ο蠹夹g(shù)已經(jīng)達到了類級重用,但仍然是一種代碼級的重用,它以類為封裝的單位。這樣的重用粒度還太小,不足以解決異構(gòu)互操作和效率更高的重用。構(gòu)件則是對一組類的組合進行封裝,是一種更高層次的抽象,并代表完成一個或多個功能的特定服務(wù),也為用戶提供了多個接口。整個構(gòu)件隱藏了具體的實現(xiàn),只用接口提供服務(wù)。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理3、信息隱藏原理信息隱藏對用戶隱藏了部件的實現(xiàn)細節(jié)。因此,可以用來更好地處理系統(tǒng)的復(fù)雜性和減少各模塊之間的耦合。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理信息隱藏的內(nèi)容也不是一成不變的,在不同的應(yīng)用中模塊所需隱藏的內(nèi)容可能不一樣,因為在一個應(yīng)用中客戶不需要知道的方面或許在另一個應(yīng)用中就需要看到。例如,在一個應(yīng)用中為了提高運行性能,可能需要對某一部件的內(nèi)部數(shù)據(jù)結(jié)構(gòu)進行直接的訪問;而在另外一個應(yīng)用中,可能因為對其性能已經(jīng)滿意了,就不需要對其數(shù)據(jù)直接訪問了。信息隱藏的原理指出:應(yīng)該這樣設(shè)計和確定一個模塊,使得一個模塊內(nèi)包含的信息對于不需要這些信息的模塊是不能訪問的。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理4、模塊化原理模塊化主要關(guān)心的是如何將一個軟件系統(tǒng)分解成多個子系統(tǒng)和部件,主要任務(wù)就是決定怎樣將構(gòu)成應(yīng)用的邏輯結(jié)構(gòu)獨立地分割成代碼實體。模塊化的作用是提供一個應(yīng)用的功能和責(zé)任的物理容器。由此帶來的復(fù)雜系統(tǒng)資源管理、維護和應(yīng)用的邏輯和條理性,增加了應(yīng)用設(shè)計的靈活性。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理好的設(shè)計通常是很好地實現(xiàn)了模塊化的,這樣有利于系統(tǒng)的維護和升級。設(shè)計應(yīng)該是由那些易于替換、自成體系的基本構(gòu)件構(gòu)成的,這樣,可以大大有利于初期的開發(fā)和后期的維護。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理在體系結(jié)構(gòu)設(shè)計中,如果注重了模塊化的概念就可以限制更改設(shè)計所造成的影響范圍。也就是說,可以在不影響其它部件結(jié)構(gòu)的情況下改變一個部件的設(shè)計。這種模塊化只能容納部件內(nèi)部設(shè)計的變化,但是應(yīng)該保證界面和行為與先前設(shè)計的一致。這樣,程序員只需要熟悉部件本身就可以實施變更,而不需要了解整體。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理5、注意點分離原理不同和無關(guān)聯(lián)的責(zé)任應(yīng)該出現(xiàn)在系統(tǒng)不同的部件中,讓它們相互獨立地分離開來。相互協(xié)作完成某一個特定任務(wù)的部件也應(yīng)該和在其它任務(wù)中執(zhí)行的計算部件分離開來。如果一個部件在不同的環(huán)境下扮演著不同的角色,在部件中這些角色應(yīng)該獨立且相互分離。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理軟件系統(tǒng)的部件應(yīng)該具有單一的功能,它們或?qū)崿F(xiàn)策略或處理問題,但一個部件不要同時處理兩者。策略部件負責(zé)處理上下文相關(guān)的決策、信息的語義和解釋的知識、把不相交計算組合形成結(jié)果、對參數(shù)值進行選擇等問題。實現(xiàn)部件負責(zé)全面規(guī)范算法的執(zhí)行,執(zhí)行中不需要對上下文相關(guān)信息進行決策。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理純實現(xiàn)部件獨立于特定的上下文環(huán)境,因此更容易重用和維護,而策略部件通常是與特定應(yīng)用相關(guān)的,需要隨著應(yīng)用的變化而改變。如果不能將一個軟件體系結(jié)構(gòu)分解成策略和實現(xiàn)的不同部件,至少應(yīng)該在一個部件內(nèi)將策略和實現(xiàn)功能加以分離。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理6、耦合和內(nèi)聚原理耦合和內(nèi)聚在結(jié)構(gòu)化程序設(shè)計時期是作為結(jié)構(gòu)化設(shè)計方法的部分原理而提出來的,在軟件體系結(jié)構(gòu)設(shè)計中同樣是重要的原理之一。耦合一般強調(diào)具有相互平行關(guān)系的模塊之間的特征,而內(nèi)聚強調(diào)同一模塊內(nèi)部的特性。耦合是反映了一個模塊與另一個模塊聯(lián)系的緊密程度的。緊密的耦合會使系統(tǒng)各部分的關(guān)系變得復(fù)雜,通過弱耦合部件的設(shè)計可以降低系統(tǒng)的復(fù)雜性。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理模塊耦合度反映了軟件結(jié)構(gòu)中各個不同模塊之間互相關(guān)聯(lián)的程度。耦合的強弱取決于模塊間接口的復(fù)雜性、進入或調(diào)用模塊的位置、通過界面?zhèn)魉蛿?shù)據(jù)的多少等。模塊耦合度有以下7個等級:(1)非直接耦合。這種耦合關(guān)系是指兩個模塊之間不依賴對方就能獨立工作,各模塊間沒有什么信息傳遞。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理(2)數(shù)據(jù)耦合。兩個模塊之間僅限于數(shù)據(jù)信息的交換,模塊彼此之間通過數(shù)據(jù)參數(shù)來交換輸入輸出信息稱為數(shù)據(jù)耦合。(3)特征耦合。在特征耦合中,兩個模塊之間交換的是數(shù)據(jù)結(jié)構(gòu)。以這種方式耦合,當數(shù)據(jù)結(jié)構(gòu)發(fā)生變化時本來無關(guān)的模塊也要作相應(yīng)的更改。(4)控制耦合??刂岂詈现傅氖莾蓚€模塊傳遞的信息含有控制信息(一些開關(guān)值或標志量)。控制模塊往往是一個模塊依賴于另一個模塊,這樣會增加系統(tǒng)的復(fù)雜性。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理(5)外部耦合。如果若干個模塊與同一個外部環(huán)境有相互作用,則稱這種耦合為外部耦合。(6)公共耦合。公共耦合是指若干個模塊(一組模塊)通過全局的數(shù)據(jù)文件、物理設(shè)備等(全局變量、公用的內(nèi)存、公共覆蓋)環(huán)境相互作用。(7)內(nèi)容耦合。內(nèi)容耦合是指一個模塊使用另一個模塊內(nèi)部的數(shù)據(jù)或控制信息,一個模塊直接轉(zhuǎn)移到另一個模塊內(nèi)部。模塊設(shè)計的基本原則是要盡量使用數(shù)據(jù)耦合,減少控制耦合,限制外部耦合和公共耦合,不使用內(nèi)容耦合。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理模塊內(nèi)聚度又稱為模塊聚合度,是指模塊內(nèi)各個部分之間的聯(lián)系程度(塊內(nèi)聯(lián)系),也就是說模塊內(nèi)各元素結(jié)合的緊密程度,模塊聚合度也有以下7個等級:(1)偶然性聚合。一個模塊內(nèi)各個成分之間只是在功能上具有相似性而組合在一起,它們相互之間的關(guān)系是松散的,模塊是偶然分出來的。常見的現(xiàn)象是,當編寫完一個程序之后,發(fā)現(xiàn)一組語句在兩處或兩處以上出現(xiàn),為了節(jié)省空間,把這些語句提取出來成為一個模塊(在這之前原本沒有想到的)。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理偶然聚合的模塊各種元素之間并沒有實質(zhì)性的聯(lián)系,所以往往在一種應(yīng)用場合要修改這個模塊,在另一個場合又不允許這種修改,從而陷入困境,不易修改。另一個缺點是模塊實現(xiàn)的功能含義不易理解,難以命名,也難以測試。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理(2)邏輯性聚合。將邏輯上相關(guān)的多項任務(wù)組合在同一個模塊,或者在邏輯上把屬于相同或相似的功能放在一個模塊,該模塊稱為邏輯性聚合。例如,模塊M具有計算全班平均分和最高分的功能,調(diào)用時傳遞一個控制信號(開關(guān)量)到被調(diào)用模塊,從而決定執(zhí)行相對應(yīng)的功能。程序中對于多種情況判斷,可能湊合多個功能在一個界面,這類模塊的主要缺點也是不易修改。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理(3)時間性聚合。將幾個必須在同一時間內(nèi)執(zhí)行的任務(wù)安排在一個模塊,稱為時間性聚合。例如,系統(tǒng)初始化工作要求一次做完。(4)過程性聚合。將一些必須按特定的次序執(zhí)行的、彼此相關(guān)的一組任務(wù)組成一個模塊,稱為過程性聚合。(5)通信性聚合。在模塊中的成分,都將對數(shù)據(jù)結(jié)構(gòu)的同一區(qū)域進行操作,以達到通信的目的,稱為通信性聚合。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理(6)順序性聚合。順序性聚合指一個模塊內(nèi)的各種處理成分均與同一個功能相關(guān),且這些處理必須按順序執(zhí)行。模塊內(nèi)各個元素(成分)是按順序執(zhí)行的,可能一個成分的輸出是下一個成分的輸入。(7)功能性聚合。模塊內(nèi)所有成分完成一個單一的、完整的功能,則稱為功能性聚合。例如,求平方根、計算每小時工資、計算利息等。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理

模塊設(shè)計聚合度的等級如下:低聚合:(1)、(2)、(3)中聚合:(4)、(5)高聚合:(6)、(7)模塊設(shè)計的要求是盡量地達到高聚合、低耦合。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理7、接口和實現(xiàn)分離原理在軟件體系結(jié)構(gòu)中,任何一個部件都包括了兩個部分:接口與實現(xiàn)。接口部分給出了部件所提供的功能定義,并對功能的使用方法進行了規(guī)范。該接口對部件的客戶是可以訪問的。該類型的輸出接口是由函數(shù)原型構(gòu)成的。實現(xiàn)部分包括了實際代碼,即對所提供功能的具體實現(xiàn)的描述。實現(xiàn)部分還可以包含只服務(wù)于部件內(nèi)部操作的、另外的函數(shù)和數(shù)據(jù)結(jié)構(gòu)。實現(xiàn)部分對部件客戶來說是不可用的。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理該原理要求只為客戶提供部件的接口規(guī)范和使用方法,主要目的是為了防止部件的客戶接觸到實現(xiàn)的細節(jié)而造成意外的影響。另外,該原理還允許獨立于其它部件的應(yīng)用,而實現(xiàn)一個部件的功能。接口和實現(xiàn)的分離也支持可變性。也就是說接口和實現(xiàn)分離的部件更容易在系統(tǒng)中進行改變。這種分離避免了客戶直接受到部件變化的影響。該原理使部件行為和表示的改變特別容易,尤其是那些不影響接口的改變,例如對運行性能的提高。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理8、分而治之原理早在古代封建國家中,君主為了有效地統(tǒng)治一個國家,往往使用分而治之的方法。在計算機科學(xué)中,這種思想得到了借鑒。分而治之是對問題進行橫向分割、把大問題分解成許多小問題、把復(fù)雜的問題變成簡單問題的組合思想。在軟件體系結(jié)構(gòu)中該原理也得到大量運用。例如,自上而下設(shè)計將一個任務(wù)或部分分成可以獨立設(shè)計的更小的部分。該原理經(jīng)常被用來作為注意點分離的方法。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理9、層次化原理人們對復(fù)雜事物的處理通常有兩種方法,即:將問題進行橫向分割的分而治之的方法和縱向分割問題的分層次處理的方法。后者的處理方法是把一個問題分解成多個結(jié)構(gòu),這些結(jié)構(gòu)是建立在基礎(chǔ)概念和思想上的、多層次的、自底向上逐步抽象的分析和表達之上的,每一層處理該層次的問題,服務(wù)于該層次的要求。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理

利用層次化原理的優(yōu)點主要有以下幾點:(1)支持基于抽象程度遞增的系統(tǒng)設(shè)計,使設(shè)計者可以把一個復(fù)雜系統(tǒng)按遞增的步驟進行求解。各層實現(xiàn)技術(shù)的改變不影響其它各層。易于實現(xiàn)和維護。(2)支持功能增強,因為每一層至多和相鄰的上下層交互,所以功能的改變最多影響相鄰的上下層。(3)支持靈活的使用和重用。各層之間相互獨立,各層都可以采用最合適的技術(shù)來實現(xiàn),只要提供的服務(wù)接口定義不變,同一層的不同實現(xiàn)就可以交換使用。這樣,就可以定義一組標準的接口,而允許各種不同的實現(xiàn)方法。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理

利用分層原理設(shè)計體系結(jié)構(gòu)的不足之處在于:(1)并不是每個系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個系統(tǒng)的邏輯結(jié)構(gòu)是層次化的。設(shè)計者出于對系統(tǒng)性能的考慮,往往把一些低級高級的功能綜合起來。(2)效率的降低。分層風(fēng)格構(gòu)成的系統(tǒng),效率往往低于整體結(jié)構(gòu)。在上層中的服務(wù)如果有很多依賴于最底層,則相關(guān)的數(shù)據(jù)必須通過一些中間層的若干層次轉(zhuǎn)化,才能傳到。(3)難于認可合適的、正確的層次抽象方法。層次太少,分層不能完全發(fā)揮這種風(fēng)格的可重用性、可更改性和可移植性上的潛力;然而,如果層次過多,則會引入不必要的復(fù)雜性和層間隔離冗余以及層間傳輸?shù)拈_銷。目前,沒有可行的、廣為人們所認可的、層粒度的確定和層任務(wù)的分配方法。第5章軟件體系結(jié)構(gòu)設(shè)計5.1軟件體系結(jié)構(gòu)設(shè)計的一般原理設(shè)計模式的概念最早是由美國的一位叫做christopherAlexander的建筑理論家提出來的,他認為:每一個模式描述了一個在我們身邊一再發(fā)生的問題,它告訴我們這個問題的解的關(guān)鍵,以使你可以成千上萬次地利用這個解,而不需要再一次去解它。他本身是把設(shè)計模式應(yīng)用在建筑物和城鎮(zhèn)的設(shè)計中,可他的思想逐漸地影響了軟件設(shè)計。第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式概述

5.2設(shè)計模式

Alexander提出的模式是指經(jīng)過時間考驗的解決方案,使用模式可以降低解決問題的復(fù)雜度。在編程時,很多情況下代碼都不是從頭編寫,而是經(jīng)過模仿得到,即從別處搬過來,再經(jīng)過一定改造使之適應(yīng)當前情況。設(shè)計模式可以視為這種模仿的一種抽象,包含一組規(guī)則,描述了如何在軟件開發(fā)領(lǐng)域中完成一定的任務(wù)。第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式概述

5.2設(shè)計模式

所謂設(shè)計模式,簡單地理解,是一些設(shè)計面向?qū)ο蟮能浖_發(fā)的經(jīng)驗總結(jié)。一個設(shè)計模式事實上是系統(tǒng)地命名、解釋和評價某一個重要的可重現(xiàn)的面向?qū)ο蟮脑O(shè)計方案。設(shè)計模式為了使用者溝通方便,都有一個名字,有一個問題/解決方案對,列出該設(shè)計模式解決什么問題,用什么樣的解決方案。

設(shè)計模式概述

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式概述

利用設(shè)計模式可以方便地重用成功的設(shè)計和結(jié)構(gòu)。把已經(jīng)證實的技術(shù)表示為設(shè)計模式,使它們更加容易被新系統(tǒng)的開發(fā)者所接受。設(shè)計模式幫助設(shè)計師選擇可使系統(tǒng)重用的設(shè)計方案,避免選擇危害到可重用性的方案。在對軟件體系結(jié)構(gòu)進行設(shè)計時也可使用一些設(shè)計模式。我們先看一個例子:在開發(fā)人機界面軟件時考慮使用MVC(模型-視圖-控制器)模式。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計在要開發(fā)的軟件中,用戶界面承擔(dān)著向用戶顯示問題模型、與用戶進行操作、輸入/輸出交互的作用。用戶希望保持交互操作界面的相對穩(wěn)定,但更希望根據(jù)需要改變和調(diào)整顯示的內(nèi)容和形式。例如,要求支持不同的界面標準或得到不同的顯示效果,適應(yīng)不同的操作需求。這就要求界面結(jié)構(gòu)能夠在不改變軟件功能的情況下,支持用戶對界面結(jié)構(gòu)的調(diào)整。要做到這一點,從界面構(gòu)成的角度看,困難在于:在滿足界面要求的同時,如何使軟件的計算模型獨立于界面的構(gòu)成。而MVC正是這樣的一種交互界面的結(jié)構(gòu)組織模型,能夠滿足軟件的要求,因此考慮使用該模式。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計對于界面設(shè)計可變性的需求,MVC把交互系統(tǒng)的組成分解成模型、視圖、控制三種構(gòu)件。其中模型構(gòu)件獨立于外在顯示內(nèi)容和形式,是軟件所處理的問題邏輯的內(nèi)在抽象,它封裝了問題的核心數(shù)據(jù)、邏輯和功能的計算關(guān)系,獨立于具體的界面表達和輸入/輸出操作;視圖構(gòu)件把表示模型數(shù)據(jù)及邏輯關(guān)系和狀態(tài)的信息以特定形式展示給用戶,它從模型獲得顯示信息,對于相同的信息可以有多個不同的顯示形式或視圖;控制構(gòu)件處理用戶與軟件的交互操作,其職責(zé)是決定軟件的控制流程,確保用戶界面與模型間的對應(yīng)聯(lián)系,它接受用戶的輸入,將輸入反饋給模型,進而實現(xiàn)對模型的計算控制,它是使模型和視圖協(xié)調(diào)工作的部件。

設(shè)計模式概述

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計模型、視圖和控制器的分離,使得一個模型可以具有多個顯示視圖。如果用戶通過某個視圖的控制器改變了模型的數(shù)據(jù),所有其它依賴于這些數(shù)據(jù)的視圖都應(yīng)反映出這些變化。因此,無論何時發(fā)生了何種數(shù)據(jù)變化,控制器都會將變化通知所有的視圖,導(dǎo)致顯示的更新。

設(shè)計模式概述

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

從上面的例子中,我們可以導(dǎo)出軟件體系結(jié)構(gòu)模式的下列屬性:一個模式關(guān)注一個在特定設(shè)計環(huán)境中出現(xiàn)的重現(xiàn)設(shè)計問題,并為它提供一個解決方案。在我們的例子中,問題是支持用戶界面的可變性,解決方案是使用MVC模式使模型和視圖分離。

設(shè)計模式概述

一個好的模式必須做到以下幾點:◎解決一個問題:從模式可以得到解,而不僅僅是抽象的原則或策略?!蚴且粋€被證明了的概念:模式通過—個記錄得到解.而不是通過理論或推測。◎解并不是顯然的:許多解決問題的方法(例如軟件設(shè)計范例或方法)是從最基本的原理得到解;而最好的方法是以非直接的方式得到解,對大多數(shù)比較困難的設(shè)計問題來說,這是必要的。◎描述了一種關(guān)系:模式并不僅僅描述模塊,它給出更深層的系統(tǒng)結(jié)構(gòu)和機理?!蚰J接兄匾娜藶橐蛩兀核械能浖?wù)于人類的舒適或生活質(zhì)量,而最好的模式追求它的實用性和美學(xué)。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式的四個基本成分

(1)模式名稱模式名稱通常用來描述一個設(shè)計問題、它的解法和后果,由一到兩個詞組成。模式名稱的產(chǎn)生使我們可以在更高的抽象層次上進行設(shè)計并交流設(shè)計思想。因此尋找好的模式名稱是一個很重要也很困難的工作。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式的四個基本成分

(2)問題

問題告訴我們什么時候要使用設(shè)計模式、解決問題及其背景。例如,MVC模式關(guān)心用戶界面經(jīng)常變化的問題。模式的問題陳述用一個強制條件集來表示,以說明問題要解決時應(yīng)該考慮的各個方面。例如:*解決方案必須滿足的需求。*必須考慮的約束。*解決方案必須具有期望的特性。

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式的四個基本成分

MVC模式指出了兩個強制條件:它必須易于修改用戶界面,但軟件的功能核心不能被修改所影響。一般地,強制條件從多個角度討論問題并有助于設(shè)計師了解它的細節(jié)。強制條件可以相互補充或相互矛盾。對強制條件平衡的越好,對問題的解決方案就越好。所以,強制條件的詳細討論是問題陳述的重要部分。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式的四個基本成分

(3)解決方案

解決方案描述設(shè)計的基本要素,它們的關(guān)系、各自的任務(wù)以及相互之間的合作。解決方案并不是針對某一個特殊問題而給出的。設(shè)計模式提供有關(guān)設(shè)計問題的一個抽象描述以及如何安排這些基本要素以解決問題。一個模式就像一個可以在許多不同環(huán)境下使用的模板,抽象的描述使我們可以把該模式應(yīng)用于解決許多不同的問題。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計模式的解決方案部分給出了如何解決再現(xiàn)問題,或者更恰當?shù)卣f是如何平衡與之相關(guān)的強制條件。在軟件體系結(jié)構(gòu)中,這樣的解決方案包括兩個方面。第一,每個模式規(guī)定了一個特定的結(jié)構(gòu),即元素的一個空間配置。第二,每個模式規(guī)定了運行期間的行為。

設(shè)計模式的四個基本成分

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計值得注意的是:解決方案不必解決與問題相關(guān)的所有強制條件??梢约杏谔厥獾膹娭茥l件,而對于剩下的強制條件進行部分解決或完全不解決,特別是強制條件相互矛盾時。

設(shè)計模式的四個基本成分

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計(4)后果

后果描述應(yīng)用設(shè)計模式后的結(jié)果和權(quán)衡。比較與其他設(shè)計方法的異同,得到應(yīng)用設(shè)計模式的代價和優(yōu)點。對于軟件設(shè)計來說,通常要考慮的是空間和時間的權(quán)衡。也會涉及語言問題和實現(xiàn)問題。對于一個面向?qū)ο蟮脑O(shè)計而言,可重用性很重要,后果還包括對系統(tǒng)靈活性、可擴充性及可移植性的影響。明確看出這些后果有助于理解和評價設(shè)計模式。

設(shè)計模式的四個基本成分

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計為了更好地理解和討論模式,必須以適當形式描述模式。好的模式描述有助于我們立即抓住模式的本質(zhì),即模式關(guān)心的問題是什么,它提出的解決方案是什么。模式應(yīng)該以同一方式來描述,這有助于對模式進行比較。描述模式時,僅僅依靠圖示的方法是不夠的。為了重用設(shè)計,還應(yīng)該記錄下產(chǎn)生這個設(shè)計的決策和權(quán)衡過程。具體的實例也很重要。

設(shè)計模式的描述5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

模式概念的創(chuàng)始者Alexander采用下面的格式來描述設(shè)計模式:

IFyoufindyourselfinCONTEXTForexampleEXAMPLES,WithPROBLEM,EntailingFORCESSTHENforsomeREASONS,ApplyDESIGNFORMAND/ORRULEToconstructSOLUTIONLeadingtoNEWCONTEXTandOTHERPATTERNS

設(shè)計模式的描述5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式的描述ErichGamma博士等人采用下面的固定模式來描述,這也是目前最常用的格式:(1)模式名稱和分類:模式名稱和一個簡短的摘要。(2)目的:回答下面的問題,即本設(shè)計模式的用處、它的基本原理和目的、它針對的是什么特殊的設(shè)計問題。(3)別名:由于設(shè)計模式的提取是由許多專家得到的,同一個模式可能會被不同的專家冠以不同的命名。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計(4)動機:描述一個設(shè)計問題的方案,以及模式中類和對象的結(jié)構(gòu)是如何解決這個問題。(5)應(yīng)用:在什么情況下可以應(yīng)用本設(shè)計模式,如何辨認這些情況。(6)結(jié)構(gòu):用對象模型技術(shù)對本模式的圖像表示。另外,也給出了對象間相互的要求和合作的內(nèi)在交互圖。

設(shè)計模式的描述5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式的描述(7)成分:組成本設(shè)計模式的類和對象及它們的職責(zé)。(8)合作:成分間如何合作實現(xiàn)它們的任務(wù)。(9)后果:該模式如何支持它的對象;如何在使用本模式時進行權(quán)衡,即其結(jié)果如何;可以獨立地改變系統(tǒng)結(jié)構(gòu)的哪些方面。(10)實現(xiàn):在實現(xiàn)本模式的過程中,要注意哪些缺陷、線索或者技術(shù);是否與編程語言有關(guān)。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計(11)例程代碼:說明如何用C++或其他語言來實現(xiàn)該模式的代碼段。

(12)已知的應(yīng)用:現(xiàn)實系統(tǒng)中使用該模式的實例。(13)相關(guān)模式:與本模式相關(guān)的一些其他模式,它們之間的區(qū)別,以及本模式是否要和其他模式共同使用。

設(shè)計模式的描述5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

模式和軟件體系結(jié)構(gòu)

判斷模式取得成功的一個重要準則是它們在多大程度上達到了軟件工程的目標。模式必須支持復(fù)雜的、大規(guī)模系統(tǒng)的開發(fā)、維護以及演化。它們也必須支持有效的產(chǎn)業(yè)化的軟件生產(chǎn),否則它們對于構(gòu)造軟件沒有什么用途。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計1、模式作為體系結(jié)構(gòu)構(gòu)造塊在開發(fā)軟件時,模式是處理受限的特定設(shè)計方面的有用構(gòu)造塊。因此,對軟件體系結(jié)構(gòu)而言,模式的一個重要目標就是用已定義屬性進行特定的軟件體系結(jié)構(gòu)的構(gòu)造。例如MVC模式?,F(xiàn)有的技術(shù)僅提供構(gòu)建軟件的一般技術(shù),缺乏體系結(jié)構(gòu)的創(chuàng)建技術(shù)。模式填補了這一缺口。

模式和軟件體系結(jié)構(gòu)

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計2、構(gòu)造異構(gòu)體系結(jié)構(gòu)單個模式不能完成一個完整的軟件體系結(jié)構(gòu)的詳細構(gòu)造,它僅僅幫助設(shè)計師設(shè)計應(yīng)用程序的某一方面。然而,即使正確設(shè)計了這個方面,整個體系結(jié)構(gòu)仍然可能達不到預(yù)期的所有屬性。為“整體上”達到軟件體系結(jié)構(gòu)的需求,需要一套豐富的涵蓋許多不同設(shè)計問題的模式??色@得的模式越多,能夠被適當解決的設(shè)計問題也會越多。

模式和軟件體系結(jié)構(gòu)

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計為了有效使用模式,需要將它們組織成模式系統(tǒng)。模式系統(tǒng)統(tǒng)一描述模式,對它們分類,更重要的是,說明它們之間如何交互。模式系統(tǒng)也有助于設(shè)計師找到正確的模式來解決一個問題或確認一個可選解決方案。

模式和軟件體系結(jié)構(gòu)

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式方法分類

◎Coad的面向?qū)ο竽J健?/p>

代碼模式◎

框架應(yīng)用模式◎

形式合約5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式方法分類

1、Coad的面向?qū)ο竽J?992年,美國的面向?qū)ο蠹夹g(shù)的大師PeterCoad從MVC的角度對面向?qū)ο笙到y(tǒng)進行了討論,設(shè)計模式由最底層的構(gòu)成部分(類和對象)及其關(guān)系來區(qū)分。他使用了一種通用的方式來描述一種設(shè)計模式:(1) 模式所能解決問題的簡要介紹與討論;(2) 模式的非形式文本描述以及圖形表示;(3) 模式的使用方針:在何時使用以及能夠與哪些模式結(jié)合使用。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

將Coad的模式劃分為以下三類:(1)基本的繼承和交互模式:主要包括OOPL所提供的基本建模功能,繼承模式聲明了一個類能夠在其子類中被修改或被補充,交互模式描述了在有多個類的情況下消息的傳遞。(2)面向?qū)ο筌浖到y(tǒng)的結(jié)構(gòu)化模式:描述了在適當情況下,一組類如何支持面向?qū)ο筌浖到y(tǒng)結(jié)構(gòu)的建模。(3)與MVC框架相關(guān)的模式。幾乎所有Coad提出的模式都指明如何構(gòu)造面向?qū)ο筌浖到y(tǒng),有助于設(shè)計單個的或者一小組構(gòu)件,描述了MVC框架的各個方面。但是,他沒有重視抽象類和框架,沒有說明如何改造框架。

設(shè)計模式方法分類

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計2、代碼模式代碼模式的抽象方式與OOPL中的代碼規(guī)范很相似,該類模式有助于解決某種面向?qū)ο蟪绦蛟O(shè)計語言中的特定問題。主要目標在于:(1) 指明結(jié)合基本語言概念的可用方式;(2) 構(gòu)成源碼結(jié)構(gòu)與命名規(guī)范的基礎(chǔ);(3) 避免面向?qū)ο蟪绦蛟O(shè)計語言(尤其是C++語言)的缺陷。代碼模式與具體的程序設(shè)計語言或者類庫有關(guān),它們主要從語法的角度對于軟件系統(tǒng)的結(jié)構(gòu)方面提供一些基本的規(guī)范。這些模式對于類的設(shè)計不適用,同時也不支持程序員開發(fā)和應(yīng)用框架,命名規(guī)范是類庫中的名字標準化的基本方法,以免在使用類庫時產(chǎn)生混淆。

設(shè)計模式方法分類

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計3、框架應(yīng)用模式在應(yīng)用程序框架“菜譜”中有很多“菜譜條”,它們用一種不很規(guī)范的方式描述了如何應(yīng)用框架來解決特定的問題。程序員將框架作為應(yīng)用程序開發(fā)的基礎(chǔ),特定的框架適用于特定的需求。“菜譜條”通常并不講解框架的內(nèi)部設(shè)計實現(xiàn),只講如何使用。不同的框架有各自的“菜譜”。

設(shè)計模式方法分類

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計優(yōu)點:(1)符號所包含的元素很少,并且其中引入的概念能夠被映射成為面向?qū)ο蟪绦蛟O(shè)計語言中的概念。例如,參與者映射成為對象。(2)形式合約中考慮到了復(fù)雜行為是由簡單行為組成的事實,合約的修訂和擴充操作使得這種方法很靈活,易于應(yīng)用。4、形式合約(1)形式合約也是一種描述框架設(shè)計的方法,強調(diào)組成框架的對象間的交互關(guān)系。有人認為它是面向交互的設(shè)計,對其他方法的發(fā)展有啟迪作用。但形式化方法由于其過于抽象,而有很大的局限性,僅僅在小規(guī)模程序中使用。

設(shè)計模式方法分類

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計4、形式合約(2)缺點:(1)在某些情況下很難用,過于繁瑣。若引入新的符號,則又使符號系統(tǒng)復(fù)雜化。(2)強制性的要求過分精密,從而在說明中可能發(fā)生隱患(例如冗余)。(3)形式合約的抽象程度過低,接近面向?qū)ο蟮某绦蛟O(shè)計語言,不易分清主次。

設(shè)計模式方法分類

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計

設(shè)計模式目錄的內(nèi)容

Gamma在他的《DesignPatterns:ElementsofReusableObject-OrientedSoftware》一書中提出了23種設(shè)計模式,他用一種類似分類目錄的形式將設(shè)計模式記載下來。根據(jù)模式的目標(所做的事情),可以將它們分成創(chuàng)建性模式(creational)、結(jié)構(gòu)性模式(structural)和行為性模式(behavioral)。創(chuàng)建性模式處理的是對象的創(chuàng)建過程,結(jié)構(gòu)性模式處理的是對象/類的組合,行為性模式處理類和對象間的交互方式和任務(wù)分布。5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計在EricJ.Braude著的書《SoftwareDesignFromProgrammingtoArchitecture》(電子工業(yè)出版社出版了由李仁發(fā)等譯的書《軟件設(shè)計——從程序設(shè)計到體系結(jié)構(gòu)》)的第二部分中,詳細講述了創(chuàng)建型、結(jié)構(gòu)型和行為型設(shè)計模式。

設(shè)計模式目錄的內(nèi)容

5.2設(shè)計模式

第5章軟件體系結(jié)構(gòu)設(shè)計元模型是對各種體系結(jié)構(gòu)設(shè)計模型的抽象。使用這個模型對當前的各種體系結(jié)構(gòu)設(shè)計方法進行分析和比較。元模型如圖5-2所示。各種不同的體系結(jié)構(gòu)設(shè)計方法都可以描述成圖5-2所示的元模型的實例。每種方法在過程的順序上、在概念的特定內(nèi)容上有所不同。5.3軟件體系結(jié)構(gòu)設(shè)計的元模型第5章軟件體系結(jié)構(gòu)設(shè)計5.3軟件體系結(jié)構(gòu)設(shè)計的元模型第5章軟件體系結(jié)構(gòu)設(shè)計圖中用圓角矩形表示概念,用連線表示概念之間的關(guān)聯(lián),用菱形符號表示3~4個概念之間的關(guān)聯(lián)。下面分別介紹其中的概念。(1)客戶客戶的概念用于表示那些關(guān)心軟件體系結(jié)構(gòu)設(shè)計的系統(tǒng)相關(guān)人員。這些系統(tǒng)相關(guān)人員可能是客戶、最終用戶、系統(tǒng)開發(fā)人員、系統(tǒng)維護人員、銷售人員等。5.3軟件體系結(jié)構(gòu)設(shè)計的元模型第5章軟件體系結(jié)構(gòu)設(shè)計

(2)需求規(guī)格說明需求規(guī)格說明的概念用于表示規(guī)格說明,該規(guī)格說明描述了所要開發(fā)的體系結(jié)構(gòu)的系統(tǒng)需求。在圖中,客戶、領(lǐng)域知識和需求規(guī)格說明之間有三重關(guān)聯(lián)關(guān)系。這一關(guān)系意味著在定義需求規(guī)格說明時,不僅用到了客戶,也用到了領(lǐng)域知識。這一關(guān)聯(lián)關(guān)系并沒有定義處理的順序,不同的體系結(jié)構(gòu)設(shè)計方法可能有不同的處理順序。5.3軟件體系結(jié)構(gòu)設(shè)計的元模型第5章軟件體系結(jié)構(gòu)設(shè)計(3)制品制品的概念表示某一方法的制品描述。這是指諸如制品類、制品操作、制品屬性等。一般來說,每種制品都有一套與之相關(guān)的試探法,用來標識相關(guān)的制品實例。(4)解決方案抽象解決方案抽象的概念定義了體系結(jié)構(gòu)中(子)結(jié)構(gòu)的概念表示。在需求規(guī)格說明、領(lǐng)域知識、制品和解決方案抽象之間,存在著四重關(guān)聯(lián)關(guān)系。它描述了在導(dǎo)出解決方案抽象時這些概念相互之間的結(jié)構(gòu)關(guān)系。5.3軟件體系結(jié)構(gòu)設(shè)計的元模型第5章軟件體系結(jié)構(gòu)設(shè)計(5)體系結(jié)構(gòu)描述體系結(jié)構(gòu)描述的概念定義了軟件體系結(jié)構(gòu)的規(guī)格說明。在解決方案抽象、體系結(jié)構(gòu)描述和領(lǐng)域知識之間存在著三重關(guān)聯(lián)關(guān)系。該關(guān)聯(lián)關(guān)系被稱作體系結(jié)構(gòu)規(guī)格說明,它使用以上三個概念表示體系結(jié)構(gòu)的規(guī)格說明。(6)領(lǐng)域知識領(lǐng)域知識的概念用于表示在解決某一問題中所應(yīng)用的知識的范圍。在元模型中,有三處用到了領(lǐng)域知識的概念。由于這一概念在各種體系結(jié)構(gòu)設(shè)計方法中都扮演著基礎(chǔ)角色,因此在這里對其進行詳細說明。5.3軟件體系結(jié)構(gòu)設(shè)計的元模型第5章軟件體系結(jié)構(gòu)設(shè)計在不同的方法中,“領(lǐng)域”這一術(shù)語有著不同的含義。區(qū)分以下幾種特殊化的“領(lǐng)域”概念:問題領(lǐng)域知識、商業(yè)領(lǐng)域知識、解決方案領(lǐng)域知識、通用知識。領(lǐng)域知識概念的分類如圖5-3所示。5.3軟件體系結(jié)構(gòu)設(shè)計的元模型第5章軟件體系結(jié)構(gòu)設(shè)計問題領(lǐng)域知識是指客戶觀點下的與問題有關(guān)的知識。它包括需求規(guī)格說明文檔、與客戶面談、客戶發(fā)布的原型等。商業(yè)領(lǐng)域知識是指商業(yè)過程觀點下的與問題有關(guān)的知識。它包括商業(yè)過程方面的知識,也包括用戶調(diào)查、市場分析報告等。解決方案領(lǐng)域知識是指提供領(lǐng)域概念的知識。這些領(lǐng)域概念用于解決問題,并獨立于特定需求。解決方案領(lǐng)域知識還包括如何從這一解決方案領(lǐng)域生產(chǎn)軟件系統(tǒng)。例如教科書、學(xué)術(shù)期刊、手冊等,都包含有這類領(lǐng)域知識。通用知識是指軟件工程師的一般背景和經(jīng)驗。系統(tǒng)/產(chǎn)品知識這一概念是指關(guān)于一個系統(tǒng)、一個系統(tǒng)族或一個產(chǎn)品的知識。5.3軟件體系結(jié)構(gòu)設(shè)計的元模型第5章軟件體系結(jié)構(gòu)設(shè)計為了獲取對體系結(jié)構(gòu)設(shè)計的抽象,人們已經(jīng)提出了許多方法。人們把這些體系結(jié)構(gòu)設(shè)計方法分類為:制品驅(qū)動(artifact-driven)的方法,用例驅(qū)動(use-case-driven)的方法,模式驅(qū)動(pattern-driven)的方法和領(lǐng)域驅(qū)動(domain-driven)的方法。在下面的解釋說明中,把每種方法都視為元模型的一種實現(xiàn)。5.4體系結(jié)構(gòu)設(shè)計方法的分析第5章軟件體系結(jié)構(gòu)設(shè)計制品驅(qū)動的方法制品驅(qū)動的體系結(jié)構(gòu)設(shè)計方法從方法的制品描述中提取體系結(jié)構(gòu)描述。制品驅(qū)動的體系結(jié)構(gòu)設(shè)計方法的例子包括廣為流行的面向?qū)ο蠓治龊驮O(shè)計方法OMT和OAD,圖5-4給出了該方法的概念模型。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析箭頭線“1:描述”表示需求規(guī)格說明書的描述;箭頭線“2:查找“表示對制品的查找,如系統(tǒng)分析階段中需求規(guī)格說明的類。查找過程得到了軟件工程師的通用知識的支持,也得到了構(gòu)成制品的啟發(fā)式規(guī)則的支持,這些制品是該方法的重要構(gòu)成部分?!?:查找”的結(jié)果是一組制品實例,在圖5-3中用“分析和設(shè)計模型”的概念來表示。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析接下來是系統(tǒng)設(shè)計階段,該階段將制品分組為子系統(tǒng),為單個軟件系統(tǒng)的全局結(jié)構(gòu)的開發(fā)定義整體體系結(jié)構(gòu)。在圖5-4中,這一功能被表示為“3:分組”。軟件體系結(jié)構(gòu)由子系統(tǒng)組合而成,在如5-4中被表示成“4:組合”。這一功能也用到了“通用知識”概念提供的支持。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析在體系結(jié)構(gòu)開發(fā)方面,該方法存在以下問題:(1)文本形式的系統(tǒng)需求含糊不清,不夠精確、完整。因此,將它作為體系結(jié)構(gòu)抽象的來源作用是不夠的。(2)子系統(tǒng)的語義過于簡單,難以作為體系結(jié)構(gòu)構(gòu)件。(3)對子系統(tǒng)的組合支持不足。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析用例驅(qū)動的方法用例驅(qū)動的體系結(jié)構(gòu)設(shè)計方法主要從用例導(dǎo)出體系結(jié)構(gòu)抽象。統(tǒng)一過程(UnifiedProcess)使用的是一種用例驅(qū)動的體系結(jié)構(gòu)設(shè)計方法。它由核心工作流(coreworkflows)組成。核心工作流定義了過程的靜態(tài)內(nèi)容,用活動、工人和制品描述了過程。隨時間變換的過程的組織被定義為階段。圖5-5給出了用統(tǒng)一過程描述的用例驅(qū)動的體系結(jié)構(gòu)設(shè)計方法的概念模型。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析在需求工作流中,以用例的形式捕捉客戶的需求,構(gòu)成用例模型。這一過程在圖5-5中被定義為“1:描述”。用例模型和非形式化的需求規(guī)格說明共同構(gòu)成了系統(tǒng)的需求規(guī)格說明。用例模型的開發(fā)得到了“非形式化的規(guī)格說明”,“領(lǐng)域模型”,“商業(yè)模型”等概念的支持,在設(shè)置系統(tǒng)的上下文時這些概念是必需的。如前所述,“非形式化的規(guī)格說明”表示文本形式的需求規(guī)格說明?!吧虡I(yè)模型”描述一個組織的商業(yè)過程?!邦I(lǐng)域模型”描述領(lǐng)域上下文中最重要的類。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析從用例模型中可以選擇出對于體系結(jié)構(gòu)有重要意義的用例,并創(chuàng)建“用例實現(xiàn)”,如圖5-5中“2:實現(xiàn)”所述。用例實現(xiàn)決定了任務(wù)在系統(tǒng)內(nèi)部是怎樣進行的。用例實現(xiàn)受到相關(guān)制品的知識和通用知識的支持。這在圖中被表示為分別從“制品”和“通用知識”引出的指向“2:實現(xiàn)”的箭頭線。這一功能的輸出是“分析和設(shè)計模型”概念,它表示在用例實現(xiàn)之后標識出的制品。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析然后,分析和設(shè)計模型被分組為包,這在圖中被表示為“3:分組”。圖中的“4:組合”代表定義這些包之間的接口,其結(jié)果是“體系結(jié)構(gòu)描述”的概念?!?:分組”和“4:組合”這兩個功能都受到“通用知識”概念的支持。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析該方法存在以下問題:(1)難以適度把握領(lǐng)域域模型和商業(yè)模型的細節(jié)。(2)對于如何選擇與體系結(jié)構(gòu)相關(guān)的用例沒有提供系統(tǒng)的支持。(3)用例沒有為體系結(jié)構(gòu)抽象提供堅實的基礎(chǔ)。(4)包的語義過于簡單,難以作為體系結(jié)構(gòu)構(gòu)件。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析領(lǐng)域驅(qū)動的方法在領(lǐng)域驅(qū)動的體系結(jié)構(gòu)設(shè)計方法中,體系結(jié)構(gòu)抽象是從領(lǐng)域模型導(dǎo)出的。這一方法的概念模型如圖5-6所示。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析考慮兩種領(lǐng)域驅(qū)動的方法,它們都是從領(lǐng)域模型導(dǎo)出體系結(jié)構(gòu)設(shè)計抽象。(1)產(chǎn)品線體系結(jié)構(gòu)設(shè)計在產(chǎn)品線體系結(jié)構(gòu)設(shè)計方法中,軟件體系結(jié)構(gòu)是為一個軟件產(chǎn)品線而開發(fā)的??梢赃@樣定義軟件產(chǎn)品線:它是一組以軟件為主的產(chǎn)品,具有多種共同的、受控的特點,能夠滿足特定市場或任務(wù)領(lǐng)域的需求。軟件產(chǎn)品線體系結(jié)構(gòu)是對一組相關(guān)產(chǎn)品的體系結(jié)構(gòu)的抽象。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析產(chǎn)品線體系結(jié)構(gòu)設(shè)計方法主要關(guān)注組織內(nèi)部的重用,基本是由核心資源開發(fā)和產(chǎn)品開發(fā)這兩部分組成的。核心資源庫通常包括體系結(jié)構(gòu),可重用軟件構(gòu)件,需求、文檔和規(guī)格說明,性能模型,方案,預(yù)算,以及測試計劃和用例。核心資源庫用于從產(chǎn)品線生成或集成產(chǎn)品。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析產(chǎn)品線體系結(jié)構(gòu)設(shè)計的概念模型如圖5-7所示。其中,“1:領(lǐng)域工程”表示核心資源庫的開發(fā),“2:應(yīng)用工程”表示從核心資源庫開發(fā)產(chǎn)品。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析(2)特定領(lǐng)域的軟件體系結(jié)構(gòu)設(shè)計可以把特定領(lǐng)域的軟件體系結(jié)構(gòu)(DomainSpecificSoftwareArchitecture,DSSA)看成是多系統(tǒng)范圍內(nèi)的體系結(jié)構(gòu),即它是從一組系統(tǒng)中導(dǎo)出的,而不是某一單獨的系統(tǒng)。圖5-8表示了DSSA方法的概念模型。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析DSSA方法的基本制品是領(lǐng)域模型,參考需求(referencerequirement)和參考體系結(jié)構(gòu)(referencearchitecture)。DSSA方法從領(lǐng)域分析階段開始,面向一組有共同問題或功能的應(yīng)用程序。這種分析以場景為基礎(chǔ),從中導(dǎo)出功能需求、數(shù)據(jù)流和控制流等信息。領(lǐng)域模型包括場景、領(lǐng)域字典、上下文圖、實體關(guān)系圖、數(shù)據(jù)流模型、狀態(tài)轉(zhuǎn)換圖以及對象模型。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析從圖中可以看出,除了領(lǐng)域模型之外,還定義了參考需求,它包括功能需求、非功能需求、設(shè)計需求、實現(xiàn)需求,而且它主要關(guān)注解決方案空間。領(lǐng)域模型和參考需求被用于導(dǎo)出參考體系結(jié)構(gòu)。DSSA過程明確區(qū)別參考體系結(jié)構(gòu)和應(yīng)用體系結(jié)構(gòu)。參考體系結(jié)構(gòu)被定義為用于一個應(yīng)用系統(tǒng)族的體系結(jié)構(gòu),應(yīng)用體系結(jié)構(gòu)被定義為用于一個單一應(yīng)用系統(tǒng)的體系結(jié)構(gòu)。應(yīng)用體系結(jié)構(gòu)是從參考體系結(jié)構(gòu)實例化或求精而來的。實例化/求精的過程和對參考體系結(jié)構(gòu)進行擴展的過程被稱為應(yīng)用工程。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析領(lǐng)域驅(qū)動的體系結(jié)構(gòu)設(shè)計方法存在的一些問題如下:(1)問題領(lǐng)域分析在導(dǎo)出體系結(jié)構(gòu)抽象方面效果較差。(2)解決方案領(lǐng)域分析不夠充分。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析模式驅(qū)動的方法軟件工業(yè)界已經(jīng)廣泛接受了軟件設(shè)計模式的概念。軟件設(shè)計模式的目的在于編制一套可重用的基本原則,用于開發(fā)高質(zhì)量的軟件系統(tǒng)。軟件設(shè)計模式常常用在設(shè)計階段,但是近年來,也有研究者在軟件開發(fā)過程中的體系結(jié)構(gòu)分析階段應(yīng)用設(shè)計模式。體系結(jié)構(gòu)模式類似于設(shè)計模式,但它關(guān)心的是更粗粒度的系統(tǒng)結(jié)構(gòu)及其交互。實際上,它也就是體系結(jié)構(gòu)風(fēng)格的另一種名稱。體系結(jié)構(gòu)設(shè)計模式是體系結(jié)構(gòu)層次的一種抽象表示。模式驅(qū)動的體系結(jié)構(gòu)設(shè)計方法從模式導(dǎo)出體系結(jié)構(gòu)抽象。圖5-9描述了這一方法的概念模型。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析(1)“需求規(guī)格說明”的概念表示對問題的規(guī)格說明,該問題可能通過模式得以解決。圖中的“查找”表示了為給出的問題描述查找適當模式的過程,它受到“通用知識”概念的支持。(2)“體系結(jié)構(gòu)模式描述”的概念指的是對體系結(jié)構(gòu)模式的描述。它主要由4個概念組成:意圖、上下文、問題和解決方案。意圖(intent)表示使用模式的基本原則;上下文(context)表示問題的產(chǎn)生環(huán)境;問題表示上下文環(huán)境中經(jīng)常出現(xiàn)的問題;解決方案是以元素及其關(guān)系的抽象描述的形式來表示對問題的解決方案。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析為了確認模式,要對各個可用模式的意圖進行掃描。如果發(fā)現(xiàn)一個模式的意圖和給出的問題相關(guān),那么就分析它的上下文描述。這時,如果上下文描述仍然能夠和給出的問題相匹配,則處理過程進入圖5-9中的“3:應(yīng)用”。進而用“解決方案”這一子概念來提供所給出問題的解決方案。概念“體系結(jié)構(gòu)模式”表示了“3:應(yīng)用”的結(jié)果。最后,“4:組合”表示在導(dǎo)出體系結(jié)構(gòu)描述時,體系結(jié)構(gòu)模式之間的相互協(xié)作。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析該方法存在以下問題:(1)在處理范圍廣泛的體系結(jié)構(gòu)問題時,模式庫可能不夠充足。(2)對模式的選擇僅依靠通用知識和軟件工程師的經(jīng)驗。(3)模式的應(yīng)用并不是一個簡單直接的過程,它需要對問題進行全面的分析。(4)對于模式的組合沒有提供很好的支持。第5章軟件體系結(jié)構(gòu)設(shè)計5.4體系結(jié)構(gòu)設(shè)計方法的分析實例說明這里以圖書館管理系統(tǒng)作為實例分析。圖書館管理系統(tǒng)是典型的信息管理系統(tǒng)(MIS),其開發(fā)主要包括后臺數(shù)據(jù)庫的建立和維護以及前端應(yīng)用程序的開發(fā)兩個方面。對于前者要求建立起數(shù)據(jù)一致性和完整性強、數(shù)據(jù)安全性好的庫。而對于后者則要求應(yīng)用程序具有功能完備、易使用等特點。采用圖書館管理系統(tǒng)作為軟件體系結(jié)構(gòu)設(shè)計原理的分析實例原因如下:(1)具有較強的典型性和普遍性;(2)這一領(lǐng)域軟件體系結(jié)構(gòu)發(fā)展比較成熟;(3)采用的軟件體系結(jié)構(gòu)簡單清晰,容易理解。第5章軟件體系結(jié)構(gòu)設(shè)計5.5體系結(jié)構(gòu)設(shè)計實例分析第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計基于關(guān)鍵質(zhì)量屬性的體系結(jié)構(gòu)設(shè)計是目前業(yè)界在軟件體系結(jié)構(gòu)設(shè)計中非常關(guān)注的一個重要方向,它更多地指向滿足實際體系結(jié)構(gòu)設(shè)計的核心目標和本質(zhì)需求,因而,發(fā)展出所謂的屬性驅(qū)動的體系結(jié)構(gòu)設(shè)計方法(ADD,AttributeDrivenDesign)。本節(jié)在介紹幾個關(guān)鍵質(zhì)量屬性需求的概念之后,簡單討論了幾種常見的關(guān)鍵質(zhì)量屬性需求及對體系結(jié)構(gòu)的影響和對策。基于ADD方法的關(guān)鍵,首先是了解和理解關(guān)鍵需求的背景和場景,找對方法和對策,然后從模塊分解、體系結(jié)構(gòu)布局、協(xié)同設(shè)計三個體系結(jié)構(gòu)設(shè)計的基本要素入手,設(shè)計出滿足關(guān)鍵需求的軟件體系結(jié)構(gòu),并加以實現(xiàn)。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計理解體系結(jié)構(gòu)設(shè)計中的關(guān)鍵質(zhì)量屬性需求設(shè)計、實現(xiàn)、維護系統(tǒng)除了要滿足系統(tǒng)的功能需求之外,同時還需要滿足系統(tǒng)的性能、可維護性、靈活性、可擴展性等需求。這些需求是與用戶功能不同的另一類需求,它們被統(tǒng)稱為與應(yīng)用系統(tǒng)有關(guān)的質(zhì)量屬性需求,有些甚至至關(guān)重要,因此也簡稱關(guān)鍵需求。對架構(gòu)師而言,這些需求并不是用戶的功能需求,但更為關(guān)鍵和重要,因為它們才是架構(gòu)師設(shè)計系統(tǒng)的真正內(nèi)在動力和驅(qū)動。滿足關(guān)鍵質(zhì)量屬性需求是架構(gòu)師進行架構(gòu)設(shè)計的源頭,也是近年來企業(yè)應(yīng)用和架構(gòu)設(shè)計實踐所關(guān)注的重點。什么是關(guān)鍵質(zhì)量屬性早期的軟件體系結(jié)構(gòu)設(shè)計,一般都是從功能實現(xiàn)(功能劃分、職責(zé)配合)的需要,系統(tǒng)軟硬件部署的需要,運行的需要,甚至某些開發(fā)方式(人員分工、開發(fā)還是采購)的需要,來考慮如何切分應(yīng)用系統(tǒng)構(gòu)件,定義系統(tǒng)架構(gòu)。我們把這種稱為”基于功能的架構(gòu)設(shè)計“。但是類似于系統(tǒng)的性能、安全性、可用性、可修改行、可移植性、可測試性、可集成性、可重用性等質(zhì)量屬性的滿足,可能更能讓用戶滿意。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計功能性需求,是系統(tǒng)必須實現(xiàn)的。實現(xiàn)功能性需求,可以有也可以沒有構(gòu)件與構(gòu)件之間的配合和協(xié)作,可以不考慮系統(tǒng)的可擴展、可維護、可修改等特性,系統(tǒng)的功能實現(xiàn),可以和體系結(jié)構(gòu)毫無關(guān)系。實際上,學(xué)生在學(xué)校里編寫的大多數(shù)程序,可能基本沒有考慮過和關(guān)鍵質(zhì)量需求有關(guān)的因素,因而,也不會專門為這樣的需求進行特定的架構(gòu)設(shè)計。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計1、應(yīng)用系統(tǒng)的性能(例如去辦事)這里假定關(guān)注的是應(yīng)用系統(tǒng)的響應(yīng)速度。1)與架構(gòu)設(shè)計無關(guān)的設(shè)計一談到性能,常常考慮到算法的優(yōu)劣。如影片播放時數(shù)據(jù)壓縮與解壓縮算法的好壞、數(shù)據(jù)檢索時搜索算法的好壞等。在有些情況下,優(yōu)化算法很有效,但還有一些情況是在優(yōu)化了算法之后,系統(tǒng)的性能并沒有大幅度提高,或者稍微提高了一點,沒過多久速度又降了下來。軟件體系結(jié)構(gòu)的作用2)與架構(gòu)設(shè)計有關(guān)的設(shè)計除了算法外,一個大型應(yīng)用系統(tǒng)中,往往以下部分是直接導(dǎo)致性能變壞的關(guān)鍵。(1)分配給構(gòu)件的功能是否合理,模塊的劃分是否考慮了強內(nèi)聚低耦合。(2)構(gòu)件之間的通信是否存在瓶頸制約,能否減少交互的次數(shù)和不必要的應(yīng)答等待。(3)構(gòu)件完成功能所需要的共享資源是否足夠,是否存在競爭和死鎖的情況等。軟件體系結(jié)構(gòu)的作用因此,架構(gòu)設(shè)計的改進是:再次優(yōu)化系統(tǒng)的架構(gòu),重新考慮模塊劃分和連接方式,連接關(guān)系,消除瓶頸,減少資源競爭的機會。軟件體系結(jié)構(gòu)的作用2、應(yīng)用程序的可維護性假定可維護性是指代碼是否易于維護。1)與架構(gòu)設(shè)計無關(guān)的設(shè)計為增強代碼的可維護性,應(yīng)要求給代碼增加盡可能詳細的注釋,并嚴格檢查編碼規(guī)范,使之可讀性好。但是,可讀性再好的代碼,也是要人去讀和理解的,做過系統(tǒng)維護的人都知道,讀別人的代碼是一件多么痛苦的事情。軟件體系結(jié)構(gòu)的作用2)與架構(gòu)設(shè)計有關(guān)的設(shè)計如果能在以下方面做出改善,是否可以不讀或少讀別人的代碼,使系統(tǒng)維護更方便。(1)使構(gòu)件盡可能保持邏輯獨立,當出現(xiàn)問題的時候,能夠迅速地定位出問題的模塊,而不需要看很多無關(guān)模塊的代碼。(2)構(gòu)件的接口簡單,當發(fā)現(xiàn)問題模塊的時候,重寫代碼比讀代碼更容易。(3)使變更涉及面小且范圍清晰,回歸測試的范圍容易控制等,都使系統(tǒng)更易于維護。軟件體系結(jié)構(gòu)的作用因此,架構(gòu)設(shè)計的改進是:再次優(yōu)化系統(tǒng)的架構(gòu),提高模塊的內(nèi)聚性,降低模塊的耦合度,并使模塊的邊界和接口更加清晰。軟件體系結(jié)構(gòu)的作用最近這些年,從業(yè)界開始,已經(jīng)越來越強調(diào)“基于關(guān)鍵質(zhì)量屬性需求的架構(gòu)設(shè)計”這一架構(gòu)設(shè)計的根本出發(fā)點和考慮因素,而不是僅關(guān)注功能需求的架構(gòu)實現(xiàn)。軟件體系結(jié)構(gòu)的作用第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計質(zhì)量屬性與體系結(jié)構(gòu)的關(guān)系是:質(zhì)量屬性既與體系結(jié)構(gòu)有關(guān),也和具體實現(xiàn)有關(guān)。但體系結(jié)構(gòu)是獲取許多關(guān)鍵質(zhì)量屬性的基礎(chǔ),在體系結(jié)構(gòu)設(shè)計過程中,就應(yīng)考慮到這些質(zhì)量屬性,并在設(shè)計構(gòu)思階段,在體系結(jié)構(gòu)層次上進行評審。任何一種質(zhì)量屬性,都不可能在不考慮其他屬性的情況下單獨獲取。一個質(zhì)量屬性的獲取對其他質(zhì)量屬性可能產(chǎn)生正面或負面的影響。因為它們之間往往是相互關(guān)聯(lián)的。例如,靈活性和可擴展往往表現(xiàn)為正相關(guān)性。但顯然,不論這些可擴展的、靈活的設(shè)計涉及開發(fā)期的工作量,還是在運行(包括編譯)中載入,都導(dǎo)致系統(tǒng)的效率(包括開發(fā)工作效率)降低、維護困難,這是它們不得不付出的代價或稱為“開銷”。因此,靈活性與可擴展性與系統(tǒng)復(fù)雜程度和可維護度負相關(guān)。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

性能

性能是指系統(tǒng)的響應(yīng)能力,即要經(jīng)過多長時間才能對某個事件做出響應(yīng),或者在某段時間內(nèi)系統(tǒng)所能處理的事件的個數(shù)。經(jīng)常用單位時間內(nèi)所處理事務(wù)的數(shù)量或系統(tǒng)完成某個事務(wù)處理所需的時間來對性能進行定量的表示。性能測試經(jīng)常要使用基準測試程序(用以測量性能指標的特定事務(wù)集或工作量環(huán)境)。

性能

性能需要系統(tǒng)處于正常的工作狀態(tài)(環(huán)境、負載等)下進行衡量。準確地說,需明確系統(tǒng)在多大的負載條件下,并且各個外部系統(tǒng)處于正常工作的狀態(tài),系統(tǒng)對某個具體請求類型的響應(yīng)時間。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

性能

例如,非節(jié)假日期間,12306網(wǎng)站的訪問性能可以控制在2-3秒內(nèi),然而在春節(jié)或國慶等節(jié)假日前夕,12306網(wǎng)站幾乎難以得到正常的響應(yīng)。因此,單獨描述12306網(wǎng)站的性能,需要增加一個訪問量的限制。同時,在高峰期訪問12306也需要分訪問請求,對于車次查詢等相對靜態(tài)的數(shù)據(jù)查詢,12306仍可以較快速度進行響應(yīng),然而對訂票等復(fù)雜、動態(tài)的請求,12306響應(yīng)很慢。因此,一般在描述性能時,還需要區(qū)分不同的請求類型。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

可靠性(1)

可靠性是軟件系統(tǒng)在應(yīng)用或系統(tǒng)錯誤面前,在意外或錯誤使用的情況下維持軟件系統(tǒng)的功能特性的基本能力??煽啃酝ǔS闷骄У却龝r間(MTTF)(指軟件在失效前正常工作的平均統(tǒng)計時間

)和平均失效間隔時間(MTBF)來衡量。在失效率為常數(shù)和修復(fù)時間很短的情況下,MTTF和MTBF幾乎相等。

MTBF=MTTF+MTTR(平均修復(fù)時間)第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

可靠性(2)

可靠性可以分為兩個方面:◎容錯。其目的是在錯誤發(fā)生時確保系統(tǒng)正確的行為,并進行內(nèi)部“修復(fù)”?!?/p>

健壯性。是保護應(yīng)用程序不受錯誤使用和錯誤輸入的影響,在遇到意外錯誤事件時確保應(yīng)用系統(tǒng)處于已經(jīng)定義好的狀態(tài)。和容錯相比,健壯性并不是在錯誤發(fā)生時軟件可以繼續(xù)運行,它只能保證軟件按照某種已經(jīng)定義好的方式終止執(zhí)行。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

可用性

可用性是指系統(tǒng)正常運行時間的比例,是通過兩次故障之間的時間長度或在系統(tǒng)崩潰情況下能夠恢復(fù)正常運行的速度來衡量的。具體可用性α的度量公式是:α=平均正常工作時間/(平均正常工作時間+平均修復(fù)時間)例如:(1)雖然發(fā)生了故障,但系統(tǒng)自動恢復(fù),沒有影響使用,修復(fù)時間=0,α=100%。(2)非實時的應(yīng)用系統(tǒng),每天只需要工作2h,在什么時間都可以用,不要求在特定的時間運行。即使某個時段有故障,一天6h之內(nèi)就能修復(fù),α=100%。(3)平均正常工作時間:24×7,如果需要修復(fù)時間,α=?第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

安全性

安全性是指系統(tǒng)在向合法用戶提供服務(wù)的同時能夠阻止非授權(quán)用戶使用的企圖或拒絕服務(wù)的能力。安全性又可劃分為機密性、完整性、不可否認性及可控性等特性。其中,機密性保證信息不泄露給未授權(quán)的用戶、實體或過程;完整性保證信息的完整和準確,防止信息被非法修改;不可否認性是指正確認定發(fā)送者,使之不能否認已發(fā)送過的數(shù)據(jù)的過程;可控性保證對信息的傳播及內(nèi)容具有控制的能力,防止為非法者所用。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

可修改性

可修改性是指能夠快速地以較高的性能代價比對系統(tǒng)進行變更的能力。通常以某些具體的變更為基準,通過考察這些變更的代價衡量可修改性。可修改性包含四個方面?!蚩删S護性。這主要體現(xiàn)在問題的修復(fù)上;在錯誤發(fā)生后“修復(fù)”軟件系統(tǒng)。為可維護性做好準備的軟件體系結(jié)構(gòu)往往能做局部性的修改并能使對其他構(gòu)件的負面影響最小化。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計◎

可擴展性。這一點關(guān)注的是使用新特性來擴展軟件系統(tǒng),以及使用改進版本來替換構(gòu)件并刪除不需要或不必要的特性和構(gòu)件。為了實現(xiàn)可擴展性,軟件系統(tǒng)需要松散耦合的構(gòu)件。其目標是實現(xiàn)一種體系結(jié)構(gòu),它能使開發(fā)人員在不影響構(gòu)件客戶的情況下替換構(gòu)件。支持把新構(gòu)件集成到現(xiàn)有的體系結(jié)構(gòu)中也是必要的。

可修改性

第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計◎結(jié)構(gòu)重組。這一點處理的是重新組織軟件系統(tǒng)的構(gòu)件及構(gòu)件間的關(guān)系,例如通過將構(gòu)件移動到一個不同的子系統(tǒng)而改變它的位置。為了支持結(jié)構(gòu)重組,軟件系統(tǒng)需要精心設(shè)計構(gòu)件之間的關(guān)系。理想情況下,它們允許開發(fā)人員在不影響實現(xiàn)的主體部分的情況下靈活地配置構(gòu)件。

可修改性

第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

◎可移植性??梢浦残允窍到y(tǒng)能夠在不同計算環(huán)境下運行的能力。這些環(huán)境可能是硬件、軟件,也可能是兩者的結(jié)合??梢浦残允管浖到y(tǒng)適用于多種硬件平臺、用戶界面、操作系統(tǒng)、編程語言或編譯器。為了實現(xiàn)可移植,需要按照硬件無關(guān)的方式組織軟件系統(tǒng),其他軟件系統(tǒng)和環(huán)境被提取出。

可修改性

第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

可測試性

可測試性是指通過測試使軟件顯現(xiàn)出缺陷的容易程度,即假設(shè)軟件中至少有一個缺陷,在下次測試運行時,缺陷暴露的可能性。系統(tǒng)的可測試性涉及如下幾個方面。(1)體系結(jié)構(gòu)級別上文檔編制的水平;(2)對問題的隔離;(3)信息隱藏原理應(yīng)用的程度。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

易用性

易用性可分為如下幾個方面。(1)可學(xué)習(xí)性;(2)效率;(3)可記憶性;(4)錯誤避免;(5)錯誤處理;(6)滿意度。

第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

可集成性

可集成性是使獨立開發(fā)的系統(tǒng)構(gòu)件能夠協(xié)同運行的能力,集成性依賴于:(1)構(gòu)件的外部復(fù)雜性;(2)構(gòu)件之間的交互機制和協(xié)議;(3)構(gòu)件功能劃分的清晰程度;(4)構(gòu)件接口的定義是否完整、合理。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

質(zhì)量屬性需求的場景描述

體系結(jié)構(gòu)設(shè)計一定是在充分分析關(guān)鍵需求的基礎(chǔ)上,做出的設(shè)計方案與設(shè)計決策,因此,準確分析、表述、記錄關(guān)鍵質(zhì)量屬性需求,是體系結(jié)構(gòu)設(shè)計的前提。而質(zhì)量需求與功能需求相比,具有更難于清晰梳理、難于準確表達的特點,使得這一環(huán)節(jié)顯得尤為重要。從一個架構(gòu)師的角度看,有關(guān)質(zhì)量屬性的討論中存在以下3個問題。(1)需求描述充滿二義性,且不可操作;(2)由于這些需求的相關(guān)性,不同描述可能關(guān)注的是同一問題。(3)術(shù)語不一致。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

可以借助于一套規(guī)范的“質(zhì)量屬性場景”表達形式來描述質(zhì)量屬性。如圖5-20所示,所謂“場景”,就是對某個實體與系統(tǒng)的一次交互的簡要描述,質(zhì)量屬性場景是一個有關(guān)質(zhì)量屬性的特定需求。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

質(zhì)量屬性場景由以下6個要素組成。(1)刺激源。這是某個生成該刺激的實體,可能是用戶、計算機系統(tǒng)或任何其它可以起到刺激作用的實體。(2)刺激。刺激源對系統(tǒng)的影響,可以看作是一個導(dǎo)致刺激的事件。(3)環(huán)境。與刺激相關(guān)的上下文條件,相當于系統(tǒng)當前運行的狀態(tài)。當刺激發(fā)生時,系統(tǒng)可能處于過載,或者正在正常運行,也可能是其它情況。(4)制品。接收刺激的實體,是系統(tǒng)中對事件做出反應(yīng)的部分。可能是整個系統(tǒng),也可能是系統(tǒng)的一部分。(5)響應(yīng)。響應(yīng)是在刺激到達后所采取的行動。(6)響應(yīng)度量。對反應(yīng)結(jié)果提供某種形式的衡量,例如系統(tǒng)如果有自動糾錯和恢復(fù)機制,提供的類似故障恢復(fù)效果和時間等衡量指標。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計生成這樣的質(zhì)量屬性場景的目的,是用來幫助架構(gòu)師描述有意義的質(zhì)量屬性需求,并使質(zhì)量屬性需求的描述規(guī)范化。場景描述提出:因為什么?發(fā)生了什么?影響了什么?如何處置?結(jié)果是什么的問題。如何生成質(zhì)量屬性場景?(1)先使用與質(zhì)量屬性有關(guān)的表格創(chuàng)建一般場景;(2)根據(jù)一般場景,有選擇地創(chuàng)建與特定系統(tǒng)有關(guān)的場景。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計對策

應(yīng)對關(guān)鍵需求的戰(zhàn)術(shù),是對質(zhì)量屬性的控制產(chǎn)生影響的設(shè)計決策。在體系結(jié)構(gòu)中所采用戰(zhàn)術(shù)的集合稱為“體系結(jié)構(gòu)策略”。例如,針對質(zhì)量屬性的“可用性”需求,可以采取的策略如下。(1)設(shè)計決策:冗余。(2)決策代價:復(fù)雜的同步。從某種意義上說,每一種戰(zhàn)術(shù)都是一種設(shè)計選擇,是思想。而系統(tǒng)設(shè)計就是實現(xiàn)這些設(shè)計選擇,是實現(xiàn)。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計作為一種戰(zhàn)術(shù),應(yīng)具有以下特點。(1)根據(jù)一種戰(zhàn)術(shù)可以分解為其他戰(zhàn)術(shù)的組合,如冗余戰(zhàn)術(shù)可進一步求精為數(shù)據(jù)冗余或計算冗余。并可以按照求精的程度,組織成遞進的層次形式。(2)模式可以把戰(zhàn)術(shù)打包,如冗余戰(zhàn)術(shù)通常還會使用同步戰(zhàn)術(shù)。打包是一種戰(zhàn)術(shù)的抽象化,如設(shè)計模式。以下采用“刺激-戰(zhàn)術(shù)-響應(yīng)”的形式,具體介紹幾個常見的需求和戰(zhàn)術(shù)。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計

可用性戰(zhàn)術(shù)

1)需求當系統(tǒng)不能提供與規(guī)范一致的服務(wù)時,即發(fā)生了故障或錯誤。為此,可用性戰(zhàn)術(shù)要達到的目的是屏蔽故障或修復(fù)錯誤,如圖5-22所示。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計2)基本戰(zhàn)術(shù)對付故障的手段可以是屏蔽,如掉電后,暫時無法立即修復(fù),則采用備用電源,屏蔽掉有故障的供電電路。對付錯誤的手段是修復(fù),如數(shù)據(jù)庫異?;驌p害時,采用備份數(shù)據(jù)進行恢復(fù)或修復(fù)。屏蔽是代替戰(zhàn)術(shù),修復(fù)是改正戰(zhàn)術(shù),這是兩種不同的戰(zhàn)術(shù)思路。第5章軟件體系結(jié)構(gòu)設(shè)計5.6基于關(guān)鍵質(zhì)量屬性需求的體系結(jié)構(gòu)設(shè)計3)體系結(jié)構(gòu)實現(xiàn)不論是屏蔽還是修復(fù),體系結(jié)構(gòu)上要達到可用的目標,首先需要實現(xiàn)的是發(fā)現(xiàn)錯誤。(1)錯誤檢測錯誤檢測用于發(fā)現(xiàn)錯誤,用于檢測錯誤的兩個戰(zhàn)術(shù)如下。①外部檢測:采用回聲/心跳技術(shù),用一個進程周期性地檢測另一個進程,以檢查并發(fā)現(xiàn)錯誤,這是依靠外部進行的錯誤檢測。②自我檢測:依靠進程本身的自我錯誤發(fā)現(xiàn)機制(如采用高可靠性系統(tǒng)、高可信軟件),發(fā)現(xiàn)自己的錯誤,這對系統(tǒng)而言是更高的要求。第5章

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論