TWI564714B - Code coverage method and system, code covers detection methods and systems - Google Patents

Code coverage method and system, code covers detection methods and systems Download PDF

Info

Publication number
TWI564714B
TWI564714B TW101121115A TW101121115A TWI564714B TW I564714 B TWI564714 B TW I564714B TW 101121115 A TW101121115 A TW 101121115A TW 101121115 A TW101121115 A TW 101121115A TW I564714 B TWI564714 B TW I564714B
Authority
TW
Taiwan
Prior art keywords
log file
output
log
program
code
Prior art date
Application number
TW101121115A
Other languages
English (en)
Other versions
TW201333693A (zh
Inventor
Hua Cai
Qi Zhou
Ting-Tao Sun
Original Assignee
Alibaba Group Services Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alibaba Group Services Ltd filed Critical Alibaba Group Services Ltd
Publication of TW201333693A publication Critical patent/TW201333693A/zh
Application granted granted Critical
Publication of TWI564714B publication Critical patent/TWI564714B/zh

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Description

程式碼涵蓋率確定方法及系統、程式碼涵蓋檢測方法及系統
本申請案涉及軟體測試技術領域,特別是涉及一種基於日誌檔的程式碼涵蓋率確定方法及系統、程式碼涵蓋檢測方法及系統。
在電腦程式的測試過程中,程式碼涵蓋率是評價測試活動涵蓋產品程式碼的指標,用來衡量測試對程式碼的涵蓋程度。通過程式碼涵蓋率統計,我們能瞭解到程式中有多少的程式碼被執行了,對哪些程式碼的測試涵蓋程式還不夠,從而發現程式可能會出現的問題。
常見的一種程式碼涵蓋率確定方法為對被測試程式碼的運行情況進行標記,最後根據標記來統計被運行過的程式碼數量,然後與程式碼總量進行比較確定出程式碼涵蓋率。例如,一種方法為:確定被測試程式的總程式碼量、被測試程式的基礎位址以及各程式碼行的相對虛擬位址,根據基礎位址和相對虛擬位址在各程式碼行內設置中斷,監測被測試程式執行過程中是否有中斷發生,並對發生中斷的程式碼行進行標記。最後累計已標記的程式碼行來獲取被執行的程式碼總量。被執行的程式碼總量除以被測試程式的總程式碼量即為被測試程式的程式碼涵蓋率。還有一種方法為:在測試之前對被測試程式的源程式碼和配置進行修改,在需要進行程式碼涵蓋率統計的源程式碼上增 加調試資訊輸出設置,在測試過程中,程式內部根據源程式碼內增加的調試資訊記錄被執行過的程式碼,然後在測試結束時根據標記獲取被執行過的程式碼,並與源程式碼總量進行比較獲取程式碼涵蓋率。
前述的通過對源程式碼運行情況進行標記來確定程式碼涵蓋率的方式都需要預先對源程式碼進行處理,當源程式碼總量巨大時,此種方式無疑會產生巨大的處理工作量,影響測試進度。另外,因為需要對源程式碼中進行處理,此種確定程式碼涵蓋率的方法僅適用於程式測試階段,在程式實際運行中則無法實現,限制了其適用範圍。
本申請案所要解決的技術問題是提供一種程式碼涵蓋率確定方法及系統、程式碼涵蓋檢測方法及系統,能夠解決程式碼涵蓋確定過程中工作量大、費時費力的情況。
為了解決上述問題,本申請案揭示了一種程式碼涵蓋率確定方法,包括以下步驟:獲取程式的源程式碼,分析該源程式碼中日誌檔輸出點的理論數量和位置資訊;獲取程式運行時實際輸出的日誌檔,基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量;基於該源程式碼中日誌檔輸出點的理論數量和實際輸出日誌檔的日誌檔輸出點的數量得到該程式的程式碼涵蓋 率。
進一步地,該基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量包括:將所有包含有同一位置資訊的日誌檔合併為一個;統計合併後的日誌檔的總量,即為實際輸出日誌檔的日誌輸出點的數量。
進一步地,該基於日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量包括:統計實際輸出的日誌檔的總量;基於該位置資訊統計每一個日誌檔輸出點所輸出的日誌檔實際數量,若大於1,則用實際數量減去1得到重複次數;用總量減去所有的重複次數得到最終的實際輸出日誌檔的日誌檔輸出點的數量。
進一步地,該基於日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量包括:S1,建立數量記錄表,其中數量的初始值為0;S2,選取一個實際輸出的日誌檔,獲取其中所記載的對應日誌檔輸出點的位置資訊;S3,判斷數量記錄中是否包含該位置資訊,若不包含,則在數量記錄中添加該位置資訊,並將數量加1,進 行步驟S4;反之,則進行步驟S4;S4,判斷是否還有實際輸出的日誌檔,若是,則返回步驟S2,反之,則確定數量紀錄表中的數量值為實際輸出日誌檔的日誌檔輸出點的數量。
進一步地,該獲取程式運行時實際輸出的日誌檔包括:從程式預定的儲存位置讀取程式輸出的日誌檔;或從程式預定的介面接收程式發送的日誌檔。
進一步地,該分析該源程式碼中日誌檔輸出點的理論數量包括:分析不同檔案夾中所包含的源程式碼的日誌檔輸出點的理論數量;該程式運行時實際輸出日誌檔的日誌檔輸出點的數量包括各檔案夾中實際輸出日誌檔的日誌檔輸出點的數量。
為了解決上述問題,本申請案還揭示了一種程式碼涵蓋率確定系統,包括:日誌檔輸出點資訊獲取模組,用於獲取程式的源程式碼,並分析該源程式碼中日誌檔輸出點的理論數量和位置資訊;實際日誌檔輸出點數量確定模組,用於獲取程式運行時實際輸出的日誌檔,基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量;程式碼涵蓋率確定模組,用於基於該源程式碼中日誌檔輸出點的理論數量和實際輸出日誌檔的日誌檔輸出點的 數量得到該程式的程式碼涵蓋率。
進一步地,該實際日誌檔輸出點數量確定模組實際日誌檔輸出點數量確定模組包括:讀取單元,用於從程式預定的儲存位置讀取程式輸出的日誌檔;或接收單元,用於從程式預定的介面接收程式發送的日誌檔。
為了解決上述問題,本申請案還揭示了一種程式碼涵蓋檢測方法,包括以下步驟:基於該實際輸出的日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,確定源程式碼中實際輸出日誌檔的日誌檔輸出點;基於該實際輸出日誌檔的日誌檔輸出點和理論上的日誌檔輸出點,確定出未輸出日誌檔的日誌檔輸出點;基於該未輸出日誌檔的日誌檔輸出點確定出未被涵蓋到的程式碼。
為了解決上述問題,本申請案還揭示了一種程式碼涵蓋檢測方法,包括以下步驟:獲取程式在不同運行環境中的實際輸出的日誌檔;基於所有運行環境中實際輸出的日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,確定在某些運行環境中輸出而在其他運行環境中未輸出日誌檔的日誌檔輸出點;基於該未輸出日誌檔的日誌檔輸出點確定出對應運行 環境中未被涵蓋到的程式碼。
為了解決上述問題,本申請案還揭示了一種程式碼涵蓋檢測系統,包括:日誌檔輸出點確定模組,用於基於該實際輸出的日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,確定源程式碼中實際輸出日誌檔的日誌檔輸出點;比較模組,用於基於該實際輸出日誌檔的日誌檔輸出點和理論上的日誌檔輸出點,確定出未輸出日誌檔的日誌檔輸出點;或用於比較不同運行環境中實際輸出日誌檔,確定出在某些運行環境中輸出而在其他運行環境中未輸出日誌檔的日誌檔輸出點;未涵蓋程式碼確定模組,用於基於未輸出日誌檔的日誌檔輸出點確定出未被涵蓋到的程式碼。
與現有技術相比,本申請案包括以下優點:
本申請案基於日誌檔來確定程式碼涵蓋率,通過分析源程式碼中理論上應該輸出日誌檔的日誌檔輸出點,再獲取實際輸出的日誌檔中記載的對應日誌輸出點的數量,從而可以快速的確定出程式碼涵蓋率。因為日誌檔輸出點與若干程式碼對應,如果其能正常輸出,便表示與之對應的程式碼被運行過,反之,則說明與之對應的程式碼未被運行過,因此通過日誌檔來確定程式碼涵蓋率所得到的最終值雖然不是精確的運行過的程式碼行數與未被運行過的程式碼行數的比值,但是可以準確的表示出程式碼運行的狀況,可以很好滿足依據程式碼涵蓋率來檢測程式、發現問 題的要求。通過此種方式來確定程式碼涵蓋率無需對源程式碼進行處理,而是借助於源程式碼本身資源實現,從而可以節省測試工作量和確定程式碼涵蓋率的時間。另外,因為未對源程式碼進行處理,除了在測試環境中可以實現,在實際運行環境中也可以實現,具有較好的適用性。
進一步地,本申請案還基於日誌檔來確定未被涵蓋的程式碼,可以快速的查找到源程式碼中未被涵蓋運行的程式碼。特別的,通過對不同運行環境中的日誌檔進行比較,還可以查找到不同運行環境中未被涵蓋運行的程式碼,從而可以幫助查找到平常方法不易找到的測試死角,便於發現問題。
當然,實施本申請案的任一產品不一定需要同時達到以上所述的所有優點。
為使本申請案的上述目的、特徵和優點能夠更加明顯易懂,下面結合附圖和具體實施方式對本申請案作進一步詳細的說明。
參照圖1,示出本申請案的一種基於日誌檔的程式碼涵蓋率確定方法實施例一,包括以下步驟:
步驟101,獲取程式的源程式碼,分析該源程式碼中日誌檔輸出點的理論數量和位置資訊。
一般來說,為了能夠在程式後期維護、檢查過程中更容易發現和解決實際問題,源程式碼中都會設置日誌檔輸 出點,記錄對應的程式碼行的運行情況。一個日誌檔輸出點通常會對應若干程式碼行,如果這些程式碼行能夠正常運行,就會有對應的日誌檔輸出。這些日誌檔輸出點通常會有預定的格式標示出來,通過掃描分析程式的源程式碼,便可以獲取到設置的日誌檔輸出點、該日誌檔輸出點在源程式碼中的位置資訊,以及對應的對他日誌內容(例如日誌寫入的記錄,日誌級別等等),從而便可以得出日誌檔輸出點的理論數量,即假設程式的所有源程式碼都正常執行時,輸出日誌檔的日誌檔輸出點的總量。
常見的掃描過程為:對日誌程式的特徵進行整個源程式碼的掃描,確定整個源程式碼中所有日誌的資訊,也可以通過ctag等方式來替程式全文掃描。
步驟102,獲取程式運行時實際輸出的日誌檔,基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量。
因為程式運行過程中,如果應該輸出日誌檔位置的程式碼行被運行過,則必定會有對應的日誌檔輸出,通過統計程式運行時輸出日誌檔,並分析其中所記載的對應日誌檔輸出點的位置資訊,便可以統計出實際輸出日誌檔的日誌檔輸出點的數量,即可統計出被運行過的程式碼。
其中,程式運行時輸出的日誌檔一般會按照預訂路徑儲存,可以直接從儲存的地方讀取這些日誌檔,也可以修改程式運行時的輸出日誌檔的儲存路徑或者在程式中添加介面,使其直接將日誌檔輸出給程式碼涵蓋率確定系統。 可以理解,為了避免影響程式的正常運行,可以設定程式輸出日誌檔到程式碼涵蓋率確定系統的頻率,例如,每半小時或者一小時輸出一次,或者在程式運行完成後一次性輸出。
確定實際輸出日誌檔的日誌檔輸出點的數量可以通過多種方式確定。若每一個日誌檔輸出點隻輸出一個日誌檔,則可以實際輸出日誌檔的總量即為實際輸出日誌檔的日誌檔輸出點的數量。但是在實際運行中,可能會出現同一日誌檔輸出點輸出多個日誌檔的情況,為了保證結果的準確性,還需要去除重複的部分。具體可以通過如下方式來實現:
第一種為:首先分析所有實際輸出的日誌檔的內容,獲取其中記載的對應日誌檔輸出點在源程式碼中的位置,然後將所有包含有同一位置資訊的日誌檔合併為一個;統計合併後的日誌檔的總量,即為實際輸出日誌檔的日誌輸出點的數量。
第二種為:統計實際輸出的日誌檔的總量;基於日誌檔中記載的對應日誌輸出點的位置資訊統計每一個日誌檔輸出點所輸出的日誌檔實際數量,若大於1,則用實際數量減去1得到重複次數;用總量減去所有的重複次數得到最終的實際輸出日誌檔的日誌檔輸出點的數量。例如,實際輸出的日誌檔的總量200,某一位置輸出的日誌檔實際數量為10,則用10減1之後得到重複的次數為9,然後再用200減去9。其他位置若有相同情況,也採用相同方 法,直到所有重複次數都已減完得到的最終數即為實際輸出日誌檔的日誌檔輸出點的數量。
第三種為:S1,建立數量記錄表,其中數量的初始值為0;S2,選取一個實際輸出的日誌檔,獲取其中所記載的對應日誌檔輸出點的位置資訊;S3,判斷數量記錄中是否包含該位置資訊,若不包含,則在數量記錄中添加該位置資訊,並將數量加1,進行步驟S4;反之,則進行步驟S4;S4,判斷是否還有實際輸出的日誌檔,若是,則返回步驟S2,反之,則確定數量記錄表中的數量值為實際輸出日誌檔的日誌檔輸出點的數量。
可以理解,除了上述方式,還可以根據實際情況採用其他方式,只要能將其中的重複部分減去即可,本申請案對此並不限制,步驟103,基於該源程式碼中日誌檔輸出點的理論數量和實際輸出日誌檔的日誌檔輸出點的數量得到該程式的程式碼涵蓋率。
源程式碼中日誌檔輸出點的理論數量和實際輸出日誌檔的日誌檔輸出點的數量的比值即為程式碼涵蓋率。。本申請案的程式碼涵蓋率因為不涉及實際程式碼數量,因此得到的程式碼涵蓋率與實際的程式碼涵蓋率可能並不是絕對數值上的相同。但是,可以理解的是,程式碼涵蓋率的確定不是僅僅得到一個絕對數值,而是需要從這個程式碼 涵蓋率中去查找源程式碼中可能會出現的問題,所以,採用本申請案的程式碼涵蓋率的方法得到的雖然不是程式碼涵蓋率的準確數值,但是其中輸出的日誌檔表示的是與該日誌檔輸出點對應的若干程式碼行被運行過,可以準確的體現出源程式碼中各部分程式碼整體運行的情況。例如,如果一個日誌檔輸出點在實際運行時並沒有日誌檔輸出,就說明這個地方的源程式碼出現了問題,即使這個日誌檔輸出點對應的若干程式碼行中有一部分被運行過,在確定程式碼涵蓋率時也可以不考慮這幾行,因為考慮與否都不會影響查找源程式碼的問題。
參照圖2,示出本申請案的基於日誌檔的程式碼涵蓋率方法實施例二,因為一個程式通常包含多個功能模組,在編寫源程式碼的過程中,通常會將各功能模組對應的程式碼分別放置在不同的檔案夾中,以便更好的查找區分。因此本申請案的程式碼涵蓋率方法實施例二還包括以下步驟:
步驟201,獲取程式的源程式碼,分析不同檔案夾中所包含的源程式碼的日誌檔輸出點的理論數量。
步驟202,獲取程式運行時各檔案夾中實際輸出日誌檔的日誌輸出點的數量。
步驟203,基於該各檔案夾中日誌檔輸出點的理論數量和實際輸出日誌檔的日誌檔輸出點的數量得到各檔案夾的程式碼涵蓋率。
通過分析各檔案夾的程式碼涵蓋率可以更為直觀的確 定程式的源程式碼中問題所在的地方。例如通過計算得出,某一檔案夾的程式碼涵蓋率為100%,而另一檔案夾的程式碼涵蓋率為30%,那麼可以判斷出後一檔案夾對應的源程式碼可能有問題存在,從而可以方便後續維護修改源程式碼時定位。
可以理解,採用此種方式確定源程式碼整體的程式碼涵蓋率時,可以直接將步驟201和步驟202的數量分別加總,然後採用與實施例一相同的方式來實現,在此不再贅述。
另外,因為程式運行時輸出的日誌檔會包括以下欄位資訊:時間、級別(Fatal/Error/Warning/Info/Debug等)、日誌檔輸出點在源程式碼的哪個檔及哪一行輸出,和日誌的具體內容。通過對這些日誌檔中的資訊的分析可以準確得出在某一次運行過程中,日誌檔的輸出情況,並能夠準確的與源程式碼中的具體程式碼行進行對應。例如,程式運行時輸出的一個日誌檔如下所示:[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-2111:44:57.009137”,級別為“WARNING”,其對應的日誌檔輸出點在源程式碼 中的位置為“build/debug64/component/sub_path/file.cpp:1181”。
因此,本申請案還可以基於日誌檔中的資訊來實現程式碼涵蓋的檢測,確定出運行環境中某一程式的程式碼涵蓋程度。
參照圖3,示出一種基於日誌檔的程式碼涵蓋檢測方法實施例一,包括:
步驟301,基於該實際輸出的日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,確定源程式碼中實際輸出日誌檔的日誌檔輸出點。
步驟302,基於該實際輸出日誌檔的日誌檔輸出點和理論上的日誌檔輸出點,確定出未輸出日誌檔的日誌檔輸出點。
步驟303,基於該未輸出日誌檔的日誌檔輸出點確定出未被涵蓋到的程式碼。
因為日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,從而可以確定源程式碼被運行的程式碼所對應的日誌檔輸出點所在位置,通過與理論上的日誌檔輸出點進行比較,便可以確定出未輸出日誌檔的日誌檔輸出點,從而確定出未被涵蓋到的程式碼。
優選地,程式的測試通常會在不同環境中進行,從而盡可能的模擬出其實際運行環境,實現多角度檢測。例如,單元測試、集成測試、生產環境等等,不同的運行環境,程式碼涵蓋率並不會完全相同,也即其實際輸出的日誌檔也可能會不同。因此,參照圖4,示出本申請案的基 於日誌檔的程式碼涵蓋檢測方法實施例二,其可以用於比較不同運行環境中的程式碼涵蓋程度,包括以下步驟:
步驟401,獲取程式在不同運行環境中的實際輸出的日誌檔。
步驟402,基於所有運行環境中實際輸出的日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,確定在某些運行環境中輸出而在其他運行環境中未輸出日誌檔的日誌檔輸出點。
步驟403,基於該未輸出日誌檔的日誌檔輸出點確定出對應運行環境中未被涵蓋到的程式碼。
若某一日誌檔輸出點的源程式碼位置未在所有環境下的日誌檔中記載,則說明這一個源程式碼位置對應的日誌檔輸出點在某些環境下並未輸出日誌檔,則可以確定在未記載該源程式碼位置的日誌檔所對應的環境中存在未涵蓋到的程式碼。例如,程式的運行環境包括單元測試環境,集成測試環境以及生產環境三種。通過比較三種運行環境日誌檔中的記錄如果發現在單元測試環境和集成測試環境中有對應的日誌檔,而在生產環境中沒有,則說明在單元測試環境和集成測試環境中涵蓋的一些程式碼,在生產環境中並未被涵蓋到。因此,通過對日誌檔記載的資訊進行比較,便可以快速的找到未被涵蓋到的程式碼,從而便於後續對程式的修改和維護。
參照圖5,示出本申請案的程式碼涵蓋率確定系統實施例一,包括日誌檔輸出點資訊獲取模組10、實際日誌檔 輸出點數量確定模組20和程式碼涵蓋率確定模組30。
日誌檔輸出點資訊獲取模組10,用於獲取程式的源程式碼,並分析該源程式碼中日誌檔輸出點的理論數量和位置資訊。
實際日誌檔輸出點數量確定模組20,用於獲取程式運行時實際輸出的日誌檔,基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量。優選地,其包括讀取單元或接收單元。讀取單元,用於從程式預定的儲存位置讀取程式輸出的日誌檔。接收單元,用於從程式預定的介面接收程式發送的日誌檔。其中,實際輸出日誌檔的日誌檔輸出點的數量可以採用但不限於如下方式確定:
第一種為:首先分析所有實際輸出的日誌檔的內容,獲取其中記載的對應日誌檔輸出點在源程式碼中的位置,然後將所有包含有同一位置資訊的日誌檔合併為一個;統計合併後的日誌檔的總量,即為實際輸出日誌檔的日誌輸出點的數量。
第二種為:統計實際輸出的日誌檔的總量;基於日誌檔中記載的對應日誌輸出點的位置資訊統計每一個日誌檔輸出點所輸出的日誌檔實際數量,若大於1,則用實際數量減去1得到重複次數;用總量減去所有的重複次數得到最終的實際輸出日誌檔的日誌檔輸出點的數量。
第三種為:S1,建立數量記錄表,其中數量的初始值為0; S2,選取一個實際輸出的日誌檔,獲取其中所記載的對應日誌檔輸出點的位置資訊;S3,判斷數量記錄中是否包含該位置資訊,若不包含,則在數量記錄中添加該位置資訊,並將數量加1,進行步驟S4;反之,則進行步驟S4;S4,判斷是否還有實際輸出的日誌檔,若是,則返回步驟S2,反之,則確定數量記錄表中的數量值為實際輸出日誌檔的日誌檔輸出點的數量。
程式碼涵蓋率確定模組30,用於基於該源程式碼中日誌檔輸出點的理論數量和實際輸出日誌檔的日誌檔輸出點的數量得到該程式的程式碼涵蓋率。
參照圖6,示出本申請案的基於日誌檔的程式碼涵蓋檢測系統,包括日誌檔輸出點確定模組50、比較模組60和未涵蓋程式碼確定模組70。
日誌檔輸出點確定模組50,用於基於該實際輸出的日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,確定源程式碼中實際輸出日誌檔的日誌檔輸出點。
比較模組60,用於基於該實際輸出日誌檔的日誌檔輸出點和理論上的日誌檔輸出點,確定出未輸出日誌檔的日誌檔輸出點;或用於比較不同運行環境中實際輸出日誌檔,確定出在某些運行環境中輸出而在其他運行環境中未輸出日誌檔的日誌檔輸出點。
未涵蓋程式碼確定模組70,用於基於未輸出日誌檔的日誌檔輸出點確定出未被涵蓋到的程式碼。
本說明書中的各個實施例均採用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對於系統實施例而言,由於其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
以上對本申請案所提供的程式碼涵蓋率確定方法及系統、程式碼涵蓋檢測方法及系統進行了詳細介紹,本文中應用了具體個例對本申請案的原理及實施方式進行了闡述,以上實施例的說明只是用於幫助理解本申請案的方法及其核心思想;同時,對於本領域的一般技術人員,依據本申請案的思想,在具體實施方式及應用範圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本申請案的限制。
10‧‧‧日誌檔輸出點資訊獲取模組
20‧‧‧實際日誌檔輸出點數量確定模組
30‧‧‧程式碼涵蓋率確定模組
50‧‧‧日誌檔輸出點確定模組
60‧‧‧比較模組
70‧‧‧未涵蓋程式碼確定模組
圖1是本申請案的程式碼涵蓋率確定方法實施例一的流程圖;圖2是本申請案的程式碼涵蓋率確定方法實施例二的流程圖;圖3是本申請案的程式碼涵蓋檢測方法實施例一的流程圖;圖4是本申請案的程式碼涵蓋檢測方法實施例二的流程圖;圖5是本申請案的程式碼涵蓋率確定系統實施例一的 結構示意圖;圖6是本申請案的程式碼涵蓋檢測系統實施例一的結構示意圖。

Claims (9)

  1. 一種程式碼涵蓋率確定方法,其特徵在於,該方法包括以下步驟:獲取程式的源程式碼,在該程式運行前,分析該源程式碼中日誌檔輸出點的理論數量和位置資訊,其中,每一個日誌檔輸出點對應至少一程式碼,且當程式被執行時每一個日誌檔輸出點輸出至少一日誌檔;運行該程式;獲取該程式運行時實際輸出的日誌檔,其中,每一個日誌檔包含其對應日誌檔輸出點的位置資訊,基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量,該基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量包括:a)分析所有實際輸出的日誌檔的內容,獲取其中記載的對應日誌檔輸出點在源程式碼中的位置,其中,該等實際輸出的日誌檔是在同一程式運行期間所產生;若不只一日誌檔包含有同一位置資訊,將所有包含有同一位置資訊的日誌檔合併為一個;以及統計合併後的日誌檔的總量,即為最終的實際輸出日誌檔的日誌輸出點的數量;或b)基於日誌檔中記載的對應日誌輸出點的位置資訊統計實際輸出的日誌檔的總量,其中,該等實際輸 出的日誌檔是在同一程式運行期間所產生;基於該位置資訊統計每一個日誌檔輸出點所輸出的日誌檔實際數量,若大於1,則用實際數量減去1得到重複次數;以及用總量減去所有的重複次數得到最終的實際輸出日誌檔的日誌檔輸出點的數量;以及基於該源程式碼中日誌檔輸出點的理論數量和實際輸出日誌檔的日誌檔輸出點的數量得到該程式的程式碼涵蓋率。
  2. 如申請專利範圍第1項所述的程式碼涵蓋率確定方法,其中,該基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量包括:S1,建立數量記錄表,其中數量的初始值為0;S2,選取一個實際輸出的日誌檔,獲取其中所記載的對應日誌檔輸出點的位置資訊;S3,判斷數量記錄中是否包含該位置資訊,若不包含,則在數量記錄中添加該位置資訊,並將數量加1,進行步驟S4;反之,則進行步驟S4;以及S4,判斷是否還有實際輸出的日誌檔,若是,則返回步驟S2,反之,則確定數量記錄表中的數量值為實際輸出日誌檔的日誌檔輸出點的數量。
  3. 如申請專利範圍第1項所述的程式碼涵蓋率確定方法,其中,該獲取程式運行時實際輸出的日誌檔包括: 從程式預定的儲存位置讀取程式輸出的日誌檔;或從程式預定的介面接收程式發送的日誌檔。
  4. 如申請專利範圍第1項所述的程式碼涵蓋率確定方法,其中,該分析該源程式碼中日誌檔輸出點的理論數量包括:分析不同檔案夾中所包含的源程式碼的日誌檔輸出點的理論數量;以及該程式運行時實際輸出日誌檔的日誌檔輸出點的數量包括各檔案夾中實際輸出日誌檔的日誌檔輸出點的數量。
  5. 一種程式碼涵蓋率確定系統,其特徵在於,該系統包括:日誌檔輸出點資訊獲取模組,用於獲取程式的源程式碼,並在該程式運行前,分析該源程式碼中日誌檔輸出點的理論數量和位置資訊,其中,每一個日誌檔輸出點對應至少一程式碼,且當程式被執行時每一個日誌檔輸出點輸出至少一日誌檔;運行該程式;實際日誌檔輸出點數量確定模組,用於運行該程式,獲取該程式運行時實際輸出的日誌檔,其中,每一個日誌檔包含其對應日誌檔輸出點的位置資訊,基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量,該基於每一個日誌檔中所記載的對應日誌檔輸出點的位置資訊確定實際輸出日誌檔的日誌檔輸出點的數量包括: a)分析所有實際輸出的日誌檔的內容,獲取其中記載的對應日誌檔輸出點在源程式碼中的位置,其中,該等實際輸出的日誌檔是在同一程式運行期間所產生;若不只一日誌檔包含有同一位置資訊,將所有包含有同一位置資訊的日誌檔合併為一個;以及統計合併後的日誌檔的總量,即為最終的實際輸出日誌檔的日誌輸出點的數量;或b)基於日誌檔中記載的對應日誌輸出點的位置資訊統計實際輸出的日誌檔的總量,其中,該等實際輸出的日誌檔是在同一程式運行期間所產生;基於該位置資訊統計每一個日誌檔輸出點所輸出的日誌檔實際數量,若大於1,則用實際數量減去1得到重複次數;以及用總量減去所有的重複次數得到最終的實際輸出日誌檔的日誌檔輸出點的數量;以及程式碼涵蓋率確定模組,用於基於該源程式碼中日誌檔輸出點的理論數量和實際輸出日誌檔的日誌檔輸出點的數量得到該程式的程式碼涵蓋率。
  6. 如申請專利範圍第5項所述的程式碼涵蓋率確定系統,其中,該實際日誌檔輸出點數量確定模組包括:讀取單元,用於從程式預定的儲存位置讀取程式輸出的日誌檔;或接收單元,用於從程式預定的介面接收程式發送的日 誌檔。
  7. 一種程式碼涵蓋檢測方法,其特徵在於,該方法包括以下步驟:基於實際輸出的日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,確定源程式碼中實際輸出日誌檔的日誌檔輸出點;基於該實際輸出日誌檔的日誌檔輸出點和理論上的日誌檔輸出點,確定出未輸出日誌檔的日誌檔輸出點;以及基於該未輸出日誌檔的日誌檔輸出點確定出未被涵蓋到的程式碼,其中該等實際輸出的日誌檔是在同一程式運行期間所產生,每一個日誌檔包含其對應日誌檔輸出點的位置資訊,且每一個日誌檔輸出點對應至少一程式碼,且當程式被執行時每一個日誌檔輸出點輸出至少一日誌檔。
  8. 一種程式碼涵蓋檢測方法,其特徵在於,該方法包括以下步驟:獲取程式在不同運行環境中的實際輸出的日誌檔;基於所有運行環境中實際輸出的日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,確定在某些運行環境中輸出而在其他運行環境中未輸出日誌檔的日誌檔輸出點;以及基於該未輸出日誌檔的日誌檔輸出點確定出對應運行 環境中未被涵蓋到的程式碼,其中該等實際輸出的日誌檔是在同一程式運行期間所產生,每一個日誌檔包含其對應日誌檔輸出點的位置資訊,且每一個日誌檔輸出點對應至少一程式碼,且當程式被執行時每一個日誌檔輸出點輸出至少一日誌檔。
  9. 一種程式碼涵蓋檢測系統,其特徵在於,該系統包括:日誌檔輸出點確定模組,用於基於實際輸出的日誌檔中記載的對應日誌檔輸出點在源程式碼中的位置資訊,確定源程式碼中實際輸出日誌檔的日誌檔輸出點;比較模組,用於基於該實際輸出日誌檔的日誌檔輸出點和理論上的日誌檔輸出點,確定出未輸出日誌檔的日誌檔輸出點;或用於比較不同運行環境中實際輸出日誌檔,確定出在某些運行環境中輸出而在其他運行環境中未輸出日誌檔的日誌檔輸出點;以及未涵蓋程式碼確定模組,用於基於未輸出日誌檔的日誌檔輸出點確定出未被涵蓋到的程式碼,其中該等實際輸出的日誌檔是在同一程式運行期間所產生,每一個日誌檔包含其對應日誌檔輸出點的位置資訊,且每一個日誌檔輸出點對應至少一程式碼,且當程式被 執行時每一個日誌檔輸出點輸出至少一日誌檔。
