專利名稱:檢查單元測試質(zhì)量的方法和系統(tǒng)的制作方法
技術領域:
本申請涉及計算機領域,特別涉及一種檢查單元測試質(zhì)量的方法和系統(tǒng)。
背景技術:
單元測試是開發(fā)者編寫的一小段代碼,用于檢驗被測代碼的一個很小的、很明確的功能是否正確。通常而言,一個單元測試是用于判斷某個特定條件(或者場景)下某個特定函數(shù)的行為。例如,可能需要把一個很大的值放入一個有序列表(list)中去,然后確認該值出現(xiàn)在list的尾部。單元測試是在軟件開發(fā)過程中要進行的最低級別的測試活動,在單元測試活動中,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。單元測試不僅僅是作為無錯編碼的一種輔助手段在一次性的開發(fā)過程中使用,單元測試必須是可重復的,無論是在軟件修改,或是移植到新的運行環(huán)境的過程中。目前,單元測試的代碼覆蓋率雖然提高了,但由于單元測試的質(zhì)量不能得到很好的保證,影響了單元測試的有效性。因此,急需一種有效的方案來檢查單元測試的質(zhì)量,以提升單元測試的有效性。
發(fā)明內(nèi)容
為了提升單元測試的有效性,本申請?zhí)峁┝艘环N檢查單元測試質(zhì)量的方法和系統(tǒng),技術方案如下:一種單元測試質(zhì)量的檢查方法,包括:利用面向切面編程方式,根據(jù)預設的用于描述測試元的元語獲取所述測試元對應的測試元數(shù)據(jù);獲取單元測試用例檢查規(guī)則;根據(jù)所述測試元數(shù)據(jù)和所述單元測試用例檢查規(guī)則檢查單元測試質(zhì)量;輸出單元測試的質(zhì)量檢查結果。一種單元測試質(zhì)量的檢查系統(tǒng),包括:測試元數(shù)據(jù)獲取模塊,用于利用面向切面編程方式,根據(jù)預設的用于描述測試元的元語獲取所述測試元對應的測試元數(shù)據(jù);檢查規(guī)則獲取模塊,用于獲取單元測試用例檢查規(guī)則;規(guī)則檢查模塊,用于根據(jù)所述測試元數(shù)據(jù)和所述單元測試用例檢查規(guī)則檢查單元測試質(zhì)量;輸出模塊,用于輸出單元測試的質(zhì)量檢查結果。本申請的技術方案通過預設描述測試元的元語和單元測試用例檢查規(guī)則,然后根據(jù)元語獲取測試元對應的測試元數(shù)據(jù),并利用測試元數(shù)據(jù)和單元測試用例檢查規(guī)則,能夠全面檢查單元測試的質(zhì)量,提高單元測試的有效性。通過以下參照附圖對本申請實施例的說明,本申請的上述以及其它目的、特征和優(yōu)點將更加明顯。
下面將參照所附附圖來描述本申請的實施例,其中:圖1是本申請實施例提供的檢查單元測試質(zhì)量的方法的流程圖;圖2是本申請實施例提供的檢查單元測試質(zhì)量的系統(tǒng)的結構圖;圖3是本申請實施例提供的檢查單元測試質(zhì)量的方法的詳細流程圖。
具體實施例方式下面結合附圖詳細描述本申請的具體實施例。應當注意,這里描述的實施例只用于舉例說明,并不用于限制本申請。影響單元測試的質(zhì)量的因素包括但不限于以下幾種:第一、單元測試代碼風格不規(guī)范,缺乏統(tǒng)一性。具體的表現(xiàn)形式包括但不限于以下幾種:單元測試缺少斷言;單元測試用例未包含預期結果;單元測試僅覆蓋正常情況,對異常情況未考慮;測試方法的命名不統(tǒng)一;一些dao層的刪除數(shù)據(jù)方法沒有進行單元測試;單元測試數(shù)據(jù)繁多,有些方法參數(shù)/斷言很多,所以會省略一些字段,可能會放過一些漏洞(bug)。第二、單元測試用例設計不規(guī)范,系統(tǒng)測試功能覆蓋面不全。具體的表現(xiàn)形式包括但不限于以下幾種:不同的業(yè)務場景,靠人工修改參數(shù)來進行單元測試,而不是區(qū)分不同的測試用例來實現(xiàn);dao層測試用例只有應用程序編程接口(Application ProgrammingInterface, API)調(diào)用;集成測試用例只包含了業(yè)務場景的簡單串聯(lián),沒有走到所有的關鍵路徑;單元測試沒有按等價類劃分測試用例,一般一個方法只會對應一個測試用例,例如空值(null)、邊界值、極限值并沒有被覆蓋,會漏掉一些異常漏洞(bug)。第三、單元測試依賴外部環(huán)境變量,外部環(huán)境的不穩(wěn)定會導致單元測試的不穩(wěn)定性。具體的表現(xiàn)形式包括但不限于以下幾種:服務(Service)單元測試時需要屏蔽所有外部環(huán)境因素;私有方法應該獨立測試;避免單元測試之間的依賴關系;有的類中變量是以注入的方式賦值,該賦值在方法中需要使用到,需要對這些變量也做一下覆蓋測試,看賦值是否正確。為了解決現(xiàn)有技術中存在的問題,本申請通過預設用于描述測試元的元語和單元測試用例檢查規(guī)則,然后根據(jù)元語獲取測試元對應的測試元數(shù)據(jù),并利用測試元數(shù)據(jù)和單元測試用例檢查規(guī)則能夠全面檢查單元測試的質(zhì)量,提高單元測試的有效性。下面結合具體的實施例對本申請進行詳細的描述。實施例一本申請實施例提供了一種檢查單元測試質(zhì)量的方法,如圖1所示,包括:步驟101,利用面向切面編程方式,根據(jù)預設的用于描述測試元的元語獲取該測試元對應的測試元數(shù)據(jù);進一步地,該步驟包括:根據(jù)目標切面維度從單元測試集和/或目標應用程序獲取目標切面信息;將該目標切面信息細分為最小單位的測試信息,該最小單位的測試信息為該測試元,在內(nèi)存中存儲該測試元及其對應的測試元數(shù)據(jù);獲取預設的元語,利用該預設的元語、該測試元和該測試元數(shù)據(jù)的關聯(lián)關系從內(nèi)存中獲取該測試元對應的測試元數(shù)據(jù)。優(yōu)選地,為了提高系統(tǒng)運算速度,降低運算成本和減少錯誤發(fā)生,可以在獲取元語后,根據(jù)預設的元語過濾條件,從獲取的元語中過濾冗余的元語。在本實施例中,目標切面信息可以包括以下信息中的一種或其組合:單元測試類的方法、目標應用程序任意類的方法和單元測試斷言方法。步驟102,獲取單元測試用例檢查規(guī)則。優(yōu)選地,為了提高系統(tǒng)運算速度,降低運算成本和減少錯誤發(fā)生,可以在獲取單元測試用例檢查規(guī)則后,根據(jù)預設的檢查規(guī)則過濾條件,從該獲取的單元測試用例檢查規(guī)則中過濾冗余的單元測試用例檢查規(guī)則。步驟103,根據(jù)該測試元數(shù)據(jù)和該單元測試用例檢查規(guī)則檢查單元測試質(zhì)量。進一步地,該步驟包括:將該測試元數(shù)據(jù)替代該單元測試用例檢查規(guī)則中的元語,以檢查該測試元數(shù)據(jù)是否符合該單元測試用例檢查規(guī)則,從而得到單元測試的質(zhì)量檢查結果。步驟104,輸出單元測試的質(zhì)量檢查結果。優(yōu)選地,為了便于用戶以后的對比或查閱,可以在輸出單元測試的質(zhì)量檢查結果之后或之前,存儲質(zhì)量檢查結果。進一步地,為了便于直觀形象地分析質(zhì)量檢查結果,可以對輸出的質(zhì)量檢查結果或存儲的質(zhì)量檢查結果進行報表分析。本申請實施例通過預設描述測試元的元語,然后根據(jù)元語獲取測試元對應的測試元數(shù)據(jù),并利用測試元數(shù)據(jù)和單元測試用例檢查規(guī)則,能夠全面檢查單元測試的質(zhì)量,提高單元測試的有效性。實施例二如圖2所示為檢查單元測試質(zhì)量的方法的應用架構圖,該架構圖使用的是編程語言為jdkl.6及以上,開發(fā)框架為maven3,擴展包依賴ASPECTJ1.5以上,但該使用的編程語言,開發(fā)框架和擴展包等只是為了舉例需要,本申請的保護范圍并不限于此。在圖2中,該架構包括:ASPECTJ框架、目標應用程序、單元測試集和檢查單元測試質(zhì)量的系統(tǒng)。ASPECTJ框架作為目標應用程序的運行代理,同時起著作為檢查單元測試質(zhì)量的系統(tǒng)的支撐工具的作用。需要說明的是,由于采用的編程語言不同,起支撐工具作用的框架可以根據(jù)編程語言的不同而進行相應的選擇,并不限于ASPECTJ框架。檢查單元測試質(zhì)量的系統(tǒng)是本實施例的核心,其使用面向切面編程(AspectOriented Programming,A0P)方式織入到目標應用程序和單元測試集來運行。該系統(tǒng)可以Jar方式集成到目標應用程序中,當單元測試運行時,該系統(tǒng)自動對單元測試用例進行檢查。具體地,該系統(tǒng)包括:測試元數(shù)據(jù)獲取模塊、設置模塊和檢查模塊。其中,測試元數(shù)據(jù)獲取模塊包括切面信息獲取單元和測試元數(shù)據(jù)存儲單元。設置模塊包括:元語設置單元、檢查規(guī)則設置單元、元語過濾單元和檢查規(guī)則解析單元。檢查模塊包括:測試元數(shù)據(jù)提取單元、檢查規(guī)則獲取單元、檢查規(guī)則過濾單元、規(guī)則檢查單元、質(zhì)量結果存儲單元、輸出單元和報表分析單元。圖3所示為本申請實施例的單元測試質(zhì)量的檢查方法的詳細流程圖,參考圖2和圖3,并結合具體的示例對本申請進行詳細的描述,具體如下:在步驟301中,切面信息獲取單元獲取目標切面信息。具體地,在單元測試運行中,切面信息獲取單元從不同的目標切面維度織入,獲取到目標切面維度對應的目標切面信息,并將目標切面信息細分成最小單位的測試信息,本實施例將該最小單位的測試信息定義為測試元,該測試元可以是包.類.方法名、參數(shù)表、數(shù)據(jù)或斷言等,但本實施例并未將測試元限制在上述示例。在本實施例中,切面信息獲取單元攔截到單元測試運行的測試方法,進而攔截到測試方法所調(diào)用的目標應用程序方法以及攔截到單元測試斷言方法。具體地,該目標切面信息包括:單元測試類的方法、目標應用程序任意類的任意方法和單元測試斷言方法。本實施例提供的目標切面信息的示例如下:
*切面:切入目標應用程序任意類的任意方法 */
@Pointcut("execution(* com.alibaba.b2b.asura.aop.App.app(..))") public void targetClassMethod() {
}
*切面:切入單元測試類的方法 */
@Pointcut("execution(* com.alibaba.b2b.asura.*.test*(..))") public void testClassMethodQ {
}
*切面:切入斷言的方法 */
@Pointcut("execution(void com.alibaba.b2b.asura.Want*(..))") public void testCaseAssertsQ {
}需要說明的是,上述三類目標切面信息只是本實施例的一個示例,本實施例的保護范圍也可以是上述三類目標切面信息之一或者其中任意兩種目標切面信息的組合。在以后的應用中,用戶還可以根據(jù)需要添加其他目標切面信息,在此不再贅述。在步驟302中,測試元數(shù)據(jù)存儲單元從目標切面信息中獲取測試元,并將測試元及其對應的測試元數(shù)據(jù)寫入到內(nèi)存池中。其中,獲取的測試元包括提取類名、方法名、參數(shù)表、數(shù)據(jù)、斷言等。本實施例提供的測試元存儲結構的示例如下:j -TestMeta-targetClass、targetMethod、testCaseClass、...
List-1-TestMeta-targetClass>targetMethod、testCaseClass、...
1-TestMeta-targetClass>targetMethod、testCaseClass、...
其中,“targetClass,,、“targetMethod,,和“testCaseClass,,即為兀語,分別描述目標程序類,目標方法和測試用例類等測試元,而測試元數(shù)據(jù)存儲在元語對應的內(nèi)存中。在步驟303中,元語設置單元根據(jù)用戶的指令按照預先的元語設置規(guī)則設置用來描述測試元語,并將設置的元語存儲在內(nèi)存中。例如,用元語“assertions”描述的測試元為“斷言”。其中,設置的元語存儲在內(nèi)存中。測試元是以元語為關鍵字存儲在內(nèi)存池中的,因此可以根據(jù)元語來查找測試元對應的測試元數(shù)據(jù)。通過將測試元對應的測試元數(shù)據(jù)代入到單元測試用例檢查規(guī)則中,替代其中的元語,可以達到執(zhí)行單元測試用例檢查規(guī)則的目的。需要說明的是,元語可以是可擴展標記語言(Extensible Markup Language,XML)配置文件,也可以是數(shù)據(jù)庫表,本實施例對此不作限制。元語描述測試元是在單元測試用例檢查規(guī)則中進行定義的,如下所示為一個單元測試用例檢查規(guī)則:
權利要求
1.一種單元測試質(zhì)量的檢查方法,其特征在于,包括: 利用面向切面編程方式,根據(jù)預設的用于描述測試元的元語獲取所述測試元對應的測試元數(shù)據(jù); 獲取單元測試用例檢查規(guī)則; 根據(jù)所述測試元數(shù)據(jù)和所述單元測試用例檢查規(guī)則檢查單元測試質(zhì)量; 輸出單元測試的質(zhì)量檢查結果。
2.如權利要求1所述的方法,其特征在于,利用面向切面編程方式,根據(jù)預設的用于描述測試元的元語獲取所述測試元對應的測試元數(shù)據(jù),包括: 根據(jù)目標切面維度從單元測試集和/或目標應用程序獲取目標切面信息; 將所述目標切面信息細分為最小單位的測試信息,所述最小單位的測試信息為所述測試元,在內(nèi)存中存儲所述測試元及其對應的測試元數(shù)據(jù); 獲取預設的元語,利用所述預設的元語、所述測試元和所述測試元數(shù)據(jù)的關聯(lián)關系從內(nèi)存中獲取所述測試元對應的測試元數(shù)據(jù)。
3.如權利要求2所述的方法,其特征在于,所述目標切面信息包括以下信息任意一種或其組合: 單元測試類的方法、目標應用程序任意類的方法和單元測試斷言方法。
4.如權利要求2所 述的方法,其特征在于,所述獲取預設的元語之后,包括: 根據(jù)預設的元語過濾條件,從所述獲取的元語中過濾冗余的元語。
5.如權利要求1所述的方法,其特征在于,所述根據(jù)所述測試元數(shù)據(jù)和所述單元測試用例檢查規(guī)則檢查單元測試質(zhì)量,包括: 將所述測試元數(shù)據(jù)替代所述單元測試用例檢查規(guī)則中的元語,以檢查所述測試元數(shù)據(jù)是否符合所述單元測試用例檢查規(guī)則,從而得到單元測試的質(zhì)量檢查結果。
6.如權利要求1至5任意一項所述的方法,其特征在于,獲取所述單元測試用例檢查規(guī)則之前,還包括: 根據(jù)用戶指令設置所述單元測試用例檢查規(guī)則; 將所述單元測試用例檢查規(guī)則解析成對象。
7.如權利要求1至5任意一項所述的方法,其特征在于,獲取所述單元測試用例檢查規(guī)則之后,包括: 根據(jù)預設的檢查規(guī)則過濾條件,從所述獲取的單元測試用例檢查規(guī)則中過濾冗余的單元測試用例檢查規(guī)則。
8.如權利要求1至5任意一項所述的方法,其特征在于,所述輸出單元測試的質(zhì)量檢查結果的步驟之后,包括: 存儲所述單元測試的質(zhì)量檢查結果。
9.如權利要求1至5任意一項所述的方法,其特征在于,所述輸出單元測試的質(zhì)量檢查結果之后,還包括:對所述單元測試的質(zhì)量檢查結果進行報表分析,生成報表分析結果。
10.一種單元測試質(zhì)量的檢查系統(tǒng),其特征在于,包括: 測試元數(shù)據(jù)獲取模塊,用于利用面向切面編程方式,根據(jù)預設的用于描述測試元的元語獲取所述測試元對應的測試元數(shù)據(jù); 檢查規(guī)則獲取模塊,用于獲取單元測試用例檢查規(guī)則;規(guī)則檢查模塊,用于根據(jù)所述測試元數(shù)據(jù)和所述單元測試用例檢查規(guī)則檢查單元測試質(zhì)量; 輸出模塊,用于輸出單元測試的質(zhì)量檢查結果。
11.如權利要求10所述的系統(tǒng),其特征在于,所述測試元數(shù)據(jù)獲取模塊,包括: 切面信息獲取單元,用于根據(jù)目標切面維度從所述單元測試集和/或目標應用程序獲取目標切面信息; 測試元數(shù)據(jù)存儲單元,用于將所述目標切面信息細分為最小單位的測試信息,所述最小單位的測試信息為所述測試元,并存儲所述測試元及其對應的測試元數(shù)據(jù); 測試元數(shù)據(jù)提取單元,用于獲取預設的元語,利用所述預設的元語、所述測試元和所述測試元數(shù)據(jù)的關聯(lián)關系提取所述測試元對應的測試元數(shù)據(jù)。
12.如權利要求11所述的系統(tǒng),其特征在于,所述目標切面信息包括以下信息任意一種或其組合: 單元測試類的方法、目標應用程序任意類的方法和單元測試斷言方法。
13.如權利要求11所述的系統(tǒng),其特征在于,還包括:元語過濾模塊,用于根據(jù)預設元語過濾條件,從所述獲取的預設的元語中過濾冗余的元語。
14.如權利要求10所述的系統(tǒng),其特征在于,所述規(guī)則檢查模塊,具體用于將所述測試元數(shù)據(jù)替代所述單元測試用例檢查規(guī)則中的元語,檢查所述測試元數(shù)據(jù)是否符合所述單元測試用例檢查規(guī)則,從而得到單元測試的質(zhì)量檢查結果。
15.如權利要求11至14任意一項所述的系統(tǒng),其特征在于,還包括: 檢查規(guī)則設置模塊,用于根據(jù)用戶指令設置所述單元測試用例檢查規(guī)則; 檢查規(guī)則解析模塊,用于將所述單元測試用例檢查規(guī)則解析成對象。
16.如權利要求11至14任意一項所述的系統(tǒng),其特征在于,還包括:檢查規(guī)則過濾模塊,用于根據(jù)預設的檢查規(guī)則過濾條件,從所述獲取的單元測試用例檢查規(guī)則中過濾冗余的單元測試用例檢查規(guī)則。
17.如權利要求11至14任意一項所述的系統(tǒng),其特征在于,還包括:存儲模塊,用于存儲所述單元測試的質(zhì)量檢查結果。
18.如權利要求11至14任意一項所述的系統(tǒng),其特征在于,報表分析模塊,用于對所述單元測試的質(zhì)量檢查結果進行報表分析,生成報表分析報告。
全文摘要
本申請公開了一種檢查單元測試質(zhì)量的方法和系統(tǒng),屬于計算機領域。該方法包括利用面向切面編程方式,根據(jù)預設的用于描述測試元的元語獲取所述測試元對應的測試元數(shù)據(jù);獲取單元測試用例檢查規(guī)則;根據(jù)所述測試元數(shù)據(jù)和所述單元測試用例檢查規(guī)則檢查單元測試質(zhì)量;輸出單元測試的質(zhì)量檢查結果。該系統(tǒng)包括測試元獲取模塊、測試元數(shù)據(jù)獲取模塊、檢查規(guī)則獲取模塊、規(guī)則檢查模塊和輸出模塊。本申請的技術方案可以提高單元測試的有效性。
文檔編號G06F11/36GK103164335SQ20111042780
公開日2013年6月19日 申請日期2011年12月19日 優(yōu)先權日2011年12月19日
發(fā)明者郭帥, 毛錫凱 申請人:阿里巴巴集團控股有限公司