亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法

文檔序號:6549964閱讀:467來源:國知局
一種面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法
【專利摘要】本發(fā)明公開了一種面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法。本發(fā)明通過對每個分支節(jié)點按修訂的條件判定覆蓋準(zhǔn)則尋找可覆蓋該分支節(jié)點的測試數(shù)據(jù)產(chǎn)生待測源代碼的測試數(shù)據(jù)集。其中,對個分支節(jié)點按修訂的條件判定覆蓋準(zhǔn)則尋找可覆蓋該分支節(jié)點的測試數(shù)據(jù)通過以下方法實現(xiàn):首先通過隨機方法構(gòu)建輸入向量集,然后對輸入向量集的運行分析,再通過線性擬合的手段擴展輸入向量集,經(jīng)重復(fù)迭代,獲得可覆蓋該節(jié)點面向修訂的條件判定的測試數(shù)據(jù)。本發(fā)明方法高度自動化,能夠盡可能的提高單元測試的效率,降低測試成本,并且支持面向修訂的條件判定覆蓋準(zhǔn)則。
【專利說明】一種面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及一種測試數(shù)據(jù)自動生成方法,特別涉及自動化單元測試中修改的條件 判定覆蓋測試的測試用例數(shù)據(jù)的生成方法。

【背景技術(shù)】
[0002] 測試技術(shù)是保障軟件系統(tǒng)質(zhì)量最重要和最有效的方法之一,一直以來也是工業(yè)界 保證軟件系統(tǒng)正確性最主要的手段。受計算能力和時間、空間資源的限制,測試無法窮盡軟 件所有可能的執(zhí)行,實踐中,各種測試充分度準(zhǔn)則被用于驅(qū)動和評估測試過程。因此,面向 給定的測試充分度準(zhǔn)則,如何生成對應(yīng)的測試用例集合,以驅(qū)動程序的執(zhí)行覆蓋相應(yīng)的結(jié) 構(gòu),成為測試過程中最關(guān)鍵的技術(shù)環(huán)節(jié)。目前測試用例的設(shè)計基本依靠人工手動完成,不僅 費時費力,而且用例的有效性也難以得到保證。如何自動地為各種測試充分度準(zhǔn)則生成有 效的測試用例,已成為測試技術(shù)研究的熱點問題之一。
[0003] 面向修改的條件/判定的測試覆蓋(簡稱:MC/DC,即Modified Condition/ Decision Coverage)準(zhǔn)則,是應(yīng)用較廣泛的一種白箱測試充分度準(zhǔn)則,尤其適用于安全要 求較高的航空航天、醫(yī)藥等領(lǐng)域。它要求設(shè)計足夠的測試用例,使得判定中每個條件的所有 可能取值至少執(zhí)行一次,同時每個判定的所有可能判定結(jié)果至少執(zhí)行一次,并且每個條件 能夠獨立地影響判定。條件獨立地影響判定是指在其他條件不變的前提下僅改變條件的值 而使判定結(jié)果改變。舉例來說,判定語句S = A and(B or C),其中,A、B、C為判定中的條件。 A、B、C的取值有8種組合,用集合為:{TTT,TTF,TFT,TFF,F(xiàn)TT,F(xiàn)TF,F(xiàn)FT,F(xiàn)FF},其中,每個 條件能夠獨立地影響判定的情形有:{TTF,TFF,TFT,F(xiàn)FT}。也即,當(dāng)保持AC為TF時,B的取 值可以獨立確定判定語句S的值;當(dāng)AB為TF時,C的取值可以獨立確定判定語句S的值; 當(dāng)BC為FT時,A的取值可以獨立確定判定語句S的值。
[0004] 理論研究已經(jīng)證明,不存在通用有效的算法可以為程序中任意判定的任意條件取 值組合生成測試輸入。已有的研究工作可分為基于靜態(tài)分析和基于動態(tài)執(zhí)行兩類方法。基 于靜態(tài)分析的方法無法有效的處理判定中的非線性約束條件,動態(tài)方法容易陷入局部最優(yōu) 點而無法發(fā)現(xiàn)可行的輸入,它們在處理實際問題時存在很大的局限性。
[0005] 科學(xué)和工程問題中,通??梢圆捎弥T如采樣、實驗等方法獲得若干離散的數(shù)據(jù),根 據(jù)這些數(shù)據(jù),我們往往希望得到一個逼近于實際函數(shù)或者更加密集的離散方程與已知數(shù)據(jù) 相吻合,這個過程叫做擬合。線性擬合是比較簡單的擬合方式,數(shù)據(jù)點使用直線進(jìn)行連接, 結(jié)果是一個多邊形。線性擬合簡單易用,它可以在比較短的時間內(nèi)得到逼近函數(shù),縮短了算 法自動生成測試數(shù)據(jù)的前期工作量。


【發(fā)明內(nèi)容】