TW101121115A 2012-02-14 2012-06-13 Code coverage method and system, code covers detection methods and systems TWI564714B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210033077.XA CN103246602B (zh) 2012-02-14 2012-02-14 代码覆盖率确定方法及系统、代码覆盖检测方法及系统

Publications (2)

Publication Number Publication Date
TW201333693A TW201333693A (zh) 2013-08-16
TWI564714B true TWI564714B (zh) 2017-01-01

Family

ID=48926132

Family Applications (1)

Application Number Title Priority Date Filing Date
TW101121115A TWI564714B (zh) 2012-02-14 2012-06-13 Code coverage method and system, code covers detection methods and systems

Country Status (6)

Country Link
US (2) US9317400B2 (zh)
EP (1) EP2815319B1 (zh)
JP (1) JP5933762B2 (zh)
CN (1) CN103246602B (zh)
TW (1) TWI564714B (zh)
WO (1) WO2013122876A1 (zh)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10025674B2 (en) * 2013-06-07 2018-07-17 Microsoft Technology Licensing, Llc Framework for running untrusted code
CN103365780B (zh) * 2013-07-22 2016-08-03 百度在线网络技术(北京)有限公司 异常测试覆盖率计算方法及装置
CN103425568B (zh) * 2013-08-23 2016-08-10 新浪网技术(中国)有限公司 日志信息处理方法及装置
CN103530229B (zh) * 2013-10-10 2016-12-07 哈尔滨工程大学 一种考虑测试效用的软件可靠性检测方法
US9454467B2 (en) 2013-12-12 2016-09-27 Tencent Technology (Shenzhen) Company Limited Method and apparatus for mining test coverage data
CN104142887B (zh) * 2013-12-12 2016-12-14 腾讯科技(深圳)有限公司 一种数据挖掘方法和装置
CN103699637B (zh) * 2013-12-23 2017-02-08 国云科技股份有限公司 一种代码生产率统计方法及其系统
CN104133768A (zh) * 2014-07-28 2014-11-05 中国银行股份有限公司 一种程序代码复查方法和装置
CN105005645B (zh) * 2015-06-30 2018-10-02 浪潮(北京)电子信息产业有限公司 一种覆盖率的统计方法及装置
CN106547680A (zh) * 2015-09-17 2017-03-29 腾讯科技(深圳)有限公司 覆盖率测试中的数据处理方法和装置
CN106681904B (zh) * 2015-11-11 2020-01-31 阿里巴巴集团控股有限公司 测试件覆盖率及覆盖应用接口的分析方法、装置
CN105718373B (zh) * 2016-01-27 2018-05-11 中电科航空电子有限公司 满足do-178c的代码覆盖率生成方法
CN106326118B (zh) * 2016-08-19 2019-03-15 东软集团股份有限公司 代码测试覆盖率确定方法和装置
EP3462319A1 (en) * 2017-09-29 2019-04-03 Siemens Aktiengesellschaft Method, device and test program for recognizing a weak point in an original program
CN107844423A (zh) * 2017-11-10 2018-03-27 郑州云海信息技术有限公司 一种软件测试完备性的评估方法
US10572367B2 (en) * 2017-11-21 2020-02-25 Accenture Global Solutions Limited Intelligent code quality monitoring
CN108170600A (zh) * 2017-12-27 2018-06-15 广州品唯软件有限公司 前端代码测试的覆盖率统计方法、装置及系统
CN108197036B (zh) * 2018-02-06 2021-05-25 百度在线网络技术(北京)有限公司 用于确定增量代码的覆盖率信息的方法和装置
CN108446234A (zh) * 2018-03-20 2018-08-24 中国银行股份有限公司 信息处理方法及信息处理装置
CN110580214B (zh) * 2018-06-07 2023-05-05 百度在线网络技术(北京)有限公司 应用程序测试的评估方法、装置、存储介质和终端设备
CN111026630B (zh) * 2018-10-09 2023-05-02 阿里巴巴集团控股有限公司 代码覆盖率的统计方法、装置和系统
CN109344081B (zh) * 2018-10-31 2022-03-11 杭州安恒信息技术股份有限公司 基于标签脚本实现自动化覆盖率统计的方法及装置
US10977162B2 (en) * 2018-12-20 2021-04-13 Paypal, Inc. Real time application error identification and mitigation
CN111767231B (zh) * 2020-07-08 2023-10-31 瓴盛科技有限公司 多平台Bootrom验证方法、装置、系统和计算机可读介质
CN112363936B (zh) * 2020-11-12 2024-08-13 广州品唯软件有限公司 差异覆盖率测试方法、装置、计算机设备和存储介质
CN112363937B (zh) * 2020-11-12 2024-05-03 广州品唯软件有限公司 差异覆盖率测试方法、装置、计算机设备和存储介质
CN112395203B (zh) * 2020-11-30 2024-06-14 京东科技控股股份有限公司 程序测试方法、装置及存储介质
CN112860556B (zh) * 2021-02-18 2024-04-02 中国工商银行股份有限公司 覆盖率统计方法、装置、计算机系统和可读存储介质
CN113032254B (zh) * 2021-03-19 2024-05-31 中国工商银行股份有限公司 测试覆盖情况的评估方法和装置
CN112860583B (zh) * 2021-03-29 2024-06-11 中信银行股份有限公司 基于日志的测试全面性检测方法、装置、设备及存储介质
CN114003501A (zh) * 2021-11-03 2022-02-01 中国银行股份有限公司 测试覆盖率确定方法及装置
CN116501648B (zh) * 2023-06-26 2023-09-15 北京云枢创新软件技术有限公司 一种代码覆盖率的获取方法及系统

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW412674B (en) * 1999-05-20 2000-11-21 Springsoft Inc Method and system for analyzing test coverage
TW200615561A (en) * 2004-11-12 2006-05-16 Faraday Tech Corp Digital logic test method to systematically approach functional coverage completely and related apparatus and system
US20060294503A1 (en) * 2005-06-24 2006-12-28 Microsoft Corporation Code coverage analysis
TW200846903A (en) * 2007-05-16 2008-12-01 Nat Univ Tsing Hua Method for generating software test cases
US20090049428A1 (en) * 2007-08-16 2009-02-19 Microsoft Corporation Error tracing with context history
US20110307865A1 (en) * 2010-06-11 2011-12-15 Microsoft Corporation User interface inventory

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5758061A (en) * 1995-12-15 1998-05-26 Plum; Thomas S. Computer software testing method and apparatus
JP2000267888A (ja) 1999-03-19 2000-09-29 Ntt Communicationware Corp ソフトウェア試験実施網羅率測定方法、ソフトウェア試験実施網羅率測定装置および記録媒体
US7529653B2 (en) * 2001-11-09 2009-05-05 Sun Microsystems, Inc. Message packet logging in a distributed simulation system
US7503037B2 (en) * 2004-04-02 2009-03-10 Bea Systems, Inc. System and method for identifying bugs in software source code, using information from code coverage tools and source control tools to determine bugs introduced within a time or edit interval
CN1329836C (zh) * 2004-05-26 2007-08-01 华为技术有限公司 定位程序异常的方法
JP4869581B2 (ja) 2004-11-22 2012-02-08 株式会社エヌ・ティ・ティ・データ カバレッジ計測システム及びそのプログラム
US7484203B2 (en) 2005-03-21 2009-01-27 International Business Machines Corporation Automated interaction diagram generation using source code breakpoints
US7945898B1 (en) * 2006-03-16 2011-05-17 Avaya Inc. Handling loops in programs and examining feasible software behavior for detecting malicious code
US7617415B1 (en) * 2006-07-31 2009-11-10 Sun Microsystems, Inc. Code coverage quality estimator
US8347269B2 (en) * 2007-09-28 2013-01-01 International Business Machines Corporation Method, system and computer program for debugging software applications in a web environment
JP5151757B2 (ja) 2008-07-18 2013-02-27 富士通株式会社 検査品質分析支援プログラム、方法及び装置
JP5767471B2 (ja) * 2010-12-24 2015-08-19 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation テストの網羅性を評価する装置及び方法
US8756572B2 (en) 2011-03-22 2014-06-17 Microsoft Corporation Debugger-set identifying breakpoints after coroutine yield points
US8522213B2 (en) 2011-05-12 2013-08-27 International Business Machines Corporation Debugger and debugging methods using breakpoints conditioned on the static identity of data

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW412674B (en) * 1999-05-20 2000-11-21 Springsoft Inc Method and system for analyzing test coverage
TW200615561A (en) * 2004-11-12 2006-05-16 Faraday Tech Corp Digital logic test method to systematically approach functional coverage completely and related apparatus and system
US20060294503A1 (en) * 2005-06-24 2006-12-28 Microsoft Corporation Code coverage analysis
TW200846903A (en) * 2007-05-16 2008-12-01 Nat Univ Tsing Hua Method for generating software test cases
US20090049428A1 (en) * 2007-08-16 2009-02-19 Microsoft Corporation Error tracing with context history
US20110307865A1 (en) * 2010-06-11 2011-12-15 Microsoft Corporation User interface inventory

