韓宛彤 何江波 趙 恒 黃繼紅
(中國(guó)船舶重工集團(tuán)公司第七〇九研究所 武漢 430000)
軟件設(shè)計(jì)的目標(biāo)是滿足系統(tǒng)的功能性需求和質(zhì)量需求(非功能性需求)。功能性需求是軟件系統(tǒng)將要實(shí)現(xiàn)的功能和提供的服務(wù),質(zhì)量需求是軟件產(chǎn)品為滿足用戶業(yè)務(wù)需求而必須具有且除功能性需求以外的特性。相對(duì)于滿足功能性需求的軟件設(shè)計(jì),針對(duì)質(zhì)量需求的軟件設(shè)計(jì)往往更困難,如何設(shè)計(jì)出高質(zhì)量的軟件系統(tǒng)是軟件設(shè)計(jì)師所面臨的一個(gè)重要問(wèn)題。
軟件設(shè)計(jì)模式(Design Pattern),又稱設(shè)計(jì)模式,是一套被反復(fù)使用、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)。使用設(shè)計(jì)模式可提高軟件復(fù)用性、代碼易讀性,保證代碼的可靠性。
面向服務(wù)的體系結(jié)構(gòu)(Service Oriented Archi?tecture,SOA)是一種特殊的軟件體系結(jié)構(gòu)也是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元(稱為服務(wù))通過(guò)這些服務(wù)之間定義良好的接口和合約聯(lián)系起來(lái)。接口是采用中立的方式進(jìn)行定義的,它獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)建在各種這樣的系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進(jìn)行交互。SOA具有接口中立、松耦合等特點(diǎn),這些特性使得系統(tǒng)更易維護(hù)、具有更高的可用性和更好的伸縮性。因此,SOA技術(shù)得到了廣泛應(yīng)用。隨之SOA設(shè)計(jì)模式也越來(lái)越多。軟件設(shè)計(jì)師如何更好地應(yīng)用SOA設(shè)計(jì)模式設(shè)計(jì)出滿足系統(tǒng)質(zhì)量需求的軟件系統(tǒng),提高軟件設(shè)計(jì)效率和質(zhì)量是本文的研究重點(diǎn)。
本文首先對(duì)軟件質(zhì)量需求的類型進(jìn)行了綜合分析;對(duì)36種SOA軟件設(shè)計(jì)模式按所能滿足的質(zhì)量需求進(jìn)行了分類,提出一種基于軟件質(zhì)量需求的SOA設(shè)計(jì)模式應(yīng)用方法,通過(guò)一個(gè)資源管理中心系統(tǒng)的軟件體系結(jié)構(gòu)設(shè)計(jì)實(shí)例,說(shuō)明了該方法的有效性。
軟件質(zhì)量需求通常用來(lái)描述軟件系統(tǒng)功能性需求之外的,諸如性能、可靠性、擴(kuò)展性等的軟件系統(tǒng)所要滿足的質(zhì)量屬性[1]。ANSI/IEEE Std 729-1983《軟件工程術(shù)語(yǔ)的IEEE標(biāo)準(zhǔn)術(shù)語(yǔ)表》(Glossary of software engineering terminology)定義軟件質(zhì)量為“與軟件產(chǎn)品滿足規(guī)定的和隱含的需求的能力有關(guān)的特征或特征的全體”。M.J.Fisher教授定義軟件質(zhì)量為“所有描述計(jì)算機(jī)軟件優(yōu)秀程度的特性的組合”。軟件質(zhì)量是各種特性的復(fù)雜組合,隨著應(yīng)用和用戶提出的質(zhì)量要求的不同而不同,軟件質(zhì)量模型就是這些質(zhì)量特性的組合。ISO 25010軟件質(zhì)量模型[2]描述了功能性、安全性、互用性、可靠性、可用性、效率、可維護(hù)性和可移植性這8個(gè)質(zhì)量特性以及它們所包含的36個(gè)質(zhì)量子特性,如圖1。
一般而言,一個(gè)模式有四個(gè)基本要素[3]:
1)模式名稱(pattern name):一個(gè)助記名,它用一兩個(gè)詞來(lái)描述模式的問(wèn)題、解決方案和效果;
2)問(wèn)題(problem):描述了應(yīng)該在何時(shí)使用模式。它解釋了設(shè)計(jì)問(wèn)題和問(wèn)題存在的前因后果,它可能描述了特定的設(shè)計(jì)問(wèn)題,如怎樣用對(duì)象表示算法等。也可能描述了導(dǎo)致不靈活設(shè)計(jì)的類或?qū)ο蠼Y(jié)構(gòu)。有時(shí)候,問(wèn)題部分會(huì)包括使用模式必須滿足的一系列先決條件;
3)解決方案(solution):描述了設(shè)計(jì)的組成成分,它們之間的相互關(guān)系及各自的職責(zé)和協(xié)作方式。因?yàn)槟J骄拖褚粋€(gè)模板,可應(yīng)用于多種不同場(chǎng)合,所以解決方案并不描述一個(gè)特定而具體的設(shè)計(jì)或?qū)崿F(xiàn),而是提供設(shè)計(jì)問(wèn)題的抽象描述和怎樣用一個(gè)具有一般意義的元素組合(類或?qū)ο蠼M合)來(lái)解決這個(gè)問(wèn)題;
4)效果(consequences):描述了模式應(yīng)用的效果及使用模式應(yīng)權(quán)衡的問(wèn)題,它對(duì)于評(píng)價(jià)設(shè)計(jì)選擇和理解使用模式的代價(jià)及好處具有重要意義。模式效果中還包括它對(duì)軟件質(zhì)量需求的影響。
SOA設(shè)計(jì)模式關(guān)注于與面向服務(wù)計(jì)算相關(guān)的策略目標(biāo),是經(jīng)過(guò)實(shí)踐證明具有有效性和可復(fù)用性的軟件體系結(jié)構(gòu)設(shè)計(jì)經(jīng)驗(yàn),以開發(fā)和交付高品質(zhì)的軟件系統(tǒng)為根本目的。
本文根據(jù)每種SOA設(shè)計(jì)模式的設(shè)計(jì)目標(biāo)(即問(wèn)題)、解決方案及效果,對(duì)常用的36種SOA設(shè)計(jì)模式的軟件質(zhì)量需求的滿足能力進(jìn)行了分析,根據(jù)分析結(jié)果對(duì)它們進(jìn)行了分類及并給出能表示它們?cè)谙到y(tǒng)運(yùn)行時(shí)綜合能力的能力系數(shù)(取值范圍為0到1),如表1,以輔助SOA系統(tǒng)架構(gòu)師根據(jù)系統(tǒng)的質(zhì)量需求來(lái)選擇適合采用的SOA設(shè)計(jì)模式。
以表1中可靠性分類下的企業(yè)服務(wù)總線模式和組合自治模式為例說(shuō)明本文對(duì)SOA設(shè)計(jì)模式滿足質(zhì)量需求能力和能力系數(shù)分析的方法。企業(yè)服務(wù)總線模式的問(wèn)題是如何使消費(fèi)者能夠調(diào)用供應(yīng)者提供的服務(wù),解決方案是使用總線基礎(chǔ)服務(wù)架構(gòu)、集成不同的平臺(tái)和編程語(yǔ)言,效果是可以提供互操作性、數(shù)據(jù)格式轉(zhuǎn)換和路由,可以保證數(shù)據(jù)傳輸?shù)目煽啃院涂蓴U(kuò)展性。企業(yè)服務(wù)總線模式是SOA設(shè)計(jì)模式的基礎(chǔ)設(shè)施,使用企業(yè)服務(wù)總線對(duì)系統(tǒng)的負(fù)面影響很小,并且可以提供很多功能,在能力系數(shù)評(píng)分時(shí),將企業(yè)服務(wù)總線評(píng)為滿分1分,表示一種SOA設(shè)計(jì)模式的最理想狀態(tài)。將其他SOA設(shè)計(jì)模式與企業(yè)服務(wù)總線在對(duì)系統(tǒng)的負(fù)面影響上進(jìn)行比較,并給出相應(yīng)的分?jǐn)?shù)。組合自治模式的問(wèn)題是組合控制器服務(wù)在委托組合服務(wù)處理任務(wù)時(shí)會(huì)失去自治權(quán),其中一些服務(wù)可以在多個(gè)組合中共享。解決方案是通過(guò)將組合的所有參與者進(jìn)行分離使組合整體的自治性最大化。效果是組合中的服務(wù)和任務(wù)服務(wù)可以一起在隔離的環(huán)境中冗余的實(shí)現(xiàn),滿足了可靠性,對(duì)系統(tǒng)的負(fù)面影響是會(huì)增加基礎(chǔ)設(shè)施成本和管理的責(zé)任。組合自治與企業(yè)服務(wù)總線相比會(huì)增加系統(tǒng)的負(fù)擔(dān),但不會(huì)使系統(tǒng)處于不安全的狀態(tài),也可以很好地滿足可靠性,所以給組合自治的能力系數(shù)評(píng)分為0.9。
對(duì)于其他模式的滿足質(zhì)量需求的能力和能力系數(shù)的分析以此類推,可以得出每一種SOA所能滿足的質(zhì)量需求和能力系數(shù),經(jīng)過(guò)總結(jié)發(fā)現(xiàn),常用的36種SOA設(shè)計(jì)模式可以分別滿足可靠性、安全性、可復(fù)用性和可擴(kuò)展性這四種質(zhì)量需求。表1中的分類結(jié)果是下文提出的基于質(zhì)量需求的SOA設(shè)計(jì)模式選擇方法的主要依據(jù)。
系統(tǒng)架構(gòu)師在進(jìn)行軟件設(shè)計(jì)時(shí),應(yīng)首先明確軟件系統(tǒng)需要滿足的功能性需求,然后根據(jù)軟件系統(tǒng)的功能性需求,分析出這些功能所對(duì)應(yīng)需要滿足的質(zhì)量需求,最后根據(jù)質(zhì)量需求和功能性需求選擇合適的SOA設(shè)計(jì)模式。通常單一的SOA設(shè)計(jì)模式不可能完全滿足軟件系統(tǒng)設(shè)計(jì)需求的多樣性和復(fù)雜性,系統(tǒng)架構(gòu)師需要選擇多種SOA設(shè)計(jì)模式進(jìn)行組合設(shè)計(jì)。然而并不是所有的SOA設(shè)計(jì)模式都可以組合在一起,有些SOA設(shè)計(jì)模式在功能上互補(bǔ)、結(jié)構(gòu)上相似,則可以組合在一起,而有些SOA設(shè)計(jì)模式基本屬性相斥,則不能組合在一起。本文根據(jù)文獻(xiàn)[5]中提出的SOA設(shè)計(jì)模式相關(guān)關(guān)系,總結(jié)了表1中提到的36種SOA設(shè)計(jì)模式的相關(guān)關(guān)系得到表2。系統(tǒng)架構(gòu)師可以根據(jù)軟件系統(tǒng)的實(shí)際設(shè)計(jì)需求進(jìn)行組合。
系統(tǒng)架構(gòu)師在表1中查找能滿足所需質(zhì)量需求的SOA設(shè)計(jì)模式,在能滿足同一質(zhì)量需求的所有SOA設(shè)計(jì)模式中,根據(jù)這些SOA設(shè)計(jì)模式的設(shè)計(jì)目標(biāo)(即問(wèn)題)、解決方案及效果選擇出能夠滿足該質(zhì)量需求所對(duì)應(yīng)的功能性需求的SOA設(shè)計(jì)模式。如遇到有多種SOA設(shè)計(jì)模式能同時(shí)滿足相同的功能性需求和質(zhì)量需求的情況,本文建議系統(tǒng)架構(gòu)師選擇能力系數(shù)較大的模式,因?yàn)槟芰ο禂?shù)越大的模式對(duì)系統(tǒng)的消極影響越小。系統(tǒng)架構(gòu)師在遇到需要選擇多種SOA設(shè)計(jì)模式進(jìn)行組合滿足軟件系統(tǒng)設(shè)計(jì)需求的情況時(shí),可以根據(jù)在表2中依據(jù)相關(guān)關(guān)系查找SOA設(shè)計(jì)模式進(jìn)行組合來(lái)滿足軟件系統(tǒng)的功能性需求和對(duì)應(yīng)的質(zhì)量需求。通過(guò)上述方法輔助軟件架構(gòu)師設(shè)計(jì)SOA軟件系統(tǒng),提高開發(fā)效率和軟件設(shè)計(jì)質(zhì)量。
本文所提及的只是部分常用的SOA設(shè)計(jì)模式,沒(méi)有覆蓋全部SOA設(shè)計(jì)模式。隨著SOA技術(shù)的發(fā)展,SOA設(shè)計(jì)模式也越來(lái)越多,系統(tǒng)架構(gòu)師可以按照本文提出的方法對(duì)其它SOA設(shè)計(jì)模式進(jìn)行分析和研究,將結(jié)果添加到本文提出的表1和表2中,從而更好地幫助軟件架構(gòu)師提高軟件設(shè)計(jì)效率,降低軟件設(shè)計(jì)的難度,更好地設(shè)計(jì)出可以滿足軟件設(shè)計(jì)需求多樣性和復(fù)雜性的軟件系統(tǒng)。
本節(jié)通過(guò)一個(gè)資源管理服務(wù)中心系統(tǒng)的軟件體系結(jié)構(gòu)設(shè)計(jì)實(shí)例來(lái)說(shuō)明該方法的應(yīng)用。資源管理服務(wù)中心系統(tǒng)是一個(gè)可以為用戶提供資源實(shí)時(shí)共享的服務(wù)平臺(tái)。作為一個(gè)服務(wù)平臺(tái)需要滿足的功能點(diǎn)非常之多,在此僅對(duì)用戶發(fā)布、訂閱資源功能進(jìn)行功能性需求分析和質(zhì)量需求分析,并使用本文所提出方法進(jìn)行設(shè)計(jì)。
用戶在平臺(tái)發(fā)布、訂閱資源,平臺(tái)應(yīng)能接收和發(fā)送不同數(shù)據(jù)格式的資源,以保證用戶發(fā)出的請(qǐng)求都能被可靠地傳遞和處理,并且需要將請(qǐng)求的處理結(jié)果反饋給用戶;需要平臺(tái)應(yīng)能快速的處理多個(gè)用戶的請(qǐng)求;平臺(tái)應(yīng)能對(duì)用戶身份進(jìn)行驗(yàn)證,只有身份安全的用戶才能發(fā)布和訂閱資源,以保證數(shù)據(jù)的安全性;平臺(tái)在增加功能時(shí)應(yīng)能保證不對(duì)原有架構(gòu)和代碼進(jìn)行修改。因此,在實(shí)現(xiàn)這些功能時(shí)需要考慮系統(tǒng)的可靠性、安全性和可擴(kuò)展性等質(zhì)量需求。
軟件架構(gòu)師在進(jìn)行軟件設(shè)計(jì)時(shí),首先在表1查找能夠同時(shí)滿足盡可能多質(zhì)量需求、且能力系數(shù)大的SOA設(shè)計(jì)模式。在本例中,企業(yè)服務(wù)總線模式能同時(shí)滿足可靠性和可擴(kuò)展性,因此首選企業(yè)服務(wù)總線模式。
為保證消息的可靠傳輸,在表2中選擇與企業(yè)服務(wù)總線模式相關(guān)的可信消息模式,通過(guò)引入中間可信機(jī)制和將消息存儲(chǔ)到持久存儲(chǔ)庫(kù)中,以實(shí)現(xiàn)消息即使通過(guò)不可靠的傳遞協(xié)議進(jìn)行傳遞或是在不可靠的環(huán)境中進(jìn)行傳遞也能保證消息進(jìn)行可靠的傳遞。同理,為實(shí)現(xiàn)快速處理多個(gè)用戶的請(qǐng)求功能,可選擇異步隊(duì)列模式,從而達(dá)到提高系統(tǒng)吞吐量的目的。
為保證數(shù)據(jù)的安全性,在安全性類別中選擇直接認(rèn)證模式驗(yàn)證消費(fèi)者的身份憑據(jù),只有安全身份才能訪問(wèn)和傳輸數(shù)據(jù)的功能,防止服務(wù)被攻擊和破壞,保證了數(shù)據(jù)的安全性。
通過(guò)將企業(yè)服務(wù)總線、可信消息模式、異步隊(duì)列模式和直接認(rèn)證模式四種SOA設(shè)計(jì)模式組合即完成資源管理服務(wù)中心系統(tǒng)的架構(gòu)設(shè)計(jì),如圖2所示。
圖2 資源管理中心系統(tǒng)
本文提出的基于質(zhì)量需求選擇SOA設(shè)計(jì)模式的方法旨在輔助系統(tǒng)架構(gòu)師快速高效地使用SOA設(shè)計(jì)模式進(jìn)行SOA軟件系統(tǒng)設(shè)計(jì)。通過(guò)一個(gè)資源管理服務(wù)中心系統(tǒng)的軟件設(shè)計(jì)實(shí)例說(shuō)明了該方法的有效性。雖然本文只給出的常用的36種SOA設(shè)計(jì)模式的選擇方法,但該方法具有一定的通用性,不局限于SOA設(shè)計(jì)模式,還可擴(kuò)展到其它類型的軟件設(shè)計(jì)模式。下一步工作是使用知識(shí)圖譜的工具構(gòu)建可視化圖譜來(lái)展示SOA設(shè)計(jì)模式更多的屬性和關(guān)系,為系統(tǒng)架構(gòu)師提供更全面的幫助。