《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > 應用編碼標準和自動化工具,提高代碼質量

應用編碼標準和自動化工具,提高代碼質量

2023-04-26
來源:IAR

  嵌入式系統在我們的日常生活中廣泛存在,從消費類電子、醫療設備,到汽車,工業控制,航空航天等,它們的存在已經成為我們生活中不可分割的一部分。隨著技術的不斷進步和客戶需求的增加,嵌入式系統和軟件變得越來越復雜,同時產品的開發周期變得越來越短。如何在短時間內開發出高質量的軟件對產品的成功起著決定性的作用。

  本文將介紹如何應用編碼標準和自動化工具,提高代碼質量

  關于代碼質量

  代碼質量總體上是指為軟件編寫的代碼的整體優良水平,一般可以通過下面一些指標來評價代碼質量:

  • 可讀性:代碼應該易于閱讀和理解,即使是不熟悉項目的人也是如此。

  • 可維護性:代碼應該有條理和模塊化,可以方便地修改和更新。

  • 可移植性:代碼應該被設計易于在不同的平臺上使用。

  • 可重用性:代碼應該是可重用的,可以在應用程序的其他部分使用。

  • 可測試性:代碼應該是易于進行單元測試和集成測試的。

  • 安全性:代碼應該是安全的,保護敏感數據并防止惡意攻擊。

  • 性能:代碼應該是高效的,專注于優化性能,以最大限度地減少資源使用。

  對于嵌入式系統,代碼質量更加的重要。嵌入式系統經常是處理執行關鍵任務功能的設備。

  如果嵌入式軟件存在代碼質量問題,可能會導致硬件設備的故障或安全漏洞,嚴重影響系統的正常運行。

  編碼標準是提高代碼質量的最佳實踐

  基于歷史原因,目前在嵌入式開發中,主要還是使用C/C++高級編程語言,而C/C++是一種不安全的語言,包含大量未定義的行為,對于這些行為的不同解釋,可能會導致未知或不確定的副作用,其中一部分將會轉化為我們俗稱的“Bug”。比如C語言標準庫中的一些輸入輸出函數,字符串函數導致的緩沖區溢出的問題,指針未初始化風險,重復釋放內存等等。

  同時,軟件開發執行和實施的核心是“人”,也就是開發人員,在實踐過程中,開發人員可能會一次又一次無意地將相同類型的錯誤寫入到他們的源代碼中。這一結論來自各種權威機構,如NASA、貝爾實驗室和MITRE,它們進行了多項調查和研究。這些研究的結果是給出了最佳編程實踐或推薦的編程實踐,它們可以有效識別有風險和不良的編碼行為。

  有許多指南和編碼實踐可用于檢查常見錯誤以及如何避免這些錯誤來提高代碼質量,其中一些技術和實踐在實施過程中,成為眾所周知的編碼標準。編碼標準是編碼規則、指導方針和最佳實踐的集合,它可以識別語言中容易引起Bug的行為,防止你在源代碼中做可疑的事情,消除容易出現缺陷的代碼結構,幫助你快速提高代碼質量。

  在嵌入式系統中,MISRA-C/C++,CERT-C/C++,CWE等已經成為事實標準。特別是在汽車、醫療和鐵路等安全關鍵型應用中,被IEC 61508、EN 50128和ISO 26262 等功能安全標準所要求。

  很多大公司都有相應的代碼編程規范,尤其是針對C語言,但這些編程規范往往與業界的編程標準(比如MISRA C)的側重點不同。一般公司的編程規范更加注重代碼風格,比如命名,縮進,括號的使用等,來提高可讀性,而業界的編程標準更偏重于代碼的可維護性,可移植性,可靠性和安全性。在具體實踐中,往往是需要這二者結合使用。

  MISRA

