劉楷正,喬陽陽,董 濤,王麗娟
(1. 鄭州工商學(xué)院信息工程學(xué)院,河南 鄭州 451400;2. 華北水利水電大學(xué)電力學(xué)院,河南 鄭州 450046)
現(xiàn)階段,計(jì)算機(jī)軟件在各個行業(yè)中都得到了廣泛運(yùn)用,其發(fā)展規(guī)模不斷擴(kuò)大,復(fù)雜程度也在不斷地提高。隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,給軟件工程領(lǐng)域帶來了新的機(jī)遇和挑戰(zhàn)[1]。目前來看,軟件系統(tǒng)的發(fā)展規(guī)模越發(fā)龐大,系統(tǒng)的結(jié)構(gòu)日趨復(fù)雜,如何保證軟件代碼安全、可靠地運(yùn)行,始終是軟件研究領(lǐng)域所關(guān)心的重點(diǎn)問題[2]。軟件源代碼缺陷問題影響著整個軟件開發(fā)的過程,是十分重要的一個環(huán)節(jié)。由于軟件缺陷問題所帶來的損害通常并不只是經(jīng)濟(jì)上的損害,而是在重要的體系發(fā)生故障時(shí),會危及人們的人身安全和財(cái)產(chǎn)安全[3]。因此,在軟件開發(fā)應(yīng)用前,對軟件源代碼缺陷進(jìn)行校正,是當(dāng)前軟件工程研究領(lǐng)域的一個熱點(diǎn)問題。
王曉萌等人[4]研究了一種利用多信道卷積網(wǎng)絡(luò)進(jìn)行源碼缺陷識別的算法,利用word2vec、fasttext等詞匯嵌入技術(shù)表示詞匯間的矢量關(guān)系,并建立了一個完整的矢量表示模型,用來表達(dá)源代碼的特征;該方法通過對源碼中缺陷類型進(jìn)行深入的卷積網(wǎng)絡(luò)學(xué)習(xí),構(gòu)造出一種基于源代碼缺陷類型的源代碼故障分類器,從而達(dá)到對多類別代碼缺陷的準(zhǔn)確識別,用SARD和開放源碼對其進(jìn)行了檢驗(yàn)。曹英魁等人[5]在解析代碼過程中,結(jié)合ExpTrans.ExpTrans,以圖表的方式實(shí)現(xiàn)了代碼的自動轉(zhuǎn)換,明確地指明了代碼中變量間的相關(guān)性,并將圖卷積網(wǎng)絡(luò)與 Transformer體系相融合,提高了該模型的編碼結(jié)構(gòu)和相關(guān)信息,從而提高了代碼轉(zhuǎn)換的精確度。通過仿真證明了,ExpTrans在修改例數(shù)和精確度方面都有很大提高,準(zhǔn)確率上升了20%左右。
基于以上研究背景,本文將人工智能技術(shù)應(yīng)用于復(fù)雜軟件源代碼缺陷校正中,避免軟件受到黑客攻擊。
在復(fù)雜軟件中,將源代碼的終結(jié)符集合和非終結(jié)符集合定義為Σ和Ω,用D∈Ω代表源代碼的開始字符,G為一個規(guī)則的代碼集合,通常采用S->β形式表示,g代表源代碼規(guī)則集G中終結(jié)符的形成概率,在源代碼規(guī)則集的左部,g與非終結(jié)符形成概率的和為1,表示為:
(1)
式中,Ωi代表源代碼的非終結(jié)符,Λj代表復(fù)雜軟件源代碼的字符串。
根據(jù)概率學(xué)數(shù)學(xué)方程式[6],計(jì)算復(fù)雜軟件中全部源代碼的語義概率值Q(D),并將出現(xiàn)概率最大的語義概率值作為源代碼語義分析的樣本,利用語法分析器[7],對源代碼的語言文本進(jìn)行分析:
(2)
式中,Q(t,s)代表源代碼最優(yōu)的語義規(guī)則概率,t代表未進(jìn)行標(biāo)注的源代碼語義樣本參數(shù),Φ代表復(fù)雜軟件源代碼語義分析過程中的符號流。
(3)
式中,f(x)代表源代碼語言符號流的延續(xù)函數(shù),即復(fù)雜軟件源代碼語義函數(shù)接收上一個延續(xù)作為新添加的參數(shù)。
通過對所有復(fù)雜軟件源代碼語義符號流的轉(zhuǎn)化和解析,得出了源代碼的語義過渡階段函數(shù)Ud、條件轉(zhuǎn)移函數(shù)KS,并依據(jù)所述的源代碼中間變換進(jìn)行了新的解析[8],從而得出了復(fù)雜軟件源代碼語義分析結(jié)果:
(4)
利用語法分析器,建立源代碼語言的文本分析樹,通過定義源代碼語言文本中間轉(zhuǎn)換執(zhí)行流的延續(xù),分析復(fù)雜軟件源代碼語義。
在對復(fù)雜軟件源代碼程序標(biāo)注驗(yàn)證分析的過程中,首先需要采集源代碼程序運(yùn)行過程中的異常項(xiàng)信息,并獲取異常信息出現(xiàn)次數(shù),結(jié)合人工智能的計(jì)算機(jī)技術(shù)[9],計(jì)算出后驗(yàn)概率:
(5)
式中,p(Y∣ei)和p(Y∣ej)分別表示源代碼程序Y在ei和ej狀態(tài)下的條件概率,p(ei)和p(ej)分別表示ei和ej的后驗(yàn)概率。
對復(fù)雜軟件源代碼程序進(jìn)行標(biāo)注后,采用人工智能技術(shù)中的聚類算法再對復(fù)雜軟件源代碼的程序標(biāo)注進(jìn)行驗(yàn)證[10]。通過對樣本集的匹配,組成N個新的復(fù)雜軟件源代碼樣本集,從而獲得M個源代碼特征指標(biāo)yj={y1j,y2j,…,ymj}T,則復(fù)雜軟件源代碼樣本集可以通過N×M階矩陣描述為:
(6)
根據(jù)h個級別標(biāo)準(zhǔn),對N個源代碼程序的M個指標(biāo)特征進(jìn)行分類和識別[11],從而得到復(fù)雜軟件源代碼模糊矩陣表示為:
(7)
式中,wkl表示源代碼程序l對應(yīng)級別k的隸屬程度。
假設(shè),每個級別k內(nèi)包含M個特征指標(biāo)值,根據(jù)h個級別的標(biāo)準(zhǔn),對M×h階標(biāo)準(zhǔn)矩陣進(jìn)行描述,表示為:
(8)
式中,uzk表示復(fù)雜軟件源代碼k指標(biāo)滿足z的標(biāo)準(zhǔn)指標(biāo)值。
得到N條復(fù)雜軟件源代碼程序標(biāo)注的標(biāo)準(zhǔn)指標(biāo)集,將程序標(biāo)注中待分類的指標(biāo)集ψs與源代碼程序庫進(jìn)行混合比對,通過對模糊矩陣的計(jì)算[12],得到程序標(biāo)注的貼近度,設(shè)N×M階的兩個矩陣B(bij)和V(vij),則有:
(9)
通過上式可以得到復(fù)雜軟件源代碼程序標(biāo)注與集合的貼近度,如果所獲得的結(jié)果與所述精確的程序標(biāo)注并不相符,那么,對復(fù)雜軟件源代碼程序標(biāo)注集與每個樣本集的貼近程度進(jìn)行比較,如果所述的結(jié)果與程序標(biāo)注樣本集匹配,說明復(fù)雜軟件源代碼程序標(biāo)注不存在問題,反之說明程序標(biāo)注結(jié)果不準(zhǔn)確。
引入人工智能領(lǐng)域的計(jì)算機(jī)科學(xué)技術(shù),計(jì)算復(fù)雜軟件的后驗(yàn)概率,利用模糊矩陣計(jì)算源代碼缺陷的貼近度,驗(yàn)證復(fù)雜軟件源代碼的程序標(biāo)注。
假設(shè)nDs表示源代碼缺陷數(shù)量,nC表示復(fù)雜軟件源代碼總行數(shù),Os表示復(fù)雜軟件源代碼缺陷校正密度,其計(jì)算公式為:
(10)
根據(jù)復(fù)雜軟件源代碼缺陷特征數(shù)據(jù)的計(jì)算結(jié)果,對源代碼缺陷進(jìn)行預(yù)處理,表達(dá)式為:
(11)
式中,Cs代表復(fù)雜軟件源代碼缺陷校正的能力,η*代表復(fù)雜軟件源代碼缺陷率,k表示一般常數(shù)。
(12)
式中,d%表示復(fù)雜軟件源代碼缺陷的欠抽樣處理結(jié)果。如果結(jié)果d%=0,說明復(fù)雜軟件源代碼缺陷沒有進(jìn)行校正操作;如果d%=50%,說明復(fù)雜軟件源代碼缺陷數(shù)據(jù)比正常數(shù)據(jù)的數(shù)量要多百分之五十;如果d%=100%,則說明復(fù)雜軟件源代碼缺陷校正效果良好,即復(fù)雜軟件源代碼缺陷數(shù)目趨向?yàn)榱恪?/p>
假設(shè)A和C分別表示復(fù)雜軟件源代碼缺陷校正變量,對復(fù)雜軟件源代碼缺陷信息進(jìn)行處理[14],得到復(fù)雜軟件源代碼缺陷特征關(guān)聯(lián)度信息,具體計(jì)算公式為:
(13)
式中,H(A)和H(C)代表復(fù)雜軟件源代碼缺陷特征變量,p(a)代表復(fù)雜軟件源代碼缺陷特征取值為a的校正概率;如果Ω(A,C)∈[0,1],當(dāng)Ω(A,C)越大時(shí),表明復(fù)雜軟件源代碼缺陷之間的關(guān)聯(lián)度較高,相反,如果Ω(A,C)越小,則說明復(fù)雜軟件源代碼缺陷特征間的關(guān)聯(lián)程度越低。
基于人工智能中的數(shù)據(jù)依賴性分析理論[15],提取出復(fù)雜軟件源代碼缺陷校正分區(qū)依賴關(guān)系,表示為:
(14)
(15)
(16)
式中,φk代表復(fù)雜軟件源代碼缺陷校正的初始化函數(shù),?c代表復(fù)雜軟件源代碼缺陷校正過程中的內(nèi)存模型,μ*代表校正系數(shù)。
綜上所述,根據(jù)復(fù)雜軟件源代碼的缺陷密度,利用人工智能聚類算法,預(yù)處理了源代碼缺陷特征,依據(jù)人工智能的數(shù)據(jù)依賴性分析理論,提取出源代碼分區(qū)的依賴關(guān)系,結(jié)合代碼轉(zhuǎn)換,實(shí)現(xiàn)復(fù)雜軟件源代碼缺陷的校正。
為了驗(yàn)證所研究方法在校正復(fù)雜軟件源代碼缺陷時(shí)的性能,采用PyTorch開源框架對復(fù)雜軟件源代碼進(jìn)行編寫,編程語言為Python 4.2,環(huán)境參數(shù)為PyCharm+PyTorch。
在3.1節(jié)的實(shí)驗(yàn)環(huán)境下,本文選擇Siemens復(fù)雜軟件作為實(shí)驗(yàn)對象進(jìn)行驗(yàn)證,復(fù)雜軟件程序的基本信息如表1所示。
表1 復(fù)雜軟件程序的基本信息
采用所研究方法對復(fù)雜軟件的源代碼缺陷進(jìn)行校正之后,測試了表1中各個程序的運(yùn)行效率,為了突出所研究方法的優(yōu)越性,引入基于深度卷積神經(jīng)網(wǎng)絡(luò)的校正方法和基于結(jié)構(gòu)信息增強(qiáng)的校正方法作對比,結(jié)果如圖1所示。
圖1 復(fù)雜軟件程序的運(yùn)行效率
根據(jù)圖1中的結(jié)果可知,由于Siemens復(fù)雜軟件在運(yùn)行過程中的安全性較低,會導(dǎo)致源代碼存在缺陷,從而影響軟件程序的運(yùn)行效率,利用所研究方法對Siemens復(fù)雜軟件源代碼缺陷進(jìn)行校正,可以將軟件程序的運(yùn)行效率提高到90%以上,避免軟件程序出現(xiàn)卡頓的現(xiàn)象,而基于深度卷積神經(jīng)網(wǎng)絡(luò)的校正方法和基于結(jié)構(gòu)信息增強(qiáng)的校正方法的運(yùn)行效率低于所研究方法,說明所研究方法具有更高的應(yīng)用價(jià)值。
進(jìn)一步測試復(fù)雜軟件源代碼缺陷的校正準(zhǔn)確率和召回率,結(jié)果如圖2和圖3所示。
圖2 復(fù)雜軟件源代碼缺陷的校正準(zhǔn)確率
圖3 復(fù)雜軟件源代碼缺陷的校正召回率
從圖2中的結(jié)果可以看出,與基于深度卷積神經(jīng)網(wǎng)絡(luò)的校正方法和基于結(jié)構(gòu)信息增強(qiáng)的校正方法相比,所研究方法可以將復(fù)雜軟件源代碼缺陷的校正準(zhǔn)確率提高到90%以上,能夠準(zhǔn)確對源代碼缺陷進(jìn)行校正,降低復(fù)雜軟件出現(xiàn)漏洞的概率。
圖3中的結(jié)果顯示,采用基于深度卷積神經(jīng)網(wǎng)絡(luò)的校正方法和基于結(jié)構(gòu)信息增強(qiáng)的校正方法時(shí),復(fù)雜軟件源代碼缺陷的校正召回率在70%以下,會出現(xiàn)誤檢的情況,而采用所研究方法時(shí),復(fù)雜軟件源代碼缺陷的校正召回率能夠達(dá)到90%以上,能夠保證復(fù)雜軟件的穩(wěn)定運(yùn)行。因?yàn)樗芯糠椒ǜ鶕?jù)復(fù)雜軟件源代碼的缺陷密度,采用人工智能技術(shù)中的聚類算法預(yù)處理源代碼缺陷特征,并依據(jù)數(shù)據(jù)依賴性分析理論,提取出源代碼分區(qū)的依賴關(guān)系,實(shí)現(xiàn)了復(fù)雜軟件源代碼缺陷的校正。
本文提出了基于人工智能的復(fù)雜軟件源代碼缺陷校正仿真,經(jīng)過仿真分析發(fā)現(xiàn),所研究方法具有較高的缺陷校正準(zhǔn)確率和召回率,能夠保證復(fù)雜軟件的穩(wěn)定運(yùn)行。但是本文的研究還存在一定不足,在今后的研究中,需要對復(fù)雜軟件的注入攻擊進(jìn)行檢測,通過提高復(fù)雜軟件源代碼的安全性,避免復(fù)雜軟件源代碼出現(xiàn)缺陷。