專利名稱:測試用例生成方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件測試技術(shù)領(lǐng)域,特別涉及一種測試用例生成方法和裝置。
背景技術(shù):
軟件產(chǎn)品開完完成后,為了保障軟件系統(tǒng)的能夠完成預(yù)期需求的功能,需要對軟件進行測試。軟件測試利用測試工具按照測試方案和流程對產(chǎn)品進行功能和性能的測試。一般在測試過程中都需要編寫用例,通過用例來對軟件各種使用場景和情況進行測試,保障系統(tǒng)的正確和安全運行。測試用例可以由人工手動編寫,現(xiàn)在也有一些自動化用例生成軟件,可以幫助減少人力勞動,提高工作效率。然而,對于結(jié)構(gòu)復(fù)雜的系統(tǒng),其接口函數(shù)較多,并且接口間依賴關(guān)系也較多。這些基礎(chǔ)庫的用例設(shè)計目前還沒有較為完善的自動化用例生成方案。對于這類系統(tǒng)的基礎(chǔ)庫測試,如果要覆蓋到系統(tǒng)中的每個接口函數(shù),并達到一定的分支覆蓋率,需要付出大量的重復(fù)勞動,同時設(shè)計出的測試用例冗余度較高,關(guān)系比較復(fù)雜。
發(fā)明內(nèi)容
本發(fā)明旨在至少解決現(xiàn)有技術(shù)中存在的技術(shù)問題之一。為此,本發(fā)明的一個目的在于提出一種測試用例生成方法,本方法可以增加覆蓋率,能夠處理各種異常測試,并且降低產(chǎn)品的質(zhì)量風(fēng)險。本發(fā)明的第二個目的在于提出一種測試用例生成裝置。為達到上述目的,本發(fā)明第一方面的實施例提出了一種測試用例生成方法,包括以下步驟:獲取待測軟件的源代碼;分析所述源代碼以生成基于接口的流程圖;獲取用戶輸入的配置文件,并根據(jù)所·述基于接口的流程圖和所述配置文件生成接口測試用例。根據(jù)本發(fā)明實施例的測試用例生成方法基于流程圖,自動生成簡潔易懂的測試用例,能夠減少測試用例設(shè)計的重復(fù)勞動,提高了測試代碼的函數(shù)覆蓋率和分支覆蓋率,冗余度低,降低了系統(tǒng)的風(fēng)險,適用于復(fù)雜系統(tǒng)以及接口簡單的基礎(chǔ)庫。在本發(fā)明的一個實施例中,所述分析所述源代碼以生成基于接口的流程圖進一步包括:分析所述源代碼以獲取Dot描述文件;根據(jù)所述Dot描述文件生成所述基于接口的流程圖。在本發(fā)明的一個實施例中,所述基于接口的流程圖包括多個接口節(jié)點以及每個接口節(jié)點對應(yīng)的參數(shù)信息,其中,所述接口節(jié)點對應(yīng)的參數(shù)信息包括返回值結(jié)構(gòu)、參數(shù)結(jié)構(gòu)和指向?qū)?yīng)接口節(jié)點的鏈表。在本發(fā)明的一個實施例中,其中,所述配置文件包括多個接口函數(shù)以及所述多個接口函數(shù)分別對應(yīng)的參數(shù)信息。在本發(fā)明的一個實施例中,所述根據(jù)基于接口的流程圖和所述配置文件生成接口測試用例進一步包括:根據(jù)所述基于接口的流程圖和所述配置文件生成測試用例自動生成框架;獲取所述用戶指定的接口函數(shù),并根據(jù)所述測試用例自動生成框架、所述用戶指定的接口函數(shù)以及所述基于接口的流程圖生成所述接口測試用例。本發(fā)明第二方面的實施例提出了一種測試用例生成裝置,包括獲取模塊、分析模塊和生成模塊。其中,獲取模塊用于獲取待測軟件的源代碼,以及獲取用戶輸入的配置文件;分析模塊用于分析所述源代碼以生成基于接口的流程圖;生成模塊用于根據(jù)所述基于接口的流程圖和所述配置文件生成接口測試用例。根據(jù)本發(fā)明實施例的測試用例生成裝置基于流程圖,自動生成簡潔易懂的測試用例,能夠減少測試用例設(shè)計的重復(fù)勞動,提高了測試代碼的函數(shù)覆蓋率和分支覆蓋率,冗余度低,降低了系統(tǒng)的風(fēng)險,適用于復(fù)雜系統(tǒng)以及接口簡單的基礎(chǔ)庫。在本發(fā)明的一個實施例中,所述分析模塊進一步包括:分析子模塊,用于分析所述源代碼以獲取Dot描述文件;以及生成子模塊,用于根據(jù)所述Dot描述文件生成所述基于接口的流程圖。在本發(fā)明的一個實施例中,所述基于接口的流程圖包括多個接口節(jié)點以及每個接口節(jié)點對應(yīng)的參數(shù)信息,其中,所述接口節(jié)點對應(yīng)的參數(shù)信息包括返回值結(jié)構(gòu)、參數(shù)結(jié)構(gòu)和指向?qū)?yīng)接口節(jié)點的鏈表。在本發(fā)明的一個實施例中,其中,所述配置文件包括多個接口函數(shù)以及所述多個接口函數(shù)分別對應(yīng)的參數(shù)信息。在本發(fā)明的一個實施例中,所述生成模塊根據(jù)所述基于接口的流程圖和所述配置文件生成測試用例自動生成框架,并獲取所述用戶指定的接口函數(shù),以及根據(jù)所述測試用例自動生成框架、所述用戶指定的接口函數(shù)以及所述基于接口的流程圖生成所述接口測試用例。 本發(fā)明的附加方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
本發(fā)明的上述和/或附加的方面和優(yōu)點從結(jié)合下面附圖對實施例的描述中將變得明顯和容易理解,其中:圖1是根據(jù)本發(fā)明實施例的測試用例生成方法的流程圖;圖2是根據(jù)本發(fā)明實施例的測試用例生成流程圖;圖3是根據(jù)本發(fā)明實施例的基于接口的流程圖;圖4是根據(jù)本發(fā)明實施例的測試用例生成框架圖;和圖5是根據(jù)本發(fā)明實施例的測試用例生成裝置的結(jié)構(gòu)示意圖。
具體實施例方式下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。下面參考圖1描述根據(jù)本發(fā)明實施例的測試用例生成方法,包括以下步驟:步驟SllO:獲取待測軟件的源代碼。
步驟S120:分析源代碼以生成基于接口的流程圖。其中,分析源代碼以生成基于接口的流程圖進一步包括:步驟S121:分析源代碼以獲取Dot描述文件。步驟S122:根據(jù)Dot描述文件生成基于接口的流程圖。其中,基于接口的流程圖包括多個接口節(jié)點以及每個接口節(jié)點對應(yīng)的參數(shù)信息,其中,接口節(jié)點對應(yīng)的參數(shù)信息包括返回值結(jié)構(gòu)、參數(shù)結(jié)構(gòu)和指向?qū)?yīng)接口節(jié)點的鏈表。步驟S130:獲取用戶輸入的配置文件,并根據(jù)基于接口的流程圖和配置文件生成接口測試用例。其中,根據(jù)基于接口的流程圖 和配置文件生成接口測試用例進一步包括:步驟S131:根據(jù)基于接口的流程圖和配置文件生成測試用例自動生成框架。步驟S132:獲取用戶指定的接口函數(shù),并根據(jù)測試用例自動生成框架、用戶指定的接口函數(shù)以及基于接口的流程圖生成接口測試用例。 配置文件包括多個接口函數(shù)以及多個接口函數(shù)分別對應(yīng)的參數(shù)信息。下面以圖2為例對本發(fā)明的處理流程進行詳細說明,可以理解的是,本說明僅出于示例目的,根據(jù)本發(fā)明的實施例不限于此。圖2中,首先獲取待測軟件的源代碼A,分析源代碼A,生成基于接口的流程圖B。用戶編寫測試用例自動生成配置文件,指定需要測試的接口函數(shù)C。根據(jù)基于接口的流程圖B和指定需要測試的接口函數(shù)C生成接口測試用例D。測試用例自動生成框架根據(jù)接口測試用例D和用戶輸入?yún)?shù)數(shù)據(jù)E生成測試用例執(zhí)行結(jié)果F0具體步驟如下,可以理解的是,下述執(zhí)行流程僅出于示例目的,根據(jù)本發(fā)明的實施例不限于此。步驟S210:獲取待測軟件的源代碼。步驟S220:分析源代碼以生成基于接口的流程圖。分析源代碼需要測試人員對測試庫的使用有一定了解,熟悉測試庫的調(diào)用流程。圖3為使用dot圖形描述語言生成的待測庫調(diào)用流程圖。具體生成步驟如下:步驟S221:分析源代碼,根據(jù)函數(shù)測試庫調(diào)用流程編寫Dot描述文件。下為Dot描
述文件代碼的一個示例:digraph graph name { Load -> Init; Init -> SetFuncl; Init -> SetFunc2; Init -> SetFunc3; Init -> Run; SetFuncl -> SetFunc2 -> SetFunc3; SetFuncl -> Run; SetFunc2 -> Run; SetFmic3 -> Run; Run -> Stop;
}步驟S222:根據(jù)Dot描述文件,使用Dot圖形描述語言生基于接口的流程圖,表示待測庫調(diào)用流程。圖3中每個節(jié)點包含有三個需記錄的結(jié)構(gòu):返回值結(jié)構(gòu)、參數(shù)結(jié)構(gòu)和指向?qū)?yīng)接口節(jié)點的鏈表。其中,返回值結(jié)構(gòu)用于保存該函數(shù)的返回值類型,參數(shù)結(jié)構(gòu)用于保存輸入?yún)?shù)輸出參數(shù),指向?qū)?yīng)接口節(jié)點的鏈表用于保存對應(yīng)接口節(jié)點的依賴關(guān)系,包括從其他節(jié)點需要繼承的參數(shù)數(shù)據(jù)。load節(jié)點表示加載,與程序中的Load-> Init對應(yīng)。Init節(jié)點分別指向SetFuncl節(jié)點、SetFunc2節(jié)點、SetFunc3節(jié)點和Run節(jié)點。SetFuncl節(jié)點、SetFunc2節(jié)點和SetFunc3節(jié)點依次關(guān)聯(lián),并最終都指向Run節(jié)點。Run節(jié)點最后指向stop節(jié)點。步驟S230:用戶編寫各個函數(shù)的配置信息的文件,指定需要測試的接口函數(shù)。該配置文件包含了每個函數(shù)的基本信息,包括函數(shù)名、函數(shù)參數(shù)列表,基本信息中還需要確定參數(shù)是否為輸入?yún)?shù)或者輸出參數(shù)。如果參數(shù)為輸入?yún)?shù),確定輸入?yún)?shù)是否來自上一個調(diào)用函數(shù)的輸出參數(shù)或者函數(shù)的返回值,如果為輸出參數(shù),則由框架自動定義輸出參數(shù)。下面為配置文件的一種格式:[ifunc]#測試函數(shù)名Test_fun:Run#測試函數(shù)參數(shù)[.0Param]# 類型
Type:int#輸入or輸出參數(shù),true表示輸入?yún)?shù),false表示輸出參數(shù)In_param:true#輸入?yún)?shù)是否來自上一個函數(shù)的的輸出參數(shù),或者返回值From_func:true[.1Param]...
步驟S 240:根據(jù)基于接口的流程圖和配置文件生成測試用例自動生成框架。具體地,根據(jù)步驟S220中接口的流程圖和步驟S230中函數(shù)調(diào)用的配置文件,結(jié)合流程圖和函數(shù)的配置信息生成測試用例自動生成框架。測試用例自動生成框架如圖4所示。測試用例自動生成框架接收指定待測函數(shù)1,根據(jù)接口的流程圖2和函數(shù)調(diào)用的配置文件3,生成各種情況的函數(shù)測試用例4。步驟S250:獲取用戶指定的接口函數(shù),根據(jù)步驟S240生成的測試用例自動生成框架,用戶指定的接口函數(shù)以及基于接口的流程圖生成接口測試用例。對每個接口函數(shù)設(shè)計輸入?yún)?shù)數(shù)據(jù),根據(jù)輸入?yún)?shù)的得到預(yù)期輸出。根據(jù)用戶的配置文件生成測試用例。執(zhí)行測試用例,判斷待測接口是否輸出符合預(yù)期,得出測試結(jié)果。具體地,在基于接口的流程圖中查詢到對應(yīng)的節(jié)點,根據(jù)節(jié)點記錄的相關(guān)信息,從需要測試的函數(shù)節(jié)點開始,采用深度優(yōu)先遍歷的方法,根據(jù)每個函數(shù)中指向?qū)?yīng)接口節(jié)點的鏈表中的數(shù)據(jù),找出基于接口的流程圖中所有可能的該函數(shù)的調(diào)用流程,對于每種情況生成相應(yīng)的測試用例。以run函數(shù)為例,根據(jù)run函數(shù)的基于接口的流程圖,可以生成如下測試用例:Load — Init — RunLoad — Init — SetFuncl — RunLoad — Init — SetFunc2 — RunLoad — Init — SetFunc3 — RunLoad — Init — SetFuncl — SetFunc2 — RunLoad — Init — SetFuncl — SetFunc2 — SetFunc3 — Run......
上述列舉了 run函數(shù)可能的執(zhí)行過程,對于每種執(zhí)行過程,自動生成對應(yīng)的測試用例。用戶指定各個函數(shù)的輸入?yún)?shù),根據(jù)輸出參數(shù)可以得到預(yù)期的結(jié)果,對于每步操作都可以判斷函數(shù)的返回值、輸出參數(shù)是否正確合法。根據(jù)本發(fā)明實施例的測試用例生成方法,通過生成測試用例自動生成框架,根據(jù)用戶的配置文件生成接口測試用例。減少了編寫重復(fù)測試用例的時間。能夠全面的覆蓋函數(shù)可能的執(zhí)行流程,對每種流程都能設(shè)計數(shù)據(jù),提高了測試覆蓋率,降低了系統(tǒng)bug的風(fēng)險。對于產(chǎn)品的RD或QA,可以在開發(fā)時期對產(chǎn)品進行測試,將產(chǎn)品的質(zhì)量問題解決在開發(fā)、編碼的階段,降低解決bug的成本。下面參考圖5描述根據(jù)本發(fā)明實施例的測試用例生成裝置100,包括獲取模塊110、分析模塊120和生成模塊130。其中,獲取模塊110用于獲取待測軟件的源代碼,以及獲取用戶輸入的配置文件;分析模塊120用于分析源代碼以生成基于接口的流程圖;生成模塊130用于根據(jù)基于接口的流程圖和配置文件生成接口測試用例。分析模塊120進一步包括分析子模塊121和生成子模塊122。其中,分析子模塊121用于分析源代碼以獲取Dot描述文件;生成子模塊122用于根據(jù)Dot描述文件生成基于接口的流程圖。基于接口的流程圖包括多個接口節(jié)點以及每個接口節(jié)點對應(yīng)的參數(shù)信息,其中,接口節(jié)點對應(yīng)的參數(shù)信息包括返回值結(jié)構(gòu)、參數(shù)結(jié)構(gòu)和指向?qū)?yīng)接口節(jié)點的鏈表。配置文件包括多個接口函數(shù)以及多個接口函數(shù)分別對應(yīng)的參數(shù)信息。在本發(fā)明的一個實施例中,生成模塊130根據(jù)基于接口的流程圖和配置文件生成測試用例自動生成框架,并獲取用戶指定的接口函數(shù),以及根據(jù)測試用例自動生成框架、用戶指定的接口函數(shù)以及基于接口的流程圖生成接口測試用例。下面以圖2為例對本裝置的處理流程進行詳細說明,可以理解的是,本說明僅出于示例目的,根據(jù)本發(fā)明的實施例不限于此。圖2中,首先獲取待測軟件的源代碼A,分析源代碼A,生成基于接口的流程圖B。用戶編寫測試用例自動生成配置文件,指定需要測試的接口函數(shù)C。根據(jù)基于接口的流程圖B和指定需要測試的接口函數(shù)C生成接口測試用例D。測試用例自動生成框架根據(jù)接口測試用例D和用戶輸入?yún)?shù)數(shù)據(jù)E生成測試用例執(zhí)行結(jié)果F0本裝置具體 處理步驟如下,可以理解的是,下述執(zhí)行流程僅出于示例目的,根據(jù)本發(fā)明的實施例不限于此。獲取模塊110獲取待測軟件的源代碼。分析模塊120分析源代碼以生成基于接口的流程圖。分析源代碼需要測試人員對測試庫的使用有一定了解,熟悉測試庫的調(diào)用流程。圖3為使用dot圖形描述語言生成的基于接口的流程圖,基于接口的流程圖表示待測庫調(diào)用流程。具體生成包括:分析子模塊121分析源代碼,根據(jù)函數(shù)測試庫調(diào)用流程編寫Dot描述文件。下為Dot描述文件代碼的一個示例:
權(quán)利要求
1.一種測試用例生成方法,其特征在于,包括以下步驟: 獲取待測軟件的源代碼; 分析所述源代碼以生成基于接口的流程圖;以及 獲取用戶輸入的配置文件,并根據(jù)所述基于接口的流程圖和所述配置文件生成接口測試用例。
2.如權(quán)利要求1所述的方法,其特征在于,所述分析所述源代碼以生成基于接口的流程圖進一步包括: 分析所述源代碼以獲取Dot描述文件;以及 根據(jù)所述Dot描述文件生成所述基于接口的流程圖。
3.如權(quán)利要求2所述的方法,其特征在于,所述基于接口的流程圖包括多個接口節(jié)點以及每個接口節(jié)點對應(yīng)的參數(shù)信息,其中,所述接口節(jié)點對應(yīng)的參數(shù)信息包括返回值結(jié)構(gòu)、參數(shù)結(jié)構(gòu)和指向?qū)?yīng)接口節(jié)點的鏈表。
4.如權(quán)利要求1-3任一項所述的方法,其特征在于,其中,所述配置文件包括多個接口函數(shù)以及所述多個接口函數(shù)分別對應(yīng)的參數(shù)信息。
5.如權(quán)利要求4所述的方法,其特征在于,所述根據(jù)基于接口的流程圖和所述配置文件生成接口測試用例進一步包括: 根據(jù)所述基于接口的流程圖和所述配置文件生成測試用例自動生成框架;以及獲取所述用戶指定的接口函數(shù),并根據(jù)所述測試用例自動生成框架、所述用戶指定的接口函數(shù)以及所述基于接口的流程圖生成所述接口測試用例?!?br>
6.一種測試用例生成裝置,其特征在于,包括: 獲取模塊,用于獲取待測軟件的源代碼,以及獲取用戶輸入的配置文件; 分析模塊,用于分析所述源代碼以生成基于接口的流程圖;以及 生成模塊,用于根據(jù)所述基于接口的流程圖和所述配置文件生成接口測試用例。
7.如權(quán)利要求6所述的裝置,其特征在于,所述分析模塊進一步包括: 分析子模塊,用于分析所述源代碼以獲取Dot描述文件;以及 生成子模塊,用于根據(jù)所述Dot描述文件生成所述基于接口的流程圖。
8.如權(quán)利要求7所述的裝置,其特征在于,所述基于接口的流程圖包括多個接口節(jié)點以及每個接口節(jié)點對應(yīng)的參數(shù)信息,其中,所述接口節(jié)點對應(yīng)的參數(shù)信息包括返回值結(jié)構(gòu)、參數(shù)結(jié)構(gòu)和指向?qū)?yīng)接口節(jié)點的鏈表。
9.如權(quán)利要求6所述的裝置,其特征在于,其中,所述配置文件包括多個接口函數(shù)以及所述多個接口函數(shù)分別對應(yīng)的參數(shù)信息。
10.如權(quán)利要求9所述的裝置,其特征在于,所述生成模塊根據(jù)所述基于接口的流程圖和所述配置文件生成測試用例自動生成框架,并獲取所述用戶指定的接口函數(shù),以及根據(jù)所述測試用例自動生成框架、所述用戶指定的接口函數(shù)以及所述基于接口的流程圖生成所述接口測試用例。
全文摘要
本發(fā)明提出一種測試用例生成方法,包括以下步驟獲取待測軟件的源代碼;分析源代碼以生成基于接口的流程圖;獲取用戶輸入的配置文件,并根據(jù)基于接口的流程圖和配置文件生成接口測試用例。本發(fā)明可以增加覆蓋率,能夠處理各種異常測試,并且降低產(chǎn)品的質(zhì)量風(fēng)險。本發(fā)明還公開了一種測試用例生成裝置。
文檔編號G06F11/36GK103235759SQ201310180339
公開日2013年8月7日 申請日期2013年5月15日 優(yōu)先權(quán)日2013年5月15日
發(fā)明者田魁 申請人:百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司