宮麗娜,馬懷志
隨著計(jì)算機(jī)技術(shù)的發(fā)展,軟件質(zhì)量在軟件工業(yè)中變得越來越重要。軟件質(zhì)量是軟件的天然屬性,因此人們需要在軟件開發(fā)的早期發(fā)現(xiàn)軟件的質(zhì)量問題,從而實(shí)現(xiàn)對最終軟件的質(zhì)量控制,縮短軟件開發(fā)周期,減少軟件開發(fā)和維護(hù)成本。軟件質(zhì)量預(yù)測建模技術(shù)是軟件質(zhì)量評價(jià)中的關(guān)鍵技術(shù),通過軟件質(zhì)量預(yù)測模型建立軟件的內(nèi)部屬性和軟件質(zhì)量之間的非線性關(guān)系。
目前國內(nèi)外在軟件質(zhì)量預(yù)測模型領(lǐng)域已有了一定的研究成果。主要有傳統(tǒng)的軟件質(zhì)量預(yù)測模型和基于神經(jīng)網(wǎng)絡(luò)的軟件質(zhì)量預(yù)測模型。在傳統(tǒng)的軟件質(zhì)量預(yù)測模型方面,主要有基于軟件的規(guī)模和復(fù)雜度為度量來預(yù)測軟件的缺陷數(shù)[1],采用了回歸方法。此外也有基于測試數(shù)據(jù)的軟件質(zhì)量預(yù)測模型[2]。美國Florida Atlantic University的Khoshgoftaar教授在該領(lǐng)域也做了大量卓有成效的研究工作。Khoshgoftaar和Seliya提出了基于回歸樹( Regression Tree) 模型對軟件各模塊中的錯誤數(shù)進(jìn)行預(yù)測的方法[3],同時Khoshgoftaar 等提出了一種軟件質(zhì)量預(yù)測的建模技術(shù),結(jié)合了模糊聚類( Fuzzy Clustering)和軟件質(zhì)量預(yù)測的模塊級別模型( Module-Order Model)[4]。我國的蔡開元教授首先將模糊方法引入軟件質(zhì)量及可靠性領(lǐng)域,提出了模糊軟件可靠性的確認(rèn)模型[5][6]。但是這些方法均有一定的局限性,所基于的模型也比較粗糙,不能比較好地描述軟件內(nèi)部的缺陷和軟件所表現(xiàn)出的失效之間的非線性關(guān)系。
人工神經(jīng)網(wǎng)絡(luò)于 1992年開始應(yīng)用于軟件質(zhì)量預(yù)測模型,取得了比較好的效果。Karunanithi第一次在軟件質(zhì)量預(yù)測模型中采用人工神經(jīng)網(wǎng)絡(luò)方法,基于一個實(shí)際項(xiàng)目的錯誤數(shù)據(jù)集合,并采用3個不同的神經(jīng)網(wǎng)絡(luò)估計(jì)模型來估計(jì)累計(jì)錯誤數(shù),通過比較得出比統(tǒng)計(jì)模型更好的結(jié)果[7]。Nidhi Gupta和Manu Pratap Singh 采用執(zhí)行時間為B P 神經(jīng)網(wǎng)絡(luò)的輸入來預(yù)測軟件可能發(fā)生的錯誤數(shù)[8]。Liang Tian和Afzel Noore采用遺傳算法來選擇最優(yōu)的神經(jīng)網(wǎng)絡(luò)輸入層和隱含層神經(jīng)元個數(shù)[9,10]。2001年,Khoshgoftaar介紹了基于高可信系統(tǒng)工程的模糊非線性回歸技術(shù),并采用模糊非線性回歸技術(shù)跟模糊邏輯及神經(jīng)網(wǎng)絡(luò)技術(shù)結(jié)合來預(yù)測軟件的質(zhì)量,通過實(shí)驗(yàn)產(chǎn)生了更好的實(shí)驗(yàn)結(jié)果[11]。2002年,Donald E.Neumann 將主成分分析和神經(jīng)網(wǎng)絡(luò)技術(shù)相結(jié)合建立了一個PCA —A N N網(wǎng)絡(luò)的軟件質(zhì)量預(yù)測模型,并通過該模型對軟件中的錯誤進(jìn)行預(yù)測[12]。
綜上所述,軟件質(zhì)量預(yù)測模型主要是基于軟件錯誤測試報(bào)告和軟件質(zhì)量度量,主要應(yīng)用了統(tǒng)計(jì)學(xué)和神經(jīng)網(wǎng)絡(luò)方法,但目前還沒有一個模型被證明是既簡單而又廣泛通用的。所以針對軟件質(zhì)量預(yù)測過程中難以建立精確數(shù)學(xué)模型的特點(diǎn),本文將廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)應(yīng)用于軟件質(zhì)量預(yù)測模型中,以提高學(xué)習(xí)效率和精確度。
軟件質(zhì)量預(yù)測的目的是在軟件開發(fā)的早期根據(jù)與軟件質(zhì)量有關(guān)的數(shù)據(jù),通過分析計(jì)算得到軟件質(zhì)量的預(yù)測值,從而對軟件系統(tǒng)有個宏觀的認(rèn)識。為了達(dá)到這個目的,本文的軟件質(zhì)量預(yù)測模型是建立在以軟件質(zhì)量度量為基礎(chǔ)上的。
模型的自變量為C&K度量指標(biāo)表征的面向?qū)ο筌浖膬?nèi)部屬性的 6個度量元,模型的因變量為軟件的可靠性[13]-[17]。C&K度量方法是基于繼承樹的一套面向?qū)ο蟮亩攘糠椒ǎ唧w的六個度量指標(biāo)如下:
(1)類的加權(quán)方法數(shù) WMC(Weighted Methods per Class ):即為類中方法數(shù)的總和;
(2)繼承樹的深度DIT(Depth of Inheritance Tree):即為類在繼承樹的最大深度;
(3)子類的數(shù)目NOC(Number of Children):即為繼承樹中一個類的直接子類數(shù)目;
(4)對象類之間的耦合CBO(Coupling Between Object Class):即為該類與其他類有耦合關(guān)系的數(shù)目;
(5)響應(yīng)集合RFC(Response For a Class):即為類內(nèi)部及類之間的通信;
(6)方法內(nèi)聚缺乏度LCOM(Lack of Cohesion in Methods).
廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)的質(zhì)量預(yù)測模型主要有 4層組成[18],其具體結(jié)構(gòu),如圖1所示:
圖1 廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)的軟件質(zhì)量預(yù)測模型結(jié)構(gòu)圖
第一層為輸入層,由C&K度量指標(biāo)的6個度量元作為輸入變量,每個節(jié)點(diǎn)對應(yīng)于輸入向量x的第i個分量xi。
第二層為隸屬函數(shù)層,每個節(jié)點(diǎn)代表一個模糊語言變量值,并且每個輸入變量 xi有 u個隸屬函數(shù)Aij(i=1,2…,6;j=1,2…,u),這些隸屬函數(shù)為高斯函數(shù),具有表示為公式(1):
其中,μij是xi的第j個隸屬函數(shù),cij和分別為xi的第j個高斯函數(shù)的中心和寬度。
第三層為 T-范數(shù)層,該層的每個節(jié)點(diǎn)代表了一個 RBF單元,模糊規(guī)則等同一個RBF節(jié)點(diǎn)數(shù)。該層用于計(jì)算每個觸發(fā)權(quán)的 T-范數(shù)算子是乘法,該層第j個規(guī)則 Rj的輸出是公式(2):
第四層為輸出層,該層的每個節(jié)點(diǎn)代表一個輸入信號加權(quán)和的輸出變量,如公式(3):
其中,y是一個輸出變量的值,即為軟件的可靠性,wj是第j個的連接權(quán)。該層執(zhí)行模糊化的功能,同時考慮了所有輸出語言值的隸屬函數(shù)的影響。
通過以上構(gòu)造的模糊神經(jīng)網(wǎng)絡(luò)GD-FNN具有以下特點(diǎn):
(1)每條模糊規(guī)則的T-范數(shù)由式(2)來表示,它可以看做是對角化的馬氏距離,如公式(4):
其中,
由此可知,這個模型的接收域是超橢球體而不是 RBF單元中的超球體。
(2)不同的輸入變量xi有不同的隸屬函數(shù)數(shù)目也就是說,某個輸入變量的隸屬函數(shù)Aij(j=1,2,…,u)可能會有重復(fù)。
廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)是基于橢圓基函數(shù),以模糊ε-完備性作為高斯函數(shù)寬度的確定準(zhǔn)則,避免了初始化過程中選擇的隨機(jī)性,通過對模糊規(guī)則和輸入變量的重要性的評價(jià)使得每個輸入變量和模糊規(guī)則可以根據(jù)誤差較少率來修正。該算法能夠使參數(shù)的調(diào)整和結(jié)構(gòu)的辨識同時進(jìn)行,加快了學(xué)習(xí)速度。算法的流程圖,如圖2所示:
圖2 GD-FNN的學(xué)習(xí)算法流程圖
具體的步驟如下:
(1)初始化參數(shù):εmin,εmax,emin,emax,Kmf,ks,kerr;
(2)根據(jù)第一組數(shù)據(jù)產(chǎn)生第一個規(guī)則,并確定第一個規(guī)則的參數(shù);
(3)計(jì)算下一組數(shù)據(jù)(Xi,ti)(i=1,2,…,n) 的馬氏距離并找到mdk,min,并計(jì)算實(shí)際的輸入誤差ek
(4)比較 mdk,min和 ei,如果 mdk,min>ei,則轉(zhuǎn)到(5),否則轉(zhuǎn)到(7)
(5)比較ei和ke,如果ei>ke,則產(chǎn)生一條新的規(guī)則,確定最新產(chǎn)生規(guī)則的參數(shù),并計(jì)算所有規(guī)則的err和第i個規(guī)則的重要性jη,否則調(diào)整結(jié)論參數(shù),轉(zhuǎn)到第(8);
(6)比較Kerr和jη,如果jη (7) 比較 ei和 ke,如果 ei>ke,則計(jì)算 Bij,調(diào)整寬度,調(diào)整結(jié)論參數(shù),否則,調(diào)整結(jié)論參數(shù); (8)判斷樣本數(shù)據(jù)是否輸入完,完成則結(jié)束,否則轉(zhuǎn)到第(3)。 本實(shí)驗(yàn)選用的軟件質(zhì)量神經(jīng)網(wǎng)絡(luò)預(yù)測模型是廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò),以C&K度量方法的6個度量元:CBO、DIT、NOC、RFC、 WMC、 LCOM作為模型的輸入,以可靠性質(zhì)量屬性作為模型的輸出。用matlab編程實(shí)現(xiàn),先用19個數(shù)據(jù)對廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,然后用8個數(shù)據(jù)進(jìn)行驗(yàn)證。在廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)中初始化參數(shù)為:εm in =0.5;εmax=0.9;emin=0.03;emax=0.5;Kmf=0.5;Ks=0.9;Kerr=0.005。仿真結(jié)果,如圖3-7所示: 圖3 模糊規(guī)則產(chǎn)生圖 圖4 訓(xùn)練樣本的均方根誤差曲線圖 圖5 訓(xùn)練樣本的實(shí)際輸出和預(yù)期輸出比較曲線圖 圖6 驗(yàn)證樣本的均方根誤差曲線圖 圖7 驗(yàn)證樣本的實(shí)際輸出和預(yù)期輸出比較曲線圖 由圖3可知,采用廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)產(chǎn)生的模糊規(guī)則數(shù)為6,而通過粗糙集屬性約簡得到的為16個,明顯減少。計(jì)算可得訓(xùn)練樣本的均方差誤差為2.6918×10-14,誤差很小,基本上與實(shí)際輸出相重合,由圖5可知擬合的程度,并且由圖 4均方根誤差曲線圖可知每個樣本數(shù)據(jù)的誤差都很小。 由圖6和圖7可知,廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)在對前19個訓(xùn)練樣本進(jìn)行學(xué)習(xí)后,對后8個數(shù)據(jù)辨識預(yù)測的結(jié)果基本上和實(shí)際數(shù)據(jù)相重合,每個數(shù)據(jù)的誤差達(dá)到 10-15,驗(yàn)證樣本的均方差誤差為8.4565×10-16,辨識結(jié)果比較理想,并且廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)的訓(xùn)練速度非???,效率和學(xué)習(xí)性能很高。因此,將廣義模糊神經(jīng)網(wǎng)絡(luò)應(yīng)用到軟件質(zhì)量預(yù)測模型中具有一定的實(shí)際意義。 廣義動態(tài)模糊神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)是擴(kuò)展的徑向基函數(shù)神經(jīng)網(wǎng)絡(luò),它基于橢圓基函數(shù),以模糊ε-完備性作為高斯函數(shù)寬度的確定準(zhǔn)則,避免了初始化過程中選擇的隨機(jī)性,通過對模糊規(guī)則和輸入變量的重要性的評價(jià)使得每個輸入變量和模糊規(guī)則可以根據(jù)誤差較少率來修正,并且該算法能夠使參數(shù)的調(diào)整和結(jié)構(gòu)的辨識同時進(jìn)行,加快了學(xué)習(xí)速度。因此該模型很適合應(yīng)用于系統(tǒng)建模?;诖耍疚膶V義模糊神經(jīng)網(wǎng)絡(luò)應(yīng)用到軟件質(zhì)量預(yù)測模型中,通過仿真實(shí)驗(yàn)表明,該模型能夠比較好的反應(yīng)軟件的內(nèi)部屬性和外部屬性之間的非線性關(guān)系,在學(xué)習(xí)效率和性能方面具有更突出的優(yōu)勢。 [1]Hatton, L.C.Safety Related Software Development:Standards, Subsets, Testing, Metrics, Legal Issues,McGraw-Hill, 1994 [2]Fenton, N.E, Lawrence S., Glass, R.Science and substance: a challenge to software engineers, IEEE Software,1994, pp.86-95 [3]Khoshgoftaar, T.M.Seliya, N.Tree-based software quality estimation models for fault prediction, Proceeding of the 8th IEEE Symposium on Software Metrics, 4-7 June 2002, pp.203-214 [4]Khoshgoftaar, T.M., Liu, Y., et al.Multiobjective module-order model for software quality enhancement, IEEE Transactions on Evolutionary Computation, 2004.Vol8,N0.6,pp.593-608 [5]蔡開元,軟件可靠性工程基礎(chǔ),[M]清華人學(xué)出版社,1995 [6]蔡開元,一個模糊軟件可靠性確認(rèn)模型, []航空學(xué)報(bào),1993 年11期,95-98頁 [7]Karunanithi, N.Whitley, D.Malaiya.Y.K.Using neural networks in reliability prediction.IEEE Software,1992,9(4): 53-59 [8]Nidhi Gupta, Manu Pratap Singh.Estimation of software reliability with execution time model using the pattern mapping technique of artificial neural network.Computer and Operations research, 2005,32(1):187-199 [9]Liang Tian, Afzel .Noore.Evolutionary neural modeling for software cumulative failure time prediction.Reliability Engineering and System Safety, 2005,87(1):45-51 [10]Liang Tian, Afzel Noore.On-line prediction of software reliability using an evolutionary connectionist model.Journal of Systems and Software, 2005,77(2):173-180 [11]Zhiwei,T.M.Khoshgoftaar.Software quality prediction for high-assurance network telecommunications systems.The Computer Journal,2001,44(6):557-568. [12]Donal E.Neumann.An Enhanced Neural Network Technique for Software Risk Analysis.IEEE Transaction on Software Engineering,2002,28(9):904-912.3 仿真實(shí)驗(yàn)
4 結(jié)論