麻豆精品无码国产在线播放,国产亚洲精品成人AA片新蒲金,国模无码大尺度一区二区三区,神马免费午夜福利剧场

測試樣本的生成方法及裝置與流程

文檔序號:11233990閱讀:1681來源:國知局
測試樣本的生成方法及裝置與流程

本發明涉及軟件安全領域,具體而言,涉及一種測試樣本的生成方法及裝置。



背景技術:

在軟件測試(fuzz測試)中,評價測試效果的一個重要指標是代碼覆蓋率,也就是測試樣本集合可達的程序執行路徑占程序代碼所有路徑的百分比。

相關技術中的fuzz工具大體上可歸為兩類,盲測(blindfuzz)和智能測試(smartfuzz)。blindfuzz通過隨機修改文件中的數據生成測試樣本,smartfuzz通過解析文件格式生成文件模板,根據模板中文件字段的類型進行變異,生成測試樣本。

這兩類fuzz本質上來講都是以窮舉的方式發現被測試程序的執行路徑,在測試的初期可以發現較多的路徑,但隨著fuzz的進行,樣本文件不斷增大,隨機變異的效果越來越差,越來越難以發現新的執行路徑。

相關技術中的fuzz工具使用的樣本生成策略,還停留在盲目變異的層次,一次變異產生的樣本對程序執行流程的影響是未知的。盡管引入了改良的算法對變異后的樣本進行了篩選,在發現新的程序執行路徑方面提高有限,這在fuzz的后期樣本文件變化很大時尤為明顯,代碼覆蓋率仍然不高。

針對上述的問題,目前尚未提出有效的解決方案。



技術實現要素:

本發明實施例提供了一種測試樣本的生成方法及裝置,以至少解決相關技術中生成的測試樣本存在代碼覆蓋率低的技術問題。

根據本發明實施例的一個方面,提供了一種測試樣本的生成方法,包括:獲取指定樣本中關鍵數據的信息;其中,該關鍵數據為所述指定樣本中,污染被測試程序的分支指令的數據;根據關鍵數據的信息對指定樣本中關鍵數據進行變異,得到變異后的指定樣本;將變異后的指定樣本確定為測試樣本。

根據本發明實施例的另一方面,還提供了一種測試樣本的生成裝置,包括:獲取 模塊,用于獲取指定樣本中關鍵數據的信息;其中,該關鍵數據為指定樣本中,污染被測試程序的分支指令的數據;變異模塊,用于根據關鍵數據的信息對指定樣本中關鍵數據進行變異,得到變異后的指定樣本;確定模塊,用于將變異后的指定樣本確定為測試樣本。

在本發明實施例中,采用根據獲取的指定樣本中的關鍵數據的信息,對該關鍵數據進行變異,得到變異后的指定樣本,將該變異后的指定樣本確定為測試樣本的方式,即通過對指定樣本中的關鍵數據的變異,生成測試樣本,實現了對指定樣本的精確變異,減少了無意義的樣本的生成,進而提高了代碼覆蓋率,進而解決了相關技術中生成的測試樣本存在代碼覆蓋率低的技術問題。

附圖說明

此處所說明的附圖用來提供對本發明的進一步理解,構成本申請的一部分,本發明的示意性實施例及其說明用于解釋本發明,并不構成對本發明的不當限定。在附圖中:

圖1是本申請實施例的一種測試樣本的生成方法的計算機終端的硬件結構框圖;

圖2是根據本申請實施例1的測試樣本的生成方法的流程圖;

圖3是根據本申請可選實施例的測試樣本生成的方法的過程一的流程圖;

圖4是根據本申請可選實施例的測試樣本生成的方法的過程二的流程圖;

圖5是根據本申請實施例的測試樣本的生成裝置的結構框圖;

圖6是根據本申請實施例的一種計算機終端的結構框圖。

具體實施方式

為了使本技術領域的人員更好地理解本發明方案,下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分的實施例,而不是全部的實施例?;诒景l明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都應當屬于本發明保護的范圍。

需要說明的是,本發明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”等是用于區別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數據在適當情況下可以互換,以便這里描述的本發明的實施例能夠以除了在 這里圖示或描述的那些以外的順序實施。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統、產品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或對于這些過程、方法、產品或設備固有的其它步驟或單元。

