欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

程序執(zhí)行序列的獲取方法及裝置制造方法

文檔序號:6534746閱讀:260來源:國知局
程序執(zhí)行序列的獲取方法及裝置制造方法
【專利摘要】本發(fā)明提出一種程序執(zhí)行序列的獲取方法及裝置,其中,程序執(zhí)行序列的獲取方法包括:在編譯階段為被測程序選擇插樁節(jié)點植入探針,在探針中寫入保存函數(shù)、收集序列函數(shù)和還原函數(shù);當(dāng)被測程序根據(jù)當(dāng)前測試用例執(zhí)行分支時,輸出對應(yīng)的基本塊信息;以及根據(jù)所述基本塊信息得到基本塊圖級別的執(zhí)行序列,根據(jù)執(zhí)行序列與對應(yīng)的基本塊圖生成包含行號信息的執(zhí)行序列信息。本發(fā)明實施例,通過插樁模塊在探針中寫入保存函數(shù)和還原函數(shù),可以在不修改程序源代碼的情況下,實現(xiàn)目標(biāo)代碼的插樁,通過執(zhí)行測試用例后可以獲得程序的多個執(zhí)行序列,進而可以幫助測試人員實現(xiàn)軟件工程任務(wù),比如錯誤定位等。
【專利說明】程序執(zhí)行序列的獲取方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機【技術(shù)領(lǐng)域】,尤其涉及一種程序執(zhí)行序列的獲取方法及裝置。
【背景技術(shù)】
[0002]程序測試是指對一個完成了全部或部分功能、模塊的計算機程序在正式使用前的檢測,以確保該程序能按預(yù)定的方式正確地運行。目前采用的測試方法包括白盒測試和黑盒測試等。
[0003]其中,白盒測試也被稱作結(jié)構(gòu)測試或者邏輯驅(qū)動測試,它主要測試程序內(nèi)部的結(jié)構(gòu)。測試人員根據(jù)程序的內(nèi)部邏輯結(jié)構(gòu)信息,設(shè)計測試用例并測試程序的邏輯路徑,驗證執(zhí)行結(jié)果。與白盒測試相對的是黑盒測試,黑盒測試又稱為功能測試。黑盒測試不考慮軟件內(nèi)部結(jié)構(gòu)和內(nèi)部特性,而只關(guān)注接口輸入輸出的正確性。
[0004]覆蓋技術(shù)是白盒測試中常用的技術(shù)之一,邏輯覆蓋是一種標(biāo)準(zhǔn),表示測試用例在程序執(zhí)行時對程序邏輯的覆蓋程度。代碼覆蓋主要關(guān)注程序運行時內(nèi)部邏輯的覆蓋程度,按照粒度的不同可以分為:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋等。覆蓋測試可以通過檢測是否對程序的關(guān)鍵路徑都已經(jīng)覆蓋完全來檢查測試用例設(shè)計的合理性。程序插樁是覆蓋測試所依賴的關(guān)鍵技術(shù)。插樁技術(shù)在不影響程序邏輯特性的前提下,使得運行時覆蓋信息的收集成為可能。按照插樁時機的不同,程序插樁技術(shù)主要分為兩種:(1)源代碼插樁:源代碼插樁就是直接對程序源文件進行修改,插入相應(yīng)的樁代碼。源代碼插樁需要對源代碼進行完整的詞法分析和語法分析,從而確定插樁的位置。(2)目標(biāo)代碼插樁:相比源代碼插樁,目標(biāo)代碼插樁不會影響源代碼,但是會影響生成的目標(biāo)代碼。但是,目標(biāo)代碼中通常不具有相應(yīng)的程序結(jié)構(gòu)?;诔绦虿鍢都夹g(shù),就可以在覆蓋測試中獲得各個粒度級別的覆蓋信息。
[0005]在科研工作中通常使用源代碼插樁的方式獲取執(zhí)行序列,這樣能夠獲得精確的結(jié)果并且易于操作,但在工業(yè)應(yīng)用中,通常不允許修改程序的源代碼,因此,在工業(yè)應(yīng)用中不能使用源代碼插樁的方式來獲取執(zhí)行序列。

【發(fā)明內(nèi)容】

