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