馬艷芳,王夢月,周 偉,陳 亮
(1.淮北師范大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 淮北 235000;2.淮北師范大學(xué)數(shù)學(xué)科學(xué)學(xué)院,安徽 淮北 235000)
在網(wǎng)絡(luò)技術(shù)快速發(fā)展的時(shí)代,軟件在人們的生活中扮演著重要角色[1]。軟件系統(tǒng)廣泛地應(yīng)用到各行各業(yè)中,尤其是交通、軍事、金融等重要領(lǐng)域[2]。然而,軟件系統(tǒng)的失效和故障給人們的生活帶來很多不利影響,有時(shí)甚至?xí){到生命安全。由此,軟件質(zhì)量問題受到了人們的高度關(guān)注。軟件可信性作為衡量軟件質(zhì)量的重要指標(biāo),在軟件工程中占有重要的地位。
軟件可信性是20世紀(jì)90年代引入軟件工程領(lǐng)域的新概念,最早是由Laprie[3]提出并與軟件可靠性作區(qū)分。目前,國內(nèi)外專家在軟件可信性的定義方面尚未達(dá)成共識(shí)。美國國家研究委員會(huì)給出了一個(gè)與軟件可信性有關(guān)的定義[4]。他們認(rèn)為即使在環(huán)境發(fā)生崩潰、操作人員出現(xiàn)操作失誤等情況下,一個(gè)系統(tǒng)也能按照預(yù)期的方式運(yùn)行,則該系統(tǒng)是可信的。國家自然科學(xué)基金委員會(huì)于2007年批準(zhǔn)立項(xiàng)了“可信軟件基礎(chǔ)研究”重大研究計(jì)劃[1]。該項(xiàng)目委員會(huì)認(rèn)為可信軟件是指系統(tǒng)的動(dòng)態(tài)行為及其結(jié)果總是符合人們的預(yù)期,并在受到干擾時(shí)仍能提供連續(xù)服務(wù)的軟件。“可信”是在傳統(tǒng)的安全、可靠等概念基礎(chǔ)上發(fā)展起來的一個(gè)相對(duì)較新的學(xué)術(shù)概念。王懷民等[5]對(duì)可信軟件的概念作了進(jìn)一步補(bǔ)充,他們認(rèn)為如果一個(gè)軟件系統(tǒng)的行為總是和用戶的預(yù)期相符合,則稱軟件是可信的,并把軟件的可信性定義為軟件按照用戶預(yù)期提供安全可靠服務(wù)的能力。陶紅偉[6]從最終用戶的角度出發(fā),認(rèn)為軟件可信性是軟件的行為和結(jié)果符合用戶預(yù)期,并在受到干擾時(shí)仍能提供連續(xù)服務(wù)的能力。由此可見,人們雖然對(duì)軟件可信性的理解不同,但是都認(rèn)為軟件可信性可以反映軟件質(zhì)量的好壞,可以作為衡量軟件質(zhì)量的重要標(biāo)準(zhǔn)。
目前,國內(nèi)外學(xué)者已經(jīng)在軟件可信性方面取得很多研究成果。軟件可信性度量與評(píng)估是對(duì)軟件的可信性進(jìn)行量化評(píng)價(jià),通過量化評(píng)估可以為增加軟件研發(fā)的可信性提供依據(jù)[6]。王婧等[7]提出了一套面向航天型號(hào)軟件的可信性度量模型以及分級(jí)評(píng)價(jià)方法,并已成功地運(yùn)用于航天型號(hào)軟件的可信性評(píng)估。郎波等[8]提出了軟件可信分級(jí)模型,能夠?qū)浖目尚判詣澐值燃?jí),為軟件可信評(píng)估機(jī)制提供理論依據(jù)與方法。軟件可信性可以通過一系列的屬性來刻畫。為了確定屬性的權(quán)重,張俊等[9]在保證各屬性重要度的基礎(chǔ)上,結(jié)合屬性之間的相互影響程度,建立了屬性權(quán)重分配模型。陶紅偉[6]將屬性分為關(guān)鍵屬性和非關(guān)鍵屬性,建立了基于屬性的軟件可信性度量模型。隨著“軟件過程也是軟件”的提出,王德鑫等[10]從過程的實(shí)體、行為以及制品方面提取軟件可信的證據(jù),提出了軟件過程可信度量模型。隨著組件化軟件開發(fā)方法的發(fā)展,Mubarak等[11]提出了一種嚴(yán)格的以組件為中心的可信軟件系統(tǒng)開發(fā)的新過程模型。Huang等[12]基于組件之間不同的連接方式建立了軟件可信性度量模型。Wang等[2]提出了一種基于組件的可信度更新模型,該模型根據(jù)用戶的反饋計(jì)算組件的可信程度,更新的權(quán)重由用戶數(shù)量決定。軟件可信屬性可分為功能屬性和非功能屬性,用戶對(duì)非功能屬性的滿足程度直接影響軟件質(zhì)量的好壞[1]。由此,羅新星等[13]提出了一種基于關(guān)鍵非功能屬性的軟件可信性度量模型。張璇等[14]基于利益相關(guān)者對(duì)非功能屬性的優(yōu)先級(jí)約束和基線約束,提出了非功能屬性權(quán)衡代價(jià)分析方法,該方法可以幫助利益相關(guān)者選擇最優(yōu)策略。而為了保證軟件的可信性,軟件需求分析人員需要確定軟件中各個(gè)單元的可信性需求,由此軟件的可信性分配問題成為需要解決的問題[15]。樓俊鋼等[16]為了對(duì)可信性屬性進(jìn)行量化分配,在三角模糊數(shù)和層次分析法的基礎(chǔ)上,提出了一種模糊層次分析法。Ma等[15]建立了基于屬性的可信性分配模型及其可信分配算法,并已應(yīng)用于嵌入式航天軟件中,足以證明其有效性且對(duì)軟件可信性的研究有指導(dǎo)作用。在文獻(xiàn)[6]的基礎(chǔ)上,Tao等[17]進(jìn)一步提出了基于子屬性的軟件可信性分配模型。黃杜娟[18]在保證達(dá)到用戶給定的軟件系統(tǒng)可信性目標(biāo)的情況下,研究如何分配構(gòu)成系統(tǒng)各個(gè)子系統(tǒng)的可信性指標(biāo),使得軟件所需開發(fā)費(fèi)用最小。
近年來,軟件系統(tǒng)的結(jié)構(gòu)越來越復(fù)雜,模塊化開發(fā)方法已成為開發(fā)軟件產(chǎn)品的主要發(fā)展趨勢之一。作為軟件的使用者,用戶在安裝系統(tǒng)的時(shí)候可以根據(jù)個(gè)人的需求選擇模塊。由此可見,模塊化軟件的可信性研究非常重要。Alexopoulos等[19]提出了一個(gè)基于模塊化軟件的完整軟件系統(tǒng)可信度評(píng)估模型。但是,隨著軟件系統(tǒng)越來越龐大,開發(fā)軟件系統(tǒng)的費(fèi)用與日劇增。在實(shí)際生活中,軟件系統(tǒng)必須是在用戶給定的開發(fā)費(fèi)用內(nèi)開發(fā)完成,而在研究模塊化軟件的可信性時(shí)上述模型卻忽視了軟件開發(fā)費(fèi)用。因此,在用戶給定的開發(fā)費(fèi)用內(nèi)如何合理分配各模塊的開發(fā)費(fèi)用,使得軟件系統(tǒng)可信性達(dá)到最優(yōu),是一個(gè)很有意義的研究課題。
軟件系統(tǒng)體系結(jié)構(gòu)是系統(tǒng)的全局視圖和主要結(jié)構(gòu)。研究其層次設(shè)計(jì)時(shí),依據(jù)研究的范圍將體系結(jié)構(gòu)整體分解為多個(gè)組成部分。文獻(xiàn)[20]給出了軟件體系結(jié)構(gòu)的層次框架圖,如圖1所示。
Figure 1 Hierarchical framework of software architecture圖1 軟件體系結(jié)構(gòu)的層次框架圖
軟件體系結(jié)構(gòu)自上而下逐層分解直至模塊。模塊是功能完整、可重用的對(duì)象,通常只關(guān)注模塊外的功能和交互特征,不需要了解模塊的內(nèi)部結(jié)構(gòu)。每個(gè)模塊既可以單獨(dú)使用,也可以進(jìn)行組合使用。模塊化軟件由多個(gè)功能獨(dú)立的模塊組成,模塊之間的相互作用形成軟件系統(tǒng)的所有功能。模塊通過順序、分支、并行和循環(huán)的方式連接,進(jìn)而構(gòu)成軟件系統(tǒng)。
提高模塊的可信性需花費(fèi)一定的費(fèi)用,只有確定了模塊的可信性與費(fèi)用的關(guān)系才能在用戶給定的開發(fā)費(fèi)用內(nèi)得到系統(tǒng)最優(yōu)可信性。因此,確定模塊的可信性與費(fèi)用之間的關(guān)系是首要任務(wù)。
一方面,可靠性是屬于可信性的一個(gè)重要屬性,研究可信性的同時(shí)也在研究可靠性;另一方面,提高模塊可信性的費(fèi)用很大程度上花費(fèi)在提高可靠性上,由此,根據(jù)可靠性與費(fèi)用之間的關(guān)系,建立模塊的可信性費(fèi)用預(yù)估模型[1]。因此,借鑒文獻(xiàn)[21]中的可靠性與費(fèi)用之間的關(guān)系,下面給出模塊可信性費(fèi)用預(yù)估函數(shù)的定義:
定義1假設(shè)T∈(0,1)是模塊的可信性,f∈(0,1)是模塊的復(fù)雜度,D是模塊開發(fā)的初始成本,令:
(1)
則稱C(T)是模塊的可信性費(fèi)用預(yù)估函數(shù)。
由式(1)可知,模塊結(jié)構(gòu)簡單,開發(fā)難度小,其所需開發(fā)費(fèi)用低;相反,模塊結(jié)構(gòu)復(fù)雜,開發(fā)難度大,其所需開發(fā)費(fèi)用相對(duì)較高;當(dāng)模塊的可信性越接近于最大可信性時(shí),開發(fā)費(fèi)用會(huì)迅速增加到無窮大。
式(1)滿足1986年Dale等[22]提出的費(fèi)用函數(shù)性質(zhì),模塊的可信性費(fèi)用預(yù)估函數(shù)性質(zhì)如下所示:
性質(zhì)1假設(shè)一個(gè)軟件系統(tǒng)由n個(gè)模塊組成,第i(1≤i≤n)個(gè)模塊的可信性為Ti,記C(T′i)-C(Ti)表示將模塊的可信性從Ti提高到T′i所需要的費(fèi)用,0 (1)提高模塊可信性的費(fèi)用是非負(fù)的,即C(T′i)-C(Ti)≥0; (3)當(dāng)0 證明 (3)計(jì)算可得C(T′i)-C(Ti)+C(T″i)-C(T′i) =C(T″i)-C(Ti)。 □ 假設(shè)一個(gè)軟件系統(tǒng)由n個(gè)模塊M1,M2,…,Mn組成,每個(gè)模塊在進(jìn)行組裝之前已初步開發(fā)完成,具有一定的可信性。軟件工程師對(duì)各模塊可信性進(jìn)行評(píng)估,此階段評(píng)估值可作為各模塊的初始可信性,令模塊Mi的初始可信性為Ti.min,其中1≤i≤n,0 開發(fā)人員會(huì)首先根據(jù)所需模塊的可信性指標(biāo)制定各個(gè)模塊的開發(fā)計(jì)劃。因此,如果開發(fā)人員決定開發(fā)某個(gè)模塊時(shí),才會(huì)投入資源制定開發(fā)計(jì)劃,提高模塊的可信性直到最大可信性;而若對(duì)某個(gè)模塊的可信性要求不高,則不需要浪費(fèi)資源制定開發(fā)計(jì)劃,保證模塊的初始可信性即可。因此,利用0-1背包問題的思想,令一個(gè)n元0/1數(shù)組x=[x1,x2,…,xi,…,xn]表示各個(gè)模塊的開發(fā)情況,xi=1表示分配開發(fā)費(fèi)用Wi開發(fā)模塊Mi并達(dá)到其最大可信性Ti.max;xi=0表示沒有分配開發(fā)費(fèi)用給模塊Mi,此時(shí)模塊Mi的可信性為初始可信性Ti.min。 各模塊根據(jù)不同的組合方式構(gòu)成一個(gè)復(fù)雜的軟件系統(tǒng),而軟件系統(tǒng)的可信性由各模塊可信性及其組成方式所決定。由此,令g表示各模塊之間的不同組成方式的函數(shù),模塊的可信性分別為T1,T2,…,Tn,得目標(biāo)函數(shù)和約束條件為: T=maxg(T1,T2,…,Tn) (2) 其中,Ti是模塊Mi的可信性,當(dāng)xi=0時(shí),Ti=Ti.min;當(dāng)xi=1時(shí),Ti=Ti.max。Wi是提高模塊Mi到最大可信性的所需費(fèi)用;W為軟件開發(fā)費(fèi)用。根據(jù)最優(yōu)解x=[x1,x2,…,xn],將模塊可信性代入式(2),即得到軟件系統(tǒng)的最優(yōu)可信性。 在順序結(jié)構(gòu)中,每個(gè)模塊相互獨(dú)立,依次執(zhí)行[12],如圖2所示。軟件系統(tǒng)中一個(gè)模塊的錯(cuò)誤將導(dǎo)致系統(tǒng)出錯(cuò),即模塊的可信性越低,系統(tǒng)的可信性越低。因此,采用連乘各模塊可信性的方法求解系統(tǒng)的最優(yōu)可信性。 Figure 2 Software system with sequence structure圖2 順序結(jié)構(gòu)的軟件系統(tǒng) 得目標(biāo)函數(shù)和約束條件為: (3) 根據(jù)最優(yōu)解x=[x1,x2,…,xn],將模塊可信性代入式(3),即得到軟件系統(tǒng)的最優(yōu)可信性。 根據(jù)模塊的個(gè)數(shù)和用戶給定的開發(fā)費(fèi)用進(jìn)行子問題的劃分。設(shè)Fi(y)max表示存在并只開發(fā)前i個(gè)模塊,開發(fā)費(fèi)用y不超過W時(shí)系統(tǒng)的最大可信性,分2種情況考慮: (1)不開發(fā)第i個(gè)模塊,那么只能開發(fā)前(i-1)個(gè)模塊,此時(shí)開發(fā)費(fèi)用仍為y,則系統(tǒng)的最大可信性是Fi-1(y)max; (2)使用開發(fā)費(fèi)用Wi開發(fā)了第i個(gè)模塊,此時(shí)剩下的開發(fā)費(fèi)用(y-Wi)用于開發(fā)前(i-1)個(gè)模塊。 由此,得到順序結(jié)構(gòu)下的軟件可信性與費(fèi)用分配問題的遞推關(guān)系: Fi(y)max=max{Fi-1(y)max· Ti.min,Fi-1(y-Wi)max·Ti.max} F0(y)max=1,0≤y≤W Fi(y)max=-∞,y<0 其中,F(xiàn)0(y)max是不開發(fā)任何一個(gè)模塊的系統(tǒng)可信性,理論上F0(y)max=0。因?yàn)轫樞蚪Y(jié)構(gòu)下的軟件系統(tǒng)可信性是連乘所有模塊的可信性得到的,在遞推過程中,當(dāng)i=1時(shí),F(xiàn)1(y)max=max{F0(y)max·T1.min,F0(y-W1)max·T1.max},為了使F0(y)max·T1.min≠0,F0(y-W1)max·T1.max≠0,令F0(y)max=1(0≤y≤W)。當(dāng)軟件系統(tǒng)只由一個(gè)模塊組成時(shí),若y 算法1順序結(jié)構(gòu)下的軟件可信性與費(fèi)用分配算法 Input:n,W,w[n]={W1,…,Wn},r[n]={T1.min,…,Tn.min},t[n]={T1.max,…,Tn.max}。 Output:最優(yōu)解x[n],最大可信性V[n][W]。 1.forj←1toWdo 2.V[0][j]←0; 3.fori←1tondo 4.forj←1toWdo 5.ifj 6.V[i][j]←V[i-1][j]*r[i]; 7.elseV[i][j]←max(V[i-1][j]*r[i],V[i-1][j-w[i]]*t[i]); 8.endif 9.endfor 10.endfor 11.j←W; 12.fori←nto1 step -1do 13.ifV[i][j]/r[i]>V[i-1][j]then 14.x[i]←1;j←j-w[i]; 15.elsex[i]←0; 16.endif 17.endfor 18.returnx[n],V[n][W] 算法分析:時(shí)間效率為O(nW)??臻g效率為用于存儲(chǔ)二維數(shù)組的空間大小,即為O(nW)。 在分支結(jié)構(gòu)中,每次運(yùn)行時(shí),系統(tǒng)會(huì)以一定的概率選擇其中的一個(gè)分支來運(yùn)行[12],而概率信息代表每個(gè)模塊的運(yùn)行次數(shù),如圖3所示。 Figure 3 Software system with branch structure圖3 分支結(jié)構(gòu)的軟件系統(tǒng) 得目標(biāo)函數(shù)和約束條件為: (4) 根據(jù)模塊的個(gè)數(shù)和用戶給定的開發(fā)費(fèi)用進(jìn)行子問題的劃分,劃分方法與4.2節(jié)的順序結(jié)構(gòu)下的劃分方法相同。由此,得到分支結(jié)構(gòu)下的軟件可信性與費(fèi)用分配問題的遞推關(guān)系: Fi(y)max=max{Fi-1(y)max+piTi.min, Fi-1(y-Wi)max+piTi.max} F0(y)max=0,0≤y≤W Fi(y)max=-∞,y<0 其中,F(xiàn)0(y)max是不開發(fā)任何一個(gè)模塊的系統(tǒng)最大可信性,即F0(y)max=0。當(dāng)軟件系統(tǒng)只由一個(gè)模塊組成時(shí),若y 算法2分支結(jié)構(gòu)下的軟件可信性與費(fèi)用分配算法 Input:n,W,w[n]={W1,…,Wn},r[n]={T1.min,…,Tn.min},t[n]={T1.max,…,Tn.max}。 Output:最優(yōu)解x[n],最大可信性V[n][W]。 1.forj←1toWdo 2.V[0][j]←0; 3.fori←1tondo 4.forj←1toWdo 5.ifj 6.V[i][j]←V[i-1][j]+pi*r[i]; 7.elseV[i][j]←max(V[i-1][j]+pi*r[i],V[i-1][j-w[i]]+pi*t[i]); 8.endif 9.endfor 10.endfor 11.j←W; 12.fori←nto1 step -1do 13.ifV[i][j]-pi*r[i]>V[i-1][j]then 14.x[i]←1;j←j-w[i]; 15.elsex[i]←0; 16.endif 17.endfor 18.returnx[n],V[n][W] 算法分析:時(shí)間效率為O(nW)??臻g效率為用于存儲(chǔ)二維數(shù)組的空間大小,即為O(nW)。 在并行結(jié)構(gòu)中,存在2種基本情況。第1種是與并行,只有當(dāng)所有模塊都運(yùn)行成功時(shí),整個(gè)系統(tǒng)才是成功的。與并行結(jié)構(gòu)下的軟件可信性與費(fèi)用分配模型同4.2節(jié)的順序結(jié)構(gòu)下的模型相同。第2種是或并行,只要有一個(gè)模塊運(yùn)行成功即可[12],如圖4所示。 Figure 4 Software system with or parallel structure圖4 或并行結(jié)構(gòu)的軟件系統(tǒng) 得目標(biāo)函數(shù)和約束條件為: (5) 根據(jù)最優(yōu)解x=[x1,x2,…,xn],將模塊可信性代入式(5),即可得到軟件系統(tǒng)的最優(yōu)可信性。 由此,得到或并行結(jié)構(gòu)下的軟件可信性與費(fèi)用分配問題的遞推關(guān)系: Fi(y)min=min{Fi-1(y)min·(1-Ti.min), Fi-1(y-Wi)min·(1-Ti.max)} F0(y)min=1,0≤y≤W Fi(y)min=-∞,y<0 算法3或并行結(jié)構(gòu)下的軟件可信性與費(fèi)用分配算法 Input:n,W,w[n]={W1,…,Wn},r[n]={T1.min,…,Tn.min},t[n]={T1.max,…,Tn.max}。 Output:最優(yōu)解x[n],最小可信性M[n][W]。 1.forj←1toWdo 2.M[0][j]←0; 3.fori←1tondo 4.forj←1toWdo 5.ifj 6.M[i][j]←M[i-1][j]*(1-r[i]); 7.elseM[i][j]←min(M[i-1][j]*(1-r[i]),M[i-1][j-w[i]]*(1-t[i])); 8.endif 9.endfor 10.endfor 11.j←W; 12.fori←nto1 step -1do 13.ifM[i][j]/(1-r[i]) 14.x[i]←1;j←j-w[i]; 15.elsex[i]←0; 16.endif 17.endfor 18.returnx[n],M[n][W] 算法分析:時(shí)間效率為O(nW)??臻g效率為用于存儲(chǔ)二維數(shù)組的空間大小,即為O(nW)。 軟件系統(tǒng)中的一個(gè)或多個(gè)模塊被重復(fù)執(zhí)行時(shí)就構(gòu)成了一個(gè)循環(huán)體[12]。假設(shè)循環(huán)體為A,循環(huán)次數(shù)是t,如圖5所示。 Figure 5 Software system with loop structure圖5 循環(huán)結(jié)構(gòu)的軟件系統(tǒng) 循環(huán)體A是由模塊M1,M2,…,Mn組成,模塊之間的組合方式可能是順序、分支或并行。利用式(3)~式(5)可得到循環(huán)體A的可信性。令TA表示循環(huán)體的可信性,若循環(huán)體A為順序結(jié)構(gòu),則TA=TS;若循環(huán)體A為分支結(jié)構(gòu),則TA=TB;若循環(huán)體A為并行結(jié)構(gòu),則TA=TP。假設(shè)循環(huán)次數(shù)為t,且t≥1,得目標(biāo)函數(shù)和約束條件為: (6) 根據(jù)最優(yōu)解x=[x1,x2,…,xn],將模塊可信性代入式(6),即得到軟件系統(tǒng)的最優(yōu)可信性。 目前,基于軟件可信性討論開發(fā)費(fèi)用分配的研究尚少,大部分研究聚焦于軟件可信性的分配方法。然而,在軟件開發(fā)過程中,提高軟件系統(tǒng)的可信性需要花費(fèi)巨大的成本,所以在軟件開發(fā)過程中,考慮軟件開發(fā)費(fèi)用的分配具有十分重要的意義。 (1)文獻(xiàn)[15]在基于用戶給定的軟件系統(tǒng)可信性目標(biāo)的基礎(chǔ)上,建立了軟件屬性的可信性分配模型,具體如下所示: 其中,yi=y*+k(αi-αmin)是第i個(gè)屬性的可信性;y*是第i個(gè)屬性必須滿足的最低可信性;αi是第i個(gè)屬性的權(quán)重;αmin是最小權(quán)重;k是屬性的可信增長率,所有屬性的可信增長率相同;T*是用戶給定的軟件系統(tǒng)必須滿足的可信性目標(biāo)。 步驟1令屬性集合N={1,2,…,n},M>1=?。 步驟3將可信增長率k代入式y(tǒng)i=y*+k(αi-αmin),i∈N-M>1,求得各個(gè)屬性的可信性。如果yi>1,則重新賦值yi=1,并將第i個(gè)屬性放入集合M>1,M>1=M>1∪{i}。 重復(fù)步驟2~步驟3,直到所有屬性的可信性小于或等于1,即屬性的可信性分配結(jié)束。 然而,該模型只考慮了屬性的可信性分配,并未考慮軟件開發(fā)費(fèi)用的分配問題。 (2)文獻(xiàn)[2]提出了一種基于用戶反饋的軟件可信性更新模型,具體如下所示: 其中,Tn是更新后的軟件可信性;Tu是用戶反饋的可信性;T0是軟件原始的可信性;ω0是軟件原始的可信性權(quán)重;n是用戶個(gè)數(shù);ωu(n)是用戶反饋的權(quán)重。 該模型根據(jù)用戶的反饋和用戶數(shù)量重新分配屬性的權(quán)重,計(jì)算更新后的軟件可信性,然而,該模型也并未考慮軟件開發(fā)費(fèi)用分配這個(gè)重要的問題。 (3)文獻(xiàn)[18]是在滿足用戶給定的軟件可信性目標(biāo)的前提下,研究如何分配各個(gè)子系統(tǒng)的可信性,使得軟件所需開發(fā)費(fèi)用最小,提出的模型如下所示: s.t.f(Ti)≥Tobj 其中,E是軟件系統(tǒng)的開發(fā)費(fèi)用,Ei是第i個(gè)子系統(tǒng)的開發(fā)費(fèi)用,f表示各子系統(tǒng)之間的組成方式,Ti是第i個(gè)子系統(tǒng)的可信性,Tobj是用戶給定的軟件系統(tǒng)的可信性目標(biāo)。然而,在實(shí)際軟件開發(fā)過程中,軟件系統(tǒng)是在給定的開發(fā)費(fèi)用內(nèi)開發(fā)完成的。 軟件開發(fā)費(fèi)用是研究軟件開發(fā)必須優(yōu)先考慮的重要因素。在用戶給定的軟件開發(fā)費(fèi)用內(nèi)如何實(shí)現(xiàn)軟件系統(tǒng)的可信性最優(yōu)化具有重要的研究意義,然而,當(dāng)前關(guān)于這一方面尚無更好的研究成果。 Figure 6 Automatic ticketing system圖6 自動(dòng)售票系統(tǒng) 假設(shè)用戶給定的軟件開發(fā)費(fèi)用為70,各模塊初始開發(fā)費(fèi)用為5。模塊的復(fù)雜度fi、初始可信性Ti,min、最大可信性Ti,max及達(dá)到最大可信性Wi所需的費(fèi)用如表1所示。 Table 1 Complexity,initial trustworthiness,maximum trustworthiness and corresponding cost表1 復(fù)雜度、初始可信性、最大可信性及達(dá)到最大可信性所需的費(fèi)用 可得模塊M1和M2組成的登錄功能的初始可信性為0.96,最大可信性為0.99,所需花費(fèi)為20。同理可得,模塊M3和M4組成的訂票功能的初始可信性為0.64,最大可信性為0.92,所需花費(fèi)為25。模塊M1和M2組成或并行結(jié)構(gòu)后,再與模塊M3和M4組成的分支結(jié)構(gòu)順序連接,最后依次再與模塊M5,M6,M7順序連接構(gòu)成,則整個(gè)系統(tǒng)的結(jié)構(gòu)可看作是順序結(jié)構(gòu),利用式(2)可得目標(biāo)函數(shù)為:TS=max[1-(1-T1)(1-T2)]·[(p3T3+p4T4)]2·T5·T6·T7。 由算法1可得,最優(yōu)解為x=[0,1,1,1,0],即分別分配開發(fā)費(fèi)用0,0,15,10,20,25,0給模塊M1,M2,M3,M4,M5,M6和M7,則T1=0.8,T2=0.8,T3=0.99,T4=0.9,T5=0.99,T6=0.99,T7=0.9,可得TS=0.78,即軟件系統(tǒng)的最優(yōu)可信性為0.78。 軟件開發(fā)費(fèi)用分配是軟件可信性工程中的重要環(huán)節(jié)。首先建立模塊的可信性費(fèi)用預(yù)估模型。其次,根據(jù)軟件系統(tǒng)的不同結(jié)構(gòu)特點(diǎn),建立順序、并行、分支和循環(huán)結(jié)構(gòu)下的軟件可信性與費(fèi)用分配模型和分配算法。在給定的軟件開發(fā)費(fèi)用內(nèi),利用動(dòng)態(tài)規(guī)劃進(jìn)行費(fèi)用分配,使得軟件系統(tǒng)的可信性最優(yōu)。該模型不僅可以運(yùn)用于簡單系統(tǒng),也可以運(yùn)用于大型復(fù)雜系統(tǒng)。如何確定模型的參數(shù),則是需要進(jìn)一步深入探討的問題。同時(shí),在今后的工作中,還需要通過實(shí)際項(xiàng)目中的應(yīng)用來進(jìn)一步檢驗(yàn)該模型的有效性和可操作性。4 軟件可信性與費(fèi)用分配模型
4.1 軟件可信性與費(fèi)用分配問題描述
4.2 順序結(jié)構(gòu)下的軟件可信性與費(fèi)用分配模型
4.3 分支結(jié)構(gòu)下的軟件可信性與費(fèi)用分配模型
4.4 并行結(jié)構(gòu)下的軟件可信性與費(fèi)用分配模型
4.5 循環(huán)結(jié)構(gòu)下的軟件可信性與費(fèi)用分配模型
5 算例分析
6 結(jié)束語