王志剛,胥茜
(湖南師范大學(xué)數(shù)學(xué)與計(jì)算機(jī)學(xué)院,長(zhǎng)沙 410081)
軟件架構(gòu)權(quán)衡分析方法探討
王志剛,胥茜
(湖南師范大學(xué)數(shù)學(xué)與計(jì)算機(jī)學(xué)院,長(zhǎng)沙 410081)
軟件架構(gòu)是一個(gè)復(fù)雜的不良問(wèn)題,架構(gòu)師必須憑借豐富的經(jīng)驗(yàn)才能完成這項(xiàng)工作,而架構(gòu)過(guò)程實(shí)際上是一個(gè)不斷權(quán)衡的過(guò)程。然而架構(gòu)的好壞切實(shí)關(guān)系到軟件質(zhì)量與效益。為了幫助理解軟件架構(gòu)的本質(zhì)和架構(gòu)實(shí)現(xiàn),概述軟件架構(gòu)權(quán)衡方法的基本原理,詳細(xì)總結(jié)這一方法的基本步驟,對(duì)一些關(guān)鍵概念給出樣例以便于理解。希望借此減少軟件架構(gòu)的盲目性,為好的軟件架構(gòu)和設(shè)計(jì)提供幫助。
軟件架構(gòu);質(zhì)量屬性;場(chǎng)景;架構(gòu)權(quán)衡
創(chuàng)新軟件架構(gòu)新方法,是提高軟件效率和質(zhì)量的最主要途徑[1]。架構(gòu)權(quán)衡分析方法是一種結(jié)構(gòu)化的技術(shù),用于理解軟件密集型系統(tǒng)架構(gòu)中固有的權(quán)衡。該方法提供一種原則來(lái)評(píng)估軟件架構(gòu)的適應(yīng)性,它涉及通過(guò)一致的方法對(duì)軟件架構(gòu)的關(guān)聯(lián)質(zhì)量屬性(可修改性、安全性、性能、可用性等)進(jìn)行評(píng)估,從而考察其適應(yīng)性。這些屬性相互作用,而改善其中一個(gè)往往導(dǎo)致一個(gè)或多個(gè)其他屬性變差。該方法幫助了解影響質(zhì)量屬性交互的架構(gòu)決策。架構(gòu)權(quán)衡分析方法是一個(gè)螺旋模型,它從備選架構(gòu)開(kāi)始分析和風(fēng)險(xiǎn)緩解,從而導(dǎo)出改進(jìn)的架構(gòu)。
在任何學(xué)科中,所有的設(shè)計(jì)都涉及到權(quán)衡,這是眾所周知的。困難之處是如何做出明智的、甚至是最優(yōu)的權(quán)衡。設(shè)計(jì)決策通常圍繞軟件開(kāi)發(fā)而預(yù)訂的戰(zhàn)略、成本、進(jìn)度和人員等因素。
因此,需要一套完備措施可以幫助架構(gòu)師在需求和設(shè)計(jì)階段能夠很便宜地解決問(wèn)題,并能得到正確的問(wèn)題,它指導(dǎo)用戶,讓相關(guān)人員在需求中尋找沖突,并在軟件架構(gòu)中系統(tǒng)地解決這些沖突。在實(shí)現(xiàn)這個(gè)方法時(shí),假設(shè)屬性特定的分析是相互依賴的,并且每個(gè)質(zhì)量屬性都通過(guò)特定的架構(gòu)元素與其它屬性發(fā)生聯(lián)系。架構(gòu)元素是組件及其屬性,或者是影響某些質(zhì)量屬性的組件之間關(guān)系的屬性[2]。例如,流程的優(yōu)先級(jí)是一個(gè)可能影響性能的架構(gòu)元素。架構(gòu)權(quán)衡分析方法幫助識(shí)別屬性之間的這些依賴關(guān)系,稱之為權(quán)衡點(diǎn)。這是架構(gòu)權(quán)衡分析方法和其它軟件分析技術(shù)之間的主要區(qū)別,它明確地考慮了多個(gè)屬性之間的聯(lián)系,并且允許有原則的權(quán)衡這種難免的聯(lián)系。其他的分析框架,雖然也考慮聯(lián)系,但只以非正式的或者在較高的抽象級(jí)別考慮。權(quán)衡點(diǎn)來(lái)自于受多個(gè)屬性影響的架構(gòu)元素。
系統(tǒng)架構(gòu)和軟件的質(zhì)量有著密不可分的關(guān)聯(lián)[3]。雖然詳細(xì)設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)、算法、編碼和測(cè)試等也很重要,但是,軟件的性能、可用性和可修改性等的好壞很大程度上取決于系統(tǒng)架構(gòu),而且整體軟件結(jié)構(gòu)更關(guān)系到系統(tǒng)成功與否[4]。因此,在構(gòu)建之前,嘗試并確定系統(tǒng)是否注定要滿足其所期望的質(zhì)量,這是架構(gòu)權(quán)衡分析方法的目標(biāo)所在。
盡管存在分析特定質(zhì)量屬性的方法,這些分析通常是在孤立的情況下進(jìn)行的。然而,實(shí)際上某個(gè)屬性往往對(duì)另一個(gè)屬性有影響,例如安全對(duì)性能,性能對(duì)可修改性,可用性對(duì)安全;另外,成本受所有屬性的影響等等。雖然優(yōu)秀的架構(gòu)師了解架構(gòu)過(guò)程必需進(jìn)行權(quán)衡,但是缺少合適的原則指導(dǎo)這一過(guò)程,尤其是屬性交互過(guò)程。
軟件架構(gòu)通常是在摸索中進(jìn)行的。在系統(tǒng)構(gòu)建過(guò)程中,權(quán)衡是必須的,但需用特別的方式實(shí)現(xiàn)。
在選擇架構(gòu)以滿足廣泛的質(zhì)量屬性時(shí),設(shè)計(jì)人員已經(jīng)使用了一些技術(shù)來(lái)降低風(fēng)險(xiǎn)。比如選擇兩種模式,一種移植性好,另一種易于修改。但是對(duì)模式的分析卻沒(méi)有很深入。這些模式的用戶在構(gòu)建之前不知道該架構(gòu)的可移植性、可修改性或健壯性。
架構(gòu)權(quán)衡通過(guò)分析性能、可靠、可修改和安全等屬性,以確定需求是否得到保障。它推動(dòng)客戶、開(kāi)發(fā)和維護(hù)等人員相互協(xié)作,從而明確需求,最終協(xié)助相關(guān)人員找到屬性交互權(quán)衡點(diǎn),并為軟件架構(gòu)的后繼過(guò)程提供指導(dǎo)框架。因此它是一種架構(gòu)級(jí)的設(shè)計(jì)方法,
架構(gòu)權(quán)衡分析設(shè)計(jì)方法是一種螺旋模型,如圖1所示。通過(guò)相關(guān)人員更深入地了解系統(tǒng),進(jìn)而擾動(dòng)設(shè)計(jì),最終通過(guò)又一輪的迭代降低系統(tǒng)風(fēng)險(xiǎn)。但它與一般螺旋模型不同,不需要涉及任何實(shí)現(xiàn);每次迭代都是由分析結(jié)果激發(fā),并產(chǎn)生新的、更詳細(xì)和更有見(jiàn)識(shí)的設(shè)計(jì)。
圖1 架構(gòu)權(quán)衡分析方法步驟
架構(gòu)的分析包括操作、控制和度量幾組架構(gòu)元素、環(huán)境因素和架構(gòu)約束。架構(gòu)師的主要任務(wù)是構(gòu)建架構(gòu),導(dǎo)出系統(tǒng)行為,而系統(tǒng)行為又必須受成本預(yù)算的約束。延遲或吞吐量等屬性都是性能需求,但是這些需求與架構(gòu)元素有關(guān),而架構(gòu)元素又受制于可用的資源。例如:CPU的進(jìn)程分配和并發(fā)進(jìn)程調(diào)度策略、共享數(shù)據(jù)的存儲(chǔ)與訪問(wèn)策略。架構(gòu)師要充分把握這些架構(gòu)元素與系統(tǒng)性能之間的關(guān)系,在滿足需求的前提下適當(dāng)?shù)夭倏厮鼈儭?/p>
然而,這一任務(wù)通常缺少合適的工具。好的架構(gòu)師全憑自己的直覺(jué)、經(jīng)驗(yàn),以及原型設(shè)計(jì)做指導(dǎo)。偶爾還會(huì)將顯式建模步驟作為設(shè)計(jì)活動(dòng),或者對(duì)單個(gè)質(zhì)量屬性進(jìn)行顯式的形式化分析。
該方法有四個(gè)主要領(lǐng)域:場(chǎng)景和需求收集、架構(gòu)視圖和場(chǎng)景實(shí)現(xiàn)、模型構(gòu)建和分析,以及權(quán)衡。一般來(lái)說(shuō),一旦系統(tǒng)初始場(chǎng)景和需求已經(jīng)抽出,并且在一組初始架構(gòu)或小的架構(gòu)被提出來(lái)后,則針對(duì)任何提議的設(shè)計(jì)對(duì)每個(gè)質(zhì)量屬性進(jìn)行評(píng)價(jià)或隔離。在評(píng)估之后,有一個(gè)評(píng)論步驟,該步驟會(huì)發(fā)現(xiàn)影響多個(gè)屬性的權(quán)衡點(diǎn)。在評(píng)論之后,可以改進(jìn)模型并重新評(píng)估;或更改模型以反映這些改進(jìn)并重新評(píng)估;或改變一些需求。詳細(xì)步驟如下。
(1)收集場(chǎng)景
引出系統(tǒng)使用場(chǎng)景。在任何架構(gòu)分析開(kāi)始之前,需求都是存在的。在其他情況下,場(chǎng)景驅(qū)動(dòng)需求。分析過(guò)程也可以從這兩種方式中獲利。引出場(chǎng)景時(shí)對(duì)功能和質(zhì)量需求進(jìn)行操作,以促進(jìn)相關(guān)人員之間的交流,并挖掘系統(tǒng)應(yīng)該支持的重要活動(dòng)。
(2)收集需求、約束和環(huán)境
除了場(chǎng)景之外,還必須確定基于屬性的系統(tǒng)需求、約束和環(huán)境。每個(gè)需求可以從假定的場(chǎng)景中得到一個(gè)特定的值,或更加泛化。環(huán)境必須具有特征,因?yàn)殡S著進(jìn)化,對(duì)這些也影響屬性分析的因素在設(shè)計(jì)的后續(xù)分析和約束時(shí)要被記錄下來(lái)。這一步非常強(qiáng)調(diào)從前面的步驟中重新考慮場(chǎng)景,以確保它們能夠解釋重要的質(zhì)量屬性。步驟(1)和(2)可以交互進(jìn)行。
(3)描述架構(gòu)視圖
場(chǎng)景、需求和工程設(shè)計(jì)原則共同組成備選架構(gòu)。此外,不需從零起步設(shè)計(jì),例如遺留系統(tǒng)、互操作性,以及以前的項(xiàng)目的成功與失敗都可以約束架構(gòu)空間。
備選架構(gòu)必須以與每個(gè)重要質(zhì)量屬性相關(guān)的架構(gòu)元素和屬性來(lái)描述。例如,重復(fù)和表決方案是可靠性的一個(gè)重要因素;并發(fā)分解、過(guò)程優(yōu)先級(jí)、吞吐量估計(jì)和排隊(duì)計(jì)劃對(duì)性能非常重要;就系統(tǒng)安全而言,入侵模型與防火墻都是關(guān)鍵;而就軟件的可修改性而言,則抽象和封裝非常必要。此外,對(duì)每種特性進(jìn)行分析所需的詳細(xì)信息通常在不同的架構(gòu)視圖中被捕獲。多種視圖可以用于架構(gòu)分析,例如:模塊視圖(對(duì)工作分配和信息隱藏推理)、進(jìn)程視圖(有關(guān)性能推理)、數(shù)據(jù)流視圖(功能需求推理)、類視圖(共享對(duì)象定義推理),等等。
關(guān)于架構(gòu)表示還有另外一個(gè)重要的觀點(diǎn):在陳述時(shí)往往試圖對(duì)多個(gè)相互競(jìng)爭(zhēng)的架構(gòu)進(jìn)行比較。然而,設(shè)計(jì)人員通常認(rèn)為他們一次只處理一個(gè)單一的架構(gòu)。為什么這些觀念會(huì)不一致?從一般角度來(lái)看,架構(gòu)是一組被分配給一組結(jié)構(gòu)元素的功能集合,由一組視圖描述。幾乎所有的變更都會(huì)改變這些視圖中的某一個(gè),從而形成一個(gè)新的架構(gòu)。雖然這一點(diǎn)看起來(lái)像是樹(shù)枝分叉,但在這一背景下,這是重要的樹(shù)枝,原因是架構(gòu)權(quán)衡分析是在屬性模型的基礎(chǔ)上實(shí)現(xiàn),建構(gòu)和維護(hù)這些模型也能幫助理解架構(gòu)的理由。要更改架構(gòu)功能的任何方面,如結(jié)構(gòu)元素、協(xié)調(diào)模型,將影響一個(gè)或多個(gè)模型。一旦提出了變更,修改后的架構(gòu)與原件之間會(huì)有沖突,因此要進(jìn)行新舊之間的比較。因此,架構(gòu)權(quán)衡分析方法是在競(jìng)爭(zhēng)的架構(gòu)中進(jìn)行選擇的一個(gè)連續(xù)過(guò)程,雖然對(duì)于不知情的旁觀者來(lái)說(shuō)這些架構(gòu)看起來(lái)幾乎是一樣的。
(4)分析屬性
在獲得初始架構(gòu)后,就可以分別對(duì)它們的所有屬性進(jìn)行分析。對(duì)分析的順序沒(méi)有要求;也不需要評(píng)論需求與屬性之間的交互。并發(fā)單獨(dú)地分析屬性是分離關(guān)注點(diǎn)的一種策略,在分析過(guò)程中,不同特長(zhǎng)的專家可以充分發(fā)揮自己的專業(yè)知識(shí)。
分析結(jié)果將引導(dǎo)出系統(tǒng)行為關(guān)于特定屬性值的陳述,例如:請(qǐng)求的平均響應(yīng)時(shí)間60 ms;失敗的平均時(shí)間是1.8天;系統(tǒng)能有效抵御已知的網(wǎng)絡(luò)攻擊;平臺(tái)硬件單個(gè)成本為50萬(wàn)元;該軟件每年需要4人維護(hù);等等。
(5)識(shí)別敏感性
這一步?jīng)Q定單個(gè)屬性分析對(duì)特殊架構(gòu)元素的敏感性;也就是說(shuō),架構(gòu)的一個(gè)或多個(gè)屬性是變化的。模型能夠隨機(jī)應(yīng)變,以捕獲這些設(shè)計(jì)更改,并對(duì)結(jié)果進(jìn)行評(píng)估。任何受變化影響的架構(gòu)建模值都是敏感點(diǎn)。
(6)確定權(quán)衡點(diǎn)
對(duì)步驟(4)中構(gòu)建的模型進(jìn)行評(píng)估,并找到架構(gòu)的平衡點(diǎn)。盡管這是評(píng)論設(shè)計(jì)的標(biāo)準(zhǔn)實(shí)踐,但是可以通過(guò)將此評(píng)論集中在屬性特定的分析交互上,特別是權(quán)衡點(diǎn)的定位來(lái)獲得顯著的額外效益。
一旦確定了架構(gòu)的敏感點(diǎn),平衡點(diǎn)就是這樣一些架構(gòu)元素,有若干屬性對(duì)其都很敏感。例如,設(shè)服務(wù)器數(shù)量是一個(gè)架構(gòu)元素,則C/S架構(gòu)的性能、可用性和安全性都對(duì)這個(gè)元素非常敏感,而服務(wù)器數(shù)量越多,被攻擊的點(diǎn)就越多,故安全性與其成反比。因此,這個(gè)元素是C/S架構(gòu)的一個(gè)權(quán)衡點(diǎn),最終必須對(duì)服務(wù)器數(shù)量進(jìn)行取舍。
對(duì)比分析結(jié)果與系統(tǒng)需求。若系統(tǒng)的預(yù)測(cè)行為與它的需求足夠接近時(shí),設(shè)計(jì)人員可以開(kāi)始詳細(xì)設(shè)計(jì)和實(shí)現(xiàn)。在實(shí)踐中,繼續(xù)使用分析模型跟蹤架構(gòu)對(duì)支持開(kāi)發(fā)、部署和維護(hù)是很有用的。在一個(gè)系統(tǒng)的生命周期中,設(shè)計(jì)和分析永遠(yuǎn)不會(huì)停止。
在分析揭示問(wèn)題后,可以制定一個(gè)改變架構(gòu)、模型或需求的行動(dòng)計(jì)劃。該行動(dòng)計(jì)劃將利用對(duì)權(quán)衡點(diǎn)的特定屬性進(jìn)行分析和識(shí)別,這就導(dǎo)致了另一次迭代。需要明確的是,這些步驟是非線性的,并且以復(fù)雜的方式相互作用:分析可以導(dǎo)致對(duì)需求的重新考慮;模型的構(gòu)建可以指出那些沒(méi)有充分考慮或在架構(gòu)中沒(méi)有記錄的因素。這也是為什么把這些步驟描述成一個(gè)螺旋狀的原因。
基于對(duì)系統(tǒng)屬性的充分分析,集中對(duì)權(quán)衡點(diǎn)進(jìn)行識(shí)別,架構(gòu)權(quán)衡分析方法的動(dòng)機(jī)是希望在相互競(jìng)爭(zhēng)的架構(gòu)中做出合理的選擇。架構(gòu)權(quán)衡分析方法還可以作為早期澄清需求的工具。運(yùn)用架構(gòu)權(quán)衡分析和分析后獲得的結(jié)果,架構(gòu)師對(duì)系統(tǒng)能否滿足其需求的能力有了更強(qiáng)的理解和信心。包括用于激發(fā)特定屬性分析的場(chǎng)景和這些分析結(jié)果還為所做的架構(gòu)選擇提供文檔依據(jù)。
[1]劉璘,周明輝,尹剛.大數(shù)據(jù)時(shí)代軟件工程專題前言[J].軟件學(xué)報(bào),2017,28(6):1327-1329.
[2]王志剛,高磊.軟件發(fā)布規(guī)劃的形式化探討.計(jì)算機(jī)時(shí)代[J],2013,(12):12-14.
[3]Federal Segment Architecture Methodology(FSAM)Practitioner’s Training version 1.0.http://www.fsam.gov.
[4]白金.軟件架構(gòu)模式在信息系統(tǒng)開(kāi)發(fā)中的應(yīng)用分析[J].通信世界,2017(5):249-250.
[5]王智超,王敏,熊燕.軟件架構(gòu)設(shè)計(jì)之多視角分析[J].現(xiàn)代計(jì)算機(jī),2014,(10):35-37.
[6]李衛(wèi)華,傅曉東.可拓創(chuàng)新軟件體系結(jié)構(gòu)研究[J].廣東工業(yè)大學(xué)學(xué)報(bào),?2016,34(02):2-5.
[7]楊波,于茜,張偉,吳際,劉超.GitHub開(kāi)源軟件開(kāi)發(fā)過(guò)程中影響因素的相關(guān)性分析[J].軟件學(xué)報(bào),2017,28(6):1330-1342.
[8]王煒,陳未如.軟件架構(gòu)切片在軟件可靠性評(píng)估中的應(yīng)用[J].微計(jì)算機(jī)信息,2008,28(1):290-292.
[9]王志剛,高磊.軟件發(fā)布規(guī)劃遺傳算法探討.軟件導(dǎo)刊[J],2016,15(11):56-58.
[10]王志剛,高磊.軟件發(fā)布規(guī)劃的遺傳算法實(shí)現(xiàn)與解釋.現(xiàn)代計(jì)算機(jī)[J],2016(12):3-6.
[11]俞析蒙.基于驗(yàn)證的軟件架構(gòu)演化分析與評(píng)估[D].南京:東南大學(xué),2015.
[12]Norman Hendrich,Hannes Bistry,張建偉.助老服務(wù)機(jī)器人系統(tǒng)設(shè)計(jì)及軟件架構(gòu)[J].Engineering,2015,1(1):26-34.
Discussions on the Approach of Software Architecture Tradeoff Analysis
WANG Zhi-gang,XU Qian
(College of Math and Computer Science,Hunan Normal University,Changsha 410081)
Software architecture is a complex and wicked problem.Architects have to rely on rich experience to do this work,and the architecture pro?cess is actually a process of constantly weighing.However,the qualities and efficiency of software are very important.In order to under?stand the essence of the software architecture and its implementation,summarizes the basic principle of software architecture tradeoff meth?od,introduces the basic steps of it in detail,some samples are given to understand the key concepts.It is hoped to reduce the blindness of software architecture and to help with good software architecture and design.
Software Architecture;Quality Attribute;Scenario;Architecture Tradeoff
1007-1423(2017)33-0048-04
10.3969/j.issn.1007-1423.2017.33.012
王志剛(1962-),男,湖南沅江人,碩士,教授,研究方向?yàn)檐浖こ?、?jì)算機(jī)網(wǎng)絡(luò)
胥茜(1993-),女,湖南岳陽(yáng)人,在讀碩士研究生,研究方向?yàn)檐浖こ?/p>
2017-11-09
2017-11-20