日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式微處理器
[導(dǎo)讀]一個(gè)規(guī)范的嵌入式項(xiàng)目,在設(shè)計(jì)之處就要考慮軟件缺陷的問題,那么,你有從哪些方面考慮軟件缺陷呢?概述在高質(zhì)量、高安全性的產(chǎn)品中,軟件占據(jù)了越來越重的比例,從需求分析階段,到軟件研制,各級(jí)測(cè)試過程中,都需要盡量避免軟件問題的發(fā)生。一方面從設(shè)計(jì)上規(guī)避,一方面對(duì)軟件產(chǎn)品進(jìn)行充分的測(cè)試,盡可...

一個(gè)規(guī)范的嵌入式項(xiàng)目,在設(shè)計(jì)之處就要考慮軟件缺陷的問題,那么,你有從哪些方面考慮軟件缺陷呢?概述

在高質(zhì)量、高安全性的產(chǎn)品中,軟件占據(jù)了越來越重的比例,從需求分析階段,到軟件研制,各級(jí)測(cè)試過程中,都需要盡量避免軟件問題的發(fā)生。一方面從設(shè)計(jì)上規(guī)避,一方面對(duì)軟件產(chǎn)品進(jìn)行充分的測(cè)試,盡可能早的發(fā)現(xiàn)隱藏在軟件中的缺陷,避免將軟件問題在大批量生成之后,造成嚴(yán)重的后果和損失。


軟件測(cè)試是有效發(fā)現(xiàn)軟件缺陷的重要方法之一,嵌入式軟件測(cè)試按照是否執(zhí)行被測(cè)系統(tǒng),將測(cè)試類型分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試


  • 靜態(tài)測(cè)試不需要編譯執(zhí)行源程序,對(duì)源程序進(jìn)行詞法語法、編程規(guī)范、數(shù)據(jù)流、控制流、度量等分析,獲取程序的結(jié)構(gòu)和特性,利用形式化方法驗(yàn)證、證明程序是否符合安全規(guī)則,能夠較為全面的獲取程序的特征。

  • 動(dòng)態(tài)測(cè)試需要通過獲取程序的動(dòng)態(tài)信息來分析軟件的缺陷,如分析程序的內(nèi)存狀態(tài)、覆蓋率和執(zhí)行結(jié)果,更有利于理解程序的動(dòng)態(tài)行為特征。


很多代碼缺陷產(chǎn)生于程序運(yùn)行過程中,具有隱蔽性和不可預(yù)見性,比如數(shù)組越界,動(dòng)態(tài)存儲(chǔ)分配,內(nèi)存溢出,指針非法引用,類型不一致的隱式轉(zhuǎn)換等,這些錯(cuò)誤都是在編譯階段不能被編譯器檢查發(fā)現(xiàn)的錯(cuò)誤。在大規(guī)模,復(fù)雜度極高的軟件中,完全依賴于人工檢查方式可能會(huì)因?yàn)槿藶榈戎饔^原因造成問題被遺漏無法發(fā)現(xiàn)。將現(xiàn)有常見多發(fā)問題形成缺陷模式庫植入工具中,由工具自動(dòng)化檢測(cè)代碼缺陷,能夠高效提升測(cè)試效率,避免問題重復(fù)發(fā)生,減輕測(cè)試人員工作量。


缺陷模式規(guī)則分類


2.1 規(guī)則分類

2.1.1?? 按照錯(cuò)誤類別分類

為了進(jìn)一步研究軟件錯(cuò)誤發(fā)生的機(jī)理,分布情況,針對(duì)C語言典型缺陷模式庫中的規(guī)則,按照規(guī)則檢查類型對(duì)其進(jìn)行分類。

(1)? 數(shù)值檢查:除零錯(cuò)誤、數(shù)組越界。

(2)? 指針使用檢查:空指針解引用。

(3)? 數(shù)據(jù)流檢查:變量定義未使用就再次賦值。

(4)? 控制流檢查:if elseif分支語句末尾缺少else分支。

(5)? 初始化檢查:使用前未初始化變量。

(6)? 類型轉(zhuǎn)換檢查:數(shù)據(jù)類型不一致引入的隱式類型轉(zhuǎn)換。

(7)? 操作符使用不當(dāng)檢查:關(guān)系表達(dá)式、邏輯表達(dá)式、條件判斷語句中的控制表達(dá)式禁止為賦值表達(dá)式“=”、使用連續(xù)的比較運(yùn)算,可能導(dǎo)致代碼執(zhí)行邏輯與預(yù)期不符。


