新四季網

覆蓋率測試方法及系統的製作方法

2023-09-13 15:58:30

覆蓋率測試方法及系統的製作方法
【專利摘要】本發明提出一種覆蓋率測試方法及系統,其包括:編譯原始碼,在每一段代碼中均插入探針函數;記錄所有探針函數的位置信息;運行程序,記錄探針函數的計數信息;根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息;根據沒有調用到的程序中探針函數的位置信息,生成第二覆蓋信息;將所述第一覆蓋信息和所述第二覆蓋信息合併,計算獲得最終覆蓋率結果。本發明更準確客觀地反映出程序代碼的真實覆蓋率,且適用於後臺服務類程序的測試。
【專利說明】覆蓋率測試方法及系統【技術領域】
[0001]本發明涉及軟體測試技術,特別涉及一種軟體代碼的覆蓋率測試方法及系統。
【背景技術】
[0002]在C/C++軟體開發的質量保證體系中,覆蓋率(軟體中代碼的運行比率)測試通常是一種有效發現問題的手段,通過代碼覆蓋率的分析,可以快速定位到哪些代碼是沒有運行的,從而構造相應的測試案例來覆蓋這些代碼,以發現軟體設計中的錯誤。
[0003]目前軟體代碼覆蓋率測試廣泛使用的是開源gcov工具,gcov工具是集成在gcc(GNU Compiler Collection, GUN編譯器套件)中的一個檢測代碼覆蓋率的工具,它通過編譯階段(即將原始碼編譯成可執行代碼),在原始碼中插入探針函數(插入探針函數也稱為插樁,用來標識代碼的運行次數),來記錄代碼是否運行,並根據記錄的運行信息分析出軟體代碼行、函數、分支的覆 蓋情況。
[0004]測試時,運行程序,首先將探針函數的位置信息記錄在一個文件中(例如通常將探針信息記錄在以.gcno結尾的文件中,後面簡稱為gcno文件)。
[0005]其次,在程序運行過程中對每段代碼的覆蓋率進行統計,覆蓋率的數值可以利用探針函數本身的計數功能來獲得,即運行過的代碼,相應的探針函數便會計數,並在程序優雅退出(這裡所述的優雅退出是指程序正常退出,例如調用exit O函數退出程序)後將統計得到的覆蓋率寫入一個文件中(例如通常將覆蓋率記錄在以.gcda結尾的文件中,後面簡稱為gcda文件)。
[0006]最後,請參見圖1,從gcno文件和gcda文件中收集和匯總軟體的覆蓋率信息,產出
覆蓋率報告。
[0007]但是,現有的這種覆蓋率測試方法存在兩類問題:
[0008]( I)獲得覆蓋率結果準確性低
[0009]生成gcda文件時候,有一個前提,就是對於源文件A,只有當程序運行時使用或調用了源文件A中的代碼時,才會生成源文件A的gcda文件(A.gcda),而收集源文件A的覆蓋率信息時,必須A.gcno、A.gcda都存在時才可以收集得到。對於測試來說,考慮到測試時間,多數情況都沒有辦法保證測試案例可以將一個軟體程序完整地運行,因此很多時候只生成了部分原始碼的gcda文件,而測試過程中沒有運行的原始碼卻並沒有被納入計算範圍,所以會造成得出的覆蓋率結果不準確。
[0010](2)對於不支持非優雅退出的程序,無法獲取覆蓋率運行信息
[0011]gcda文件的生成,是在程序正常退出(即優雅退出)後對覆蓋率統計得到的。但是對於後臺服務類程序來說,其程序運行是循環的,本身不提供優雅退出機制,因而無法生成gcda文件,從而無法獲取覆蓋率信息。

【發明內容】

