本公開實施例涉及自動化測試,尤其涉及一種程序測試中缺陷發(fā)現(xiàn)的方法和裝置。
背景技術(shù):
1、隨著計算機技術(shù)的發(fā)展,軟件程序覆蓋的行業(yè)范圍越來越廣泛,具有各種功能的程序被開發(fā)出來。在程序迭代開發(fā)的過程中,對程序代碼進行測試是非常重要的環(huán)節(jié),代碼測試可以有效的保證程序運行的正確性。如何在程序測試中發(fā)現(xiàn)程序中的缺陷,是測試行業(yè)非常關(guān)注的問題。
技術(shù)實現(xiàn)思路
1、本公開的實施例描述了一種程序測試中缺陷發(fā)現(xiàn)的方法和裝置,可以基于線上崩潰數(shù)據(jù)和線下測試數(shù)據(jù)綜合分析,從而精準的篩選出被測試程序中存在的缺陷。
2、根據(jù)第一方面,提供了程序測試中缺陷發(fā)現(xiàn)的方法,包括:獲取被測試程序的在線版本在線上運行時產(chǎn)生的運行崩潰的崩潰數(shù)據(jù);獲取上述被測試程序的當前版本在線下測試中執(zhí)行失敗的目標單元測試用例的測試數(shù)據(jù);根據(jù)上述測試數(shù)據(jù)和上述崩潰數(shù)據(jù),確定上述目標單元測試用例對應(yīng)的程序單元是否存在缺陷。
3、在一個實施例中,上述方法還包括:對上述測試數(shù)據(jù)進行線下分析,確定上述目標單元測試用例對應(yīng)的程序單元是否存在缺陷。由此,對線下測試數(shù)據(jù)進行線下分析,篩選出缺陷。
4、在一個實施例中,上述測試數(shù)據(jù)包括棧追蹤;以及,上述對上述測試數(shù)據(jù)進行線下分析,確定上述目標單元測試用例對應(yīng)的程序單元是否存在缺陷,包括:將上述目標單元測試用例的棧追蹤與預(yù)設(shè)的第一規(guī)則集合中的第一規(guī)則進行匹配,其中,上述第一規(guī)則集合中的第一規(guī)則是基于對多個出現(xiàn)異常的程序單元的棧追蹤進行分析確定的;響應(yīng)于確定上述目標單元測試用例的棧追蹤與上述第一規(guī)則集合中的第一規(guī)則相匹配,確定上述目標單元測試用例對應(yīng)的程序單元存在缺陷。由此,通過預(yù)先創(chuàng)建的第一規(guī)則集合,可以快速地確定出棧追蹤與第一規(guī)則相匹配的目標單元測試用例對應(yīng)的程序單元存在缺陷。
5、在一個實施例中,上述測試數(shù)據(jù)包括棧追蹤;以及,上述對上述測試數(shù)據(jù)進行線下分析,確定上述目標單元測試用例對應(yīng)的程序單元是否存在缺陷,包括:將上述目標單元測試用例的棧追蹤與預(yù)設(shè)的第二規(guī)則集合中的第二規(guī)則進行匹配,其中,上述第二規(guī)則集合中的第二規(guī)則是基于對多個未出現(xiàn)異常的程序單元的棧追蹤進行分析確定的;響應(yīng)于確定上述目標單元測試用例的棧追蹤與上述第二規(guī)則集合中的第二規(guī)則相匹配,確定上述目標單元測試用例對應(yīng)的程序單元不存在缺陷。由此,通過預(yù)先創(chuàng)建的第二規(guī)則集合,可以快速地確定出棧追蹤與第二規(guī)則相匹配的目標單元測試用例對應(yīng)的程序單元不存在缺陷。
6、在一個實施例中,上述被測試程序采用迭代開發(fā),每次迭代生成一個新版本,上述目標單元測試用例是由測試工具基于測試用例生成版本的代碼自動生成的;以及上述對上述測試數(shù)據(jù)進行線下分析,確定上述目標單元測試用例對應(yīng)的程序單元是否存在缺陷,包括:確定上述目標單元測試用例在上述測試用例生成版本的代碼中是否執(zhí)行失?。豁憫?yīng)于確定上述目標單元測試用例在上述測試用例生成版本的代碼中執(zhí)行失敗,確定過濾上述目標單元測試用例,不再判斷上述目標單元測試用例對應(yīng)的程序單元是否存在缺陷。由此,可以過濾掉在測試用例生成版本的代碼執(zhí)行失敗的目標單元測試用例,從而減少不必要的計算資源的浪費。
7、在一個實施例中,上述對上述測試數(shù)據(jù)進行線下分析,確定上述目標單元測試用例對應(yīng)的程序單元是否存在缺陷,包括:響應(yīng)于確定上述目標單元測試用例在上述測試用例生成版本的代碼中執(zhí)行成功,確定上述測試用例生成版本與上述當前版本之間的文件變更,以及第一變更文件的第一調(diào)用鏈;響應(yīng)于確定上述目標單元測試用例對應(yīng)的代碼文件與上述第一變更文件相關(guān),或者處于上述第一調(diào)用鏈上,確定上述目標單元測試用例對應(yīng)的程序單元存在缺陷。由此,可以基于測試用例生成版本與當前版本之間變更,篩選出存在缺陷的程序單元。
8、在一個實施例中,上述方法還包括:響應(yīng)于確定上述目標單元測試用例對應(yīng)的程序單元存在缺陷,對缺陷進行分級。由此,實現(xiàn)對篩選出的缺陷進行優(yōu)先級分級。
9、在一個實施例中,上述對缺陷進行分級,包括:響應(yīng)于確定根據(jù)上述測試數(shù)據(jù)和上述崩潰數(shù)據(jù)確定上述目標單元測試用例對應(yīng)的程序單元存在缺陷,將缺陷確定為第一優(yōu)先級缺陷;響應(yīng)于確定缺陷對應(yīng)的程序單元的源代碼報錯的代碼行對應(yīng)的代碼塊在上述當前版本中被修改,確定缺陷為第一優(yōu)先級缺陷。由此,可以實現(xiàn)缺陷的分級,從而將缺陷劃分為不同的優(yōu)先級。
10、在一個實施例中,上述對缺陷進行分級,還包括:響應(yīng)于確定缺陷對應(yīng)的程序單元的源代碼報錯的代碼行對應(yīng)的代碼塊在上述當前版本中未被修改,確定第一版本與上述當前版本之間的文件變更,以及第二變更文件的第二調(diào)用鏈,其中,上述當前版本為基于上述第一版本迭代出的版本;響應(yīng)于確定上述目標單元測試用例對應(yīng)的代碼文件與上述第二變更文件相關(guān),或者處于上述第二調(diào)用鏈上,確定缺陷為第二優(yōu)先級缺陷,其中,第一優(yōu)先級缺陷的優(yōu)先級高于第二優(yōu)先級缺陷。由此,可以實現(xiàn)缺陷的分級,從而將缺陷劃分為不同的優(yōu)先級。
11、在一個實施例中,上述測試數(shù)據(jù)包括測試的類、測試的異常類型、測試的方法;上述崩潰數(shù)據(jù)包括崩潰的類、崩潰的異常類型、崩潰的方法和崩潰標識;以及上述根據(jù)上述測試數(shù)據(jù)和上述崩潰數(shù)據(jù),確定上述目標單元測試用例對應(yīng)的程序單元是否存在缺陷,包括:響應(yīng)于確定上述崩潰數(shù)據(jù)與上述測試數(shù)據(jù)相匹配,確定相匹配的崩潰數(shù)據(jù)對應(yīng)的崩潰為目標崩潰;根據(jù)上述目標崩潰的崩潰標識,獲取上述目標崩潰對應(yīng)的棧追蹤;將上述目標崩潰對應(yīng)的棧追蹤與上述目標單元測試用例對應(yīng)的棧追蹤進行匹配;響應(yīng)于確定相匹配,確定上述目標單元測試用例對應(yīng)的程序單元存在缺陷。由此,可以基于崩潰數(shù)據(jù)、測試數(shù)據(jù)和棧追蹤確定缺陷,從而使確定的缺陷更加準確。
12、在一個實施例中,上述確定上述崩潰數(shù)據(jù)與上述測試數(shù)據(jù)相匹配,包括:響應(yīng)于確定上述測試的類和上述測試的異常類型分別與上述崩潰的類和上述崩潰的異常類型相同,進一步判斷上述測試的方法是否與上述崩潰的方法相同;如果上述測試的方法與上述崩潰的方法相同,確定上述崩潰數(shù)據(jù)與上述測試數(shù)據(jù)相匹配。由此,可以快速確定崩潰數(shù)據(jù)是否與測試數(shù)據(jù)相匹配。
13、根據(jù)第二方面,提供了程序測試中缺陷發(fā)現(xiàn)的裝置,包括:第一獲取單元,配置為,獲取被測試程序的在線版本在線上運行時產(chǎn)生的運行崩潰的崩潰數(shù)據(jù);第二獲取單元,配置為,獲取所述被測試程序的當前版本在線下測試中執(zhí)行失敗的目標單元測試用例的測試數(shù)據(jù);確定單元,配置為,根據(jù)所述測試數(shù)據(jù)和所述崩潰數(shù)據(jù),確定所述目標單元測試用例對應(yīng)的程序單元是否存在缺陷。
14、根據(jù)第三方面,提供了一種計算機程序產(chǎn)品,包括計算機程序,上述計算機程序被處理器執(zhí)行時實現(xiàn)如第一方面中任一項上述的方法。
15、根據(jù)第四方面,提供了一種計算機可讀存儲介質(zhì),其上存儲有計算機程序,當上述計算機程序在計算機中執(zhí)行時,令上述計算機執(zhí)行第一方面中任一項上述的方法。
16、根據(jù)第五方面,提供了一種電子設(shè)備,包括存儲器和處理器,上述存儲器中存儲有可執(zhí)行代碼,上述處理器執(zhí)行上述可執(zhí)行代碼時,實現(xiàn)第一方面中任一項上述的方法。
17、根據(jù)本公開實施例提供的程序測試中缺陷發(fā)現(xiàn)的方法和裝置,可以獲取被測試程序的在線版本在線上運行時產(chǎn)生的運行崩潰的崩潰數(shù)據(jù),還可以獲取被測試程序的當前版本在線性測試中執(zhí)行失敗的目標單元測試用例的測試數(shù)據(jù)。之后,根據(jù)獲取的測試數(shù)據(jù)和崩潰數(shù)據(jù),確定目標單元測試用例對應(yīng)的程序單元是否存在缺陷。由此,實現(xiàn)了基于線上崩潰數(shù)據(jù)和線下測試數(shù)據(jù)綜合分析,精準的篩選出被測試程序中存在的缺陷。