[0006]本發(fā)明旨在至少解決上述技術(shù)問題之一。
[0007]為此,本發(fā)明的第一個目的在于提出一種程序執(zhí)行序列的獲取方法。該方法,在不修改程序源代碼的情況下,實現(xiàn)了目標(biāo)代碼的插樁,執(zhí)行測試用例后可以獲得程序的執(zhí)行序列,進而可以幫助測試人員實現(xiàn)軟件工程任務(wù),比如錯誤定位。
[0008]為了實現(xiàn)上述目的,本發(fā)明第一方面實施例的程序執(zhí)行序列的獲取方法,包括以下步驟:
[0009]在編譯階段為被測程序選擇插樁節(jié)點植入探針,在探針中寫入保存函數(shù)、收集序列函數(shù)和還原函數(shù);
[0010]當(dāng)被測程序根據(jù)當(dāng)前測試用例執(zhí)行分支時,輸出對應(yīng)的基本塊信息;以及[0011]根據(jù)基本塊信息得到基本塊圖級別的執(zhí)行序列,根據(jù)執(zhí)行序列與對應(yīng)的基本塊圖生成包含行號信息的執(zhí)行序列信息。
[0012]本發(fā)明實施例的程序執(zhí)行序列的獲取方法,通過在探針中寫入保存函數(shù)和還原函數(shù),可以在不修改程序源代碼的情況下,實現(xiàn)目標(biāo)代碼的插樁,通過執(zhí)行測試用例后可以獲得程序的多個執(zhí)行序列,進而可以幫助測試人員實現(xiàn)軟件工程任務(wù),比如錯誤定位。
[0013]為了實現(xiàn)上述目的,本發(fā)明第二方面實施例的程序執(zhí)行序列的獲取裝置,包括:插樁模塊、執(zhí)行模塊以及生成模塊。
[0014]本發(fā)明實施例的程序執(zhí)行序列的獲取裝置,通過插樁模塊在探針中寫入保存函數(shù)和還原函數(shù),可以在不修改程序源代碼的情況下,實現(xiàn)目標(biāo)代碼的插樁,通過執(zhí)行測試用例后可以獲得程序的多個執(zhí)行序列,進而可以幫助測試人員實現(xiàn)軟件工程任務(wù),比如錯誤定位等。
[0015]本發(fā)明附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明的實踐了解到。
【專利附圖】