[0012]本發明的目的是提供一種覆蓋率測試方法及系統,以解決現有覆蓋率測試技術獲得的覆蓋率結果準確性低的問題。
[0013]本發明提出一種覆蓋率測試方法,包括:
[0014]編譯原始碼,在每一段代碼中均插入探針函數;
[0015]記錄所有探針函數的位置信息;
[0016]運行程序,記錄探針函數的計數信息;
[0017]根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成
第一覆蓋息;
[0018]根據沒有調用到的程序中探針函數的位置信息,生成第二覆蓋信息;
[0019]將所述第一覆蓋信息和所述第二覆蓋信息合併,計算獲得最終覆蓋率結果。
[0020]依照本發明較佳實施例所述的覆蓋率測試方法,還包括:
[0021]運行程序過程中,定時對已經運行的程序中探針函數的計數信息進行記錄,並獲取已經運行的程序中代碼的覆蓋信息。
[0022]依照本發明較佳實施例所述的覆蓋率測試方法,還包括:
[0023]註冊調用函數和信號處理函數;
[0024]運行程序過程中,在所述調用函數接收到調用信號後,調用所述處理函數獲取已經運行的程序中代碼的覆蓋信息。`
[0025]依照本發明較佳實施例所述的覆蓋率測試方法,所述註冊調用函數和信號處理函數的步驟包括:利用動態庫預加載的特性註冊所述註冊調用函數和所述信號處理函數。
[0026]依照本發明較佳實施例所述的覆蓋率測試方法,在程序運行正常退出時,對已經運行的程序中探針函數的計數信息進行記錄。
[0027]依照本發明較佳實施例所述的覆蓋率測試方法,還包括:
[0028]將探針函數的位置信息寫入第一文件;
[0029]根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,獲得已經運行的程序中代碼覆蓋信息,並寫入第二文件;
[0030]所述根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息的步驟包括:掃描所述第一文件獲得已經運行的程序中探針函數的位置信息,掃描所述第二文件獲得已經運行的程序中探針函數的計數信息,並根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息。
[0031]依照本發明較佳實施例所述的覆蓋率測試方法,所述根據沒有調用到的程序中探針函數的位置信息,生成第二覆蓋信息的步驟包括:
[0032]掃描所述第一文件,獲得沒有調用到的程序中探針函數的位置信息,並生成第二
覆蓋?目息。
[0033]依照本發明較佳實施例所述的覆蓋率測試方法,所述編譯原始碼的步驟還包括:去除原始碼中空行、注釋、括號行、聲明語句等無效、非邏輯的代碼行。
[0034]本發明另提出一種覆蓋率測試系統,包括:
[0035]編譯模塊,用於編譯原始碼,並在每一段代碼中均插入探針函數;
[0036]記錄模塊,用於記錄所有探針函數的位置信息,以及記錄探針函數的計數信息;
[0037]第一覆蓋信息生成模塊,用於根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息;[0038]第二覆蓋信息生成模塊,用於根據沒有調用到的程序中探針函數的位置信息,生成第二覆蓋息;
[0039]合併模塊,用於將所述第一覆蓋信息和所述第二覆蓋信息合併,計算獲得最終覆蓋率結果。
[0040]依照本發明較佳實施例所述的覆蓋率測試系統,所述記錄模塊在運行程序過程中,定時對已經運行的程序中探針函數的計數信息進行記錄。
[0041]依照本發明較佳實施例所述的覆蓋率測試系統,所述記錄模塊在程序運行正常退出時,對已經運行的程序中探針函數的計數信息進行記錄。
[0042]依照本發明較佳實施例所述的覆蓋率測試系統,所述記錄模塊將探針函數的位置信息寫入第一文件,以及根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,獲得已經運行的程序中代碼覆蓋信息,並寫入第二文件;
[0043]所述第一覆蓋信息生成模塊通過掃描所述第一文件獲得已經運行的程序中探針函數的位置信息,通過掃描所述第二文件獲得已經運行的程序中探針函數的計數信息,並根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息。
[0044]依照本發明較佳實施例所述的覆蓋率測試系統,所述第二覆蓋信息生成模塊通過掃描所述第一文件,獲得沒有調用到的程序中探針函數的位置信息,並生成第二覆蓋信息。
[0045]依照本發明較佳實施例所述的覆蓋率測試系統,所述編譯模塊在編譯原始碼時,去除原始碼中空行、注釋、括號行、聲明語句等無效、非邏輯的代碼行。
[0046]相對於現有技術,本發明的有益效果是:本發明將測試過程中已經運行的程序和沒有運行的程序都考慮在計算範圍內,不受測試數據變化的影響,即使在測試軟體沒有完全運行的情況下,也可以準確客觀地反映出程序代碼的真實覆蓋率。此外,本發明可以在程序運行過程中對探針函數的動態計數,支持覆蓋率數據的動態生成,同樣適用於後臺服務類程序的測試。
[0047]當然,實施本發明的任一產品並不一定需要同時達到以上所述的所有優點。
[0048]上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,並且為了讓本發明的上述和其他目的、特徵和優點能夠更明顯易懂,以下特舉較佳實施例,並配合附圖,詳細說明如下。
【專利附圖】

【附圖說明】
[0049]圖1為現有的軟體代碼覆蓋率測試匯總示意圖;
[0050]圖2為本發明實施例的一種覆蓋率測試方法流程圖;
[0051]圖3為本發明實施例的一種動態生成第二文件的原理圖;
[0052]圖4為本發明實施例的一種獲得最終覆蓋率結果的原理圖;
[0053]圖5為本發明實施例的一種覆蓋率測試系統的結構圖。
【具體實施方式】
[0054]為更進一步闡述本發明達成預定發明目的所採取的技術手段及功效,以下結合附圖及較佳實施例,對依據本發明提出的覆蓋率測試方法及系統其【具體實施方式】、方法、步驟及功效,詳細說明如後。
[0055]有關本發明的前述及其他技術內容、特點及功效,在以下配合參考圖式的較佳實施例詳細說明中將可清楚的呈現。通過【具體實施方式】的說明,當可對本發明為達成預定目的所採取的技術手段及功效得以更加深入且具體的了解,然而所附圖式僅是提供參考與說明之用,並非用來對本發明加以限制。
[0056]請參見圖2,其為本發明實施例的一種覆蓋率測試方法流程圖,其包括以下步驟:
[0057]S21,編譯原始碼,在每一段代碼中均插入探針函數。
[0058]編譯原始碼是將原始碼編譯成可執行代碼的過程,其中包括去除原始碼中空行、注釋、括號行、聲明語句等無效、非邏輯的代碼行,也即是將原始碼編譯成有效代碼行。
[0059]在編譯原始碼的過程中,會在每一段代碼中均插入探針函數。這裡所說的每一段代碼是指程序的基本塊。如果一段代碼的第一條語句被執行過一次,這段代碼中的每一個都要執行一次,稱為基本塊。一個基本塊中的所有語句的執行次數一定是相同的。一般由多個順序執行語句後邊跟一個跳轉語句組成。所以一般情況下基本塊的最後一條語句一定是一個跳轉語句,跳轉的目的地是另外一個基本塊的第一條語句,如果跳轉時有條件的,就產生了分支,該基本塊就有兩個基本塊作為目的地。
[0060]在每一段代碼中插入探針函數也稱為在代碼中插樁,代碼插樁技術是在保證被測程序原有邏輯完整性的基礎上,在代碼中插入一些探針(又稱為「探測儀」),通過探針的執行並拋出代碼運行的特徵數據,通過對這些數據的分析,可以獲得程序的控制流和數據流信息,進而得到邏輯覆蓋等動態信息,從而實現測試目的的方法。這裡所述的探針函數具有計數的功能,當探針函數所在的一段代碼運行一次後,該探針函數便自動計數一次,也即表示該段代碼被覆蓋。
[0061]S22,記錄所有探針函數的位置信息。
[0062]在軟體程序測試運行過程中,有的代碼是被覆蓋的(會運行的),而有些代碼卻沒有被覆蓋(不會運行),這部分沒有被覆蓋的代碼會成為系統的負擔,甚至會導致程序出錯,所以測試的目的就是通過計算軟體運行時代碼的覆蓋率,進而找出這些沒有覆蓋到的代碼。因為探針函數可以標示出代碼的運行情況,所以為了計算覆蓋率,需要記錄所有探針函數的位置信息,探針函數的位置關係表現為一個樹狀的結構。在實際操作中,可以將探針函數的位置信息寫入一個第一文件中,例如以.gcno結尾的文件(後面所述的gcno文件即指第一文件)。
[0063]S23,運行程序,記錄探針函數的計數信息。
[0064]在程序運行過程中,一段代碼被執行後,對應的探針函數便會有計數,從而便能計算出已運行代碼的覆蓋信息,可以將這個已運行代碼的覆蓋信息寫入一個第二文件中,例如以.gcda結尾的文件(後面所述的gcda文件即指第二文件)。在實際操作中,可以在程序入口處,通過atexit函數,註冊一個用於把運行階段的覆蓋信息寫入本地文件的函數gcov_exit O ,從而調用gcov_exit O函數時就會把覆蓋信息寫入gcda文件中。
[0065]其中,記錄已運行探針函數的計數信息(也即生成gcda文件)可以採用兩種方式:
[0066](I)在程序運行正常退出時,對已經運行的程序中探針函數的計數信息進行記錄。程序運行正常退出也稱為優雅退出,這種方式適合支持優雅退出的程序,即程序優雅退出時,調用gcov_exit函數將已運行的覆蓋信息寫入gcda文件中。[0067](2)運行程序過程中,定時對已經運行的程序中探針函數的計數信息進行記錄。基於有些程序不支持優雅退出(如後臺服務類程序),而且優雅退出後程序的重新啟動往往較慢,所以也可以採用這種動態方式來對覆蓋信息進行記錄。
[0068]具體的實現方式可以是:利用動態庫預加載的特性,先在程序中註冊一個調用函數和一個信號處理函數,然後在程序運行過程中,定時(當然也可以在需要的時候)向調用函數發送一個調用信號,從而調用函數會調用處理函數獲取已運行的代碼的計數信息,從而獲得已經運行的程序中代碼的覆蓋信息,並寫入gcda文件中。而每次調用信號處理函數而獲取的代碼計數信息,都會累加寫入gcda文件中。
[0069]請結合參見圖3,其為動態生成gcda文件的原理圖,其中_attribute_((constructor))void_ctorGcovRegister O 函數即為調用函數,void_sigHandlerGcov (int status)函數即為信號處理函數,USRl信號即為調用信號。當_attribute—((constructor)) void_ctorGcovRegister O 函數捕獲 USRl 信號時,就會調用void_sigHandlerGcov (int status)函數,該函數內部會調用gcov_exit O函數把覆蓋信息寫入到gcda文件中。
[0070]S24,根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,
生成第一覆蓋信息。
[0071]所述的第一覆蓋信息是指已運行的程序中代碼的相關覆蓋信息,如已運行程序中代碼的覆蓋率結果、運行的代碼的數量位置、未運行代碼的數量位置等。
[0072]實際操作中,掃描gcno文件可以獲得已經運行的程序中探針函數的位置信息,也即獲得了已經運行的程序中代碼段的總數。掃描gcda文件可以獲得已經運行的程序中代碼的計數信息,即哪些代碼運行過,哪些代碼沒有運行過。從而通過掃描gcno文件和gcda文件所得到的信息便能生成第一覆蓋信息。
[0073]S25,根據沒有調用到的程序中探針函數的位置信息,生成第二覆蓋信息。
[0074]所述第二覆蓋信息是指沒有運行的程序中代碼的相關信息,如這部分代碼的覆蓋率(為0),代碼的數量位置等。實際操作中,可以通過掃描gcno文件,獲得沒有調用到的程序中探針函數的位置信息,即可以獲得相應代碼的數量和位置信息,從而並生成第二覆蓋信息。
[0075]S26,將所述第一覆蓋信息和所述第二覆蓋信息合併,計算獲得最終覆蓋率結果。
[0076]所述最終覆蓋率結果是指反映軟體測試真實的代碼覆蓋率。請結合參見圖4,其為獲得最終覆蓋率結果的原理圖,由於第一覆蓋信息中包含了已運行的程序中代碼的相關覆蓋信息,第二覆蓋信息中包含了沒有運行的程序中代碼的相關信息,由第一覆蓋信息和第二覆蓋信息合併匯總才能得到真實的代碼覆蓋率。
[0077]例如,假設一個軟體中包含10個文件,而每個文件包含1000段代碼,在測試過程中,由於程序冗長耗時過久而僅運行了 5個文件的程序代碼,假設運行的這5個文件中,每個文件均只覆蓋了 500段代碼。
[0078]如果按照現有的計算方法,則:
[0079]覆蓋率=覆蓋的有效代碼行/所有覆蓋到的源文件的有效代碼行之和
[0080]=5*500/5*1000 = 50%
[0081]可見,由於未將沒有運行的5個文件考慮在內,因而得出的覆蓋率是不準確的。而如果按照本發明的計算方法,則:
[0082]覆蓋率=覆蓋的有效代碼行/所有源文件的有效代碼行之和
[0083]=5*500/10*1000 = 25%
[0084]顯然由於本發明將已經運行的程序和未運行的程序都考慮在計算範圍內,可以更客觀更準確地反映測試結果。
[0085]本發明另提出一種覆蓋率測試系統,請參見圖5,其包括編譯模塊51、記錄模塊52、第一覆蓋信息生成模塊53、第二覆蓋信息生成模塊54以及合併模塊55。記錄模塊52與編譯模塊51相連,第一覆蓋信息生成模塊53和第二覆蓋信息生成模塊54均與記錄模塊52連接,合併模塊55分別與第一覆蓋信息生成模塊53和第二覆蓋信息生成模塊54相連。
[0086]進行測試時,首先由編譯模塊51對原始碼進行編譯,並在每一段代碼中均插入探針函數。編譯過程中,可以去除原始碼中空行、注釋、括號行、聲明語句等無效、非邏輯的代碼行。
[0087]編譯過程中,記錄模塊52會記錄下所有探針函數的位置信息,並將其寫入一個以.gcno結尾的文件(即第一文件)。探針函數的位置關係表現為一個樹狀的結構。
[0088]編譯完成後,便開始執行程序。在程序運行過程中,一段代碼被執行後,對應的探針函數便會有計數,從而便能計算出已運行程序中代碼的覆蓋信息記錄模塊52還會記錄下這個已運行程序中代碼的覆蓋信息,並寫入一個以.gcda結尾的文件(即第二文件)。
[0089]其中,記錄模塊52記錄已運行探針函數的計數信息(也即生成gcda文件)可以採用兩種方式:
[0090](I)在程序運行正常退出時,對已經運行的程序中探針函數的計數信息進行記錄。程序運行正常退出也稱為優雅退出,這種方式適合支持優雅退出的程序,即程序優雅退出時,將已運行的覆蓋信息寫入gcda文件中。
[0091](2)運行程序過程中,定時對已經運行的程序中探針函數的計數信息進行記錄。基於有些程序不支持優雅退出(如後臺服務類程序),而且優雅退出後程序的重新啟動往往較慢,所以也可以採用這種動態方式來對覆蓋信息進行記錄。
[0092]具體的實現方式可以是:利用動態庫預加載的特性,在記錄模塊52中註冊一個調用函數和一個信號處理函數,然後在程序運行過程中,定時(當然也可以在需要的時候)向調用函數發送一個調用信號,從而調用函數會調用處理函數獲取已運行的代碼的計數信息,從而獲得已經運行的程序中代碼的覆蓋信息,並寫入gcda文件中。而每次調用信號處理函數而獲取的代碼計數信息,都會累加寫入gcda文件中。
[0093]程序運行結束後(此時所執行的程序可能是軟體的所有程序,也可能是軟體的一部分程序),第一覆蓋信息生成模塊53會根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息。所述的第一覆蓋信息是指已運行的程序中代碼的相關覆蓋信息,如已運行程序中代碼的覆蓋率結果、運行的代碼的數量位置、未運行代碼的數量位置等。具體為:第一覆蓋信息生成模塊53通過掃描gcno文件可以獲得已經運行的程序中探針函數的位置信息,也即獲得了已經運行的程序中代碼段的總數。通過掃描gcda文件可以獲得已經運行的程序中代碼的計數信息,即哪些代碼運行過,哪些代碼沒有運行過。從而通過掃描gcno文件和gcda文件所得到的信息便能生成第一覆蓋信息。
[0094]第二覆蓋信息生成模塊54會根據沒有調用到的程序中探針函數的位置信息,生成第二覆蓋信息。所述第二覆蓋信息是指沒有運行的程序中代碼的相關信息,如這部分代碼的覆蓋率(為0),代碼的數量位置等。具體為:第二覆蓋信息生成模塊54通過掃描gcno文件,可以獲得沒有調用到的程序中探針函數的位置信息,即可以獲得相應代碼的數量和位置信息,從而並生成第二覆蓋信息。
[0095]最後,合併模塊55將第一覆蓋信息生成模塊53和第二覆蓋信息生成模塊54輸出的第一覆蓋信息和第二覆蓋信息進行匯總合併,並計算出最終覆蓋率結果。
[0096]本發明將測試過程中已經運行的程序和沒有運行的程序都考慮在計算範圍內,不受測試數據變化的影響,即使在測試軟體沒有完全運行的情況下,也可以準確客觀地反映出程序代碼的真實覆蓋率。此外,本發明可以在程序運行過程中對探針函數的動態計數,支持覆蓋率數據的動態生成,同樣適用於後臺服務類程序的測試。
[0097]以上所述,僅是本發明的較佳實施例而已,並非對本發明作任何形式上的限制,雖然本發明已以較佳實施例揭露如上,然而並非用以限定本發明,任何熟悉本專業的技術人員,在不脫離本發明技術方案範圍內,當可利用上述揭示的技術內容作出些許更動或修飾為等同變化的等效實施例,但凡是未脫離本發明技術方案內容,依據本發明的技術實質對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬於本發明技術方案的範圍內。
【權利要求】
1.一種覆蓋率測試方法,其特徵在於,包括: 編譯原始碼,在每一段代碼中均插入探針函數; 記錄所有探針函數的位置信息; 運行程序,記錄探針函數的計數信息; 根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息; 根據沒有調用到的程序中探針函數的位置信息,生成第二覆蓋信息; 將所述第一覆蓋信息和所述第二覆蓋信息合併,計算獲得最終覆蓋率結果。
2.如權利要求1所述的覆蓋率測試方法,其特徵在於,還包括: 運行程序過程中,定時對已經運行的程序中探針函數的計數信息進行記錄,並獲取已經運行的程序中代碼的覆蓋信息。
3.如權利要求2所述的覆蓋率測試方法,其特徵在於,還包括: 註冊調用函數和信號處理函數; 運行程序過程中,在所述調用函數接收到調用信號後,調用所述處理函數獲取已經運行的程序中代碼的覆蓋信息。
4.如權利要求3所述的覆蓋率測試方法,其特徵在於,所述註冊調用函數和信號處理函數的步驟包括:利用動態庫預加載的特性註冊所述註冊調用函數和所述信號處理函數。
5.如權利要求1所述的覆蓋率測試方法,其特徵在於,在程序運行正常退出時,對已經運行的程序中探針函數的計數信息進行記錄。
6.如權利要求1所述的覆蓋率測試方法,其特徵在於,還包括: 將探針函數的位置信息寫入第一文件; 根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,獲得已經運行的程序中代碼覆蓋信息,並寫入第二文件; 所述根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息的步驟包括:掃描所述第一文件獲得已經運行的程序中探針函數的位置信息,掃描所述第二文件獲得已經運行的程序中探針函數的計數信息,並根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息。
7.如權利要求6所述的覆蓋率測試方法,其特徵在於,所述根據沒有調用到的程序中探針函數的位置信息,生成第二覆蓋信息的步驟包括: 掃描所述第一文件,獲得沒有調用到的程序中探針函數的位置信息,並生成第二覆蓋信息。
8.如權利要求1所述的覆蓋率測試方法,其特徵在於,所述編譯原始碼的步驟還包括:去除原始碼中空行、注釋、括號行、聲明語句等無效、非邏輯的代碼行。
9.一種覆蓋率測試系統,其特徵在於,包括: 編譯模塊,用於編譯原始碼,並在每一段代碼中均插入探針函數; 記錄模塊,用於記錄所有探針函數的位置信息,以及記錄探針函數的計數信息; 第一覆蓋信息生成模塊,用於根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息; 第二覆蓋信息生成模塊,用於根據沒有調用到的程序中探針函數的位置信息,生成第二覆蓋信息; 合併模塊,用於將所述第一覆蓋信息和所述第二覆蓋信息合併,計算獲得最終覆蓋率結果。
10.如權利要求9所述的覆蓋率測試系統,其特徵在於,所述記錄模塊在運行程序過程中,定時對已經運行的程序中探針函數的計數信息進行記錄。
11.如權利要求9所述的覆蓋率測試系統,其特徵在於,所述記錄模塊在程序運行正常退出時,對已經運行的程序中探針函數的計數信息進行記錄。
12.如權利要求9所述的覆蓋率測試系統,其特徵在於, 所述記錄模塊將探針函數的位置信息寫入第一文件,以及根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,獲得已經運行的程序中代碼覆蓋信息,並寫入第二文件; 所述第一覆蓋信息生成模塊通過掃描所述第一文件獲得已經運行的程序中探針函數的位置信息,通過掃描所述第二文件獲得已經運行的程序中探針函數的計數信息,並根據已經運行的程序中探針函數的位置信息以及相應探針函數的計數信息,生成第一覆蓋信息。
13.如權利要求12所述的覆蓋率測試系統,其特徵在於,所述第二覆蓋信息生成模塊通過掃描所述第一文件,獲得沒有調用到的程序中探針函數的位置信息,並生成第二覆蓋信息。
14.如權利要求9所述的覆蓋率測試系統,其特徵在於,所述編譯模塊在編譯原始碼時,去除原始碼中空行、注釋、括號行、聲明語句等無效、非邏輯的代碼行。
【文檔編號】G06F11/36GK103699476SQ201210369615
【公開日】2014年4月2日 申請日期:2012年9月27日 優先權日:2012年9月27日
【發明者】吳雲佳 申請人:騰訊科技(深圳)有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