體系結(jié)構(gòu)藍(lán)圖—軟件體系結(jié)構(gòu)的4-1視圖(中文版).doc_第1頁(yè)
體系結(jié)構(gòu)藍(lán)圖—軟件體系結(jié)構(gòu)的4-1視圖(中文版).doc_第2頁(yè)
體系結(jié)構(gòu)藍(lán)圖—軟件體系結(jié)構(gòu)的4-1視圖(中文版).doc_第3頁(yè)
體系結(jié)構(gòu)藍(lán)圖—軟件體系結(jié)構(gòu)的4-1視圖(中文版).doc_第4頁(yè)
體系結(jié)構(gòu)藍(lán)圖—軟件體系結(jié)構(gòu)的4-1視圖(中文版).doc_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本文基于多個(gè)并發(fā)視圖的使用情況來(lái)說(shuō)明描述軟件密集型系統(tǒng)架構(gòu)的模型。使用多重視圖允許獨(dú)立地處理各風(fēng)險(xiǎn)承擔(dān)人:最終用戶、開(kāi)發(fā)人員、系統(tǒng)工程師、項(xiàng)目經(jīng)理等所關(guān)注的問(wèn)題,并且能夠獨(dú)立地處理功能性和非功能性需求。本文分別對(duì)五種視圖進(jìn)行了描述,并同時(shí)給出了捕獲每種視圖的表示方法。這些視圖使用以架構(gòu)為中心的、場(chǎng)景驅(qū)動(dòng)以及迭代開(kāi)發(fā)過(guò)程來(lái)進(jìn)行設(shè)計(jì)。 引言我們已經(jīng)看到在許多文章和書(shū)籍中,作者欲使用單張視圖來(lái)捕捉所有的系統(tǒng)架構(gòu)要點(diǎn)。通過(guò)仔細(xì)地觀察這些圖例中的方框和箭頭,不難發(fā)現(xiàn)作者努力地在單一視圖中表達(dá)超過(guò)其表達(dá)限度的藍(lán)圖。方框是代表運(yùn)行的程序嗎?或者是代表源代碼的程序塊嗎?或是物理計(jì)算機(jī)嗎?或僅僅是邏輯功能的分組嗎?箭頭是表示編譯時(shí)的依賴關(guān)系嗎?或者是控制流嗎?或是數(shù)據(jù)流嗎?通常它代表了許多事物。是否架構(gòu)只需要單個(gè)的架構(gòu)樣式?有時(shí)軟件架構(gòu)的缺陷源于過(guò)早地劃分軟件或過(guò)分的強(qiáng)調(diào)軟件開(kāi)發(fā)的單個(gè)方面:數(shù)據(jù)工程、運(yùn)行效率、開(kāi)發(fā)策略和團(tuán)隊(duì)組織等。有時(shí)架構(gòu)并不能解決所有客戶(或者說(shuō)風(fēng)險(xiǎn)承擔(dān)人,USC 的命名)所關(guān)注的問(wèn)題。許多作者都提及了這個(gè)問(wèn)題:Garlan & Shaw 1、CMU 的 Abowd & Allen、SEI 的 Clements。作為補(bǔ)充,我們建議使用多個(gè)并發(fā)的視圖來(lái)組織軟件架構(gòu)的描述,每個(gè)視圖僅用來(lái)描述一個(gè)特定的所關(guān)注的方面的集合。 架構(gòu)模型軟件架構(gòu)用來(lái)處理軟件高層次結(jié)構(gòu)的設(shè)計(jì)和實(shí)施。它以精心選擇的形式將若干結(jié)構(gòu)元素進(jìn)行裝配,從而滿足系統(tǒng)主要功能和性能需求,并滿足其他非功能性需求,如可靠性、可伸縮性、可移植性和可用性。Perry 和 Wolfe 使用一個(gè)精確的公式來(lái)表達(dá),該公式由 Boehm 做了進(jìn)一步修改: 軟件架構(gòu) 元素,形式,關(guān)系/約束軟件架構(gòu)涉及到抽象、分解和組合、風(fēng)格和美學(xué)。我們用由多個(gè)視圖或視角組成的模型來(lái)描述它。為了最終處理大型的、富有挑戰(zhàn)性的架構(gòu),該模型包含五個(gè)主要的視圖(請(qǐng)對(duì)照?qǐng)D 1): 邏輯視圖(Logical View),設(shè)計(jì)的對(duì)象模型(使用面向?qū)ο蟮脑O(shè)計(jì)方法時(shí))。 過(guò)程視圖(Process View),捕捉設(shè)計(jì)的并發(fā)和同步特征。 物理視圖(Physical View),描述了軟件到硬件的映射,反映了分布式特性。 開(kāi)發(fā)視圖(Development View),描述了在開(kāi)發(fā)環(huán)境中軟件的靜態(tài)組織結(jié)構(gòu)。 架構(gòu)的描述,即所做的各種決定,可以圍繞著這四個(gè)視圖來(lái)組織,然后由一些用例 (use cases)或場(chǎng)景(scenarios)來(lái)說(shuō)明,從而形成了第五個(gè)視圖。正如將看到的,實(shí)際上軟件架圖 1 41視圖模型構(gòu)部分從這些場(chǎng)景演進(jìn)而來(lái),將在下文中討論。我們?cè)诿總€(gè)視圖上均獨(dú)立地應(yīng)用 Perry & Wolf 的公式,即定義一個(gè)所使用的元素集合(組件、容器、連接符),捕獲工作形式和模式,并且捕獲關(guān)系及約束,將架構(gòu)與某些需求連接起來(lái)。每種視圖使用自身所特有的表示法藍(lán)圖(blueprint)來(lái)描述,并且架構(gòu)師可以對(duì)每種視圖選用特定的架構(gòu)風(fēng)格(architectural style),從而允許系統(tǒng)中多種風(fēng)格并存。我們將輪流的觀察這五種視圖,展現(xiàn)各個(gè)視圖的目標(biāo):即視圖的所關(guān)注的問(wèn)題,相應(yīng)的架構(gòu)藍(lán)圖的標(biāo)記方式,描述和管理藍(lán)圖的工具。并以非常簡(jiǎn)單的形式從 PABX 的設(shè)計(jì)中,從我們?cè)贏lcatel 商業(yè)系統(tǒng)(Alcatel Business System)上所做的工作中,以及從航空運(yùn)輸控制系統(tǒng)(Air Traffic Control system)中引出一些例子旨在描述一下視圖的特定及其標(biāo)記的方式,而不是定義這些系統(tǒng)的架構(gòu)。 4+1視圖模型具有相當(dāng)?shù)钠毡樾?,因此可以使用其他的?biāo)注方法和工具,也可以采用其他的設(shè)計(jì)方法,特別是對(duì)于邏輯和過(guò)程的分解。但文中指出的這些方法都已經(jīng)成功的在實(shí)踐中運(yùn)用過(guò)。 邏輯結(jié)構(gòu)面向?qū)ο蟮姆纸膺壿嫾軜?gòu)主要支持功能性需求即在為用戶提供服務(wù)方面系統(tǒng)所應(yīng)該提供的功能。系統(tǒng)分解為一系列的關(guān)鍵抽象,(大多數(shù))來(lái)自于問(wèn)題域,表現(xiàn)為對(duì)象或?qū)ο箢惖男问?。它們采用抽象、封裝和繼承的原理。分解并不僅僅是為了功能分析,而且用來(lái)識(shí)別遍布系統(tǒng)各個(gè)部分的通用機(jī)制和設(shè)計(jì)元素。我們使用 Rational/Booch 方法來(lái)表示邏輯架構(gòu),借助于類圖和類模板的手段 4。類圖用來(lái)顯示一個(gè)類的集合和它們的邏輯關(guān)系:關(guān)聯(lián)、使用、組合、繼承等等。相似的類可以劃分成類集合。類模板關(guān)注于單個(gè)類,它們強(qiáng)調(diào)主要的類操作,并且識(shí)別關(guān)鍵的對(duì)象特征。如果需要定義對(duì)象的內(nèi)部行為,則使用狀態(tài)轉(zhuǎn)換圖或狀態(tài)圖來(lái)完成。公共機(jī)制或服務(wù)可以在類功能 (class utilities)中定義。對(duì)于數(shù)據(jù)驅(qū)動(dòng)程度高的應(yīng)用程序,可以使用其他形式的邏輯視圖,例如 E-R 圖,來(lái)代替面向?qū)ο蟮姆椒ǎ∣O approach)。 邏輯視圖的表示法邏輯視圖的標(biāo)記方法來(lái)自 Booch 標(biāo)記法4。當(dāng)僅考慮具有架構(gòu)意義的條目時(shí),這種表示法相當(dāng)簡(jiǎn)單。特別是在這種設(shè)計(jì)級(jí)別上,大量的修飾作用不大。我們使用 Rational Rose? 來(lái)支持邏輯架構(gòu)的設(shè)計(jì)。圖 2 邏輯藍(lán)圖的表示法邏輯視圖的風(fēng)格 邏輯視圖的風(fēng)格采用面向?qū)ο蟮娘L(fēng)格,其主要的設(shè)計(jì)準(zhǔn)則是試圖在整個(gè)系統(tǒng)中保持單一的、一致的對(duì)象模型,避免就每個(gè)場(chǎng)合或過(guò)程產(chǎn)生草率的類和機(jī)制的技術(shù)說(shuō)明。邏輯結(jié)構(gòu)藍(lán)圖的樣例圖 3 顯示了 Tlic PABX 架構(gòu)中主要的類。 圖 3 a. Tlic PABX 的邏輯藍(lán)圖 b.空中交通系統(tǒng)的藍(lán)圖PABX 建立終端間的通信連接。終端可以是電話設(shè)備、中繼線(例如,連接到中央辦公室)、連接線(PABX 專線到 PABX 線)、電話專線、數(shù)據(jù)線、ISDN 等等。不同的線路由不同的接口卡提供支持。線路 controller 對(duì)象的職責(zé)是在接口卡上對(duì)所有的信號(hào)進(jìn)行解碼和注入,在特定于接口卡的信號(hào)與一致性的小型事件集合之間進(jìn)行相互轉(zhuǎn)換:開(kāi)始、停止、數(shù)字化等。controller 對(duì)象同時(shí)承載所有的實(shí)時(shí)約束。該類派生出許多子類以滿足不同的接口類型。terminal 對(duì)象的責(zé)任是維持終端的狀態(tài),代表線路協(xié)調(diào)各項(xiàng)服務(wù)。例如,它使用 numbering plan 服務(wù)來(lái)解釋撥號(hào)。conversation 代表了會(huì)話中的一系列終端 。conversation 使用了Translation Service(目錄、邏輯物理映射、路由),以及建立終端之間語(yǔ)音路徑的Connection Service 。對(duì)于一個(gè)包含了大量的具有架構(gòu)重要意義的類的、更大的系統(tǒng)來(lái)說(shuō),圖 3 b 描述了空中交通管理系統(tǒng)的頂層類圖,包含 8 個(gè)類的種類(例如,類的分組)。進(jìn)程架構(gòu)過(guò)程分解 進(jìn)程架構(gòu)考慮一些非功能性的需求,如性能和可用性。它解決并發(fā)性、分布性、系統(tǒng)完整性、容錯(cuò)性的問(wèn)題,以及邏輯視圖的主要抽象如何與進(jìn)程結(jié)構(gòu)相配合在一起即在哪個(gè)控制線程上,對(duì)象的操作被實(shí)際執(zhí)行。進(jìn)程架構(gòu)可以在幾種層次的抽象上進(jìn)行描述,每個(gè)層次針對(duì)不同的問(wèn)題。在最高的層次上,進(jìn)程架構(gòu)可以視為一組獨(dú)立執(zhí)行的通信程序(叫作processes)的邏輯網(wǎng)絡(luò),它們分布在整個(gè)一組硬件資源上,這些資源通過(guò) LAN 或者 WAN 連接起來(lái)。多個(gè)邏輯網(wǎng)絡(luò)可能同時(shí)并存,共享相同的物理資源。例如,獨(dú)立的邏輯網(wǎng)絡(luò)可能用于支持離線系統(tǒng)與在線系統(tǒng)的分離,或者支持軟件的模擬版本和測(cè)試版本的共存。進(jìn)程是構(gòu)成可執(zhí)行單元任務(wù)的分組。進(jìn)程代表了可以進(jìn)行策略控制過(guò)程架構(gòu)的層次(即:開(kāi)始、恢復(fù)、重新配置及關(guān)閉)。另外,進(jìn)程可以就處理負(fù)載的分布式增強(qiáng)或可用性的提高而不斷地被重復(fù)。軟件被劃分為一系列單獨(dú)的任務(wù)。任務(wù)是獨(dú)立的控制線程,可以在處理節(jié)點(diǎn)上單獨(dú)地被調(diào)度。接著,我們可以區(qū)別主要任務(wù)、次要任務(wù)。主要任務(wù)是可以唯一處理的架構(gòu)元素;次要任務(wù)是由于實(shí)施原因而引入的局部附加任務(wù)(周期性活動(dòng)、緩沖、暫停等等)。它們可以作為 Ada Task 或輕量線程來(lái)實(shí)施。主要任務(wù)的通訊途徑是良好定義的交互任務(wù)通信機(jī)制:基于消息的同步或異步通信服務(wù)、遠(yuǎn)程過(guò)程調(diào)用、事件廣播等。次要任務(wù)則以會(huì)見(jiàn)或共享內(nèi)存來(lái)通信。在同一過(guò)程或處理節(jié)點(diǎn)上,主要任務(wù)不應(yīng)對(duì)它們的分配做出任何假定。消息流、過(guò)程負(fù)載可以基于過(guò)程藍(lán)圖來(lái)進(jìn)行評(píng)估,同樣可以使用啞負(fù)載來(lái)實(shí)現(xiàn)中空的進(jìn)程架構(gòu),并測(cè)量在目標(biāo)系統(tǒng)上的性能。正如 Filarey et al. 在他的 Eurocontrol 實(shí)驗(yàn)中描述的那樣。進(jìn)程視圖的表示法我們所使用的進(jìn)程視圖的表示方法是從Booch最初為 Ada 任務(wù)推薦的表示方法擴(kuò)展而來(lái)。同樣,用來(lái)所使用的表示法關(guān)注在架構(gòu)上具有重要意義的元素。(圖 4) 圖 4 過(guò)程藍(lán)圖表示法我們?cè)褂脕?lái)自 TRW 的 Universal Network Architechure Services(UNAS0) 產(chǎn)品來(lái)構(gòu)建并實(shí)施過(guò)程和任務(wù)集合(包擴(kuò)它們的冗余),使它們?nèi)谌脒^(guò)程的網(wǎng)絡(luò)中。UNAS 包含 Software Architect Lifecycle Environment(SALE)工具,它支持上述表示方法。SALE 允許以圖形的形式來(lái)描述進(jìn)程架構(gòu),包括對(duì)可能的交互任務(wù)通信路徑的規(guī)格說(shuō)明,正是從這些路徑中自動(dòng)生成對(duì)應(yīng)的 Ada 或 C+ 源代碼。使用該方法來(lái)指定和實(shí)施進(jìn)程架構(gòu)的優(yōu)點(diǎn)是易于進(jìn)行修改而不會(huì)對(duì)應(yīng)用軟件造成太多的影響。進(jìn)程視圖的風(fēng)格 許多風(fēng)格可以適用于進(jìn)程視圖。例如采用 Garlan 和 Shaw 的分類法1,我們可以得到管道和過(guò)濾器(Pipes and filters),或客戶端/服務(wù)器,以及各種多個(gè)客戶端/單個(gè)服務(wù)器和多個(gè)客戶端/多個(gè)服務(wù)器的變體。對(duì)于更加復(fù)雜的系統(tǒng),可以采用類似于 K.Birman 所描述的ISIS系統(tǒng)中進(jìn)程組方法以及其它的標(biāo)注方法和工具。進(jìn)程藍(lán)圖的例子圖 5 Tlic PABX 的過(guò)程藍(lán)圖(部分)所有的終端由單個(gè)的 Termal process 處理,其中 Termal process 由輸入隊(duì)列中的消息進(jìn)行驅(qū)動(dòng)。Controller 對(duì)象在組成控制過(guò)程三個(gè)任務(wù)之中的一項(xiàng)任務(wù)上執(zhí)行:Low cycle rate task 掃描所有的非活動(dòng)終端(200 ms),將 High cycle rate task(10 ms)掃描清單中的終端激活,其中 High cycle rate task 檢測(cè)任何重要的狀態(tài)變化,將它們傳遞給 Main controller task,由它來(lái)對(duì)狀態(tài)的變更進(jìn)行解釋,并通過(guò)向?qū)?yīng)的終端發(fā)送消息來(lái)通信。這里 Controller 過(guò)程中的通信通過(guò)共享內(nèi)存來(lái)實(shí)現(xiàn)。開(kāi)發(fā)架構(gòu)子系統(tǒng)分解開(kāi)發(fā)架構(gòu)關(guān)注軟件開(kāi)發(fā)環(huán)境下實(shí)際模塊的組織。軟件打包成小的程序塊(程序庫(kù)或子系統(tǒng)),它們可以由一位或幾位開(kāi)發(fā)人員來(lái)開(kāi)發(fā)。子系統(tǒng)可以組織成分層結(jié)構(gòu),每個(gè)層為上一層提供良好定義的接口。系統(tǒng)的開(kāi)發(fā)架構(gòu)用模塊和子系統(tǒng)圖來(lái)表達(dá),顯示了輸出和輸入關(guān)系。完整的開(kāi)發(fā)架構(gòu)只有當(dāng)所有軟件元素被識(shí)別后才能加以描述。但是,可以列出控制開(kāi)發(fā)架構(gòu)的規(guī)則:分塊、分組和可見(jiàn)性。大部分情況下,開(kāi)發(fā)架構(gòu)考慮的內(nèi)部需求與以下幾項(xiàng)因素有關(guān):開(kāi)發(fā)難度、軟件管理、重用性和通用性及由工具集、編程語(yǔ)言所帶來(lái)的限制。開(kāi)發(fā)架構(gòu)視圖是各種活動(dòng)的基礎(chǔ),如:需求分配、團(tuán)隊(duì)工作的分配(或團(tuán)隊(duì)機(jī)構(gòu))、成本評(píng)估和計(jì)劃、項(xiàng)目進(jìn)度的監(jiān)控、軟件重用性、移植性和安全性。它是建立產(chǎn)品線的基礎(chǔ)。開(kāi)發(fā)藍(lán)圖的表示方法同樣,使用 Booch 方法的變形,僅考慮具有架構(gòu)意義的項(xiàng)。圖 5 開(kāi)發(fā)藍(lán)圖表示方法來(lái)自 Rational 的 Apex 開(kāi)發(fā)環(huán)境支持開(kāi)發(fā)架構(gòu)的定義和實(shí)現(xiàn)、和前文描述的分層策略,以及設(shè)計(jì)規(guī)則的實(shí)施。Rational Rose 可以在模塊和子系統(tǒng)層次上繪制開(kāi)發(fā)藍(lán)圖,并支持開(kāi)發(fā)源代碼(Ada、C+)進(jìn)程的正向和反向工程。開(kāi)發(fā)視圖的風(fēng)格我們推薦使用分層(layered)的風(fēng)格,定義 4 到 6 個(gè)子系統(tǒng)層。每層均具有良好定義的職責(zé)。設(shè)計(jì)規(guī)則是某層子系統(tǒng)依賴同一層或低一層的子系統(tǒng),從而最大程度地減少了具有復(fù)雜模塊依賴關(guān)系的網(wǎng)絡(luò)的開(kāi)發(fā)量,得到層次式的簡(jiǎn)單策略。圖 6 Hughes 空中交通系統(tǒng)(HATS)的 5 個(gè)層開(kāi)發(fā)架構(gòu)的例子 圖 6 代表了加拿大的 Hughes Aircraft 開(kāi)發(fā)的空中交通控制系統(tǒng)(Air Traffic Control system)產(chǎn)品線的 5 個(gè)分層開(kāi)發(fā)組織結(jié)構(gòu)。這是和圖 3 b 描述的邏輯架構(gòu)相對(duì)應(yīng)的開(kāi)發(fā)架構(gòu)。第一層 和第二層組成了獨(dú)立于域的覆蓋整個(gè)產(chǎn)品線的分布式基礎(chǔ)設(shè)施,并保護(hù)其免受不同硬件平臺(tái)、操作系統(tǒng)或市售產(chǎn)品(如數(shù)據(jù)庫(kù)管理系統(tǒng))的影響。第三層為該基礎(chǔ)設(shè)施增加了 ATC 框架,形成一個(gè)特定領(lǐng)域的軟件架構(gòu)(domain-specific software architecture)。使用該框架,可以在第四層上構(gòu)建一個(gè)功能選擇板。層次 5 則非常依賴于客戶和產(chǎn)品,包含了大多數(shù)用戶接口和外部系統(tǒng)接口。72 個(gè)子系統(tǒng)分布于 5 個(gè)層次上,每層包含了 10 至 50 個(gè)模塊,并可以在其他藍(lán)圖上表示。物理架構(gòu)軟件至硬件的映射物理架構(gòu)主要關(guān)注系統(tǒng)非功能性的需求,如可用性、可靠性(容錯(cuò)性),性能(吞吐量)和可伸縮性。軟件在計(jì)算機(jī)網(wǎng)絡(luò)或處理節(jié)點(diǎn)上運(yùn)行,被識(shí)別的各種元素(網(wǎng)絡(luò)、過(guò)程、任務(wù)和對(duì)象),需要被映射至不同的節(jié)點(diǎn);我們希望使用不同的物理配置:一些用于開(kāi)發(fā)和測(cè)試,另外一些則用于不同地點(diǎn)和不同客戶的部署。因此軟件至節(jié)點(diǎn)的映射需要高度的靈活性及對(duì)源代碼產(chǎn)生最小的影響。物理藍(lán)圖的表示法 大型系統(tǒng)中的物理藍(lán)圖會(huì)變得非?;靵y,所以它們可以采用多種形式,有或者沒(méi)有來(lái)自進(jìn)程視圖的映射均可。圖 7 物理藍(lán)圖的表示法TRW 的 UNAS 提供了數(shù)據(jù)驅(qū)動(dòng)方法將過(guò)程架構(gòu)映射至物理架構(gòu),該方法允許大量的映射的變更而無(wú)需修改源代碼。物理藍(lán)圖的示例圖 8 PABX 的物理藍(lán)圖圖 8 顯示了大型 PABX 可能的硬件配置,而圖 9 和圖 10 顯示了兩種不同物理架構(gòu)上的進(jìn)程映射,分別對(duì)應(yīng)一個(gè)小型和一個(gè)大型 PABX。C、F 和 K 是三種不同容量的計(jì)算機(jī),支持三種不同的運(yùn)行要求。圖 9 帶有過(guò)程分配的小型 PABX 物理架構(gòu)圖10顯示了過(guò)程分配的大型PABX物理藍(lán)圖場(chǎng)景綜合所有的視圖 四種視圖的元素通過(guò)數(shù)量比較少的一組重要場(chǎng)景(更常見(jiàn)的是用例)進(jìn)行無(wú)縫協(xié)同工作,我們?yōu)閳?chǎng)景描述相應(yīng)的腳本(對(duì)象之間和過(guò)程之間的交互序列)。正如 Rubin 和 Goldberg 所描述的那樣6。在某種意義上場(chǎng)景是最重要的需求抽象,它們的設(shè)計(jì)使用對(duì)象場(chǎng)景圖和對(duì)象交互圖來(lái)表示4。 該視圖是其他視圖的冗余(因此1),但它起到了兩個(gè)作用: 作為一項(xiàng)驅(qū)動(dòng)因素來(lái)發(fā)現(xiàn)架構(gòu)設(shè)計(jì)過(guò)程中的架構(gòu)元素,這一點(diǎn)將在下文中討論。 作為架構(gòu)設(shè)計(jì)結(jié)束后的一項(xiàng)驗(yàn)證和說(shuō)明功能,既以視圖的角度來(lái)說(shuō)明又作為架構(gòu)原型測(cè)試的出發(fā)點(diǎn)。 場(chǎng)景的表示法 場(chǎng)景表示法與組件邏輯視圖非常相似(請(qǐng)對(duì)照?qǐng)D 2),但它使用過(guò)程視圖的連接符來(lái)表示對(duì)象之間的交互(請(qǐng)對(duì)照?qǐng)D 4),注意對(duì)象實(shí)例使用實(shí)線來(lái)表達(dá)。至于邏輯藍(lán)圖,我們使用 Rational Rose 來(lái)捕獲并管理對(duì)象場(chǎng)景。場(chǎng)景的例子圖 11 顯示了小型 PABX 的場(chǎng)景片段。相應(yīng)的腳本是:1. Joe的電話控制器檢測(cè)和校驗(yàn)摘機(jī)狀態(tài)的變換,并發(fā)送消息喚醒相應(yīng)的終端對(duì)象。2. 終端分配一些資源,并要求控制器發(fā)出撥號(hào)音。3. 控制器接受撥號(hào)并傳遞給終端。4. 終端使用撥號(hào)方案來(lái)分析數(shù)字流。5. 有效的數(shù)字序列被鍵入,終端開(kāi)始會(huì)話。圖 11 本地呼叫的初期場(chǎng)景階段選擇視圖之間的對(duì)應(yīng)性 各種視圖并不是完全是正交的或獨(dú)立的。視圖的元素根據(jù)某種設(shè)計(jì)規(guī)則和啟發(fā)式方法與其他視圖中的元素相關(guān)聯(lián)。從邏輯視圖到過(guò)程視圖 我們發(fā)現(xiàn)邏輯視架構(gòu)有幾項(xiàng)重要特性: 自主性:對(duì)象是主動(dòng)的、被動(dòng)的還是被保護(hù)的? o 主動(dòng)對(duì)象享有調(diào)用其他對(duì)象或其自身操作的主動(dòng)權(quán),并且當(dāng)其他對(duì)象對(duì)其進(jìn)行調(diào)用時(shí),具有對(duì)其自身操作的完全控制權(quán)。 o 被動(dòng)對(duì)象不能主動(dòng)調(diào)用任何操作,對(duì)其他對(duì)象調(diào)用自身的操作沒(méi)有控制。 o 被保護(hù)對(duì)象不能主動(dòng)調(diào)用任何操作。但對(duì)自身的操作有一定的控制功能。 持久化:對(duì)象是暫時(shí)的還是持久化的?它們是否會(huì)導(dǎo)致過(guò)程或處理器的終止? 依賴性:對(duì)象的存在或持久化是否依賴于另一個(gè)對(duì)象? 分布性:對(duì)象的狀態(tài)或操作是否能被物理架構(gòu)中的許多節(jié)點(diǎn)所訪問(wèn)?或是被進(jìn)程架構(gòu)中的幾個(gè)進(jìn)程所訪問(wèn)? 在邏輯視圖中,我們認(rèn)為每個(gè)對(duì)象均是主動(dòng)的,具有潛在的并發(fā)性,即與其他對(duì)象具有平行的行為,我們并不考慮所要達(dá)到的確切并發(fā)程度。因此,邏輯結(jié)構(gòu)所考慮的僅是需求的功能性方面。然而,當(dāng)我們定義進(jìn)程架構(gòu)時(shí),由于巨大的開(kāi)銷,為每個(gè)對(duì)象實(shí)施各自的控制線程(例如,Unix 進(jìn)程或 Ada 任務(wù)),在目前的技術(shù)狀況下是不現(xiàn)實(shí)的。此外,如果對(duì)象是并發(fā)的,那么必須以某種抽象形式來(lái)調(diào)用它們的操作。另一方面,由于以下幾種原因需要多個(gè)控制線程。 為了快速響應(yīng)某類外部觸發(fā),包括與時(shí)間相關(guān)的事件。 為了在一個(gè)節(jié)點(diǎn)中利用多個(gè) CPU,或者在一個(gè)分布式系統(tǒng)中利用多個(gè)節(jié)點(diǎn)。 為了提高 CPU 的利用率,在某些控制線程被掛起,等待其他活動(dòng)結(jié)束的時(shí)候(例如,訪問(wèn)外部對(duì)象其他活動(dòng)對(duì)象時(shí)),為其他的活動(dòng)分配 CPU。 為了劃分活動(dòng)的優(yōu)先級(jí)(提高潛在的響應(yīng)能力)。 為了支持系統(tǒng)的可伸縮性(借助于共享負(fù)載的其他過(guò)程)。 為了在軟件的不同領(lǐng)域分離關(guān)注點(diǎn)。 為了提高系統(tǒng)的可用性(通過(guò) Backup 過(guò)程)。 我們同時(shí)使用兩種策略來(lái)決定并發(fā)的程度和定義所需的過(guò)程集合??紤]一系列潛在的物理目標(biāo)架構(gòu)。以下兩種形式我們可以任選其一: 從內(nèi)至外: 由邏輯架構(gòu)開(kāi)始:定義代理任務(wù),該任務(wù)將控制一個(gè)類的多個(gè)活動(dòng)對(duì)象的單個(gè)線程進(jìn)行多元化處理;同一代理任務(wù)還執(zhí)行持久化處理那些依賴于一個(gè)主動(dòng)對(duì)象的對(duì)象;需要相互進(jìn)行操作的幾個(gè)類或僅需要少量處理的類共享單個(gè)代理。這種聚合會(huì)一直進(jìn)行,直到我們將過(guò)程減少到合理的較少數(shù)量,而仍允許分布性和對(duì)物理資源的使用。 由外至內(nèi): 從物理結(jié)構(gòu)開(kāi)始:識(shí)別系統(tǒng)的外部觸發(fā);定義處理觸發(fā)的客戶過(guò)程和僅提供服務(wù)(而非初始化它們)的服務(wù)器進(jìn)程;使用數(shù)據(jù)完整性和問(wèn)題的串行化(serialization)約束來(lái)定義正確的服務(wù)器設(shè)置,并且為客戶機(jī)與服務(wù)器代理分配對(duì)象;識(shí)別出必須分布哪些對(duì)象。 其結(jié)果是將類(和它們的對(duì)象)映射至一個(gè)任務(wù)集合和進(jìn)程架構(gòu)中的進(jìn)程。通常,活動(dòng)類具有代理任務(wù),也存在一些變形:對(duì)于給定的類,使用多個(gè)代理以提高吞吐量,或者多個(gè)類映射至單個(gè)代理,因?yàn)樗鼈兊牟僮鞑⒉皇穷l繁地被調(diào)用,或者是為了保證執(zhí)行序列。注意這并不是產(chǎn)生最佳過(guò)程架構(gòu)的線性的、決定性的進(jìn)程;它需要若干個(gè)迭代來(lái)得到可接受的折衷。還存在許多其他方法,例如 Birman 等人5 或 Witt 等人7提出的方法。 確切的實(shí)施映射的方法不在本文的討論范圍,但我們以一個(gè)小的例子來(lái)說(shuō)明一下。圖 12 顯示了一個(gè)小的類集合如何從假想的空中交通控制系統(tǒng)映射至進(jìn)程。flight 類映射至一個(gè) flight 代理集合:有許多航班等待處理,外部觸發(fā)的頻率很高,響應(yīng)時(shí)間很關(guān)鍵,負(fù)載必須分布于多個(gè) CPU。并且,航班處理的持久化和分布性方面都取決于 flight server,為了滿足可用性,還是使用 flight server 的一臺(tái)備份服務(wù)器。航班的 profile 和 clearance 總是從屬于某個(gè)航班,盡管它們是復(fù)雜的類,但它們共享 flight 類的進(jìn)程。航班分布于若干其他進(jìn)程,特別是對(duì)于顯示和外部接口。sectorization 類,為 controller 的權(quán)限分配建立了空域劃分。由于完整性約束,僅能被一個(gè)代理處理,但可以與 flight 類共享服務(wù)器過(guò)程:更新得并不頻繁。location 和 arispace 及其他的靜態(tài)航空信息是受到保護(hù)的對(duì)象,在幾個(gè)類中共享,很少被更新;它們被映射至各自的服務(wù)器,分布于其他過(guò)程。圖 12 從邏輯視圖到過(guò)程視圖的映射從邏輯視圖到開(kāi)發(fā)視圖 類通常作為一個(gè)模塊來(lái)實(shí)現(xiàn),例如 Ada 包中可視部分的一個(gè)類型。密切相關(guān)的類(類的種類)的集合組合到子系統(tǒng)中。子系統(tǒng)的定義必須考慮額外的約束,如團(tuán)隊(duì)組織、期望的代碼規(guī)模(通常每個(gè)子系統(tǒng)為 5 K 或 20 K SLOC)、可重用性和通用性的程度以及嚴(yán)格的分層依據(jù)(可視性問(wèn)題),發(fā)布策略和配置管理。所以,通常最后得到的不是與邏輯視圖逐一對(duì)應(yīng)的視圖。邏輯視圖和開(kāi)發(fā)視圖非常接近,但具有不同的關(guān)注點(diǎn)。我們發(fā)現(xiàn)項(xiàng)目規(guī)模越大,視圖間的差距也越大。例如,如果比較圖 3 b 和圖 6,則會(huì)發(fā)現(xiàn)并不存在逐一對(duì)應(yīng)的類的不同種類到層的映射。而如果我們考慮類的種類的外部接口網(wǎng)關(guān)種類時(shí),它的實(shí)現(xiàn)遍布若干層:通訊協(xié)議在第 1 層或以下的層,通用網(wǎng)關(guān)機(jī)制在第 2 層,而特定的網(wǎng)關(guān)在第 5 層子系統(tǒng)。從進(jìn)程視圖到物理視圖 進(jìn)程和進(jìn)程組以不同的測(cè)試和部署配置映射至可用的物理硬件。Birman 在 ISIS 項(xiàng)目中描述了詳細(xì)的映射模式5。場(chǎng)景主要以所使用類的形式與邏輯視圖相關(guān)聯(lián);而與進(jìn)程視圖的關(guān)聯(lián)則是考慮了一個(gè)或多個(gè)控制線程的、對(duì)象間的交互形式。模型的剪裁并不是所有的軟件架構(gòu)都需要41視圖。無(wú)用的視圖可以從架構(gòu)描述中省略,比如:只有一個(gè)處理器,則可以省略物理視圖;而如果僅有一個(gè)進(jìn)程或程序,則可以省略過(guò)程視圖。 對(duì)于非常小型的系統(tǒng),甚至可能邏輯視圖與開(kāi)發(fā)視圖非常相似,而不需要分開(kāi)的描述。場(chǎng)景對(duì)于所有的情況均適用。迭代過(guò)程 Witt 等人為設(shè)計(jì)和架構(gòu)指出了 4 個(gè)階段:勾畫(huà)草圖、組織、具體化和優(yōu)化,分成了 12 個(gè)步驟7。他們還指出需要某種程度的反向工程。而我們認(rèn)為對(duì)于大型的項(xiàng)目,該方法太線性化了。在 4 個(gè)階段的末尾,可用于驗(yàn)證架構(gòu)的內(nèi)容太少。我們提倡一種更具有迭代性質(zhì)的方法,即架構(gòu)先被原形化、測(cè)試、估量、分析,然后在一系列的迭代過(guò)程中被細(xì)化。該方法除了減少與架構(gòu)相關(guān)的風(fēng)險(xiǎn)之外,對(duì)于項(xiàng)目而言還有其他優(yōu)點(diǎn):團(tuán)隊(duì)合作、培訓(xùn),加深對(duì)架構(gòu)的理解,深入程序和工具等等(此處提及的是演進(jìn)的原形,逐漸發(fā)展成為系統(tǒng),而不是一次性的試驗(yàn)性的原形)。這種迭代方法還能夠使需求被細(xì)化、成熟化并能夠被更好地理解。場(chǎng)景驅(qū)動(dòng)(scenario-driven)的方法系統(tǒng)大多數(shù)關(guān)鍵的功能以場(chǎng)景(或 use cases)的形式被捕獲。關(guān)鍵意味著:最重要的功能,系統(tǒng)存在的理由,或使用頻率最高的功能,或體現(xiàn)了必須減輕的一些重要的技術(shù)風(fēng)險(xiǎn)。開(kāi)始階段: 基于風(fēng)險(xiǎn)和重要性為某次迭代選擇一些場(chǎng)景。場(chǎng)景可能被歸納為對(duì)若干用戶需求的抽象。 形成稻草人式的架構(gòu)。然后對(duì)場(chǎng)景進(jìn)行描述,以識(shí)別主要的抽象(類、機(jī)制、過(guò)程、子系統(tǒng)),如 Rubin 與 Goldberg6 所指出的 分解成為序列對(duì)(對(duì)象、操作)。 所發(fā)現(xiàn)的架構(gòu)元素被分布到 4 個(gè)藍(lán)圖中:邏輯藍(lán)圖、進(jìn)程藍(lán)圖、開(kāi)發(fā)藍(lán)圖和物理藍(lán)圖。 然后實(shí)施、測(cè)試、度量該架構(gòu),這項(xiàng)分析可能檢測(cè)到一些缺點(diǎn)或潛在的增強(qiáng)要求。 捕獲經(jīng)驗(yàn)教訓(xùn)。 循環(huán)階段:下一個(gè)迭代過(guò)程開(kāi)始進(jìn)行: 重新評(píng)估風(fēng)險(xiǎn), 擴(kuò)展考慮的場(chǎng)景選擇板。 選擇能減輕風(fēng)險(xiǎn)或提高結(jié)構(gòu)覆蓋的額外的少量場(chǎng)景, 然后: 試著在原先的架構(gòu)中描述這些場(chǎng)景。 發(fā)現(xiàn)額外的架構(gòu)元素,或有時(shí)還需要找出適應(yīng)這些場(chǎng)景所需的重要架構(gòu)變更。 更新4個(gè)主要視圖:邏輯視圖、進(jìn)程視圖、開(kāi)發(fā)視圖和物理視圖。 根據(jù)變更修訂現(xiàn)有的場(chǎng)景。 升級(jí)實(shí)現(xiàn)工具(架構(gòu)原型)來(lái)支持新的、擴(kuò)展了的場(chǎng)景集合。 測(cè)試。如果可能的話,在實(shí)際的目標(biāo)環(huán)境和負(fù)載下進(jìn)行測(cè)試。 然后評(píng)審這五個(gè)視圖來(lái)檢測(cè)簡(jiǎn)潔性、可重用性和通用性的潛在問(wèn)題。 更新設(shè)計(jì)準(zhǔn)則和基本原理。 捕獲經(jīng)驗(yàn)教訓(xùn)。 終止循環(huán)為了實(shí)際的系統(tǒng),初始的架構(gòu)原型需要進(jìn)行演進(jìn) 。較好的情況是在經(jīng)過(guò) 2 次或 3 次迭代之后,結(jié)構(gòu)變得穩(wěn)定:主要的抽象都已被找到。子系統(tǒng)和過(guò)程都已經(jīng)完成,以及所有的接口都已經(jīng)實(shí)現(xiàn)。接下來(lái)則是軟件設(shè)計(jì)的范疇,這個(gè)階段可能也會(huì)用到相似的方法和過(guò)程。這些迭代過(guò)程的持續(xù)時(shí)間參差不齊,原因在于:所實(shí)施項(xiàng)目的規(guī)模,參與項(xiàng)目人員的數(shù)量、他們對(duì)本領(lǐng)域和方法的熟悉程度,以及該系統(tǒng)和開(kāi)發(fā)組織的熟悉程度等等。因而較小的項(xiàng)目迭代過(guò)程可能持續(xù) 2-3 周(例如,10 K SLOC),而大型的項(xiàng)目可能為 6-9 個(gè)月(例如,700 K SLOC)。 架構(gòu)的文檔化架構(gòu)設(shè)計(jì)中產(chǎn)生的文檔可以歸結(jié)為兩種: 軟件架構(gòu)文檔,其結(jié)構(gòu)遵循4+1視圖(請(qǐng)對(duì)照?qǐng)D 13,一個(gè)典型的提綱) 軟件設(shè)計(jì)準(zhǔn)則,捕獲了最重要的設(shè)計(jì)決策。這些決策必須被遵守,以保持系統(tǒng)架構(gòu)的完整性。 圖 13 軟件架構(gòu)文檔提綱結(jié)束語(yǔ) 無(wú)論是否經(jīng)過(guò)一次本地定制的和技術(shù)上的調(diào)整,41視圖都能在許多大型項(xiàng)目中成功運(yùn)用。事實(shí)上,它允許不同的風(fēng)險(xiǎn)承擔(dān)人找出他們就軟件架構(gòu)所關(guān)心的問(wèn)題。系統(tǒng)工程師首先接觸物理視圖,然后轉(zhuǎn)向進(jìn)程視圖;最終用戶、顧客、數(shù)據(jù)分析專家從邏輯視圖入手;項(xiàng)目經(jīng)理、軟件配置人員則從開(kāi)發(fā)視圖來(lái)看待41視圖。在 Rational 和其他地方,提出并討論了其他系列視圖,例如 Meszaros(BNR)、Hofmeister。Nord 和 Soni(Siemenms)、Emery 和 Hilliard(Mitre),但我們發(fā)現(xiàn)其他視圖通??梢詺w入我們所描述的 4 個(gè)視圖中的一個(gè)。例如 Cost&Schedule 視圖可以歸入開(kāi)發(fā)視圖,將一個(gè)數(shù)據(jù)視圖歸入一個(gè)邏輯視圖,以及將一個(gè)執(zhí)行視圖歸入進(jìn)程視圖和物理視圖的組合。表 1 41視圖模型一覽表致謝4+1 視圖的誕生要?dú)w功于在Rational、加拿大的 Hughes Aircraft、Alcatel 以及其他地方工作的同事。筆者特別感謝下面這些人的貢獻(xiàn): Ch. Thompson、A. Bell、M.Devlin、G. Booch、W. Royce、J. Marasco、R. Reitman、V. Ohnjec、E. Schonberg。參考資料 1. 您可以參閱本文在 developerWorks 全球站點(diǎn)上的 英文原文。 2. D. Garlan & M. Shaw, An Introduction to Software Architecture, Advances in Software Engineering and Knowledge Engineering, Vol. 1, World Scientific Publishing Co. (1993). 3. D. E. Perry & A. L. Wolf, Foundations for the Study of Software Architecture, ACM Software Engineering Notes, 17, 4, October 1992, 40-52. 4. Ph. Kruchten & Ch. Thompson, An Object-Oriented, Di

溫馨提示

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

評(píng)論

0/150

提交評(píng)論