23.JPG

  MISRA C由汽車工業軟件可靠性協會開發。它的目的是提高嵌入式系統環境中的代碼安全性、可移植性和可靠性,特別是那些用 ISO C 編程的系統。

  MISRA C標準的第一版“Guidelines for the use of the C language in vehicle based software”于1998年制定,正式名稱為MISRA-C:1998。2004年進行了一次更新“Guidelines for the use of the C language in critical systems”,正式名稱為 MISRA-C:2004。從1998年的vehicle based software到2004年的critical systems,因為MISRA協會發現MISRA C不僅汽車行業需要,其他一些安全相關的行業也需要。最新的MISAR C標準是MISRA-C:2012。

  關于MISRA C,很多開發者都有一個誤解:MISRA C只適用于汽車電子嵌入式軟件開發。對此,MISRA C的輪值主席Andrew Banks特意做了解釋說明:雖然MISRA最開始推出的時候主要是針對汽車行業的,但由于它本身其實是在C/C++語言的基礎上,加上了一些約束,去掉了一些讓人容易出錯的編程方法,保留了常用的寫法,盡可能讓開發者保持一致,提高可維護性和可移植性,從而提高安全性和可靠性,因此 MISRA 在飛機、機器人、無人機、醫療等其它的嵌入式行業也開始流行起來,成為了全球公認的嵌入式 C 編程標準。

  CERT

24.JPG

  CERT C/C++由卡內基梅隆大學軟件工程研究所(SEI)的計算機緊急響應小組 (CERT)部門創建和發布,為C/C++編程語言的安全編碼提供規則和建議,這些規則和建議的目標是開發安全、穩定和可靠的系統。

  CWE

