• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于標識符的代碼影響域自動化分析方法

      2021-08-23 09:02:22付高生
      計算機測量與控制 2021年8期
      關(guān)鍵詞:標識符隊列語句

      紀 承,付高生,白 洋

      (北京京航計算通訊研究所,北京 100074)

      0 引言

      軟件在軍隊裝備中的作用和地位日益提高,軟件質(zhì)量對軍隊戰(zhàn)斗力生成有著直接影響,只有確保裝備軟件可靠、穩(wěn)定,才能保證軍隊裝備在關(guān)鍵時候發(fā)揮作用[1]。為避免因軟件故障而造成裝備無法使用的情況,軍隊對裝備軟件的可靠性和穩(wěn)定性要求極高。對裝備軟件進行質(zhì)量評測可以大幅度提升裝備軟件的可靠性和穩(wěn)定性,因而質(zhì)量評測方法的研究對提高裝備軟件的質(zhì)量有重要意義[2]。軟件質(zhì)量評測過程中自動化工具只能實現(xiàn)部分測試功能[3],還有較多工作是由人工操作完成。根據(jù)相關(guān)軍用軟件測試標準和規(guī)定,裝備軟件評測過程要經(jīng)過多輪迭代,不斷修正通過軟件測試發(fā)現(xiàn)的軟件問題。每一輪迭代前后的兩個版本的代碼差異較大,修改后代碼的影響域分析至關(guān)重要,目前該部分軟件評測完全依賴人工實現(xiàn)。為節(jié)約裝備軟件質(zhì)量評測所耗費的成本和時間,在質(zhì)量評測過程中使用代碼自動化比對工具是現(xiàn)今測試機構(gòu)廣泛使用的方法,對軟件評測自動化工具進行研究顯得格外重要。本文首先介紹了基于標識符的代碼對比方法提取修改特征的流程,并介紹了基于修改特征分析影響域的代碼分析方法,然后通過實驗證明在大型工程代碼比對工作中該分析方法有較好效果,最后就該方法的有效性和實用性進行了分析,并對后續(xù)研究方向進行展望。

      1 相關(guān)工作

      軟件評測領(lǐng)域與惡意代碼檢測、程序編譯等多個領(lǐng)域均有交集,各種方法繁雜混亂,在軟件影響域分析問題上并沒有已經(jīng)成型的方法。軟件質(zhì)量評測分析方法一般分為動態(tài)分析方法[4]和靜態(tài)分析方法[5]兩種,動態(tài)分析方法需要運行程序,而靜態(tài)分析方法則是對源代碼進行分析。代碼自動化比對工具的分析內(nèi)容以程序源代碼為主,主要應(yīng)用靜態(tài)分析方法。代碼的靜態(tài)分析方法有很多種,一般使用較為廣泛的包括基于抽象語法樹、結(jié)構(gòu)圖、標識符、度量值的代碼分析方法?;诔橄笳Z法樹的代碼分析方法[6]在分析過程中引入編譯器生成的抽象語法樹,可以精準的分析代碼結(jié)構(gòu)和改變,但是時間復(fù)雜度較高,不適合代碼規(guī)模較大的代碼對比?;诳刂屏鲌D的代碼分析方法[7]從代碼語義結(jié)構(gòu)角度出發(fā),分析思路與基于抽象語法樹的方法有一定相似,但是也不適合大型工程代碼比對?;跇俗R符屬性特征向量相似度的代碼分析方法[8]使用了標識符和屬性度量值兩種方法,具有時間復(fù)雜度低、容易擴展到多種語言的特點,但是需要根據(jù)具體問題衡量代碼分析方法的有效性?,F(xiàn)有代碼對比靜態(tài)分析方法主要從代碼語句角度分析代碼的相似度,但缺乏影響域分析等對代碼的深層邏輯分析。代碼深層邏輯分析可以挖掘軟件的隱藏隱患,更加符合軟件質(zhì)量評測工作的需求,對代碼深層邏輯分析方法的研究愈發(fā)受到重視。軟件質(zhì)量評測目前有成熟的靜態(tài)分析工具,但該工具只分析每次迭代前后的代碼變化項,無法分析代碼變化項的影響域,導(dǎo)致裝備軟件迭代修改后的代碼必須作為全新代碼重新進行整體質(zhì)量評測,耗費大量資源和人力,影響裝備批產(chǎn)效率。因此,對裝備軟件代碼變化項影響域的自動化分析方法進行研究是有重要意義的。

      2 研究內(nèi)容

      2.1 數(shù)據(jù)分析

      本文研究的裝備軟件程序為c語言工程代碼,具有可靠性高、代碼較規(guī)范和規(guī)模較大的特點。代碼可靠性高即不需要考慮是否存在程序編譯錯誤,裝備軟件可以直接按照可運行的標準c語言程序處理。代碼規(guī)范整齊節(jié)省了很多數(shù)據(jù)清洗的時間,代碼使用的標識符容易識別,不會出現(xiàn)混亂的情況,這是我們選擇基于標識符的代碼靜態(tài)分析方法原因之一。代碼規(guī)模限制分析算法的時間復(fù)雜度,大規(guī)模c語言代碼[9]并不適合使用基于抽象語法樹[10]等分析方法,所以我們選擇時間復(fù)雜度較低的基于標識符的代碼分析方法。

      本文研究的裝備軟件程序包含多迭代版本,我們選取已經(jīng)迭代穩(wěn)定的版本作為研究數(shù)據(jù),該數(shù)據(jù)不出現(xiàn)大規(guī)模代碼修改,適合修改特征影響域分析。我們選取一個版本的程序稱為代碼A,然后選取代碼A經(jīng)過軟件質(zhì)量評測后迭代修改一次后的程序稱為代碼B,分析研究代碼A和代碼B之間的修改特征提取和修改特征影響域。代碼A和代碼B均為多文件c語言程序,代碼B是基于代碼A的修改版本,修改操作包含增、刪、改等操作。迭代情況穩(wěn)定后,代碼A和代碼B不出現(xiàn)連續(xù)10行以上的增、刪操作。代碼A和代碼B都符合標準的代碼書寫規(guī)范,我們可以直接考慮行與行之間的修改對比,而不需要考慮空行、符號、斷句不規(guī)范的問題。

      2.2 基于標識符的修改特征提取

      本文提取的修改特征主要是迭代前后代碼直接變化的變量。本節(jié)首先介紹了數(shù)據(jù)清洗過程中代碼行映射關(guān)系表的構(gòu)建,然后介紹了本文使用的標識符表的構(gòu)建方法。之后我們具體介紹了提取修改特征過程中,先提取代碼A和代碼B行對應(yīng)狀態(tài),再依據(jù)對應(yīng)狀態(tài)提取變量變化情況的方法。最后我們介紹了特殊標識符(for、if、return等)的修改特征提取。

      2.2.1 數(shù)據(jù)清洗

      代碼A和代碼B都是標準的裝備軟件程序,我們不需要考慮代碼中出現(xiàn)錯誤語句、缺失語句等造成程序編譯錯誤的問題,也不需要考慮代碼中出現(xiàn)多余語句、無效語句等需要修改源代碼的情況。對代碼A和代碼B的數(shù)據(jù)清洗[11]主要是除去代碼中的注釋、多余的空格和空號。程序數(shù)據(jù)清洗后會與數(shù)據(jù)清洗前代碼出現(xiàn)行對應(yīng)變化,為方便修改特征與源代碼一一對應(yīng),我們構(gòu)建了數(shù)據(jù)清洗行映射關(guān)系表,該映射關(guān)系表記錄了代碼數(shù)據(jù)清洗前后代碼行對應(yīng)關(guān)系。

      2.2.2 標識符表

      構(gòu)建代碼A和代碼B的標識符表以用于提取代碼修改特征。代碼A和代碼B均為同類型的代碼,我們可以以相同的方法為代碼A和代碼B構(gòu)建標識符表。我們提取的修改特征主要為變量賦值變化,以修改特征提取需求設(shè)計3個標識符表:類型表、函數(shù)表、變量表。

      類型表存儲c語言程序中變量和函數(shù)的類型,在構(gòu)建函數(shù)表和變量表的時候可以以類型表中標識符為索引進行檢索。首先在類型表中加入常用的變量類型(int、char、double、float等)以及函數(shù)特有的類型void,可根據(jù)程序加入long long int、short等變量類型。然后,我們在類型表中加入c語言程序的自定義類型,依次加入結(jié)構(gòu)體、枚舉、聯(lián)合體等類型。以結(jié)構(gòu)體為例,我們以struct標識符在代碼中檢索結(jié)構(gòu)體聲明位置,將結(jié)構(gòu)體名記錄到類型表中以供后續(xù)使用。在后續(xù)研究中我們將按照統(tǒng)一方式使用類型表中的標識符,不區(qū)分常用類型和自定義類型。

      函數(shù)表存儲程序中定義的函數(shù),在修改特征提取和影響域分析過程中均會使用函數(shù)表。我們記錄函數(shù)名為標識符,并記錄函數(shù)類型、起始位置、終止位置,在后續(xù)需要分析函數(shù)變化的時候可以直接檢索到函數(shù)位置。

      變量表存儲程序中定義的變量,以類型表中標識符檢索變量聲明位置,我們記錄變量名為標識符,并記錄變量類型、變量所屬函數(shù)、變量聲明位置,不考慮未聲明直接使用的變量。我們對指針變量和數(shù)組亦做特殊處理,然后存入變量表中作為標識符使用。指針變量可以直接在變量名前增加“*”作為標識符,不影響后續(xù)使用。數(shù)組提前數(shù)組名作為標識符存入變量表,記錄特殊數(shù)組標記以在后續(xù)使用時進行特殊處理。結(jié)構(gòu)體等自定義類型變量在記錄標識符時不做特殊處理,在后續(xù)使用時再進行特殊處理。

      2.2.3 修改特征提取

      本文提取的修改特征是在代碼A和代碼B之間對比提取修改、增加和刪除的代碼。由于代碼A和代碼B不出現(xiàn)大篇幅修改,我們先對比代碼A和代碼B行變化情況,再逐行對比代碼A和代碼B每行變量變化的情況。

      行變化情況包括修改、增加、刪除3種狀態(tài),再考慮行未發(fā)生改變的狀態(tài),我們設(shè)置4種行對應(yīng)狀態(tài)來描述代碼A和代碼B各行對應(yīng)狀態(tài)。如果只考慮未發(fā)生改變和修改兩種狀態(tài),代碼A中每一行均可在代碼B中尋得,即代碼A和代碼B是逐行對應(yīng)的,并且從代碼開始到結(jié)束按順序逐一對應(yīng)。增加和刪除兩種狀態(tài)影響了代碼按順序逐一對應(yīng)的關(guān)系,并且增加或者刪除的行可能和未發(fā)生改變或者修改的行產(chǎn)生歧義,即兩行代碼相似度非常高,影響行對應(yīng)狀態(tài)。

      本文提出了一種基于行相似度匹配的滑動窗口方法,實現(xiàn)了代碼行對應(yīng)狀態(tài)逐一對應(yīng)關(guān)系檢測。由于代碼不出現(xiàn)連續(xù)10行以上的增、刪操作,我們設(shè)置一個窗口長度為10的滑動窗口,將代碼B逐行放入窗口隊列中。然后從上往下逐行將代碼A與窗口隊列中每一行代碼匹配,完全一致的代碼認為行匹配成功,記錄匹配信息的同時更新窗口隊列;不完全匹配的代碼則記錄代碼相似度,等待進一步處理。相似度可通過動態(tài)規(guī)劃算法計算兩行代碼的最長公共子串得到。在代碼A和代碼B匹配完成后,我們得到一個已確定未發(fā)生改變狀態(tài)的匹配對應(yīng)關(guān)系,然后我們將其中不完全匹配的對應(yīng)關(guān)系按照相似度確定修改、增加、刪除3種狀態(tài)。遍歷匹配對應(yīng)關(guān)系中不完全匹配的關(guān)系,如果存在相似度高于預(yù)設(shè)闕值且沒有已經(jīng)匹配到的修改狀態(tài)對應(yīng)關(guān)系的兩行,我們可以將其設(shè)置為修改狀態(tài)對應(yīng)關(guān)系;然后將代碼A中剩余行設(shè)置為刪除狀態(tài);代碼B中剩余行設(shè)置為增加狀態(tài)。通過上述方法我們獲取了代碼A和代碼B按順序逐一對應(yīng)的行狀態(tài)。該方法具體流程如圖1所示。

      圖1 基于行相似度匹配的滑動窗口方法

      在代碼A和代碼B行對應(yīng)狀態(tài)確定之后,我們通過標識符識別提取代碼A和代碼B的修改特征,在本小節(jié)我們主要提取賦值語句中代碼修改的情況,記錄修改內(nèi)容和修改位置(行號)。首先構(gòu)建3個標識符表,考慮到裝備軟件程序為多文件c語言程序,我們首先建立代碼A和代碼B的文件調(diào)用關(guān)系,即檢索每個文件的首部是否調(diào)用其他文件。然后我們依次構(gòu)建每個文件的類型表、函數(shù)表、變量表,在每個表構(gòu)建完成后均要按照文件調(diào)用關(guān)系進行標識符表通信,將每個文件所引用的標識符加入該文件對應(yīng)的標識符表中。然后遍歷代碼A和代碼B提取發(fā)生改變的賦值語句中修改的代碼,未發(fā)生改變狀態(tài)的代碼不存在改變的語句,遍歷過程中可以直接跳過。代碼A中刪除狀態(tài)的語句和代碼B中增加狀態(tài)的語句可以直接記錄修改特征。修改狀態(tài)的行需要先進行斷句,然后判斷對應(yīng)的賦值語句是否存在或者是否發(fā)生變化,不同的分別在代碼A和代碼B記錄修改特征。經(jīng)過上述處理,我們在代碼A和代碼B中分別記錄了其修改特征。

      2.2.4 特殊標識符

      在本小節(jié)我們將提取幾類特殊標識符的修改特征。特殊標識符的修改特征與賦值語句修改特征方法不完全相同,我們針對循環(huán)語句、條件語句和return等特殊標識符提出了不同的提取方法。

      循環(huán)語句(標識符for、while)分為循環(huán)體和循環(huán)條件兩部分,循環(huán)體內(nèi)修改特征按照普通修改特征處理。循環(huán)條件的發(fā)生變化時,我們記錄循環(huán)條件發(fā)生的變化以及變化的位置。

      標識符為if的條件語句處理方法與循環(huán)語句相似,如果條件變化則記錄條件語句修改特征。但是條件語句需要額外考慮在if后出現(xiàn)的else if和else標識符。標識符else if處理方法與if相同,標識符else則需考慮條件語句if和else if的條件是否變化,如果變化則在else處記錄條件語句修改特征。

      其他特殊標識符種類很多,大部分需要依據(jù)代碼需求專門處理,我們主要提及兩個常用的標識符return和define處理。標識符return主要出現(xiàn)在函數(shù)當中,用于函數(shù)的返回值,如果函數(shù)的返回值發(fā)生變化,我們對該函數(shù)記錄下來該函數(shù)名和修改位置。標識符define是c語言程序中的宏定義,如果宏定義語句出現(xiàn)變化,我們可以將宏定義定義的標識符加入變量表,按照變量進行處理,并直接記錄其修改特征。

      2.3 修改特征影響域分析

      修改特征提取只是對代碼變化的直接處理,而影響域分析是基于代碼邏輯對代碼變化深層影響的分析,所以影響域分析是我們對代碼進行深層次的邏輯分析,挖掘裝備軟件每次迭代對程序造成的影響。本節(jié)依次介紹了基層影響域和多層影響域的分析方法,然后提出了基于標識符檢測隊列的影響域分析方法,該方法可以實現(xiàn)復(fù)雜的裝備軟件影響域分析。

      2.3.1 基于修改特征的影響域確定

      基于修改特征的影響域是指在修改特征提取過程中未提取到修改特征,但受到修改特征影響的變量,我們主要記錄受到影響的標識符(主要為變量名)和位置。本文的修改特征是代碼中出現(xiàn)變化的賦值語句、條件語句等,依據(jù)不同類型的修改特征需要分別確定影響域。本文修改特征主要記錄的是賦值語句中修改的代碼和修改位置,影響域為賦值語句中被賦值的變量。

      特殊標識符的修改特征需要特殊處理以確定影響域。循環(huán)語句修改特征是循環(huán)條件的變化,循環(huán)體內(nèi)所有變量均可能因循環(huán)條件的變化而受到影響,所以影響域為循環(huán)體內(nèi)所有賦值語句被賦值的變量。條件語句影響域與循環(huán)語句一樣,只是需要分別考慮if、else if和else三種。標識符return用于函數(shù)的返回值,如果函數(shù)的返回值發(fā)生變化,即檢測到return后內(nèi)容發(fā)生變化,調(diào)用該函數(shù)的代碼均會產(chǎn)生影響,所以return標識符修改特征的影響域為調(diào)用該函數(shù)的所有賦值語句的被賦值變量。

      2.3.2 多層影響域分析

      在上小節(jié)中我們介紹了基于修改特征的影響域確定,該影響域為修改特征直接確定的第一層影響域,我們稱其為基層影響域。代碼中可能出現(xiàn)不是修改特征或者基層影響域,但是程序運行過程中受基層影響域影響可能出現(xiàn)變化的變量,我們把該種情況的分析過程稱為多層影響域分析。多層影響域我們主要記錄多層影響域的標識符(主要為變量名)、位置和分析層數(shù)。相較于基層影響域分析,多層影響域分析邏輯相對復(fù)雜,且可能出現(xiàn)特殊循環(huán)情況。

      多層影響域分析是以基層影響域分析為基石,進行整個程序的影響域分析?;鶎佑绊懹蛴涗浀臑樽兞繕俗R符,我們按照變量類型確定基層影響域中每個標識符影響的代碼,仿照基層影響域分析第二層影響域,記錄變量標識符和位置,然后重復(fù)上述方法可得多層影響域。變量分為局部、全局、跨文件變量3種類型,變量類型可以通過查詢變量表確定。局部變量只需在聲明函數(shù)里考慮影響域,全局變量則在聲明文件中考慮影響域,跨文件變量在所有文件中都可能受到影響。多文件代碼全局變量需額外考慮出現(xiàn)跨文件調(diào)用全局變量的情況,我們在變量表建立過程中已經(jīng)進行過跨文件情況的全局變量通信,只需在影響域檢測過程中檢測引用到的其他文件全局變量即可。

      裝備軟件中出現(xiàn)的干擾影響域分析的循環(huán)情況主要包含代碼循環(huán)和邏輯循環(huán)兩種。代碼循環(huán)是在c語言程序中出現(xiàn)的變量交互影響,即在某一位置變量a影響變量b,然后在后續(xù)代碼中變量b又影響變量a,或者多個變量交互影響的情況,在影響域分析過程中需要特殊處理。邏輯循環(huán)出現(xiàn)在c語言程序中經(jīng)常使用遞歸的方法,主要以遞歸函數(shù)為主,在遞歸函數(shù)中很容易出現(xiàn)一變量發(fā)生改變,并且傳遞到下一次遞歸中,這樣會出現(xiàn)無窮多層影響域,也需要特殊處理。對代碼中標記已檢測的位置并不能很好地解決特殊循環(huán)問題,因為c語言程序中的遞歸很多,所以我們提出了一種解決影響域分析過程中特殊循環(huán)情況的方法。我們每次進行一層影響域的分析,在后續(xù)影響域分析過程中,對代碼中已經(jīng)標記影響域的位置,我們要檢測新影響域變量標識符是否與已有影響域記錄的標識符完全相同,如果相同則不會開啟新一層影響域分析。在下一小節(jié)中我們敘述了通過標識符檢測隊列應(yīng)用該策略解決特殊循環(huán)情況,保證多層影響域分析的可行性。

      2.3.3 基于標識符檢測隊列的影響域分析

      裝備軟件修改特征影響域分析既包含了從修改特征中分析基層影響域,又包含了從基層影響域分析多層影響域。多層影響域的分析邏輯相當復(fù)雜,時間復(fù)雜度、空間復(fù)雜度都比較高,我們提出了一種基于標識符檢測隊列的影響域分析方法,在降低了時間、空間復(fù)雜度的情況下準確分析了多層影響域,適合于裝備軟件修改特征影響域分析。

      基于標識符檢測隊列的影響域分析用檢測隊列存儲多層影響域分析中改變的變量,從程序運行邏輯的角度進行影響域分析,將多層影響域分析的樹形邏輯轉(zhuǎn)化為線性邏輯。依據(jù)裝備軟件c語言程序特點,c語言程序的main函數(shù)一般是程序啟動的入口,并且main函數(shù)可以控制程序調(diào)用其他函數(shù)。如果以main函數(shù)為分析的起始點,可以遵從程序運行的規(guī)則,避免盲目檢索過程中重復(fù)分析不必要片段的操作。我們依據(jù)程序運行邏輯依次檢測main函數(shù)和其他調(diào)用函數(shù),在每個函數(shù)內(nèi)進行影響域分析,然后通過檢測隊列通訊實現(xiàn)函數(shù)之間的影響域分析。我們在每個函數(shù)內(nèi)建立了兩個標識符檢測隊列,分別為局部檢測隊列和全局檢測隊列。局部檢測隊列主要存儲影響域分析過程中記錄的局部變量,并且該函數(shù)影響域分析結(jié)束后清空該隊列。全局檢測隊列中既要存儲全局變量,又要存儲跨文件變量。全局檢測隊列不僅作用于某一函數(shù)的影響域分析,還和其他函數(shù)的影響域分析有關(guān)。

      基于標識符檢測隊列的影響域分析主要包含以下幾個步驟。1)遍歷代碼,依據(jù)修改特征確定基層影響域;2)在c語言程序中找到main函數(shù)并加入待檢測函數(shù),以main函數(shù)為函數(shù)分析的起始點進行影響域分析,初始化標識符檢測隊列;3)遍歷待檢測函數(shù)中函數(shù)的代碼,將基層影響域中的變量加入標識符檢測隊列;同時依據(jù)標識符檢測隊列中標識符判斷該行代碼是否受影響,受影響則進行影響域分析將結(jié)果加入標識符檢測隊列,此即為多層影響域分析。為解決循環(huán)問題,我們在將變量加入標識符檢測隊列時,先檢測標識符檢測隊列中是否已有該變量,重復(fù)則不加入;4)在遍歷代碼過程中檢測到調(diào)用函數(shù)的情況,將調(diào)用函數(shù)加入待檢測函數(shù),并將全局檢測隊列傳遞到該函數(shù)影響域分析過程中使用的全局檢測隊列中,重復(fù)第三步。為解決循環(huán)問題,我們記錄每個函數(shù)已經(jīng)分析過的標識符檢測隊列為歷史記錄,如果再次調(diào)用該函數(shù)時,標識符檢測隊列與歷史記錄相同,則不再重復(fù)對該函數(shù)檢測。基于標識符檢測隊列的影響域分析具體流程如圖2所示。

      圖2 基于標識符檢測隊列的影響域分析

      3 實驗結(jié)果與分析

      本節(jié)敘述了本文的實驗設(shè)置和結(jié)果。本文進行了兩個實驗,功能實驗以自行設(shè)計的代碼為測試數(shù)據(jù)測試了基于標識符修改特征的提取方法和基于標識符檢測隊列的影響域分析方法,展示了本文方法的檢測結(jié)果;公開數(shù)據(jù)集實驗采用公開數(shù)據(jù)集,驗證了本文提出的方法在裝備軟件質(zhì)量評測工作中的有效性。

      3.1 功能實驗

      功能實驗分塊測試了基于標識符的修改特征提取方法和基于標識符檢測隊列的影響域分析方法。修改特征分別設(shè)立了增加、刪除、修改3種,影響域分析分別設(shè)立了賦值語句、條件語句、函數(shù)調(diào)用、跨文件調(diào)用4個模塊的測試。功能實驗數(shù)據(jù)集為自行設(shè)計的c語言程序,分為版本1和版本2,每個版本有main.c和test.c兩個文件,文件詳細內(nèi)容見附錄。運行檢測程序,實驗運行時間不超過1 s,程序運行結(jié)果如圖3所示。

      圖3 功能實驗結(jié)果

      圖3中thisIsOld和thisIsNew分別為版本1和版本2的分析結(jié)果,因代碼修改中存在增加和刪除,版本1和版本2的分析結(jié)果不一一對應(yīng)。實驗輸出為行號和影響域內(nèi)容(下文我們用{行號,修改內(nèi)容}表示),分析結(jié)果的基層影響域如圖3(a)和多層影響域如圖3(b)。在main.c的test1函數(shù)中設(shè)置了賦值語句修改特征,依據(jù)修改特征實驗得到基層影響域{7,a}和多層影響域{8,b}{9,c}。在main.c的test2函數(shù)中設(shè)置了條件語句修改特征,依據(jù)修改特征實驗得到基層影響域{19,temp}和多層影響域{21,result}。在main.c的test3函數(shù)中設(shè)置了修改特征影響函數(shù)調(diào)用過程中的形參和return,依據(jù)修改特征實驗得到基層影響域{34,x}和受形參影響的多層影響域{26,result}、受return影響的{36,z}。在main.c的test4函數(shù)中設(shè)置了跨文件調(diào)用test.c的函數(shù),依據(jù)修改特征實驗得到基層影響域{7,c}{8,c}和多層影響域{8,c}{9,d}{10,e}。

      在功能實驗中我們檢測出了所有設(shè)置的修改特征,并且分析出可能受影響的變量標識符,準確率達100%。依據(jù)上述功能實驗結(jié)果我們得出結(jié)論,以本文提出的修改特征提取和影響域分析方法設(shè)計的檢測程序可以實現(xiàn)賦值語句、條件語句、函數(shù)調(diào)用、跨文件調(diào)用等情況下C語言程序的影響域分析。

      3.2 公開數(shù)據(jù)集實驗

      公開數(shù)據(jù)集實驗以公開數(shù)據(jù)集https://github.com/antirez/sds中sds.c、sds.h、sdsalloc.h、testhelp.h為版本3程序,設(shè)置少量修改為版本4程序,對版本3和版本4代碼進行影響域分析。版本3程序修改具體內(nèi)容如表1所示運行檢測程序,運行時間不超過1 s,程序運行結(jié)果如表2所示。

      表1 公開數(shù)據(jù)集修改表

      表2 公開數(shù)據(jù)集影響域分析結(jié)果

      在公開數(shù)據(jù)集實驗中,我們以公開數(shù)據(jù)集為數(shù)據(jù)測試了基于標識符的修改特征提取方法和基于標識符檢測隊列的影響域分析方法。公開數(shù)據(jù)集實驗基層影響域共檢測到4個,多層影響域共檢測到38個,其中錯誤識別數(shù)量為6個,實驗結(jié)果準確率為85.7%。對實驗結(jié)果分析,實驗中錯誤識別影響域的原因是檢測程序的檢測規(guī)則設(shè)定不完善,可以按照c語言規(guī)則繼續(xù)完善。公開數(shù)據(jù)集實驗驗證了本文提出的方法在大型工程C語言程序中的有效性。

      4 結(jié)束語

      軟件質(zhì)量評測的自動化可以大幅提高評測效率,是未來裝備軟件質(zhì)量評測發(fā)展的主要方向。本文提出的基于標識符的修改特征提取方法和基于標識符檢測隊列的影響域分析方法自動化實現(xiàn)了裝備軟件修改特征提取和影響域分析,在質(zhì)量評測領(lǐng)域提出了一種有效的影響域分析方法,推進了裝備軟件質(zhì)量評測自動化。在后續(xù)的工作中,將軟件影響域分析與其他自動化分析工具相結(jié)合,實現(xiàn)裝備軟件質(zhì)量評測的全面自動化,是我們后續(xù)研究的重點內(nèi)容。

      猜你喜歡
      標識符隊列語句
      淺析5G V2X 通信應(yīng)用現(xiàn)狀及其側(cè)鏈路標識符更新技術(shù)
      基于底層虛擬機的標識符混淆方法
      重點:語句銜接
      隊列里的小秘密
      基于多隊列切換的SDN擁塞控制*
      軟件(2020年3期)2020-04-20 00:58:44
      基于區(qū)塊鏈的持久標識符系統(tǒng)①
      在隊列里
      精彩語句
      豐田加速駛?cè)胱詣玉{駛隊列
      數(shù)字美術(shù)館“數(shù)字對象唯一標識符系統(tǒng)”建設(shè)需求淺議
      太白县| 洮南市| 株洲县| 慈利县| 榆中县| 长顺县| 织金县| 綦江县| 道孚县| 商洛市| 中宁县| 邳州市| 扬州市| 文山县| 娄烦县| 长汀县| 奈曼旗| 横峰县| 皋兰县| 南郑县| 韩城市| 石首市| 射阳县| 岑溪市| 藁城市| 堆龙德庆县| 赣榆县| 明星| 莆田市| 抚宁县| 开平市| 安庆市| 德钦县| 若尔盖县| 乐亭县| 龙南县| 天峨县| 日照市| 白城市| 根河市| 凭祥市|