齊齊樂(lè)
(中國(guó)航空工業(yè)集團(tuán)公司金城南京機(jī)電液壓工程研究中心,江蘇南京,211000)
計(jì)算機(jī)軟件在開發(fā)的過(guò)程中難免會(huì)存在BUG,而BUG的存在不僅會(huì)影響軟件運(yùn)行的速率,還會(huì)降低軟件使用的體驗(yàn)感。為了解決計(jì)算機(jī)軟件開發(fā)過(guò)程中遺留的BUG問(wèn)題,需要采用嵌入式軟件對(duì)原設(shè)計(jì)軟件進(jìn)行不足。由于嵌入式軟件本身的意義在于不足原開發(fā)軟件的不足,其設(shè)計(jì)需求也與原設(shè)計(jì)元件保持一致。嵌入式軟件相對(duì)于一般的計(jì)算機(jī)軟件的開發(fā)流程更加復(fù)雜,難度更高,需要綜合考慮硬件和軟件的條件,并結(jié)合二者的關(guān)系進(jìn)行軟件細(xì)節(jié)的優(yōu)化。嵌入式軟件作為計(jì)算機(jī)系統(tǒng)不可缺少的一部分,其本身要求有強(qiáng)實(shí)時(shí)性,且軟件測(cè)試只能在計(jì)算機(jī)運(yùn)行的特定目標(biāo)機(jī)上進(jìn)行測(cè)試,只能采用更底層的語(yǔ)言或匯編語(yǔ)言進(jìn)行編寫,因此測(cè)試和維護(hù)的難度極高。研究嵌入式計(jì)算機(jī)軟件測(cè)試的關(guān)鍵技術(shù)對(duì)提升嵌入式計(jì)算機(jī)軟件系統(tǒng)運(yùn)行的穩(wěn)定性有著重要的意義。
嵌入式軟件指嵌入式計(jì)算機(jī)系統(tǒng)中的軟件。它的運(yùn)行建立在一定的硬件平臺(tái),對(duì)專用性及運(yùn)行開的環(huán)境要求極高。嵌入式軟件測(cè)試具有以下特點(diǎn):(1)嵌入式軟件測(cè)試包含幾乎全部的專用計(jì)算機(jī)外部設(shè)備;(2)嵌入式元件運(yùn)行平臺(tái)及系統(tǒng)常因沒(méi)有一般的外部設(shè)備而很難在測(cè)試古城中進(jìn)行檢測(cè)及觀察,如沒(méi)有顯示、打印、鍵盤及存儲(chǔ)設(shè)備等;(3)嵌入式軟件的強(qiáng)實(shí)時(shí)性要求使輸出僅在某個(gè)有限的時(shí)間內(nèi)完成,且必須在該時(shí)間段內(nèi)生效;(4)嵌入式軟件可能存在以上交互因素,增加測(cè)試的難度。
靜態(tài)測(cè)試法是宿主機(jī)測(cè)試技術(shù)常用的方法之一。這種測(cè)試方法方便測(cè)試人員明確及理解程序邏輯,也有利于幫助開發(fā)者審視開發(fā)過(guò)程。在講述測(cè)試流程中易于幫助開發(fā)著發(fā)現(xiàn)問(wèn)題。靜態(tài)測(cè)試法的流程如下:靜態(tài)測(cè)試的技術(shù)準(zhǔn)備→編程人員向測(cè)試小組介紹UR案件思路及內(nèi)容→測(cè)試人員查找缺陷→確定有無(wú)疑問(wèn)。有疑問(wèn)時(shí)測(cè)試人員與編程人員進(jìn)行問(wèn)題討論及確認(rèn)。當(dāng)確定有問(wèn)題存在時(shí)及時(shí)排除,沒(méi)有問(wèn)題時(shí)重新進(jìn)入測(cè)試人員查找缺陷,重復(fù)以上流程。確定沒(méi)有疑問(wèn)時(shí)由測(cè)試人員提出嚴(yán)謹(jǐn)性建議→記錄測(cè)試過(guò)程并更新軟件文檔→結(jié)束測(cè)試。
采用靜態(tài)測(cè)試方法測(cè)試函數(shù)結(jié)構(gòu)時(shí),可以借助一系列規(guī)則從程序推導(dǎo)出流程模型圖,再將其與設(shè)計(jì)文檔流圖對(duì)比,校驗(yàn)設(shè)計(jì)與源代碼的一致性。通過(guò)對(duì)流圖的走查,以及應(yīng)用邏輯覆蓋、分支覆蓋、分支覆蓋、路徑覆蓋的方法測(cè)試函數(shù)的健壯性,最后對(duì)函數(shù)結(jié)構(gòu)做封閉性測(cè)試。
在采用靜態(tài)方法測(cè)試細(xì)節(jié)及專項(xiàng)檢查時(shí),需憑借測(cè)試人員豐富的經(jīng)驗(yàn)羅列錯(cuò)誤清單,并依次執(zhí)行清單所列問(wèn)題錯(cuò)誤的檢查。常見(jiàn)的專項(xiàng)錯(cuò)誤清單如下:(1)數(shù)組下表有無(wú)越界,變量值有無(wú)越界;(2)有無(wú)依賴程序設(shè)計(jì)語(yǔ)言中的缺省值代碼;(3)除數(shù)有無(wú)可能為零;(4)浮點(diǎn)數(shù)運(yùn)算有無(wú)分析檢查;(5)棧有無(wú)溢出;(6)用過(guò)的內(nèi)存有無(wú)釋放;(7)函數(shù)的引用中變量類型與個(gè)數(shù)有無(wú)對(duì)應(yīng);(8)全局變量的使用有無(wú)必要;(9)代碼有無(wú)包含無(wú)窮循環(huán);(10)遞歸有無(wú)存在問(wèn)題等等。
動(dòng)態(tài)測(cè)試法也是宿主機(jī)測(cè)試技術(shù)常用的方法之一。動(dòng)態(tài)測(cè)試技術(shù)是以軟件代碼的動(dòng)態(tài)執(zhí)行能力為基礎(chǔ)。它需要對(duì)代碼的覆蓋率、內(nèi)存分配使用信息等進(jìn)行全面的分析。測(cè)試軟件代碼在測(cè)試執(zhí)行時(shí)的狀態(tài)就是代碼覆蓋率。提升嵌入式軟件測(cè)試的有效性就需要通過(guò)加強(qiáng)代碼覆蓋率的監(jiān)控,以便全面及時(shí)的掌握測(cè)試力度及進(jìn)度,精準(zhǔn)的識(shí)別是否存在被遺漏的測(cè)試數(shù)據(jù)。代碼覆蓋率的計(jì)算指標(biāo)包含語(yǔ)句覆蓋、分支/判定覆蓋及MC/DC。內(nèi)存分配信息需要關(guān)注每個(gè)函數(shù)、內(nèi)存分配點(diǎn)的內(nèi)存分配及釋放情況,并實(shí)時(shí)監(jiān)控動(dòng)態(tài)內(nèi)存分配中的錯(cuò)誤。動(dòng)態(tài)法內(nèi)存分配信息具有識(shí)別內(nèi)存遺漏BUG的優(yōu)點(diǎn),它是內(nèi)存分配優(yōu)化的依據(jù)。
仿真機(jī)測(cè)試技術(shù)能夠通過(guò)真實(shí)仿真模擬目標(biāo)機(jī)功能及性能,采集真實(shí)的物理性能監(jiān)測(cè)結(jié)果。它是宿主機(jī)與目標(biāo)測(cè)試機(jī)的紐帶。其中的關(guān)鍵技術(shù)包含嵌入式仿真技術(shù)、測(cè)試數(shù)據(jù)獲取技術(shù)。嵌入式仿真技術(shù)是以局域網(wǎng)為基礎(chǔ)建立的數(shù)據(jù)集中性管理及處理系統(tǒng)。仿真系統(tǒng)由仿真機(jī)、軟件測(cè)試控制模板、總線仿真及總線監(jiān)控模板、測(cè)試結(jié)果分析工具、I/O系統(tǒng)、實(shí)時(shí)調(diào)度模板等。其中以仿真測(cè)評(píng)控制技術(shù)應(yīng)用最為廣泛。通過(guò)對(duì)計(jì)算機(jī)硬件及系統(tǒng)做仿真測(cè)試,模擬現(xiàn)場(chǎng)總線系統(tǒng)數(shù)據(jù),依據(jù)測(cè)試主體分析電信號(hào)激勵(lì)仿真源,測(cè)定和分析現(xiàn)場(chǎng)總線的運(yùn)行情況。仿真分析利用了人機(jī)交互界面控制實(shí)時(shí)在線測(cè)評(píng)平臺(tái)設(shè)備,用于對(duì)嵌入式軟件進(jìn)行測(cè)試。
該技術(shù)以目標(biāo)機(jī)測(cè)試為主,用于評(píng)估真實(shí)的物理目標(biāo)機(jī),從而對(duì)嵌入式軟件及系統(tǒng)的交互性、可靠性、穩(wěn)定性做專門的獲取。該技術(shù)常用故障注入、內(nèi)存分析、性能分析的方法分析物理目標(biāo)測(cè)試機(jī)的性能。其中故障注入技術(shù)能便于進(jìn)行系統(tǒng)邊界測(cè)試、容錯(cuò)性測(cè)試、魯棒性測(cè)試、強(qiáng)度性測(cè)試等。內(nèi)存分析技術(shù)用于處理動(dòng)態(tài)內(nèi)存分配中存在的不足,常用分析手段有硬件分析、軟件分析。以上測(cè)試技術(shù)各有優(yōu)劣?;谟布膬?nèi)存分析方法測(cè)試的精準(zhǔn)度更高,但測(cè)試價(jià)格較高。而基于軟件的內(nèi)存分析方法性價(jià)比更高,但代碼性能在測(cè)試中易受操作干擾,測(cè)試執(zhí)行中對(duì)性能分析是消耗的時(shí)間更長(zhǎng)。性能分析工具聯(lián)合調(diào)試工具,并引導(dǎo)開發(fā)人員進(jìn)行函數(shù)結(jié)構(gòu)優(yōu)化,對(duì)系統(tǒng)調(diào)用錯(cuò)誤等進(jìn)行補(bǔ)足,更有利在執(zhí)行測(cè)試過(guò)程中發(fā)現(xiàn)代碼遺漏問(wèn)題,提高嵌入式軟件測(cè)試的精確度。
上文已提到,關(guān)于宿主機(jī)測(cè)試的兩種方法。靜態(tài)測(cè)試法需要優(yōu)先對(duì)所有數(shù)據(jù)做分析,并通過(guò)監(jiān)測(cè)實(shí)時(shí)追蹤源代碼,根據(jù)源代碼繪制出程序邏輯圖及嵌入式計(jì)算機(jī)系統(tǒng)軟件對(duì)應(yīng)的程序結(jié)構(gòu)框圖。它的優(yōu)點(diǎn)在于邏輯圖、框架圖、流程圖之間可隨意轉(zhuǎn)換,便于加強(qiáng)對(duì)遺漏代碼的檢測(cè)與及系統(tǒng)錯(cuò)誤的識(shí)別,降低人工測(cè)試的錯(cuò)誤率,同時(shí)還有利于提高嵌入式軟件測(cè)試的效率。應(yīng)用靜態(tài)測(cè)試技術(shù)測(cè)試硬件設(shè)備及系統(tǒng)運(yùn)行情況時(shí),并不需要對(duì)媒體設(shè)備做測(cè)試,而知需要依據(jù)數(shù)據(jù)分析系統(tǒng)BUG即可。因此,靜態(tài)測(cè)試技術(shù)還有利于縮短嵌入式計(jì)算機(jī)軟件測(cè)試時(shí)間,便于執(zhí)行操作的優(yōu)勢(shì)。動(dòng)態(tài)測(cè)試法的借助軟件代碼,通過(guò)尋找軟件代碼中執(zhí)行問(wèn)題來(lái)確定嵌入式計(jì)算機(jī)軟件系統(tǒng)中的問(wèn)題及缺陷,并提供針對(duì)性的調(diào)整。在采用動(dòng)態(tài)測(cè)試技術(shù)做嵌入式軟件測(cè)試時(shí),必須注意對(duì)源代碼完整的分析,以確保嵌入式軟件系統(tǒng)錯(cuò)誤檢測(cè)的完整性。此外,還可以配合對(duì)函數(shù)結(jié)構(gòu)的分析,來(lái)確定函數(shù)結(jié)構(gòu)中各元素的分配情況,并根據(jù)內(nèi)存將函數(shù)元素的分配展示出來(lái)。
嵌入式計(jì)算機(jī)軟件測(cè)試難度大的主要原因在于一般的測(cè)試技術(shù)及測(cè)試工具的實(shí)施缺乏基本的條件。
(1)加強(qiáng)真實(shí)硬件運(yùn)行情況的監(jiān)測(cè)
在對(duì)嵌入式系統(tǒng)真實(shí)硬件運(yùn)行情況進(jìn)行監(jiān)測(cè)時(shí),可以采用某種對(duì)目標(biāo)機(jī)及宿主機(jī)都適用的編譯器高級(jí)語(yǔ)言,來(lái)生成宿主機(jī)代碼在宿主機(jī)上進(jìn)行目標(biāo)程序的運(yùn)行和測(cè)試。執(zhí)行廁所時(shí),需要認(rèn)真評(píng)估目標(biāo)機(jī)與宿主機(jī)的差異,并注意存在的問(wèn)題,如算法字長(zhǎng)等問(wèn)題。宿主機(jī)上測(cè)試的正確運(yùn)行智能作為測(cè)試在目標(biāo)機(jī)上正確運(yùn)行的參考依據(jù)?;虿捎弥噶罘抡嫫骷訌?qiáng)對(duì)真實(shí)硬件運(yùn)行情況的監(jiān)測(cè)。使用指令仿真器監(jiān)測(cè)的手段一般適用與沒(méi)有目標(biāo)機(jī)外圍設(shè)備仿真,或沒(méi)有實(shí)際外圍設(shè)備及不涉及或少涉及時(shí)間的情況。
(2)采用實(shí)時(shí)性測(cè)試及交互式測(cè)試聯(lián)用
執(zhí)行嵌入式計(jì)算機(jī)軟件系統(tǒng)測(cè)試時(shí)可采用實(shí)時(shí)性系統(tǒng)測(cè)試聯(lián)用交互式測(cè)試的方式。實(shí)時(shí)系統(tǒng)測(cè)試先需確定功能是否正確,再確定時(shí)間師傅正確。通過(guò)對(duì)功能、時(shí)間正確性的判定,來(lái)解決嵌入式系統(tǒng)測(cè)試執(zhí)行時(shí)間延長(zhǎng)而不滿滿足實(shí)時(shí)性要求的問(wèn)題。對(duì)目標(biāo)機(jī)硬件測(cè)試,仍可借助指令仿真器或高級(jí)語(yǔ)言編譯器來(lái)實(shí)現(xiàn)。單元和集成測(cè)試則不適用于在目標(biāo)硬件上實(shí)行實(shí)時(shí)測(cè)試。在交互式軟件測(cè)試時(shí),可用文件模擬字符序列的輸入,程序運(yùn)行時(shí)從文件讀入字符就如同從交互式硬件上輸入一樣。如鍵盤、鼠標(biāo)測(cè)試。
(3)加強(qiáng)全數(shù)字仿真技術(shù)的應(yīng)用
全數(shù)字仿真技術(shù)在解決綜合嵌入式軟件測(cè)試問(wèn)題中環(huán)境帶來(lái)的測(cè)試?yán)_中應(yīng)用優(yōu)勢(shì)極為明顯。采用計(jì)算機(jī)仿真技術(shù)構(gòu)造全入市軟件所需的硬件環(huán)境,即目標(biāo)機(jī)。再仿真嵌入式軟件運(yùn)行時(shí)所需的數(shù)據(jù)源。根據(jù)數(shù)據(jù)源特性及變化就可以確定嵌入式軟件的實(shí)際運(yùn)行情況。
(4)專用設(shè)備問(wèn)題及并發(fā)系統(tǒng)網(wǎng)絡(luò)通信問(wèn)題的解決
專用設(shè)備的測(cè)試需要根據(jù)實(shí)際情況額定,如果專用設(shè)備已經(jīng)可用,并能用來(lái)測(cè)試,可用實(shí)際設(shè)備進(jìn)行測(cè)試。專用設(shè)備不能用于測(cè)試的情況,可借助某種軟件仿真所需要的設(shè)備來(lái)加速進(jìn)程。在仿真困難的情況下,如傳感器噪聲特性、失效模式等情況下,需要考慮程序在仿真設(shè)備測(cè)試時(shí)運(yùn)行的正確,以及在真實(shí)設(shè)備下運(yùn)行時(shí)經(jīng)常發(fā)生的錯(cuò)誤。
嵌入式計(jì)算機(jī)軟件系統(tǒng)作為計(jì)算機(jī)系統(tǒng)的重要組成部分,其軟件測(cè)試是必不可少的。通過(guò)本文研究,確定軟如是計(jì)算機(jī)軟件測(cè)試系統(tǒng)的復(fù)雜性和難度,其根本原因受一般測(cè)試技術(shù)及測(cè)試工具缺乏實(shí)施條件所影響。想要解決軟件測(cè)試的難題,就必須測(cè)試技術(shù)及工具的研究,對(duì)原有的一般測(cè)試技術(shù)進(jìn)行創(chuàng)新,并在原有的數(shù)據(jù)及系統(tǒng)基礎(chǔ)上完善,融合仿真機(jī)測(cè)試技術(shù)、目測(cè)機(jī)測(cè)試技術(shù)、宿主機(jī)測(cè)試技術(shù),加強(qiáng)硬件及系統(tǒng)運(yùn)行的監(jiān)測(cè),加強(qiáng)全仿真技術(shù)的應(yīng)用,結(jié)合實(shí)際情況對(duì)目標(biāo)機(jī)硬件及系統(tǒng)性能進(jìn)行改善,以提升嵌入式計(jì)算機(jī)軟件系統(tǒng)在硬件及計(jì)算機(jī)系統(tǒng)下運(yùn)行的流產(chǎn)性、可靠性及穩(wěn)定性。