任 群
(亳州學(xué)院 電子與信息工程系,安徽 亳州236800)
隨著軟件應(yīng)用規(guī)模越來(lái)越大,復(fù)雜程度越來(lái)越高,軟件的質(zhì)量和可靠性變得尤為重要[1-2],計(jì)算機(jī)軟件的數(shù)據(jù)測(cè)試也成了很多人關(guān)注的焦點(diǎn)[3-4]。在計(jì)算機(jī)軟件的使用過(guò)程中,計(jì)算機(jī)軟件本身的缺陷將會(huì)影響計(jì)算機(jī)的正常使用。計(jì)算機(jī)軟件缺陷在軟件開(kāi)發(fā)的過(guò)程中是客觀存在的[5-6],如果不能及時(shí)發(fā)現(xiàn)軟件的缺陷,就有可能導(dǎo)致計(jì)算機(jī)軟件無(wú)法使用,甚至產(chǎn)生無(wú)法彌補(bǔ)的嚴(yán)重后果[7]。
基于上述問(wèn)題,本文提出了基于智能優(yōu)化算法的計(jì)算機(jī)軟件測(cè)試數(shù)據(jù)自動(dòng)生成方法。該方法能夠在軟件測(cè)試過(guò)程中自動(dòng)生成測(cè)試數(shù)據(jù),并自動(dòng)對(duì)計(jì)算機(jī)軟件測(cè)試數(shù)據(jù)進(jìn)行優(yōu)化測(cè)試。最后,對(duì)提出的方法使用Eclipse標(biāo)準(zhǔn)數(shù)據(jù)進(jìn)行數(shù)據(jù)測(cè)試,結(jié)果表明,該方法可以提高計(jì)算機(jī)軟件測(cè)試數(shù)據(jù)的自動(dòng)生成效率,有利于改善軟件的質(zhì)量。
軟件測(cè)試的目的是及時(shí)發(fā)現(xiàn)軟件中存在的缺陷,并對(duì)其進(jìn)行修正。在利用智能算法自動(dòng)生成測(cè)試數(shù)據(jù)的過(guò)程中,需要從軟件模塊中提取度量元數(shù)據(jù)。利用回歸、分類、聚類等方法找出度量元及其測(cè)試數(shù)據(jù)之間的相互聯(lián)系,以相互聯(lián)系為基準(zhǔn),對(duì)其建立測(cè)試數(shù)據(jù)模型,再通過(guò)基本模型對(duì)軟件中的待測(cè)數(shù)據(jù)進(jìn)行測(cè)試(如圖1所示)。本文以智能優(yōu)化算法自動(dòng)生成的加權(quán)測(cè)試數(shù)據(jù)為基準(zhǔn),對(duì)計(jì)算機(jī)軟件測(cè)試數(shù)據(jù)進(jìn)行不同算法的對(duì)比實(shí)驗(yàn)研究。
圖1 計(jì)算機(jī)軟件測(cè)試數(shù)據(jù)模型
本文中借鑒了Stacking技術(shù),這是一種在行業(yè)中知名的集成推理技術(shù)。在Stacking框架中含有2層分類器,level-0表示的是基分類器,level-1表示的是元分類器。在軟件數(shù)據(jù)測(cè)試中,第一步是對(duì)數(shù)據(jù)集進(jìn)行預(yù)測(cè),第二步是把基分類器中輸出的結(jié)果作為輸入數(shù)據(jù)通過(guò)元分類器進(jìn)行輸入,第三步,將生成的數(shù)據(jù)集作為新推理器的訓(xùn)練數(shù)據(jù)集,再利用數(shù)據(jù)測(cè)試算法對(duì)其進(jìn)行測(cè)試。采用相對(duì)復(fù)雜的智能化算法進(jìn)行計(jì)算機(jī)軟件測(cè)試數(shù)據(jù)模型建立,利用此方法把屬性子集應(yīng)用到軟件測(cè)試數(shù)據(jù)的建模之中,在數(shù)據(jù)丟失最小化的前提下提高模型的性能,以便減少測(cè)試時(shí)間。
定義1:屬性A的數(shù)據(jù)增益率可用IGR(A)=IG(A)/I(A)進(jìn)行表示,其中,IG(A)表示的是屬性A的數(shù)據(jù)增益。IG(A)=entropy(S)-entropy(S,A),表示的是劃分之前數(shù)據(jù)的熵和劃分之后數(shù)據(jù)的熵的差值。
設(shè)訓(xùn)練集S={S1,S2,L,SN},在表達(dá)式中,Si含有一個(gè)屬性向量,該向量可以表示為Xi=(xi1,xi2,L,xip),同時(shí)Si還含有一個(gè)分類標(biāo)簽,該分類標(biāo)簽可以表示為ci∈C={c1,c2,L,cm}。式中,Xi表示的是含有度量向量的測(cè)試數(shù)據(jù)是否存在缺陷的標(biāo)記,ci則對(duì)測(cè)試數(shù)據(jù)是否存在缺陷進(jìn)行標(biāo)記。如果設(shè)pi是S中屬于類別i的比例,數(shù)據(jù)熵則用下式表示:
任何一個(gè)屬性都有幾個(gè)不同的取值,設(shè)Values(A)表示的是A中取不同值的集合,Sv表示的是集合S中所有屬性A取值為v的集合,則可以得到:
本式表示的是基于按A劃分后對(duì)S的元組準(zhǔn)確分類還需要的數(shù)據(jù)量。
引入內(nèi)在數(shù)據(jù)I表示的是訓(xùn)練集S用屬性A進(jìn)行劃分后的數(shù)據(jù)集S',若進(jìn)一步劃分,數(shù)據(jù)總量用下式表示:
數(shù)據(jù)增益率本質(zhì)上是一種補(bǔ)償措施,它可以有效解決數(shù)據(jù)增益中存在的問(wèn)題。
獲取計(jì)算機(jī)軟件的測(cè)試數(shù)據(jù)時(shí),應(yīng)該確定合適的映射規(guī)則。二進(jìn)制編碼就是比較好的映射形式,它具有表達(dá)簡(jiǎn)潔、操作方便等諸多優(yōu)點(diǎn),可以提高智能優(yōu)化算法的計(jì)算效率。根據(jù)數(shù)據(jù)類型的不同,所對(duì)應(yīng)的編碼映射也是不一樣的。在進(jìn)行計(jì)算機(jī)軟件數(shù)據(jù)測(cè)試時(shí)可能會(huì)對(duì)其他參數(shù)產(chǎn)生影響。因此,需要將每個(gè)輸入?yún)?shù)獨(dú)立的編碼,使其成為一個(gè)二進(jìn)制位的參數(shù),之后再將全部的參數(shù)連接起來(lái),組成一個(gè)獨(dú)立的個(gè)體,此處稱之為多參數(shù)級(jí)聯(lián)編碼。具體如下:
級(jí)連之前:X1,X2,……,XN
b11b12…b1m,b21b22…b2m,……,bn1bn2…bnm
級(jí)連之后:b11b12…b1m,b21b22…b2m,bn1bn2… bnm
在進(jìn)行解碼時(shí)應(yīng)該先從總碼中切取n段,每段長(zhǎng)度為m的數(shù)據(jù)鏈,再分別進(jìn)行解碼。
在本文中,采用智能優(yōu)化轉(zhuǎn)化公式:
式中,θ為旋轉(zhuǎn)角。
采用智能優(yōu)化算法生成測(cè)試數(shù)據(jù)的步驟如下:
(1)初始化個(gè)體:掃描給定的路徑,找出需要生成測(cè)試數(shù)據(jù)的變量,并為每個(gè)變量賦隨機(jī)的0,1串,按照多參數(shù)級(jí)聯(lián)編碼原則,組成個(gè)體。
(2)計(jì)算適值函數(shù)值:根據(jù)構(gòu)造的適值函數(shù),分別計(jì)算每組變量的適值函數(shù)值,若滿足終止條件,則轉(zhuǎn)(4)步。
(3)改進(jìn)個(gè)體:若沒(méi)有滿足條件的個(gè)體,則進(jìn)行以下運(yùn)算:
①按適值函數(shù)值選擇下一代個(gè)體。
②解的交叉:從產(chǎn)生的個(gè)體中隨機(jī)選擇兩個(gè)個(gè)體進(jìn)行單點(diǎn)交叉,得到新個(gè)體,重復(fù)該步驟,直到所有個(gè)體均被選中為止。
③解的變異:在交叉后的個(gè)體中隨機(jī)加入一些變異,產(chǎn)生新個(gè)體。
④轉(zhuǎn)到第(2)步。
(4)拆分滿足條件的個(gè)體:把每個(gè)變量對(duì)應(yīng)的0,1串轉(zhuǎn)換成十進(jìn)制數(shù),這些數(shù)據(jù)即為生成的測(cè)試數(shù)據(jù)。
(5)算法結(jié)束。
對(duì)于本文設(shè)計(jì)的計(jì)算機(jī)軟件測(cè)試數(shù)據(jù)評(píng)價(jià)指標(biāo)主要有(area under ROC cure)、F-度量、精確度等。對(duì)于測(cè)試的結(jié)果可以采用表1所示的矩陣進(jìn)行表示:
表1 評(píng)價(jià)指標(biāo)
(1)精確度:precision=TP/(TP+FP);
(2)召回率:recall=TP/(TP+FN);
(3)F度量:F_measure=2×precision×recall/(precision+recall);
(4)AUC:ROC曲線下面積。ROC曲線最初是用來(lái)對(duì)收益與成本之間的權(quán)衡關(guān)系進(jìn)行描述的。AUC在區(qū)間[0,1]中波動(dòng),若模型越好,則面積越大(即AUC的值越大)。針對(duì)文中的軟件測(cè)試數(shù)據(jù),使用成本優(yōu)化速度(Cost optimization speed, COS)作為評(píng)價(jià)指標(biāo),利用運(yùn)算效率(Operational efficiency,OE)進(jìn)行指標(biāo)評(píng)價(jià)。
本實(shí)驗(yàn)PC機(jī)的硬件條件是:Intel Core i3-4130 3.40GHzCPU,4GB內(nèi)存。使用計(jì)算機(jī)軟件為Eclipse,外部依賴項(xiàng)是weka.jar。實(shí)驗(yàn)數(shù)據(jù)主要來(lái)源于Eclipse標(biāo)準(zhǔn)數(shù)據(jù),在這些文件中,有6個(gè)是ARFF格式的文件,這些文件不但收集了度量元,還收集了缺陷數(shù)目,在數(shù)據(jù)中,所包含的度量元包括以下四種:
(1)Name:表示的是數(shù)據(jù)對(duì)應(yīng)的包名或文件名;
(2)Pre-release Defects:表示的是版本發(fā)布前半年內(nèi)收集的缺陷數(shù)目;
(3)Post-release Defects:表示的是版本發(fā)布后半年內(nèi)收集的缺陷數(shù)目;
(4)復(fù)雜性度量:指的是CK度量元與面向?qū)ο蠖攘吭?/p>
(5)抽象語(yǔ)法樹(shù)結(jié)構(gòu)——抽象語(yǔ)法樹(shù)的結(jié)點(diǎn)度量。
File級(jí)別與Package級(jí)別的數(shù)據(jù),在結(jié)構(gòu)上是有差異的。正因?yàn)檫@樣,F(xiàn)ile級(jí)別的數(shù)據(jù)就只能測(cè)試File級(jí)別數(shù)據(jù)訓(xùn)練的模型,Package級(jí)別的亦是如此。我們使用File/Package中的數(shù)據(jù)進(jìn)行測(cè)試。
表2 不同的智能優(yōu)化算法軟件性能檢測(cè)對(duì)比
先對(duì)數(shù)據(jù)進(jìn)行一次測(cè)試,因?yàn)閷?shí)驗(yàn)的結(jié)果太多,同時(shí)效果特別相似,因此只列出了一部分實(shí)驗(yàn)結(jié)果,見(jiàn)表2。為了方便表示,本文算法使用AGIOA表示,決策樹(shù)算法使用RF來(lái)表示,邏輯回歸使用LR表示,神經(jīng)網(wǎng)絡(luò)使用NN表示。
觀察表2可知,邏輯回歸算法的主要優(yōu)勢(shì)是測(cè)試精度高,但劣勢(shì)也比較明顯,就是召回率過(guò)低。決策樹(shù)算法相對(duì)來(lái)說(shuō)召回率比較高,但是測(cè)試精度并不高。神經(jīng)網(wǎng)絡(luò)算法在測(cè)試精度、召回率都不是很理想。而與其他三種算法相比,AGIOA算法在各方面均表現(xiàn)出了優(yōu)越性。通常,測(cè)試數(shù)據(jù)模型越復(fù)雜,其綜合指標(biāo)越讓人滿意,但其耗費(fèi)的時(shí)間也將越多。對(duì)于簡(jiǎn)單的測(cè)試,18次的實(shí)驗(yàn),只要幾分鐘就能搞定;如果是算法過(guò)于復(fù)雜,18次實(shí)驗(yàn)則需要幾個(gè)小時(shí)才能完成。這恰恰可以證實(shí)評(píng)價(jià)指標(biāo)不同,算法也不會(huì)相同。
基于智能優(yōu)化算法自動(dòng)生成測(cè)試數(shù)據(jù),將測(cè)試結(jié)果從大到小地進(jìn)行加權(quán)計(jì)算,從而繪制出COS曲線與OE曲線,如圖2所示。在COS評(píng)價(jià)中,計(jì)算機(jī)軟件測(cè)試模型由于加入了回歸度量,因此數(shù)據(jù)測(cè)試能力得到了提高。OE指標(biāo)與單個(gè)算法測(cè)試比較相似,但以后的優(yōu)化比較困難,原因是3種案例所使用的軟件測(cè)試數(shù)據(jù)的自動(dòng)生成算法原理幾乎一致,因此很難為加權(quán)模型的數(shù)據(jù)測(cè)試提供有價(jià)值的數(shù)據(jù)。凡是采用智能優(yōu)化算法自動(dòng)生成算法的OE曲線,其斜率都接近1,換句話說(shuō),就是接近隨機(jī)加權(quán)的結(jié)果。
圖2 智能優(yōu)化算法自動(dòng)生成的軟件數(shù)據(jù)部分測(cè)試結(jié)果
本文提出了基于智能優(yōu)化算法的自動(dòng)生成計(jì)算機(jī)軟件測(cè)試數(shù)據(jù)的方法,該方法對(duì)所采集到的數(shù)據(jù)進(jìn)行快速測(cè)試,將測(cè)試的結(jié)果與樣本數(shù)據(jù)相結(jié)合,從而形成新的度量元,經(jīng)過(guò)度量元處理后得到新數(shù)據(jù)。再利用智能優(yōu)化算法對(duì)新的數(shù)據(jù)進(jìn)行模型構(gòu)建,所得的測(cè)試模型,經(jīng)試驗(yàn)表明:該方法提高了軟件測(cè)試數(shù)據(jù)生成效率,是一種較為理想的軟件測(cè)試數(shù)據(jù)生成算法。
[1] Jiang, Z. M., & Hassan, A. A survey on load testing of large-scale software systems[J].IEEE Transactions on Software Engineering, 2015,41(11):1091-1118.
[2] Wang, M., Jia, H., Sugumaran, V., Ran, W., & Liao, J. A web-based learning system for software test professionals[J].IEEE Transactions on Education, 2011,54(2):263-272.
[3] Cotroneo, D., Pietrantuono, R., & Russo, S. Relai testing: a technique to assess and improve software reliability[J].IEEE Transactions on Software Engineering, 2016,42(5):452-475.
[4] Bohme, M., & Paul, S. A probabilistic analysis of the efficiency of automated software testing[J].IEEE Transactions on Software Engineering, 2016,42(4):345-360.
[5] Carlo, S. D., Prinetto, P., & Savino, A. Software-based self-test of set-associative cache memories[J].IEEE Transactions on Computers, 2011,60(7):1030-1044.
[6] Garousi, V., & Felderer, M. Worlds apart: industrial and academic focus areas in software testing[J].IEEE Software, 2017,34(5):38-45.
[7] Xu, J., & Xu, P. The research of memory fault simulation and fault injection method for bit software test[J]. IEEE, 2012,7(1):718 - 722.
信陽(yáng)農(nóng)林學(xué)院學(xué)報(bào)2018年1期