fuzz測試是挖掘軟件安全漏洞的重要技術,其中測試樣本的生成直接影響了fuzz的效果,當前fuzz樣本的生成技術存在代碼覆蓋率低的缺陷,如何生成更有效的測試樣本,是當前的一個研究重點。

afl-fuzz是lcamtuf所開發的一款fuzz工具,引入了遺傳算法的概念,對內置fuzz策略生成的測試樣本進行評估,優化測試樣本生成過程。afl-fuzz需要對被測試程序重新編譯,在程序的分支指令處進行插樁,插樁代碼用來記錄程序單次執行時的內部執行路徑。對于閉源軟件,afl-fuzz使用qemu模擬執行被測試程序,獲取程序的內部執行路徑。結合程序的執行路徑信息,afl-fuzz使用遺傳算法優化測試樣本的生成過程,基本過程如下:

但上述afl-fuzz使用遺傳算法優化測試樣本是其仍然存在代碼覆蓋率不高的問題。

在詳細說明本申請實施例之前,先介紹一下本申請實施例中所涉及的技術術語:

1,fuzz測試:即模糊測試,是一種通過提供非預期的輸入并監視異常結果來發現軟件安全漏洞的方法。模糊測試的過程是通過自動的或半自動的方法,反復驅動目標軟件運行并為其提供構造的輸入數據,同時監控軟件運行的異常結果。

2,fuzz樣本:被測試程序讀入并進行處理的文件。

3,變異:修改樣本文件生成新的樣本文件的過程。

4,代碼覆蓋率:被測試程序實際執行代碼的數量與程序總的代碼數量的比值。

5,afl-fuzz:lcamtuf開發的開源fuzz測試工具。

6,污染傳播:對原始數據打上污染標記,確定數據在程序代碼中流向的技術。

實施例1

根據本發明實施例,還提供了一種測試樣本的生成方法的方法實施例,需要說明的是,在附圖的流程圖示出的步驟可以在諸如一組計算機可執行指令的計算機系統中執行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執行所示出或描述的步驟。

本申請實施例1所提供的方法實施例可以在移動終端、計算機終端或者類似的運算裝置中執行。以運行在計算機終端上為例,圖1是本申請實施例的一種測試樣本的生成方法的計算機終端的硬件結構框圖。如圖1所示,計算機終端10可以包括一個或多個(圖中僅示出一個)處理器102(處理器102可以包括但不限于微處理器mcu或可編程邏輯器件fpga等的處理裝置)、用于存儲數據的存儲器104、以及用于通信功能的傳輸裝置106。本領域普通技術人員可以理解,圖1所示的結構僅為示意,其并不對上述電子裝置的結構造成限定。例如,計算機終端10還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。

存儲器104可用于存儲應用軟件的軟件程序以及模塊,如本發明實施例中的測試樣本的生成方法對應的程序指令/模塊,處理器102通過運行存儲在存儲器104內的軟件程序以及模塊,從而執行各種功能應用以及數據處理,即實現上述的測試樣本的生成方法。存儲器104可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態存儲器。在一些實例中,存儲器104可進一步包括相對于處理器102遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至計算機終端10。上述網絡的實例包括但不限于互聯網、企業內部網、局域網、移動通信網及其組合。

傳輸裝置106用于經由一個網絡接收或者發送數據。上述的網絡具體實例可包括計算機終端10的通信供應商提供的無線網絡。在一個實例中,傳輸裝置106包括一個網絡適配器(networkinterfacecontroller,nic),其可通過基站與其他網絡設備相連從而可與互聯網進行通訊。在一個實例中,傳輸裝置106可以為射頻(radiofrequency,rf)模塊,其用于通過無線方式與互聯網進行通訊。

在上述運行環境下,本申請提供了如圖2所示的測試樣本的生成方法。圖2是根據本申請實施例1的測試樣本的生成方法的流程圖。如圖2所示,該方法包括:

步驟s202,獲取指定樣本中關鍵數據的信息;其中,該關鍵數據為所述指定樣本中,污染被測試程序的分支指令的數據;