[0006] 本發(fā)明所要解決的問題是為待測試源程序自動構(gòu)建測試數(shù)據(jù)(測試用例),使得 在這些測試數(shù)據(jù)下執(zhí)行待測試源程序能夠覆蓋該待測試源程序的所有判定的可能取值及 判定中所有條件的可能取值并表明每個條件獨立影響判定,完成修改的條件判定覆蓋測 試。
[0007] 為解決上述問題,本發(fā)明采用的方案如下:
[0008] -種面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,包括分析待測源程序獲 得待測源程序所有路徑的集合和所有分支節(jié)點的集合BS以及分支節(jié)點的關(guān)聯(lián)路徑集的集 合的步驟,該方法還包括對分支節(jié)點集BS中的每一分支節(jié)點B執(zhí)行以下步驟:
[0009] S1 :根據(jù)B的關(guān)聯(lián)路徑集中各路徑上位于B(含B)之前的各分支節(jié)點的各個條件, 構(gòu)建關(guān)于輸入變量向量X的分支函數(shù)Fk^_ (X);所述輸入變量向量X為所述待測源程序輸 入變量構(gòu)成的向量;所述分支函數(shù)Fk^_(X)表示路徑k上第i個分支節(jié)點的第j個條件的 分支函數(shù);所述路徑k經(jīng)過分支節(jié)點B ;
[0010] S2 :構(gòu)建初始的輸入向量集U ;所述初始的輸入向量集U至少包含兩個輸入向量;
[0011] S3 :計算以輸入向量集U中每個輸入向量作為待測源程序的輸入執(zhí)行待測源程序 時與所述分支節(jié)點B關(guān)聯(lián)的各路徑k上位于B之前(含B)的每個分支節(jié)點上的各分支函 數(shù)F k&⑴獲得分支函數(shù)值的集合V以及最遠(yuǎn)公共分支節(jié)點mk;當(dāng)執(zhí)行待測源程序時的執(zhí) 行路徑經(jīng)過分支節(jié)點B時計算B的判定和判定中各個條件的取值;假如輸入向量集U中存 在一個輸入向量執(zhí)行待測源程序時執(zhí)行路徑經(jīng)過分支節(jié)點B且使B的判定或判定中某個條 件產(chǎn)生新的取值,則記錄該輸入向量作為所述分支節(jié)點B的一個測試數(shù)據(jù);假如所述分支 節(jié)點B的測試數(shù)據(jù)集覆蓋了 B的判定及判定中各條件所有可能取值并且每個條件都獨立影 響了判定,則返回該測試數(shù)據(jù)集作為所述分支節(jié)點B的測試數(shù)據(jù)集;
[0012] S4 :根據(jù)分支節(jié)點B的關(guān)聯(lián)路徑集中各路徑k上位于B之前(含B)的各個分支節(jié) 點上的各分支函數(shù)值的集合V以及最遠(yuǎn)公共節(jié)點m k構(gòu)建路徑k上位于最遠(yuǎn)公共節(jié)點mk之 前(含mk)的每個分支節(jié)點的各分支函數(shù)的擬合函數(shù)LF k,u ;LFk^表示路徑k上第i個分 支節(jié)點的第j個條件的分支函數(shù)的線性擬合函數(shù);
[0013] S5 :根據(jù)與B關(guān)聯(lián)的各路徑上位于B之前(含B)的每個分支節(jié)點中的各分支函數(shù) 的線性擬合函數(shù)LFk^_和待測源程序計算可行區(qū)間I ;
[0014] S6 :在可行區(qū)間I內(nèi)隨機選取各輸入變量的輸入值得到測試數(shù)據(jù)集加入至輸入向 量集U中;
[0015] S7 :重復(fù)執(zhí)行步驟S3至S6直到步驟S3至S6執(zhí)行的次數(shù)達(dá)到限定的次數(shù);
[0016] S8 :返回所有記錄的所述分支節(jié)點B的測試數(shù)據(jù)作為所述分支節(jié)點B的測試數(shù)據(jù) 集。
[0017] 進(jìn)一步,根據(jù)本發(fā)明的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,所述 步驟S2中所述的初始的輸入向量集U包含Ni+Ι個輸入向量,所述Ni為輸入變量的個數(shù); 初始的輸入向量集U = {uQ,Up u2, · · ·,uNi},其中
[0018] Ui = {Uu,Ui,2, · · ·,Ui,Ni};輸入向量uQ為隨機生成,Ui與uQ滿足關(guān)系: lij j _ Μη .·? r~H i 豐 / 1 F'irin >14 · ?,其中 e U,2,...,Ni}。 Wy隨機,= j 進(jìn)一步,根據(jù)本發(fā)明的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,所述步驟 S3包括:
[0019] S31 :從輸入向量集U獲取未執(zhí)行的輸入向量ut ;
[0020] S32 :判斷未執(zhí)行的輸入向量ut是否存在;假如不存在未執(zhí)行的輸入向量,則執(zhí)行 步驟S34 ;否則執(zhí)行步驟S33 ;
[0021] S33 :根據(jù)ut執(zhí)行待測源代碼得到執(zhí)行的路徑與分支節(jié)點B的關(guān)聯(lián)路徑集中各路 徑k的公共分支節(jié)點!,計算路徑k上位于分支節(jié)點B之前(含B)的各分支節(jié)點的分支 函數(shù)〇〇的值,B的所有關(guān)聯(lián)路徑的各個分支節(jié)點的各分支函數(shù)F k^(X)的值構(gòu)成集合 V ;若執(zhí)行的路徑經(jīng)過分支節(jié)點B,則執(zhí)行的路徑為分支節(jié)點B的一條關(guān)聯(lián)路徑,根據(jù)該關(guān)聯(lián) 路徑上B的判定中各個條件的分支函數(shù)值得到分支節(jié)點B的判定和判定中各條件的取值; 假如B的判定或判定中條件產(chǎn)生了新的取值,則記錄該輸入向量作為所述分支節(jié)點B的一 個測試數(shù)據(jù);假如B的測試數(shù)據(jù)集覆蓋了 B的判定且判定中各條件所有可能取值并且每個 條件都獨立影響了判定,返回該測試數(shù)據(jù)集作為所述分支節(jié)點B的測試數(shù)據(jù)集并結(jié)束對整 個分支節(jié)點B生成測試數(shù)據(jù)的過程。
[0022] S34 :從分支B的各關(guān)聯(lián)路徑k記錄的{mu, mk,2, . . .,mk,TU}中選取最遠(yuǎn)公共分支 節(jié)點mk。
[0023] 進(jìn)一步,根據(jù)本發(fā)明的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,所述 步驟S4包括以下步驟:
[0024] S41 :輸入向量集U和B的關(guān)聯(lián)路徑集中各路徑k上位于B之前(含B)的各 個分支節(jié)點的各分支函數(shù)值的集合V以及最遠(yuǎn)公共節(jié)點m k構(gòu)建坐標(biāo)集Vk,y,z,j = {(u1;j, Fk,y,z (? j)),(? j,F(xiàn)k,y,z (u2,』)),· · ·,(uTU,』,Fk,y,z (uTU,);
[0025] S42 :以 Vk,y,z,』一{(u1; j,F(xiàn)k,y,z (i^,』)),(u2,』,F(xiàn)k,y,z (u2,』)),· · ·,(uTU,』,F(xiàn)k,y,z (uTU,』))}內(nèi) 兩個相鄰的坐標(biāo)點構(gòu)建Fk,y, z(Xj)的線性擬合函數(shù)LFk,y,z(Xj) = Pj*Xj+qj,得到參數(shù)集LFPQ k, i, j 一 { (Pi,Qi),(P2,%),···,(Pm,%i) };
[0026] 其中,Vk,y,u表示路徑k上第y個分支節(jié)點第z個分支函數(shù)對應(yīng)第j個輸入變量的 坐標(biāo)集,其中y ;ui;」為輸入向量集U中第i個輸入向量的第j個輸入變量的值;Fty, z (Xj) 為路徑k上第y個節(jié)點第z個分支函數(shù)關(guān)于第j個輸入變量的函數(shù);LFk, y,z(Xp為路徑k上 第y個節(jié)點第z個分支函數(shù)關(guān)于第j個輸入變量的線性擬合函數(shù);LFPQ k^.為路徑k上第i 個節(jié)點第j個分支函數(shù)的線性擬合函數(shù)的參數(shù)集。
[0027] 進(jìn)一步,根據(jù)本發(fā)明的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,所述 步驟S5包括:
[0028] S51 :計算分支節(jié)點B的各關(guān)聯(lián)路徑k上位于分支節(jié)點B之前(含B)的各個分支 節(jié)點中各分支函數(shù)的可行區(qū)間Dk, i;j ;
[0029] S52 :合并每個分支節(jié)點內(nèi)的各分支函數(shù)的可行區(qū)間Dk,i;j得到各分支節(jié)點的可行 區(qū)間D k;i ;
[0030] S53 :合并最遠(yuǎn)公共分支節(jié)點mk前的各分支節(jié)點的可行區(qū)間Dti得到分支節(jié)點B在 關(guān)聯(lián)路徑k上的可行區(qū)間I k。
[0031] S54 :合并分支節(jié)點B在各關(guān)聯(lián)路徑k上的可行區(qū)間Ik,得到分支節(jié)點B的可行區(qū) 間I。
[0032] 進(jìn)一步,根據(jù)本發(fā)明的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,所述 可行區(qū)間I = ΙΛ,12, . . .,IJ,其中,S為輸入變量的個數(shù),Ii為第i個輸入變量的可行區(qū) 間,Ii = Uu,Ii,2,. . .,,其中,為第i個輸入變量第j個可行分段區(qū)間,Mi為第i 個輸入變量可行分段區(qū)間數(shù),所述步驟S6中,當(dāng)Mi為1時,從Ii為第i個輸入變量的可行 區(qū)間的唯一分段區(qū)間Iu的擴展區(qū)間中隨機取值構(gòu)建測試數(shù)據(jù)。
[0033] -種機器可讀介質(zhì),該可讀介質(zhì)上存儲有指令集合,當(dāng)該指令集合被執(zhí)行時,使得 該機器可執(zhí)行上述面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法。
[0034] 本發(fā)明的技術(shù)效果如下:
[0035] 1、本發(fā)明方法無需分析程序路徑上各語句之間的數(shù)據(jù)依賴關(guān)系,采用動態(tài)執(zhí)行的 方式,自動確定分支謂詞的線性擬合函數(shù),效率高。
[0036] 2、能有效地處理路徑中的非線性約束條件,并采用動態(tài)步長擴張的方式,很好的 解決動態(tài)方法容易陷入局部最優(yōu)點而無法發(fā)現(xiàn)可行的輸入的問題。
[0037] 3、能有效地處理路徑中的復(fù)合條件約束,將復(fù)合條件謂詞等價轉(zhuǎn)換成分支函數(shù)分 組,利用線性擬合函數(shù)快速的確定輸入變量的可用取值區(qū)間。
[0038] 4、約束求解器采用線性擬合的方法求解約束系統(tǒng),充分利用線性擬合函數(shù)簡單 易用的優(yōu)點;如果分支函數(shù)關(guān)于輸入變量是線性的,則獲得的線性擬合函數(shù)與函數(shù)本身完 全吻合,如果分支函數(shù)關(guān)于輸入變量是非線性的,則綜合在各個區(qū)間上得到的線性擬合函 數(shù),可以估算分支函數(shù)的大致情況,隨著程序的不斷執(zhí)行,用于函數(shù)賦值的數(shù)據(jù)越多,估算 得到的函數(shù)信息就越精確。理論上,當(dāng)計算擬合函數(shù)的區(qū)間足夠小時,獲得的線性擬合函數(shù) 就能足夠貼近函數(shù)的真實情況,對自動生成準(zhǔn)確的測試數(shù)據(jù)就更有指導(dǎo)意義。
[0039] 5、本發(fā)明方法高度自動化,能夠盡可能的提高單元測試的效率,降低測試成本。
[0040] 6、本發(fā)明方法能夠很好的支持面向修改的條件/判定的測試覆蓋準(zhǔn)則。

【專利附圖】

【附圖說明】
[0041] 圖1是本發(fā)明待測源程序代碼例子。
[0042] 圖2是本發(fā)明步驟S3的流程圖。

【具體實施方式】
[0043] 下面結(jié)合說明書附圖對本發(fā)明做進(jìn)一步詳細(xì)說明。
[0044] -、CLFF測試數(shù)據(jù)自動生成方法的基本原理
[0045] CLFF測試數(shù)據(jù)自動生成方法,即基于線性擬合函數(shù)驅(qū)動的測試數(shù)據(jù)自動生成算 法,是線性擬合技術(shù)在測試數(shù)據(jù)自動生成中的應(yīng)用。具體來說,首先對待測源程序進(jìn)行詞法 分析、語法分析及語義分析后獲得待測源程序所有路徑和所有分支節(jié)點,然后針對每個分 支節(jié)點單獨生成一套測試數(shù)據(jù)(測試用例)使得該測試數(shù)據(jù)能夠覆蓋該節(jié)點的判定及判定 中各個條件的所有可能取值以及表明各條件獨立影響判定,每個分支節(jié)點對應(yīng)一套測試數(shù) 據(jù),測試源程序的所有分支節(jié)點能夠得到測試數(shù)據(jù)集。
[0046] 在為某分支節(jié)點生成測試數(shù)據(jù)時,首先隨機生成一輸入數(shù)據(jù),然后根據(jù)該輸入數(shù) 據(jù)執(zhí)行待測源程序,分析其執(zhí)行結(jié)果,根據(jù)執(zhí)行結(jié)果通過線性擬合后構(gòu)造新的測試數(shù)據(jù),然 后根據(jù)新的測試數(shù)據(jù)執(zhí)行待測源程序,分析其執(zhí)行結(jié)果,再根據(jù)執(zhí)行結(jié)果通過線性擬合后 構(gòu)造新的測試數(shù)據(jù),重復(fù)上述步驟直到存在一組測試數(shù)據(jù)能夠覆蓋該分支節(jié)點的判定及判 定中各個條件的所有取值組合以及表明各條件獨立影響判定。此外,這里還存在被分析的 分支節(jié)點永遠(yuǎn)無法覆蓋判定/條件的所有取值組合或無法表明所有的條件都獨立影響判 定,在這種情形下,通過對循環(huán)計數(shù)直到循環(huán)次數(shù)達(dá)到某一限值時停止,然后將能夠覆蓋該 分支節(jié)點的判定及判定中條件某一種取值的輸入數(shù)據(jù)作為測試數(shù)據(jù)返回。
[0047] 因此,本發(fā)明的重點在于,如何根據(jù)執(zhí)行結(jié)果進(jìn)行線性擬合以及如何根據(jù)線性擬 合構(gòu)造新的測試數(shù)據(jù)。
[0048] 二、構(gòu)建分支函數(shù)
[0049] 本發(fā)明的步驟S1為根據(jù)所述分支節(jié)點B的關(guān)聯(lián)路徑集中每條路徑上位于B之前 (含B)的各分支節(jié)點的各個條件,構(gòu)建關(guān)于輸入變量向量X的分支函數(shù)F k^_(X)。這個步 驟簡稱為構(gòu)建分支函數(shù)。
[0050] 分支節(jié)點的關(guān)聯(lián)路徑集:經(jīng)過分支節(jié)點的路徑的集合。
[0051] 條件有兩種,一種是布爾表達(dá)式:Bool (X);對于布爾表達(dá)式,分支函數(shù)Fj^jCX) =Β〇〇1(Χ)。另一種是包含條件運算符的條件,表示為:L(X)rel R(X),rel e { >,彡, =,尹,<,<};這里rel表示條件運算符,L(X)表示條件運算符左側(cè)的表達(dá)式,R(X) 表示條件運算符右側(cè)的表達(dá)式,那么,分支函數(shù)F k^_(X) =L(X) - R(X)。也就是說,分支 函數(shù)是條件的規(guī)范表示,任何條件都可以表示成如下格式:Fk^(X)re10, rel e { >,彡, =,尹,<,<}。通常每個分支節(jié)點上包含多個條件,進(jìn)行條件的規(guī)范表示后,與所述 分支節(jié)點B關(guān)聯(lián)的路徑k上第i個分支節(jié)點的邏輯表達(dá)式可以表示成:c k, i = Fk, Μ (X) 代110<^1?15,1, 2(乂)代120(^2...(^_1?15, 1,;3(乂)代1;30,這里(^表示與(六11(1)或或(〇1')的邏輯運 算符,s表示路徑k上第i個分支節(jié)點上條件的數(shù)量。
[0052] 除了上述的規(guī)范表示外,構(gòu)建的分支函數(shù)還有一個參數(shù)的映射過程,也就是將分 支函數(shù)F k^_(X)的參數(shù)映射至輸入變量的向量X中使得分支函數(shù)Fk^_(X)是關(guān)于輸入變 量向量X的函數(shù)。對于特定的路徑k,分支函數(shù)F k^_(X)與輸入變量向量X之間的函數(shù)關(guān) 系是確定的。如圖1所示,由C語言編寫的example源代碼中,總共有6條路徑:分別為 : 路徑 1 :P1 - C1 - P2 - C2 - P4 - P6 ;路徑 2 :P1 - C1 - P2 - C2 - C3 - P5 - P6 ; 路徑 3 :P1 - Cl - P2 - C2 - C3 - P6 ;路徑 4 :P1 - Cl - P3 - C2 - P4 - P6 ;路徑 5 : P1 - Cl - P3 - C2 - C3 - P5 - P6 ;路徑 6 :P1 - Cl - P3 - C2 - C3 - P6。程序中一 共有三個分支節(jié)點:Cl,C2, C3。與分支節(jié)點Cl關(guān)聯(lián)的路徑集:路徑1,2, 3,4, 5,6 ;與分支 節(jié)點C2關(guān)聯(lián)的路徑集:路徑1,2,3,4, 5,6 ;與分支節(jié)點C3關(guān)聯(lián)的路徑集:路徑2,3,5,6。 example函數(shù)有3個輸入分別為a,b,c,其中C2分支節(jié)點的條件為d+e>100,在路徑確定的 情形下,d和e相對于a, b, c的輸入是確定的,可以表示成d = D(a, b, c)和e = E(a, b, c), 則該條件的分支函數(shù)定義為= D(X) - E(X),X = {a, b,c}。由此,對于任一輸入 x= {ax,bx,cx},分支函數(shù)Fk^(X)均能直接計算得到一具體的函數(shù)值。以路徑4為例,d =(a - b)*2, e = b,由此可以得到C2分支節(jié)點的唯--個條件的分支函數(shù)F4,2>1 (a, b, c) =d+e - 100 = (a - b) *2+b - 100 = 2*a - b - 100。以路徑 2 為例,d = (a - b) *2, e =d = (a - b)*2,由此可以得到C2分支節(jié)點的唯--個條件的分支函數(shù)F2,2>1 (a, b, c)= d+e - 100 = (a - b)*4 - 100。也就是說,不同路徑下,同樣分支節(jié)點的同樣條件的分支 函數(shù)可能不同。但在確定了的路徑下,分支函數(shù)關(guān)于輸入變量的函數(shù)是確定了的。
[0053] 本步驟的輸入是待測源程序在分支節(jié)點B的關(guān)聯(lián)路徑集上每一路徑中位于B之前 (含B)的各分支節(jié)點的各個條件,輸出是相應(yīng)條件的分支函數(shù)F k^(X)。這里X為輸入變 量向量,由待測源程序輸入變量構(gòu)成的向量。分支函數(shù)Fk^_(X)表示路徑k上第i個分支 節(jié)點的第j個條件的分支函數(shù),i和j的取值范圍取決于分支節(jié)點所在路徑上的分支節(jié)點 數(shù)和各個分支節(jié)點上的條件數(shù)。
[0054] 需要說明的是,這里路徑是由對待測源程序進(jìn)行詞法分析、語法分析及語義分析, 最終分析得到待測試源程序程序路徑集中的某一條路徑,所述分支節(jié)點B是由程序路徑集 中所有路徑的分支節(jié)點組成的程序分支節(jié)點集中的某一個分支節(jié)點。本領(lǐng)域技術(shù)人員理 解,對待測源程序進(jìn)行詞法分析、語法分析屬于現(xiàn)有技術(shù),其具體實現(xiàn)細(xì)節(jié)也不是本發(fā)明所 要討論的主題范疇。本領(lǐng)域技術(shù)人員還可以理解,在對待測源程序進(jìn)行詞法分析、語法分析 及語義分析后,可以首先對待測源程序所有分支節(jié)點的各個條件構(gòu)建分支函數(shù),得到一個 總的分支函數(shù)集,然后根據(jù)與分支節(jié)點B關(guān)聯(lián)的路徑集上每一條路徑中位于B之前(含B) 的分支節(jié)點從這個總的分支函數(shù)集中選取相應(yīng)的分支函數(shù)即可。
[0055] 三、構(gòu)建初始的輸入向量集
[0056] 本步驟即為前述的步驟S2。
[0057] 由于本發(fā)明通過線性擬合構(gòu)建可行區(qū)間,然后從可行區(qū)間內(nèi)選取測試數(shù)據(jù)。而線 性擬合至少需要兩個數(shù)據(jù)樣本。因此,在構(gòu)建初始的輸入向量集U時,初始的輸入向量集U 至少包含兩個輸入向量。這里,輸入向量對應(yīng)前述的輸入變量向量X。輸入向量的每個兀素 為對應(yīng)著待測源程序相應(yīng)的輸入變量的具體的值。初始的輸入向量集U內(nèi)的輸入向量由隨 機生成,輸入向量內(nèi)的每個元素由隨機生成。為更好的實現(xiàn)本發(fā)明的線性擬合。本發(fā)明中 優(yōu)先采用如下方法構(gòu)建初始的輸入向量集U:
[0058] 初始的輸入向量集U包含Ni+Ι個輸入向量,Ni為輸入變量的個數(shù);初始的 輸入向量集 u = {u。,Up u2, · · ·,uNi},其中 Ui = {Uu,Uu,屮,2, · · ·,Uw}。在這 Ni+1 個輸入向量中,其中第一個輸入向量,即輸入向量UQ為隨機生成。1^與11。滿足關(guān)系: Γ Uj ^ = Uq > Φ j 噸如 2 ,其中 i,j e {l,2,...,Ni} Uq j9 ~ J
[0059] 這樣設(shè)計的好處是,對于某個分支函數(shù)Fy (X)進(jìn)行線性擬合時,每個輸入變量可 以分別進(jìn)行,而避免多元線性擬合,同時所有的變量都能得到進(jìn)行有效的線性擬合的數(shù)據(jù)。 以前述例子的路徑4為例,C2節(jié)點的分支函數(shù)為F 4,2;1 = 2*a - b - 100。假設(shè)輸入向量 集的四個輸入向量分別為:uQ = {0,一 3,一 2},屮={4,一 3,一 2},u2 = {0, 9,一 2},u3 ={0,一3,7}。其中,輸入向量如七中,輸入變量b和c的取值相同,分別為一3和一2, 此時,可以構(gòu)建關(guān)于輸入變量a的線性擬合函數(shù)LF^Ja) =2*a -97。同理,根據(jù)輸入向 量11。,112可以構(gòu)建關(guān)于輸入變量b的線性擬合函數(shù)LF4, 2;1(b) = - l*b - 100。
[0060] 四、執(zhí)行代碼與統(tǒng)計
[0061] 本步驟即為前述的步驟S3。
[0062] 本步驟的輸入為:輸入向量集U、分支節(jié)點B的關(guān)聯(lián)路徑集和待測源程序。輸出為: 各個輸入向量對應(yīng)的分支節(jié)點B的關(guān)聯(lián)路徑集中各路徑k上位于分支節(jié)點B之前(含B) 的各分支節(jié)點的各個分支函數(shù)F k^_⑴的值構(gòu)成的集合V,以及與路徑k的最遠(yuǎn)公共路徑分 支節(jié)點mk。
[0063] 具體的過程可通過圖2所示的流程實現(xiàn),包括步驟S31、S32、S33、S34。
[0064] S31,從輸入向量集U獲取未執(zhí)行的輸入向量ut。步驟S3?S6是迭代循環(huán)的過 程。輸入向量集U隨著迭代循環(huán)過程變化,迭代循環(huán)的第一次迭代的輸入為初始的輸入向 量集U,初始的輸入向量集U由前述步驟S2獲得。由于第η次迭代過程與前幾次迭代過程 有所重復(fù),即第η次迭代過程的輸入向量集U中部分輸入向量已經(jīng)由前幾次迭代過程執(zhí)行 了步驟S33。考慮處理效率,這部分重復(fù)的輸入向量不需要重復(fù)再執(zhí)行步驟S33。因此,只 需要從輸入向量集U中選取那些未執(zhí)行的輸入向量執(zhí)行步驟S33即可。
[0065] S32,判斷未執(zhí)行的輸入向量七是否存在。該步驟是S31的延伸的判斷步驟。假 如未執(zhí)行的輸入向量ut不存在,表示輸入向量集U中每個輸入向量均執(zhí)行了步驟S33,則執(zhí) 行步驟S34。假如未執(zhí)行的輸入向量ut存在,則對該輸入向量ut執(zhí)行步驟S33。
[0066] S33,根據(jù)ut執(zhí)行待測源代碼得到執(zhí)行的路徑和分支節(jié)點B的各關(guān)聯(lián)路徑k的公 共分支節(jié)點mk, t,并計算關(guān)聯(lián)路徑k上位于分支節(jié)點B之前(含B)各分支節(jié)點的分支函數(shù) Fk,u(X)的值。這里的執(zhí)行待測源代碼可以是模擬執(zhí)行。一種實施方法是通過插樁的方式, 在待測源代碼中植入插樁代碼。插樁代碼可以監(jiān)視待測源代碼每一步執(zhí)行的結(jié)果以及執(zhí)行 待測源代碼的經(jīng)過的路徑。第二種實施方法是直接計算分支節(jié)點B的各關(guān)聯(lián)路徑k上位于 分支節(jié)點B之前(含B)各分支節(jié)點的分支函數(shù)F k^(X)值,然后根據(jù)分支函數(shù)Fk^(X)對 應(yīng)的條件cti分析其執(zhí)行的路徑P t。在第一種實施方法下,包括三個步驟:植入插樁代碼,執(zhí) 行待測源程序,計算分支節(jié)點B的關(guān)聯(lián)路徑集中各路徑k上位于B之前(含B)的各分支節(jié) 點的分支函數(shù)F k^_(X)的值。而第二種實施方法下,執(zhí)行待測源程序和計算分支節(jié)點B的關(guān) 聯(lián)路徑集中各路徑k上位于B之前(含B)的各分支節(jié)點的分支函數(shù)F k^_(X)的值可以一步 完成。因此本發(fā)明優(yōu)先采用第二種實施方法。任一輸入向量ut執(zhí)行待測源代碼后,可以得到 所執(zhí)行的路徑P t與分支節(jié)點B的關(guān)聯(lián)路徑集中路徑k的公共分支節(jié)點mk,t。對于輸入向量 集U = ,…,uKU}而言,可以關(guān)聯(lián)路徑k的公共分支節(jié)點集Mk = {π^,π^,…,mk,TU}, 以及分支函數(shù)Fu,」⑴的值的集合V= {V1,V2,...,Vτu}。這里的TU表示輸入向量集U中 元素的個數(shù)。這里的公共分支節(jié)點叫^(其中,te {1,2,...,KU})為分支節(jié)點下標(biāo)的表示 的輸入向量ut在路徑k下的最遠(yuǎn)公共分節(jié)點。輸入向量u t在路徑k下的公共分支節(jié)點是根 據(jù)輸入向量ut執(zhí)行待測源代碼后所執(zhí)行的路徑Pt與路徑k重疊的部分中最后一個分支節(jié) 點。相應(yīng)地,計算B的關(guān)聯(lián)路徑k上的分支函數(shù)F k^_ (X)的值也是指根據(jù)輸入向量ut執(zhí)行待 測源代碼后所執(zhí)行的路徑Pt與路徑k重疊部分的分支節(jié)點的各條件中的分支函數(shù)F k^_ (X)

【權(quán)利要求】
1. 一種面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,包括分析待測源程序獲得 待測源程序所有路徑的集合和所有分支節(jié)點的集合BS以及分支節(jié)點的關(guān)聯(lián)路徑集的集合 的步驟,其特征在于,該方法還包括對分支節(jié)點集BS中的每一分支節(jié)點B執(zhí)行以下步驟 : 51 :根據(jù)B的關(guān)聯(lián)路徑集中各路徑上位于B(含B)之前的各分支節(jié)點的各個條件,構(gòu)建 關(guān)于輸入變量向量X的分支函數(shù)F k^_(X);所述輸入變量向量X為所述待測源程序輸入變 量構(gòu)成的向量;所述分支函數(shù)Fti,j(X)表示路徑k上第i個分支節(jié)點的第j個條件的分支 函數(shù);所述路徑k經(jīng)過分支節(jié)點B ; 52 :構(gòu)建初始的輸入向量集U ;所述初始的輸入向量集U至少包含兩個輸入向量; 53 :計算以輸入向量集U中每個輸入向量作為待測源程序的輸入執(zhí)行待測源程序時 與所述分支節(jié)點B關(guān)聯(lián)的各路徑k上位于B之前(含B)的每個分支節(jié)點上的各分支函數(shù) Fk^_(X)獲得分支函數(shù)值的集合V以及最遠(yuǎn)公共分支節(jié)點mk;當(dāng)執(zhí)行待測源程序時的執(zhí)行 路徑經(jīng)過分支節(jié)點B時計算B的判定和判定中各個條件的取值;假如輸入向量集U中存在 一個輸入向量執(zhí)行待測源程序時執(zhí)行路徑經(jīng)過分支節(jié)點B且使B的判定或判定中某個條件 產(chǎn)生新的取值,則記錄該輸入向量作為所述分支節(jié)點B的一個測試數(shù)據(jù);假如所述分支節(jié) 點B的測試數(shù)據(jù)集覆蓋了 B的判定及判定中各條件所有可能取值并且每個條件都獨立影響 了判定,則返回該測試數(shù)據(jù)集作為所述分支節(jié)點B的測試數(shù)據(jù)集; 54 :根據(jù)分支節(jié)點B的關(guān)聯(lián)路徑集中各路徑k上位于B之前(含B)的各個分支節(jié)點 上的各分支函數(shù)值的集合V以及最遠(yuǎn)公共節(jié)點m k構(gòu)建路徑k上位于最遠(yuǎn)公共節(jié)點mk之前 (含mk)的每個分支節(jié)點的各分支函數(shù)的擬合函數(shù)LF k^ ;LFk^表示路徑k上第i個分支 節(jié)點的第j個條件的分支函數(shù)的線性擬合函數(shù); 55 :根據(jù)與B關(guān)聯(lián)的各路徑上位于B之前(含B)的每個分支節(jié)點中的各分支函數(shù)的線 性擬合函數(shù)LF k^_和待測源程序計算可行區(qū)間I ; 56 :在可行區(qū)間I內(nèi)隨機選取各輸入變量的輸入值得到測試數(shù)據(jù)集加入至輸入向量集 U中; 57 :重復(fù)執(zhí)行步驟S3至S6直到步驟S3至S6執(zhí)行的次數(shù)達(dá)到限定的次數(shù); 58 :返回所有記錄的所述分支節(jié)點B的測試數(shù)據(jù)作為所述分支節(jié)點B的測試數(shù)據(jù)集。
2. 如權(quán)利要求1所述的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,其特征在 于,所述步驟S2中所述的初始的輸入向量集U包含Ni+Ι個輸入向量,所述Ni為輸入變量 的個數(shù);初始的輸入向量集u = {uQ,Up U2, · · ·,UNi},其中Ui = {Uu,Ui,2, · · ·,ι^,Μ};輸入 U: = Un ,> ^ j 向量UQ為隨機生成,Ui與uQ滿足關(guān)系:j ' ,,其中i, j e {1, 2, · · ·, Ni}。
3. 如權(quán)利要求1所述的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,其特征在 于,所述步驟S3包括: 531 :從輸入向量集U獲取未執(zhí)行的輸入向量ut ; 532 :判斷未執(zhí)行的輸入向量ut是否存在;假如不存在未執(zhí)行的輸入向量,則執(zhí)行步驟 S34 ;否則執(zhí)行步驟S33 ; 533 :根據(jù)ut執(zhí)行待測源代碼得到執(zhí)行的路徑與分支節(jié)點B的關(guān)聯(lián)路徑集中各路徑k 的公共分支節(jié)點mtt,計算路徑k上位于分支節(jié)點B之前(含B)的各分支節(jié)點的分支函數(shù) FuJX)的值,B的所有關(guān)聯(lián)路徑的各個分支節(jié)點的各分支函數(shù)FuJX)的值構(gòu)成集合V; 若執(zhí)行的路徑經(jīng)過分支節(jié)點B,則執(zhí)行的路徑為分支節(jié)點B的一條關(guān)聯(lián)路徑,根據(jù)該關(guān)聯(lián)路 徑上B的判定中各個條件的分支函數(shù)值得到分支節(jié)點B的判定和判定中各條件的取值;假 如B的判定或判定中條件產(chǎn)生了新的取值,則記錄該輸入向量作為所述分支節(jié)點B的一個 測試數(shù)據(jù);假如B的測試數(shù)據(jù)集覆蓋了 B的判定且判定中各條件所有可能取值并且每個條 件都獨立影響了判定,返回該測試數(shù)據(jù)集作為所述分支節(jié)點B的測試數(shù)據(jù)集并結(jié)束對整個 分支節(jié)點B生成測試數(shù)據(jù)的過程。 S34 :從分支B的各關(guān)聯(lián)路徑k記錄的{mu, mk>2, . . .,mk,TU}中選取最遠(yuǎn)公共分支節(jié)點 mk。
4. 如權(quán)利要求1所述的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,其特征在 于,所述步驟S4包括以下步驟: 541 :輸入向量集U和B的關(guān)聯(lián)路徑集中各路徑k上位于B之前(含B)的各個分支節(jié) 點的各分支函數(shù)值的集合V以及最遠(yuǎn)公共節(jié)點mk構(gòu)建坐標(biāo)集Vk,y, z,j = {(u^Fk^Juu)), (? j,F(xiàn)k,y,z (u2,』)),· · ·,(uTU,』,Fk,y,z (uTU,』))); 542 :以 Vk,y,z,』一{(u1;』,F(xiàn)k, y,z (i^,』)),(u2,』,F(xiàn)k,y,z (u2,』)),· · ·,(uTU,』,F(xiàn)k,y,z (uTU,』))}內(nèi)兩 個相鄰的坐標(biāo)點構(gòu)建Fk,y, z(Xj)的線性擬合函數(shù)LFk,y,z(Xj) = Pj*Xj+qj,得到參數(shù)集LFPQk;i,j 一 {(Pi,Qi),(P2,%),···,(Pm,%i)}; 其中,\y^表示路徑k上第y個分支節(jié)點第z個分支函數(shù)對應(yīng)第j個輸入變量的坐 標(biāo)集,其中y < m ;Ui;j為輸入向量集U中第i個輸入向量的第j個輸入變量的值;Fty,z( Xj) 為路徑k上第y個節(jié)點第z個分支函數(shù)關(guān)于第j個輸入變量的函數(shù);LFk,y, z(xp為路徑k上 第y個節(jié)點第z個分支函數(shù)關(guān)于第j個輸入變量的線性擬合函數(shù);LFPQ k^.為路徑k上第i 個節(jié)點第j個分支函數(shù)的線性擬合函數(shù)的參數(shù)集。
5. 如權(quán)利要求1所述的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,其特征在 于,所述步驟S5包括: 551 :計算分支節(jié)點B的各關(guān)聯(lián)路徑k上位于分支節(jié)點B之前(含B)的各個分支節(jié)點 中各分支函數(shù)的可行區(qū)間D k,i;j ; 552 :合并每個分支節(jié)點內(nèi)的各分支函數(shù)的可行區(qū)間Dk^_得到各分支節(jié)點的可行區(qū)間 Dk,i ; 553 :合并最遠(yuǎn)公共分支節(jié)點mk前的各分支節(jié)點的可行區(qū)間Dti得到分支節(jié)點B在關(guān) 聯(lián)路徑k上的可行區(qū)間I k。 554 :合并分支節(jié)點B在各關(guān)聯(lián)路徑k上的可行區(qū)間Ik,得到分支節(jié)點B的可行區(qū)間I。
6. 如權(quán)利要求1所述的面向修訂的條件判定覆蓋的測試數(shù)據(jù)自動生成方法,所述可行 區(qū)間I = ΙΛ,12,. . .,IJ,其中,s為輸入變量的個數(shù),Ii為第i個輸入變量的可行區(qū)間,Ii =Uu,Ii,2, ...,,其中,為第i個輸入變量第j個可行分段區(qū)間,Mi為第i個輸 入變量可行分段區(qū)間數(shù),其特征在于,所述步驟S6中,當(dāng)Mi為1時,從^為第i個輸入變 量的可行區(qū)間的唯一分段區(qū)間Iu的擴展區(qū)間中隨機取值構(gòu)建測試數(shù)據(jù)。
7. -種機器可讀介質(zhì),其特征在于,該可讀介質(zhì)上存儲有指令集合,當(dāng)該指令集合被執(zhí) 行時,使得該機器可執(zhí)行權(quán)利要求1至6中任一項權(quán)利要求所述的面向修訂的條件判定覆 蓋的測試數(shù)據(jù)自動生成方法。
【文檔編號】G06F11/36GK104050082SQ201410271281
【公開日】2014年9月17日 申請日期:2014年6月17日 優(yōu)先權(quán)日:2014年6月17日
【發(fā)明者】陳鑫, 歐建生, 成新, 周巖, 鞠秀芳 申請人:南京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1