• 招生咨詢(xún)熱線(xiàn):4008-569-579 
  • 手機(jī)版
    用手機(jī)掃描二維碼直達(dá)商品手機(jī)版
招生咨詢(xún)熱線(xiàn)
4008-569-579
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料 > 嵌入式開(kāi)發(fā):嵌入式系統(tǒng)開(kāi)發(fā)中的靜態(tài)分析
機(jī)構(gòu)主頁(yè) > 培訓(xùn)資料>嵌入式開(kāi)發(fā):嵌入式系統(tǒng)開(kāi)發(fā)中的靜態(tài)分析

嵌入式開(kāi)發(fā):嵌入式系統(tǒng)開(kāi)發(fā)中的靜態(tài)分析

來(lái)源:廣州達(dá)內(nèi)教育        時(shí)間:2023-05-30        熱度:36℃        返回列表


由于嵌入式系統(tǒng)行業(yè)的快速發(fā)展,嵌入式設(shè)備的代碼質(zhì)量成為首要關(guān)注的問(wèn)題之一??紤]到嵌入式系統(tǒng)開(kāi)發(fā)的特殊性(調(diào)試?yán)щy、出錯(cuò)成本高等),嵌入式開(kāi)發(fā)者需要使用專(zhuān)門(mén)的工具來(lái)增強(qiáng)自己的代碼質(zhì)量。

 

態(tài)代碼分析器就是這些工具之一本文描述了靜態(tài)分析及其在嵌入式系統(tǒng)中的優(yōu)勢(shì)。

 

靜態(tài)代碼分析

首先,讓我們弄清楚什么是靜態(tài)代碼分析器,它們可以執(zhí)行什么功能。

靜態(tài)代碼分析器是分析程序而不實(shí)際執(zhí)行它的軟件,靜態(tài)分析工具比編譯器對(duì)源代碼進(jìn)行更深入的檢查。通常,編譯器只會(huì)發(fā)現(xiàn)語(yǔ)法錯(cuò)誤。

 

靜態(tài)分析工具如何工作

分析器的輸入數(shù)據(jù)是源代碼(最好是可編譯的)

分析器將源代碼轉(zhuǎn)換為一個(gè)特殊的模型以供進(jìn)一步分析(AST、語(yǔ)義模型等);

分析器通過(guò)將一組診斷規(guī)則應(yīng)用于模型來(lái)搜索缺陷,診斷規(guī)則基于各種方法;

分析儀以你方便的格式保存所有發(fā)出的警告;

開(kāi)發(fā)人員只需研究報(bào)告并修復(fù)所有缺陷;

 

靜態(tài)分析儀可以執(zhí)行各種任務(wù)。讓我們介紹一下分析儀最常見(jiàn)的任務(wù):

程序代碼中的錯(cuò)誤檢測(cè)。在這種情況下,靜態(tài)分析極大地補(bǔ)充了代碼審查。它可以讓嵌入式開(kāi)發(fā)人員在代碼審查之前發(fā)現(xiàn)并解決一些問(wèn)題;

廣義的代碼質(zhì)量增強(qiáng)。代碼質(zhì)量可以包括可讀性、可維護(hù)性、代碼復(fù)雜性、內(nèi)聚程度,以及可以直接或間接影響錯(cuò)誤數(shù)量的其他方面。因此,靜態(tài)分析器有助于遵循編碼標(biāo)準(zhǔn)(公司內(nèi)部接受和普遍接受);

代碼分析是CI/CD中質(zhì)量關(guān)機(jī)制的一部分。分析器不僅警告代碼中的潛在錯(cuò)誤,而且還起到保護(hù)機(jī)制的作用。如果代碼質(zhì)量水平不符合規(guī)定要求,他們將停止連續(xù)交付。如果這些代碼分析器檢測(cè)到不符合標(biāo)準(zhǔn)的錯(cuò)誤或代碼片段,則會(huì)擴(kuò)展編譯器行為并阻止構(gòu)建;

收集項(xiàng)目度量、統(tǒng)計(jì)數(shù)據(jù)收集、反映項(xiàng)目“總體健康狀況”的圖表結(jié)構(gòu)。




實(shí)施的好處

靜態(tài)分析器已被證明對(duì)嵌入式軟件非常有用,讓我們來(lái)看看靜態(tài)分析最明顯的積極方面。

 

1.首先,靜態(tài)分析的使用減少了昂貴的可能性。

嵌入式系統(tǒng)軟件中的錯(cuò)誤非常麻煩。問(wèn)題在于,一旦開(kāi)始大規(guī)模生產(chǎn),這些錯(cuò)誤就不可能或幾乎不可能糾正。比方說(shuō),一家公司已經(jīng)生產(chǎn)了數(shù)千臺(tái)洗衣機(jī),并交付給商店。然而,事實(shí)證明,機(jī)器在某種模式下無(wú)法正常工作。公司應(yīng)該做什么?

 

所以,嵌入式設(shè)備的代碼應(yīng)該盡可能徹底地測(cè)試,尤其是在錯(cuò)誤可能導(dǎo)致人員傷亡或巨大經(jīng)濟(jì)損失的情況下。

靜態(tài)代碼分析是檢測(cè)錯(cuò)誤的過(guò)程,但它不保證能找到代碼中的所有錯(cuò)誤。然而,嵌入式開(kāi)發(fā)人員應(yīng)該利用任何機(jī)會(huì)額外檢查代碼的正確性。靜態(tài)分析器可以指出各種錯(cuò)誤,這些錯(cuò)誤甚至在幾次代碼審查之后仍然存在。

