專利名稱:測試數(shù)據(jù)篩選方法及裝置、測試數(shù)據(jù)構(gòu)造方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件測試技術(shù)領(lǐng)域,特別地涉及一種測試數(shù)據(jù)篩選方法及裝置、測試數(shù)據(jù)構(gòu)造方法及裝置。
背景技術(shù):
隨著軟件功能的日益強大,軟件測試也越來越重要,要求也越來越高。搜索引擎后端測試需要在較短的時間內(nèi)保證較高的運行穩(wěn)定性,例如需要千萬量級的數(shù)據(jù)下維持穩(wěn)定的運行。在該需求的驅(qū)動下,對搜索引擎后端采用大數(shù)據(jù)量測試是保證其運行穩(wěn)定性的常用方式。然而,大數(shù)據(jù)量測試就需要較長的測試時間,而在實際應(yīng)用中由于產(chǎn)品的研發(fā)周期限制等原因,限制了測試時間。因此由于測試時間的制約,往往需要在測試周期和數(shù)據(jù)量之間做一個平衡。此外,搜索引擎后端功能和策略復(fù)雜度較高,為特定功能或策略手工甄選測試數(shù)據(jù)困難較大,同樣也給測試人員帶來了很大的不便。因此,如何在保證數(shù)據(jù)量要求的基礎(chǔ)上,縮短測試時間,提高測試精度成為了亟待解決的問題。
發(fā)明內(nèi)容
本發(fā)明旨在至少解決現(xiàn)有技術(shù)中存在的技術(shù)問題之一,特別是解決目前測試時間長,數(shù)據(jù)量不能滿足要求的缺陷。本發(fā)明實施例第一方面提出了一種測試數(shù)據(jù)篩選方法,包括以下步驟輸入測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù);根據(jù)所述多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,并獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率;以及根據(jù)所述每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,并將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。本發(fā)明實施例第二方面還提出了一種測試數(shù)據(jù)篩選裝置,包括接收模塊,用于接收輸入的測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù);測試模塊,用于根據(jù)所述多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試;代碼覆蓋率獲取模塊,用于獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率;以及篩選模塊,用于根據(jù)所述每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,并將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。本發(fā)明實施例通過代碼覆蓋率的變化情況,判斷對應(yīng)的單條輸入數(shù)據(jù)對代碼覆蓋率是否構(gòu)成了貢獻,如果沒有貢獻則可將該單條輸入數(shù)據(jù)篩除,從而可以在保證代碼覆蓋率不變的前提下可以有效地將原來千萬量級的輸入數(shù)據(jù)(或稱為回歸數(shù)據(jù))壓縮至百量級,因此可以大幅度地提高測試速度,及縮短測試周期。另外,在本申請的實施例中,上述方法完全自動運行,無需人工干預(yù),因此可以節(jié)約人力成本。本發(fā)明實施例第三方面提出了一種測試數(shù)據(jù)構(gòu)造方法,包括以下步驟輸入測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù);根據(jù)所述多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,并獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率;根據(jù)所述每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,并將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中;根據(jù)所述優(yōu)選代碼覆蓋率數(shù)據(jù)集合中的每個單條輸入數(shù)據(jù)再次對所述被測系統(tǒng)進行測試,并獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率數(shù)據(jù);根據(jù)所述代碼覆蓋率數(shù)據(jù)生成分支條件,并建立單條輸入數(shù)據(jù)與分支條件之間的對應(yīng)關(guān)系;以及根據(jù)所述對應(yīng)關(guān)系構(gòu)造新的測試數(shù)據(jù)。本發(fā)明實施例第四方面還提出了一種測試數(shù)據(jù)構(gòu)造裝置,包括接收模塊,用于接收輸入的測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù);代碼覆蓋率獲取模塊,用于獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率;篩選模塊,用于根據(jù)所述每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,并將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中;測試模塊,用于根據(jù)所述多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,以及根據(jù)所述優(yōu)選代碼覆蓋率數(shù)據(jù)集合中的每個單條輸入數(shù)據(jù)再次對所述被測系統(tǒng)進行測試;建立模塊,用于根據(jù)所述代碼覆蓋率數(shù)據(jù)生成分支條件,并建立單條輸入數(shù)據(jù)與分支條件之間的對應(yīng)關(guān)系;以及構(gòu)造模塊,用于根據(jù)所述對應(yīng)關(guān)系構(gòu)造新的測試數(shù)據(jù)。通過本發(fā)明實施例建立的單條輸入數(shù)據(jù)與分支條件之間的對應(yīng)關(guān)系,這樣測試者就可以根據(jù)該對應(yīng)關(guān)系獲知被測系統(tǒng)中具體哪個源文件、哪個函數(shù)或者哪行代碼被哪個或哪些單條輸入數(shù)據(jù)所覆蓋,從而可以精確地提取滿足對應(yīng)代碼行覆蓋要求的單條輸入數(shù)據(jù),進一步地輔助進行下一步新功能測試數(shù)據(jù)構(gòu)造。因此本發(fā)明實施例提高了新功能數(shù)據(jù)構(gòu)造的針對性,降低了數(shù)據(jù)構(gòu)造的成本。本發(fā)明的附加方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
本發(fā)明的上述和/或附加的方面和優(yōu)點從結(jié)合下面附圖對實施例的描述中將變得明顯和容易理解,其中圖1為本發(fā)明實施例測試數(shù)據(jù)篩選方法流程圖;圖2為本發(fā)明實施例根據(jù)代碼覆蓋率對測試數(shù)據(jù)進行篩選的流程圖;圖3為本發(fā)明實施例的測試數(shù)據(jù)篩選裝置結(jié)構(gòu)圖;圖4為本發(fā)明實施例測試數(shù)據(jù)構(gòu)造方法流程圖;圖5為本發(fā)明實施例提取的分支條件信息示意圖;圖6為本發(fā)明實施例用于記錄覆蓋情況的數(shù)據(jù)結(jié)構(gòu)具體定義格式示意圖;圖7為本發(fā)明實施例Web前端顯示的代碼示意圖;以及圖8為本發(fā)明實施例測試數(shù)據(jù)構(gòu)造裝置結(jié)構(gòu)圖。
具體實施例方式下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。
5
參照下面的描述和附圖,將清楚本發(fā)明的實施例的這些和其他方面。在這些描述和附圖中,具體公開了本發(fā)明的實施例中的一些特定實施方式,來表示實施本發(fā)明的實施例的原理的一些方式,但是應(yīng)當理解,本發(fā)明的實施例的范圍不受此限制。相反,本發(fā)明的實施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。如上所述,目前為了保證一定的測試代碼覆蓋率往往需要大量的測試數(shù)據(jù),從而導致測試時間過長,無法滿足產(chǎn)品的設(shè)計周期。然而在這些測試數(shù)據(jù)之中,一些測試數(shù)據(jù)起到的作用是一樣的,因此如果能將這些作用相同的測試數(shù)據(jù)進行縮減,即將重復(fù)的測試數(shù)據(jù)刪除,則就能夠大幅度地減小所需要的測試數(shù)據(jù)。在本發(fā)明的實施例中,可通過代碼覆蓋率來檢測哪些測試數(shù)據(jù)是重復(fù)的。例如,如果兩個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率相同,則說明這兩個單條輸入數(shù)據(jù)起到的作用是相同的,因此在本發(fā)明的實施例中,可將其中的一個刪除。通過這樣的對比,可以極大地減小所需要的測試數(shù)據(jù)。如圖1所示,為本發(fā)明實施例測試數(shù)據(jù)篩選方法流程圖。該方法包括以下步驟步驟S101,輸入測試數(shù)據(jù),其中,測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù)。單條輸入數(shù)據(jù)的數(shù)量根據(jù)被測系統(tǒng)的規(guī)模進行設(shè)置。在本發(fā)明的實施例中,被測系統(tǒng)可包括多個子模塊, 其中,每個子模塊都具有對應(yīng)的多個單條輸入數(shù)據(jù)。步驟S102,根據(jù)多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,并獲得每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率。在本發(fā)明的實施例中,可通過BullseyeCoverage軟件中的 cov_eventCount庫函數(shù)生成對應(yīng)的代碼覆蓋率數(shù)據(jù)。當然在本發(fā)明的實施例中,還可使用其他軟件獲得代碼覆蓋率數(shù)據(jù)。在本發(fā)明的實施例中,如針對多線程軟件,則在程序中找到主線程流程代碼中調(diào)用的核心線程函數(shù)(如pthreacLcreate第三個參數(shù)即為線程運行函數(shù)指針,找到該函數(shù)的實現(xiàn)即可),前后調(diào)用cov_eventcount函數(shù),并比較兩次代碼覆蓋率異同即可。步驟S103,根據(jù)每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對測試數(shù)據(jù)進行篩選,并生成優(yōu)選代碼覆蓋率數(shù)據(jù)集合,以及將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。具體地,可對代碼覆蓋率相同的多個單條輸入數(shù)據(jù)進行篩選,篩除一部分的單條輸入數(shù)據(jù)。由于保留的單條輸入數(shù)據(jù)依然能夠保持一定的代碼覆蓋率,因此篩除部分的單條輸入數(shù)據(jù)也不會對代碼覆蓋率構(gòu)成影響,而可以大幅度地降低測試數(shù)據(jù)的數(shù)量。在本發(fā)明的實施例中,可首先判斷每個單條數(shù)據(jù)中的一個對應(yīng)的代碼覆蓋率是否與其他單條數(shù)據(jù)對應(yīng)的代碼覆蓋率相同。如不相同,則將對應(yīng)的單條數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合。在本發(fā)明的一個實施例中,可以僅對代碼覆蓋率進行比較,如圖2所示,為本發(fā)明實施例根據(jù)代碼覆蓋率對測試數(shù)據(jù)進行篩選的流程圖,且在該實施例中,以 BullseyeCoverage軟件為例進行描述,包括以下步驟步驟S201,輸入一個單條輸入數(shù)據(jù)dl,并通過BullseyeCoverage軟件的cov_ eventCount函數(shù)獲得該單條輸入數(shù)據(jù)所對應(yīng)的代碼覆蓋率nl。步驟S202,輸入另一個單條輸入數(shù)據(jù)d2,并通過BullseyeCoverage軟件的cov_ eventCount函數(shù)獲得該單條輸入數(shù)據(jù)所對應(yīng)的代碼覆蓋率n2。步驟S203,判斷代碼覆蓋率nl和代碼覆蓋率n2是否相等。步驟S204,如果相等,則將單條輸入數(shù)據(jù)d2加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合,并存儲到硬盤文件之中。當然在本發(fā)明的實施例中,還可進一步地通過BullseyeCoverage軟件獲得單條輸入數(shù)據(jù)所對應(yīng)的代碼覆蓋率文件。其中,該代碼覆蓋率文件包括源文件級別篩選信息、函數(shù)級別篩選信息和代碼行級別篩選信息中的一種或多種。進一步地,在本發(fā)明的一個實施例中,源文件級別篩選信息包括覆蓋源文件信息,函數(shù)級別篩選信息包括覆蓋源文件函數(shù)信息,代碼行級別篩選信息包括覆蓋代碼行數(shù)信息和/或覆蓋代碼行的分支條件信息。這樣,在本發(fā)明的另一個實施例中,為了進一步提高篩選的精度,在對代碼覆蓋率進行比較之后,如果兩個代碼覆蓋率相同則還需進一步比較代碼覆蓋率文件,如果代碼覆蓋率文件不同,則還是將該單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。其中,代碼覆蓋率文件的對比可以是源文件級的對比,也可以是函數(shù)級別的對比, 甚至還可以是代碼行級別的對比。例如,如果源文件不同,則說明雖然代碼覆蓋率相同,但是這兩個單條輸入數(shù)據(jù)走的還是不同的源文件,因此不能將其篩除。同樣地,如果源文件和代碼覆蓋率相同,但函數(shù)不同,或者代碼行不同,則也不能將其篩除,從而提高本發(fā)明的精度。如圖3所示,為本發(fā)明實施例的測試數(shù)據(jù)篩選裝置結(jié)構(gòu)圖。該測試數(shù)據(jù)篩選裝置包括接收模塊110、測試模塊120、代碼覆蓋率獲取模塊130和篩選模塊140。其中,接收模塊110用于接收輸入的測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù)。在本發(fā)明的實施例中,被測系統(tǒng)可包括多個子模塊,其中,每個子模塊都具有對應(yīng)的多個單條輸入數(shù)據(jù)。測試模塊120用于根據(jù)多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試。具體地,還對被測系統(tǒng)下的每個子模塊進行測試。代碼覆蓋率獲取模塊130用于獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率。在本發(fā)明的實施例中,可通過BullseyeCoverage軟件中的cov_ eventCount庫函數(shù)生成對應(yīng)的代碼覆蓋率數(shù)據(jù)。當然在本發(fā)明的實施例中,還可使用其他軟件獲得代碼覆蓋率數(shù)據(jù)。在本發(fā)明的實施例中,如針對多線程軟件,則在程序中找到主線程流程代碼中調(diào)用的核心線程函數(shù)(如pthreacLcreate第三個參數(shù)即為線程運行函數(shù)指針,找到該函數(shù)的實現(xiàn)即可),前后調(diào)用cov_eventcount函數(shù),并比較兩次代碼覆蓋率異同即可。在本發(fā)明的實施例中,篩選模塊140用于根據(jù)每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對測試數(shù)據(jù)進行篩選,以及將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。在本發(fā)明的一個實施例中,篩選模塊140進一步包括判斷子模塊和控制子模塊。 判斷子模塊用于判斷每個單條數(shù)據(jù)中的一個對應(yīng)的代碼覆蓋率是否與其他單條數(shù)據(jù)對應(yīng)的代碼覆蓋率相同。控制子模塊用于在判斷子模塊判斷不相同時,將對應(yīng)的單條數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合。本發(fā)明實施例通過代碼覆蓋率的變化情況,判斷對應(yīng)的單條輸入數(shù)據(jù)對代碼覆蓋率是否構(gòu)成了貢獻,如果沒有貢獻則可將該單條輸入數(shù)據(jù)篩除,從而可以在保證代碼覆蓋率不變的前提下可以有效地將原來千萬量級的輸入數(shù)據(jù)(或稱為回歸數(shù)據(jù))壓縮至百量級,因此可以大幅度地提高測試速度,及縮短測試周期。另外,在本申請的實施例中,上述方法完全自動運行,無需人工干預(yù),因此可以節(jié)約人力成本。如圖4所示,為本發(fā)明實施例測試數(shù)據(jù)構(gòu)造方法流程圖。該方法包括以下步驟
7
步驟S401,輸入測試數(shù)據(jù),其中,測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù)。單條輸入數(shù)據(jù)的數(shù)量根據(jù)被測系統(tǒng)的規(guī)模進行設(shè)置。在本發(fā)明的實施例中,被測系統(tǒng)可包括多個子模塊, 其中,每個子模塊都具有對應(yīng)的多個單條輸入數(shù)據(jù)。步驟S402,根據(jù)多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,并獲得每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率。在本發(fā)明的實施例中,可通過BullseyeCoverage軟件中的 cov_eventCount庫函數(shù)生成對應(yīng)的代碼覆蓋率數(shù)據(jù)。當然在本發(fā)明的實施例中,還可使用其他軟件獲得代碼覆蓋率數(shù)據(jù)。在本發(fā)明的實施例中,如針對多線程軟件,則在程序中找到主線程流程代碼中調(diào)用的核心線程函數(shù)(如pthreacLcreate第三個參數(shù)即為線程運行函數(shù)指針,找到該函數(shù)的實現(xiàn)即可),前后調(diào)用cov_eventcount函數(shù),并比較兩次代碼覆蓋率異同即可。步驟S403,根據(jù)每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對測試數(shù)據(jù)進行篩選,以及將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。具體地,可對代碼覆蓋率相同的多個單條輸入數(shù)據(jù)進行篩選,篩除一部分的單條輸入數(shù)據(jù)。由于保留的單條輸入數(shù)據(jù)依然能夠保持一定的代碼覆蓋率,因此篩除部分的單條輸入數(shù)據(jù)也不會對代碼覆蓋率構(gòu)成影響,而可以大幅度地降低測試數(shù)據(jù)的數(shù)量。步驟S404,根據(jù)優(yōu)選代碼覆蓋率數(shù)據(jù)集合中的每個單條輸入數(shù)據(jù)再次對被測系統(tǒng)進行測試,并獲得每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率數(shù)據(jù)。同樣地,在該實施例中,可通過BullseyeCoverage軟件中的coteventCount庫函數(shù)生成對應(yīng)的代碼覆蓋率數(shù)據(jù)。當然在本發(fā)明的實施例中,還可使用其他軟件獲得代碼覆蓋率數(shù)據(jù)。步驟S405,對覆蓋率數(shù)據(jù)進行格式化,以及根據(jù)代碼覆蓋率數(shù)據(jù)生成分支條件,并建立單條輸入數(shù)據(jù)與分支條件之間的對應(yīng)關(guān)系。通過對覆蓋率數(shù)據(jù)進行格式化,可以生成二進制序列表示單個數(shù)據(jù)對哪個源碼文件(CPP),哪個函數(shù),哪一行的哪些條件分支進行了覆蓋。其中,該代碼覆蓋率文件包括源文件級別篩選信息、函數(shù)級別篩選信息和代碼行級別篩選信息中的一種或多種。進一步地,在本發(fā)明的一個實施例中,源文件級別篩選信息包括覆蓋源文件信息,函數(shù)級別篩選信息包括覆蓋源文件函數(shù)信息,代碼行級別篩選信息包括覆蓋代碼行數(shù)信息和/或覆蓋代碼行的分支條件信息。具體地,在本發(fā)明的實施例中,如圖5所示,為本發(fā)明實施例提取的分支條件信息示意圖。根據(jù)提取出的覆蓋率信息,進行格式化處理后,支持如下三個級別的信息篩選1、源文件級別篩選輸入數(shù)據(jù)帶來源文件(cpp)覆蓋率信息變化,保留相關(guān)輸入數(shù)據(jù)。2、函數(shù)級別篩選輸入數(shù)據(jù)帶來函數(shù)(fun)級覆蓋率信息變化,保留相關(guān)輸入數(shù)據(jù)。3、代碼行條件覆蓋篩選輸入數(shù)據(jù)觸發(fā)相關(guān)分支條件(如if A and B,則保留A為 ture, false, B為true,false的全排列組合),相關(guān)排列組合均保留。將單條輸入數(shù)據(jù)與分支條件之間的對應(yīng)關(guān)系,以及覆蓋率信息存儲至數(shù)據(jù)庫中。 如圖6所示,為本發(fā)明實施例用于記錄覆蓋情況的數(shù)據(jù)結(jié)構(gòu)具體定義格式示意圖。其中, 0-16位為預(yù)留位,17-M位為源文件(cpp)存儲位,25-32為函數(shù)(fun)存儲位,33-48為絕對行號存儲位,后續(xù)存儲相對行號、條件序號及覆蓋情況等信息。步驟S406,根據(jù)對應(yīng)關(guān)系構(gòu)造新的測試數(shù)據(jù)。在本發(fā)明的實施例中,在將上述數(shù)據(jù)結(jié)構(gòu)存儲到數(shù)據(jù)庫中之后,還將其顯示在Web前端。如圖7所示,為本發(fā)明實施例Web前端顯示的代碼示意圖。在此所述的構(gòu)造可根據(jù)用戶的選擇行為對輸入數(shù)據(jù)進行構(gòu)造,例如用戶可根據(jù)代碼左側(cè)的選擇項進行選擇,如果用戶選擇了該源文件、函數(shù)或行代碼,則數(shù)據(jù)庫就會自動地將使用到該源文件、函數(shù)或行代碼對應(yīng)的一個或多個單條輸入數(shù)據(jù)顯示給用戶,這樣用戶就知道哪個或哪些單條輸入數(shù)據(jù)對該源文件、函數(shù)或行代碼的測試起到作用。 因此在用戶增加新功能的時候,就可以根據(jù)上述方法獲知哪個或哪些單條輸入數(shù)據(jù)對該新功能對應(yīng)的行代碼起到作用,這樣將起到作用的單條輸入數(shù)據(jù)進行重構(gòu),這些單條輸入數(shù)據(jù)對于新功能來說都是有用的,沒用的單條輸入數(shù)據(jù)就被篩除,因此可以極大地降低輸入數(shù)據(jù)的數(shù)據(jù)量。在本發(fā)明的實施例中,還通過數(shù)據(jù)擾動的方法對所述優(yōu)選代碼覆蓋率數(shù)據(jù)集合進行擾動,從而能夠較好地將一些輸入數(shù)據(jù)對模塊來說為長尾分布的情況,轉(zhuǎn)換成類似均勻分布的情況,提高穩(wěn)定性測試的覆蓋面。如圖8所示,為本發(fā)明實施例測試數(shù)據(jù)構(gòu)造裝置結(jié)構(gòu)圖。該測試數(shù)據(jù)構(gòu)造裝置包括接收模塊210、測試模塊220、代碼覆蓋率獲取模塊230、篩選模塊M0、建立模塊250和構(gòu)造模塊沈0。其中,接收模塊210用于接收輸入的測試數(shù)據(jù),其中,測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù)。測試模塊220用于根據(jù)多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,以及根據(jù)優(yōu)選代碼覆蓋率數(shù)據(jù)集合中的每個單條輸入數(shù)據(jù)再次對被測系統(tǒng)進行測試。代碼覆蓋率獲取模塊230用于獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率。篩選模塊240用于根據(jù)每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,以及將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。建立模塊250用于根據(jù)代碼覆蓋率數(shù)據(jù)生成分支條件,并建立單條輸入數(shù)據(jù)與分支條件之間的對應(yīng)關(guān)系。構(gòu)造模塊260用于根據(jù)對應(yīng)關(guān)系構(gòu)造新的測試數(shù)據(jù)。在本發(fā)明的一個實施例中,篩選模塊240進一步包括判斷子模塊和控制子模塊。 其中,判斷子模塊用于判斷所述每個單條數(shù)據(jù)中的一個對應(yīng)的代碼覆蓋率是否與其他單條數(shù)據(jù)對應(yīng)的代碼覆蓋率相同??刂谱幽K,用于在所述判斷子模塊判斷不相同時,將對應(yīng)的單條數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合。在本發(fā)明的一個實施例中,代碼覆蓋率文件包括源文件級別篩選信息、函數(shù)級別篩選信息和代碼行級別篩選信息中的一種或多種。具體地,源文件級別篩選信息包括覆蓋源文件信息,函數(shù)級別篩選信息包括覆蓋源文件函數(shù)信息,代碼行級別篩選信息包括覆蓋代碼行數(shù)信息和/或覆蓋代碼行的分支條件信息。在本發(fā)明的一個實施例中,該測試數(shù)據(jù)構(gòu)造裝置還包括擾動模塊270。擾動模塊 270用于通過數(shù)據(jù)擾動的方法對所述優(yōu)選代碼覆蓋率數(shù)據(jù)集合進行擾動。通過本發(fā)明實施例建立的單條輸入數(shù)據(jù)與分支條件之間的對應(yīng)關(guān)系,這樣測試者就可以根據(jù)該對應(yīng)關(guān)系獲知被測系統(tǒng)中具體哪個源文件、哪個函數(shù)或者哪行代碼被哪個或哪些單條輸入數(shù)據(jù)所覆蓋,從而可以精確地提取滿足對應(yīng)代碼行覆蓋要求的單條輸入數(shù)據(jù),進一步地輔助進行下一步新功能測試數(shù)據(jù)構(gòu)造。因此本發(fā)明實施例提高了新功能數(shù)據(jù)構(gòu)造的針對性,降低了數(shù)據(jù)構(gòu)造的成本。在流程圖中表示或在此以其他方式描述的邏輯和/或步驟,例如,可以被認為是用于實現(xiàn)邏輯功能的可執(zhí)行指令的定序列表,可以具體實現(xiàn)在任何計算機可讀介質(zhì)中,以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備(如基于計算機的系統(tǒng)、包括處理器的系統(tǒng)或其他可以從指令執(zhí)行系統(tǒng)、裝置或設(shè)備取指令并執(zhí)行指令的系統(tǒng))使用,或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用。就本說明書而言,“計算機可讀介質(zhì)”可以是任何可以包含、存儲、通信、傳播或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備或結(jié)合這些指令執(zhí)行系統(tǒng)、裝置或設(shè)備而使用的裝置。計算機可讀介質(zhì)的更具體的示例(非窮盡性列表)包括以下具有一個或多個布線的電連接部(電子裝置),便攜式計算機盤盒(磁裝置),隨機存取存儲器(RAM),只讀存儲器(ROM),可擦除可編輯只讀存儲器(EPR0M或閃速存儲器),光纖裝置,以及便攜式光盤只讀存儲器(CDROM)。另外,計算機可讀介質(zhì)甚至可以是可在其上打印所述程序的紙或其他合適的介質(zhì),因為可以例如通過對紙或其他介質(zhì)進行光學掃描,接著進行編輯、解譯或必要時以其他合適方式進行處理來以電子方式獲得所述程序,然后將其存儲在計算機存儲器中。應(yīng)當理解,本發(fā)明的各部分可以用硬件、軟件、固件或它們的組合來實現(xiàn)。在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實現(xiàn)。例如,如果用硬件來實現(xiàn),和在另一實施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項或他們的組合來實現(xiàn)具有用于對數(shù)據(jù)信號實現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場可編程門陣列(FPGA)等。在本說明書的描述中,參考術(shù)語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。盡管已經(jīng)示出和描述了本發(fā)明的實施例,本領(lǐng)域的普通技術(shù)人員可以理解在不脫離本發(fā)明的原理和宗旨的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同物限定。
10
權(quán)利要求
1.一種測試數(shù)據(jù)篩選方法,其特征在于,包括以下步驟輸入測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù);根據(jù)所述多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,并獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率;以及根據(jù)所述每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,并將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。
2.如權(quán)利要求1所述的測試數(shù)據(jù)篩選方法,其特征在于,所述根據(jù)每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選進一步包括如所述每個單條數(shù)據(jù)中的一個對應(yīng)的代碼覆蓋率與其他單條數(shù)據(jù)對應(yīng)的代碼覆蓋率不相同,則將對應(yīng)的單條數(shù)據(jù)加入到所述優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。
3.如權(quán)利要求1或2所述的測試數(shù)據(jù)篩選方法,其特征在于,通過BullseyeCoverage 軟件中的coteventCoimt庫函數(shù)生成對應(yīng)的代碼覆蓋率數(shù)據(jù)。
4.一種測試數(shù)據(jù)篩選裝置,其特征在于,包括接收模塊,用于接收輸入的測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù); 測試模塊,用于根據(jù)所述多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試; 代碼覆蓋率獲取模塊,用于獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率;以及篩選模塊,用于根據(jù)所述每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,并將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。
5.如權(quán)利要求4所述的測試數(shù)據(jù)篩選裝置,其特征在于,所述篩選模塊進一步包括 判斷子模塊,用于判斷所述每個單條數(shù)據(jù)中的一個對應(yīng)的代碼覆蓋率是否與其他單條數(shù)據(jù)對應(yīng)的代碼覆蓋率相同;控制子模塊,用于在所述判斷子模塊判斷不相同時,將對應(yīng)的單條數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合。
6.一種測試數(shù)據(jù)構(gòu)造方法,其特征在于,包括以下步驟輸入測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù);根據(jù)所述多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,并獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率;根據(jù)所述每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,并將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中;根據(jù)所述優(yōu)選代碼覆蓋率數(shù)據(jù)集合中的每個單條輸入數(shù)據(jù)再次對所述被測系統(tǒng)進行測試,并獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率數(shù)據(jù);根據(jù)所述代碼覆蓋率數(shù)據(jù)生成分支條件,并建立單條輸入數(shù)據(jù)與分支條件之間的對應(yīng)關(guān)系;以及根據(jù)所述對應(yīng)關(guān)系構(gòu)造新的測試數(shù)據(jù)。
7.如權(quán)利要求6所述的測試數(shù)據(jù)構(gòu)造方法,其特征在于,所述根據(jù)每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選進一步包括如所述每個單條數(shù)據(jù)中的一個對應(yīng)的代碼覆蓋率與其他單條數(shù)據(jù)對應(yīng)的代碼覆蓋率不相同,則將對應(yīng)的單條數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合。
8.如權(quán)利要求6或7所述的測試數(shù)據(jù)構(gòu)造方法,其特征在于,所述代碼覆蓋率文件包括源文件級別篩選信息、函數(shù)級別篩選信息和代碼行級別篩選信息中的一種或多種。
9.如權(quán)利要求8所述的測試數(shù)據(jù)構(gòu)造方法,其特征在于,所述源文件級別篩選信息包括覆蓋源文件信息,所述函數(shù)級別篩選信息包括覆蓋源文件函數(shù)信息,所述代碼行級別篩選信息包括覆蓋代碼行數(shù)信息和/或覆蓋代碼行的分支條件信息。
10.如權(quán)利要求6-9所述的測試數(shù)據(jù)構(gòu)造方法,其特征在于,還包括 通過數(shù)據(jù)擾動的方法對所述優(yōu)選代碼覆蓋率數(shù)據(jù)集合進行擾動。
11.如權(quán)利要求6-10任一項所述的測試數(shù)據(jù)構(gòu)造方法,其特征在于,通過 BullseyeCoverage軟件中的cov_eventCount庫函數(shù)生成對應(yīng)的代碼覆蓋率數(shù)據(jù)。
12.一種測試數(shù)據(jù)構(gòu)造裝置,其特征在于,包括接收模塊,用于接收輸入的測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù); 代碼覆蓋率獲取模塊,用于獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率; 篩選模塊,用于根據(jù)所述每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,并將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合;測試模塊,用于根據(jù)所述多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,以及根據(jù)所述優(yōu)選代碼覆蓋率數(shù)據(jù)集合中的每個單條輸入數(shù)據(jù)再次對所述被測系統(tǒng)進行測試;建立模塊,用于根據(jù)所述代碼覆蓋率數(shù)據(jù)生成分支條件,并建立單條輸入數(shù)據(jù)與分支條件之間的對應(yīng)關(guān)系;以及構(gòu)造模塊,用于根據(jù)所述對應(yīng)關(guān)系構(gòu)造新的測試數(shù)據(jù)。
13.如權(quán)利要求12所述的測試數(shù)據(jù)構(gòu)造裝置,其特征在于,所述篩選模塊進一步包括 判斷子模塊,用于判斷所述每個單條數(shù)據(jù)中的一個對應(yīng)的代碼覆蓋率是否與其他單條數(shù)據(jù)對應(yīng)的代碼覆蓋率相同;控制子模塊,用于在所述判斷子模塊判斷不相同時,將對應(yīng)的單條數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合。
14.如權(quán)利要求12所述的測試數(shù)據(jù)構(gòu)造裝置,其特征在于,所述代碼覆蓋率文件包括源文件級別篩選信息、函數(shù)級別篩選信息和代碼行級別篩選信息中的一種或多種。
15.如權(quán)利要求14所述的測試數(shù)據(jù)構(gòu)造裝置,其特征在于,所述源文件級別篩選信息包括覆蓋源文件信息,所述函數(shù)級別篩選信息包括覆蓋源文件函數(shù)信息,所述代碼行級別篩選信息包括覆蓋代碼行數(shù)信息和/或覆蓋代碼行的分支條件信息。
16.如權(quán)利要求12所述的測試數(shù)據(jù)構(gòu)造裝置,其特征在于,還包括擾動模塊,用于通過數(shù)據(jù)擾動的方法對所述優(yōu)選代碼覆蓋率數(shù)據(jù)集合進行擾動。
17.如權(quán)利要求12所述的測試數(shù)據(jù)構(gòu)造方法,其特征在于,所述代碼覆蓋率獲取模塊通過BullseyeCoverage軟件中的cov_eventCount庫函數(shù)生成對應(yīng)的代碼覆蓋率數(shù)據(jù)。
全文摘要
本發(fā)明提出了一種測試數(shù)據(jù)篩選方法及裝置、測試數(shù)據(jù)構(gòu)造方法及裝置。其中,測試數(shù)據(jù)篩選方法,包括以下步驟輸入測試數(shù)據(jù),其中,所述測試數(shù)據(jù)包括多個單條輸入數(shù)據(jù);根據(jù)所述多個單條輸入數(shù)據(jù)中的每個對被測系統(tǒng)進行測試,并獲得每個所述單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率;以及根據(jù)所述每個單條輸入數(shù)據(jù)對應(yīng)的代碼覆蓋率對所述測試數(shù)據(jù)進行篩選,并將篩選后的單條輸入數(shù)據(jù)加入到優(yōu)選代碼覆蓋率數(shù)據(jù)集合中。本發(fā)明實施例通過代碼覆蓋率的變化情況,判斷對應(yīng)的單條輸入數(shù)據(jù)對代碼覆蓋率是否構(gòu)成了貢獻,如果沒有貢獻則可將該單條輸入數(shù)據(jù)篩除,從而可以大幅度地提高測試速度,及縮短測試周期。
文檔編號G06F11/36GK102426551SQ20111034679
公開日2012年4月25日 申請日期2011年11月4日 優(yōu)先權(quán)日2011年11月4日
發(fā)明者楊進, 蔡兆文, 趙燕 申請人:百度在線網(wǎng)絡(luò)技術(shù)(北京)有限公司