Also Published As

Publication number Publication date
JP2015507303A (ja) 2015-03-05
CN103246602A (zh) 2013-08-14
US20160292068A1 (en) 2016-10-06
US9317400B2 (en) 2016-04-19
EP2815319B1 (en) 2024-05-15
TW201333693A (zh) 2013-08-16
CN103246602B (zh) 2017-03-01
US20130212564A1 (en) 2013-08-15
WO2013122876A1 (en) 2013-08-22
EP2815319A1 (en) 2014-12-24
JP5933762B2 (ja) 2016-06-15

Similar Documents

Publication Publication Date Title
TWI564714B (zh) Code coverage method and system, code covers detection methods and systems
US9864676B2 (en) Bottleneck detector application programming interface
CN101464829B (zh) 确定代码覆盖率的方法、测试装置
US7958400B2 (en) Detecting unexpected impact of software changes using coverage analysis
US8776029B2 (en) System and method of software execution path identification
CN103699476A (zh) 覆盖率测试方法及系统
US20090300587A1 (en) Determining domain data coverage in testing database applications
CN102662828A (zh) 一种实现软件自动测试的方法及装置
CN110532174B (zh) 计算增量代码覆盖率的方法、装置、计算机设备及存储介质
WO2015080742A1 (en) Production sampling for determining code coverage
CN110990842A (zh) 一种小概率事件的复现方法、装置、存储介质及电子设备
CA2811617C (en) Commit sensitive tests
US9563541B2 (en) Software defect detection identifying location of diverging paths
CN107992406B (zh) 一种软件测试方法、相关系统及计算机可读存储介质
CN108229903B (zh) 用于实验室样品检测合同的信息化管理方法和系统
WO2017041530A1 (zh) 一种软件度量检测方法和系统
Domaschka et al. Using eBPF for Database Workload Tracing: An Explorative Study
CN115080426A (zh) 程序文件的检测方法及装置、存储介质和电子设备
US9002688B2 (en) System and method for simulating measuring process of workpiece
CN112214389A (zh) 一种众测方法、装置、终端及存储介质
Ray et al. Debugging memory issues in embedded linux: a case study
Henning et al. RadarGun: Toward a Performance Testing Framework
JP2010191738A (ja) 障害解析支援システム
US20150154020A1 (en) Instrumented file deployment
CN113204350A (zh) 代码增量覆盖率统计方法、装置、电子设备及存储介质