專利名稱:一種嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳搜索方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)信息處理技術(shù)領(lǐng)域,具體涉及一種嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳搜索方法。
背景技術(shù):
遺傳算法(Genetic Algorithm)是美國的Holland在1975年首先提出來的,它是一種基于自然選擇原理和自然遺傳機(jī)制的搜索尋優(yōu)算法,它模擬自然界中的生命進(jìn)化機(jī)制,在人工系統(tǒng)中實現(xiàn)特定目標(biāo)的優(yōu)化。它的操作對象是一群染色體(稱為個體),即種群(Population)。這里每個染色體都對應(yīng)于問題的一個解。遺傳算法從初始種群出發(fā),采用基于適應(yīng)度比例的選擇策略在當(dāng)前種群中選擇個體,使用交叉和變異來產(chǎn)生下一代種群。如 此一代一代地演化下去,直到滿足期望的終止條件。遺傳算法在問題解空間的表示上,是用單一的染色體表示問題的一個潛在的可能解,運行在一個染色體群體上的進(jìn)化過程和通過一個潛在解空間的搜索相對應(yīng)。嵌入式基礎(chǔ)軟件是一種安全關(guān)鍵軟件,為保證其質(zhì)量和可靠性,一般需要進(jìn)行軟件代碼邏輯覆蓋測試。邏輯覆蓋又可分為語句覆蓋、分支覆蓋、路徑覆蓋等。按分支覆蓋準(zhǔn)則進(jìn)行測試是指設(shè)計若干組測試數(shù)據(jù),運行被測程序,使得程序中每個判斷的取真分支和取假分支至少經(jīng)歷一次,即判斷的真假值均曾被滿足。根據(jù)域測試(Domain Testing)原理,被測軟件的輸入空間(即域)可分為不同的子空間,而子空間的劃分是由被測軟件中的分支謂詞決定的??拷涌臻g邊界的測試數(shù)據(jù)能夠更有效地發(fā)現(xiàn)被測軟件的路徑錯誤和計算錯誤。因此,分支覆蓋測試數(shù)據(jù)選擇的目標(biāo)是,以少量測試數(shù)據(jù)使被測軟件的所有分支都被執(zhí)行到,并且這些測試數(shù)據(jù)盡可能地接近子空間的邊界。由于嵌入式基礎(chǔ)軟件的規(guī)模較大,復(fù)雜程度較高,開發(fā)分支覆蓋測試數(shù)據(jù)需要花費大量的人力、物力,采用自動化的手段可以有效地提高測試數(shù)據(jù)搜索的效率和質(zhì)量。許多傳統(tǒng)自動化方法處理搜索空間的一個單點。例如爬山法,它使用迭代改進(jìn)法,每次迭代從現(xiàn)時點的領(lǐng)域選擇一個新的點。顯然,在多峰搜索空間中,它易于陷入假的局部峰值。
發(fā)明內(nèi)容
針對現(xiàn)有技術(shù)的不足,本發(fā)明提供一種嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳搜索方法,本發(fā)明測試數(shù)據(jù)遺傳搜索方法可以方便地加以擴(kuò)展,以支持不同的輸入數(shù)據(jù)類型、復(fù)雜的分支謂詞、各種分支和循環(huán)程序結(jié)構(gòu)。本發(fā)明的目的是采用下述技術(shù)方案實現(xiàn)的一種嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳搜索方法,其改進(jìn)之處在于,所述方法包括下述步驟(I)生成隨機(jī)數(shù);(2)選擇初始種群;
(3)按照參數(shù)編碼方式對所述初始種群的個體串映射成實際參數(shù)值,并傳遞給被測軟件;(4)確定適應(yīng)度函數(shù);(5)交叉變異對測試數(shù)據(jù)進(jìn)行改進(jìn),形成新一代更優(yōu)種群;(6)循環(huán)進(jìn)行步驟(I) - (5),直至找到覆蓋所有嵌入式基礎(chǔ)軟件分支的目標(biāo)參數(shù)值,測試數(shù)據(jù)遍歷被測軟件的所有分支,結(jié)束該搜索過程。其中,所述步驟(2)中,按照嵌入式基礎(chǔ)軟件參數(shù)要求選擇初始種群。其中,所述步驟(3)中,當(dāng)初始種群的個體串映射成實際參數(shù)值,并傳遞給被測軟件時,驅(qū)動被測軟件運行;所述被測軟件是指嵌入式基礎(chǔ)軟件。
其中,所述步驟(4)中,根據(jù)被測嵌入式基礎(chǔ)軟件代碼確定適應(yīng)度函數(shù),所述適應(yīng)度函數(shù)以嵌入式基礎(chǔ)軟件代碼的分支謂詞為基礎(chǔ)。其中,為獲取嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)對被測軟件進(jìn)行插裝。其中,所述步驟(5)中,所述交叉變異是從一個點的群體開始進(jìn)行。其中,所述方法為自適應(yīng)的測試數(shù)據(jù)搜索方法。與現(xiàn)有技術(shù)比,本發(fā)明達(dá)到的有益效果是嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳搜索方法比其它方法具有更高的搜索效率。本發(fā)明的測試數(shù)據(jù)搜索方法以分支謂詞為基礎(chǔ),測試數(shù)據(jù)能夠遍歷被測軟件的所有分支,而且測試數(shù)據(jù)非??拷斎胱涌臻g的邊界。為了優(yōu)化適應(yīng)度函數(shù),通過遺傳算法一代一代地不斷修改測試數(shù)據(jù),形成了一種自適應(yīng)的測試數(shù)據(jù)搜索方法。本方法是從一個點的群體而不是從一個單一點進(jìn)行搜索,而許多傳統(tǒng)方法處理搜索空間的一個單點,因而本方法落入假峰的概率比點到點的轉(zhuǎn)移搜索大大減少了,具有更好的收斂性和更高的搜索效率。本測試數(shù)據(jù)搜索方法可以方便地加以擴(kuò)展,以支持不同的輸入數(shù)據(jù)類型、復(fù)雜的分支謂詞、各種分支和循環(huán)程序結(jié)構(gòu)。
圖I是本發(fā)明提供的嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳搜索方法流程圖;圖2是本發(fā)明提供的IF-THEN-ELSE控制流樹及原被測軟件示意圖;圖3是本發(fā)明提供的被測軟件插裝舉例示意圖;圖4是本發(fā)明提供的被測軟件控制流樹。
具體實施例方式下面結(jié)合附圖對本發(fā)明的具體實施方式
作進(jìn)一步的詳細(xì)說明。本發(fā)明提供的嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳搜索方法流程如圖I所示,該方法包括下述步驟(I)生成隨機(jī)數(shù);(2)選擇初始種群;(3)按照參數(shù)編碼方式對所述初始種群的個體串映射成實際參數(shù)值,并傳遞給被測軟件;(4)確定適應(yīng)度函數(shù);(5)交叉變異對測試數(shù)據(jù)進(jìn)行改進(jìn),形成新一代更優(yōu)種群;( 6 )循環(huán)進(jìn)行步驟(I) - ( 5 ),直至找到覆蓋所有嵌入式基礎(chǔ)軟件分支的目標(biāo)參數(shù)值,測試數(shù)據(jù)遍歷被測軟件的所有分支,結(jié)束該搜索過程。適應(yīng)度函數(shù)以嵌入式基礎(chǔ)軟件代碼的分支謂詞為基礎(chǔ),整個搜索過程從生成初始種群開始,然后按照參數(shù)編碼方式將種群中的個體位串映射成實際參數(shù)值,并傳遞給被測軟件,驅(qū)動被測軟件的運行。根據(jù)被測嵌 入式基礎(chǔ)軟件代碼的特點確定適應(yīng)度函數(shù),被測軟件運行時計算出適應(yīng)度函數(shù)值,評估每組測試數(shù)據(jù)的適應(yīng)度,適應(yīng)度越高說明測試數(shù)據(jù)與預(yù)期效果越接近,之后利用交叉、變異等基本算子對測試數(shù)據(jù)進(jìn)行改進(jìn),形成新一代更優(yōu)種群,如此往復(fù),直至找到覆蓋所有分支的目標(biāo)參數(shù)值,測試數(shù)據(jù)能夠遍歷被測軟件的所有分支,就可以結(jié)束該搜索過程。下面結(jié)合IF條件語句,說明基于遺傳算法的分支覆蓋測試數(shù)據(jù)搜索策略。圖2顯示了一個簡單的IF-THEN-ELSE條件的例子。Cn代表分支謂詞,SN+i (對應(yīng)于節(jié)點(N+1))和SN+2 (對應(yīng)于節(jié)點(N+2))分別為待執(zhí)行的語句序列。如果Cn為真,執(zhí)行SN+1,否則執(zhí)行SN+2。假設(shè)CnSA=B, A和B為整數(shù)(也可能是輸入?yún)?shù)的復(fù)雜函數(shù))。為了執(zhí)行節(jié)點(N+1)中的SN+1,A必須取值B。為執(zhí)行節(jié)點(N+2)中的SN+2,A可以取不等于B的任何值(A幸B)。但是A的優(yōu)先取值為(B+1)和(B-1),因為這兩個值緊鄰子空間邊界,更有利于發(fā)現(xiàn)程序錯誤。從遺傳算法角度來說,對于節(jié)點(N+1),A值與B越接近,適應(yīng)度(Fitness)就越高。為了獲取分支覆蓋測試數(shù)據(jù)需要對被測軟件進(jìn)行插裝,具體如下if Cn thenCHECK_BRANCH(NODE_NUMBER); L00KING_BRANCH (N0DE_NUMBER sib, DATAl SIB, DATA2 SIB);SN+1elseCHECK_BRANCH(NODE_NUMBER SIB);L00KING_BRANCH(N0DE_NUMBER, DATAI, DATA2);SN+2end if ;CHECK_BRANCH只有一個整數(shù)類型的輸入?yún)?shù),即節(jié)點號N0DE_NUMBER。CHECK_BRANCH記錄了該節(jié)點是否執(zhí)行過。如果已經(jīng)被執(zhí)行,保存有關(guān)的測試數(shù)據(jù)。這樣,可以開始為下一個未遍歷的節(jié)點生成測試數(shù)據(jù)。L00KING_BRANCH的輸入?yún)?shù)有3個,包括兄弟節(jié)點號N0DE_NUMBER SIB。如果兄弟節(jié)點尚未被遍歷,L00KING_BRANCH計算兄弟節(jié)點的適應(yīng)度。looking變量保存下一個未遍歷節(jié)點的節(jié)點號,L00KING_BRANCH根據(jù)變量looking 了解兄弟節(jié)點是否為需要遍歷的下一個節(jié)點。DATAl和DATA2的值僅取決于分支謂詞函數(shù),不需要其它信息。在上述例子中,執(zhí)行節(jié)點(N+1)的條件為Cn (A=B),此時DATAl的值為A,DATA2的值為B。對于節(jié)點(N+2),DATAl不變,而DATA2采用(B-I),如圖3所示,在使用“〉”的情況下(例如IF A>B THEN),取真分支的適應(yīng)度函數(shù)形式為FITNESS_FUNCTI0N(A,B+1)。在這里選擇(B + I)與A配對,因為它是與A最接近的數(shù)據(jù)。反之,如果使用“IF A〈B”,則選擇(B-1)。實施例下面以一個簡單的例子,說明嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳搜索過程,被測軟件的控制流樹及插裝形式如圖4所示。在此例子中,遺傳算法的主要參數(shù)設(shè)置如下生存概率Ps=O. 5,變異概率Pm=O. I,采用單點交叉。原被測軟件IF條件語句如下if A ^ B thenput ( “node 2,,);if A=B then put ( “node 3,,);elseput ( “node 4,,);end if ;elseput ( “node 5,,);end if ;經(jīng)過插裝的被測軟件IF條件語句如下if A ^ B thenCHECK_BRANCH(2);L00KING_BRANCH (5,A, B+1);if A=B thenCHECK_BRANCH(3);L00KING_BRANCH (4,A, B-1);elseCHECK_BRANCH(4);L00KING_BRANCH (3,A, B);end if ;elseCHECK_BRANCH(5);L00KING_BRANCH (2,A, B);S3end if ;(I)第一代表I顯示了第一代種群的4個成員,它們是由測試數(shù)據(jù)生成工具隨機(jī)生成的。其中Pi表示父代種群(Parent Population)的成員,A和B為輸入變量值,looking為待執(zhí)行節(jié)點的編號,Path表示被當(dāng)前測試數(shù)據(jù)(A和B)遍歷的節(jié)點。chromosome顯示的是二進(jìn)制形式的測試數(shù)據(jù),每個測試數(shù)據(jù)通過5比特表示,因此染色體長度為10比特,前5比特表示輸入數(shù)據(jù)A,后5比特表示輸入數(shù)據(jù)B。^為根據(jù)測試數(shù)據(jù)和待遍歷節(jié)點計算的適應(yīng)度,適應(yīng)度較高的群組成員進(jìn)入下一代的生存概率更大,F(xiàn)t代表該種群的總適應(yīng)度。表I第一代的父代種群
Pt A B I l_king Path ctiromosome ft F1 P1 4 ^lO 2 1,2, 4 OOtOO QiOlO 0.0278 0.076P2 -7 :15 21,5 11101 IllIl 0.0156
8 "I 2 I: 2,4 00010 11110 1:0204P4 3 —-6 I 2 U 5 11000 OllOf 0.0123__第一組測試數(shù)據(jù)(P1)輸入被測軟件后,待執(zhí)行的第一個節(jié)點是節(jié)點2 (looking值為2)。對于節(jié)點2,其適應(yīng)度函數(shù)為f = I/(IA-B 1+0. Ol)2,因為遍歷條件A彡B的邊界測試數(shù)據(jù)為A=B。該適應(yīng)度函數(shù)保證了 A和B在數(shù)值上相互接近的測試數(shù)據(jù)具有更高的適應(yīng) 度。第一代測試數(shù)據(jù)執(zhí)行了節(jié)點1、2、4、5,僅有節(jié)點3沒有執(zhí)行。當(dāng)looking節(jié)點被某測試數(shù)據(jù)執(zhí)行后(在此例子中節(jié)點2被第一組測試數(shù)據(jù)P1執(zhí)行),仍然要計算其余測試數(shù)據(jù)對于looking節(jié)點的適應(yīng)度,但不生成子代種群(Offspring Population)。(2)第二代第一代種群作為搜索遍歷節(jié)點3測試數(shù)據(jù)的起點,見表2。節(jié)點3的訪問控制謂詞恰好與節(jié)點2相同,因此表2中的第二代測試數(shù)據(jù)及其適應(yīng)度與表I相同。在第二代種群中,looking節(jié)點(節(jié)點3)沒有被遍歷,因此遺傳算法需要通過交叉和變異生成后代,如表3所示,其中k代表交叉點,變異的基因(比特)以斜體表示。表2第二代的父代種群
PiAB looking Path chroxxiosoinefs Ft
—4"IF" 3 1,2,4 "mlm 010100.0278 0J 6P2-7-15 3 I, 5 11101 111110.0156
P3815 3 L 2,4 00010 ililO0.0204
P43-6 3 I, 5-表3第二代的子代種群
0| P2 P4 3 I, 511101011/10.0204-7-14 5 0.071___3 I, S11/00mil0.00217-15—
O' P1 P4 3 I, 5O(MH)011010.0278O-(> 3
O4 j 31,2,411()00010100.02()43IO在表3中,通過交叉、變異新產(chǎn)生的子代測試數(shù)據(jù)以O(shè)i表示,其父代以Pi表示。這些父代成員是隨機(jī)選擇的。在重組過程中,兩個父代成員生成兩個子代成員。在子代種群中,O3與節(jié)點3的距離與P1相同,二者的適應(yīng)度也相同(O. 0278)。在子代種群中,O3的適應(yīng)度最高,因此生存下來進(jìn)入下一代種群的概率也比較高。但是子代種群的總適應(yīng)度Ft低于父代種群,這說明從一個種群到下一種群在整體沒有得到改善?,F(xiàn)在我們有兩個種群(父代種群和子代種群),它們各有4個成員,將從這8個成員產(chǎn)生下一代種群。因為生存概率Ps為O. 5,平均來說下一代種群由這兩個種群的各2個成員組成。表4顯示了下一代4個成員的選擇過程。對應(yīng)于新一代種群的每個成員,生成一個O到I之間的隨機(jī)數(shù),如表4中第二行所示。如果隨機(jī)數(shù)大于0.5 (即大于Ps),選擇父代種群,否則選擇子代種群。完成種群選擇以后,生成另一個隨機(jī)數(shù),選擇種群中哪個成員生存進(jìn)入下一代。例如,選擇下一代種種群成員memberl的過程如下,第一次生成的隨機(jī)數(shù)為O. 678,這意味著選擇父代種群。生成的下一個隨機(jī)數(shù)是O. 257,因此選擇父代種群中的P10重復(fù)這個過程,得到下一代種群的其它3個成員。新一代顯示在表5的上部。表4子代種群的生存情況
下一代種群的成員 member! in mli r2 member3 mcmbcr4
r 父代代的選抒 0.6780.29Χ0,9780.457---------
: · K來的父代成M 0.257 P, - - OJtO P, — — iVAi 卜來的代成(4 — — 0.026 Oi — — 0,609 Os(3)第三代整個過程重復(fù)進(jìn)行,直到所有節(jié)點都被遍歷。表5-表7給出了第三代種群。通過Ft可以看出,第三代中的父代種群整體適應(yīng)度高于第二代。在通過交叉和變異生成的子代種群中,測試數(shù)據(jù)O1距全局最優(yōu)僅3個整數(shù)單位(11-8=3)。O1取得高適應(yīng)度,因此得以兩次生存下來進(jìn)入下一代。表5第三代種群(一)
PiABlooking |Pathchromosome I Ft
P14103I, 2, 4OOiOO 010100.0277 0.096P2-7-14 3I 511101 OIlll0.0204 P38153I, 2, 400010 111100.0204
P40-63 II 5omm Ο "0I0.02278__表6第三代種群(二)
.ο I Oj Pi Pj looking Path cliromosomc fi A j B~ k F,
I O1 P;__Pj__3__1,2,4 (X)(H(HK)Il) 0.1111 X [ Π 7 0.161
ΓοΓ___3__1,2,4 /0100 11/10 0.0099 5 I 15 —foT P2 P4 J__I 2 4 IIg(M)01101 0.0123 3 S 4
IO4___3__I 5 000/1 01111 0.0278 -H |-14__表7第三代種群(三)
下一代種群的成員 member I [ mcmbcr2 j mcmbcr3 | mcmbcr4 |
Γ 父代 Sr 代的選樣 0i040,2950J850J46---1--1--1--1--
,k/f:卜家的父代成 ¢4 — — — — 0,5400.952 P4
Ur:卜來|丨勺 f-代成 W 0.158 O· 0,331 O1 — —(4)第四代表8-表10給出了第四代種群,在其中的子代種群中,兩組測試數(shù)據(jù)(O1和O4)接近于達(dá)到目標(biāo)。實際上O4更接近全局最優(yōu),因此也得到更高的適應(yīng)度。從第三代到第四代,整體適應(yīng)度Ft提高了 280%。表8第四代種群權(quán)利要求
1.ー種嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳捜索方法,其特征在于,所述方法包括下述步驟 (1)生成隨機(jī)數(shù); (2)選擇初始種群; (3)按照參數(shù)編碼方式對所述初始種群的個體串映射成實際參數(shù)值,并傳遞給被測軟件; (4)確定適應(yīng)度函數(shù); (5)交叉變異對測試數(shù)據(jù)進(jìn)行改進(jìn),形成新一代更優(yōu)種群; (6)循環(huán)進(jìn)行步驟(I)-(5),直至找到覆蓋所有嵌入式基礎(chǔ)軟件分支的目標(biāo)參數(shù)值,測試數(shù)據(jù)遍歷被測軟件的所有分支,結(jié)束該搜索過程。
2.如權(quán)利要求I所述的嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳捜索方法,其特征在于,所述步驟(2)中,按照嵌入式基礎(chǔ)軟件參數(shù)要求中選擇初始種群。
3.如權(quán)利要求I所述的嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳捜索方法,其特征在于,所述步驟(3)中,當(dāng)初始種群的個體串映射成實際參數(shù)值,并傳遞給被測軟件時,驅(qū)動被測軟件運行;所述被測軟件是指嵌入式基礎(chǔ)軟件。
4.如權(quán)利要求I所述的嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳捜索方法,其特征在于,所述步驟(4)中,根據(jù)被測嵌入式基礎(chǔ)軟件代碼確定適應(yīng)度函數(shù),所述適應(yīng)度函數(shù)以嵌入式基礎(chǔ)軟件代碼的分支謂詞為基礎(chǔ)。
5.如權(quán)利要求4所述的嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳捜索方法,其特征在于,為獲取嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)對被測軟件進(jìn)行插裝。
6.如權(quán)利要求I所述的嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳捜索方法,其特征在干,所述步驟(5)中,所述交叉變異是從ー個點的群體開始進(jìn)行。
7.如權(quán)利要求I所述的嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳捜索方法,其特征在于,所述方法為自適應(yīng)的測試數(shù)據(jù)搜索方法。
全文摘要
本發(fā)明涉及計算機(jī)信息處理技術(shù)領(lǐng)域,具體涉及一種嵌入式基礎(chǔ)軟件代碼分支覆蓋測試數(shù)據(jù)遺傳搜索方法,該方法將測試數(shù)據(jù)尋找過程轉(zhuǎn)化為基于遺傳算法的搜索和優(yōu)化過程,適應(yīng)度函數(shù)以被測軟件的分支謂詞為基礎(chǔ),測試數(shù)據(jù)能夠遍歷被測軟件的所有分支,而且測試數(shù)據(jù)非??拷斎胱涌臻g的邊界。而交叉變異是從一個點的群體而不是從一個單一點進(jìn)行搜索,因而落入假峰的概率比點到點的轉(zhuǎn)移搜索大大減少了,數(shù)據(jù)遺傳搜索效率高。
文檔編號G06N3/12GK102855191SQ20121032005
公開日2013年1月2日 申請日期2012年8月31日 優(yōu)先權(quán)日2012年8月31日
發(fā)明者鄧世偉, 蘇曉艷, 齊超, 鄭彥興, 房友園, 楊廣華, 李冬紅, 施寅生 申請人:中國人民解放軍63928部隊