專利名稱:軟件缺陷定位方法及系統的制作方法
技術領域:
本申請涉及軟件測試技術領域,特別是涉及一種軟件缺陷定位方法及系統。
背景技術:
在目前的軟件測試過程中,測試人員在發(fā)現軟件缺陷后,常用的方法是,下載服務器的異常日志信息,分析出錯的代碼行號及錯誤提示信息等,但由于測試人員一般不熟悉由開發(fā)人員編碼的代碼,所以這些信息并不足以令測試人員快速地找到缺陷產生根源在哪,這無疑會增加缺陷定位的時間。目前一種常見的軟件缺陷定位方法為采用Eclipse中的異常堆棧信息功能,這些異常堆棧信息包含軟件運行過程中經過的每個類、每個方法等信息。這樣可以查找到出現異常的類或者方法,一定程度上可以縮小范圍,減少缺陷定位的時間。但是因為每個類和每個方法中出現異常的代碼可能只有一小部分,仍然會有大量的代碼行需要排查,這樣的缺陷定位仍然會花費較長的時間。
發(fā)明內容
本申請的目的在于,提供一種軟件缺陷定位方法及系統,以解決軟件缺陷難以定位的問題。為了解決上述問題,本申請公開了一種軟件缺陷定位方法,包括以下步驟:從運行目標軟件的客戶端內存中獲取目標軟件測試過程中的覆蓋率信息,所述覆蓋率信息包括各行代碼的運行情況和根據運行情況對各行代碼所進行的標記;根據所述覆蓋率信息中的運行情況和標記確定被運行過的代碼;返回所有被運行過的代碼,以從所述被運行過的代碼中查詢并定位軟件缺陷。進一步地,所述獲取目標軟件測試過程中運行目標軟件的客戶端內存中的覆蓋率信息包括:通過與客戶端的交互直接讀取運行目標軟件的客戶端內存中的覆蓋率信息;或從運行目標軟件的客戶端內存中下載覆蓋率信息到目標軟件所在的客戶端,然后上傳到服務器中。進一步地,所述方法還包括:采用嵌入目標軟件中的代碼記錄測試過程中的覆蓋率信息,并存入運行目標軟件的客戶端內存中。進一步地,所述方法還包括:在嵌入目標軟件中的代碼開始記錄新的覆蓋率信息之前,清空運行目標軟件的客戶端內存中的覆蓋率信息。進一步地,所述方法還包括:嵌入目標軟件中的代碼使用靜態(tài)數組來記錄各行代碼運行情況并進行標記。進一步地,所述根據所述覆蓋率信息確定被運行過的代碼包括:
根據各行代碼的標記對代碼進行匯總;將具有表示被運行過標記的代碼集中在一起。進一步地,所述返回所有被運行過的代碼包括:返回包含有被運行過的代碼所在的代碼塊。進一步地,所述方法還包括:將測試過程中的覆蓋率信息添加到目標軟件的操作記錄中。進一步地,所述方法還包括:對記錄完整測試過程的覆蓋率信息進行標記。為了解決上述問題,本申請還提供了一種軟件缺陷定位系統,包括:信息獲取模塊,用于獲取目標軟件測試過程中運行目標軟件的客戶端內存中的覆蓋率信息,所述覆蓋率信息包括各行代碼的運行情況和根據運行情況對各行代碼所進行的標記;代碼確定模塊,用于根據所述覆蓋率信息確定被運行過的代碼;返回模塊,用于返回所有被運行過的代碼,以從所述被運行過的代碼中查詢并定位軟件缺陷。與現有技術相比,本申請包括以下優(yōu)點:本申請的軟件缺陷定位方法和系統通過在目標軟件中嵌入代碼來記錄測試過程中的覆蓋率信息,并根據覆蓋率信息中的不同標記來查找到被運行過的代碼,并將這些代碼匯總在一起作為定位軟件缺陷的目標代碼,從而縮小了缺陷定位的范圍。因為覆蓋率信息中包含了各行代碼運行情況,根據覆蓋率信息就可以確定哪一行出現異常,并在哪一行進行了跳轉等信息,這就可以使查找缺陷時能夠精確定位到行,即使不熟悉目標軟件的開發(fā)代碼,也可以快速的實現缺陷的快速定位,從而節(jié)省了缺陷的查找定位過程。另外,通過在目標軟件中嵌入代碼的方式來實現覆蓋率信息記錄,可以適用于各種測試中,因為具有較好的通用性。進一步地,在返回被運行過代碼所在的代碼塊時,對代碼塊中被運行過和未被運行過的代碼采用不同的顏色或者標識符進行標記,也可以幫助實現快速定位和識別。當然,實施本申請的任一產品不一定需要同時達到以上所述的所有優(yōu)點。
圖1是本申請的軟件缺陷定位方法實施例一的流程圖;圖2是本申請的軟件缺陷定位方法實施例二的流程圖;圖3是本申請的軟件缺陷定位方法和系統在具體應用環(huán)境中實現的流程圖;圖4是本申請的軟件缺陷定位系統實施例一的結構示意圖。
具體實施例方式為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結合附圖和具體實施方式
對本申請作進一步詳細的說明。參照圖1,其示出本申請的軟件缺陷定位方法實施例一,包括以下步驟:步驟101,從運行目標軟件的客戶端內存中獲取目標軟件測試過程中的覆蓋率信息,所述覆蓋率信息包括各行代碼的運行情況和根據運行情況對各行代碼所進行的標記。服務器可以直接通過與客戶端的交互來讀取運行目標軟件的客戶端內存中的覆蓋率信息。也可以先從運行目標軟件的客戶端內存中下載覆蓋率信息到目標軟件所在的客戶端硬盤中,然后上傳到服務器中。其中,下載覆蓋率信息到目標軟件所在的客戶端硬盤后,覆蓋率信息可以以臨時文件的方式保存,當上傳到服務器后,則可以刪除,從而避免占用客戶端的資源??梢灶A先通過插樁的方式在目標軟件中嵌入對應的代碼,在目標軟件的測試過程中,嵌入的代碼會記錄目標軟件各代碼的運行情況,進行相應的標記,并存入目標軟件內存中。當測試完成后,服務器可以從目標軟件內存中獲取到此次測試過程中的覆蓋率信息。步驟102,根據所述覆蓋率信息確定被運行過的代碼。根據覆蓋率信息中的運行情況和標記可以確定本次測試過程中運行了哪些類的代碼,在哪一行進行了異常跳轉等具體信息。其中,對測試過程中各行代碼的標記可以根據該行代碼被運行的情況采用不同的標記,如在被運行過和未被運行過的代碼后面添加不同的標識符,或者以不同的顏色來表示是否代碼是否被運行等等。通過這些標記便可以確定出被運行過的代碼,并可以確定出這些代碼所在的具體行數和所屬類的具體位置信息,最后將這些代碼根據標記的不同分別進行匯總,將具有相同標記的代碼集中在一起,從而集中獲取所有被運行過的代碼。例如,若插樁的代碼使用靜態(tài)數組來記錄各行代碼運行情況并進行標記,如果目標軟件某一行被運行了,則靜態(tài)數組中對應的下標值指向的元素被置為true,否則就是原始的false。通過收集匯總在所有類中的靜態(tài)數組對象,就能知道本次測試過程中運行了哪些類的代碼,在哪一行出現了異常跳轉。步驟103,返回所有被運行過的代碼,以從所述被運行過的代碼中查詢并定位軟件缺陷。因為對于測試過程來說,如果某一部分沒有缺陷,則該部分對應的代碼并不會被運行,即不會出現異常。通過標記的方式便可以排除那些肯定不會出現異常的部分,而在剩下的可能導致出現異常的部分進行排查定位,從而能快速的定位出軟件缺陷。通過此種方式,可以預先排除大部分的代碼行,無需測試人員從所有代碼行中去查找軟件缺陷,而只需要從小部分的代碼行中查找軟件缺陷,從而縮小了查找范圍,以便能快速準確的定位軟件缺陷。優(yōu)選地,返回的代碼可以不僅僅是所有被運行過的代碼,對于某一目標軟件來說,是由若干用于實現不同功能的代碼塊組成的,因此,還可以返回出現異常的代碼所在的代碼塊,即如果某一代碼塊中只要有一行代碼出現異常,則返回整個代碼塊,為了便于查詢,可以保留整個代碼塊中的運行情況標記,如前所述的,可以用不同的顏色或者標識符來表示同一代碼塊中被運行過和未被運行過的各行代碼。通過返回整個代碼塊的方式,可以更容易的定位目標軟件中出現異常的功能模塊,從而更有利于實現缺陷的定位。另外,為了對每次測試過程中的覆蓋率信息進行保存,以便后續(xù)分析等處理,本申請還包括以下步驟:將測試過程中的覆蓋率信息添加到目標軟件的操作記錄中。優(yōu)選地,因為一次測試可能會因為設備故障、人為因素或者其他情況而中斷,而在新的測試開始之前,運行目標軟件的客戶端內存中的覆蓋率信息會被清空,這就可能造成覆蓋率信息不完整,為了便于識別每次存入操作記錄中的覆蓋率信息是否完整,本申請還包括對記錄完整測試過程的覆蓋率信息添加標記。例如,標識為已完成狀態(tài)等等。優(yōu)選地,因為對同一軟件可能進行多次測試,為了保證所記錄的覆蓋率信息的準確,還需要進行相應的處理,具體在開始記錄覆蓋率信息之前還包括清空運行目標軟件的客戶端內存中可能存在的覆蓋率信息。參照圖2,示出本申請的軟件定位缺陷的方法實施例二,包括以下步驟:步驟201,服務器接收客戶端發(fā)送的開始記錄的請求后,發(fā)送指令給客戶端的目標軟件,以清空運行目標軟件的客戶端內存中的覆蓋率信息。為了實現覆蓋率信息的清空,可以預先在目標軟件中添加相應的功能模塊,在接收到清空指令后,便可以通過刪除、移除或者隔離等方式清空運行目標軟件的客戶端內存中的覆蓋率信息。在測試開始后,目標軟件中嵌入的代碼會自動記錄此次測試過程中的覆蓋率 目息。其中,用戶在客戶端進行開始記錄的操作后,客戶端會首先將命令發(fā)送給目標軟件,目標軟件通過http協議消息從客戶端發(fā)送給服務器,其中,目標軟件通過客戶端發(fā)送給服務器的命令包括目標軟件名稱等信息,從而便于服務器識別目標軟件。步驟202,服務器接收客戶端發(fā)送的完成記錄的請求后,從運行目標軟件的客戶端內存中獲取此次測試過程中記錄的覆蓋率信息。步驟203,服務器根據此次測試過程中記錄的覆蓋率信息確定所有被運行的代碼。步驟204,服務器端返回所述被運行的代碼給客戶端,以使客戶端從所述被運行的代碼中查詢定位軟件缺陷。
參照圖3,其示出本申請前述方法的一個具體實例。其中,服務器為TCC服務器,用戶所在一端為客戶端。如圖3左邊所示,在運行前,需要對目標應用進行插樁,即在目標應用中新增一個Filter,對應用的最外層框架頁面的響應內容追加一小段javascript腳本程序,此腳本程序可以給當前網頁增加相應用戶鼠標右鍵事件功能,具體javascript程序如下:
權利要求
1.一種軟件缺陷定位方法,其特征在于,包括以下步驟: 從運行目標軟件的客戶端內存中獲取目標軟件測試過程中的覆蓋率信息,所述覆蓋率信息包括各行代碼的運行情況和根據運行情況對各行代碼所進行的標記; 根據所述覆蓋率信息中的運行情況和標記確定被運行過的代碼; 返回所有被運行過的代碼,以從所述被運行過的代碼中查詢并定位軟件缺陷。
2.如權利要求1所述的軟件缺陷定位方法,其特征在于,所述獲取目標軟件測試過程中運行目標軟件的客戶端內存中的覆蓋率信息包括: 通過與客戶端的交互直接讀取運行目標軟件的客戶端內存中的覆蓋率信息;或從運行目標軟件的客戶端內存中下載覆蓋率信息到目標軟件所在的客戶端,然后上傳到服務器中。
3.如權利要求1所述的軟件缺陷定位方法,其特征在于,所述方法還包括: 采用嵌入目標軟件中的代碼記錄測試過程中的覆蓋率信息,并存入運行目標軟件的客戶端內存中。
4.如權利要求3所述的軟件缺陷定位方法,其特征在于,所述方法還包括: 在嵌入目標軟件中的代碼開始記錄新的覆蓋率信息之前,清空運行目標軟件的客戶端內存中的覆蓋率信息。
5.如權利要求3所述的軟件缺陷定位方法,其特征在于,所述方法還包括: 嵌入目標軟件中的代碼使用靜態(tài)數組來記錄各行代碼運行情況并進行標記。
6.如權利要求1所述的軟件缺陷定位方法,其特征在于,所述根據所述覆蓋率信息確定被運行過的代碼包括: 根據各行代碼的標記對代碼進行匯總; 將具有表示被運行過標記的代碼集中在一起。
7.如權利要求1所述的軟件缺陷定位方法,其特征在于,所述返回所有被運行過的代碼包括: 返回包含有被運行過的代碼所在的代碼塊。
8.如權利要求1所述的軟件缺陷定位方法,其特征在于,所述方法還包括: 將測試過程中的覆蓋率信息添加到目標軟件的操作記錄中。
9.如權利要求8所述的軟件缺陷定位方法,其特征在于,所述方法還包括: 對記錄完整測試過程的覆蓋率信息進行標記。
10.一種軟件缺陷定位系統,其特征在于,包括: 信息獲取模塊,用于獲取目標軟件測試過程中運行目標軟件的客戶端內存中的覆蓋率信息,所述覆蓋率信息包括各行代碼的運行情況和根據運行情況對各行代碼所進行的標記; 代碼確定模塊,用于根據所述覆蓋率信息確定被運行過的代碼; 返回模塊,用于返回所有被運行過的代碼,以從所述被運行過的代碼中查詢并定位軟件缺陷。
全文摘要
本申請?zhí)峁┝艘环N軟件缺陷定位方法,包括以下步驟從運行目標軟件的客戶端內存中獲取目標軟件測試過程中的覆蓋率信息,所述覆蓋率信息包括各行代碼的運行情況和根據運行情況對各行代碼所進行的標記;根據所述覆蓋率信息中的運行情況和標記確定被運行過的代碼;返回所有被運行過的代碼,以從所述被運行過的代碼中查詢并定位軟件缺陷。本申請還提供一種實現前述方法的軟件缺陷定位系統。本申請的軟件缺陷定位方法及系統,能夠實現軟件缺陷的快速定位。
文檔編號G06F11/36GK103106133SQ20111035363
公開日2013年5月15日 申請日期2011年11月9日 優(yōu)先權日2011年11月9日
發(fā)明者馬治國, 李國棟, 商錦波 申請人:阿里巴巴集團控股有限公司