張橋華 羅永升 譚琪 張莉妹 上官霞南
湖南中車時代通信信號有限公司 湖南長沙 410000
現(xiàn)階段,在航空航天、軌道交通等行業(yè)嵌入式軟件應(yīng)用廣泛,嵌入式軟件具有較高的可靠性以及穩(wěn)定性,能夠有效保證系統(tǒng)的正常運行。根據(jù)分析表明,在編碼階段進行缺陷糾正比之交付用戶后進行缺陷糾正能夠節(jié)省98%-99.5%的成本。因此使用靜態(tài)測試技術(shù)對軟件編碼階段進行測試十分必要。
嵌入式軟件就是將開發(fā)工具和操作系統(tǒng)嵌入到硬件當中,其產(chǎn)業(yè)主要包括開發(fā)或制造嵌入式電子設(shè)備、嵌入式系統(tǒng)軟件、設(shè)計或制造芯片,其具有以下優(yōu)點:①實用。嵌入式軟件服務(wù)于嵌入式系統(tǒng),所以它與外部硬件具有十分密切的聯(lián)系,嵌入式能夠進行定向開發(fā)更好的滿足使用需求,所以嵌入式軟件特別實用。②適用。嵌入式軟件具有模塊式軟件的特性,它在嵌入式系統(tǒng)中的運用十分靈活方便,并且不會對嵌入式系統(tǒng)的功能以及特性產(chǎn)生影響,使嵌入式系統(tǒng)使用更加靈活方便,實現(xiàn)優(yōu)化配置。③安全。因為嵌入式軟件能夠進行定向開發(fā),使開發(fā)針對嵌入式軟件的木馬以及病毒不但使用范圍很小,還需要較高的開發(fā)成本以及技術(shù)。④體積小。嵌入式軟件需要安裝在存儲器中,所以需要嵌入式軟件具有較小的體積、比較少的占用資源、緊湊可靠的代碼等特點。
靜態(tài)測試是指忽略程序執(zhí)行階段,直接在代碼中進行錯誤尋找以及代碼評估的過程,其目的是監(jiān)控代碼的質(zhì)量,其具有無需運行程序,可以進行人工檢測,檢測條件低等特點,但是進行靜態(tài)測試的檢測人員需要具有較高的專業(yè)素質(zhì)[1]。檢查軟件是否與描述一致是靜態(tài)測試的主要功能,保證軟件沖突與歧義不存在,運用靜態(tài)測試主要是為了糾正軟件系統(tǒng)規(guī)格和表示上的錯誤。靜態(tài)測試主要包括檢查代碼、測試代碼質(zhì)量、分析靜態(tài)結(jié)構(gòu)等功能。它不但可以進行人工操作,使工作人員自身的邏輯思維優(yōu)勢能夠得到充分發(fā)揮,還可以使用軟件工具進行自動測試。人工操作能夠查出一些機器無法查出的邏輯錯誤,一般能對軟件中30%-70%的錯誤進行有效排查。
傳統(tǒng)的嵌入式軟件測試大多采用動態(tài)測試與靜態(tài)測試結(jié)合的方式,進行嵌入式軟件動態(tài)測試需要以軟件編程完成為前提,用例質(zhì)量能夠直接決定測試的效率,另外,人為因素對測試結(jié)果的影響較大。動態(tài)測試太過注重現(xiàn)象,想要重現(xiàn)、定位、調(diào)試問題需要較長的實踐,影響嵌入式軟件的測試效率。
靜態(tài)測試與動態(tài)測試相比具有更高的測試效率,更低的測試成本,無需進行代碼運行就能對程序中所有靜態(tài)結(jié)構(gòu)以及路徑進行全面分析,對編程規(guī)范進行檢查,能夠?qū)崿F(xiàn)對影響代碼安全以及質(zhì)量的因素進行有效排查,為代碼的安全以及質(zhì)量提供保障[2]。
靜態(tài)分析是指在系統(tǒng)處在非運行狀態(tài)時,利用軟件算法完成被測代碼內(nèi)容、格式、結(jié)構(gòu)的分析測試。經(jīng)過研究表明,大多代碼錯誤相對密集,經(jīng)常能在一小部分模塊中發(fā)現(xiàn)大部分的錯誤,與人們財富分配的“二八定理”相適應(yīng),20%的核心模塊往往存在80%的錯誤。在進行編程的過程中,動態(tài)測試受限,只能通過靜態(tài)分析來進行錯誤密集模塊的定位。由此可見,在編碼階段,靜態(tài)分析發(fā)揮非常重要的作用。由于靜態(tài)分析階段會進行內(nèi)部信息收集,而這些信息能夠為審查代碼提供信息參考,所以應(yīng)該在編譯完成之后與審查代碼之前進行靜態(tài)分析。
需要使用人工對代碼審查進行操作,運用代碼審查技術(shù)將代碼中違反開發(fā)標準以及存在錯誤之處檢查出來,可以對工具無法發(fā)現(xiàn)的問題進行審查,主要包括以下三個層面:
進行代碼審查時,要檢查代碼是否符合設(shè)計文檔要求以及達到相應(yīng)的規(guī)格,檢查代碼是否有效合理的表達出其設(shè)計思想,比如進行不同函數(shù)以及類的正確分解、選擇正確的外部接口。
對代碼邏輯表達式進行檢查,包括是否進行正確的異常參數(shù)防御處理,變量值的定義是否能夠滿足范圍要求,是否進行邏輯判斷分支的正確處理,是否正確使用邏輯變量等。
代碼可讀性:檢查代碼的縮進控制編碼是否有利于代碼可讀性的提高,檢查代碼的變量名、標號、函數(shù)名等是否具有存在意義以及命名格式是否符合編碼規(guī)范,檢查代碼是否具有意義、充分、準確的注釋等。
針對嵌入式軟件的特點,進行代碼審查時應(yīng)注意以下四個方面:①初始化。軟件產(chǎn)品的正常運行需要以初始化正確作為前提,需要對是否進行正確的初始化操作,并且是否正常進入初始化狀態(tài)等問題進行檢查。②處理通信數(shù)據(jù)。對軟件通信數(shù)據(jù)的精度參數(shù)、格式、速率參數(shù)以及異常是否進行了合理正確的處理進行檢查,避免因不正確的接口處理,造成通信功能損失或者錯誤的情況,嚴重的甚至?xí)斐闪慵p壞。③處理時間特性。嵌入式軟件需要具有非常高的時間性能,需要對時間周期是否正確進行檢查,軟件是否存在相應(yīng)的處理措施等。④安全性檢查。對軟件是否具有相關(guān)的防御性編程設(shè)計進行檢查,對軟件在危險狀態(tài)下的預(yù)防措施是否有效進行考慮,以及對軟件在不同危險狀態(tài)下的反應(yīng)情況進行檢查,或者對外部環(huán)境下軟件的安全性要求進行提取,比如,在軟件進入死循環(huán)運行時,是否具有相關(guān)的防護措施,使軟件運行恢復(fù)正常。
代碼審查應(yīng)該在軟件開發(fā)初期開展,能夠使代碼的正確性提高,但是需要審查人員具有較高的專業(yè)素質(zhì),但是審查代碼的規(guī)模越大,代碼審查的效果越低[3]。
隨著飛速發(fā)展的互聯(lián)網(wǎng)技術(shù),在人們生活中嵌入式軟件的應(yīng)用范圍越來越大,嵌入式軟件將會得到更好的發(fā)展。在進行嵌入式軟件開發(fā)時應(yīng)該利用靜態(tài)測試技術(shù)對軟件質(zhì)量進行檢查,為提升軟件質(zhì)量以及系統(tǒng)正常運行提供保障。相關(guān)工作人員應(yīng)該不斷創(chuàng)新,實現(xiàn)嵌入式軟件靜態(tài)測試技術(shù)更好、更快的發(fā)展。