• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      控制軟件多任務(wù)程序運(yùn)行時(shí)錯(cuò)誤檢測方法

      2018-03-23 11:59:34王正鋒李紀(jì)波
      電子技術(shù)與軟件工程 2018年4期
      關(guān)鍵詞:多任務(wù)

      王正鋒 李紀(jì)波

      摘 要發(fā)動機(jī)控制軟件多任務(wù)程序運(yùn)行時(shí),共享變量的處理容易發(fā)生數(shù)組訪問越界、除零、數(shù)據(jù)溢出等錯(cuò)誤,從而造成異常的后果。采用動態(tài)測試的方法檢測此類錯(cuò)誤成本大、效率低。本文借助PolySpace測試工具,模擬軟件動態(tài)運(yùn)行時(shí)的行為,使用靜態(tài)驗(yàn)證的方法有效檢測可能發(fā)生的運(yùn)行時(shí)錯(cuò)誤,更高效地發(fā)現(xiàn)多任務(wù)程序中的缺陷。

      【關(guān)鍵詞】多任務(wù) 運(yùn)行時(shí)錯(cuò)誤 靜態(tài)測試 PolySpace

      1 引言

      航空發(fā)動機(jī)控制系統(tǒng)目前廣泛采用全權(quán)限數(shù)字電子控制系統(tǒng)(FADEC)。其中的控制軟件為高安全等級軟件,采用多中斷或者多任務(wù)的架構(gòu)設(shè)計(jì)。在軟件的設(shè)計(jì)過程中,很可能會出現(xiàn)多個(gè)任務(wù)或中斷服務(wù)程序?qū)蚕碜兞窟M(jìn)行操作的處理,對這處理的設(shè)計(jì)如果考慮不周全,很容易導(dǎo)致程序在運(yùn)行過程中出現(xiàn)數(shù)組訪問越界、除零、負(fù)數(shù)開方、整數(shù)或浮點(diǎn)數(shù)據(jù)溢出等錯(cuò)誤,產(chǎn)生預(yù)定義之外的不正確結(jié)果或者處理器異常復(fù)位等后果。

      常規(guī)的測試手段對于上述程序運(yùn)行時(shí)錯(cuò)誤的檢測并不能起到很好的效果。使用PRQAC進(jìn)行靜態(tài)分析可以檢查代碼的編程規(guī)范、分析程序的靜態(tài)結(jié)構(gòu),但是并不分析代碼的動態(tài)行為。在真實(shí)環(huán)境中執(zhí)行動態(tài)測試,測試用例能夠覆蓋的場景有限,不一定能夠觸發(fā)錯(cuò)誤發(fā)生,尤其對于偶爾才出現(xiàn)的問題,需要大量重復(fù)測試才可能發(fā)現(xiàn)。除此之外,動態(tài)測試能夠發(fā)現(xiàn)異?,F(xiàn)象,但產(chǎn)生異常的原因還需要更多時(shí)間去定位,效率很低。

      本文介紹了一種使用靜態(tài)驗(yàn)證的手段檢測多任務(wù)程序運(yùn)行時(shí)錯(cuò)誤的方法,借助工具軟件PolySpace,模擬軟件動態(tài)運(yùn)行時(shí)的行為,更高效地發(fā)現(xiàn)軟件缺陷。

      2 測試原理

      2.1 PolySpace的工作原理

      PolySpace使用語義分析技術(shù),它依靠大量的數(shù)學(xué)定理提供的規(guī)則去分析軟件的動態(tài)行為,基于變量的數(shù)值范圍和變量之間的關(guān)系、程序的控制結(jié)構(gòu)、程序內(nèi)部過程之間的關(guān)系(函數(shù)調(diào)用)、多任務(wù)分析等進(jìn)行運(yùn)行時(shí)錯(cuò)誤的檢測。

      其分析結(jié)果對程序運(yùn)行時(shí)可能會出現(xiàn)問題的代碼實(shí)現(xiàn),會給出橙色的告警標(biāo)識以及可能引發(fā)錯(cuò)誤的場景;對于肯定會出現(xiàn)問題的地方,會給出紅色告警和引發(fā)錯(cuò)誤的場景;對于不會出現(xiàn)問題的部分,會給出綠色的標(biāo)識。由于PolySpace分析驗(yàn)證時(shí)計(jì)算出的變量范圍始終是實(shí)際運(yùn)行時(shí)變量范圍的擴(kuò)展集,所以分析的結(jié)果不會漏掉可能出現(xiàn)的錯(cuò)誤。

      根據(jù)給出的告警和場景,進(jìn)一步通過人工分析和確認(rèn),最終定位問題。

      2.2 多任務(wù)程序運(yùn)行時(shí)錯(cuò)誤的分析

      在基本的語義分析基礎(chǔ)上,對于多任務(wù)分析,還有一些必備的條件和假設(shè):

      (1)main函數(shù)是可結(jié)束的,即結(jié)尾的“}”必須可達(dá);不存在無限循環(huán)或者引起紅色告警的錯(cuò)誤,這樣才能保證多任務(wù)入口函數(shù)可以開始分析。

      (2)任務(wù)或者是中斷/線程列表,其函數(shù)原型必須為void func_name(void)的形式。

      (3)main函數(shù)結(jié)束后,開始分析各任務(wù)或者入口函數(shù),分析的時(shí)候不會限定任務(wù)或中斷服務(wù)程序運(yùn)行的順序和優(yōu)先級(不影響分析結(jié)果)。

      (4)由于不能明確地構(gòu)建任務(wù)的具體優(yōu)先級,所以分析時(shí)會模擬所有可能的優(yōu)先級順序。

      如果要分析的源程序不滿足這些條件和假設(shè),需要人工對程序進(jìn)行修改以滿足要求,以便進(jìn)行分析。另外,可以通過人工編寫樁函數(shù)來調(diào)用實(shí)際的任務(wù)程序,使多任務(wù)的分析更接近實(shí)際運(yùn)行場景。

      3 項(xiàng)目應(yīng)用實(shí)踐

      在某項(xiàng)目發(fā)動機(jī)控制軟件中,曾經(jīng)出現(xiàn)過兩個(gè)任務(wù)對共享的數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作,其中一個(gè)任務(wù)對數(shù)據(jù)結(jié)構(gòu)中的元素進(jìn)行除法運(yùn)算,出現(xiàn)除零操作而導(dǎo)致程序運(yùn)行異常的問題。以下內(nèi)容將對問題進(jìn)行描述,并介紹通過Polyspace進(jìn)行多任務(wù)分析檢測出此問題的實(shí)踐。

      3.1 軟件問題概述

      某項(xiàng)目控制軟件中存在多個(gè)中斷處理程序,其中頻率量的采集處理在兩個(gè)定時(shí)任務(wù)中實(shí)現(xiàn)。5ms定時(shí)中斷任務(wù)中讀取計(jì)數(shù)值,優(yōu)先級稍低的25ms任務(wù)將計(jì)數(shù)值當(dāng)作除數(shù),計(jì)算頻率量。如圖1所示。

      軟件設(shè)計(jì)之初考慮到這個(gè)FreqBuff[0]可能為0,因此在做除法之前做了極小值保護(hù)(使FreqBuff > 1000)保護(hù),防止由于其等于0而出現(xiàn)除0的情況。

      但是5ms定時(shí)中斷優(yōu)先級高于25ms中斷,如果由于時(shí)序原因,如果恰好在所做的除零保護(hù)之后,25ms任務(wù)被更高優(yōu)先級的5ms定時(shí)任務(wù)打斷,F(xiàn)reqBuff[0]賦值為0,再回到25ms任務(wù)進(jìn)行除以FreqBuff[0]的運(yùn)算時(shí)將會出現(xiàn)除零的錯(cuò)誤,軟件運(yùn)行出現(xiàn)異常。問題示意如圖1所示。

      此問題引發(fā)的異常表象,不是每次運(yùn)行都會出現(xiàn),即使出現(xiàn)該問題引發(fā)的異常,進(jìn)行故障排查和原因定位也要耗費(fèi)大量的時(shí)間和人力,同時(shí)對排故人員的能力和經(jīng)驗(yàn)要求也比較高。

      如果在開發(fā)階段或分析審查階段就能找出這個(gè)問題,會節(jié)約很大成本。

      3.2 借助Polyspace進(jìn)行分析

      進(jìn)行多任務(wù)程序分析的總體執(zhí)行步驟為:先初始化全局變量,然后分析main函數(shù),main函數(shù)正常結(jié)束后分析多個(gè)任務(wù)程序的運(yùn)行。

      Polyspace不會自動識別需要分析哪些任務(wù),需要對原代碼進(jìn)行一些改造、打樁或編寫驅(qū)動程序來保證分析過程可以正常結(jié)束。

      首先,對main函數(shù)進(jìn)行改造。原代碼的main函數(shù)中存在一個(gè)無限循環(huán),可以將循環(huán)中執(zhí)行的函數(shù)拿到main函數(shù)外作為一個(gè)單獨(dú)的任務(wù)進(jìn)行分析。這樣可以保證main函數(shù)能正常結(jié)束,且不會漏掉循環(huán)中執(zhí)行的函數(shù)的分析,具體更改如圖2所示。

      然后手動編制樁函數(shù),調(diào)用要分析的多個(gè)任務(wù)程序。該項(xiàng)目中共有兩個(gè)定時(shí)器中斷和串口、AD采集、DMA應(yīng)答、通訊中斷等多個(gè)中斷服務(wù)程序,僅考慮要分析的兩個(gè)定時(shí)中斷任務(wù),它們的函數(shù)原型為VOID IsrTimer1(VOID) 和VOID IsrTimer2(VOID),符合能夠進(jìn)行分析的條件,無需改動。自己建立一個(gè)C文件,如Poly_multitsk.c一起加入到工程中,手動編寫的驅(qū)動函數(shù)如圖3所示。

      這樣的驅(qū)動函數(shù)可以模擬每個(gè)中斷服務(wù)函數(shù)被調(diào)用0次或者多次,且各任務(wù)相互之間可被打斷。

      最后,對分析選項(xiàng)進(jìn)行必要的配置。除了一些通用的配置選項(xiàng),在Multitasking選項(xiàng)中,設(shè)置好要分析的多任務(wù)的任務(wù)入口函數(shù),這里包括我們手動編寫的兩個(gè)驅(qū)動函數(shù)和之前從main函數(shù)中摘出的一個(gè)循環(huán)任務(wù)。配置完成,即可在服務(wù)器端進(jìn)行分析。

      3.3 查看結(jié)果和人工分析

      分析結(jié)束,Polyspace會產(chǎn)生結(jié)果文件,可以很容易查看分析后給出的各類告警。對于前面提到的程序中存在的問題,分析結(jié)果中給出了橙色的告警指示,如圖4所示。

      結(jié)果中會明確給出可能出現(xiàn)錯(cuò)誤的代碼所在的函數(shù)和文件,而且點(diǎn)擊告警處,可顯示導(dǎo)致錯(cuò)誤的操作和場景,即除法運(yùn)算的右側(cè)操作數(shù)可能為0。然后進(jìn)一步分析可能導(dǎo)致除數(shù)為0的原因,是在另一個(gè)優(yōu)先級更高的中斷任務(wù)中將這里作為除數(shù)的全局變量賦為0。

      上述內(nèi)容是對某項(xiàng)目程序中已知存在的問題進(jìn)行實(shí)際的分析和驗(yàn)證,只對兩個(gè)任務(wù)的交叉運(yùn)行進(jìn)行分析來舉例說明??筛鶕?jù)實(shí)際情況分析更多的任務(wù),模擬更多的任務(wù)運(yùn)行模式進(jìn)行分析。

      4 總結(jié)

      在項(xiàng)目開發(fā)階段或早期的測試階段,根據(jù)實(shí)際需要,對程序中的多任務(wù)進(jìn)行分析,可以盡早的發(fā)現(xiàn)可能出現(xiàn)的運(yùn)行時(shí)錯(cuò)誤。這些自動分析產(chǎn)生的可能發(fā)生錯(cuò)誤的告警,并不一定會在真實(shí)運(yùn)行時(shí)發(fā)生,根據(jù)這些信息,結(jié)合實(shí)際代碼對告警的內(nèi)容進(jìn)行更進(jìn)一步的人工確認(rèn)和分析,直到找出問題的根本原因,是必不可少而且至關(guān)重要的工作。

      借助Polyspace進(jìn)行自動分析需要的準(zhǔn)備工作和后續(xù)的人工分析確認(rèn),需要花費(fèi)一定的時(shí)間,但相對于軟件使用和維護(hù)階段再去對這些運(yùn)行時(shí)錯(cuò)誤進(jìn)行排查和定位,成本是很低的,效率也大大提高,是非常有效的檢測多任務(wù)程序中運(yùn)行時(shí)錯(cuò)誤的方法。

      參考文獻(xiàn)

      [1]劉春裕,王蕾.基于PolySpace的嵌入式軟件內(nèi)存測試[J].電腦技術(shù)與技術(shù),2010,6(01):85-87.

      [2]PolySpace Products for C Users Guide:5-19.

      作者單位

      中國航發(fā)控制系統(tǒng)研究所 江蘇省無錫市 214063

      猜你喜歡
      多任務(wù)
      異構(gòu)混合云服務(wù)下的多任務(wù)算力度量方法
      數(shù)字時(shí)代的注意困境:媒體多任務(wù)的視角*
      小型無人艇編隊(duì)的多任務(wù)協(xié)同控制方法
      結(jié)合自監(jiān)督學(xué)習(xí)的多任務(wù)文本語義匹配方法
      面向多任務(wù)的無人系統(tǒng)通信及控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
      基于中心化自動加權(quán)多任務(wù)學(xué)習(xí)的早期輕度認(rèn)知障礙診斷
      基于判別性局部聯(lián)合稀疏模型的多任務(wù)跟蹤
      電測與儀表(2016年5期)2016-04-22 01:13:46
      一類完全由內(nèi)積構(gòu)造的多任務(wù)核的幾個(gè)性質(zhì)
      基于單片機(jī)應(yīng)用系統(tǒng)的多任務(wù)程序結(jié)構(gòu)設(shè)計(jì)
      东安县| 汝城县| 古蔺县| 长白| 都江堰市| 磐安县| 尚义县| 米泉市| 沙田区| 河曲县| 六盘水市| 邯郸市| 砀山县| 孝感市| 承德县| 房产| 台江县| 囊谦县| 鹿泉市| 夏津县| 彩票| 太白县| 龙州县| 淮北市| 景泰县| 纳雍县| 徐州市| 星座| 莱州市| 二手房| 康马县| 伊川县| 确山县| 安义县| 霍州市| 陇川县| 富源县| 四川省| 永平县| 南城县| 洪江市|