需要說明的是,關鍵數據污染被測試程序的分支指令可以是表現為直接污染和間接污染,比如,該分支指令為ifelse指令,在被測試程序執行到分支指令之前,該關鍵數據并未做相應運算(比如加減乘除等),而是直接傳播至該分支指令,此時可以稱之為直接污染;而在被測試程序執行到分支指令之前,該關鍵數據已經與其他的數據做了相應的運算(比如加減乘除等)得到了運算后的數據,該運算后的數據傳播至該分支指令,此時可以稱之為間接污染。

需要說明的是,上述關鍵數據的信息可以用于指示上述關鍵數據在指定樣本中的特征信息,該特征信息可以是上述關鍵數據的長度和上述關鍵數據在指定樣本中的位置,但并不限于此。通過該關鍵數據的信息可以在指定樣本中找到與該信息匹配的關鍵數據。

在本申請的一個實施例中,上述步驟s202可以表現為將指定樣本標記為污染源;將污染源作為被測試程序的輸入,執行被測試程序;獲取污染源中污染被測試程序的分支指令的數據在指定樣本中的位置和長度,得到關鍵數據的信息。通過污染傳播技術來確定指定樣本中哪些數據對被測試程序的執行流程產生影響,即通過污染傳播技術來確定指定樣本中哪些數據是上述關鍵數據,即污染源中污染被測試程序的分支指令的數據為關鍵數據。

進一步地,獲取污染源中污染被測試程序的分支指令的數據在指定樣本中的位置和長度可以包括:在執行被測試程序的過程中,當執行到分支指令時,檢測分支指令是否被污染源污染;如果檢測到分支指令被污染源污染,記錄污染源中污染分支指令的數據在指定樣本中的位置和長度。

需要說明的是,此處分支指令是否被污染源污染的表現形式,與關鍵數據是否污染被測試程序的表現形式類似,此處不再贅述。

需要說明的是,在記錄污染源中污染分支指令的數據在指定樣本中的位置和長度之后,還可以繼續執行上述被測試程序,并在繼續執行上述被測試程序的過程中執行以下處理過程,直至被測試程序執行結束:檢測被測試程序中的其他分支指令是否被污染源污染;記錄污染源中污染其他分支指令的數據在指定樣本中的位置和長度。即可以通過將被測試程序執行結束,記錄污染源(指定樣本)中所有的關鍵數據的信息, 以能夠獲取指定樣本中所有的關鍵數據,進而在后續生成測試樣本時,能夠生成多個不同的測試樣本。

步驟s204,根據關鍵數據的信息對指定樣本中關鍵數據進行變異,得到變異后的指定樣本。

需要說明的是,根據信息對指定樣本中關鍵數據進行變異可以表現為通過該關鍵數據的信息在指定樣本中找到關鍵數據,在對該關鍵數據進行變異,但并不限于此。

需要說明的是,此處的變異是指修改關鍵數據生成新的關鍵數據,而在指定樣本中用生成的新的關鍵數據代替該變異前的關鍵數據,進而得到變異后的指定樣本。即步驟s204通過只對指定樣本中的關鍵數據進行變異,進而減少了變異的范圍,同時減少了無意義的樣本的生成。

步驟s206,將變異后的指定樣本確定為測試樣本。

需要說明的是,上述測試樣本可以是能夠觸發被測試程序出現新的代碼執行路徑的變異后的指定樣本,即通過將變異后的指定樣本作為被測試程序的輸入,在被測試程序的執行過程中如果檢測到新的代碼執行路徑就認為該變異后的指定樣本可以作為該測試樣本。具體的,上述步驟s206可以表現為:以變異后的指定樣本作為被測試程序的輸入,執行被測試程序;在執行被測試程序的過程中,如果檢測到新的代碼執行路徑,則將變異后的指定樣本確定為測試樣本;其中,新的代碼執行路徑為指定樣本作為被測試程序的輸入時,與被測試程序執行的代碼執行路徑不同的執行路徑。

需要說明的是,由于可以通過對指定樣本中的關鍵數據進行變異,變異后的指定樣本作為被測試程序的輸入,在被測試程序的執行過程中如果發現新的代碼執行路徑,則該變異后的指定樣本可以作為測試樣本,因而從該角度上出發,指定樣本中的關鍵數據能夠影響被測試程序的代碼執行路徑,也就能夠影響被測試程序的執行流程,進而該關鍵數據也可以描述為指定樣本中對被測試程序的執行流程產生影響的數據。

