用于代碼的單元測試的裝置及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明公開的實施例涉及用于代碼的單元測試的裝置及方法,具體而言,涉及一種利用由編程語言制作的對象代碼的解析(parsing)信息而按特定單元分別測試對象代碼的技術(shù)。
【背景技術(shù)】
[0002]在利用編程語言(例如,Java語言)開發(fā)代碼的過程中,對代碼的各個部分進(jìn)行的測試在防止代碼所引起的系統(tǒng)運作的錯誤而保證高品質(zhì)的程序的層面上非常重要。尤其,復(fù)雜的代碼通常根據(jù)各種測試用例(test case)來運行而進(jìn)行測試,而為了提高開發(fā)的效率性,有必要減少用于這種測試的成本和時間。
[0003]例如,在現(xiàn)有技術(shù)中,開發(fā)者的目的在于在利用Java語音制作的代碼中按各個類(class)的方法(method)分別直接制作測試用例,從而實現(xiàn)所需要的方法覆蓋(methodcoverage)(即,源代碼(source code)中被測試的方法(method)的比率)。還有,為了對存在大量分支的邏輯性復(fù)雜的代碼實現(xiàn)滿意的分支覆蓋(即,源代碼中被測試的分支(branch)的比率),帶來如下的不便性:按照分支的情況數(shù)一一地制作出只改變測試所需的特定值而具有類似的內(nèi)容的測試用例。因此,需要提出一種新的單元測試技術(shù)來克服這些缺點。
【發(fā)明內(nèi)容】
[0004]本發(fā)明公開的實施例提供一種執(zhí)行代碼的單元測試的裝置及方法。
[0005]根據(jù)示例性實施例,提供一種單元測試裝置,包括:解析部,解析(parsing)對象代碼而生成解析信息;測試用例生成部,基于所述解析信息來生成所述對象代碼的各個測試單元的基本測試用例(base test case);代碼生成部,基于所述解析信息來生成所述對象代碼的外部函數(shù)調(diào)用部分被置換為存根(stub)的被生成源;測試執(zhí)行部,把針對所述基本測試用例而設(shè)定的測試數(shù)據(jù)應(yīng)用于所述被生成源而執(zhí)行各個測試單元的測試。
[0006]其中,所述對象代碼可由Java語音制作。
[0007]其中,所述單元測試裝置還可以包括測試用例編輯部,提供與所述基本測試用例相關(guān)聯(lián)的用戶接口,并根據(jù)所述用戶接口中執(zhí)行的用戶輸入而設(shè)定所述測試數(shù)據(jù)。
[0008]其中,所述測試用例編輯部還可以利用所述解析信息而把所述測試數(shù)據(jù)的類型表現(xiàn)于所述用戶接口。
[0009]其中,所述測試數(shù)據(jù)可包括所述測試單元內(nèi)的變量的值、外部函數(shù)的返回值、分支的標(biāo)簽值中的至少一個。
[0010]根據(jù)另一示例性實施例,提供一種單元測試方法,包括如下步驟:通過解析對象代碼而生成解析信息;基于所述解析信息來生成所述對象代碼的各個測試單元的基本測試用例;基于所述解析信息來生成所述對象代碼的外部函數(shù)調(diào)用部分被置換為存根的被生成源;把針對所述基本測試用例而設(shè)定的測試數(shù)據(jù)應(yīng)用于所述被生成源而執(zhí)行各個測試單元的測試。
[0011]其中,所述對象代碼可由Java語音制作。
[0012]其中,所述單元測試方法還可以包括如下步驟:提供與所述基本測試用例相關(guān)聯(lián)的用戶接口 ;根據(jù)所述用戶接口中執(zhí)行的用戶輸入來設(shè)定所述測試數(shù)據(jù)。
[0013]其中,所述單元測試方法還可以包括如下步驟:利用所述解析信息來把所述測試數(shù)據(jù)的類型表現(xiàn)于所述用戶接口。
[0014]其中,所述測試數(shù)據(jù)可包括所述測試單元內(nèi)的變量值、外部函數(shù)的返回值、分支的標(biāo)簽值中的至少一個。
[0015]根據(jù)又一示例性實施例,提供一種存儲在存儲介質(zhì)中的計算機(jī)程序,其與硬件結(jié)合而用于執(zhí)行前述的單元測試方法。
[0016]根據(jù)預(yù)定的實施例,可提供一種單元測試框架,其利用由Java語言等編程語言制作的對象代碼的解析信息而使對象代碼的特定單元(例如,Java類的方法)的測試變得容易O
[0017]根據(jù)預(yù)定的實施例,開發(fā)者沒有必要為了對象代碼的單元測試而另行制作測試用例,并可以按對象代碼的測試單元分別自動制作測試用例,并可以通過親用戶的方式來設(shè)定單元測試所需的值。
[0018]根據(jù)預(yù)定的實施例,可以容易地實現(xiàn)所期望的方法覆蓋以及分支覆蓋。
【附圖說明】
[0019]圖1是表示根據(jù)示例性的實施例而利用由編程語言制作的代碼的解析信息而執(zhí)行代碼的單元測試的系統(tǒng)的圖。
[0020]圖2是表示根據(jù)示例性的實施例而設(shè)定測試數(shù)據(jù)時適用的用戶接口的圖。
[0021]圖3是用于說明根據(jù)示例性的實施例而生成單元測試項目的情形的圖。
[0022]圖4是表示根據(jù)示例性的實施例而執(zhí)行代碼的單元測試的過程的圖。
[0023]符號說明
[0024]100:單元測試系統(tǒng)101:測試對象代碼
[0025]102:基本測試用例104:被生成源
[0026]105:報告110:解析部
[0027]120:測試用例生成部130:測試用例編輯部
[0028]140:代碼生成部150:測試執(zhí)行部
【具體實施方式】
[0029]以下,將參照附圖而對根據(jù)本發(fā)明的具體的實施形態(tài)進(jìn)行說明。以下的詳細(xì)說明是為了幫助對本說明書上記載的方法、裝置和/或系統(tǒng)的全面的理解而提供的。然而這僅僅是示例性的,本發(fā)明并不局限于此。
[0030]在對本發(fā)明的實施例進(jìn)行說明時,當(dāng)判斷為對與本發(fā)明相關(guān)的公知技術(shù)進(jìn)行的具體的說明給本發(fā)明的主旨帶來不必要的混亂時,將省略對其的詳細(xì)說明。還有,下述的術(shù)語是考慮到本發(fā)明的功能而做出定義的術(shù)語,其可以根據(jù)使用者、運用者的意圖或者慣例等而改變。因此,其需要以覆蓋本說明書的全部內(nèi)容為基礎(chǔ)而做出定義。在詳細(xì)的說明中使用到的術(shù)語只是用于描述本發(fā)明的實施例的,而絕對不能理解為限定性的。在沒有被明確地使用為其他用途時,單數(shù)形態(tài)的表述方式包括復(fù)數(shù)形態(tài)的意思。本申請中使用的術(shù)語只是用于說明特定的實施例,而不是要限制權(quán)利范圍。在本申請中,“包括”或者“具有”等表述形式用于指某種特性、數(shù)字、步驟、操作、要素和這些的一部分或者組合的存在性,而不能被解釋為其排除了所記載的內(nèi)容以外的一個或一個以上的其他特性、數(shù)字、步驟、操作、要素和這些的一部分或者組合的存在性或可附加性。
[0031]圖1表示根據(jù)示例性的實施例而利用由編程語言制作的代碼的解析信息來執(zhí)行該代碼的單元測試的系統(tǒng)。
[0032]如圖1所示,示例性的單元測試系統(tǒng)100包括:解析部110、測試用例生成部120、測試用例編輯部130、代碼生成部140以及測試執(zhí)行部150。單元測試系統(tǒng)100的上述的各個模塊分別可以實現(xiàn)為硬件。例如,單元測試系統(tǒng)100可以在計算裝置的內(nèi)部得到實現(xiàn),或者包含于計算裝置的內(nèi)部。這種計算裝置可以包括一個以上的處理器以及可通過處理器而訪問的存儲器等計算機(jī)可讀存儲介質(zhì)。計算機(jī)可讀存儲介質(zhì)既可以配置于處理器的內(nèi)部或外部,也可以通過公知的多樣的單元而與處理器連接。計算機(jī)可讀存儲介質(zhì)中可以存儲用于控制計算裝置的計算機(jī)可運行命令語。處理器可以執(zhí)行存儲于計算機(jī)可讀存儲介質(zhì)中的命令語。這種命令語在通過處理器而被運行的情況下,可以使處理器執(zhí)行根據(jù)示例性的實施例的操作。另外,計算裝置還可以包括用于支持該計算裝置與至少一個外部裝置之間的輸入/輸出和/或通信的接口裝置,并可以通過接口裝置而與外部裝置連接。此外,計算裝置還可以包括其他多樣的組件(例如,輸入裝置和/或輸出裝置),接口裝置可以為這些組件提供接口。輸入裝置的例包括:指點裝置,如鼠標(biāo);鍵盤;觸摸感應(yīng)輸入裝置;語音輸入裝置,如麥克風(fēng)。輸出裝置的例包括:顯示裝置;打印機(jī);音響機(jī)和/或網(wǎng)卡。據(jù)此,上述的計算裝置可以實現(xiàn):單元測試系統(tǒng)100的解析部110、測試用例生成部120、測試用例編輯部130、代碼生成部140以及測試執(zhí)行部150。
[0033]接下來參照圖1而對單元測試系統(tǒng)100的各個模塊進(jìn)行更為詳細(xì)的說明。為了說明的方便性,以下將會述及如下操作:這種操作旨在使單元測試系統(tǒng)100執(zhí)行由Java語音制作的源代碼(以下,也會稱之為“測試對象代碼”)101的各個測試單元(例如,類的方法)的測試。然而,這些操作畢竟是示例性的。
[0034]如圖1所示的解析部110構(gòu)成為能夠解析作為Java源的測試對象代碼101。解析部110可以通過解析分析而從測試對象代碼101中收集以下項目中的至少一個而生成解析
?目息O
[0035]-語句(statement)(例如,if符、while 符、for 門、do 符等)
[0036]-表述符(express1n)(例如,前綴(prefix)/ 中綴(infix) / 后綴(postfix)表述符、代入符(assignment express1n)等)
[0037]-布爾值(boolean)、數(shù)值(numeric)等數(shù)據(jù)類型;字符(literal)值以及空(null)值
[0038]-修飾符(modifier)(例如,public、static、final等)
[0039]-通用(generic)信息
[0040]例如,解析部110可以構(gòu)成為利用Java開發(fā)工具包(Java Development Kit: JDK)以及Eclipse的解析器(parser)來分析對象代碼101。
[0041]測試用例生成部120構(gòu)成為基于所生成的解析信息來生成各個測試單元的基本測試用例?;緶y試用例102可以把測試對象代碼101的構(gòu)成要素表示為預(yù)定的結(jié)構(gòu)(例如,樹狀結(jié)構(gòu))。