2.1.2?? 按照嚴(yán)重程度分類

根據(jù)故障出現(xiàn)可能引起的錯(cuò)誤嚴(yán)重程度,對(duì)軟件或者系統(tǒng)造成影響的嚴(yán)重程度,給每條規(guī)則定義了優(yōu)先級(jí)高、中、低的屬性。

(1)? 重要:除零錯(cuò)誤;數(shù)組越界;空指針解引用。

(2)? 中等:使用前未初始化變量;數(shù)據(jù)類型不一致引入的隱式類型轉(zhuǎn)換;關(guān)系表達(dá)式、邏輯表達(dá)式、條件判斷語句中的控制表達(dá)式禁止為賦值表達(dá)式“=”;使用連續(xù)的比較運(yùn)算,可能導(dǎo)致代碼執(zhí)行邏輯與預(yù)期不符。

(3)? 輕微:if elseif分支語句末尾缺少else分支;變量定義未使用就再次賦值。


2.2 規(guī)則解析

2.2.1?? 數(shù)值檢查

錯(cuò)誤發(fā)生在不斷運(yùn)行過程中,稱為運(yùn)行時(shí)錯(cuò)誤,一旦程序中出現(xiàn)該類型錯(cuò)誤,會(huì)導(dǎo)致計(jì)算得到的實(shí)際結(jié)果與預(yù)期結(jié)果完成不同,甚至引發(fā)計(jì)算機(jī)復(fù)位。數(shù)值檢查作為運(yùn)行時(shí)錯(cuò)誤檢查的重要檢查內(nèi)容,會(huì)出現(xiàn)在某些特定的運(yùn)行條件下,即便是經(jīng)過嚴(yán)格測(cè)試的程序,仍有可能存在非預(yù)期的淺通路,引發(fā)軟件不安全問題。


(1)? 數(shù)組越界

通過數(shù)組的下標(biāo)來得到數(shù)組內(nèi)指定索引的元素,稱作對(duì)數(shù)組的訪問。如果一個(gè)數(shù)組定義為n個(gè)元素,它占用一塊連續(xù)的內(nèi)存空間,對(duì)n個(gè)元素(下標(biāo)為0到n-1)的訪問都合法,如果對(duì)這n個(gè)之外的元素(如下標(biāo)n)進(jìn)行訪問,訪問到的是其它變量,是非法的,稱為“越界”。數(shù)組越界在運(yùn)行時(shí)的表現(xiàn)是不確定的,可能不會(huì)造成嚴(yán)重后果,也有可能導(dǎo)致程序崩潰。因此在使用數(shù)組時(shí)一定要檢查訪問是否越界,以保證程序的正確性。代碼示例見表1。


表1 ?數(shù)組越界代碼示例


(2)? 除零錯(cuò)誤

出現(xiàn)除零操作時(shí)會(huì)導(dǎo)致計(jì)算結(jié)果為一個(gè)極大值,超過數(shù)據(jù)類型能夠表示的最大范圍,就會(huì)發(fā)生溢出,計(jì)算機(jī)程序?qū)τ谝绯龅姆雷o(hù)處理可能是計(jì)算機(jī)復(fù)位。因此代碼中將整數(shù)和浮點(diǎn)數(shù)作為分母時(shí)都應(yīng)該進(jìn)行保護(hù),防止除零后數(shù)據(jù)溢出的異常情況發(fā)生。代碼示例見表2。


表2 ?除零錯(cuò)誤代碼示例


2.2.2? ?空指針解引用

空指針解引用是一種常見的動(dòng)態(tài)內(nèi)存錯(cuò)誤。指針變量可以指向堆地址、靜態(tài)變量和空地址單元,當(dāng)引用指向空地址單元的指針變量時(shí),就會(huì)產(chǎn)生空指針引用故障,導(dǎo)致不可預(yù)見的錯(cuò)誤,系統(tǒng)崩潰或者異常復(fù)位。因此,在解引用指針前,應(yīng)先判斷是否為NULL,如果是NULL則不要解引用。代碼示例見表3。


表3? 空指針解引用代碼示例


2.2.3? ?變量定義未使用就再次賦值

這條規(guī)則屬于數(shù)據(jù)流分析規(guī)則,主要關(guān)注變量值的操作邏輯是否合理正確,如果不符合邏輯,就有可能隱藏代碼問題。代碼示例見表4。


表4 ?變量定義未使用就再次賦值代碼示例表


2.2.4? ?if elseif分支語句末尾缺少else分支

