于蕭榕,黃健榮
(江蘇科技大學(xué)計算機學(xué)院,江蘇 鎮(zhèn)江 212003)
并行傳輸是指以分組的形式,通過多個并行信道同時傳輸數(shù)據(jù)。在傳輸過程中,多個數(shù)據(jù)一起在設(shè)備之間傳輸,并且一次可以傳輸一個字符,收發(fā)雙方不需要同步,控制方式簡單快捷。然而,并行傳輸需要多個物理信道,因此這種傳輸方式只適用于短距離、高傳輸速率的情況。程序中的代碼壞味是由設(shè)計缺陷或不良的編碼習(xí)慣引起的,它影響了軟件程序和結(jié)構(gòu)代碼的質(zhì)量[1]。針對代碼檢測問題,眾多學(xué)者作出研究,其中,文獻[2]探究壞味產(chǎn)生的影響以及壞味與軟件演化之間的關(guān)系,有助于開發(fā)者更好地在不同的項目中呈現(xiàn)出不同的特征,將計劃軟件開發(fā)過程和重構(gòu)軟件代碼,并在8個Java項目共計104個版本中進行了系統(tǒng)的實證研究,但是其準(zhǔn)確率尚未驗證。文獻[3]基于梯度提升樹,研究了惡意代碼分類方法,使模型結(jié)果行為序列具有可解釋性,客觀地反映惡意代碼的行為和意圖本質(zhì),解決變種惡意代碼、未知威脅行為惡意分析等問題,實現(xiàn)了智能惡意代碼分類功能,但其模型召回率較低,計算量較大。文獻[4]使用人工智能與機器學(xué)習(xí)技術(shù),輔助軟件工程中的代碼編寫、糾錯、測試等具體工作在軟件開發(fā)過程中,提升軟件開發(fā)效率,進一步提升軟件開發(fā)過程的自動化,但是其輔助軟件工程信號處理環(huán)節(jié)尚不明確。
為此,本文提出一種基于數(shù)據(jù)并行傳輸程序中代碼壞味檢測算法研究,其關(guān)鍵在于利用貝葉斯網(wǎng)絡(luò)將最新的檢測規(guī)則轉(zhuǎn)化為概率模型,實現(xiàn)代碼壞味檢測,該檢測方法能夠有效的對代碼壞味進行準(zhǔn)確、高效檢測。
并行數(shù)據(jù)傳輸系統(tǒng)的原理是依靠相鄰?fù)ǖ?,每個信道需要發(fā)送兩組獨立的數(shù)據(jù)序列,通過抑制載波幅度調(diào)制,分別調(diào)制成一對正交載波(頻率等于信道的中心頻率),各組數(shù)據(jù)序列碼速是b/2,兩組序列在時間上面交錯為1/b。而相鄰信道則反向交錯,便于調(diào)制偶數(shù)信道上余弦載波數(shù)據(jù)的序列與調(diào)制奇數(shù)信道上正弦載波數(shù)據(jù)的序列同向,相反亦然。
具體并行數(shù)據(jù)的傳輸信號頻譜如圖1所示。
圖1 并行數(shù)據(jù)傳輸程序頻譜
如果全部的發(fā)送濾波器以及接收的濾波器都存在同樣濾波器特性F(ω),并且它們受到相對信號碼速ω的限制,全存在奈奎斯特的滾降現(xiàn)象,所以可以得到公式為
F(ω)=0,|ω|≥πb
(1)
式中,F(xiàn)表示加窗方式。以及公式為
F2(ω)+F2(πb-ω)=1,0≤ω≤πb/2
(2)
而傳送信號公式為
(3)
式中:T=2/b表示f(t)反向傅里葉的變換,anm與bnm都是數(shù)據(jù)m或n的序列,f(t-nT)表示部分頻率的信號受到的較大時間系數(shù)t的抑制閾值T[5]。
由于系統(tǒng)的對稱性,與線性擴散傳輸介質(zhì)相比,只需考慮一個子信道。無論是偶數(shù)信道、奇數(shù)信道、正弦信道還是余弦信道,它們的結(jié)果都是相等的。由于系統(tǒng)是線性的,失真可以由在每個子信道中傳輸?shù)膯蝹€脈沖的響應(yīng)來確定。
將傳輸媒質(zhì)頻率的響應(yīng)設(shè)為
H(ω)=A(ω)exp[jφ(ω)]
(4)
忽略任何恒定的時間延遲,如果沒有出現(xiàn)一般損失狀態(tài),那么下面利用第k個信道余弦子的信道作為例子進行失真情況分析。
與子信道相比,需要考慮六個失真分量。它們是正交信道和同一信道產(chǎn)生的失真,以及相鄰比高低信道中串?dāng)_產(chǎn)生的失真[6]。
在子信道內(nèi)單個脈沖進行傳輸時,具體的接收信號頻譜公式為
(5)
式中,ωk=ω0+kπb代表信道中心的頻率,此信號與2cosωkt相乘,且利用F(ω)濾波,生成頻率公式為
(6)
當(dāng)t=t0時刻對此信號進行采樣,方便恢復(fù)數(shù)據(jù)。其失真被定義成在全部其它采樣時刻的信號絕對值總和nT以及中心采樣的時刻信號幅度r1比值,具體公式為
D1=r1(t0+nT)
(7)
在這里為
(8)
式中,R1(ω)表示對稱子信道線性函數(shù)。當(dāng)正交子信道中,對于單一脈沖接收的信號公式為
(9)
式中,出現(xiàn)相位因子的原因是脈沖時間偏移了半個信號周期。在經(jīng)過2cosωkt調(diào)節(jié)和F(ω)濾波之后,傳輸至同相子載波采樣器信號的頻譜內(nèi),具體公式為
R2(ω)=F2(ω)[H(ω-ωk)-H(ω+ωk)]
(10)
此種干擾信號全部采樣值生成的失真公式為
(11)
基于相似原理,對源于第(k+1)與(k-1)個信道同相以及正交子信道干擾的分量進行分析,其中最相似的分量查找結(jié)果表示為
(12)
以及
(13)
以上式(12)和(13)和式(11)相同,所以,總失真即為此6個分量累加,具體公式為
(14)
至此,得到數(shù)據(jù)并行傳輸程序的具體描述和失真效應(yīng)的分析[7]。
程序代碼壞味的檢測過程如圖2所示。
圖2 程度代碼壞味的檢測流程
如圖2所示,源代碼或源代碼度量定義可以用作輸入。在大多數(shù)檢測技術(shù)中,都使用從源代碼中提取的度量。
數(shù)據(jù)并行傳輸程序通常完成相同的功能模塊,而設(shè)計較差的程序也需要更多的代碼,這也導(dǎo)致代碼在不同的區(qū)域使用相同的語句來完成相同的事情。因此,重復(fù)代碼壞味會對程序設(shè)計產(chǎn)生非常嚴重的影響,重復(fù)的次數(shù)越多,修改程序的難度就越大。如果某個區(qū)域被修改,數(shù)據(jù)并行傳輸程序?qū)⒆兊酶永щy,它將無法按預(yù)期運行。代碼臭味的定義沒有統(tǒng)一的標(biāo)準(zhǔn),定義代碼臭味會因指標(biāo)不同而產(chǎn)生不同的結(jié)果。程序的質(zhì)量評價標(biāo)準(zhǔn)是以人為中心的,所以相對于一個班級是否有臭味,總會有一定程度的不確定性。貝葉斯方法可以將最新的檢測規(guī)則轉(zhuǎn)化為概率模型,具體的檢測結(jié)果將以概率的形式呈現(xiàn)出來,從而使一個類屬于不良品味度。
貝葉斯網(wǎng)絡(luò)是作為一個表示概率分布非周期性的圖表,此圖表內(nèi),每一個節(jié)點就代表一個隨機變量Xi,這兩個節(jié)點間的邊代表一個概率,此概率是父節(jié)點代表變量和子節(jié)點代表的變量間依賴程度度量。假設(shè)貝葉斯網(wǎng)絡(luò)內(nèi)表示各個節(jié)點為Xi,只是某一些條件之下所獨立于父節(jié)點,各個節(jié)點Xi所關(guān)聯(lián)一個條件的概率表,此條件概率表代表全部概率分布的可能值[8]。
貝葉斯網(wǎng)絡(luò)的構(gòu)建需要兩種信息:條件概率表和網(wǎng)絡(luò)結(jié)構(gòu),其中網(wǎng)絡(luò)結(jié)構(gòu)由節(jié)點和節(jié)點之間的弧構(gòu)成,條件概率可以利用歷史數(shù)據(jù)進行學(xué)習(xí),其主要功能是描述每個節(jié)點的決策過程。
將貝葉斯分類器應(yīng)用于貝葉斯網(wǎng)絡(luò)分類問題。程序代碼的異味檢測可以看作是一個分類問題。與給定類的檢測結(jié)果相比,只有一個輸出:C={smell,notasmell},不過輸入是敘述類特征的向量。相對于各個分類的問題,檢測的結(jié)果會對應(yīng)一個概率,此概率度量了檢測結(jié)果不確定的程度,在分類d維向量時,能夠決策類別c是概率最大類,具體公式為:
c=arg maxckp(ck|a1,…,ad)
(15)
式中,ck是覆蓋了C內(nèi)全部類的集合,ai代表d維向量,通過具體度量值所構(gòu)成的[9]。
針對壞味代碼在其它區(qū)域反復(fù)出現(xiàn),但尚未修改問題,根據(jù)檢測規(guī)則構(gòu)造貝葉斯網(wǎng)絡(luò)。具體過程分為兩個步驟:將檢測規(guī)則中的輸出變量轉(zhuǎn)換為具有概率分布輸入的節(jié)點;將檢測規(guī)則內(nèi)的操作進行轉(zhuǎn)換,使其具有條件概率決策節(jié)點,具步驟如下所示:
1)輸入的屬性
相對于代碼壞味的檢測結(jié)構(gòu)以及語義規(guī)則,它們的概率不是0即是1,而度量值,它的概率通過三組(高、中、低)進行計算,且要分析屬于各個組的度量值,以此來估算概率值,限制的組數(shù)通過三組簡化結(jié)果證明。在檢測的過程內(nèi),較高與較低的概率全指1,而其它值概率是經(jīng)過自身計算的值以及附近的閾值相關(guān)距離獲取的[10]。
2)運算符設(shè)置
在不同檢測的規(guī)則內(nèi),合并信息存在兩種操作:并集以及交集。所有操作都能夠作為決策節(jié)點進行編碼至葉貝斯網(wǎng)絡(luò)內(nèi),此節(jié)點概率值能夠在已經(jīng)證明的歷史數(shù)據(jù)內(nèi)獲取。
3)輸出節(jié)點
通過壞味檢測出一個二元的結(jié)果,那么貝葉斯的就是輸出節(jié)點一個概率p,此概率p能夠依據(jù)重要程度完成對類排序[11]。
4)當(dāng)數(shù)據(jù)經(jīng)過分割和驗證后,應(yīng)用貝葉斯網(wǎng)絡(luò)對模型進行修正。條件概率表描述了實際臭味的產(chǎn)生[12]。因此,貝葉斯網(wǎng)絡(luò)的結(jié)果通常比正則模型的結(jié)果更準(zhǔn)確。
在決策過程中,決策與輸入之間沒有必然的聯(lián)系,決策會因噪聲而產(chǎn)生錯誤。利用歷史數(shù)據(jù)的學(xué)習(xí)概率表,將噪聲的影響降到最小。至此,實現(xiàn)代碼壞味檢測。
為了驗證本文壞味檢測算法的有效性,設(shè)準(zhǔn)確率、召回率和度量值挖掘效果驗證代碼壞味檢測程度。
準(zhǔn)確率是指在程序所檢測壞味時,真實的壞味比率。假設(shè)A是程序內(nèi)所檢測出的壞味集合數(shù)量,那么B就是程序內(nèi)真正的壞味集合數(shù)量,那么準(zhǔn)確率(Precision)的具體計算公式為
(16)
式中:|A|表示集合A內(nèi)元素個數(shù)。通過將新舊程序進行對比,清除程序功能的更改,把獲得的程序變化狀況,對舊程序清除壞味。把此種實際情況整理分析,可以獲得程序內(nèi)真正的屬于壞味集合B。
召回率是指全部壞味內(nèi)被檢測出比率。具體召回率(Recall)計算的公式為
(17)
度量值是信息挖掘效果評價體系中確定最優(yōu)路由路徑的指標(biāo),可以有效測試決策過程中的貝葉斯網(wǎng)絡(luò)對類排序結(jié)果,度量值最小則程序內(nèi)實際的壞味個數(shù)挖掘效果最優(yōu)。同時,代碼壞味并不完全就是代碼錯誤,編碼正確并且可以實現(xiàn)全部預(yù)定功能程序內(nèi),代碼壞味依舊存在,不過存在這些壞味會在一定程度上影響程序的整體質(zhì)量,主要體現(xiàn)在程序的質(zhì)量設(shè)計,因此利用度量值體現(xiàn)壞味代碼模型定位效果即挖掘效果。
設(shè)需檢測程序代碼存在595個類,一共有3286個屬性與8012個方法,程序代碼的總行數(shù)會超出10萬行。
當(dāng)程序得到且統(tǒng)計每個實體到類調(diào)用的數(shù)據(jù),同時計算文獻[2]、文獻[3]、文獻[4]以及本文檢測方法的數(shù)值。在實體到其它某類距離比本類距離大時,通過計算r(x,B)>1,那么就認為出現(xiàn)壞味代碼。通過版本對比技術(shù),程序內(nèi)實際存在壞味具有300處。
四種方法具體檢測結(jié)果數(shù)據(jù)統(tǒng)計,如圖3所示。
圖3 不同方法壞味檢測結(jié)果統(tǒng)計
如圖3所示,其它方法所檢測到的最多代碼壞味具有290處,而本文方法檢測到的壞味為299處。和本文方法所檢測的壞味代碼大致相同。
理想模型下,代碼壞味只會在數(shù)據(jù)并行傳輸程序中表述一次,不存在單個重復(fù)的代碼壞味現(xiàn)象,以此為背景,進行不同方法的代碼壞味距離比檢測結(jié)果對比,具體對比結(jié)果如表1所示。
表1 不同方法的代碼壞味相同代碼壞味檢測結(jié)果
通過表1可知,其它方法的代碼壞味檢測結(jié)果與本文方法的壞味檢測所獲得的結(jié)果對比下,最多有2種是相同的代碼壞味。本文方法參與了距離率的計算后,致使權(quán)重的距離比要比1小,代碼壞味檢測為1。
不同方法的度量值對比結(jié)果如圖4所示。
圖4 不同方法的度量值對比結(jié)果
由圖4可知,本文方法在度量值對比過程中,可以具有較低的度量值,即對壞味代碼的定位路徑更近,效率更高,說明具有較高的魯棒性。
1)本文方法能夠很好的檢測出程序內(nèi)的代碼,并且和其它檢測方法對比,本文方法檢測結(jié)果準(zhǔn)確率提升了1.9%,而召回率提升6.1%,本文方法的檢測結(jié)果準(zhǔn)確度要更高。
2)利用貝葉斯網(wǎng)絡(luò)將最新的檢測規(guī)則轉(zhuǎn)化為概率模型,并從源代碼中提取代碼壞味度量,度量值可以使壞味代碼的定位路徑更近,總體應(yīng)用效率更高。
3)由于程序內(nèi)的代碼壞味種類非常多,本文方法并不適用于所有的壞味代碼檢測,所謂未來本文需要進一步研究壞味代碼特性,爭取實現(xiàn)更優(yōu)的壞味檢測。