專利名稱:一種基于Agent嵌入式軟件的不變量測試方法與工具的制作方法
技術(shù)領(lǐng)域:
發(fā)明涉及一種軟件測試方法與工具,特別地涉及一種基于Agent嵌入式軟件的不 變量測試方法與工具。
背景技術(shù):
隨著嵌入式技術(shù)的發(fā)展,嵌入式軟件作為計算機軟件的重要分支,已經(jīng)在消費電 子產(chǎn)品、交通系統(tǒng)、工業(yè)控制、醫(yī)療設(shè)備和軍事領(lǐng)域等應(yīng)用越來越廣泛,因而對嵌入式軟件 系統(tǒng)的質(zhì)量要求很高。軟件測試是保證軟件系統(tǒng)正確性的一個重要手段,也是計算機軟件工程方法和技 術(shù)的一個主要組成部分。雖然測試并不能證明軟件系統(tǒng)的正確性,但是它通過運行選定的 測試用例來發(fā)現(xiàn)軟件中的錯誤,并通過糾正錯誤使軟件的質(zhì)量達(dá)到令人以滿意的程度。所 以,在今后相當(dāng)長的時間內(nèi)測試仍是保證軟件質(zhì)量的主要手段。在測試?yán)碚摪l(fā)展的同時,各種軟件測試方法被相繼提出。如一種基于程序變異的 測試方法,該方法通過對源程序和變異后的程序執(zhí)行結(jié)果的比較來進(jìn)行軟件故障的檢測。 還有基于程序插裝的軟件測試方法,這種方法的核心思想是在保持程序原有邏輯完整的基 礎(chǔ)上,在程序中插入“探測儀”,以便獲取程序中的控制流和數(shù)據(jù)流信息,通過對獲取的數(shù)據(jù) 進(jìn)行分析來判斷程序中包含的錯誤。這些測試方法的提出,為軟件測試工作提供了幫助。但是,這些已有的軟件測試?yán)碚摷皽y試方法中,一般仍然或多或少存在以下不 足(1)對隱含的代碼錯誤測試效果不好,如果再次測試將花費大量的人力物力;(2)人為參與的步驟太多,使用起來很不方便;(3)大部分測試軟件價格昂貴,很難大規(guī)模普及。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問題是針對目前流行的以Linux系統(tǒng)作為嵌入式操作系統(tǒng) 內(nèi)核的嵌入式軟件,如何能減少人為參與且能快速有效地對軟件中隱含的代碼錯誤進(jìn)行測
試ο為了解決上述問題,本發(fā)明提供了一種基于Agent嵌入式軟件的不變量測試方法 與工具,包括以下步驟1.)第一階段動態(tài)提取程序不變量,包括如下步驟(1)對待測的嵌入式軟件程序進(jìn)行程序編配Agent,即在程序中每個函數(shù)入口和 出口處利用前端工具插入代碼,采用時間戳機制標(biāo)記每一個變量,輸出編配文件和軌跡文 件的格式的聲明文件;( 對步驟(1)輸出的編配文件里的編配程序根據(jù)路徑、分支、等價 類和邊界條件確定測試用例,輸入所形成的測試用例,通過循環(huán)控制方式多次運行編配程 序來記錄程序運行軌跡,最終形成軌跡文件;C3)利用集成思想根據(jù)程序不變量不同的分 類標(biāo)準(zhǔn)將程序不變量分成3種不同類別的形式從而預(yù)設(shè)不變量的形式,不變量檢測器將步驟(2)形成的軌跡文件中變量值與預(yù)設(shè)不變量形式比較,得到相應(yīng)的不變量集,利用多數(shù) 投票法整理分析,得出程序不變量報告。2.)第二階段靜態(tài)提取程序不變量,包括如下步驟(1)對待測的嵌入式軟件程序進(jìn)行詞法分析Agent,即采用Linux下的Iex將待測 的嵌入式軟件程序分解成單獨的詞的表示,形成初步的符號表,并將結(jié)果傳遞給語法分析 Agent ; (2)通過步驟(1)接收到的詞法分析Agent的結(jié)果,采用yacc將輸入字符串識別為 單詞符號流,找出變量聲明語句,并相應(yīng)分離出指針變量和數(shù)組變量,最終生成語法樹,每 一個語法規(guī)則對應(yīng)一個相應(yīng)的處理函數(shù),并作為樹的一個節(jié)點掛在語法樹上,提供對外的 接口 ; C3)對步驟( 生成的語法樹分析找出程序不變量。3.)第三階段分析錯誤將動態(tài)提取的程序不變量與靜態(tài)提取的程序不變量相比 較,找出不同的程序不變量對其分析,確定是否錯誤,最終將錯誤集中起來形成錯誤報告。
圖1為本發(fā)明的體系結(jié)構(gòu)圖。
具體實施例方式本發(fā)明的核心思想是利用程序不變量的不同的分類標(biāo)準(zhǔn),形成3種不同的軌跡 文件,對不變量進(jìn)行3種不同地檢測。利用集成思想和多數(shù)投票法將檢測出的不變量進(jìn)行 最終的確定。利用Agent的自治特性,在沒有其它Agent或測試者的直接命令和干預(yù)下進(jìn) 行獨立的判斷。利用對比的方法找出程序中的錯誤。下面結(jié)合附圖1對本發(fā)明的工作流程 及各模塊功能進(jìn)行詳細(xì)說明。1.工作流程本發(fā)明的工作流程包括動態(tài)提取程序不變量、靜態(tài)提取程序不變量以及錯誤分 析。1. 1動態(tài)提取程序不變量其步驟為(1)對待測的嵌入式軟件程序進(jìn)行程序編配Agent,即在程序中每個函 數(shù)入口和出口處利用前端工具插入代碼,采用時間戳機制標(biāo)記每一個變量,輸出編配文件 和軌跡文件的格式的聲明文件;( 對步驟(1)輸出的編配文件里的編配程序根據(jù)路徑、分 支、等價類和邊界條件確定測試用例,輸入所形成的測試用例,通過循環(huán)控制方式多次運行 編配程序來記錄程序運行軌跡,最終形成軌跡文件;C3)利用集成思想根據(jù)程序不變量不 同的分類標(biāo)準(zhǔn)將程序不變量分成3種不同類別的形式從而預(yù)設(shè)不變量的形式,不變量檢測 器將步驟(2)形成的軌跡文件中變量值與預(yù)設(shè)不變量形式比較,得到相應(yīng)的不變量集,利 用多數(shù)投票法整理分析,得出程序不變量報告。1. 2靜態(tài)提取程序不變量其步驟為(1)對待測的嵌入式軟件程序進(jìn)行詞法分析Agent,即采用Linux下的 Iex將待測的嵌入式軟件程序分解成單獨的詞的表示,形成初步的符號表,并將結(jié)果傳遞給 語法分析Agent ;(2)通過步驟(1)接收到的詞法分析Agent的結(jié)果,采用yacc將輸入字符 串識別為單詞符號流,找出變量聲明語句,并相應(yīng)分離出指針變量和數(shù)組變量,最終生成語 法樹,每一個語法規(guī)則對應(yīng)一個相應(yīng)的處理函數(shù),并作為樹的一個節(jié)點掛在語法樹上,提供對外的接口 ; C3)對步驟O)生成的語法樹分析找出程序不變量。1. 3分析錯誤將動態(tài)提取的程序不變量與靜態(tài)提取的程序不變量相比較,找出不同的程序不變 量對其分析,確定是否錯誤,最終將錯誤集中起來形成錯誤報告。2.模塊功能描述本發(fā)明的模塊包括動態(tài)提取程序不變量中的程序編配Agent模塊、程序軌跡收集 模塊和程序不變量提取模塊,靜態(tài)提取程序不變量中的詞法語法分析Agent模塊以及錯誤 分析中的錯誤分析模塊。2. 1程序編配Agent模塊程序編配Agent模塊就是在待檢測的程序代碼中插入大量的描述軌跡的代碼,為 程序運行軌跡收集奠定基礎(chǔ)。其主要的工作是確定觀測點和觀測變量。程序編配的方法基本上可以分為內(nèi)嵌和外包兩種方法。本發(fā)明采用內(nèi)嵌法。內(nèi)嵌 法就是在程序的適當(dāng)位置插入跟蹤代碼,如打印語句,以暴露程序運行的軌跡。本發(fā)明針對程序編配Agent設(shè)計的步驟為首先確定將程序中每個函數(shù)的入口和 出口作為觀測點,利用前端工具Defj對源程序進(jìn)行代碼的插入,然后采用時間戳機制對每 一個變量做時間標(biāo)記,隨著時間的變化記錄變量的變化過程,同時設(shè)置標(biāo)記信息,如果變量 的狀態(tài)有所改變則標(biāo)記為1,否則標(biāo)記為0。最終輸出兩個文件其一是與源程序文件同名 的編配文件,其二是軌跡文件格式的聲明文件。2. 2程序軌跡收集模塊程序軌跡收集模塊就是用適當(dāng)?shù)臏y試用例集運行程序,收集并保存位于觀測點上 的觀測變量的運行值。它主要包括測試用例的生成和軌跡的形成。(1)測試用例的生成目前測試用例的選擇有兩類典型的方法白盒法和黑盒法。本發(fā)明采用白盒法和 黑盒法相結(jié)合的選擇方法。白盒法根據(jù)路徑、分支等覆蓋準(zhǔn)則選擇測試用例。黑盒法使用 等價類、邊界條件等技術(shù)確定測試用例。本發(fā)明針對測試用例的生成設(shè)計的步驟為首先對編配后的程序的路徑和分支選 擇測試用例。然后再使用等價類、邊界條件確定編配后的程序的測試用例。最終將所有的 測試用例集中起來形成測試用例集。(2)軌跡的形成軌跡的形成就是利用生成的測試用例集運行程序,收集并保存位于觀測點上的觀 測變量的運行值。在每一次測試中,當(dāng)程序運行經(jīng)過預(yù)定的觀測點時就將產(chǎn)生一條測試記 錄,一次運行產(chǎn)生的全部檢測記錄序列組成程序的一個軌跡。軌跡的形成方法有單次運行程序形成和多次運行程序形成。本發(fā)明采用多次運行 程序形成。多次運行程序就是利用動態(tài)數(shù)組將程序運行多次。本發(fā)明針對軌跡的形成設(shè)計的步驟為首先在每個測試函數(shù)的入口點插入動態(tài)數(shù) 組,然后通過循環(huán)控制方式多次運行程序來記錄程序運行軌跡,最終將運行軌跡集中起來 形成軌跡文件。軌跡信息主要反映在文件· cdecls和· ctrace里面?!?cdecls文件為· ctrace文 件聲明了文件格式。
下面介紹一下軌跡文件的聲明文件.cdecls格式DEC1ARE表示一個新的函數(shù)或方法的開始。program-point-name表示此時的函數(shù)或方法名稱。varnamel函數(shù)或方法中的變量名稱。Declared-typel表示第一個變量在源程序中的類型。[#auxiliary-informationl]表示此變量的輔助說明信息,此項是可選項。representation-typel表示在軌跡文件中的此變量的數(shù)據(jù)類型,一般情況下和源 程序中的類型是相同的。它一般是 boolean, java. lang. String, int, hashcode, double 中 的一個,或者是它們的一個序列。comparable variables表示其它哪些變量可以和該變量進(jìn)行比較運算,這個過程 需要數(shù)據(jù)類型的推理分析比較。下面介紹一下軌跡文件的聲明文件.ctrace格式program-point-name (禾呈序點名字)varnamel (該程序點可見的第一個域的域名)var-value-1 (該程序點的第一個域的域值)var-modified-1 (該程序點的第一個域的修改標(biāo)志位)varname2 (該程序點的第二個域的域名)var-value-2 (該程序點的第二個域的域值)var-modified-2 (該程序點的第二個域的修改標(biāo)志位)其中域修改標(biāo)志位,表明該域自上次被觀察以后是否重新被賦值,為1表示該域 在該程序點重新被賦值,為0表示該域沒有重新被賦值。2. 3程序不變量提取模塊程序不變量提取模塊就是對軌跡形成階段得到的程序軌跡集合中的數(shù)據(jù)進(jìn)行檢 測,從中發(fā)現(xiàn)有意義的程序行為特征。目前的不變量提取方法主要是基于模式提取的。即首先定義好比較常見的程序不 變量類型,然后根據(jù)收集的程序軌跡文件中的各個變量在不同時刻的不同狀態(tài)值,依此把 各個變量進(jìn)行比較。如果發(fā)現(xiàn)與模板匹配則報告出此不變量,否則繼續(xù)比較,直到把所有的 變量值比較完為止。本發(fā)明采用的提取方法是基于模式的集中提取?;谀J降募刑崛?就是將集中的思想運用到基于模式提取中,即采用多次不同的基于模式提取。本發(fā)明針對程序不變量提取設(shè)計的步驟為首先輸入.ctrace文件作為不變量檢 測的分析資源,然后根據(jù)程序不變量3種不同的分類標(biāo)準(zhǔn)預(yù)設(shè)不變量的形式,接著不變量 檢測器通過在觀測變量值的集合上對預(yù)設(shè)的不變量形式檢測得到相應(yīng)的不變量集,最終利 用多數(shù)投票法整理分析數(shù)據(jù)文件,得出程序不變量報告。2. 4詞法語法分析Agent模塊詞法語法分析Agent模塊就是對待測的嵌入式軟件進(jìn)行詞法語法分析靜態(tài)地提 取出程序不變量,其包括詞法分析Agent、語法分析Agent和語法樹分析Agent。詞法分析Agent和語法分析Agent主要采用Linux環(huán)境下的Iex和yacc來完成。 Lex與yacc是Linux系統(tǒng)所提供的詞法分析工具和語法分析工具,使用這兩個工具可以生 成詞法和語法分析器,縮短開發(fā)系統(tǒng)軟件的周期,節(jié)約時間,提高工作效率。
①詞法分析Agent。Lex是一個詞法分析程序的生成程序,它是為了對字符輸入流 進(jìn)行詞法分析處理而專門設(shè)計的,這個程序的核心是正規(guī)表達(dá)式,用來描述輸入串的詞法 結(jié)構(gòu)。本發(fā)明針對詞法分析Agent設(shè)計的步驟為首先寫出一個詞法規(guī)則文件lex. 1,給 出特定的詞法規(guī)則,即表達(dá)式和相關(guān)動作。之后,由Iex將其轉(zhuǎn)變成一個通用宿主語言,生 成一個C程序lex. yy. c,其主函數(shù)為yylexO。其功能是識別輸入字符流中的單詞,并返回 指定的單詞或其他語法單位的代號。當(dāng)yyparseO (語法分析主函數(shù))調(diào)用yylexO時,將 按照yylexO返回的代號值進(jìn)行語法分析。②語法分析Agent。Yacc是Linux上一個用來生成編譯器的編譯器。^cc生成的 編譯器主要是用C語言寫成的語法解析器,需要與詞法解析器Lex —起使用,再把兩部分產(chǎn) 生出來的C程序一并編譯。本發(fā)明針對語法分析Agent設(shè)計的步驟為首先根據(jù)任務(wù)需求制定一個輸入處理 的功能說明,即一個語法規(guī)則文件yacc. y,其內(nèi)容就是指定的語法規(guī)則集及其各規(guī)則對應(yīng) 的動作。然后,由yacc將這樣的說明轉(zhuǎn)換成一個處理相應(yīng)輸入流的C語言程序yy. tab. c, 其主函數(shù)是yyparse ()。它通過調(diào)用詞法分析Agent的分析程序yylex (),進(jìn)而從輸入流中 找到“單詞”,再根據(jù)輸入結(jié)構(gòu)對這些單詞加以組織。當(dāng)某條規(guī)則被匹配,并完整地識別出來 后,就調(diào)用用戶指定的對應(yīng)于這條規(guī)則的一個動作,該動作具有返回值和利用其他動作的 值的能力。③語法樹分析Agent。語法樹分析Agent主要用來對詞法Agent和語法Agent生 成的語法樹進(jìn)行分析,找出程序不變量。本發(fā)明針對語法樹分析Agent設(shè)計的步驟為首先在程序的入口處和出口處以及 函數(shù)的入口處和出口處設(shè)置探測點,然后開始探測程序不變量,最終將探測出的程序不變 量集中形成不變量集。2. 5錯誤分析模塊錯誤分析模塊就是將動態(tài)提取的程序不變量與靜態(tài)提取的程序不變量相比較,找 出不同的程序不變量對其分析,確定是否錯誤,最終將錯誤集中起來形成錯誤報告。本發(fā)明中針對錯誤分析設(shè)計的步驟為首先確定靜態(tài)提取的程序不變量階段得到 的程序不變量的數(shù)目,然后編寫程序?qū)討B(tài)提取的程序不變量與靜態(tài)提取的程序不變量進(jìn) 行比較,找出不相同的程序不變量,最終分析找出的不相同的程序不變量得出程序中的錯 誤。3.優(yōu)勢與現(xiàn)有技術(shù)相比,本發(fā)明提出的一種基于Agent嵌入式軟件的不變量測試方法與 工具有如下顯著優(yōu)點(1)將不變量、集成思想和Agent的觀念運用到測試技術(shù)中,是一種利用不變量、 集成思想和Agent幫助測試者進(jìn)行軟件測試的測試工具。(2)在測試過程中,本發(fā)明利用程序不變量的3種不同的分類標(biāo)準(zhǔn),形成3種不同 的軌跡文件,對不變量進(jìn)行不同地檢測。利用集成思想和多數(shù)投票法將檢測出的不變量進(jìn) 行最終的確定。(3)利用Agent的自治特性,在沒有其它Agent或測試者的直接命令和干預(yù)下進(jìn)行獨立的判斷。利用對比的方法找出程序中的錯誤。 (4)該軟件測試系統(tǒng)能夠減少測試者的直接干預(yù),并提供一個良好的集成測試環(huán) 境,可以大大提高自動化測試的效率,同時能夠很好地發(fā)現(xiàn)程序中的潛在錯誤。
權(quán)利要求
1. 一種基于Agent嵌入式軟件的不變量測試方法與工具,其特征在于包括如下步驟1.)第一階段動態(tài)提取程序不變量,包括如下步驟(1)對待測的嵌入式軟件程序進(jìn)行程序編配Agent,即在程序中每個函數(shù)入口和出口 處利用前端工具插入代碼,采用時間戳機制標(biāo)記每一個變量,輸出編配文件和軌跡文件的 格式的聲明文件;( 對步驟(1)輸出的編配文件里的編配程序根據(jù)路徑、分支、等價類和 邊界條件確定測試用例,輸入所形成的測試用例,通過循環(huán)控制方式多次運行編配程序來 記錄程序運行軌跡,最終形成軌跡文件;C3)利用集成思想根據(jù)程序不變量不同的分類標(biāo) 準(zhǔn)將程序不變量分成不同類別的形式從而預(yù)設(shè)不變量的形式,不變量檢測器將步驟(2)形 成的軌跡文件中變量值與預(yù)設(shè)不變量形式比較,得到相應(yīng)的不變量集,利用多數(shù)投票法整 理分析,得出程序不變量報告。2.)第二階段靜態(tài)提取程序不變量,包括如下步驟(1)對待測的嵌入式軟件程序進(jìn)行詞法分析Agent,即采用Linux下的Iex將待測 的嵌入式軟件程序分解成單獨的詞的表示,形成初步的符號表,并將結(jié)果傳遞給語法分析 Agent ; (2)通過步驟(1)接收到的詞法分析Agent的結(jié)果,采用yacc將輸入字符串識別為 單詞符號流,找出變量聲明語句,并相應(yīng)分離出指針變量和數(shù)組變量。其結(jié)果是生成語法 樹,每一個語法規(guī)則對應(yīng)一個相應(yīng)的處理函數(shù),并作為樹的一個節(jié)點掛在語法樹上,提供對 外的接口 ; (3)對步驟( 生成的語法樹分析找出程序不變量。3.)第三階段分析錯誤將動態(tài)提取的程序不變量與靜態(tài)提取的程序不變量相比較, 找出不同的程序不變量對其分析,確定是否錯誤,最終將錯誤集中起來形成錯誤報告。
2.如權(quán)利要求1中所述方法,其特征在于根據(jù)程序不變量不同的分類標(biāo)準(zhǔn)將程序不變 量分成3種不同類別的形式,分別為單一的數(shù)字變量的不變量和非單一的數(shù)字變量的不變 量、單一的序列變量的不變量和非單一的序列變量的不變量以及函數(shù)依賴的不變量和非函 數(shù)依賴的不變量。
全文摘要
本發(fā)明涉及一種基于Agent嵌入式軟件的不變量測試方法與工具,是一種利用集成思想并動態(tài)與靜態(tài)相結(jié)合的以Linux系統(tǒng)作為嵌入式操作系統(tǒng)內(nèi)核的軟件測試方法。本發(fā)明所述方法包括如下步驟第一階段動態(tài)提取程序不變量,包括程序編配Agent、程序軌跡收集、程序不變量提取,通過執(zhí)行程序動態(tài)地將其中的程序不變量提取出來;第二階段靜態(tài)提取程序不變量,包括詞法分析Agent、語法分析Agent、語法樹分析Agent,通過詞法語法分析靜態(tài)地將其中的程序不變量提取出來;第三階段分析錯誤,將第一階段動態(tài)提取的程序不變量與第二階段靜態(tài)提取的程序不變量相比較,找出不同的程序不變量對其分析,確定是否錯誤,最終將錯誤集中起來形成錯誤報告。本發(fā)明能夠應(yīng)用到不同的程序,通用性強。
文檔編號G06F11/36GK102087629SQ20111002675
公開日2011年6月8日 申請日期2011年1月25日 優(yōu)先權(quán)日2011年1月25日
發(fā)明者劉久富, 蘇青琴, 陳魁 申請人:南京航空航天大學(xué)