這條規(guī)則屬于控制流分析規(guī)則,主要關(guān)注程序的結(jié)構(gòu)。需要在代碼解析的基礎(chǔ)上提取程序的控制流信息,程序的控制流用于決定分配給變量的特定值可能傳播到程序的哪些部分。如果存在某條路徑中變量值與預(yù)期不一致,就有可能隱藏代碼問題。代碼示例見表5。


表5 ?if elseif分支語句末尾缺少else分支代碼示例表


2.2.5? ?使用未初始化變量

程序在執(zhí)行過程中變量位于內(nèi)存中,內(nèi)存中供用戶使用的存儲(chǔ)空間分為三部分:程序區(qū)、靜態(tài)存儲(chǔ)區(qū)、動(dòng)態(tài)存儲(chǔ)區(qū)。全局變量全部存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū);動(dòng)態(tài)存儲(chǔ)區(qū)主要存放:函數(shù)的形參、自動(dòng)變量(沒有加static的局部變量)、函數(shù)調(diào)用的現(xiàn)場(chǎng)保護(hù)和返回值。在使用動(dòng)態(tài)存儲(chǔ)區(qū)變量前如果未對(duì)其賦初值就直接使用,由于變量值不確定,可能會(huì)發(fā)生無法預(yù)知的錯(cuò)誤。代碼示例見表6。


表6 ?使用未初始化變量代碼示例表


2.2.6?? 數(shù)據(jù)類型不一致引入的隱式類型轉(zhuǎn)換

當(dāng)賦值變量與被賦值變量類型不相同時(shí),需要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)檢查規(guī)則。一般情況下,數(shù)據(jù)的類型的轉(zhuǎn)換通常是由編譯系統(tǒng)自動(dòng)進(jìn)行的,不需要人工干預(yù),這種類型轉(zhuǎn)換稱為隱式類型轉(zhuǎn)換。但如果程序要求一定要將某一類型的數(shù)據(jù)轉(zhuǎn)換為另外一種類型,則可以利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符進(jìn)行轉(zhuǎn)換,這種強(qiáng)制轉(zhuǎn)換過程稱為顯式轉(zhuǎn)換。

圖1? 編譯器自動(dòng)提升規(guī)則

C語言編譯器數(shù)據(jù)類型提升規(guī)則可以歸納為從長(zhǎng)度小的數(shù)據(jù)類型向長(zhǎng)度大的數(shù)據(jù)類型提升,稱為向上轉(zhuǎn)換;反之,稱為向下轉(zhuǎn)換。編譯器自動(dòng)轉(zhuǎn)換規(guī)則見圖1所示。


如果出現(xiàn)向上隱式類型轉(zhuǎn)換,兩個(gè)數(shù)據(jù)進(jìn)行加法運(yùn)算時(shí),小數(shù)對(duì)應(yīng)到大數(shù)有效位數(shù)超出有效數(shù)據(jù)位數(shù),會(huì)導(dǎo)致小數(shù)無法加到大數(shù)上,造成計(jì)算結(jié)果存在精度損失。


如果出現(xiàn)向下隱式類型轉(zhuǎn)換,大范圍變量的數(shù)據(jù)值超出了小范圍變量的能夠表示的有效范圍,編譯器會(huì)根據(jù)數(shù)據(jù)值在內(nèi)存中的表示形式經(jīng)過轉(zhuǎn)換后,將高位數(shù)據(jù)截?cái)鄟G棄造成轉(zhuǎn)換結(jié)果錯(cuò)誤,因此編譯器不允許隱式向下轉(zhuǎn)換,如果必須要這么做,需要使用顯式的方法,使用顯式的方法也會(huì)存在問題,比如兩個(gè)數(shù)據(jù)相加得到的計(jì)算結(jié)果可能出現(xiàn)向上舍入或者向下舍入的情況。


例如,將高精度double類型變量轉(zhuǎn)換成float類型變量需要增加強(qiáng)制類型轉(zhuǎn)換。double型向float型轉(zhuǎn)換為向下轉(zhuǎn)換,C語言編譯器無法自動(dòng)執(zhí)行向下轉(zhuǎn)換的操作,因此需要采用顯式類型轉(zhuǎn)換的方式,將double類型變量顯式轉(zhuǎn)換為float類型變量。代碼示例見表7。


表7 ?類型轉(zhuǎn)換代碼示例表


2.2.7? ?操作符使用不當(dāng)

(1)? 關(guān)系表達(dá)式、邏輯表達(dá)式、條件判斷語句中的控制表達(dá)式禁止為賦值表達(dá)式“=”。