通過上述步驟,采用根據獲取的指定樣本中的關鍵數據的信息,對該關鍵數據進行變異,得到變異后的指定樣本,將該變異后的指定樣本確定為測試樣本的方式,即通過對指定樣本中的關鍵數據的變異,生成測試樣本,實現了對指定樣本的精確變異,減少了無意義的樣本的生成,進而提高了代碼覆蓋率,進而解決了相關技術中生成的測試樣本存在代碼覆蓋率低的技術問題。

為了更好的理解本申請,以下結合可選的實施例對本申請實施例作進一步解釋。

本申請提供了一種測試樣本生成的方法的可選實施例,主要包括兩個過程:過程 一:利用污染傳播技術確定原始樣本(即上述實施例中的指定樣本)中哪些數據對被測試程序的執行流程產生影響;過程二:利用過程一確定的原始樣本中對被測試程序的執行流程產生影響的數據,對原始樣本進行精確變異,生成可觸發被測試程序的新的代碼執行路徑的樣本,并加入樣本池。

對于過程一,圖3是根據本申請可選實施例的測試樣本生成的方法的過程一的流程圖,如圖3所示,該過程一具體包括以下步驟:

步驟s302,挑選樣本,將文件標記為污染源,開啟污染傳播記錄:開啟指令級別的污染傳播記錄監控程序,加載被測試程序;將樣本文件內容標記為污染源(相當于上述實施例中的將指定樣本標記為污染源);需要說明的是,該樣本文件內容為原始樣本文件的內容;

步驟s304,執行被測試程序;

步驟s306,對當前指令進行檢查,如果是分支指令,執行步驟s308,否則執行步驟s312;

步驟s308,檢查分支條件是否受到樣本文件數據污染,如果是,執行步驟s310,否則執行步驟s312;

步驟s310,記錄污染源在樣本文件內容中的位置和長度,執行步驟s304;

步驟s312,判斷被測試程序是否執行結束,如果是,執行步驟s314,否則,執行步驟s304;

步驟s314,保存樣本中影響程序分支的信息。

需要說明的是,該過程一相當于上述實施例中的步驟s202。

對于過程二,圖4是根據本申請可選實施例的測試樣本生成的方法的過程二的流程圖,如圖4所示,該過程二具體包括以下步驟:

步驟s402,fuzz程序讀入原始樣本(相當于上述實施例中的指定樣本);

步驟s404,根據過程一得到的信息(相當于上述實施例中的關鍵數據的信息,即過程一中的污染源在樣本文件內容中的位置和長度)對樣本的關鍵數據進行變異;

步驟s406,執行被測試程序,記錄執行路徑;

步驟s408,是否發現新的代碼執行路徑,在發現新的代碼執行路徑的情況下,執行步驟s410,否則執行步驟s404;

步驟s410,將本次變異生成的樣本添加到樣本池,執行步驟s404。

需要說明的是,上述步驟s402至步驟s404,相當于上述實施例中的步驟s204;步驟s406至步驟s410,相當于上述實施例中的步驟s206。

上述可選實施例利用污染傳播技術確定原始樣本的文件中影響程序分支的關鍵數據,針對關鍵數據進行精確變異,生成fuzz樣本,可以更快地發現新的程序執行路徑。即引入污染傳播技術,通過污染傳播追蹤樣本數據對程序執行流的影響,確定影響程序分支的文件數據,在生成新的測試樣本時只對影響程序分支的數據進行變異。本方案的樣本生成策略實現了精確變異,可減少無意義的樣本生成,在短時間內達到很高的代碼覆蓋率。

需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明并不受所描述的動作順序的限制,因為依據本發明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例,所涉及的動作和模塊并不一定是本發明所必須的。

通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到根據上述實施例的方法可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,服務器,或者網絡設備等)執行本發明各個實施例所述的方法。

實施例2

根據本發明實施例,還提供了一種用于實施上述測試樣本的生成方法的裝置,圖5是根據本申請實施例的測試樣本的生成裝置的結構框圖,如圖5所示,該裝置包括:

獲取模塊52,用于獲取指定樣本中關鍵數據的信息;其中,該關鍵數據為指定樣本中,污染被測試程序的分支指令的數據;

