1. gzyueqian
      13352868059

      嵌入式開(kāi)發(fā):開(kāi)發(fā)新的編碼習(xí)慣以減少嵌入式軟件中的錯(cuò)誤

      更新時(shí)間: 2021-12-11 10:00:00來(lái)源: 粵嵌教育瀏覽量:11781

        向具有大量?jī)?nèi)存和電源的32位及更高處理器的轉(zhuǎn)變,使公司能夠在嵌入式開(kāi)發(fā)中構(gòu)建更多的增值功能和能力;這就是好處。缺點(diǎn)是,代碼的數(shù)量及其復(fù)雜性通常會(huì)導(dǎo)致影響應(yīng)用程序安全性和安全性的故障。


        是時(shí)候采取更好的方法了。可以在軟件中找到兩種關(guān)鍵類(lèi)型的錯(cuò)誤,并使用防止引入錯(cuò)誤的工具來(lái)解決:


        編碼錯(cuò)誤:例如,試圖訪(fǎng)問(wèn)數(shù)組邊界之外的代碼。這類(lèi)問(wèn)題可以通過(guò)執(zhí)行靜態(tài)分析來(lái)檢測(cè)。


        應(yīng)用程序錯(cuò)誤:只有準(zhǔn)確地知道應(yīng)用程序應(yīng)該做什么才能檢測(cè)到這些錯(cuò)誤,這意味著根據(jù)需求進(jìn)行測(cè)試。


        解決這些錯(cuò)誤,設(shè)計(jì)工程師將在通往更安全的代碼的道路上走很長(zhǎng)的路。


        1. 通過(guò)代碼檢查進(jìn)行一點(diǎn)點(diǎn)預(yù)防


        代碼中的錯(cuò)誤與電子郵件和即時(shí)消息中的錯(cuò)誤一樣容易發(fā)生。這些都是發(fā)生的簡(jiǎn)單錯(cuò)誤,因?yàn)楣こ處焸兒艽颐Γ瑳](méi)有校對(duì)。但隨著復(fù)雜性的增加,出現(xiàn)了一系列設(shè)計(jì)錯(cuò)誤,這些錯(cuò)誤帶來(lái)了巨大的挑戰(zhàn)。復(fù)雜性催生了對(duì)系統(tǒng)如何工作、數(shù)據(jù)如何傳遞以及值如何定義的全新理解。無(wú)論錯(cuò)誤是由復(fù)雜性還是嵌入式開(kāi)發(fā)人員的人為問(wèn)題引起的,它們都可能導(dǎo)致一段代碼試圖訪(fǎng)問(wèn)數(shù)組邊界之外的值。而且,編碼標(biāo)準(zhǔn)捕捉到了這一點(diǎn)。


        在C和C++世界中,80%的軟件缺陷是由錯(cuò)誤或不明智的使用造成的20%的語(yǔ)言。編碼標(biāo)準(zhǔn)對(duì)已知存在問(wèn)題的語(yǔ)言部分進(jìn)行了限制。結(jié)果:避免了缺陷,大大提高了軟件質(zhì)量。


        大多數(shù)C和C++編程錯(cuò)誤是由未定義的、實(shí)現(xiàn)定義的和未指定的行為引起的,這些行為是每個(gè)語(yǔ)言固有的,這導(dǎo)致軟件錯(cuò)誤和安全問(wèn)題。當(dāng)有符號(hào)整數(shù)右移時(shí),此實(shí)現(xiàn)定義的行為傳播高階位。根據(jù)編譯器工程師的使用,結(jié)果可能是0x40000000或0xC0000000,因?yàn)镃沒(méi)有指定函數(shù)參數(shù)的求值順序。


        C/C++語(yǔ)言中還有很多其他缺陷:使用goto或malloc等構(gòu)造;有符號(hào)和無(wú)符號(hào)值的混合;或者是“聰明”的代碼,可能效率高、結(jié)構(gòu)緊湊,但卻非常神秘和復(fù)雜,以至于其他人難以理解。這些問(wèn)題中的任何一個(gè)都可能導(dǎo)致缺陷、突然變?yōu)樨?fù)面的值溢出,或者使代碼無(wú)法維護(hù)。



        編碼標(biāo)準(zhǔn)為這些疾病提供了預(yù)防措施。它們可以防止使用這些有問(wèn)題的構(gòu)造,防止嵌入式開(kāi)發(fā)人員創(chuàng)建未記錄的、過(guò)于復(fù)雜的代碼,以及檢查樣式的一致性。甚至可以監(jiān)視諸如驗(yàn)證未使用制表符或圓括號(hào)位于特定位置之類(lèi)的事情。雖然這看起來(lái)很簡(jiǎn)單,但遵循這種風(fēng)格可以極大地幫助手動(dòng)代碼審閱,并防止在另一個(gè)編輯器中查看代碼時(shí)由于不同的選項(xiàng)卡大小而導(dǎo)致的混亂—所有這些都會(huì)分散審閱者對(duì)代碼的注意力。


        2. MISRA去營(yíng)救


        最著名的編程標(biāo)準(zhǔn)是MISRA指南,現(xiàn)在被許多提供某種程度MISRA檢查的嵌入式編譯器普遍采用。MISRA專(zhuān)注于C語(yǔ)言和C++語(yǔ)言中的問(wèn)題構(gòu)造和實(shí)踐,推薦使用一致的文體特征,同時(shí)停止建議。


        MISRA指南提供了關(guān)于每個(gè)規(guī)則存在原因的有用解釋?zhuān)约霸撘?guī)則的各種例外情況的詳細(xì)信息,以及未定義、未指定和實(shí)現(xiàn)定義行為的示例。


        大多數(shù)MISRA指南是“可判定的”,這意味著該工具可以識(shí)別是否存在違規(guī)行為;但有些是“不可判定的”,這意味著工具并不總是能夠推斷是否存在違規(guī)行為。


        如果靜態(tài)分析工具無(wú)法訪(fǎng)問(wèn)系統(tǒng)函數(shù)的源代碼,則傳遞給應(yīng)該初始化它的系統(tǒng)函數(shù)的未初始化變量可能不會(huì)注冊(cè)為錯(cuò)誤。有可能出現(xiàn)假陰性或假陽(yáng)性。


        編碼標(biāo)準(zhǔn)的嚴(yán)格性傳統(tǒng)上與汽車(chē)、飛機(jī)和醫(yī)療設(shè)備等關(guān)鍵應(yīng)用的功能安全軟件相關(guān)聯(lián)。然而,代碼的復(fù)雜性、安全性的重要性以及創(chuàng)建易于維護(hù)和升級(jí)的高質(zhì)量、健壯代碼的業(yè)務(wù)重要性使得編碼標(biāo)準(zhǔn)在所有開(kāi)發(fā)操作中都至關(guān)重要。


        通過(guò)確保錯(cuò)誤不會(huì)首先引入到代碼中,嵌入式開(kāi)發(fā)人員必須:減少了大量調(diào)試的需要,更好地控制進(jìn)度,以及通過(guò)降低總體成本來(lái)控制投資回報(bào)率。


        代碼檢查提供了一個(gè)具有巨大潛在好處的工具箱。



        3. 用測(cè)試工具進(jìn)行的一磅治療


        雖然代碼檢查解決了許多問(wèn)題,但應(yīng)用程序錯(cuò)誤只能通過(guò)測(cè)試產(chǎn)品是否做了它應(yīng)該做的事情來(lái)發(fā)現(xiàn),這意味著有需求。要避免應(yīng)用程序錯(cuò)誤,既需要設(shè)計(jì)正確的產(chǎn)品,也需要設(shè)計(jì)正確的產(chǎn)品。


        設(shè)計(jì)正確的產(chǎn)品意味著預(yù)先建立需求,并確保需求和源代碼之間的雙向可追溯性,以便實(shí)現(xiàn)每個(gè)需求,并將每個(gè)軟件功能追溯到需求。任何不符合要求的缺失或不必要的功能都是應(yīng)用程序缺陷。產(chǎn)品權(quán)利設(shè)計(jì)是確認(rèn)開(kāi)發(fā)的系統(tǒng)代碼滿(mǎn)足項(xiàng)目要求的過(guò)程。您可以通過(guò)執(zhí)行基于需求的測(cè)試來(lái)實(shí)現(xiàn)這一點(diǎn)。


        4. 編碼的新習(xí)慣


        毫無(wú)疑問(wèn),軟件復(fù)雜性及其錯(cuò)誤隨著連接性、更快的內(nèi)存、豐富的硬件平臺(tái)和特定的客戶(hù)需求而激增。采用最先進(jìn)的編碼標(biāo)準(zhǔn)、度量代碼的指標(biāo)、跟蹤需求以及實(shí)施基于需求的測(cè)試,為開(kāi)發(fā)團(tuán)隊(duì)提供了創(chuàng)建高質(zhì)量代碼和減少責(zé)任的機(jī)會(huì)。


        在沒(méi)有標(biāo)準(zhǔn)要求遵守的情況下,團(tuán)隊(duì)采用這些新習(xí)慣的程度取決于公司對(duì)它們帶來(lái)的游戲變化的認(rèn)可程度。采用這些實(shí)踐,無(wú)論產(chǎn)品是安全關(guān)鍵的還是安全關(guān)鍵的,都會(huì)使代碼的可維護(hù)性和健壯性日夜不同。干凈的代碼簡(jiǎn)化了新功能的添加,簡(jiǎn)化了產(chǎn)品維護(hù),并將成本和進(jìn)度保持在最低限度—所有這些特性都可以提高公司的投資回報(bào)率。


        無(wú)論產(chǎn)品是否安全關(guān)鍵,這肯定是一個(gè)只能對(duì)嵌入式開(kāi)發(fā)團(tuán)隊(duì)有益的結(jié)果。

      免費(fèi)預(yù)約試聽(tīng)課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲欧美在线人成最新按摩 | 亚洲午夜久久久精品视频 | 中文字幕一区二区精品区 | 中文字幕在线观看日韩少妇 | 亚洲成a人片在线不卡 | 一本一级特黄大片中文字幕 |