在上述表達(dá)式中如果使用賦值號(hào)會(huì)導(dǎo)致條件判斷結(jié)果始終為真,代碼執(zhí)行邏輯與預(yù)期要求不符。代碼示例見表8。


表8 ?某些表達(dá)式中禁止使用賦值表達(dá)式代碼示例表

(2)? 使用連續(xù)的比較運(yùn)算,可能導(dǎo)致代碼執(zhí)行邏輯與預(yù)期不符。

比如連續(xù)的比較操作為:1


表9 ?使用連續(xù)比較運(yùn)算的代碼示例表


代碼抽樣及結(jié)果分析

用代碼抽樣的方法驗(yàn)證和分析靜態(tài)分析工具SpecChecker對(duì)缺陷模式庫中規(guī)則的檢查情況SpecChecker是一款具有檢查編程規(guī)范、故障缺陷分析和共享數(shù)據(jù)變量分析等功能的靜態(tài)分析工具。使用該工具的故障缺陷分析功能對(duì)隨機(jī)抽樣代碼進(jìn)行檢查,給出工具分析結(jié)果,對(duì)工具和規(guī)則提出建議,明確代碼設(shè)計(jì)時(shí)的注意事項(xiàng)。

3.1 抽樣代碼情況及指標(biāo)

抽樣20w代碼嵌入式C代碼,處理器類型有C51、GCC、DSP,選擇以下幾個(gè)指標(biāo)作為對(duì)工具的衡量指標(biāo),以工具發(fā)現(xiàn)問題為核心指標(biāo)。

(1)? 工具提示:工具提示出違反某規(guī)則的總數(shù);

(2)? 確認(rèn)為問題:工具提示違反規(guī)則位置,經(jīng)人工確認(rèn)確實(shí)存在程序問題;

(3)? 工具誤報(bào):工具提示違反規(guī)則位置,經(jīng)人工確認(rèn)不存在違反規(guī)則或者任何錯(cuò)誤;

(4)? 工具漏報(bào):代碼違反規(guī)則要求,工具未給出提示。


3.2 工具分析結(jié)果

表10? 缺陷模式檢查結(jié)果


3.3 建議

根據(jù)表10結(jié)果,從幾個(gè)方面:漏報(bào)規(guī)則、誤報(bào)規(guī)則、定位準(zhǔn)確規(guī)則、提示性信息規(guī)則、代碼改進(jìn)規(guī)則、未檢出規(guī)則幾個(gè)方面給出改進(jìn)建議。


(1)? 漏報(bào)規(guī)則:工具能夠較好的發(fā)現(xiàn)整數(shù)為0做分母的“除零錯(cuò)誤”,準(zhǔn)確率較高,但是未能檢出分母為浮點(diǎn)數(shù)0.0的情況。在需求分析、代碼設(shè)計(jì)階段應(yīng)考慮分母是否可能為零,如果可能為零,應(yīng)進(jìn)行除零保護(hù)。


(2)? 誤報(bào)規(guī)則:工具對(duì)于“變量賦值后未使用再次賦值”存在一定程度的誤報(bào),該條規(guī)則給出了較多提示性內(nèi)容,但并未發(fā)現(xiàn)真正的程序問題。建議工具對(duì)于局部變量定義時(shí)賦初值后未使用再次賦值的情況不進(jìn)行提示。規(guī)則描述中也可更進(jìn)一步明確什么場(chǎng)景下的代碼邏輯是存在缺陷的。


(3)? 定位準(zhǔn)確規(guī)則:工具對(duì)于“數(shù)組越界”、“使用未初始化變量”、“關(guān)系表達(dá)式、邏輯表達(dá)式、條件判斷語句中的控制表達(dá)式禁止為賦值表達(dá)式“=””、“使用連續(xù)的比較運(yùn)算,可能導(dǎo)致代碼執(zhí)行邏輯與預(yù)期不符”,檢查結(jié)果較為準(zhǔn)確。


(4)? 提示性信息規(guī)則:“if elseif分支語句末尾缺少else分支”未發(fā)現(xiàn)出現(xiàn)實(shí)質(zhì)性問題,一般情況下需要結(jié)合代碼的處理邏輯分析是否存在問題。


(5)? 代碼改進(jìn)規(guī)則:“將double類型數(shù)據(jù)轉(zhuǎn)換為float類型”出現(xiàn)問題的大多數(shù)情況是存在一定程度的數(shù)據(jù)精度損失,會(huì)造成計(jì)算結(jié)果存在一定的誤差,建議代碼不進(jìn)行這類操作。