需要說明的是,關鍵數據污染被測試程序的分支指令可以是表現為直接污染和間接污染,比如,該分支指令為ifelse指令,在被測試程序執行到分支指令之前,該關鍵數據并未做相應運算(比如加減乘除等),而是直接傳播至該分支指令,此時可以稱之為直接污染;而在被測試程序執行到分支指令之前,該關鍵數據已經與其他的數據做了相應的運算(比如加減乘除等)得到了運算后的數據,該運算后的數據傳播至 該分支指令,此時可以稱之為間接污染。

需要說明的是,上述關鍵數據的信息可以用于指示上述關鍵數據在指定樣本中的特征信息,該特征信息可以是上述關鍵數據的長度和上述關鍵數據在指定樣本中的位置,但并不限于此??梢岳迷撽P鍵數據的信息在指定樣本中找到與該信息匹配的關鍵信息。

可選的,上述關鍵數據的信息的獲取過程可以有一個獨立的模塊來實現,也可以有多個模塊共同來實現,對于前者表現為:上述獲取模塊52還用于將指定樣本標記為污染源;將該污染源作為被測試程序的輸入,執行被測試程序;獲取污染源中污染被測試程序的分支指令的數據在指定樣本中的位置和長度,得到關鍵數據的信息。對于后者,可表現為:上述獲取模塊52可以包括標記單元,用于將指定樣本標記為污染源;執行單元,用于將該污染源作為被測試程序的輸入,執行被測試程序;獲取單元,用于獲取污染源中污染被測試程序的分支指令的數據在指定樣本中的位置和長度,得到關鍵數據的信息。對于具體的實施例中,采用一個模塊來完成還是采用多個模塊(單元)來完成上述獲得過程,可以根據具體情況進行選擇,并不做限定。

在本申請的一個實施例中,上述獲取模塊52還用于在執行被測試程序的過程中,當執行到所述分支指令時,檢測分支指令是否被污染源污染;如果檢測到分支指令被污染源污染,記錄污染源中污染分支指令的數據在指定樣本中的位置和長度。此處也可以通過多個單元來完成檢測,記錄的過程,比如:檢測單元,可以用于在執行被測試程序的過程中,當執行到所述分支指令時,檢測分支指令是否被污染源污染,在檢測到分支指令被污染源污染,通知記錄單元來記錄污染源中污染分支指令的數據在指定樣本中的位置和長度,但并不限于此。

需要說明的是,此處分支指令是否被污染源污染的表現形式,與關鍵數據是否污染被測試程序的表現形式類似,此處不再贅述。

需要說明的是,上述獲取模塊54可以繼續執行,直到被測試程序執行結束,具體可以表現為,上述獲取模塊54在記錄污染源中污染分支指令的數據在指定樣本中的位置和長度之后,還可以繼續執行上述被測試程序,并在繼續執行上述被測試程序的過程中執行以下處理過程,直至被測試程序執行結束:檢測被測試程序中的其他分支指令是否被污染源污染;記錄污染源中污染其他分支指令的數據在指定樣本中的位置和長度。

變異模塊54,與上述獲取模塊52連接,用于根據關鍵數據的信息對指定樣本中關鍵數據進行變異,得到變異后的指定樣本;

需要說明的是,上述變異模塊54可以通過該關鍵數據的信息在指定樣本中找到關鍵數據,在對該關鍵數據進行變異,但并不限于此。

需要說明的是,此處的變異是指修改關鍵數據生成新的關鍵數據,而上述變異模塊54在指定樣本中用生成的新的關鍵數據代替該變異前的關鍵數據,進而得到變異后的指定樣本,即只對指定樣本中的關鍵數據進行變異,進而減少了變異的范圍,同時減少了無意義的樣本的生成。

確定模塊56,與上述變異模塊54連接,用于將變異后的指定樣本確定為測試樣本。

需要說明的是,上述測試樣本可以是能夠觸發被測試程序出現新的代碼執行路徑的變異后的指定樣本,上述確定模塊56還可以用于以變異后的指定樣本作為被測試程序的輸入,執行被測試程序;在執行被測試程序的過程中,如果檢測到新的代碼執行路徑,則將變異后的指定樣本確定為測試樣本;其中,該新的代碼執行路徑為指定樣本作為被測試程序的輸入時,與被測試程序執行的代碼執行路徑不同的執行路徑。

