王力超,耿樹巧
(安徽工程大學(xué) 皖江高端裝備制造協(xié)同創(chuàng)新中心,安徽 蕪湖 241000)
數(shù)控系統(tǒng)軟件缺陷自定位方法研究
王力超,耿樹巧
(安徽工程大學(xué) 皖江高端裝備制造協(xié)同創(chuàng)新中心,安徽 蕪湖 241000)
針對傳統(tǒng)的數(shù)控系統(tǒng)軟件缺陷人工定位方法效率低下的問題,提出了一種數(shù)控系統(tǒng)軟件缺陷自定位方法。首先設(shè)計數(shù)控系統(tǒng)軟件黑匣子,用于實時記錄軟件的執(zhí)行信息;然后根據(jù)代碼的謂詞節(jié)點和有向邊創(chuàng)建控制流圖,并根據(jù)控制流圖生成相似路徑集;最后建立基于樸素貝葉斯分類器的有向邊可疑度模型,計算得出執(zhí)行路徑中每個有向邊含有缺陷的概率,從而完成對軟件缺陷的定位。實驗以一個含有缺陷的直線插補模塊為對象,計算每一條有向邊含有缺陷的概率,將懷疑度最高的有向邊代碼進行更正并重新實驗,得到了與預(yù)期相同的結(jié)果,證明缺陷已被排除。實驗結(jié)果表明該方法是可行的,可以有效提高數(shù)控系統(tǒng)的可用度。
數(shù)控系統(tǒng);軟件缺陷;自定位
近些年來,隨著計算機技術(shù)的飛速發(fā)展,數(shù)控系統(tǒng)的功能也越來越多地由軟件來實現(xiàn)。如今,數(shù)控系統(tǒng)的功能越來越強大,導(dǎo)致其軟件規(guī)模也不斷地擴大,同時,帶來的負(fù)面影響是數(shù)控系統(tǒng)軟件的可靠性越來越難以保證。[1]113-120數(shù)控系統(tǒng)軟件發(fā)生失效的主要原因是在使用過程中,在某個特定的輸入域下,軟件中的缺陷被激活而導(dǎo)致的。[2]234-246缺陷是否被激活直接決定于輸入域的取值。[3]438-444所以,在數(shù)控系統(tǒng)的研發(fā)測試階段,不太可能發(fā)現(xiàn)并排除所有軟件缺陷,而在用戶使用過程中缺陷被激活,導(dǎo)致數(shù)控系統(tǒng)軟件發(fā)生故障。
在軟件發(fā)生故障后,數(shù)控系統(tǒng)的用戶會將故障情況反饋給研發(fā)人員,研發(fā)人員通常會通過內(nèi)存信息轉(zhuǎn)儲和打印中間結(jié)果的方法來對軟件缺陷進行定位。[4]2262-2278這種傳統(tǒng)的定位方法的效率取決于研發(fā)人員的水平以及數(shù)控系統(tǒng)軟件規(guī)模的大小,同時調(diào)試過程中還會受到各種因素的制約與影響,難以實現(xiàn)對數(shù)控系統(tǒng)軟件缺陷快速且準(zhǔn)確地定位。[5]對故障的排除效率低下會降低數(shù)控系統(tǒng)的MTTR,也直接降低了該系統(tǒng)的可用度,導(dǎo)致用戶蒙受損失。所以,研究一種數(shù)控系統(tǒng)軟件缺陷快速準(zhǔn)確地自定位方法是非常有必要的。
于是,本文提出了一種數(shù)控系統(tǒng)軟件缺陷自定位方法。首先從設(shè)計缺陷自定位功能體系結(jié)構(gòu);其次以一個有缺陷的直線插補模塊為例,提取其發(fā)生失效時的速度曲線和位移曲線;隨后,以該直線插補模塊為對象,通過植入軟件黑匣子、生成相似路徑集、計算代碼可疑度等步驟,確定了缺陷代碼的位置;將缺陷代碼改正后,再次取相同輸入域,最終得到的速度曲線和位移曲線滿足期望,證明缺陷已被排除,表明數(shù)控系統(tǒng)軟件缺陷自定位方法是有效的。
為了方便說明,本文假設(shè)用戶使用某型滾齒數(shù)控系統(tǒng)的直線插補功能,期望X軸從坐標(biāo)10插補到坐標(biāo)20,其他軸保持不變,進給速度為700mm/min,加速類型為S型加速,加減速時間為300ms,插補周期為1ms。運行后得到實際速度曲線如圖1所示,實際位移曲線如圖2所示。
圖1 發(fā)生軟件失效時X軸的速度曲線
圖2 發(fā)生軟件失效時X軸的位移曲線
從圖中可以明顯看出,X軸最終位置遠未達到預(yù)期的坐標(biāo)20(只插補到13.5)。從用戶角度來說,實際輸出與期望輸出不符,也就是說數(shù)控系統(tǒng)軟件發(fā)生了失效。
2.1 數(shù)控系統(tǒng)軟件黑匣子
數(shù)控系統(tǒng)軟件黑匣子的設(shè)計需要遵循以下原則:實時記錄的信息盡可能豐富,有助于分析缺陷代碼;對系統(tǒng)資源的占用要盡可能小,且對軟件模塊源代碼的影響足夠小,盡可能減少對數(shù)控系統(tǒng)正常運行的干擾。
在設(shè)計數(shù)控系統(tǒng)軟件黑匣子時,需要在每個模塊分支路徑處插樁,記錄模塊的執(zhí)行路徑。[6]882-885在保證模塊原有功能基礎(chǔ)上,在模塊程序代碼中插入一些檢查語句,通過對檢查語句地執(zhí)行并輸出程序的運行特征數(shù)據(jù),就可以獲得模塊的動態(tài)行為。插樁語句需要緊挨在分支謂詞的后面,使其在分支謂詞執(zhí)行后立即執(zhí)行,并且準(zhǔn)確獲得分支謂詞的狀態(tài)。對于循環(huán)結(jié)構(gòu),需要插入兩條語句:一條放置在循環(huán)語句之外,緊挨循環(huán)結(jié)構(gòu)執(zhí)行之前,用來探測分支謂詞的狀態(tài);另一條放在循環(huán)結(jié)構(gòu)體內(nèi)部的最前端,能夠探測在每次循環(huán)之前分支謂詞的狀態(tài)。
對該直線插補模塊,可執(zhí)行路徑有p0p1p3p13p14p25p28、p0p2p3p24p26p27、p0p1p27p28等。在每個分支處插樁,采用二進制編碼的方式,用SoftwareBlackBox.path來記錄程序代碼的運行路徑,1表示經(jīng)過該分支,0表示沒有經(jīng)過該分支。例如,路徑p0p1p3p13p14p25p28會被表示為二進制11010000000001100000000001001。根據(jù)軟件黑匣子的記錄,在發(fā)生上節(jié)中所述的失效時的運行路徑為p0p1p3p4p6p7p10p12p26p28,表示成二進制編碼方式為11011011001010000000000000101。
2.2 數(shù)控系統(tǒng)軟件相似路徑集生成
2.2.1 源程序分析
數(shù)控系統(tǒng)的軟件代碼非常復(fù)雜且難以理解,人工分析效率低下。采用控制流圖法對數(shù)控系統(tǒng)軟件源程序進行分析,可以更加效率地分析功能模塊的特征和行為。[5]
控制流圖是一個由謂詞結(jié)點和有向邊組成的有向圖,用圖的形式描述程序源代碼,方便地分析程序代碼間的支配關(guān)系、蘊含關(guān)系以及軟件的執(zhí)行軌跡等。[7]51-63控制流圖可以用G=(P,B)來表示,其中是有向圖,是所有有向邊的集合,是所有謂詞節(jié)點的集合。有向圖G=(P,B)通常有唯一的入口邊e0和出口邊ek,入口邊e0可以到達控制流圖中的任何一條有向邊,而控制流圖中的任何一條有向邊都會經(jīng)過出口邊ek。
控制流圖法主要分為5個步驟,分別是:劃分代碼的有向邊和謂詞節(jié)點,構(gòu)造控制流圖,找出代碼的運行路徑,分析執(zhí)行路徑的有向邊,根據(jù)輸入和輸出找出成功路徑和失效路徑。下面以第2節(jié)中展示的直線插補模塊程序(見表1)為例進行詳細說明。該直線插補模塊程序代碼一共包含11個謂詞節(jié)點,29條有向邊,如表1所示。
按照直線插補模塊程序的謂詞節(jié)點和有向邊構(gòu)建控制流圖如圖3所示。
2.2.2 無約束邊的確定
在控制流圖中,有向邊之間存在支配關(guān)系和蘊含關(guān)系。[8]401-413假設(shè)0
表1直線插補模塊的謂詞節(jié)點和有向邊
圖3 直線插補模塊的控制流圖
圖4 直線插補模塊的支配樹
有向邊pi蘊含著有向邊pj,當(dāng)且僅當(dāng)所有從有向邊pi到有向邊pk(唯一的出口邊)的路徑都經(jīng)過有向邊pj,即稱有向邊pi和有向邊pj存在蘊含關(guān)系。通過蘊含關(guān)系,可以將直線插補模塊的控制流圖(圖3)轉(zhuǎn)化成一個蘊含樹I(G),如圖5所示。
圖5 直線插補模塊的蘊含樹
如果有向邊pu是控制流圖中的一條無約束邊,意味著在控制流圖中至少有一條從入口邊p0到出口邊pk的路徑中沒有包含有向邊pu。根據(jù)無約束邊的定義可知,無約束邊的集合即為支配樹中葉子節(jié)點與蘊含樹中葉子節(jié)點的交集。于是可知,在如圖5所示的直線插補程序的控制流圖中,無約束邊分別為p1、p2、p5、p7、p8、p9、p11、p12、p14、p15、p18、p19、p21、p22、p24、p25、p26、p27。
2.2.3 相似路徑集生成算法
相似路徑生成算法的主要思想就是對無約束邊進行替換。[9]2168-2173
由于該直線插補模塊的失效路徑為π=p0p1p3p4p6p7p10p12p26p28,于是可以標(biāo)記其中的無約束邊分別為p1、p7、p12和p26。根據(jù)相似路徑生成算法,分別對無約束邊進行替換,可以得出失效路徑的相似路徑集如表2所示。
表2失效路徑的相似路徑集
將相似路徑與軟件黑匣子的歷史記錄信息進行比對,分析各條相似路徑的可行性,得出可行路徑分別是π5、π6、π7、π8、π9、π11和π14。其中,非失效相似路徑為π5、π6、π8、π9、π11和π14。
2.3 基于樸素貝葉斯分類器的有向邊可疑度模型
數(shù)控系統(tǒng)軟件代碼缺陷可疑度分析實質(zhì)上就是機器學(xué)習(xí)方法中的監(jiān)督學(xué)習(xí),用一組已知失效與否的執(zhí)行路徑作為訓(xùn)練樣本,以期待模型可以對任意執(zhí)行路徑或有向邊做出失效與否的判斷。
(1)
根據(jù)貝葉斯定理:
(2)
于是可將式(1)轉(zhuǎn)換為:
(3)
對于P(yi)的估計非常容易,只需要計算每個目標(biāo)值yi在訓(xùn)練樣本中出現(xiàn)的頻率即可。但是,估計P(a1,a2,…,am|yi)的值會遇到數(shù)據(jù)稀疏問題,除非有一個非常龐大的訓(xùn)練樣本集,否則很難獲得可靠的估計值。而樸素貝葉斯分類器引入了一個十分簡單的假設(shè)來避免數(shù)據(jù)稀疏問題,即在給定樣本目標(biāo)值時,屬性值之間相互條件獨立。也就是說,在給定樣本目標(biāo)值的情況下,觀察到的屬性值a1,a2,…,am的聯(lián)合概率等于每個單獨屬性的概率乘積,即
(4)
將其代入式(3),即可得到樸素貝葉斯分類器的定義如下:
(5)
其中,YNB即表示樸素貝葉斯分類器輸出的目標(biāo)值。
借鑒樸素貝葉斯的思想,可以建立數(shù)控系統(tǒng)軟件代碼可疑度分類器如下:
假設(shè)用xi=(a1i,a2i,…,ani)T來表示第i條路徑及路徑執(zhí)行結(jié)果,其中n=p+1(p為路徑中包含的有向邊的個數(shù)),aij(1≤j≤n-1)表示特征屬性:
ani表示第i條路徑是否為失效路徑。當(dāng)路徑i為非失效路徑時,ani=0;當(dāng)路徑i為失效路徑時,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)計分析度量公式被定義成如下形式:
(7)
于是,根據(jù)式(7)可以得出各條有向邊的可疑度如表3所示。
表3失效路徑中各條有向邊的可疑度
根據(jù)表3可知,有向邊可疑度最高的是p7。回到直線插補模塊源代碼中分析,有向邊p7對應(yīng)的語句是pm->GxxStatus = 0x0003;,其功能是進入減速階段。分析源代碼可知,在加減速階段結(jié)束之后應(yīng)當(dāng)進入勻速階段,并非減速階段。于是可將其改正為pm->GxxStatus = 0x0002。采用同樣的輸入做測試,經(jīng)過更正后的直線插補模塊的處理,可以得到速度曲線與位移曲線如圖6和圖7所示。
圖6 未發(fā)生軟件失效時X軸的速度曲線
圖7 未發(fā)生軟件失效時X軸的位移曲線
從圖6和圖7中可以看出,改正后的直線插補模塊輸出與期望完全一致,可以認(rèn)為缺陷已被排除。實驗結(jié)果表明該數(shù)控系統(tǒng)軟件缺陷自定位方法是有效的。
本文提出了一種數(shù)控系統(tǒng)軟件缺陷自定位方法,該方法可以幫助研發(fā)人員在發(fā)現(xiàn)數(shù)控系統(tǒng)軟件發(fā)生失效后迅速準(zhǔn)確地對缺陷進行定位。以一個有缺陷代碼的直線插補模塊為對象,對其進行缺陷自定位。首先,在數(shù)控系統(tǒng)軟件體系結(jié)構(gòu)的基礎(chǔ)上,增加了一個體系結(jié)構(gòu)擴展層,即軟件黑匣子,用以跟蹤記錄軟件的執(zhí)行信息。其次,根據(jù)代碼的謂詞節(jié)點和有向邊,創(chuàng)建了直線插補模塊的控制流圖,并根據(jù)控制流圖生成了相似路徑集。隨后,借鑒了樸素貝葉斯算法的思想,建立了數(shù)控系統(tǒng)軟件代碼缺陷懷疑度分類器模型,并計算出失效路徑中各條有向邊的懷疑度。最后,將懷疑度最高的有向邊代碼進行更正并重新實驗,得到了與預(yù)期相同的結(jié)果,證明缺陷已被排除。實驗結(jié)果表明,該方法是可行的,可以有效提高故障排除效率,減少數(shù)控系統(tǒng)的MTTR,從而提高了數(shù)控系統(tǒng)的可用度。
[1]葉佩青, 張勇, 張輝. 數(shù)控技術(shù)發(fā)展?fàn)顩r及策略綜述[J]. 機械工程學(xué)報, 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]. 中國機械工程, 2016, 27(4).
[4]王克朝, 王甜甜, 蘇小紅,等. 軟件錯誤自動定位關(guān)鍵科學(xué)問題及研究進展[J]. 計算機學(xué)報, 2015(11).
[5]袁修華. 開放式數(shù)控系統(tǒng)軟件故障自診斷、自愈合的研究[D]. 吉林大學(xué), 2011.
[6]王克朝, 王甜甜, 任向民,等. 失效上下文統(tǒng)計分析的軟件故障定位方法[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]郭曦, 王盼. 基于動態(tài)協(xié)同雙向映射的相似執(zhí)行路徑生成方法[J]. 電子學(xué)報, 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é)。研究方向:樓宇自動化系統(tǒng)。 通訊作者:耿樹巧,碩士,工程師,安徽工程大學(xué)。研究方向:軟件可靠性。
安徽工程大學(xué)引進人才科研啟動基金(編號;2016YQQ017);安徽省高等教育提升計劃自然科學(xué)研究一般項目(編號:TSKJ2017B24);安徽工程大學(xué)青年科研基金(編號:2017YQ03) 。
ClassNo.:TP273+.5DocumentMark:A