(6)? 未檢出規(guī)則:目前未見“空指針解引用”的錯(cuò)誤發(fā)生,一旦發(fā)生后果比較嚴(yán)重可能造成計(jì)算機(jī)復(fù)位,開發(fā)和測(cè)試人員應(yīng)引起重視,避免代碼中存在指針未判斷是否為空就直接使用的情況出現(xiàn)。


END
來源:StrongerHuang版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。
嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

全球嵌入式技術(shù)領(lǐng)域的年度盛會(huì)2026嵌入式世界展(Embedded World 2026,簡(jiǎn)稱EW26)于3月10日至12日在德國(guó)紐倫堡成功舉辦。作為物聯(lián)網(wǎng)和邊緣AI領(lǐng)域的領(lǐng)先企業(yè),Silicon Labs(亦稱“芯科科...

關(guān)鍵字: 物聯(lián)網(wǎng) 邊緣AI 嵌入式

3月10日至12日,2026年嵌入式世界展(Embedded World 2026,簡(jiǎn)稱EW26)在德國(guó)紐倫堡展覽中心成功舉辦。作為領(lǐng)先的邊緣AI與智能音頻等媒體處理技術(shù)和芯片解決方案提供商,XMOS以沉浸式演示與技術(shù)交...

關(guān)鍵字: 邊緣AI 智能音頻 嵌入式

在嵌入式系統(tǒng)開發(fā)中,SoC(System on Chip)的多樣性始終是橫亙?cè)陂_發(fā)者面前的難題。以某工業(yè)物聯(lián)網(wǎng)網(wǎng)關(guān)項(xiàng)目為例,其需同時(shí)支持NXP i.MX8M、Rockchip RK3566和Allwinner H616三...

關(guān)鍵字: Platform Driver模型 嵌入式

在非易失性存儲(chǔ)器領(lǐng)域,EEPROM(電可擦除可編程只讀存儲(chǔ)器)曾長(zhǎng)期占據(jù)主流地位,廣泛應(yīng)用于各類電子設(shè)備的參數(shù)存儲(chǔ)、日志記錄等場(chǎng)景。但隨著工業(yè)控制、汽車電子、醫(yī)療設(shè)備等領(lǐng)域?qū)Υ鎯?chǔ)性能提出更高要求,F(xiàn)RAM(鐵電隨機(jī)存取存...

關(guān)鍵字: 存儲(chǔ)器 可編程 嵌入式

康佳特將aReady.COM擴(kuò)展至Arm架構(gòu)模塊,基于恩智浦i.MX 95處理器打造應(yīng)用就緒的軟硬件構(gòu)建模塊,集成操作系統(tǒng)、系統(tǒng)整合與IoT連接能力,賦能高價(jià)值應(yīng)用快速落地

關(guān)鍵字: 處理器 IoT 嵌入式

3月12日,2026年中國(guó)家電及消費(fèi)電子博覽會(huì)(以下簡(jiǎn)稱:AWE 2026)在上海盛大開幕。展會(huì)現(xiàn)場(chǎng),場(chǎng)景化、系統(tǒng)化、一體化的家電解決方案成為行業(yè)焦點(diǎn),消費(fèi)者對(duì)家電的關(guān)注也已從基礎(chǔ)的尺寸匹配,延伸至對(duì)“空間秩序感”和“視...

關(guān)鍵字: 消費(fèi)電子 蒸烤箱 嵌入式

超高效NPU IP在資源受限設(shè)備中推進(jìn)邊緣AI,因而獲得認(rèn)可

關(guān)鍵字: 人工智能 嵌入式 NPU

上海2026年3月12日 /美通社/ -- 3月12日,2026中國(guó)家電及消費(fèi)電子博覽會(huì)(AWE 2026)在上海新國(guó)際博覽中心和東方樞紐國(guó)際商務(wù)合作區(qū)展區(qū)正式啟幕。本屆展會(huì)以"AI科技?慧享未來"為...

關(guān)鍵字: 西門子 博世 嵌入式 洗碗機(jī)

在“AI科技,慧享未來”的時(shí)代命題下,人工智能正加速滲透至家庭生活的每一個(gè)細(xì)節(jié)。2026年中國(guó)家電及消費(fèi)電子博覽會(huì)(AWE2026)在上海啟幕,聚焦AI技術(shù)如何重塑家電形態(tài)與人居體驗(yàn)。圍繞“智造不凡 悅享非凡”主題,西門...

關(guān)鍵字: 嵌入式 冰箱 AI
關(guān)閉