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