鄧祥麒
[摘 要]本文結(jié)合武控計算機軟件自身的特點,研究分析了軟件內(nèi)存缺陷測試的問題,找到嵌入式武控計算機軟件內(nèi)存泄漏的出處且分析出原因,提出了解決之法。內(nèi)存使用缺陷測試一般是通過工具軟件或者其他測試手段對被測試程序進(jìn)行分析,從而找到內(nèi)存上正當(dāng)使用的測試。正確、合理的實施內(nèi)存使用缺陷測試,可以更加全面的對軟件進(jìn)行測試,從而提高軟件的質(zhì)量,大大縮短軟件產(chǎn)品的發(fā)布周期。
[關(guān)鍵詞]計算機;軟件測試;內(nèi)存;測試程序
中圖分類號:TP311.5,TP304 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-914X(2017)35-0332-01
1 引言
本文是以研制的武控計算機軟件為背景,武控計算機軟件運行在加固計算機上,采用Compact PCI總線,采用Vxworks實時操作系統(tǒng),以滿足高實時性、高可靠性的要求。為了更加有效的、充分的完成武控計算機軟件的測試,提高軟件的質(zhì)量,搭建一套獨立的第三方武控計算機軟件測試臺是必不可少的。在該測試環(huán)境下輸入測試用例,對武控計算機軟件的功能需求、性能需求、接口需求、安全性需求、邊界需求及系統(tǒng)工作余量需求等進(jìn)行測試,同時可直接觀察測試結(jié)果并且進(jìn)行覆蓋率分析,找出軟件的各種BUG,進(jìn)而避免當(dāng)系統(tǒng)交付使用后由于潛在的BUG而造成頻繁的軟件維護(hù)。
從目前國內(nèi)外的研究現(xiàn)狀來看,對于嵌入式軟件的測試工作,大部分集中在關(guān)注嵌入式軟件的調(diào)試工作或者是軟件測試的某些方面等,很少有全面的、系統(tǒng)的進(jìn)行相關(guān)測試測試研究。主要研究了通用平臺的軟件測試技術(shù)方法。介紹了關(guān)于軟件靜態(tài)測試方面的研究成果等。目前國內(nèi)外軟件測試技術(shù)領(lǐng)域內(nèi)的研究熱點有嵌入式軟件測試、面向?qū)ο筌浖y試、軟件測試過程模型、集成測試、單元測試充分性標(biāo)準(zhǔn)、軟件質(zhì)量和復(fù)雜度度量、自動化測試數(shù)據(jù)生成、選擇性回歸測試技術(shù)、自動化測試工具開發(fā)和測試管理工具開發(fā)等。國外的科研機構(gòu)與大學(xué)在軟件測試領(lǐng)域的研究相對于國內(nèi)的科研機構(gòu)一直處于領(lǐng)先地位,例如George Mosan的研究方向是基于規(guī)范的測試自動生成與面向?qū)ο蟮臏y試技術(shù)研究;Carnegie Mellon大學(xué)則側(cè)重于C/S系統(tǒng)測試技術(shù)和回歸測試的研究;而NSTL主要從事測試規(guī)范和標(biāo)準(zhǔn)的制定。
2 解決嵌入式計算機軟件內(nèi)存泄漏分析
在嵌入式武控計算機軟件中,運行的內(nèi)存是有限的,內(nèi)存泄漏將對系統(tǒng)產(chǎn)生影響,最壞的情況導(dǎo)致系統(tǒng)崩潰。導(dǎo)致內(nèi)存泄漏的源代碼檢查,僅僅依靠人工檢查的方式進(jìn)行,不但工作量非常大,而且不能動態(tài)監(jiān)視內(nèi)存分配,所以測試不充分。借助測試工具監(jiān)視系統(tǒng)運行中的內(nèi)存動態(tài)分配和釋放。解決嵌入式武控計算機軟件的靜態(tài)測試難題,靜態(tài)測試是對源代碼進(jìn)行規(guī)則性、各個度量元檢查,經(jīng)過靜態(tài)分析軟件產(chǎn)生的分析,結(jié)果可能存在一些誤差,需要結(jié)合人一毛進(jìn)行進(jìn)一步的分析與確認(rèn)。測試人員在這個過程中不斷的積累典型案例,總結(jié)經(jīng)驗,對代碼檢查單進(jìn)行進(jìn)一步的完善與改進(jìn)。解決武控計算機軟件中數(shù)學(xué)模型驗證難題,數(shù)學(xué)模型的驗證一直以來都是軟件測試驗證的難題,數(shù)學(xué)模型中大量的使用復(fù)雜的數(shù)學(xué)公式與數(shù)值計算,而且定義大量的全局與局部變量,如何保證這些復(fù)雜運算的正確性及變量使用的合理性,是數(shù)學(xué)模型驗證急需解決的一個難題。
解決武控計算機軟件覆蓋率測試難題,嵌入式武控計算機系統(tǒng)要求是一個高一可靠性、高安全性的系統(tǒng)。為了能夠保障系統(tǒng)的高質(zhì)量,就要求測試必須充分。怎么能保證測試的充分性,測試用例的用例的執(zhí)行,保證盡可能多的程序語句與分支被執(zhí)行,即保證軟件測試的覆蓋率。盡可能保證所有的代碼都被執(zhí)行過,最大限度的發(fā)現(xiàn)潛藏在軟件中的BUG。如果存在某些源代碼的語句或分支未被執(zhí)行,則就可能存在一定的風(fēng)險。要分析確定測試用例注入完成后軟件的覆蓋率,就要通過覆蓋率測試工具軟件來完成。首先,覆蓋率是通過對源代碼進(jìn)行插裝來實現(xiàn)的,但是通過人工手動對其插裝工作量非常大,而且可能存在疏漏,同時覆蓋率分析工作也存在巨大的困難,怎樣借助覆蓋率測試工具來實現(xiàn)代碼的自動插裝和覆蓋率分析是問題的關(guān)鍵。其次,由于武控計算機軟件源代碼在插樁后程序膨脹,有一可能導(dǎo)致編譯報錯,插樁后的程序無法下載執(zhí)行,如何解決程序插樁后膨脹也能正常編譯運行也是研制測試平臺關(guān)鍵要解決的問題。
3 嵌入式計算機軟件內(nèi)存泄漏原因探析
嵌入式武控計算機軟件作為一個嵌入式系統(tǒng),木身資源有限,如果軟件中存在內(nèi)存泄漏,會嚴(yán)重影響系統(tǒng)的'HI:能,甚至于造成整個系統(tǒng)崩潰死機。目前在嵌入式系實現(xiàn)對內(nèi)存的動態(tài)監(jiān)視的工具軟件很少,至少我部門在這方面目前還是沒有配置。內(nèi)存泄漏分析,一般意義上的內(nèi)存泄漏為堆內(nèi)存的泄露。何為堆內(nèi)存,即為程序可以自主任意分配、使用及使用完成后必須釋放的堆空間。程序一般使用標(biāo)灘庫函數(shù)從堆內(nèi)存中申請空間,使用完成后,必須調(diào)用free等標(biāo)標(biāo)雕庫函數(shù)來釋放此空間塊,否則這個堆內(nèi)存空間將被以土操作鎖住不能再被申請使用,則出現(xiàn)內(nèi)存泄漏。從以上分析來看在面向嵌入式軟件的系統(tǒng)平臺中,內(nèi)存泄漏的主要原因有以下兩點:內(nèi)存空間塊分配使用之后,沒有進(jìn)行相對應(yīng)的空間塊回收工作;程序代碼設(shè)計本身就存在問題,致使申請的內(nèi)存空間塊無法正?;厥?。
了解了內(nèi)存泄漏的前因后果,則就會有方法對其進(jìn)分析處理。首先要對內(nèi)存的使用進(jìn)行監(jiān)視,但在什么時候?qū)?nèi)存活動進(jìn)行監(jiān)視,如果監(jiān)視時一間段太短、頻率太高,然可以盡可能的發(fā)現(xiàn)內(nèi)存泄漏,其會搶占過多的本就稀缺的系統(tǒng)資源,導(dǎo)致系統(tǒng)運行的不穩(wěn)定;如果監(jiān)視時間段太長,就不能及時的發(fā)現(xiàn)內(nèi)存活動的異常。在嵌入式軟件應(yīng)用領(lǐng)域,由于各個具體軟件應(yīng)用平臺與環(huán)境的不同,對內(nèi)存使用也不盡相同。通常情況下使用以下4個條件作為內(nèi)存泄漏監(jiān)視的觸發(fā)條件:
根據(jù)時間周期性地對內(nèi)存活動進(jìn)行監(jiān)視。因為軟件系統(tǒng)中申請的內(nèi)存空間塊一般都有一定的有效使用時間,此時間過后,就要求對申請的內(nèi)存空間塊進(jìn)行釋放。因此可把內(nèi)存空間塊的最大使用時間作為對內(nèi)存活動監(jiān)視的時間周期。根據(jù)申請的內(nèi)存空間塊的進(jìn)程的有效性對內(nèi)存活動進(jìn)行監(jiān)視。這是因為軟件系統(tǒng)對于內(nèi)存空間塊的申請同進(jìn)程息息相關(guān),當(dāng)申請內(nèi)存空間塊的進(jìn)程失效時,系統(tǒng)應(yīng)該要求此內(nèi)存空間塊被安全釋放。因此在申請內(nèi)存空間塊的進(jìn)程釋放時對內(nèi)存活動進(jìn)行監(jiān)視,也應(yīng)該是一種恰當(dāng)?shù)臅r機。
4 內(nèi)存泄漏監(jiān)視的基本思路對策
此方法基本方法就是對被測試程序進(jìn)行插樁。程序插樁是一個靜態(tài)的過程,即在被測試程序中寫入測試人員所需求的代碼(但不影響被測試程序本身實現(xiàn)的功能),在程序運行時可以動態(tài)的收集測試人員所需的信息。所以不管在軟件開發(fā)工作還是在軟件測試工作中它都具有非常重要的地位。因此,內(nèi)存泄漏監(jiān)視算法的實現(xiàn)要解決程序插樁的兩個關(guān)鍵性問題:插樁的內(nèi)容,即寫入什么代碼。插樁的位置,即在程序的什么位置寫入的代碼。在實時嵌入式操作系統(tǒng)軟件進(jìn)行插樁,則要求插樁程序簡潔精干,而且收集信息全。首先解決插樁內(nèi)容問題。為了能夠動態(tài)監(jiān)視內(nèi)存申請分配與釋放情況,需要向被測試軟件寫入些內(nèi)存跟蹤代碼。需要監(jiān)視的具體內(nèi)容包括申請內(nèi)存空間塊所在的文件、函數(shù)、行號、申請空間的大小、申請的時間、釋放時間、分配信息。再解決插樁位置問題。因為要監(jiān)視內(nèi)存泄漏情況,所以插樁的位置就應(yīng)該在每個內(nèi)存空間塊申請和釋放的地方。這樣才‘能保證收集到的內(nèi)存人工操作信息的全面性而且不會有多余監(jiān)視操作。
參考文獻(xiàn)
[1] “互聯(lián)網(wǎng)+”背景下的軟件測試課程教學(xué)體系構(gòu)建[J].鞠小林,陳翔,文萬志,張艷梅.計算機教育.2017(05).endprint