需要說明的是,由于可以通過對指定樣本中的關鍵數據進行變異,變異后的指定樣本作為被測試程序的輸入,在被測試程序的執行過程中如果發現新的代碼執行路徑,則該變異后的指定樣本可以作為測試樣本,因而從該角度上出發,指定樣本中的關鍵數據能夠影響被測試程序的代碼執行路徑,也就能夠影響被測試程序的執行流程,進而該關鍵數據也可以描述為指定樣本中對被測試程序的執行流程產生影響的數據。

通過上述裝置,上述變異模塊54根據獲取模塊52獲取的指定樣本中的關鍵數據的信息,對該關鍵數據進行變異,得到變異后的指定樣本,確定模塊56將該變異后的指定樣本確定為測試樣本的方式,即上述裝置通過對指定樣本中的關鍵數據的變異,生成測試樣本,實現了對指定樣本的精確變異,減少了無意義的樣本的生成,進而提高了代碼覆蓋率,進而解決了相關技術中生成的測試樣本存在代碼覆蓋率低的技術問題。

需要說明的是,上述各個模塊是可以通過軟件或者硬件來實現的,對于后者,可以通過以下方式實現,當并不限于此:上述各個模塊以任意組合的方式位于不同的處理器中,例如,上述各個模塊均位于同一處理器中,或者上述各個模塊分別位于不同的處理器中。

實施例3

本發明的實施例可以提供一種計算機終端,該計算機終端可以是計算機終端群中的任意一個計算機終端設備。該計算機終端可以是實施例1中的終端??蛇x地,在本實施例中,上述計算機終端也可以替換為移動終端等終端設備。

可選地,在本實施例中,上述計算機終端可以位于計算機網絡的多個網絡設備中的至少一個網絡設備。

在本實施例中,上述計算機終端可以執行測試樣本的生成方法中以下步驟的程序代碼:獲取指定樣本中關鍵數據的信息;其中,該關鍵數據為所述指定樣本中,污染被測試程序的分支指令的數據;根據信息對指定樣本中關鍵數據進行變異,得到變異后的指定樣本;將變異后的指定樣本確定為測試樣本。

可選地,圖6是根據本申請實施例的一種計算機終端的結構框圖。如圖6所示,該計算機終端a可以包括:一個或多個(圖中僅示出一個)處理器、存儲器、以及傳輸裝置。

其中,存儲器可用于存儲軟件程序以及模塊,如本發明實施例中的測試樣本的生成方法和裝置對應的程序指令/模塊,處理器通過運行存儲在存儲器內的軟件程序以及模塊,從而執行各種功能應用以及數據處理,即實現上述的測試樣本的生成方法。存儲器可包括高速隨機存儲器,還可以包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態存儲器。在一些實例中,存儲器可進一步包括相對于處理器遠程設置的存儲器,這些遠程存儲器可以通過網絡連接至計算機終端a。上述網絡的實例包括但不限于互聯網、企業內部網、局域網、移動通信網及其組合。

上述計算機終端中的處理器可以通過傳輸裝置調用存儲器存儲的信息及應用程序,以執行下述步驟:將指定樣本標記為污染源;將污染源作為被測試程序的輸入,執行被測試程序;獲取污染源中污染被測試程序的分支指令的數據在指定樣本中的位置和長度,得到關鍵數據的信息。

可選的,上述處理器還可以執行如下步驟的程序代碼:在執行被測試程序的過程中,當執行到分支指令時,檢測分支指令是否被污染源污染;如果檢測到分支指令被污染源污染,記錄污染源中污染分支指令的數據在指定樣本中的位置和長度。

可選的,上述處理器還可以執行如下步驟的程序代碼:在記錄污染源中污染分支指令的數據在指定樣本中的位置和長度之后,繼續執行上述被測試程序,并在繼續執行上述被測試程序的過程中執行以下處理過程,直至被測試程序執行結束:檢測被測試程序中的其他分支指令是否被污染源污染;記錄污染源中污染其他分支指令的數據在指定樣本中的位置和長度。