25.JPG

  CWE是基于社區開發的一組影響信息安全的軟件和硬件缺陷列表。它用通用語言描述和討論軟件和硬件的缺陷,可以作為缺陷識別、緩解和預防工作的公共基線標準。因此,CWE可以幫助開發人員和安全從業者檢查現有軟件和硬件產品的缺陷,評估針對這些缺陷的工具的覆蓋率等。

  編碼標準的應用對提高代碼質量有立竿見影的作用。在Dr. Dobbs所做的一項研究中(Code Quality Improvement | Dr Dobb's),引入編碼標準進行符合性檢查后,缺陷注入率降低了41%,這節省了大量測試時間,既提高了代碼質量,又縮短了工程時間,從而加速了產品上市。在這項研究中,每個月的缺陷注入率是相當穩定的,直到該組織引入編碼標準,然后缺陷率急速下降(見下圖)。

  隨著對標準遵從度的提高,質量也隨之提高,偏差越來越少,缺陷率直線下降。

26.JPG

  自動化工具是實施編碼標準的最佳路徑

  有了編碼標準后,應用標準意味著代碼除了需要遵守語言本身的規則外,還需要遵守成百上千條編碼標準所包含的規則和要求。理論上,我們可以通過人工來檢查每條編碼規則的實施情況,但對于日益復雜的軟件顯然是力不從心的。大量的實踐表明,應用自動化工具是實施編碼標準,提高代碼質量的最佳路徑。

  自動化工具中我們最熟悉的就是編譯器和鏈接器。高質量的編譯器和鏈接器應支持現代編程語言,如最新的C和C++規范,報告每個構建步驟中可能出現的問題,以便它生成懷疑的警告,例如易失性變量或內存訪問,其評估順序可能會影響應用程序的邏輯。警告是第一道靜態分析檢查,絕不能忽視,尤其是在功能安全設置中。最好的建議是通過更改編譯器設置將所有警告都視為錯誤來將警告轉化為錯誤。這將迫使開發人員修復代碼中的所有歧義,因為所有的警告都將作為真正的問題處理。

  專用的靜態分析工具基于源代碼分析,可以在不執行程序的情況下發現潛在的問題,比如 IAR 提供了與 IAR Embedded Workbench 無縫集成的靜態分析工具 C-STAT。這種類型的工具可以幫助你找到代碼中最常見的缺陷來源,也可以幫助你找到開發人員在試圖編寫代碼時往往不會考慮的問題,特別是當他們為了讓某些功能運行而加入支撐代碼時。靜態分析工具確實能幫助你開發出更好的代碼,因為它們強制執行編碼標準。事實上,如果正在創建一個功能安全認證的應用,你可能會被建議,甚至強制要求使用靜態分析工具。

  此外,嵌入式軟件在運行時仍然容易受到算術問題、緩沖區溢出、邊界問題、堆完整性和內存泄漏的影響。一個可行的方法是在可能發生潛在錯誤的所有地方插入特定的檢測代碼或斷言來檢測此類錯誤。但是,手動添加指令來檢測并以某種方式在運行時報告問題是一項非常耗時的任務。因此,使用動態或運行時分析工具來捕獲和觸發僅在運行時的缺陷和錯誤,是一個可以極大提高效率和生產力的方法。例如,在 IAR Embedded Workbench 中,開發人員可以使用運行時分析工具插件 C-RUN。

  綜上所述,編譯器和鏈接器可以報告在構建中可能出現的問題,靜態分析工具擅長發現一些未定義行為的缺陷,檢查編碼標準的符合性,而運行時分析工具擅長發現只有在執行時才會觸發的缺陷。這些缺陷有時會有重疊,但有時只能在一個域或另一個域中檢測到。為了盡可能提高代碼質量,以及發現問題的效率,需要將幾者結合使用并盡可能與開發和構建工具集成。下圖矩陣代表組合不同工具時的完整缺陷覆蓋率。

27.JPG

  總結

  隨著嵌入式系統的復雜性提高,對于嵌入式軟件的要求也越來越高,其中最核心最根本的是代碼質量,而編碼標準是提高代碼質量的最佳實踐。遵循編碼標準的最有效的方式是應用自動化工具,包括靜態分析工具,運行時分析工具,這樣可以有效地在開發過程中提高代碼質量,既減少了項目的開發時間和成本,又提高了產品的質量和競爭力。

  參考文獻

  1.https://www.misra.org.uk/

  2.https://ldra.com/ldra-blog/misra-myths-busted-1-is-misra-c-just-an-automotive-standard/

  3.http://www.cert.org/

  4.http://cwe.mitre.org/

  5.https://www.iar.com/knowledge/learn/code-quality/everything-starts-with-code-quality/

  6.https://www.iar.com/knowledge/learn/code-quality/everything-ends-with-code-quality/



更多精彩內容歡迎點擊==>>電子技術應用-AET<<

mmexport1621241704608.jpg

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
日韩网站在线看片你懂的| 久久久久欧美精品| 欧美在线视频在线播放完整版免费观看| 99天天综合性| 亚洲精品乱码久久久久| 亚洲国产精品999| 亚洲成人在线视频播放| 国产在线视频欧美| 国产亚洲一本大道中文在线| 国产精品一区在线播放| 国产精品看片资源| 欧美视频在线观看免费网址| 欧美三级乱码| 国产精品高潮呻吟久久| 国产精品h在线观看| 欧美日韩在线高清| 欧美日韩精品系列| 欧美三级视频| 国产精品成人播放| 国产精品毛片| 国产欧美在线播放| 国产一区视频在线看| 狠狠综合久久| 亚洲第一福利在线观看| 亚洲国产精品99久久久久久久久| 亚洲福利国产| 亚洲人成人99网站| 日韩小视频在线观看专区| 一本久久青青| 亚洲愉拍自拍另类高清精品| 先锋影音久久久| 亚洲国产导航| 亚洲日本中文字幕区| 99re6热只有精品免费观看| 一区二区精品在线| 亚洲一区三区电影在线观看| 亚洲欧美日韩一区二区在线| 久久av免费一区| 蜜臀久久99精品久久久久久9| 欧美激情精品久久久久久蜜臀| 欧美日韩黄色大片| 国产麻豆成人精品| 在线观看欧美视频| 99re66热这里只有精品4| 亚洲永久字幕| 亚洲黄色天堂| 亚洲无线视频| 久久精品夜夜夜夜久久| 欧美成人午夜激情| 欧美视频专区一二在线观看| 国产日韩综合一区二区性色av| 激情欧美一区二区| 日韩午夜在线电影| 欧美一区二区三区视频在线| 亚洲精品视频啊美女在线直播| 中文在线资源观看网站视频免费不卡 | 一本大道久久a久久精品综合| 午夜精品久久久久| 日韩午夜激情| 久久国产一二区| 欧美区亚洲区| 国产一区二区精品久久99| 亚洲精品日韩综合观看成人91| 亚洲女爱视频在线| 亚洲精品乱码视频| 欧美一区深夜视频| 欧美日韩国产成人在线| 国产午夜精品理论片a级大结局| 亚洲国产视频一区二区| 亚洲女同在线| 在线亚洲观看| 噜噜噜在线观看免费视频日韩| 国产精品国产三级欧美二区| 1000部精品久久久久久久久| 亚洲永久免费视频| 99在线精品观看| 久久久久综合网| 欧美天堂亚洲电影院在线播放| 影音先锋亚洲电影| 亚洲欧美日韩国产综合在线| 亚洲日本欧美天堂| 欧美在线视频在线播放完整版免费观看 | 蜜桃av噜噜一区二区三区| 国产精品入口日韩视频大尺度| 亚洲国产一区视频| 久久国产精品黑丝| 亚洲欧美资源在线| 欧美日韩国产大片| 亚洲国产精品美女| 欧美有码在线视频| 亚洲欧美激情在线视频| 欧美区视频在线观看| 极品av少妇一区二区| 亚洲在线一区| 亚洲一卡久久| 欧美另类变人与禽xxxxx| 尤物九九久久国产精品的特点| 亚洲综合日韩在线| 亚洲色诱最新| 欧美精品aa| 在线日韩欧美视频| 久久成人在线| 久久精品成人| 国产欧美日韩精品丝袜高跟鞋| 国产精品毛片a∨一区二区三区|国 | 亚洲激情偷拍| 亚洲激情欧美| 开心色5月久久精品| 国产亚洲人成a一在线v站 | 亚洲免费在线播放| 亚洲男女自偷自拍图片另类| 欧美日韩成人在线视频| 亚洲国产高清高潮精品美女| 久久精品二区三区| 久久久久久久综合色一本| 国产欧美成人| 亚洲综合日韩在线| 亚洲欧美在线x视频| 欧美视频免费在线| 99综合在线| 亚洲一区二区欧美日韩| 欧美日韩成人综合在线一区二区| 亚洲欧洲日本一区二区三区| 亚洲日韩第九十九页| 欧美大胆成人| 亚洲日本成人| 一区二区三区你懂的| 欧美日韩三级在线| 99精品视频免费全部在线| 亚洲小说欧美另类社区| 欧美日韩另类一区| 一区二区久久久久久| 这里是久久伊人| 欧美视频一区二区三区| 亚洲少妇自拍| 午夜视频精品| 国产欧美欧洲在线观看| 欧美一区二区私人影院日本 | 久久九九精品99国产精品| 国模精品娜娜一二三区| 久久精品99无色码中文字幕| 久久婷婷蜜乳一本欲蜜臀| 精品不卡视频| 亚洲精品美女久久7777777| 欧美激情亚洲激情| 99av国产精品欲麻豆| 午夜精品99久久免费| 国产亚洲欧美一级| 亚洲国产综合在线看不卡| 欧美激情网友自拍| 99riav国产精品| 亚洲欧洲av一区二区| 国产免费成人在线视频| 欧美在线三级| 女人色偷偷aa久久天堂| 亚洲精品日韩一| 欧美一区二区播放| 国模精品娜娜一二三区| 亚洲精品影院| 国产精品久久久久久久久久免费 | 亚洲视频在线二区| 久久精品夜色噜噜亚洲aⅴ| 亚洲春色另类小说| 亚洲一区二区免费在线| 国产精品性做久久久久久| 欧美在线观看一区二区| 欧美成人情趣视频| 亚洲视频在线观看| 久久久天天操| 日韩视频在线一区二区| 欧美怡红院视频| 在线免费观看日本欧美| 亚洲一区二区三区高清不卡| 国产亚洲一级高清| 夜夜爽www精品| 国产午夜精品在线观看| 亚洲精品日韩久久| 国产精品一区在线观看| 亚洲精品社区| 国产欧美精品一区二区色综合 | 亚洲激情欧美激情| 欧美一级播放| 亚洲激情第一区| 欧美一区日本一区韩国一区| 亚洲国产网站| 正在播放亚洲一区| 国内精品视频在线播放| 在线一区二区三区四区| 国产综合久久久久久鬼色| 中文欧美字幕免费| 激情综合久久| 午夜一区在线| 亚洲精品国产精品乱码不99按摩| 久久久久网址| 亚洲一区精彩视频| 欧美激情一区二区三区四区 | 久久久久久穴| 国产精品99久久久久久白浆小说 | 亚洲欧美日韩在线| 亚洲黄一区二区|