崔建峰,黃智云
(廈門理工學院,福建廈門 361000)
軟件可靠性是軟件研發(fā)的重點,用戶對于軟件可信度要求隨著計算機技術(shù)的迅速發(fā)展越來越高。軟件中隱含的缺陷數(shù)目與系統(tǒng)可靠性具有直接關(guān)系,缺陷定位是軟件應(yīng)用可持續(xù)發(fā)展的主要步驟[1]。采用面向開源軟件缺陷自定位系統(tǒng)的設(shè)計,需要程序員對目前軟件運行狀態(tài)進行分析,直到找到缺陷位置[2]。該系統(tǒng)不僅要求程序員熟練掌握軟件內(nèi)部結(jié)構(gòu),而且定位精準度較低,無法滿足人們要求。
一個良好的設(shè)計方案需要通過測試分析階段所產(chǎn)生的信息來確定軟件中缺陷的位置,因此,提出基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng)設(shè)計。從缺陷不同角度發(fā)現(xiàn)軟件存在的不同缺陷,由于程序員對程序進行了一定修改,并引入一定缺陷,導(dǎo)致程序版本間的差異分解為修改集合形式,通過對集合中的原程序進行修改,可定位到缺陷位置。
基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng)硬件結(jié)構(gòu)如圖1 所示。
圖1 硬件結(jié)構(gòu)設(shè)計Fig.1 Hardware structure design
硬件結(jié)構(gòu)由故障定位裝置、信號傳感器、定位主機、顯示屏組成,通過定位裝置中的記錄模塊接收軟件缺陷故障信號,一旦到達初始位置,啟動定位系統(tǒng)時鐘單元記錄信號到達時間。確定軟件存在缺陷后,定位裝置將缺陷記錄到定位裝置中,通過下位機采集相關(guān)缺陷信息,再傳至上位機中,由顯示屏顯示具體信息[3]。
傳感器能夠?qū)⒏惺艿降能浖毕菪畔凑找欢ㄒ?guī)律轉(zhuǎn)換為信號形式,滿足信息傳輸、處理、顯示與記錄要求,是實現(xiàn)自動控制的主要環(huán)節(jié)[4]。因此,采用AM2301型號芯片為信號傳感器主要芯片,它是一款含有已經(jīng)校準的數(shù)字信號復(fù)合傳感器,具有可靠性和穩(wěn)定性。該傳感器內(nèi)部在檢測信號處理過程中,調(diào)用校準系數(shù),設(shè)置總線接口,使系統(tǒng)變得簡易[5]。
故障定位裝置主要應(yīng)用于小電流接地形式,一旦系統(tǒng)檢測出軟件缺陷,那么該裝置能夠快速、準確地獲取缺陷位置信息。該裝置包括記錄模塊、下位機和上位機,依據(jù)記錄的缺陷信息,利用下位機進行缺陷信息收集與定位,并將結(jié)果傳至上位機中[6]。
1.2.1 下位機
下位機能夠直接控制裝置獲取裝置狀況,讀取裝置狀態(tài)模擬量,轉(zhuǎn)化為數(shù)字信號形式反饋給上位機。下位機內(nèi)部鑲嵌Galileo GN100 型號定位芯片,通過NMEA-0183V4.1 協(xié)議能夠精準獲取數(shù)據(jù)信息,同時了解軟件運行狀態(tài)信息[7-9]。
當有不規(guī)則遮擋物存在時,該芯片可通過運營商基站信息進行快速定位[10]。芯片參數(shù)如表1 所示。
在Galileo GN100 型號定位芯片支持下,設(shè)計系統(tǒng)電路。系統(tǒng)電路主要由定位控制電路和通信電路組成,具體設(shè)計如下所示。
1)定位控制電路
設(shè)置固定標記點,集合線性部件進行軟件缺陷位置定位與控制,電路設(shè)計如圖2 所示。
表1 Galileo GN100 定位芯片設(shè)置Table 1 Setting of positioning chip Galileo GN100
圖2 定位控制電路Fig.2 Design diagram of location control circuit
圖2 中設(shè)置穩(wěn)定環(huán)路電路,縮短動力響應(yīng)時間,通過功率運算放大器修正輸出數(shù)據(jù)。采用三相異步電動機具有較高的電動勢,在晶體管處施加50 V 電壓,適當轉(zhuǎn)動電機方向,能夠保證兩個光電管電流大小一致[11]。
如果瞬時運動切換到放大器輸入端時,電動機應(yīng)按照順時針方向旋轉(zhuǎn),輸出正常電動勢;如果瞬時運動未達到設(shè)定的標記點時,C2上電荷需為電動機提供動力,此時電動機應(yīng)按照逆時針方向旋轉(zhuǎn),輸出高電動勢[12]。依據(jù)不同電容選擇合適阻尼,實現(xiàn)軟件缺陷精準定位。
2)通信電路
通信接口電路設(shè)計如圖3 所示。
由圖3 可知,該電路由從機、鎖存器、隨機存取器和接口器件組成。在該電路中,各個從機與上位機直接連接,一旦從機數(shù)量過多,那么上位機就會出現(xiàn)頻繁的響應(yīng)情況,由此說明系統(tǒng)正在定位。
圖3 通信接口電路設(shè)計Fig.3 Design diagram of communication interface circuit
1.2.2 上位機
上位機可根據(jù)下位機傳送過來的信息操控主機,通常上位機具備RS 232串口通信,采用該種通信方式適合工業(yè)控制雙線通信,還可實現(xiàn)PLC與上位機的通信[13]。
使用電壓互感器提取軟件缺陷信號,傳送至客戶端進行統(tǒng)一處理,經(jīng)過AT-16 型號觸發(fā)器可將正弦信號轉(zhuǎn)換為方波信號。經(jīng)過轉(zhuǎn)換后的信號傳遞給單片機,單片機接口與計算機接口相連接,可顯示出軟件缺陷信息。
整個系統(tǒng)技術(shù)路線的設(shè)計是通過上位機軟件和下位機軟件來實現(xiàn)的,其中,上位機主機運行軟件可接收來自下位機傳送過來的定位信息,針對該信息采用執(zhí)行軌跡方法進行軟件缺陷定位。
下位機軟件工作流程如下所示:
1)初始化程序
中斷服務(wù)開啟驅(qū)動,設(shè)置源地址。
2)基于執(zhí)行軌跡的缺陷自定位
定位過程分為三步,分別是執(zhí)行軌跡組織、軌跡選擇、懷疑率計算,通過整理初始源地址信息,按照一定組織方式測試信息執(zhí)行軌跡。選擇用于定位的執(zhí)行軌跡濾除信息中存在的噪聲信息,分析選定的執(zhí)行軌跡,計算語句塊中的懷疑率,由此實現(xiàn)高精準缺陷自定位。具體執(zhí)行方案如下所示:
①執(zhí)行軌跡組織
執(zhí)行軌跡是測試所執(zhí)行語句塊中的序列,通過動態(tài)切片技術(shù)收集被測試的序列。如果出現(xiàn)信息量過大的問題,需按照代碼靜態(tài)結(jié)構(gòu)組織執(zhí)行軌跡。
將程序看成一個向量,其中每一維對應(yīng)的程序是一個語句塊,按照二值向量和多值向量組織缺陷定位執(zhí)行軌跡。
二值向量:分析該向量中的語句塊是否被執(zhí)行,如果被執(zhí)行,則向量中的維數(shù)值為1;否則,為0。設(shè)sus 為懷疑率,j為測試用例,則執(zhí)行公式為:
多值向量:如果該向量中語句塊被執(zhí)行了λ次,那么對應(yīng)維數(shù)的值為λ;否則,為0,執(zhí)行公式為:
以下執(zhí)行軌跡,都是按照上述兩種向量方式組織執(zhí)行的。
②軌跡選擇
在執(zhí)行過程中,存在大量冗余測試用例,由此形成大量冗余信息,降低了系統(tǒng)定位精準度。為了對程序中存在的多個缺陷進行高精準定位,可通過測試用例執(zhí)行的相似性執(zhí)行軌跡。
執(zhí)行軌跡間距離越小,執(zhí)行軌跡越相似,對于多值向量可以按照向量元素值大小進行排序。通過計算排列間相互轉(zhuǎn)換步數(shù),獲取執(zhí)行軌跡間距離。由于選擇的軌跡只能關(guān)注語句塊之間的關(guān)系,因此,需計算執(zhí)行軌跡間排序距離。
設(shè)執(zhí)行軌跡為:
對向量元素排序后為:
直接利用次數(shù)參數(shù)計算,受到語句塊循環(huán)影響較大,及時發(fā)現(xiàn)執(zhí)行次數(shù)相對關(guān)系,能夠完整體現(xiàn)執(zhí)行軌跡間的相似性。
③懷疑率計算
將測試用例中與某個語句塊相關(guān)的用例組成一個集合,分析該集合中通過測試和未通過測試的懷疑率。如果集合中未通過測試用例執(zhí)行比例大,則說明該語句塊具有較高的懷疑率;否則,懷疑率較低。
各語句塊懷疑率計算公式如下:
式中:R(aj)表示語句塊aj所在的模塊;Tf(b)表示經(jīng)過執(zhí)行b模塊未通過測試的數(shù)量;Tg(b)表示經(jīng)過執(zhí)行b模塊通過測試的數(shù)量;Tf(aj)為執(zhí)行aj未通過測試的數(shù)量;Tg(aj)為執(zhí)行aj通過測試的數(shù)量。
依據(jù)上述計算的sus 懷疑率結(jié)果,將語句塊按照大小順序排列。
3)計算坐標
將獲取的懷疑率結(jié)果進行歸一化整理,計算出缺陷位置坐標。
4)定位報告評價
針對軟件缺陷自定位的意義在于縮短程序員找到缺陷位置的時間,根據(jù)步驟3)中的缺陷位置坐標,報告定位到實際缺陷情況,此時用所必需的審查語句塊來評價系統(tǒng)定位效果,語句塊數(shù)量越少,則說明定位效果越好。
依據(jù)坐標,將語句塊按照由近及遠的方式排序,并依次進行編號處理,根據(jù)實際缺陷語句塊編號給系統(tǒng)未定效果進行打分,分數(shù)越高,則說明定位精準度越高。
如果報告的分數(shù)超過90 分,則說明程序員只需審核10%的語句塊就能快速找到軟件中的缺陷位置,計算公式為:
式中:p表示語句塊總數(shù);q表示缺陷語句塊總數(shù)。
5)顯示程序
通過硬件結(jié)構(gòu)中的顯示屏,顯示程序完成缺陷位置坐標。
上位機程序流程如圖4 所示。
圖4 上位機程序流程Fig.4 Program flow of upper computer
下位機通過以太網(wǎng)與上位機連接,讀取下位機傳送過來的信息進行解析,形成信息包,讀取下位機坐標數(shù)據(jù),顯示軟件缺陷位置信息,實現(xiàn)顯示功能。
對于系統(tǒng)測試分析就是對軟件缺陷進行自定位精準度的測試,在已知缺陷條件下,分析系統(tǒng)定位精準度,如果測試結(jié)果精準度越高,則說明該系統(tǒng)性能越好。
在Windows 7.0 平臺設(shè)計實驗軟硬件環(huán)境,如表2所示。
表2 軟硬件環(huán)境設(shè)置Table 2 Software and hardware environment settings
當軟件處于正常使用情況下,軟件缺陷定位分別在冷啟動和熱啟動條件下,將面向開源軟件缺陷自定位系統(tǒng)與基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng)進行對比分析,結(jié)果如下所示。
1)冷啟動
直接按重啟動按鈕進行冷啟動,兩種系統(tǒng)獲取的缺陷信號波動幅值如圖5 所示。
圖5 冷啟動模式下兩種系統(tǒng)獲取的缺陷信號波動幅值Fig.5 Amplitude of defect signal fluctuation acquired by two systems in cold start mode
面向開源軟件缺陷自定位系統(tǒng)幅值變化較大,在時間為0.47 ms 時,幅值達到最低為-0.40;在時間為0.03 ms 時,幅值達到最高為0.59;基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng)幅值變化較小,在時間為0.08 ms 時,幅值達到最低為0;在時間為0.03 ms 時,幅值達到最高為0.59。
2)熱啟動
使用鍵盤Ctrl+Alt+Del 進行熱啟動,兩種系統(tǒng)獲取的缺陷信號波動幅值結(jié)果如圖6 所示。
圖6 熱啟動模式下兩種系統(tǒng)獲取的缺陷信號波動幅值Fig.6 Amplitude of defect signal fluctuation acquired by two systems in hot-start mode
面向開源軟件缺陷自定位系統(tǒng)幅值變化在熱啟動情況下變化幅度變大,但具有一定規(guī)律性,在[-0.7,0.8]幅值內(nèi)進行上下波動;基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng)幅值變化較小,也具有一定規(guī)律性,在[-0.1,0.2]幅值內(nèi)進行上下波動。
在不同啟動模式下,為了進一步驗證基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng)具有精準的定位效果,需對這兩種系統(tǒng)再次進行對比分析,結(jié)果如表3 所示。
表3 兩種系統(tǒng)定位精準度Table 3 Positioning accuracy of two systems %
分析表3 可知,在冷啟動模式下,面向開源軟件缺陷自定位系統(tǒng)定位精準度最高為50%,而基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng)定位精準度最高為90%;在熱啟動模式下,面向開源軟件缺陷自定位系統(tǒng)定位精準度最高為67%,而基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng)定位精準度最高為93%。由此說明,基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng)定位精準度較高。
針對以往采用的面向開源軟件缺陷自定位系統(tǒng)存在定位精準度低的問題,設(shè)計了基于執(zhí)行軌跡的軟件缺陷自定位系統(tǒng),詳細設(shè)計系統(tǒng)的硬件結(jié)構(gòu)和軟件功能,并把傳統(tǒng)系統(tǒng)與本文系統(tǒng)進行對比,由此證實本文系統(tǒng)設(shè)計的合理性。
目前,軟件缺陷定位系統(tǒng)還需進行深化設(shè)計,比如,如何在海量數(shù)據(jù)中提高系統(tǒng)定位精準度,或者在有限數(shù)據(jù)條件下分析軟件缺陷,并精準定位缺陷位置,這些問題都需要進一步完善。