專利名稱:代碼覆蓋率確定方法及系統(tǒng)、代碼覆蓋檢測方法及系統(tǒng)的制作方法
代碼覆蓋率確定方法及系統(tǒng)、代碼覆蓋檢測方法及系統(tǒng)技術領域
本申請涉及軟件測試技術領域,特別是涉及一種基于日志文件的代碼覆蓋率確定方法及系統(tǒng)、代碼覆蓋檢測方法及系統(tǒng)。
背景技術:
在計算機程序的測試過程中,代碼覆蓋率是評價測試活動覆蓋產(chǎn)品代碼的指標,用來衡量測試對程序代碼的覆蓋程度。通過代碼覆蓋率統(tǒng)計,我們能了解到程序中有多少的代碼被執(zhí)行了,對哪些代碼的測試覆蓋程序還不夠,從而發(fā)現(xiàn)程序可能會出現(xiàn)的問題。
常見的一種代碼覆蓋率確定方法為對被測試代碼的運行情況進行標記,最后根據(jù)標記來統(tǒng)計被運行過的代碼數(shù)量,然后與代碼總量進行比較確定出代碼覆蓋率。例如,一種方法為:確定被測試程序的總代碼量、被測試程序的基礎地址以及各代碼行的相對虛擬地址,根據(jù)基礎地址和相對虛擬地址在各代碼行內(nèi)設置中斷,監(jiān)測被測試程序執(zhí)行過程中是否有中斷發(fā)生,并對發(fā)生中斷的代碼行進行標記。最后累計已標記的代碼行來獲取被執(zhí)行的代碼總量。被執(zhí)行的代碼總量除以被測試程序的總代碼量即為被測試程序的代碼覆蓋率。還有一種方法為:在測試之前對被測試程序的源代碼和配置進行修改,在需要進行代碼覆蓋率統(tǒng)計的源代碼上增加調(diào)試信息輸出設置,在測試過程中,程序內(nèi)部根據(jù)源代碼內(nèi)增加的調(diào)試信息記錄被執(zhí)行過的代碼,然后在測試結束時根據(jù)標記獲取被執(zhí)行過的代碼,并與源代碼總量進行比較獲取代碼覆蓋率。
前述的通過對源代碼運行情況進行標記來確定代碼覆蓋率的方式都需要預先對源代碼進行處理,當源代碼總量巨大時,此種方式無疑會產(chǎn)生巨大的處理工作量,影響測試進度。另外,因為需要對源代碼中進行處理,此種確定代碼覆蓋率的方法僅適用于程序測試階段,在程序?qū)嶋H運行中則無法實現(xiàn),限制了其適用范圍。發(fā)明內(nèi)容
本申請所要解決的技術問題是提供一種代碼覆蓋率確定方法及系統(tǒng)、代碼覆蓋檢測方法及系統(tǒng),能夠解決代碼覆蓋確定過程中工作量大、費時費力的情況。
為了解決上述問題,本申請公開了一種代碼覆蓋率確定方法,包括以下步驟:
獲取程序的源代碼,分析所述源代碼中日志文件輸出點的理論數(shù)量和位置信息;
獲取程序運行時實際輸出的日志文件,基于每一個日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量;
基于所述源代碼中日志文件輸出點的理論數(shù)量和實際輸出日志文件的日志文件輸出點的數(shù)量得到所述程序的代碼覆蓋率。
進一步地,所述基于每一個日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量包括:
將所有包含有同一位置信息的日志文件合并為一個;
統(tǒng)計合并后的日 志文件的總量,即為實際輸出日志文件的日志輸出點的數(shù)量。
進一步地,所述基于日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量包括:統(tǒng)計實際輸出的日志文件的總量;基于所述位置信息統(tǒng)計每一個日志文件輸出點所輸出的日志文件實際數(shù)量,若大于1,則用實際數(shù)量減去I得到重復次數(shù);用總量減去所有的重復次數(shù)得到最終的實際輸出日志文件的日志文件輸出點的數(shù)量。進一步地,所述基于日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量包括:SI,建立數(shù)量記錄表,其中數(shù)量的初始值為O ;S2,選取一個實際輸出的日志文件,獲取其中所記載的對應日志文件輸出點的位
置信息;S3,判斷數(shù)量記錄中是否包含該位置信息,若不包含,則在數(shù)量記錄中添加該位置信息,并將數(shù)量加I,進行步驟S4 ;反之,則進行步驟S4 ;
S4,判斷是否還有實際輸出的日志文件,若是,則返回步驟S2,反之,則確定數(shù)量紀錄表中的數(shù)量值為實際輸出日志文件的日志文件輸出點的數(shù)量。進一步地,所述獲取程序運行時實際輸出的日志文件包括:從程序預定的存儲位置讀取程序輸出的日志文件;或從程序預定的接口接收程序發(fā)送的日志文件。進一步地,所述分析所述源代碼中日志文件輸出點的理論數(shù)量包括:分析不同文件夾中所包含的源代碼的日志文件輸出點的理論數(shù)量;所述程序運行時實際輸出日志文件的日志文件輸出點的數(shù)量包括各文件夾中實際輸出日志文件的日志文件輸出點的數(shù)量。為了解決上述問題,本申請還公開了一種代碼覆蓋率確定系統(tǒng),包括:日志文件輸出點信息獲取模塊,用于獲取程序的源代碼,并分析所述源代碼中日志文件輸出點的理論數(shù)量和位置信息;實際日志文件輸出點數(shù)量確定模塊,用于獲取程序運行時實際輸出的日志文件,基于每一個日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量;代碼覆蓋率確定模塊,用于基于所述源代碼中日志文件輸出點的理論數(shù)量和實際輸出日志文件的日志文件輸出點的數(shù)量得到所述程序的代碼覆蓋率。進一步地,所述實際日志文件輸出點數(shù)量確定模塊實際日志文件輸出點數(shù)量確定模塊包括:讀取單元,用于從程序預定的存儲位置讀取程序輸出的日志文件;或接收單元,用于從程序預定的接口接收程序發(fā)送的日志文件。為了解決上述問題,本申請還公開了一種代碼覆蓋檢測方法,包括以下步驟:基于所述實際輸出的日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,確定源代碼中實際輸出日志文件的日志文件輸出點;基于所述實際輸出日志文件的日志文件輸出點和理論上的日志文件輸出點,確定出未輸出日志文件的日志文件輸出點;
基于所述未輸出日志文件的日志文件輸出點確定出未被覆蓋到的代碼。
為了解決上述問題,本申請還公開了一種代碼覆蓋檢測方法,包括以下步驟:
獲取程序在不同運行環(huán)境中的實際輸出的日志文件;
基于所有運行環(huán)境中實際輸出的日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,確定在某些運行環(huán)境中輸出而在其它運行環(huán)境中未輸出日志文件的日志文件輸出點;
基于所述未輸出日志文件的日志文件輸出點確定出對應運行環(huán)境中未被覆蓋到的代碼。
為了解決上述問題,本申請還公開了一種代碼覆蓋檢測系統(tǒng),包括:
日志文件輸出點確定模塊,用于基于所述實際輸出的日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,確定源代碼中實際輸出日志文件的日志文件輸出點;
比較模塊,用于基于所述實際輸出日志文件的日志文件輸出點和理論上的日志文件輸出點,確定出未輸出日志文件的日志文件輸出點;或用于比較不同運行環(huán)境中實際輸出日志文件,確定出在某些運行環(huán)境中輸出而在其它運行環(huán)境中未輸出日志文件的日志文件輸出點;
未覆蓋代碼確定模塊,用于基于未輸出日志文件的日志文件輸出點確定出未被覆蓋到的代碼。
與現(xiàn)有技術相比 ,本申請包括以下優(yōu)點:
本申請基于日志文件來確定代碼覆蓋率,通過分析源代碼中理論上應該輸出日志文件的日志文件輸出點,再獲取實際輸出的日志文件中記載的對應日志輸出點的數(shù)量,從而可以快速的確定出代碼覆蓋率。因為日志文件輸出點與若干代碼對應,如果其能正常輸出,便表示與之對應的代碼被運行過,反之,則說明與之對應的代碼未被運行過,因此通過日志文件來確定代碼覆蓋率所得到的最終值雖然不是精確的運行過的代碼行數(shù)與未被運行過的代碼行數(shù)的比值,但是可以準確的表示出代碼運行的狀況,可以很好滿足依據(jù)代碼覆蓋率來檢測程序、發(fā)現(xiàn)問題的要求。通過此種方式來確定代碼覆蓋率無需對源代碼進行處理,而是借助于源代碼本身資源實現(xiàn),從而可以節(jié)省測試工作量和確定代碼覆蓋率的時間。另外,因為未對源代碼進行處理,除了在測試環(huán)境中可以實現(xiàn),在實際運行環(huán)境中也可以實現(xiàn),具有較好的適用性。
進一步地,本申請還基于日志文件來確定未被覆蓋的代碼,可以快速的查找到源代碼中未被覆蓋運行的代碼。特別的,通過對不同運行環(huán)境中的日志文件進行比較,還可以查找到不同運行環(huán)境中未被覆蓋運行的代碼,從而可以幫助查找到平常方法不易找到的測試死角,便于發(fā)現(xiàn)問題。
當然,實施本申請的任一產(chǎn)品不一定需要同時達到以上所述的所有優(yōu)點。
圖1是本申請的代碼覆蓋率確定方法實施例一的流程圖2是本申請的代碼覆蓋率確定方法實施例二的流程圖3是本申請的代碼覆蓋檢測方法實施例一的流程圖4是本申請的代碼覆蓋檢測方法實施例二的流程圖;圖5是本申請的代碼覆蓋率確定系統(tǒng)實施例一的結構示意圖;圖6是本申請的代碼覆蓋檢測系統(tǒng)實施例一的結構示意圖。
具體實施例方式為使本申請的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結合附圖和具體實施方式
對本申請作進一步詳細的說明。參照圖1,示出本申請的一種基于日志文件的代碼覆蓋率確定方法實施例一,包括以下步驟:步驟101,獲取程序的源代碼,分析所述源代碼中日志文件輸出點的理論數(shù)量和位
置信息。一般來說,為了能夠在程序后期維護、檢查過程中更容易發(fā)現(xiàn)和解決實際問題,源代碼中都會設置日志文件輸出點,記錄對應的代碼行的運行情況。一個日志文件輸出點通常會對應若干代碼行,如果這些代 碼行能夠正常運行,就會有對應的日志文件輸出。這些日志文件輸出點通常會有預定的格式標示出來,通過掃描分析程序的源代碼,便可以獲取到設置的日志文件輸出點、該日志文件輸出點在源代碼中的位置信息,以及對應的對他日志內(nèi)容(例如日志寫入的記錄,日志級別等等),從而便可以得出日志文件輸出點的理論數(shù)量,即假設程序的所有源代碼都正常執(zhí)行時,輸出日志文件的日志文件輸出點的總量。常見的掃描過程為:對日志程序的特征進行整個源代碼的掃描,確定整個源代碼中所有日志的信息,也可以通過ctag等方式來替代全文掃描。 步驟102,獲取程序運行時實際輸出的日志文件,基于每一個日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量。因為程序運行過程中,如果應該輸出日志文件位置的代碼行被運行過,則必定會有對應的日志文件輸出,通過統(tǒng)計程序運行時輸出日志文件,并分析其中所記載的對應日志文件輸出點的位置信息,便可以統(tǒng)計出實際輸出日志文件的日志文件輸出點的數(shù)量,即可統(tǒng)計出被運行過的代碼。其中,程序運行時輸出的日志文件一般會按照預訂路徑存儲,可以直接從存儲的地方讀取這些日志文件,也可以修改程序運行時的輸出日志文件的存儲路徑或者在程序中添加接口,使其直接將日志文件輸出給代碼覆蓋率確定系統(tǒng)??梢岳斫猓瑸榱吮苊庥绊懗绦虻恼_\行,可以設定程序輸出日志文件到代碼覆蓋率確定系統(tǒng)的頻率,例如,每半小時或者一小時輸出一次,或者在程序運行完成后一次性輸出。確定實際輸出日志文件的日志文件輸出點的數(shù)量可以通過多種方式確定。若每一個日志文件輸出點只輸出一個日志文件,則可以實際輸出日志文件的總量即為實際輸出日志文件的日志文件輸出點的數(shù)量。但是在實際運行中,可能會出現(xiàn)同一日志文件輸出點輸出多個日志文件的情況,為了保證結果的準確性,還需要去除重復的部分。具體可以通過如下方式來實現(xiàn):第一種為:首先分析所有實際輸出的日志文件的內(nèi)容,獲取其中記載的對應日志文件輸出點在源代碼中的位置,然后將所有包含有同一位置信息的日志文件合并為一個;統(tǒng)計合并后的日志文件的總量,即為實際輸出日志文件的日志輸出點的數(shù)量。
第二種為:統(tǒng)計實際輸出的日志文件的總量;基于日志文件中記載的對應日志輸出點的位置信息統(tǒng)計每一個日志文件輸出點所輸出的日志文件實際數(shù)量,若大于I,則用實際數(shù)量減去I得到重復次數(shù);用總量減去所有的重復次數(shù)得到最終的實際輸出日志文件的日志文件輸出點的數(shù)量。例如,實際輸出的日志文件的總量200,某一位置輸出的日志文件實際數(shù)量為10,則用10減I之后得到重復的次數(shù)為9,然后再用200減去9。其他位置若有相同情況,也采用相同方法,直到所有重復次數(shù)都已減完得到的最終數(shù)即為實際輸出日志文件的日志文件輸出點的數(shù)量。第三種為:SI,建立數(shù)量記錄表,其中數(shù)量的初始值為O ;S2,選取一個實際輸出的日志文件,獲取其中所記載的對應日志文件輸出點的位
置信息;S3,判斷數(shù)量記錄中是否包含該位置信息,若不包含,則在數(shù)量記錄中添加該位置信息,并將數(shù)量加I,進行步驟S4 ;反之,則進行步驟S4 ; S4,判斷是否還有實際輸出的日志文件,若是,則返回步驟S2,反之,則確定數(shù)量紀錄表中的數(shù)量值為實際輸出日志文件的日志文件輸出點的數(shù)量??梢岳斫?,除了上述方式,還可以根據(jù)實際情況采用其他方式,只要能將其中的重復部分減去即可,本申請對此并不限制,步驟103,基于所述源代碼中日志文件輸出點的理論數(shù)量和實際輸出日志文件的日志文件輸出點的數(shù)量得到所述程序的代碼覆蓋率。源代碼中日志文·件輸出點的理論數(shù)量和實際輸出日志文件的日志文件輸出點的數(shù)量的比值即為代碼覆蓋率。。本申請的代碼覆蓋率因為不涉及實際代碼數(shù)量,因此得到的代碼覆蓋率與實際的代碼覆蓋率可能并不是絕對數(shù)值上的相同。但是,可以理解的是,代碼覆蓋率的確定不是僅僅得到一個絕對數(shù)值,而是需要從這個代碼覆蓋率中去查找源代碼中可能會出現(xiàn)的問題,所以,采用本申請的代碼覆蓋率的方法得到的雖然不是代碼覆蓋率的準確數(shù)值,但是其中輸出的日志文件表示的是與該日志文件輸出點對應的若干代碼行被運行過,可以準確的體現(xiàn)出源代碼中各部分代碼整體運行的情況。例如,如果一個日志文件輸出點在實際運行時并沒有日志文件輸出,就說明這個地方的源代碼出現(xiàn)了問題,即使這個日志文件輸出點對應的若干代碼行中有一部分被運行過,在確定代碼覆蓋率時也可以不考慮這幾行,因為考慮與否都不會影響查找源代碼的問題。參照圖2,示出本申請的基于日志文件的代碼覆蓋率方法實施例二,因為一個程序通常包含多個功能模塊,在編寫源代碼的過程中,通常會將各功能模塊對應的代碼分別放置在不同的文件夾中,以便更好的查找區(qū)分。因此本申請的代碼覆蓋率方法實施例二還包括以下步驟:步驟201,獲取程序的源代碼,分析不同文件夾中所包含的源代碼的日志文件輸出點的理論數(shù)量。步驟202,獲取程序運行時各文件夾中實際輸出日志文件的日志輸出點的數(shù)量。步驟203,基于所述各文件夾中日志文件輸出點的理論數(shù)量和實際輸出日志文件的日志文件輸出點的數(shù)量得到各文件夾的代碼覆蓋率。通過分析各文件夾的代碼覆蓋率可以更為直觀的確定程序的源代碼中問題所在的地方。例如通過計算得出,某一文件夾的代碼覆蓋率為100%,而另一文件夾的代碼覆蓋率為30%,那么可以判斷出后一文件夾對應的源代碼可能有問題存在,從而可以方便后續(xù)維護修改源代碼時定位。
可以理解,采用此種方式確定源代碼整體的代碼覆蓋率時,可以直接將步驟201和步驟202的數(shù)量分別加總,然后采用與實施例一相同的方式來實現(xiàn),在此不再贅述。
另外,因為程序運行時輸出的日志文件會包括以下字段信息:時間、級別(Fatal/Error/Warning/Info/Debug等)、日志文件輸出點在源代碼的哪個文件及哪一行輸出,和日志的具體內(nèi)容。通過對這些日志文件中的信息的分析可以準確得出在某一次運行過程中,日志文件的輸出情況,并能夠準確的與源代碼中的具體代碼行進行對應。例如,程序運行時輸出的一個日志文件如下所示:
[2011-09-21 11:44:57.009137](時間)
[WARNING]
[18316]
[build/debug64/component/sub_path/file.cpp:1181]
—TARGET_ID—:sys/component
PROFILING:Tubo start the fuxi work item:1316576697
可以看出,該日志文件時間為“2011-09-21 11:44:57.009137”,級別為“WARNING”,其對應的日志文件輸出點在源代碼中的位置為“build/debug64/component/sub_path/file.cpp: 1181,,。
因此,本申請還可以基于日志文件中的信息來實現(xiàn)代碼覆蓋的檢測,確定出運行環(huán)境中某一程序的代碼覆蓋程度。
參照圖3,示出一種基于日志文件的代碼覆蓋檢測方法實施例一,包括:
步驟301,基于所述實際輸出的日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,確定源代碼中實際輸出日志文件的日志文件輸出點。
步驟302,基于所述實際輸出日志文件的日志文件輸出點和理論上的日志文件輸出點,確定出未輸出日志文件的日志文件輸出點。
步驟303,基于所述未輸出日志文件的日志文件輸出點確定出未被覆蓋到的代碼。
因為日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,從而可以確定源代碼被運行的代碼所對應的日志文件輸出點所在位置,通過與理論上的日志文件輸出點進行比較,便可以確定出未輸出日`志文件的日志文件輸出點,從而確定出未被覆蓋到的代碼。
優(yōu)選地,程序的測試通常會在不同環(huán)境中進行,從而盡可能的模擬出其實際運行環(huán)境,實現(xiàn)多角度檢測。例如,單元測試、集成測試、生產(chǎn)環(huán)境等等,不同的運行環(huán)境,代碼覆蓋率并不會完全相同,也即其實際輸出的日志文件也可能會不同。因此,參照圖4,示出本申請的基于日志文件的代碼覆蓋檢測方法實施例二,其可以用于比較不同運行環(huán)境中的代碼覆蓋程度,包括以下步驟:
步驟401,獲取程序在不同運行環(huán)境中的實際輸出的日志文件。
步驟402,基于所有運行環(huán)境中實際輸出的日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,確定在某些運行環(huán)境中輸出而在其它運行環(huán)境中未輸出日志文件的日志文件輸出點。步驟403,基于所述未輸出日志文件的日志文件輸出點確定出對應運行環(huán)境中未被覆蓋到的代碼。若某一日志文件輸出點的源代碼位置未在所有環(huán)境下的日志文件中記載,則說明這一個源代碼位置對應的日志文件輸出點在某些環(huán)境下并未輸出日志文件,則可以確定在未記載該源代碼位置的日志文件所對應的環(huán)境中存在未覆蓋到的代碼。例如,程序的運行環(huán)境包括單元測試環(huán)境,集成測試環(huán)境以及生產(chǎn)環(huán)境三種。通過比較三種運行環(huán)境日志文件中的記錄如果發(fā)現(xiàn)在單元測試環(huán)境和集成測試環(huán)境中有對應的日志文件,而在生產(chǎn)環(huán)境中沒有,則說明在單元測試環(huán)境和集成測試環(huán)境中覆蓋的一些代碼,在生產(chǎn)環(huán)境中并未被覆蓋到。因此,通過對日志文件記載的信息進行比較,便可以快速的找到未被覆蓋到的代碼,從而便于后續(xù)對程序的修改和維護。參照圖5,示出本申請的代碼覆蓋率確定系統(tǒng)實施例一,包括日志文件輸出點信息獲取模塊10、實際日志文件輸出點數(shù)量確定模塊20和代碼覆蓋率確定模塊30。日志文件輸出點信息獲取模塊10,用于獲取程序的源代碼,并分析所述源代碼中日志文件輸出點的理論數(shù)量和位置信息。實際日志文件輸出點數(shù)量確定模塊20,用于獲取程序運行時實際輸出的日志文件,基于每一個日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量。優(yōu)選地,其包括讀取單元或接收單元。讀取單元,用于從程序預定的存儲位置讀取程序輸出的日志文件。接收單元,用于從程序預定的接口接收程序發(fā)送的日志文件。其中,實際輸出日志文件的日志文件輸出點的數(shù)量可以采用但不限于如下方式確定:第一種為:首先分析所有實際輸出的日志文件的內(nèi)容,獲取其中記載的對應日志文件輸出點在源代碼中的位置,然后將所有包含有同一位置信息的日志文件合并為一個;統(tǒng)計合并后的日志文件的總量 ,即為實際輸出日志文件的日志輸出點的數(shù)量。第二種為:統(tǒng)計實際輸出的日志文件的總量;基于日志文件中記載的對應日志輸出點的位置信息統(tǒng)計每一個日志文件輸出點所輸出的日志文件實際數(shù)量,若大于I,則用實際數(shù)量減去I得到重復次數(shù);用總量減去所有的重復次數(shù)得到最終的實際輸出日志文件的日志文件輸出點的數(shù)量。第三種為:SI,建立數(shù)量記錄表,其中數(shù)量的初始值為O ;S2,選取一個實際輸出的日志文件,獲取其中所記載的對應日志文件輸出點的位
置信息;S3,判斷數(shù)量記錄中是否包含該位置信息,若不包含,則在數(shù)量記錄中添加該位置信息,并將數(shù)量加I,進行步驟S4 ;反之,則進行步驟S4 ;S4,判斷是否還有實際輸出的日志文件,若是,則返回步驟S2,反之,則確定數(shù)量紀錄表中的數(shù)量值為實際輸出日志文件的日志文件輸出點的數(shù)量。代碼覆蓋率確定模塊30,用于基于所述源代碼中日志文件輸出點的理論數(shù)量和實際輸出日志文件的日志文件輸出點的數(shù)量得到所述程序的代碼覆蓋率。參照圖6,示出本申請的基于日志文件的代碼覆蓋檢測系統(tǒng),包括日志文件輸出點確定模塊50、比較模塊60和未覆蓋代碼確定模塊70。
日志文件輸出點確定模塊50,用于基于所述實際輸出的日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,確定源代碼中實際輸出日志文件的日志文件輸出點。
比較模塊60,用于基于所述實際輸出日志文件的日志文件輸出點和理論上的日志文件輸出點,確定出未輸出日志文件的日志文件輸出點;或用于比較不同運行環(huán)境中實際輸出日志文件,確定出在某些運行環(huán)境中輸出而在其它運行環(huán)境中未輸出日志文件的日志文件輸出點。
未覆蓋代碼確定模塊70,用于基于未輸出日志文件的日志文件輸出點確定出未被覆蓋到的代碼。
本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于系統(tǒng)實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
以上對本申請所提供的代碼覆蓋率確定方法及系統(tǒng)、代碼覆蓋檢測方法及系統(tǒng)進行了詳細介紹,本文中應用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領域的一般技術人員,依據(jù)本申請的思想,在具體實施方式
及應用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應理解為對 本申請的限制。
權利要求
1.一種代碼覆蓋率確定方法,其特征在于,包括以下步驟: 獲取程序的源代碼,分析所述源代碼中日志文件輸出點的理論數(shù)量和位置信息; 獲取程序運行時實際輸出的日志文件,基于每一個日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量; 基于所述源代碼中日志文件輸出點的理論數(shù)量和實際輸出日志文件的日志文件輸出點的數(shù)量得到所述程序的代碼覆蓋率。
2.如權利要求1所述的代碼覆蓋率確定方法,其特征在于,所述基于每一個日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量包括: 將所有包含有同一位置信息的日志文件合并為一個; 統(tǒng)計合并后的日志文件的總量,即為實際輸出日志文件的日志輸出點的數(shù)量。
3.如權利要求1所述的代碼覆蓋率確定方法,其特征在于,所述基于日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量包括: 統(tǒng)計實際輸出的日志文件的總量; 基于所述位置信息統(tǒng)計每一個日志文件輸出點所輸出的日志文件實際數(shù)量,若大于I,則用實際數(shù)量減去I得到重復次數(shù); 用總量減去所有的重復次數(shù)得到最終的實際輸出日志文件的日志文件輸出點的數(shù)量。
4.如權利要求1所述的代碼覆蓋率確定方法,其特征在于,所述基于日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量包括: SI,建立數(shù)量記錄表,其中數(shù)量的初始值為O ; S2,選取一個實際輸出的日志文件,獲取其中所記載的對應日志文件輸出點的位置信息; S3,判斷數(shù)量記錄中是否包含該位置信息,若不包含,則在數(shù)量記錄中添加該位置信息,并將數(shù)量加I,進行步驟S4 ;反之,則進行步驟S4 ; S4,判斷是否還有實際輸出的日志文件,若是,則返回步驟S2,反之,則確定數(shù)量紀錄表中的數(shù)量值為實際輸出日志文件的日志文件輸出點的數(shù)量。
5.如權利要求1至4任一項所述的代碼覆蓋率確定方法,其特征在于,所述獲取程序運行時實際輸出的日志文件包括: 從程序預定的存儲位置讀取程序輸出的日志文件;或 從程序預定的接口接收程序發(fā)送的日志文件。
6.如權利要求1至4任一項所述的代碼覆蓋率確定方法,其特征在于,所述分析所述源代碼中日志文件輸出點的理論數(shù)量包括:分析不同文件夾中所包含的源代碼的日志文件輸出點的理論數(shù)量; 所述程序運行時實際輸出日志文件的日志文件輸出點的數(shù)量包括各文件夾中實際輸出日志文件的日志文件輸出點的數(shù)量。
7.一種代碼 覆蓋率確定系統(tǒng),其特征在于,包括: 日志文件輸出點信息獲取模塊,用于獲取程序的源代碼,并分析所述源代碼中日志文件輸出點的理論數(shù)量和位置信息; 實際日志文件輸出點數(shù)量確定模塊,用于獲取程序運行時實際輸出的日志文件,基于每一個日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量; 代碼覆蓋率確定模塊,用于基于所述源代碼中日志文件輸出點的理論數(shù)量和實際輸出日志文件的日志文件輸出點的數(shù)量得到所述程序的代碼覆蓋率。
8.如權利要求7所述的代碼覆蓋率確定系統(tǒng),其特征在于,所述實際日志文件輸出點數(shù)量確定模塊實際日志 文件輸出點數(shù)量確定模塊包括: 讀取單元,用于從程序預定的存儲位置讀取程序輸出的日志文件;或 接收單元,用于從程序預定的接口接收程序發(fā)送的日志文件。
9.一種代碼覆蓋檢測方法,其特征在于,包括以下步驟: 基于所述實際輸出的日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,確定源代碼中實際輸出日志文件的日志文件輸出點; 基于所述實際輸出日志文件的日志文件輸出點和理論上的日志文件輸出點,確定出未輸出日志文件的日志文件輸出點; 基于所述未輸出日志文件的日志文件輸出點確定出未被覆蓋到的代碼。
10.一種代碼覆蓋檢測方法,其特征在于,包括以下步驟: 獲取程序在不同運行環(huán)境中的實際輸出的日志文件; 基于所有運行環(huán)境中實際輸出的日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,確定在某些運行環(huán)境中輸出而在其它運行環(huán)境中未輸出日志文件的日志文件輸出點; 基于所述未輸出日志文件的日志文件輸出點確定出對應運行環(huán)境中未被覆蓋到的代碼。
11.一種代碼覆蓋檢測系統(tǒng),其特征在于,包括: 日志文件輸出點確定模塊,用于基于所述實際輸出的日志文件中記載的對應日志文件輸出點在源代碼中的位置信息,確定源代碼中實際輸出日志文件的日志文件輸出點; 比較模塊,用于基于所述實際輸出日志文件的日志文件輸出點和理論上的日志文件輸出點,確定出未輸出日志文件的日志文件輸出點;或用于比較不同運行環(huán)境中實際輸出日志文件,確定出在某些運行環(huán)境中輸出而在其它運行環(huán)境中未輸出日志文件的日志文件輸出點; 未覆蓋代碼確定模塊,用于基于未輸出日志文件的日志文件輸出點確定出未被覆蓋到的代碼。
全文摘要
本申請?zhí)峁┝艘环N代碼覆蓋率確定方法,包括以下步驟獲取程序的源代碼,分析所述源代碼中日志文件輸出點的理論數(shù)量和位置信息;獲取程序運行時實際輸出的日志文件,基于每一個日志文件中所記載的對應日志文件輸出點的位置信息確定實際輸出日志文件的日志文件輸出點的數(shù)量;基于所述源代碼中日志文件輸出點的理論數(shù)量和實際輸出日志文件的日志文件輸出點的數(shù)量得到所述程序的代碼覆蓋率。本申請還提供了一種實現(xiàn)前述方法的代碼覆蓋率確定系統(tǒng)以及代碼覆蓋檢測方法及系統(tǒng)。本申請的代碼覆蓋率確定方法及系統(tǒng)、代碼覆蓋檢測方法及系統(tǒng),能夠節(jié)省測試工作量和確定代碼覆蓋率的時間,快速確定出代碼覆蓋率。
文檔編號G06F11/36GK103246602SQ20121003307
公開日2013年8月14日 申請日期2012年2月14日 優(yōu)先權日2012年2月14日
發(fā)明者蔡華, 周琦, 孫廷韜 申請人:阿里巴巴集團控股有限公司