如果靜態(tài)分析可以幫助減少設(shè)備代碼中的錯(cuò)誤數(shù)量,那就太棒了。也許這些特殊錯(cuò)誤的發(fā)現(xiàn)會(huì)阻止生命的損失?;蛘撸@些公司不會(huì)浪費(fèi)很多錢(qián),也不會(huì)因?yàn)榭蛻?hù)投訴而失去好名聲。

 

2.靜態(tài)代碼分析器大大降低了軟件測(cè)試和調(diào)試過(guò)程的成本。

靜態(tài)分析允許在編碼期間或者在夜間構(gòu)建期間就已經(jīng)找到bug。因此,搜索和修復(fù)大多數(shù)錯(cuò)誤的成本會(huì)低得多。

 

大概每個(gè)開(kāi)發(fā)者都有過(guò)不成功的刷新設(shè)備的嘗試。例如,在這個(gè)過(guò)程中,設(shè)備沒(méi)有設(shè)置合適的電壓或者完全燒毀。發(fā)生了什么,你從哪里尋找問(wèn)題?畢竟,問(wèn)題的根源不僅僅是軟件錯(cuò)誤。這也可能是硬件本身的錯(cuò)誤或低質(zhì)量的布局。因此,查找錯(cuò)誤的過(guò)程可能需要很長(zhǎng)時(shí)間。




3.靜態(tài)分析的使用保證了沒(méi)有太多經(jīng)驗(yàn)的開(kāi)發(fā)人員。

程序錯(cuò)誤可以形象地分為兩種類(lèi)型。開(kāi)發(fā)者知道第一種類(lèi)型的錯(cuò)誤。由于疏忽,這些錯(cuò)誤意外地出現(xiàn)在代碼中。第二種錯(cuò)誤出現(xiàn)在嵌入式開(kāi)發(fā)人員不知道不可能用這種方式編寫(xiě)代碼的情況下。換句話(huà)說(shuō),他們可以盡可能多地檢查這樣的代碼,但仍然不會(huì)發(fā)現(xiàn)錯(cuò)誤。

 

靜態(tài)分析器包含關(guān)于各種代碼模式的知識(shí)庫(kù)。在某些條件下,這些模式會(huì)導(dǎo)致錯(cuò)誤。因此,他們可以指出開(kāi)發(fā)人員自己不會(huì)發(fā)現(xiàn)的錯(cuò)誤。一個(gè)例子是使用32time_t類(lèi)型,這可能導(dǎo)致2038年后設(shè)備工作不正確。

 

另一個(gè)例子是程序的未定義行為,這是由于不正確使用移位運(yùn)算符<</>>而發(fā)生的。這些運(yùn)算符在微控制器的代碼中被廣泛使用。不幸的是,開(kāi)發(fā)人員經(jīng)常非常粗心地使用這些運(yùn)算符。這使得程序不可靠,并且依賴(lài)于編譯器的特定版本和設(shè)置。同時(shí),程序可以運(yùn)行,但這不是因?yàn)榇a編寫(xiě)正確,而是因?yàn)殚_(kāi)發(fā)人員很幸運(yùn)。

 

使用靜態(tài)分析器,嵌入式開(kāi)發(fā)人員可以避免許多這種不愉快的情況。此外,你可以使用分析器來(lái)控制總體代碼質(zhì)量。當(dāng)項(xiàng)目團(tuán)隊(duì)正在成長(zhǎng)或變化時(shí),這一點(diǎn)很重要。換句話(huà)說(shuō),分析器幫助跟蹤初學(xué)者是否開(kāi)始編寫(xiě)錯(cuò)誤代碼。

 

4.現(xiàn)代靜態(tài)分析器不僅發(fā)現(xiàn)代碼錯(cuò)誤和漏洞,而且支持嵌入式系統(tǒng)的編碼標(biāo)準(zhǔn)。這些標(biāo)準(zhǔn)提高了程序的安全性、可移植性和可靠性。

CC++是嵌入式系統(tǒng)的流行編程語(yǔ)言。MISRA CMISRA C++AUTOSAR C++等標(biāo)準(zhǔn)是為這些語(yǔ)言開(kāi)發(fā)的。每個(gè)標(biāo)準(zhǔn)都有大量的規(guī)則和建議(MISRA C:143,MISRA C++228AUTOSAR C++:超過(guò)350)。在沒(méi)有靜態(tài)代碼分析器的情況下進(jìn)行編碼時(shí),根本不可能遵守這么多規(guī)則和建議。這些規(guī)則是開(kāi)發(fā)人員需要避免的編碼模式,從而降低出錯(cuò)的可能性。目前,靜態(tài)分析的所有主要參與者(Coverity、Klockwork、PVS Studio等)都努力盡可能增加標(biāo)準(zhǔn)的覆蓋范圍。

 

結(jié)論

在嵌入式開(kāi)發(fā)中,使用靜態(tài)分析器對(duì)于任何嵌入式項(xiàng)目都是非常有用的,是否需要靜態(tài)分析由你決定!


電話(huà)咨詢(xún)

電話(huà)咨詢(xún)

咨詢(xún)電話(huà):
4008-569-579
回到頂部

回到頂部