專利名稱:一種單元測試方法和裝置的制作方法
技術領域:
本發明涉及軟件測試技術,尤其提出了一種單元測試方法和裝置。
背景技術:
所謂單元測試就是在構造的與軟件的其它部分相隔離的環境中對軟件的獨立單 元進行測試的過程,具體實現為通過分析被測軟件單元的特性,設計包括測試用例數據、 測試函數、以及測試運行環境的測試用例,通過測試用例的實施檢驗被測軟件單元的功能 是否正確。而目前,對被測軟件單元特性的分析大多從被測軟件單元整體考慮,需要考慮的 邏輯關系較復雜,使得分析過程復雜繁瑣,且需要耗費精力為每條測試用例數據編寫對應 測試函數、以及構建對應的測試運行環境,使得測試效率太低。
發明內容
有鑒于此,本發明的主要目的在于提供一種單元測試方法和裝置,能夠使得測試 用例的設計思路簡單清晰。為達到上述目的,本發明的技術方案是這樣實現的一種單元測試方法,該方法包括將軟件單元的邏輯結構表述為一個或多個行為;分別根據各行為設計所述軟件單 元的測試用例數據;編寫所述軟件單元的測試函數;根據所述測試用例數據和測試函數對軟件單元進行測試。進一步地,所述將軟件單元的邏輯結構表述為一個或多個行為為分析軟件單元的邏輯結構,得出該軟件單元的邏輯結構所包括的動作/結果,以 及執行該動作或得出該結果的條件,并將得出的動作/結果和執行該動作或得出該結果的 條件對應添加在預先配置給該軟件單元的規則決策表中。進一步地,所述分別根據各行為設計所述軟件單元的測試用例數據為根據各行 為設計軟件單元的測試用例數據,并將各測試用例數據添加在預先為該軟件單元配置的數 據決策表中。進一步地,所述根據所述測試用例數據和測試函數對軟件單元進行測試前,該方 法還包括將各軟件單元的單元號、測試用例數據和測試函數對應存儲。進一步地,所述根據所述測試用例數據和測試函數對軟件單元進行測試具體為a、將需要測試的軟件單元作為被測軟件單元,輸入被測軟件單元的單元號;b、查詢所存儲的與輸入的單元號對應的測試用例數據和測試函數的存儲地址;c、將查詢到的測試用例數據的存儲地址加載到內存中的用例數據鏈表;d、根據查詢到的測試函數的存儲地址,調用所查詢到的測試函數,執行對被測軟 件單元的測試,并記錄測試結果;e、如果還需要測試所述待測軟件外的其它軟件單元,返回步驟a;否則,結束本次測試。進一步地,所述執行對被測軟件單元的測試包括dl、根據用例數據鏈表中的測試用例數據的存儲地址,獲取一組測試用例數據,并 將該測試用例數據各元素轉換為被測軟件單元各變量賦值的格式;d2、根據所獲取測試用例數據的屬性為樁控制表的元素和轉換后的屬性為依賴環 境輸入的元素,構建被測軟件單元的樁運行環境,并根據轉換后的所獲取測試用例數據的 屬性為輸入參數的元素,為被測軟件單元的輸入參數賦值;d3、運行被測軟件單元,得到包括輸出參數、返回值、依賴環境輸出的實際運行結 果;比較實際運行結果與期望結果,存儲并顯示比較結果;d4、卸載被測軟件單元的樁運行環境和輸入參數賦值,將被測軟件單元恢復到初 始狀態,結束本測試用例的實施;d5、返回步驟dl,獲取下一組測試用例數據,進行下一個測試用例的實施,直到被 測軟件單元對應的測試用例數據均已獲取完,結束對該被測軟件單元的測試。本發明還提供一種單元測試裝置,該裝置包括第一輸入模塊、測試模塊;其中,第一輸入模塊,用于輸入根據軟件單元的邏輯結構所包括的行為設計出的軟件單 元的測試用例數據;并用于輸入軟件單元的測試函數;測試模塊,用于根據所述測試用例數據和測試函數對軟件單元進行測試。進一步地,該裝置還包括存儲模塊,用于對應存儲各軟件單元的單元號、測試用例數據和測試函數。進一步地,所述測試模塊包括第二輸入模塊、查詢模塊、加載模塊、執行模塊;其 中,第二輸入模塊,用于輸入被測軟件單元的單元號;查詢模塊,用于查詢所存儲的與輸入的單元號對應的測試用例數據和測試函數的 存儲地址;加載模塊,用于將查詢到的測試用例數據的存儲地址加載到內存中的用例數據鏈 表;執行模塊,用于根據查詢到的測試函數的存儲地址,調用所查詢到的測試函數,執 行被測軟件單元的測試;測試結果記錄模塊,用于記錄被測軟件單元的測試結果。本發明所提供的單元測試方法和裝置,由行為表述軟件單元的邏輯,并分別根據 各行為設計軟件單元的測試用例數據,使得測試用例的設計思路簡單清晰。本發明還具有 以下優點和特點—個測試函數即可完成一個軟件單元的所有測試用例的實施,且由測試函數構建 測試環境,使得測試者不再需要耗費精力為每條測試用例數據編寫對應測試函數,以及構 建對應的測試運行環境,提高了測試效率。
圖1為本發明實施例單元測試方法的實現流程示意圖;圖2為本發明實施例單元測試裝置的結構示意圖。
具體實施方式
本發明的基本原理是將軟件單元的邏輯結構中執行某動作/得出某結果的條 件和該動作/結果定義為軟件單元的一個行為,即一個行為對應軟件單元的邏輯結構中的 一個動作或一個結果,而一個行為所包括的條件可能是本軟件單元的其它行為所包括的結 果、或由其所包括動作得到,也可能由其它軟件單元得到,可見,由行為表述軟件單元的邏 輯結構,既可以清晰的表示出軟件單元的動作或結果、各動作或結果之間的聯系,也可以表 述出軟件單元與軟件的其它軟件單元的聯系,這樣,將軟件單元的邏輯結構分解為多個行 為,逐個分析各行為,并分別根據各行為設計軟件單元的測試用例數據,代替直接對軟件單 元的分析,進而設計測試用例,既可以得出等同的分析結果,又可使得測試用例設計思路更 加簡單清晰。本發明實施例單元測試方法的實現流程如圖1所示,包括以下步驟步驟101 將軟件單元的邏輯結構表述為一個或多個行為;所述軟件單元的邏輯 結構在詳細設計階段設計。其中,所述行為包括軟件單元的邏輯結構中執行某動作/得出某結果的條件和該 動作/結果,一個行為對應軟件單元的邏輯結構中的一個動作或一個結果;由行為表述軟件單元的邏輯結構具體為分析軟件單元的邏輯結構,得出其所包括的動作/結果,以及執行該動作或得出 該結果的條件,并將得出的動作/結果和執行該動作或得出該結果的條件對應添加在預先 配置給該軟件單元的規則決策表中;其中,所述規則決策表如表1所示,包括屬性分別為條件、和動作/結果的兩個字段,屬 性為條件的字段中添加所述執行動作/得出結果的條件,屬性為動作/結果的字段中添加 所述動作/結果;規則決策表的每條記錄為一條規則,每條規則對應軟件單元的一個行為; 每張所述規則決策表對應一個軟件單元。 表 1步驟102 在軟件編碼實現階段,分別根據各行為設計軟件單元的測試用例數據;設計軟件單元的測試用例數據具體為根據各行為設計軟件單元的測試用例數 據,并將各測試用例數據添加在預先為該軟件單元配置的數據決策表中;所述數據決策表如表2所示,包括屬性分別為輸入參數、依賴數據環境輸入、輸出 參數、依賴數據環境輸出、返回值和樁控制表的六個字段;所述樁控制表如圖3所示,包括 屬性分別為被打樁函數名、樁函數名和樁路徑控制值的三個字段;數據決策表的一條記錄 為一組測試用例數據,一組測試用例數據即為一個測試用例所運行的數據;數據決策表中 各測試用例數據是細化分解規則決策表中各規則得到的,規則決策表的每條規則可以派生 出一條或者多條測試用例數據,即,數據決策表是規則的數據表現,是一個樹狀分解結構, 一張數據決策表對應一張規則決策表。
6 表 2 表 3其中,在配置給軟件單元的數據決策表中設計并添加規則決策表中某規則對應的 測試用例數據的具體步驟為根據所述軟件單元,確定所述軟件單元的輸入參數、依賴數據環境輸入、輸出參 數、依賴數據環境輸出、返回值分別包括的變量、以及分別對應的數據格式,和各變量的賦 值在數據決策表中相應字段內的順序;例如,軟件單元的輸入參數所包括變量為X、y、Z,軟 件單元的輸入參數對應的數據格式為X =、y =、z =,輸入參數所包括變量X、y、Z的賦值 在數據決策表中相應字段,即屬性為輸入參數的字段中的順序為x、y、z ;根據所述軟件單元中實現該規則對應的行為所包括動作/結果的代碼中的輸入 參數所包括變量及變量的取值范圍,設計輸入參數中所述實現該規則對應的行為所包括動 作/結果的代碼中的輸入參數所包括變量的賦值;取軟件單元的除實現該規則對應的行為 所包括動作/結果的代碼中的輸入變量外的其它輸入參數所包括變量的任意合法輸入;將 所設計的賦值和所取合法輸入,按照所述軟件單元的輸入參數所包括變量在數據決策表中 屬性為輸入參數的字段中的順序,填入屬性為輸入參數的字段;根據所述軟件單元、和該規則對應的行為所包括執行動作或得出結果的條件,確 定該規則對應的行為所依賴的、或影響到的外部環境在所述軟件單元調用前的狀態;取軟 件單元的除所確定的該規則對應的行為所依賴的、或影響到的外部環境在所述軟件單元調 用前的狀態外的其它依賴數據環境輸入的任意合法輸入;將所確定的狀態和所取合法輸 入,按照所述軟件單元的依賴數據環境輸入所包括變量在數據決策表中屬性為依賴數據環 境輸入的字段中的順序,填入屬性為輸入參數的字段;其中,所述該規則對應的行為依賴的 或影響到的外部環境為全局變量或文件等;根據軟件單元、和該規則對應的行為所包括執行動作或得出結果的條件,確定測 試時所述軟件單元所需調用的樁函數,并將該樁函數對應的樁控制表添加在屬性為樁控制 表的字段中;根據所添加的輸入參數、依賴數據環境輸入和樁控制表,以及該規則中屬性為動 作/結果的元素和所述軟件單元,得出輸出參數、依賴數據環境輸出、返回值的所包括變量 的賦值,并分別根據其在數據決策表中相應字段內的順序添加在屬性為輸出參數、依賴數 據環境輸出、返回值的字段中;由上述設計測試用例數據的過程可見,每條測試用例數據的 屬性為輸入參數、依賴數據環境輸入、輸出參數、依賴數據環境輸出、返回值的各元素為一 個過多個變量的賦值。
這里,在添加測試用例數據過程中,即細化分解規則決策表各規則的過程中,可能會發現一些在詳細設計階段沒有發現的規則,此時,可將發現的規則補充進規則決策表, 即,根據數據決策表改進規則決策表,并設計和添加所發現的規則對應的測試用例數據;并 進一步的根據改進了的規則決策表改進詳細設計以及軟件單元。還可以對規則決策表中的各規則進行一級編號,對數據決策表中各規則所對應的
測試用例數據進行二級編號,例如,對規則決策表中的各規則編號為1、2、3.....n,而對其
中編號為2的規則所對應的測試用例數據的編號為2. 1,2. 2,2. 3.....2.m,以便于管理測
試用例數據。步驟103 根據各軟件單元對應的規則決策表和數據決策表編寫該軟件單元的測 試函數;其中,一個軟件單元對應一個所述測試函數,即,一個軟件單元的所有測試用例可 共用一個所述測試函數;步驟104 將各軟件單元的單元號、對應數據決策表的測試用例數據和測試函數 對應存儲;其中,對應數據決策表的測試用例數據的存儲方式可以為將所述數據決策表 存儲在數據庫中,或逐條存儲測試用例數據。步驟105 根據存儲的測試用例數據和測試函數對軟件單元進行測試;這里,對指定的被測軟件單元進行測試的具體方法為步驟a、將需要測試的軟件單元作為被測軟件單元,輸入被測軟件單元的單元號;步驟b、查詢所存儲的與輸入的單元號對應的測試用例數據和測試函數的存儲地 址;步驟C、將查詢到的測試用例數據的存儲地址加載到內存中的用例數據鏈表;步驟d、根據查詢到的測試函數的存儲地址,調用所查詢到的測試函數,執行被測 軟件單元的測試,并記錄測試結果;所述執行對被測軟件單元的測試包括步驟dl、根據用例數據鏈表中的測試用例數據的存儲地址,獲取一組測試用例數 據,并按照該測試用例數據各元素的屬性所對應的數據格式轉換各元素,例如,將測試用例 數據的屬性為輸入參數的元素2、5、8,按照輸入參數對應的數據格式為χ =、y =、z =,轉 換為χ = 2、y = 5、ζ = 8的數據格式;這里,一個待測軟件單元的各測試用例數據中相同屬性的元素所包括變量相同, 寫所包括變量在數據決策表中存儲順序一致,可以按照統一數據格式轉換,這樣,通過一個 測試函數即可實現一個待測軟件的所有測試用例數據的元素的轉換及測試運行環境的構建。步驟d2、根據所獲取測試用例數據的屬性為樁控制表的元素和轉換后的屬性為依 賴環境輸入的元素,構建被測軟件單元的樁運行環境,并根據轉換后的所獲取測試用例數 據的屬性為輸入參數的元素,為被測軟件單元的輸入參數賦值,即完成測試運行環境的構 建;步驟d3、運行被測軟件單元,得到包括輸出參數、返回值、依賴環境輸出的實際運 行結果;比較實際運行結果與期望結果,存儲并顯示比較結果;所述期望結果為轉換后的 所獲取測試用例數據的屬性為輸出參數、返回值、依賴環境輸出的元素;步驟d4、卸載被測軟件單元的樁運行環境和輸入參數的賦值,將被測軟件單元恢復到初始狀態,即測試前的狀態,結束本測試用例的實施;獲取一組測試用例數據對被測軟 件單元進行一次測試即完成一個測試用例的實施;步驟d5、返回步驟dl,獲取下一組測試用例數據,進行下一個測試用例的實施,直 到被測軟件單元對應的測試用例數據均已獲取完,結束對該被測軟件單元的測試。步驟e、如果還需要測試所述待測軟件外的其它軟件單元,返回步驟a;否則,結束 本次測 試。本發明實施例單元測試的裝置的結構如圖2所示,包括第一輸入模塊、測試模 塊;其中,第一輸入模塊,用于輸入根據軟件單元的邏輯結構所包括的行為設計出的軟件單 元的測試用例數據;并用于輸入軟件單元的測試函數;測試模塊,用于根據所述測試用例數據和測試函數對軟件單元進行測試。該裝置還包括存儲模塊,用于對應存儲各軟件單元的單元號、測試用例數據和測試函數。其中,所述測試模塊包括第二輸入模塊、查詢模塊、加載模塊、執行模塊;其中,第二輸入模塊,用于輸入被測軟件單元的單元號;查詢模塊,用于查詢所存儲的與輸入的單元號對應的測試用例數據和測試函數的 存儲地址;加載模塊,用于將查詢到的測試用例數據的存儲地址加載到內存中的用例數據鏈 表;執行模塊,用于根據查詢到的測試函數的存儲地址,調用所查詢到的測試函數,執 行被測軟件單元的測試;測試結果記錄模塊,用于記錄被測軟件單元的測試結果。以上所述,僅為本發明的較佳實施例而已,并非用于限定本發明的保護范圍。
權利要求
一種單元測試方法,其特征在于,該方法包括將軟件單元的邏輯結構表述為一個或多個行為;分別根據各行為設計所述軟件單元的測試用例數據;編寫所述軟件單元的測試函數;根據所述測試用例數據和測試函數對軟件單元進行測試。
2.根據權利要求1所述的單元測試方法,其特征在于,所述將軟件單元的邏輯結構表 述為一個或多個行為為分析軟件單元的邏輯結構,得出該軟件單元的邏輯結構所包括的動作/結果,以及執 行該動作或得出該結果的條件,并將得出的動作/結果和執行該動作或得出該結果的條件 對應添加在預先配置給該軟件單元的規則決策表中。
3.根據權利要求1或2所述的單元測試方法,其特征在于,所述分別根據各行為設計所 述軟件單元的測試用例數據為根據各行為設計軟件單元的測試用例數據,并將各測試用 例數據添加在預先為該軟件單元配置的數據決策表中。
4.根據權利要求1或2所述的單元測試方法,其特征在于,所述根據所述測試用例數據 和測試函數對軟件單元進行測試前,該方法還包括將各軟件單元的單元號、測試用例數據和測試函數對應存儲。
5.根據權利要求4所述的單元測試方法,其特征在于,所述根據所述測試用例數據和 測試函數對軟件單元進行測試具體為a、將需要測試的軟件單元作為被測軟件單元,輸入被測軟件單元的單元號;b、查詢所存儲的與輸入的單元號對應的測試用例數據和測試函數的存儲地址; C、將查詢到的測試用例數據的存儲地址加載到內存中的用例數據鏈表;d、根據查詢到的測試函數的存儲地址,調用所查詢到的測試函數,執行對被測軟件單 元的測試,并記錄測試結果;e、如果還需要測試所述待測軟件外的其它軟件單元,返回步驟a;否則,結束本次測試ο
6.根據權利要求5所述的單元測試方法,其特征在于,所述執行對被測軟件單元的測 試包括dl、根據用例數據鏈表中的測試用例數據的存儲地址,獲取一組測試用例數據,并將該 測試用例數據各元素轉換為被測軟件單元各變量賦值的格式;d2、根據所獲取測試用例數據的屬性為樁控制表的元素和轉換后的屬性為依賴環境輸 入的元素,構建被測軟件單元的樁運行環境,并根據轉換后的所獲取測試用例數據的屬性 為輸入參數的元素,為被測軟件單元的輸入參數賦值;d3、運行被測軟件單元,得到包括輸出參數、返回值、依賴環境輸出的實際運行結果;比 較實際運行結果與期望結果,存儲并顯示比較結果;d4、卸載被測軟件單元的樁運行環境和輸入參數賦值,將被測軟件單元恢復到初始狀 態,結束本測試用例的實施;d5、返回步驟dl,獲取下一組測試用例數據,進行下一個測試用例的實施,直到被測軟 件單元對應的測試用例數據均已獲取完,結束對該被測軟件單元的測試。
7.—種單元測試裝置,其特征在于,該裝置包括第一輸入模塊、測試模塊;其中,第一輸入模塊,用于輸入根據軟件單元的邏輯結構所包括的行為設計出的軟件單元的測試用例數據;并用于輸入軟件單元的測試函數;測試模塊,用于根據所述測試用例數據和測試函數對軟件單元進行測試。
8.根據權利要求7所述的單元測試裝置,其特征在于,該裝置還包括 存儲模塊,用于對應存 儲各軟件單元的單元號、測試用例數據和測試函數。
9.根據權利要求8所述的單元測試裝置,其特征在于,所述測試模塊包括第二輸入模 塊、查詢模塊、加載模塊、執行模塊;其中,第二輸入模塊,用于輸入被測軟件單元的單元號;查詢模塊,用于查詢所存儲的與輸入的單元號對應的測試用例數據和測試函數的存儲 地址;加載模塊,用于將查詢到的測試用例數據的存儲地址加載到內存中的用例數據鏈表; 執行模塊,用于根據查詢到的測試函數的存儲地址,調用所查詢到的測試函數,執行被 測軟件單元的測試;測試結果記錄模塊,用于記錄被測軟件單元的測試結果。
全文摘要
本發明公開了一種單元測試方法,該方法包括由行為表述軟件單元的邏輯結構;分別根據各行為設計所述軟件單元的測試用例數據;編寫所述軟件單元的測試函數;根據所述測試用例數據和測試函數對軟件單元進行測試。本發明還公開了一種單元測試裝置,包括用于輸入表述軟件單元的邏輯結構的行為、軟件單元的測試用例數據和軟件單元的測試函數的第一輸入模塊、和用于根據所述測試用例數據和測試函數對軟件單元進行測試的測試模塊。采用本發明所述的方法和裝置,能夠使得測試用例的設計思路簡單清晰。
文檔編號G06F11/36GK101847117SQ20091008065
公開日2010年9月29日 申請日期2009年3月23日 優先權日2009年3月23日
發明者朱懷云, 邱靜 申請人:中興通訊股份有限公司