王力超,耿樹(shù)巧
(安徽工程大學(xué) 皖江高端裝備制造協(xié)同創(chuàng)新中心,安徽 蕪湖 241000)
數(shù)控系統(tǒng)軟件缺陷自定位方法研究
王力超,耿樹(shù)巧
(安徽工程大學(xué) 皖江高端裝備制造協(xié)同創(chuàng)新中心,安徽 蕪湖 241000)
針對(duì)傳統(tǒng)的數(shù)控系統(tǒng)軟件缺陷人工定位方法效率低下的問(wèn)題,提出了一種數(shù)控系統(tǒng)軟件缺陷自定位方法。首先設(shè)計(jì)數(shù)控系統(tǒng)軟件黑匣子,用于實(shí)時(shí)記錄軟件的執(zhí)行信息;然后根據(jù)代碼的謂詞節(jié)點(diǎn)和有向邊創(chuàng)建控制流圖,并根據(jù)控制流圖生成相似路徑集;最后建立基于樸素貝葉斯分類器的有向邊可疑度模型,計(jì)算得出執(zhí)行路徑中每個(gè)有向邊含有缺陷的概率,從而完成對(duì)軟件缺陷的定位。實(shí)驗(yàn)以一個(gè)含有缺陷的直線插補(bǔ)模塊為對(duì)象,計(jì)算每一條有向邊含有缺陷的概率,將懷疑度最高的有向邊代碼進(jìn)行更正并重新實(shí)驗(yàn),得到了與預(yù)期相同的結(jié)果,證明缺陷已被排除。實(shí)驗(yàn)結(jié)果表明該方法是可行的,可以有效提高數(shù)控系統(tǒng)的可用度。
數(shù)控系統(tǒng);軟件缺陷;自定位
近些年來(lái),隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,數(shù)控系統(tǒng)的功能也越來(lái)越多地由軟件來(lái)實(shí)現(xiàn)。如今,數(shù)控系統(tǒng)的功能越來(lái)越強(qiáng)大,導(dǎo)致其軟件規(guī)模也不斷地?cái)U(kuò)大,同時(shí),帶來(lái)的負(fù)面影響是數(shù)控系統(tǒng)軟件的可靠性越來(lái)越難以保證。[1]113-120數(shù)控系統(tǒng)軟件發(fā)生失效的主要原因是在使用過(guò)程中,在某個(gè)特定的輸入域下,軟件中的缺陷被激活而導(dǎo)致的。[2]234-246缺陷是否被激活直接決定于輸入域的取值。[3]438-444所以,在數(shù)控系統(tǒng)的研發(fā)測(cè)試階段,不太可能發(fā)現(xiàn)并排除所有軟件缺陷,而在用戶使用過(guò)程中缺陷被激活,導(dǎo)致數(shù)控系統(tǒng)軟件發(fā)生故障。
在軟件發(fā)生故障后,數(shù)控系統(tǒng)的用戶會(huì)將故障情況反饋給研發(fā)人員,研發(fā)人員通常會(huì)通過(guò)內(nèi)存信息轉(zhuǎn)儲(chǔ)和打印中間結(jié)果的方法來(lái)對(duì)軟件缺陷進(jìn)行定位。[4]2262-2278這種傳統(tǒng)的定位方法的效率取決于研發(fā)人員的水平以及數(shù)控系統(tǒng)軟件規(guī)模的大小,同時(shí)調(diào)試過(guò)程中還會(huì)受到各種因素的制約與影響,難以實(shí)現(xiàn)對(duì)數(shù)控系統(tǒng)軟件缺陷快速且準(zhǔn)確地定位。[5]對(duì)故障的排除效率低下會(huì)降低數(shù)控系統(tǒng)的MTTR,也直接降低了該系統(tǒng)的可用度,導(dǎo)致用戶蒙受損失。所以,研究一種數(shù)控系統(tǒng)軟件缺陷快速準(zhǔn)確地自定位方法是非常有必要的。
于是,本文提出了一種數(shù)控系統(tǒng)軟件缺陷自定位方法。首先從設(shè)計(jì)缺陷自定位功能體系結(jié)構(gòu);其次以一個(gè)有缺陷的直線插補(bǔ)模塊為例,提取其發(fā)生失效時(shí)的速度曲線和位移曲線;隨后,以該直線插補(bǔ)模塊為對(duì)象,通過(guò)植入軟件黑匣子、生成相似路徑集、計(jì)算代碼可疑度等步驟,確定了缺陷代碼的位置;將缺陷代碼改正后,再次取相同輸入域,最終得到的速度曲線和位移曲線滿足期望,證明缺陷已被排除,表明數(shù)控系統(tǒng)軟件缺陷自定位方法是有效的。
為了方便說(shuō)明,本文假設(shè)用戶使用某型滾齒數(shù)控系統(tǒng)的直線插補(bǔ)功能,期望X軸從坐標(biāo)10插補(bǔ)到坐標(biāo)20,其他軸保持不變,進(jìn)給速度為700mm/min,加速類型為S型加速,加減速時(shí)間為300ms,插補(bǔ)周期為1ms。運(yùn)行后得到實(shí)際速度曲線如圖1所示,實(shí)際位移曲線如圖2所示。
圖1 發(fā)生軟件失效時(shí)X軸的速度曲線
圖2 發(fā)生軟件失效時(shí)X軸的位移曲線
從圖中可以明顯看出,X軸最終位置遠(yuǎn)未達(dá)到預(yù)期的坐標(biāo)20(只插補(bǔ)到13.5)。從用戶角度來(lái)說(shuō),實(shí)際輸出與期望輸出不符,也就是說(shuō)數(shù)控系統(tǒng)軟件發(fā)生了失效。
2.1 數(shù)控系統(tǒng)軟件黑匣子
數(shù)控系統(tǒng)軟件黑匣子的設(shè)計(jì)需要遵循以下原則:實(shí)時(shí)記錄的信息盡可能豐富,有助于分析缺陷代碼;對(duì)系統(tǒng)資源的占用要盡可能小,且對(duì)軟件模塊源代碼的影響足夠小,盡可能減少對(duì)數(shù)控系統(tǒng)正常運(yùn)行的干擾。
在設(shè)計(jì)數(shù)控系統(tǒng)軟件黑匣子時(shí),需要在每個(gè)模塊分支路徑處插樁,記錄模塊的執(zhí)行路徑。[6]882-885在保證模塊原有功能基礎(chǔ)上,在模塊程序代碼中插入一些檢查語(yǔ)句,通過(guò)對(duì)檢查語(yǔ)句地執(zhí)行并輸出程序的運(yùn)行特征數(shù)據(jù),就可以獲得模塊的動(dòng)態(tài)行為。插樁語(yǔ)句需要緊挨在分支謂詞的后面,使其在分支謂詞執(zhí)行后立即執(zhí)行,并且準(zhǔn)確獲得分支謂詞的狀態(tài)。對(duì)于循環(huán)結(jié)構(gòu),需要插入兩條語(yǔ)句:一條放置在循環(huán)語(yǔ)句之外,緊挨循環(huán)結(jié)構(gòu)執(zhí)行之前,用來(lái)探測(cè)分支謂詞的狀態(tài);另一條放在循環(huán)結(jié)構(gòu)體內(nèi)部的最前端,能夠探測(cè)在每次循環(huán)之前分支謂詞的狀態(tài)。
對(duì)該直線插補(bǔ)模塊,可執(zhí)行路徑有p0p1p3p13p14p25p28、p0p2p3p24p26p27、p0p1p27p28等。在每個(gè)分支處插樁,采用二進(jìn)制編碼的方式,用SoftwareBlackBox.path來(lái)記錄程序代碼的運(yùn)行路徑,1表示經(jīng)過(guò)該分支,0表示沒(méi)有經(jīng)過(guò)該分支。例如,路徑p0p1p3p13p14p25p28會(huì)被表示為二進(jìn)制11010000000001100000000001001。根據(jù)軟件黑匣子的記錄,在發(fā)生上節(jié)中所述的失效時(shí)的運(yùn)行路徑為p0p1p3p4p6p7p10p12p26p28,表示成二進(jìn)制編碼方式為11011011001010000000000000101。
2.2 數(shù)控系統(tǒng)軟件相似路徑集生成
2.2.1 源程序分析
數(shù)控系統(tǒng)的軟件代碼非常復(fù)雜且難以理解,人工分析效率低下。采用控制流圖法對(duì)數(shù)控系統(tǒng)軟件源程序進(jìn)行分析,可以更加效率地分析功能模塊的特征和行為。[5]
控制流圖是一個(gè)由謂詞結(jié)點(diǎn)和有向邊組成的有向圖,用圖的形式描述程序源代碼,方便地分析程序代碼間的支配關(guān)系、蘊(yùn)含關(guān)系以及軟件的執(zhí)行軌跡等。[7]51-63控制流圖可以用G=(P,B)來(lái)表示,其中是有向圖,是所有有向邊的集合,是所有謂詞節(jié)點(diǎn)的集合。有向圖G=(P,B)通常有唯一的入口邊e0和出口邊ek,入口邊e0可以到達(dá)控制流圖中的任何一條有向邊,而控制流圖中的任何一條有向邊都會(huì)經(jīng)過(guò)出口邊ek。
控制流圖法主要分為5個(gè)步驟,分別是:劃分代碼的有向邊和謂詞節(jié)點(diǎn),構(gòu)造控制流圖,找出代碼的運(yùn)行路徑,分析執(zhí)行路徑的有向邊,根據(jù)輸入和輸出找出成功路徑和失效路徑。下面以第2節(jié)中展示的直線插補(bǔ)模塊程序(見(jiàn)表1)為例進(jìn)行詳細(xì)說(shuō)明。該直線插補(bǔ)模塊程序代碼一共包含11個(gè)謂詞節(jié)點(diǎn),29條有向邊,如表1所示。
按照直線插補(bǔ)模塊程序的謂詞節(jié)點(diǎn)和有向邊構(gòu)建控制流圖如圖3所示。
2.2.2 無(wú)約束邊的確定
在控制流圖中,有向邊之間存在支配關(guān)系和蘊(yùn)含關(guān)系。[8]401-413假設(shè)0
表1直線插補(bǔ)模塊的謂詞節(jié)點(diǎn)和有向邊
圖3 直線插補(bǔ)模塊的控制流圖
圖4 直線插補(bǔ)模塊的支配樹(shù)
有向邊pi蘊(yùn)含著有向邊pj,當(dāng)且僅當(dāng)所有從有向邊pi到有向邊pk(唯一的出口邊)的路徑都經(jīng)過(guò)有向邊pj,即稱有向邊pi和有向邊pj存在蘊(yùn)含關(guān)系。通過(guò)蘊(yùn)含關(guān)系,可以將直線插補(bǔ)模塊的控制流圖(圖3)轉(zhuǎn)化成一個(gè)蘊(yùn)含樹(shù)I(G),如圖5所示。
圖5 直線插補(bǔ)模塊的蘊(yùn)含樹(shù)
如果有向邊pu是控制流圖中的一條無(wú)約束邊,意味著在控制流圖中至少有一條從入口邊p0到出口邊pk的路徑中沒(méi)有包含有向邊pu。根據(jù)無(wú)約束邊的定義可知,無(wú)約束邊的集合即為支配樹(shù)中葉子節(jié)點(diǎn)與蘊(yùn)含樹(shù)中葉子節(jié)點(diǎn)的交集。于是可知,在如圖5所示的直線插補(bǔ)程序的控制流圖中,無(wú)約束邊分別為p1、p2、p5、p7、p8、p9、p11、p12、p14、p15、p18、p19、p21、p22、p24、p25、p26、p27。
2.2.3 相似路徑集生成算法
相似路徑生成算法的主要思想就是對(duì)無(wú)約束邊進(jìn)行替換。[9]2168-2173
由于該直線插補(bǔ)模塊的失效路徑為π=p0p1p3p4p6p7p10p12p26p28,于是可以標(biāo)記其中的無(wú)約束邊分別為p1、p7、p12和p26。根據(jù)相似路徑生成算法,分別對(duì)無(wú)約束邊進(jìn)行替換,可以得出失效路徑的相似路徑集如表2所示。
表2失效路徑的相似路徑集
將相似路徑與軟件黑匣子的歷史記錄信息進(jìn)行比對(duì),分析各條相似路徑的可行性,得出可行路徑分別是π5、π6、π7、π8、π9、π11和π14。其中,非失效相似路徑為π5、π6、π8、π9、π11和π14。
2.3 基于樸素貝葉斯分類器的有向邊可疑度模型
數(shù)控系統(tǒng)軟件代碼缺陷可疑度分析實(shí)質(zhì)上就是機(jī)器學(xué)習(xí)方法中的監(jiān)督學(xué)習(xí),用一組已知失效與否的執(zhí)行路徑作為訓(xùn)練樣本,以期待模型可以對(duì)任意執(zhí)行路徑或有向邊做出失效與否的判斷。
(1)
根據(jù)貝葉斯定理:
(2)
于是可將式(1)轉(zhuǎn)換為:
(3)
對(duì)于P(yi)的估計(jì)非常容易,只需要計(jì)算每個(gè)目標(biāo)值yi在訓(xùn)練樣本中出現(xiàn)的頻率即可。但是,估計(jì)P(a1,a2,…,am|yi)的值會(huì)遇到數(shù)據(jù)稀疏問(wèn)題,除非有一個(gè)非常龐大的訓(xùn)練樣本集,否則很難獲得可靠的估計(jì)值。而樸素貝葉斯分類器引入了一個(gè)十分簡(jiǎn)單的假設(shè)來(lái)避免數(shù)據(jù)稀疏問(wèn)題,即在給定樣本目標(biāo)值時(shí),屬性值之間相互條件獨(dú)立。也就是說(shuō),在給定樣本目標(biāo)值的情況下,觀察到的屬性值a1,a2,…,am的聯(lián)合概率等于每個(gè)單獨(dú)屬性的概率乘積,即
(4)
將其代入式(3),即可得到樸素貝葉斯分類器的定義如下:
(5)
其中,YNB即表示樸素貝葉斯分類器輸出的目標(biāo)值。
借鑒樸素貝葉斯的思想,可以建立數(shù)控系統(tǒng)軟件代碼可疑度分類器如下:
假設(shè)用xi=(a1i,a2i,…,ani)T來(lái)表示第i條路徑及路徑執(zhí)行結(jié)果,其中n=p+1(p為路徑中包含的有向邊的個(gè)數(shù)),aij(1≤j≤n-1)表示特征屬性:
ani表示第i條路徑是否為失效路徑。當(dāng)路徑i為非失效路徑時(shí),ani=0;當(dāng)路徑i為失效路徑時(shí),ani=1。于是,可以用2.2節(jié)中得到的非失效相似路徑與失效路徑共同構(gòu)成判定矩陣如下:
A=(x1x2…xm)
(6)
其中,判定矩陣的前n-1行依次表示有向邊p0、p1、p2、p6、p7、p10、p11、p25和p28,判定矩陣的m列依次表示非失效相似路徑π5、π6、π8、π9、π11、π14以及失效路徑πf和失效相似路徑π3。
每條有向邊的可疑度統(tǒng)計(jì)分析度量公式被定義成如下形式:
(7)
于是,根據(jù)式(7)可以得出各條有向邊的可疑度如表3所示。
表3失效路徑中各條有向邊的可疑度
根據(jù)表3可知,有向邊可疑度最高的是p7。回到直線插補(bǔ)模塊源代碼中分析,有向邊p7對(duì)應(yīng)的語(yǔ)句是pm->GxxStatus = 0x0003;,其功能是進(jìn)入減速階段。分析源代碼可知,在加減速階段結(jié)束之后應(yīng)當(dāng)進(jìn)入勻速階段,并非減速階段。于是可將其改正為pm->GxxStatus = 0x0002。采用同樣的輸入做測(cè)試,經(jīng)過(guò)更正后的直線插補(bǔ)模塊的處理,可以得到速度曲線與位移曲線如圖6和圖7所示。
圖6 未發(fā)生軟件失效時(shí)X軸的速度曲線
圖7 未發(fā)生軟件失效時(shí)X軸的位移曲線
從圖6和圖7中可以看出,改正后的直線插補(bǔ)模塊輸出與期望完全一致,可以認(rèn)為缺陷已被排除。實(shí)驗(yàn)結(jié)果表明該數(shù)控系統(tǒng)軟件缺陷自定位方法是有效的。
本文提出了一種數(shù)控系統(tǒng)軟件缺陷自定位方法,該方法可以幫助研發(fā)人員在發(fā)現(xiàn)數(shù)控系統(tǒng)軟件發(fā)生失效后迅速準(zhǔn)確地對(duì)缺陷進(jìn)行定位。以一個(gè)有缺陷代碼的直線插補(bǔ)模塊為對(duì)象,對(duì)其進(jìn)行缺陷自定位。首先,在數(shù)控系統(tǒng)軟件體系結(jié)構(gòu)的基礎(chǔ)上,增加了一個(gè)體系結(jié)構(gòu)擴(kuò)展層,即軟件黑匣子,用以跟蹤記錄軟件的執(zhí)行信息。其次,根據(jù)代碼的謂詞節(jié)點(diǎn)和有向邊,創(chuàng)建了直線插補(bǔ)模塊的控制流圖,并根據(jù)控制流圖生成了相似路徑集。隨后,借鑒了樸素貝葉斯算法的思想,建立了數(shù)控系統(tǒng)軟件代碼缺陷懷疑度分類器模型,并計(jì)算出失效路徑中各條有向邊的懷疑度。最后,將懷疑度最高的有向邊代碼進(jìn)行更正并重新實(shí)驗(yàn),得到了與預(yù)期相同的結(jié)果,證明缺陷已被排除。實(shí)驗(yàn)結(jié)果表明,該方法是可行的,可以有效提高故障排除效率,減少數(shù)控系統(tǒng)的MTTR,從而提高了數(shù)控系統(tǒng)的可用度。
[1]葉佩青, 張勇, 張輝. 數(shù)控技術(shù)發(fā)展?fàn)顩r及策略綜述[J]. 機(jī)械工程學(xué)報(bào), 2015, 51(21).
[2]Yang X, Tang K, Yao X.ALearning-to-RankApproachtoSoftwareDefectPrediction[J].IEEETransactionsonReliability, 2015, 64(1).
[3]王力超, 韓江, 張魁榜,等. 基于加權(quán)組合模型的數(shù)控系統(tǒng)軟件可靠性估計(jì)[J]. 中國(guó)機(jī)械工程, 2016, 27(4).
[4]王克朝, 王甜甜, 蘇小紅,等. 軟件錯(cuò)誤自動(dòng)定位關(guān)鍵科學(xué)問(wèn)題及研究進(jìn)展[J]. 計(jì)算機(jī)學(xué)報(bào), 2015(11).
[5]袁修華. 開(kāi)放式數(shù)控系統(tǒng)軟件故障自診斷、自愈合的研究[D]. 吉林大學(xué), 2011.
[6]王克朝, 王甜甜, 任向民,等. 失效上下文統(tǒng)計(jì)分析的軟件故障定位方法[J]. 計(jì)算機(jī)應(yīng)用, 2015, 35(3).
[7]Ju X, Zhang H, Wang A.Errordetectionbysoftwaresignaturesbasedoncontrolflowgraph[J].FutureComputer&InformationTechnology, 2013.
[8]Shu X, Yao D, Ramakrishnan N. Unearthing Stealthy Program Attacks Buried in Extremely Long Execution Paths[C]// The, ACM Sigsac Conference. ACM, 2015.
[9]郭曦, 王盼. 基于動(dòng)態(tài)協(xié)同雙向映射的相似執(zhí)行路徑生成方法[J]. 電子學(xué)報(bào), 2014(11).
[10]Berend D, Kontorovich A. A finite sample analysis of the Naive Bayes classifier[J]. Journal of Machine Learning Research, 2015, 16(1).
Self-localizationMethodofSoftwareDefectinCNCSystem
Wang Lichao,Geng Shuqiao
(WanJiang Collaborative Innovation Center for High-end Manufacturing Equipment, Anhui Polytechnic University, Wuhu, Anhui 241000,China)
In order to solve the low efficiency of traditional manual positioning method for CNC system software defects, a self-localization method is proposed. Firstly, the black box of CNC system software is designed to record the execution information of the software in real time. Then, the control flow graph is created according to the predicate nodes and directed edges, on this basis, a similar path set is generated. Finally, a directed edge suspicious degree model is established based on the naive Bayesian classifier, which is used to calculate the probability of each directed edge contains defect in the execution path, so that the positioning of software defects can be achieved. Taking a linear interpolation module contains defects as the experiment object, the probability of each directed edge contains defect is calculated, after that, correct the most suspicious directed edge code and re-experiment. The results is the same as expected, which proves that the defects have been excluded. The experiment results show that the method is feasible and can improve the availability of CNC system.
CNC system; software defect; self-localization
TP273+.5
:A
(責(zé)任編輯:蔡雪嵐)
1672-6758(2017)09-0039-6
王力超,博士,講師,安徽工程大學(xué)。研究方向:樓宇自動(dòng)化系統(tǒng)。 通訊作者:耿樹(shù)巧,碩士,工程師,安徽工程大學(xué)。研究方向:軟件可靠性。
安徽工程大學(xué)引進(jìn)人才科研啟動(dòng)基金(編號(hào);2016YQQ017);安徽省高等教育提升計(jì)劃自然科學(xué)研究一般項(xiàng)目(編號(hào):TSKJ2017B24);安徽工程大學(xué)青年科研基金(編號(hào):2017YQ03) 。
ClassNo.:TP273+.5DocumentMark:A