王光偉(裝甲兵工程學(xué)院科研部,北京 100072)
一種基于構(gòu)件的軟件系統(tǒng)性能工程生命周期過(guò)程模型
王光偉
(裝甲兵工程學(xué)院科研部,北京100072)
軟件構(gòu)件技術(shù)近年來(lái)在軟件開(kāi)發(fā)中得到了廣泛的應(yīng)用,基于構(gòu)件的軟件開(kāi)發(fā)(Component-Based Software Development,CBSD)通過(guò)組裝已有的構(gòu)件實(shí)現(xiàn)軟件復(fù)用,能夠較短時(shí)間內(nèi)開(kāi)發(fā)出開(kāi)發(fā)新的系統(tǒng),提高了軟件開(kāi)發(fā)效率和產(chǎn)品質(zhì)量。基于構(gòu)件的軟件系統(tǒng)性能是指系統(tǒng)對(duì)及時(shí)性要求的符合程度,通常用響應(yīng)時(shí)間、吞吐量、資源利用率等性能指標(biāo)進(jìn)行衡量。
傳統(tǒng)軟件工程中的軟件性能管理通常采用 “以后修正”(Fix-it-later)的方法,在構(gòu)件設(shè)計(jì)、開(kāi)發(fā)、組裝等前期階段時(shí)對(duì)性能關(guān)注不夠,直到系統(tǒng)基本完成實(shí)現(xiàn)進(jìn)行測(cè)試和試運(yùn)行的時(shí)候才著力解決性能瓶頸,但很多性能問(wèn)題是由于在系統(tǒng)設(shè)計(jì)帶來(lái)的,此時(shí)已不能從體系結(jié)構(gòu)進(jìn)行較大的更改,提高性能的途徑是有限的,往往不能從根本上解決出現(xiàn)的軟件性能問(wèn)題。為解決這一問(wèn)題,提出了軟件性能工程(Software Performance Engineering,SPE),軟件性能工程技術(shù)不僅能夠使得軟件的功能屬性在軟件的整個(gè)軟件開(kāi)發(fā)生命周期中能夠被追蹤、管理,軟件的非功能屬性和性能也能夠被追蹤[1]。
但是傳統(tǒng)的軟件性能工程在基于構(gòu)件的軟件開(kāi)發(fā)過(guò)程中遇到了新問(wèn)題,與傳統(tǒng)的軟件開(kāi)發(fā)方式相比,基于構(gòu)件的軟件開(kāi)發(fā)更加強(qiáng)調(diào)構(gòu)件的組裝、配置、部署、運(yùn)行與動(dòng)態(tài)重構(gòu)[2],而傳統(tǒng)的軟件性能工程沒(méi)有提供對(duì)這些階段的支持方法,例如在構(gòu)件動(dòng)態(tài)重構(gòu)時(shí),因?yàn)閭鹘y(tǒng)的軟件性能工程沒(méi)有直接提供對(duì)分布式構(gòu)件組裝的支持,軟件的原有性能就不能直接應(yīng)用在基于構(gòu)件的軟件開(kāi)發(fā)過(guò)程中技術(shù)中。另外,在構(gòu)件動(dòng)態(tài)重構(gòu)時(shí),軟件的原有性能屬性都會(huì)發(fā)生變化,而傳統(tǒng)的軟件性能工程都沒(méi)有提供應(yīng)對(duì)變化的方法。因此需要針對(duì)構(gòu)件開(kāi)發(fā)的特點(diǎn),對(duì)軟件性能工程中的性能過(guò)程模型進(jìn)行研究,提出適合基于構(gòu)件的軟件系統(tǒng)開(kāi)發(fā)的新的性能過(guò)程模型。
構(gòu)件是軟件系統(tǒng)中具有相對(duì)獨(dú)立功能的組成實(shí)體,通過(guò)標(biāo)準(zhǔn)接口對(duì)外提供服務(wù),具有可復(fù)用、可組裝、可替換的特點(diǎn)。構(gòu)件通過(guò)對(duì)外提供的接口稱為服務(wù)接口(provide interface)、請(qǐng)求接口(request interface)[3]。
構(gòu)件性能的影響的因素比較復(fù)雜,因?yàn)闃?gòu)件的性能不僅取決于構(gòu)件內(nèi)部實(shí)現(xiàn) (如構(gòu)件實(shí)現(xiàn)采用的算法和編程語(yǔ)言),還取決于構(gòu)件部署的環(huán)境。構(gòu)件性能的影響因素主要包括:構(gòu)件實(shí)現(xiàn)、請(qǐng)求服務(wù)、部署平臺(tái)、輸入?yún)?shù)、資源競(jìng)爭(zhēng)。如圖1所示。
圖1 構(gòu)件性能影響因素
構(gòu)件的實(shí)現(xiàn):在構(gòu)件定義時(shí),對(duì)于相同的服務(wù)接口,不同的構(gòu)件開(kāi)發(fā)人員可以使用完全不同的方法實(shí)現(xiàn),雖然這些構(gòu)件提供的服務(wù)接口都是相同的,即構(gòu)件功能是相同的,但是由于構(gòu)件內(nèi)部具體實(shí)現(xiàn)不同,如采用的算法不同、編程實(shí)現(xiàn)不同等。即使在相同的運(yùn)行環(huán)境下,這些服務(wù)接口相同內(nèi)部實(shí)現(xiàn)不同的構(gòu)件展現(xiàn)出的構(gòu)件性能仍然是不同的。
部署平臺(tái):構(gòu)件性能受部署環(huán)境的影響,部署環(huán)境包括硬件環(huán)境和軟件環(huán)境,硬件環(huán)境如CPU的個(gè)數(shù)和主頻、內(nèi)存容量、網(wǎng)絡(luò)帶寬、外部存儲(chǔ)設(shè)備的性能等。除硬件之外,還包括軟件中間層的影響,如構(gòu)件容器、虛擬機(jī)、操作系統(tǒng)等,如.NET平臺(tái)對(duì)構(gòu)件性能的影響構(gòu)件。
輸入?yún)?shù):當(dāng)用戶調(diào)用構(gòu)件提供的服務(wù)時(shí),服務(wù)的執(zhí)行時(shí)間會(huì)因用戶輸入的不同參數(shù)值而不同,如某數(shù)學(xué)運(yùn)算構(gòu)件,用戶輸入數(shù)值的大小會(huì)影響構(gòu)件運(yùn)行的時(shí)間。除用戶輸入外,構(gòu)件運(yùn)行時(shí)還可能需要調(diào)用其依賴的其他構(gòu)件提供的參數(shù)值,這些參數(shù)值也會(huì)影響構(gòu)件的執(zhí)行時(shí)間。
資源競(jìng)爭(zhēng):在運(yùn)行平臺(tái)上構(gòu)件通常不是獨(dú)立的,而是與其他進(jìn)程一起運(yùn)行,構(gòu)件與該平臺(tái)環(huán)境中其他運(yùn)行的進(jìn)程之間可能存在資源競(jìng)爭(zhēng)關(guān)系,如線程池的線程數(shù)量、數(shù)據(jù)庫(kù)連接數(shù)、信號(hào)量等,構(gòu)件在運(yùn)行時(shí)等待競(jìng)爭(zhēng)資源的時(shí)間會(huì)影響構(gòu)件執(zhí)行的總時(shí)間,帶來(lái)構(gòu)件性能的影響。
在構(gòu)件生命周期的不同階段,對(duì)構(gòu)件性能起重要作用的影響因素是不同的,因此,需要提出構(gòu)件生命周期性能模型。文獻(xiàn)[4]把構(gòu)件生命周期分為三個(gè)階段:設(shè)計(jì)階段、部署階段和運(yùn)行階段。Cheesman和Daniels[5]提出了的理想化的構(gòu)件生命周期的四個(gè)階段:構(gòu)件的定義、構(gòu)件的實(shí)現(xiàn)、構(gòu)件的部署和構(gòu)件的運(yùn)行。在構(gòu)件生命周期的每個(gè)階段,構(gòu)件性能建模的內(nèi)容和關(guān)注點(diǎn)有所不同。
在構(gòu)件的定義階段,性能管理主要體現(xiàn)為描述構(gòu)件的服務(wù)接口和請(qǐng)求接口,可以使用UML建模語(yǔ)言進(jìn)行描述。由于此時(shí)構(gòu)件還沒(méi)有實(shí)現(xiàn),對(duì)該構(gòu)件的實(shí)現(xiàn)、部署、運(yùn)行時(shí)的有關(guān)性能的相關(guān)信息無(wú)法得到,所以構(gòu)件性能模型只能對(duì)該構(gòu)件提供服務(wù)接口的性能需求進(jìn)行定義和描述,即對(duì)構(gòu)件性能指標(biāo)的定義,如某數(shù)據(jù)庫(kù)訪問(wèn)構(gòu)件的查詢操作的最長(zhǎng)時(shí)間不超過(guò)10秒。
在構(gòu)件的實(shí)現(xiàn)階段,構(gòu)件功能的實(shí)現(xiàn)需要向其他構(gòu)件提供的接口請(qǐng)求服務(wù),實(shí)現(xiàn)需求定義時(shí)的構(gòu)件功能。由于此時(shí)構(gòu)件尚未部署和運(yùn)行,因此構(gòu)件實(shí)現(xiàn)階段的性能模型包括不依賴硬件平臺(tái)的資源需求和構(gòu)件行為信息,以及用戶輸入?yún)?shù)等。
在構(gòu)件的部署階段,已實(shí)現(xiàn)的構(gòu)件與其他構(gòu)件進(jìn)行裝配后部署到硬件平臺(tái)上,該階段的構(gòu)件性能模型包括構(gòu)件容器、操作系統(tǒng)和硬件的信息。此時(shí)與硬件平臺(tái)無(wú)關(guān)的資源需求可以轉(zhuǎn)換為平臺(tái)相關(guān)的資源需求,如將構(gòu)件實(shí)現(xiàn)階段的 “處理器周期”轉(zhuǎn)換為 “執(zhí)行時(shí)間”。
最后,在構(gòu)件的運(yùn)行階段,構(gòu)件被實(shí)例化并運(yùn)行,可以響應(yīng)客戶端的請(qǐng)求。此時(shí)的構(gòu)件是在運(yùn)行在內(nèi)存中的一個(gè)對(duì)象的實(shí)例。構(gòu)件運(yùn)行階段的性能模型,還包括此階段構(gòu)件的吞吐量 (即客戶端調(diào)用構(gòu)件的數(shù)量),用戶的輸入?yún)?shù)以及與構(gòu)件性能相關(guān)的內(nèi)部狀態(tài)。此外,系統(tǒng)的整體性能模型還包括系統(tǒng)中與構(gòu)件并行運(yùn)行的其他進(jìn)程參與系統(tǒng)資源的情況。
在基于構(gòu)件的軟件系統(tǒng)生命周期中,從早期設(shè)計(jì)階段的性能預(yù)測(cè)到運(yùn)行階段的性能測(cè)試,都需要采用來(lái)自系統(tǒng)架構(gòu)師和構(gòu)件開(kāi)發(fā)人員提供的信息。首先進(jìn)行系統(tǒng)需求分析,構(gòu)件開(kāi)發(fā)人員根據(jù)需求檢索已有構(gòu)件,判斷現(xiàn)有構(gòu)件是否滿足需求:如果已有構(gòu)件能夠?qū)崿F(xiàn)所需功能和性能需求,則對(duì)該構(gòu)件進(jìn)行性能測(cè)試,放入構(gòu)件庫(kù);如果沒(méi)有滿足功能需求的構(gòu)件,需要進(jìn)行構(gòu)件需求分析,定義構(gòu)件的功能需求和性能需求,進(jìn)行構(gòu)件性能建模,此時(shí)的模型稱為架構(gòu)模型,包括構(gòu)件部署模型、構(gòu)件組裝模型和構(gòu)件運(yùn)行模型,架構(gòu)模型經(jīng)過(guò)模型轉(zhuǎn)換成為可以進(jìn)行分析和評(píng)估的系統(tǒng)性能模型,通常使用排序網(wǎng)絡(luò)等技術(shù)進(jìn)行系統(tǒng)性能模型建模,對(duì)性能模型進(jìn)行分析評(píng)估或者仿真運(yùn)行,得到可供分析評(píng)估構(gòu)架性能的數(shù)據(jù),形成構(gòu)件性能矩陣,對(duì)性能數(shù)據(jù)進(jìn)行評(píng)估,檢查性能需求是否滿足。如果滿足需求則進(jìn)行構(gòu)件組裝、測(cè)試和發(fā)布,否則檢查性能模型并重新設(shè)計(jì),再次建模?;跇?gòu)件的軟件系統(tǒng)生命周期性能模型如圖2所示。
構(gòu)件開(kāi)發(fā)人員為構(gòu)件的性能模型提供性能預(yù)測(cè)需要的參數(shù),得到參數(shù)化的構(gòu)件性能模型,構(gòu)件開(kāi)發(fā)者對(duì)構(gòu)件的性能建模需要從構(gòu)件定義開(kāi)始,而此時(shí)構(gòu)件尚未實(shí)現(xiàn),構(gòu)件性能模型需要的參數(shù)是未知的,需要構(gòu)件開(kāi)發(fā)者進(jìn)行估計(jì),例如資源的需求和依賴的服務(wù)。如果存在已實(shí)現(xiàn)的構(gòu)件,則對(duì)構(gòu)件進(jìn)行靜態(tài)分析或者使用試驗(yàn)床上進(jìn)行運(yùn)行得到構(gòu)件性能參數(shù)。
構(gòu)件開(kāi)發(fā)人員將該階段的結(jié)果存入構(gòu)件庫(kù),供企業(yè)內(nèi)其他人員訪問(wèn),該構(gòu)件庫(kù)可以存放構(gòu)件性能模型,還可存放構(gòu)件的需求定義文檔、已實(shí)現(xiàn)的構(gòu)件、其他文檔等。構(gòu)件開(kāi)發(fā)者也可從中檢索已有構(gòu)件組合成新構(gòu)件。
構(gòu)件開(kāi)發(fā)人員是從單個(gè)構(gòu)件的視角進(jìn)行性能建模,而系統(tǒng)架構(gòu)師是從系統(tǒng)的角度進(jìn)行全系統(tǒng)的性能建模,系統(tǒng)架構(gòu)師根據(jù)設(shè)計(jì)系統(tǒng)架構(gòu)的需求,將構(gòu)件庫(kù)中的構(gòu)件性能模型進(jìn)行組裝,包括構(gòu)件組裝模型、部署模型和運(yùn)行模型,組裝模型描述了將構(gòu)件庫(kù)中選擇的已有構(gòu)件組裝成系統(tǒng)的構(gòu)件連接關(guān)系,部署模型定義了構(gòu)件部署的軟硬件平臺(tái),運(yùn)行模型定義了系統(tǒng)運(yùn)行時(shí)的使用信息,如負(fù)載、輸入?yún)?shù)、和內(nèi)部狀態(tài)等。
然后系統(tǒng)架構(gòu)師將包含組裝模型、部署模型和運(yùn)行模型的完整架構(gòu)模型進(jìn)行組裝,轉(zhuǎn)換成系統(tǒng)級(jí)的性能模型,通常使用排隊(duì)網(wǎng)絡(luò)、隨機(jī)Petri網(wǎng)、隨機(jī)進(jìn)程代數(shù)等方法建模并進(jìn)行模擬,得出系統(tǒng)的性能指標(biāo),如響應(yīng)時(shí)間、吞吐量和資源利用率等,系統(tǒng)架構(gòu)師將這些數(shù)據(jù)與系統(tǒng)性能需求指標(biāo)進(jìn)行比較,檢查是否符合系統(tǒng)性能需求。
下面對(duì)構(gòu)件性能模型進(jìn)行需求評(píng)審,如果評(píng)審的預(yù)測(cè)的結(jié)果表明,現(xiàn)有的構(gòu)件設(shè)計(jì)不能滿足性能需求,則架構(gòu)模型需要重新設(shè)計(jì),以提高性能。軟件架構(gòu)師也可以改用其他構(gòu)件或采用其他性能模型,以改變性能,這時(shí)往往需要與客戶進(jìn)行重新協(xié)商。修改完成之后,得到新的體系結(jié)構(gòu)模型,對(duì)新模型重新進(jìn)行預(yù)測(cè)性能和評(píng)估。
圖2 基于構(gòu)件的軟件開(kāi)發(fā)性能過(guò)程模型
如果預(yù)測(cè)結(jié)果表明該設(shè)計(jì)可以滿足需求,則可以開(kāi)始進(jìn)行系統(tǒng)的實(shí)現(xiàn)。在構(gòu)件配置階段,軟件架構(gòu)師可以建造或購(gòu)買決策中指定的構(gòu)件體系結(jié)構(gòu)模型。一旦所有的構(gòu)件都實(shí)現(xiàn)或購(gòu)買,軟件架構(gòu)師即可進(jìn)行構(gòu)件組裝和整個(gè)系統(tǒng)的測(cè)試。除了功能測(cè)試,軟件架構(gòu)師對(duì)系統(tǒng)的性能進(jìn)行容量規(guī)劃(如確定最大負(fù)荷)。測(cè)試完成后,軟件設(shè)計(jì)師給客戶發(fā)布完整的系統(tǒng)。
通過(guò)分析在傳統(tǒng)的軟件性能工程中對(duì)基于構(gòu)件的軟件系統(tǒng)的性能出現(xiàn)的新問(wèn)題,研究了構(gòu)件的性能影響因素和,面向構(gòu)件生命周期的全過(guò)程對(duì)性能模型進(jìn)行了分析,最后給出了一種基于構(gòu)件的軟件系統(tǒng)生命周期性能模型,該模型為在基于構(gòu)件的軟件系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)過(guò)程中,更好地進(jìn)行性能預(yù)測(cè)和性能管理提供了一種參考模型。
[1]王克波.基于分布構(gòu)件的軟件性能工程[J].計(jì)算機(jī)工程與科學(xué),2006,28(11):105-107.
[2]R Dube.A comparison of the memory management subsystem in FreeBSD and Linux[R].Technical Report CST R3929,University of Maryland,1998.
[3]陳霄等.采用構(gòu)件組裝技術(shù)協(xié)同開(kāi)發(fā)Web應(yīng)用的方法[J].計(jì)算機(jī)科學(xué)與探索,2013,7(2):115-116.
[4]B.Christiansson,L.Jakobsson,and I.Crnkovic,“CBD Process,”building reliable component-based software systems,I.Crnkovic and M.Larsson,eds.,pp.89-113,Artech House,2002.
[5]J.Cheesman,J.Daniels.UML Components:A simple process for specifying component-based software systems.Addison-Wesley,2001.
Software Component;Software Performance;Process Model
A Life-Cycle Process Model of Software System Performance Engineering Based on Component
WANG Guang-wei
(Department of Scientific Research,Academy of Armored Forces Engineering,Beijing 100072)
1007-1423(2015)21-0014-04
10.3969/j.issn.1007-1423.2015.21.004
王光偉(1980-),男,山東沂南人,講師,碩士,研究方向?yàn)檐浖こ?/p>
2015-06-04
2015-07-01
在基于構(gòu)件的軟件系統(tǒng)開(kāi)發(fā)過(guò)程中,傳統(tǒng)的軟件性能工程不能解決構(gòu)件的組裝、部署、運(yùn)行等階段的軟件性能管理問(wèn)題。為解決這一問(wèn)題,研究構(gòu)件生命周期的每個(gè)階段的軟件性能影響因素,提出一種基于構(gòu)件的軟件系統(tǒng)性能模型。
軟件構(gòu)件;軟件性能;過(guò)程模型
In the development process of component-based software system,the traditional methods in software performance engineering can not solve the software performance management problems in the stages of component assembling,deployment,runtime etc.To solve this problem,researches factors influencing component performance in each stage of the life-cycle process,and proposes a model for componentsbased software system performance.