【附圖說明】
[0016]本發(fā)明上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變得明顯和容易理解,其中,
[0017]圖1是根據(jù)本發(fā)明一個實施例的程序執(zhí)行序列的獲取方法的流程圖;
[0018]圖2是根據(jù)本發(fā)明另一個實施例的程序執(zhí)行序列的獲取方法的流程圖;
[0019]圖3是根據(jù)本發(fā)明一個實施例的基本塊圖的示意圖;
[0020]圖4是根據(jù)本發(fā)明一個實施例的程序執(zhí)行序列的獲取裝置的結(jié)構(gòu)示意圖;
[0021]圖5是根據(jù)本發(fā)明另一個實施例的程序執(zhí)行序列的獲取裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0022]下面詳細(xì)描述本發(fā)明的實施例,實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。相反,本發(fā)明的實施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
[0023]在本發(fā)明的描述中,術(shù)語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性。在本發(fā)明的描述中,除非另有明確的規(guī)定和限定,術(shù)語“相連”、“連接”應(yīng)做廣義理解,例如,可以是固定連接,也可以是可拆卸連接,或一體地連接;可以是機械連接,也可以是電連接;可以是直接相連,也可以通過中間媒介間接相連。對于本領(lǐng)域的普通技術(shù)人員而言,可以具體情況理解上述術(shù)語在本發(fā)明中的具體含義。此外,在本發(fā)明的描述中,除非另有說明,“多個”的含義是兩個或兩個以上。
[0024]流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用于實現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本發(fā)明的優(yōu)選實施方式的范圍包括另外的實現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時的方式或按相反的順序,來執(zhí)行功能,這應(yīng)被本發(fā)明的實施例所屬【技術(shù)領(lǐng)域】的技術(shù)人員所理解。[0025]下面參考附圖描述本發(fā)明實施例的程序執(zhí)行序列的獲取方法及裝置。
[0026]圖1是根據(jù)本發(fā)明一個實施例的程序執(zhí)行序列的獲取方法的流程圖。
[0027]如圖1所示,程序執(zhí)行序列的獲取方法包括以下步驟:
[0028]S101,在編譯階段為被測程序選擇插樁節(jié)點植入探針,在探針中寫入保存函數(shù)、收集序列函數(shù)和還原函數(shù)。
[0029]其中,保存函數(shù)用于在調(diào)用收集序列函數(shù)之前,將寄存器數(shù)據(jù)保存到內(nèi)存中;還原函數(shù)用于在調(diào)用收集序列函數(shù)之后,將保存在內(nèi)存中的寄存器數(shù)據(jù)進行還原。
[0030]在探針中寫入保存函數(shù)的目的是保存收集序列函數(shù)的上下文場景;在探針中寫入還原函數(shù)的目的是恢復(fù)收集序列函數(shù)上下文場景;在探針中寫入收集序列函數(shù)的目的是收集程序執(zhí)行序列。
[0031]另外,在為被測程序選擇插樁節(jié)點植入探針之前,該方法還可以包括:預(yù)處理被測程序的源文件,對源文件劃分基本塊和分支,并繪制基本塊圖。
[0032]繪制完基本塊圖之后,根據(jù)基本塊圖確定需要插樁的分支,然后根據(jù)需要插樁的分支確定插樁節(jié)點。
[0033]S102,當(dāng)被測程序根據(jù)當(dāng)前測試用例執(zhí)行分支時,輸出對應(yīng)的基本塊信息。
[0034]測試用例是由測試數(shù)據(jù)和預(yù)期結(jié)果構(gòu)成的,在本發(fā)明實施例中可以采用多個測試用例,這些測試用例包括執(zhí)行成功的測試用例和執(zhí)行失敗的測試用例。執(zhí)行不同測試用例可以獲得不同的分支信息。
[0035]當(dāng)被測程序根據(jù)當(dāng)前測試用例執(zhí)行分支時,會執(zhí)行分支中的基本塊。
[0036]S103,根據(jù)基本塊信息得到基本塊圖級別的執(zhí)行序列,根據(jù)執(zhí)行序列與對應(yīng)的基本塊圖生成包含行號信息的執(zhí)行序列信息。
[0037]在本實施例中,在執(zhí)行分支中的基本塊時會觸發(fā)收集序列函數(shù)收集基本塊的執(zhí)行序列;然后可以通過面向?qū)ο?、直譯式計算機程序設(shè)計語言處理包含執(zhí)行序列的執(zhí)行文件以及存放程序的覆蓋信息和基本塊圖信息的文件,得到易讀的執(zhí)行序列信息即包含行號信息的執(zhí)行序列信息。
[0038]上述程序執(zhí)行序列的獲取方法,在不修改程序源代碼的情況下,實現(xiàn)了目標(biāo)代碼的插樁,執(zhí)行測試用例后可以獲得程序的執(zhí)行序列,進而可以幫助測試人員實現(xiàn)軟件工程任務(wù),比如錯誤定位。
[0039]圖2是根據(jù)本發(fā)明另一個實施例的程序執(zhí)行序列的獲取方法的流程圖。
[0040]如圖2所示,程序執(zhí)行序列的獲取方法包括以下步驟:
[0041]S200,預(yù)處理被測程序的源文件,對源文件劃分基本塊和分支,并繪制基本塊圖。
[0042]假定,本實施例中的待測程序的源文件如下:
[0043]
【權(quán)利要求】
1.一種程序執(zhí)行序列的獲取方法,其特征在于,包括: 在編譯階段為被測程序選擇插樁節(jié)點植入探針,在所述探針中寫入保存函數(shù)、收集序列函數(shù)和還原函數(shù); 當(dāng)所述被測程序根據(jù)當(dāng)前測試用例執(zhí)行分支時,輸出對應(yīng)的基本塊信息;以及根據(jù)所述基本塊信息得到基本塊圖級別的執(zhí)行序列,根據(jù)所述執(zhí)行序列與對應(yīng)的基本塊圖生成包含行號信息的執(zhí)行序列信息。
2.如權(quán)利要求1所述的方法,其特征在于,所述保存函數(shù)用于在調(diào)用所述收集序列函數(shù)之前,將寄存器數(shù)據(jù)保存到內(nèi)存中;所述還原函數(shù)用于在調(diào)用所述收集序列函數(shù)之后,將保存在內(nèi)存中的寄存器數(shù)據(jù)進行還原。
3.如權(quán)利要求1所述的方法,其特征在于,在所述在編譯階段為被測程序選擇插樁節(jié)點植入探針之前,所述方法還包括: 預(yù)處理所述被測程序的源文件,對所述源文件劃分基本塊和分支,并繪制基本塊圖。
4.如權(quán)利要求3所述的方法,其特征在于,所述為被測程序選擇插樁節(jié)點植入探針包括: 根據(jù)所述基本塊圖確定需要插樁的分支,根據(jù)所述需要插樁的分支確定所述插樁節(jié)點。
5.如權(quán)利要求1-4任一權(quán)利要求所述的方法,其特征在于,在所述根據(jù)所述執(zhí)行序列與對應(yīng)的基本塊圖生成包含行號信息的執(zhí)行序列信息之后,所述方法還包括: 獲得多個執(zhí)行序列信息,根據(jù)所述執(zhí)行序列信息進行所述被測程序的錯誤定位。
6.一種程序執(zhí)行序列的獲取裝置,其特征在于,包括: 插樁模塊,用于在編譯階段為被測程序選擇插樁節(jié)點植入探針,在所述探針中寫入保存函數(shù)、收集序列函數(shù)和還原函數(shù); 執(zhí)行模塊,用于當(dāng)所述被測程序根據(jù)當(dāng)前測試用例執(zhí)行分支時,輸出對應(yīng)的基本塊信息;以及 生成模塊,用于根據(jù)所述基本塊信息得到基本塊圖級別的執(zhí)行序列,根據(jù)所述執(zhí)行序列與對應(yīng)的基本塊圖生成包含行號信息的執(zhí)行序列信息。
7.如權(quán)利要求6所述的裝置,其特征在于,所述保存函數(shù)用于在調(diào)用所述收集序列函數(shù)之前,將寄存器數(shù)據(jù)保存到內(nèi)存中;所述還原函數(shù)用于在調(diào)用所述收集序列函數(shù)之后,將保存在內(nèi)存中的寄存器數(shù)據(jù)進行還原。
8.如權(quán)利要求6所述的裝置,其特征在于,所述裝置還包括: 繪制模塊,用于在所述插樁模塊為被測程序選擇插樁節(jié)點植入探針之前,預(yù)處理所述被測程序的源文件,對所述源文件劃分基本塊和分支,并繪制基本塊圖。
9.如權(quán)利要求8所述的裝置,其特征在于,所述插樁模塊,具體用于: 根據(jù)所述繪制模塊繪制的基本塊圖確定需要插樁的分支,根據(jù)所述需要插樁的分支確定所述插樁節(jié)點。
10.如權(quán)利要求6-9任一權(quán)利要求所述的裝置,其特征在于,所述裝置還包括: 定位模塊,用于在所述生成模塊生成包含行號信息的執(zhí)行序列信息之后,獲得多個執(zhí)行序列信息,根據(jù)所述執(zhí)行序列信息進行所述被測程序的錯誤定位。
【文檔編號】G06F11/36GK103744782SQ201410001275
【公開日】2014年4月23日 申請日期:2014年1月2日 優(yōu)先權(quán)日:2014年1月2日
【發(fā)明者】陳振宇, 田亮, 張旭輝, 黃明明, 曾衛(wèi), 汪亞斌, 周鍇, 高則寶, 沈毅, 房春榮 申請人:北京百度網(wǎng)訊科技有限公司, 南京大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
武隆县| 科尔| 通海县| 安龙县| 富平县| 陆良县| 错那县| 平罗县| 嘉祥县| 顺义区| 铁力市| 永靖县| 南平市| 山丹县| 林州市| 连云港市| 庆阳市| 乐都县| 芒康县| 翁牛特旗| 修武县| 静安区| 苗栗县| 左贡县| 松江区| 广安市| 盐亭县| 丁青县| 芮城县| 新丰县| 拉孜县| 木里| 如东县| 德惠市| 综艺| 大关县| 阳信县| 鸡西市| 筠连县| 元阳县| 谢通门县|