王志剛+胥茜
摘要:架構(gòu)是實(shí)現(xiàn)軟件相關(guān)服務(wù)和基本業(yè)務(wù)系統(tǒng)的重要階段,而架構(gòu)決策又是這一階段的核心。為了幫助理解軟件架構(gòu)的本質(zhì)和架構(gòu)實(shí)現(xiàn),概述了架構(gòu)的基本過程,介紹了系統(tǒng)分解原則,重點(diǎn)討論了架構(gòu)決策的范圍及主要決策內(nèi)容。在架構(gòu)決策框架中解釋了實(shí)現(xiàn)架構(gòu)決策的3個(gè)層次,以及各層次可以使用的UML圖表等工具。掌握好這些方法能有效減少軟件架構(gòu)的盲目性,為軟件設(shè)計(jì)與實(shí)現(xiàn)提供規(guī)范與指導(dǎo)。
關(guān)鍵詞:
軟件架構(gòu);架構(gòu)決策;系統(tǒng)分解
DOIDOI:10.11907/rjdk.172989
中圖分類號(hào):TP301
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2017)012-0057-03
Abstract:Architecture is an important stage for implementing software-related services and basic business systems, and architectural decisions are the core of this stage. To help understand the full essenceof the software architecture and its implementation, this paper summarizes the basic process of architecture, introduces the system decomposition principle, and focuses on the scope of architectural decisions and major decisions. The three levels of architectural decision are explained in the decision framework, as well as tools such as UML diagrams that can be used at all levels. In summary, mastering these methods can effectively reduce the blindness of software architecture and provide specifications and guidance for software design and implementation.
Key Words:software architecture; architecture decision; system decomposition
0 引言
軟件在人類社會(huì)活動(dòng)中發(fā)揮著不可估量的作用,軟件工程旨在研究軟件系統(tǒng)架構(gòu)、開發(fā)、運(yùn)行、維護(hù)、演化的創(chuàng)新方法以提高效率和質(zhì)量[1]。軟件并非開發(fā)商為客戶提供的第一樣?xùn)|西,但它的好壞會(huì)直接影響客戶的感受。無論公司大小,對(duì)軟件的依賴程度都在急劇增加。不管公司關(guān)注的戰(zhàn)略重點(diǎn)是什么,軟件架構(gòu)已經(jīng)成為一種能力,掌握得好將極大提升公司的實(shí)力和水平,否則會(huì)嚴(yán)重削弱項(xiàng)目或系統(tǒng)構(gòu)建[2]。本文通過視圖幫助架構(gòu)師解決軟件架構(gòu)的關(guān)鍵問題,從而使其概念具有可操作性。
1 軟件架構(gòu)概述
以往軟件架構(gòu)所關(guān)注的核心問題是系統(tǒng)的復(fù)雜性,然而今天許多系統(tǒng)具有與摩天大樓媲美的復(fù)雜性。因此,軟件設(shè)計(jì)問題超出了算法和數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)和指定整個(gè)系統(tǒng)結(jié)構(gòu)就是軟件架構(gòu)級(jí)別的設(shè)計(jì)。很明顯,復(fù)雜性是軟件架構(gòu)必須解決的一個(gè)關(guān)鍵問題[3]。主要體現(xiàn)在兩方面:①知識(shí)難駕馭,如構(gòu)建系統(tǒng)的復(fù)雜性、規(guī)模、依賴關(guān)系和采用技術(shù)等;②管理難駕馭,如構(gòu)建系統(tǒng)的組織和流程、參與構(gòu)建系統(tǒng)的人數(shù)、項(xiàng)目的依賴關(guān)系、外包、地理分布的團(tuán)隊(duì)等[4]。
分解系統(tǒng)可以解決復(fù)雜性問題,但是怎么分片?好的分解滿足組件之間松散耦合的原則,通過干凈接口,合理地將其劃分為可單獨(dú)處理的獨(dú)立部分以簡(jiǎn)化問題。該結(jié)構(gòu)必須支持系統(tǒng)所需的功能或服務(wù)。因此,必須考慮系統(tǒng)的動(dòng)態(tài)行為,還要有必要的基礎(chǔ)設(shè)施支持這些服務(wù)[5]。
如何將切片結(jié)合在一起是界面與各個(gè)部分之間的關(guān)系問題。保持系統(tǒng)完整性的同時(shí),也需要保證這些切片組成的系統(tǒng)具有良好適應(yīng)性。這些品質(zhì)或特性對(duì)系統(tǒng)具有分散或系統(tǒng)性影響,因此是交叉分割的關(guān)注點(diǎn)。這不是一個(gè)孤立的問題,因?yàn)榉纸馐怯善渌鼏栴}驅(qū)動(dòng)的,無論怎樣分割,多個(gè)部分都必須合作解決這些關(guān)注點(diǎn)。為了有效地解決跨部門關(guān)切的問題,必須首先在范圍更廣的層面上處理問題。許多系統(tǒng)質(zhì)量(非功能性要求或服務(wù)級(jí)協(xié)議)具有這種性質(zhì),包括性能、安全性和互操作性要求。例如,為了使圖像更加復(fù)雜,可能會(huì)與系統(tǒng)質(zhì)量發(fā)生沖突,因此要考慮到系統(tǒng)質(zhì)量的相對(duì)優(yōu)先級(jí),必須在備選方案之間權(quán)衡。架構(gòu)的另一個(gè)關(guān)鍵是方案能否適應(yīng)環(huán)境,這關(guān)系到一致性與和諧,也是業(yè)務(wù)戰(zhàn)略和用戶目標(biāo)一致的問題。
架構(gòu)不僅要適應(yīng)原有系統(tǒng)的環(huán)境,不破壞以往投資的價(jià)值,而且應(yīng)該對(duì)已經(jīng)被證明有效的東西進(jìn)行規(guī)格化,避免不必要的重復(fù)。除整合經(jīng)驗(yàn)教訓(xùn)外,還應(yīng)該識(shí)別與利用系統(tǒng)內(nèi)部及跨系統(tǒng)復(fù)用。此外,應(yīng)該預(yù)見趨勢(shì)和可能的未來情景[6]。
2 架構(gòu)決策核心問題
這需要從廣泛范圍或系統(tǒng)的角度進(jìn)行。任何于狹義局部進(jìn)行的決策,都不是架構(gòu)。架構(gòu)決策即使不對(duì)整個(gè)系統(tǒng),至少對(duì)系統(tǒng)的不同部分會(huì)產(chǎn)生影響,因此需要從全局視角考慮這種影響,并作出必要的權(quán)衡[7]。
例如,對(duì)于單個(gè)應(yīng)用程序,組件設(shè)計(jì)者作出的任何決策都應(yīng)該服從架構(gòu)。如果架構(gòu)的范圍是一組應(yīng)用程序,則任何與單個(gè)應(yīng)用程序相關(guān)的決策都應(yīng)該服從系統(tǒng)架構(gòu)。那些對(duì)系統(tǒng)影響不大的決策不是架構(gòu)。所以,架構(gòu)決策應(yīng)該關(guān)注高影響、高優(yōu)先級(jí)且與業(yè)務(wù)策略緊密結(jié)合的領(lǐng)域,如表1所示。
基于軟件架構(gòu)所涉及的核心問題,架構(gòu)決策包含:優(yōu)先級(jí)設(shè)置、分解與合成、屬性特別是交叉切割關(guān)注點(diǎn)、適應(yīng)環(huán)境和完整性。
2.1 優(yōu)先級(jí)設(shè)置
在設(shè)計(jì)大型復(fù)雜系統(tǒng)時(shí),關(guān)鍵要把重點(diǎn)放在明確的事情上,這樣就可以把注意力集中在高優(yōu)先級(jí)領(lǐng)域,從而可以合理地作出取舍,并且在商定的優(yōu)先事項(xiàng)上作出合理的決策。架構(gòu)師需要負(fù)責(zé)系統(tǒng)技術(shù)方面的優(yōu)先級(jí)設(shè)置。這是一個(gè)高度戰(zhàn)略化過程,涉及:①業(yè)務(wù),包括業(yè)務(wù)策略和方向、核心競(jìng)爭(zhēng)力和資源;②市場(chǎng),包括客戶、競(jìng)爭(zhēng)對(duì)手、供應(yīng)商;③渠道技術(shù),包括趨勢(shì)和機(jī)會(huì);④約束,包括現(xiàn)有技術(shù)投資、現(xiàn)存系統(tǒng)挑戰(zhàn)和系統(tǒng)成功障礙、系統(tǒng)開發(fā)和業(yè)務(wù)[8]。
2.2 分解與組合
軟件架構(gòu)的基礎(chǔ)是系統(tǒng)結(jié)構(gòu),即系統(tǒng)的主要結(jié)構(gòu)元素或組件以及它們的相互關(guān)系。在分離特定的關(guān)注點(diǎn)時(shí),必須確保系統(tǒng)的功能或服務(wù)可由協(xié)作中的組件交付。因此對(duì)于每個(gè)組件的職責(zé)要有一致的假設(shè);還必須文檔化,形成適當(dāng)?shù)纳舷挛模员阆鄬?duì)獨(dú)立地開發(fā);能在不了解內(nèi)部構(gòu)件的情況下使用組件。這些是組件的外部可見屬性。
2.3 屬性與交叉分割
系統(tǒng)分解針對(duì)一些關(guān)注點(diǎn)進(jìn)行特定分解,以便能夠獨(dú)立處理。不同的分區(qū)選擇傾向于隔離不同的關(guān)注點(diǎn)。交叉分割會(huì)影響系統(tǒng)的各個(gè)部分,因此必須將協(xié)作組件集合在一起,以正確地處理每一個(gè)關(guān)注點(diǎn)。例如,性能通常需要在架構(gòu)所允許的交互模式下加以考慮,而不僅僅是優(yōu)化各部分的性能。有些關(guān)注點(diǎn),比如互操作性,需要關(guān)注特定架構(gòu),并且設(shè)計(jì)一種解決機(jī)制。該機(jī)制可以被設(shè)計(jì)為一組協(xié)作組件,集中于解決交叉分割關(guān)注點(diǎn)。例如,接口可置于非核心內(nèi)聚集的組件上。
2.4 系統(tǒng)適應(yīng)上下文
系統(tǒng)適應(yīng)上下文的關(guān)鍵技術(shù)是與外部系統(tǒng)的互操作性、一致性和接口。然而,適合開發(fā)機(jī)構(gòu)的文化和功能,也是架構(gòu)決策和選擇的考慮因素。
2.5 完整性
完整性是指應(yīng)具有統(tǒng)一的整體設(shè)計(jì)、形式或結(jié)構(gòu),無論片大小都是一致的。此外,還包括內(nèi)部平衡、兼容性和各部分之間的和諧,以及適應(yīng)環(huán)境與目標(biāo)[9]。
首先,在高層結(jié)構(gòu)設(shè)計(jì)時(shí),需要為系統(tǒng)創(chuàng)建完整概念,確保組件、屬性和關(guān)系能夠加入并為完整性打下基礎(chǔ)。這里有一個(gè)關(guān)鍵的角色,即視覺、架構(gòu)風(fēng)格、原則和概念為高層結(jié)構(gòu)到詳細(xì)設(shè)計(jì)提供一致方法。其次,一些決策雖然與高層結(jié)構(gòu)無關(guān),但與架構(gòu)的完整性有關(guān),也要認(rèn)定屬于架構(gòu)。然而,系統(tǒng)完整性為架構(gòu)師打開了一扇門,讓他們作出了本應(yīng)該是組件設(shè)計(jì)和實(shí)現(xiàn)者應(yīng)該作的決策。因此,簡(jiǎn)約架構(gòu)精神應(yīng)該得到發(fā)揚(yáng)。
2.6 簡(jiǎn)約架構(gòu)
可以應(yīng)用3個(gè)原則實(shí)現(xiàn)簡(jiǎn)約架構(gòu):①若決策是在一個(gè)較窄的范圍內(nèi)進(jìn)行,則交給負(fù)責(zé)該范圍的團(tuán)隊(duì);②只在重大結(jié)構(gòu)性需求上強(qiáng)調(diào)架構(gòu)決策,包括戰(zhàn)略目標(biāo)、重要且獨(dú)特的服務(wù)以及系統(tǒng)性或?qū)ο到y(tǒng)有交互影響的特質(zhì)與屬性;③當(dāng)決策被引入時(shí),應(yīng)該就它們對(duì)組織采用架構(gòu)的整體能力所產(chǎn)生的影響進(jìn)行評(píng)估。一個(gè)決策可能會(huì)解決一個(gè)高度關(guān)注的問題,若它會(huì)導(dǎo)致架構(gòu)被破壞,那么將其放在一邊。作為簡(jiǎn)約架構(gòu)規(guī)程的一部分,每個(gè)決策都該有一個(gè)合理理由和說明。決策應(yīng)該在全局范圍內(nèi)進(jìn)行優(yōu)化,但在局部可能是次優(yōu)的[2]。因此那些只有局部視野的人必須理解任何局部?jī)?yōu)化對(duì)整個(gè)系統(tǒng)的影響[10]。
另外,提供基本原則允許在架構(gòu)上進(jìn)行檢查和平衡,在不犧牲高優(yōu)先架構(gòu)需求的情況下,可以更好地實(shí)現(xiàn)重大需求,并且可以合理地與架構(gòu)決策相沖突。
3 架構(gòu)決策框架
架構(gòu)決策實(shí)際上處于不同的抽象級(jí)別。核心關(guān)注點(diǎn)是架構(gòu)的結(jié)構(gòu)元素和它們的外部屬性及關(guān)系。然而,還有更高層次的決策可以指導(dǎo)與約束系統(tǒng)分解和結(jié)構(gòu)化決策,也有一些低級(jí)的決策指導(dǎo)與約束下一個(gè)級(jí)別的設(shè)計(jì)和實(shí)現(xiàn)。這在圖1所示的軟件架構(gòu)分層模型中得到了體現(xiàn)。模型提供了高度有效的關(guān)注點(diǎn)分離方法,幫助架構(gòu)師組織決策過程,為行動(dòng)提供定位。它由模型、描述、解釋等組成,通過捕獲架構(gòu)決策,幫助相關(guān)人員對(duì)架構(gòu)進(jìn)行可視化,并了解如何處理關(guān)注點(diǎn)。架構(gòu)描述指導(dǎo)系統(tǒng)的創(chuàng)建。
3.1 元架構(gòu)
這是一組高層決策,它強(qiáng)調(diào)影響系統(tǒng)的完整性和結(jié)構(gòu),但其本身不是系統(tǒng)結(jié)構(gòu)。通過風(fēng)格、組合或交互模式、原則和哲學(xué),元架構(gòu)規(guī)定某些結(jié)構(gòu)性選擇,并指導(dǎo)選擇決策和權(quán)衡取舍。通過反復(fù)選擇跨架構(gòu)的通信或協(xié)調(diào)機(jī)制,確保方法一致,從而簡(jiǎn)化架構(gòu)。這種方法也可以幫助找到對(duì)系統(tǒng)有用的隱喻或組織概念。它還可以幫助考慮系統(tǒng)應(yīng)該具備的質(zhì)量,甚至幫助選擇需要的組件,最終使架構(gòu)更加生動(dòng)和易理解[11]。
3.2 架構(gòu)的3個(gè)級(jí)別
這是分層決策模型的核心,也是架構(gòu)活動(dòng)的中心。通過設(shè)置系統(tǒng)優(yōu)先級(jí)和約束,確保系統(tǒng)能實(shí)現(xiàn)目標(biāo)和需求。該工作由元架構(gòu)中的決策提供信息和約束,使用不同的視圖增強(qiáng)架構(gòu)的可理解性,并單獨(dú)關(guān)注特定的關(guān)注點(diǎn)。架構(gòu)由概念、邏輯和執(zhí)行3個(gè)級(jí)別組成,如圖2所示。
(1)概念架構(gòu)。確定系統(tǒng)的高級(jí)組件以及之間的關(guān)系,在不關(guān)注細(xì)節(jié)的情況下,注意力集中在系統(tǒng)的適當(dāng)分解上。此外,還提供一種用于架構(gòu)與非技術(shù)人員之間的通信工具,由架構(gòu)圖(無接口細(xì)節(jié))和組件的非正式規(guī)范組成。
(2)邏輯架構(gòu)。在邏輯架構(gòu)中,組件的外部屬性通過定義良好的接口和組件規(guī)范實(shí)現(xiàn)精確定義,并詳細(xì)描述關(guān)鍵的架構(gòu)機(jī)制。它提供一份詳細(xì)的藍(lán)圖,使組件開發(fā)者和用戶可以相對(duì)獨(dú)立地工作。它包含詳細(xì)的架構(gòu)圖、組件和接口規(guī)范以及組件協(xié)作圖,還有關(guān)于機(jī)制、原理等的解釋。
(3)執(zhí)行架構(gòu)。它是為分布式或并發(fā)系統(tǒng)創(chuàng)建的。流程視圖是組件到物理系統(tǒng)過程的映射,關(guān)注的重點(diǎn)是吞吐量和可伸縮性等問題。部署視圖是執(zhí)行系統(tǒng)中組件到物理系統(tǒng)節(jié)點(diǎn)的映射。
3.3 架構(gòu)的結(jié)構(gòu)與行為視圖
結(jié)構(gòu)和行為視圖對(duì)于思考和表示架構(gòu)都很重要。如果接受架構(gòu)是由組件組成的系統(tǒng)高層結(jié)構(gòu)、組件的相互關(guān)系和外部屬性,則結(jié)構(gòu)視圖是其核心。它由架構(gòu)圖(原型UML類圖)、組件和接口規(guī)格組成。
將系統(tǒng)分解為組件并設(shè)計(jì)接口,在設(shè)計(jì)解決關(guān)鍵交叉分割關(guān)注點(diǎn)的機(jī)制時(shí),行為視圖和它的組件協(xié)作或序列圖(固定的UML序列和協(xié)作圖)可以幫助理解這個(gè)過程[12-13]。
結(jié)構(gòu)和行為視圖都適用于概念、邏輯和執(zhí)行這三級(jí)架構(gòu)。它們之間的關(guān)系如表2所示。
4 架構(gòu)指導(dǎo)方針
為了保持系統(tǒng)的完整性或解決分割關(guān)注點(diǎn), 架構(gòu)師可以指導(dǎo)或約束架構(gòu)決策集的底層設(shè)計(jì)與實(shí)現(xiàn)。也即合理地幫助設(shè)計(jì)和開發(fā)者應(yīng)用架構(gòu)并注意問題的正確特征,這樣他們的決策就是明確的。
一般來說,除非有嚴(yán)格的架構(gòu)理由限制設(shè)計(jì)和開發(fā)者自由發(fā)揮,否則應(yīng)避免使用規(guī)定。
(1)通信架構(gòu)決策。除非記住、接受和理解,否則架構(gòu)決策是無能為力的。架構(gòu)文檔的主要目標(biāo)是記錄決策過程。為了達(dá)到目標(biāo),文檔必須完整且明確。
(2)通信架構(gòu)。為了達(dá)成目標(biāo),還必須考慮每個(gè)相關(guān)人員需要知道什么,以及如何更好地向他們傳達(dá)必要的信息。
(3)架構(gòu)驅(qū)動(dòng)。雖然不是體系結(jié)構(gòu)的一部分,但是塑造架構(gòu)的驅(qū)動(dòng)因素對(duì)于明確和分享是很重要的。它們包括:架構(gòu)遠(yuǎn)景,即架構(gòu)的期望狀態(tài);架構(gòu)需求,即相關(guān)人員目標(biāo)和架構(gòu)功能需求,以及系統(tǒng)質(zhì)量和約束;假設(shè)、勢(shì)力和趨勢(shì),即當(dāng)前業(yè)務(wù)、市場(chǎng)和技術(shù)環(huán)境的斷言以及架構(gòu)規(guī)劃的范圍。
(4)構(gòu)架視圖。圖1和表2展示了一組標(biāo)準(zhǔn)化視圖。這些是指導(dǎo)決策時(shí)的有用東西,所提供的思考工具幫助決策和選擇。它們也是架構(gòu)規(guī)范的基礎(chǔ),是抽象、特異和精確性選擇級(jí)別中的完整架構(gòu)決策集。
(5)架構(gòu)文檔。有了架構(gòu)驅(qū)動(dòng)和各種視圖等原始資料,也就可以針對(duì)不同的人員編寫文檔和報(bào)告。文檔包括所有架構(gòu)規(guī)格書、管理概要和組件文檔。
(6)管理概要。為了易于管理,需要?jiǎng)?chuàng)建一個(gè)高層次概要,包括遠(yuǎn)景、業(yè)務(wù)驅(qū)動(dòng)、架構(gòu)圖及將業(yè)務(wù)策略與技術(shù)策略聯(lián)系起來的基本方法。
(7)組件文檔。對(duì)于每個(gè)組件所有者,最好提供一個(gè)系統(tǒng)級(jí)視圖、組件和接口規(guī)范,以及組件協(xié)作圖。
5 結(jié)語
本文討論了軟件架構(gòu)的重點(diǎn)以及如何表達(dá)軟件架構(gòu)。但是,世界上所有的文檔和演示都是不夠的,除非軟件架構(gòu)是好的、技術(shù)上是合理的,能清晰地表明它是符合關(guān)鍵利益相關(guān)者的需求和目標(biāo),并且能成功地用于開發(fā)具有戰(zhàn)略優(yōu)勢(shì)的系統(tǒng)。
參考文獻(xiàn):
[1] 劉璘,周明輝,尹剛.大數(shù)據(jù)時(shí)代軟件工程專題前言[J].軟件學(xué)報(bào),2017,28(6):1327-1329.
[2] TNO, EINDHOVEN.Resources for software and systems architects[EB/OL]. http://www.bredemeyer.com/.
[3] 白金.軟件架構(gòu)模式在信息系統(tǒng)開發(fā)中的應(yīng)用分析[J].通信世界,2017(5):249-250.
[4] 王志剛,高磊.軟件發(fā)布規(guī)劃遺傳算法探討[J].軟件導(dǎo)刊,2016,15(11):56-58.
[5] 王煒,陳未如.軟件架構(gòu)切片在軟件可靠性評(píng)估中的應(yīng)用[J].微計(jì)算機(jī)信息,2008,28(1):290-292.
[6] FEA PRACTICE GUIDANCE. Federal segment architecture methodology (FSAM) practitioners training version 1.0.[EB/OL]. http://www.fsam.gov.2010-08-02.
[7] 李衛(wèi)華, 傅曉東.可拓創(chuàng)新軟件體系結(jié)構(gòu)研究[J]. 廣東工業(yè)大學(xué)學(xué)報(bào),2016,34(2):2-5.
[8] 楊波,于茜,張偉,等.GitHub開源軟件開發(fā)過程中影響因素的相關(guān)性分析[J].軟件學(xué)報(bào),2017,28(6):1330-1342.
[9] 林巴斯.軟件構(gòu)架實(shí)踐[M].北京:清華大學(xué)出版社,2002.
[10] 王志剛,高磊.軟件發(fā)布規(guī)劃的遺傳算法實(shí)現(xiàn)與解釋[J].現(xiàn)代計(jì)算機(jī),2016(12):3-6.
[11] 俞析蒙.基于驗(yàn)證的軟件架構(gòu)演化分析與評(píng)估[D].南京:東南大學(xué),2015.
[12] 王智超,王敏,熊燕.軟件架構(gòu)設(shè)計(jì)之多視角分析[J].現(xiàn)代計(jì)算機(jī),2014(10):35-37.
[13] NORMAN HENDRICH, HANNES BISTRY, 張建偉.助老服務(wù)機(jī)器人系統(tǒng)設(shè)計(jì)及軟件架構(gòu)[J]. Engineering, 2015(1):26-34.
(責(zé)任編輯:何 麗)