可選的,上述處理器還可以執行如下步驟的程序代碼:以變異后的指定樣本作為被測試程序的輸入,執行被測試程序;在執行被測試程序的過程中,如果檢測到新的代碼執行路徑,則將變異后的指定樣本確定為測試樣本;其中,新的代碼執行路徑為指定樣本作為被測試程序的輸入時,與被測試程序執行的代碼執行路徑不同的執行路徑。

采用本發明實施例,采用根據獲取的指定樣本中的關鍵數據的信息,對該關鍵數據進行變異,得到變異后的指定樣本,將該變異后的指定樣本確定為測試樣本的方式,即通過對指定樣本中的關鍵數據的變異,生成測試樣本,實現了對指定樣本的精確變異,減少了無意義的樣本的生成,進而提高了代碼覆蓋率,進而解決了相關技術中生成的測試樣本存在代碼覆蓋率低的技術問題。

本領域普通技術人員可以理解,圖6所示的結構僅為示意,計算機終端也可以是智能手機(如android手機、ios手機等)、平板電腦、掌聲電腦以及移動互聯網設備(mobileinternetdevices,mid)、pad等終端設備。圖6其并不對上述電子裝置的結構造成限定。例如,計算機終端a還可包括比圖6中所示更多或者更少的組件(如網絡接口、顯示裝置等),或者具有與圖6所示不同的配置。

本領域普通技術人員可以理解上述實施例的各種方法中的全部或部分步驟是可以通過程序來指令終端設備相關的硬件來完成,該程序可以存儲于一計算機可讀存儲介質中,存儲介質可以包括:閃存盤、只讀存儲器(read-onlymemory,rom)、隨機存取器(randomaccessmemory,ram)、磁盤或光盤等。

實施例4

本發明的實施例還提供了一種存儲介質。可選地,在本實施例中,上述存儲介質可以用于保存上述實施例1所提供的測試樣本的生成方法所執行的程序代碼。

可選地,在本實施例中,上述存儲介質可以位于計算機網絡中計算機終端群中的任意一個計算機終端中,或者位于移動終端群中的任意一個移動終端中。

可選地,在本實施例中,存儲介質被設置為存儲用于執行以下步驟的程序代碼:獲取指定樣本中關鍵數據的信息;其中,該關鍵數據為所述指定樣本中,污染被測試程序的分支指令的數據;根據信息對指定樣本中關鍵數據進行變異,得到變異后的指定樣本;將變異后的指定樣本確定為測試樣本。

此處需要說明的是,上述計算機終端群中的任意一個可以與網站服務器和掃描器建立通信關系,掃描器可以掃描計算機終端上php執行的web應用程序的值命令。

上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。

在本發明的上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。

在本申請所提供的幾個實施例中,應該理解到,所揭露的客戶端,可通過其它的方式實現。其中,以上所描述的裝置實施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現時可以有另外的劃分方式,例如多個單元或組件可以結合或者可以集成到另一個系統,或一些特征可以忽略,或不執行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。

所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網絡單元上??梢愿鶕嶋H的需要選擇其中的部分或者全部單元來實現本實施例方案的目的。

另外,在本發明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現,也可以采用軟件功能單元的形式實現。

所述集成的單元如果以軟件功能單元的形式實現并作為獨立的產品銷售或使用時,可以存儲在一個計算機可讀取存儲介質中?;谶@樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分或者該技術方案的全部或部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質中,包括若干指令用以使得一臺計算機設備(可為個人計算機、服務器或者網絡設備等)執行本發明各個實施例所述方法的全部或部分步驟。而前述的存儲介質包括:u盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、移動硬盤、磁碟或者光盤等各種可以存儲程序代碼的介質。

以上所述僅是本發明的優選實施方式,應當指出,對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。

當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
主站蜘蛛池模板: 金华市| 建宁县| 江西省| 阳朔县| 武陟县| 洛南县| 内黄县| 大方县| 东光县| 新干县| 托里县| 灌阳县| 诏安县| 河北省| 抚顺县| 涟水县| 佛冈县| 高台县| 西乌| 廊坊市| 苗栗市| 柳河县| 芦溪县| 铜鼓县| 柘荣县| 盐池县| 错那县| 泸州市| 黑水县| 桂平市| 谢通门县| 涞水县| 斗六市| 洪湖市| 泰和县| 苏州市| 岢岚县| 班玛县| 乐业县| 阜平县| 正定县|