0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

IAR愛亞系統(tǒng) ? 來源:IAR愛亞系統(tǒng) ? 2023-02-23 13:48 ? 次閱讀

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

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

關于代碼質量

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

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

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

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

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

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

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

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

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

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

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

基于歷史原因,目前在嵌入式開發(fā)中,主要還是使用 C/C++ 高級編程語言,而 C/C++ 是一種不安全的語言,包含大量未定義的行為,對于這些行為的不同解釋,可能會導致未知或不確定的副作用,其中一部分將會轉化為我們所俗稱的“Bug”。比如 C 語言標準庫中的一些輸入輸出函數(shù),字符串函數(shù)導致的緩沖區(qū)溢出的問題,指針未初始化風險,重復釋放內存等等。 同時,軟件開發(fā)的執(zhí)行和實施的核心是“人”,也就是開發(fā)人員,在實踐過程中,開發(fā)人員可能會一次又一次無意地將相同類型的錯誤寫入到他們的源代碼中。這一結論來自各種權威機構,如 NASA、貝爾實驗室和 MITRE,它們進行了多項調查和研究。這項研究的結果是給出了最佳編程實踐或推薦的編程實踐,它們可以有效識別有風險和不良的編碼行為。 有許多指南和編碼實踐可用于檢查常見錯誤以及如何避免這些錯誤來提高代碼質量,其中一些技術和實踐在實施過程中,成為眾所周知的編碼標準。編碼標準是編碼規(guī)則、指導方針和最佳實踐的集合,它可以識別語言中容易引起B(yǎng)ug的行為,防止你在源代碼中做可疑的事情,消除容易出現(xiàn)缺陷的代碼結構,幫助您快速提高代碼質量。 在嵌入式系統(tǒng)中,MISRA-C/C++ ,CERT-C/C++,CWE 等已經成為事實標準。特別是在汽車、醫(yī)療和鐵路等安全關鍵型應用中,被 IEC 61508、EN 50128 和 ISO 26262 等功能安全標準要求。

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

MISRA

MISRA C 由汽車工業(yè)軟件可靠性協(xié)會開發(fā)。它的目的是提高嵌入式系統(tǒng)環(huán)境中的代碼安全性、可移植性和可靠性,特別是那些用 ISO C 編程的系統(tǒng)。 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 協(xié)會發(fā)現(xiàn) MISRA C 不僅汽車行業(yè)需要,其他一些安全相關的行業(yè)也需要。最新的 MISAR C 標準是 MISRA-C:2012。

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

CERT

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

CWE

CWE 是基于社區(qū)開發(fā)的一組影響信息安全的軟件和硬件缺陷列表。它用通用語言描述和討論軟件和硬件的缺陷,可以作為缺陷識別、緩解和預防工作的公共基線標準。因此,CWE 可以幫助開發(fā)人員和安全從業(yè)者檢查現(xiàn)有軟件和硬件產品的缺陷,評估針對這些缺陷的工具的覆蓋率等。 編碼標準的應用對提高代碼質量有立竿見影的作用。在 Dr. Dobbs 所做的一項研究中(Code Quality Improvement | Dr Dobb's),引入編碼標準進行符合性檢查后,缺陷注入率降低了 41%,這節(jié)省了大量測試時間,既提高了代碼質量,又縮短了工程時間,從而加速了產品上市。在這項研究中,每個月的缺陷注入率是相當穩(wěn)定的,直到該組織引入編碼標準,然后缺陷率急速下降。

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

796ce436-b32f-11ed-bfe3-dac502259ad0.png

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

有了編碼標準后,應用標準意味著代碼除了需要遵守語言本身的規(guī)則外,還需要遵守成百上千條編碼標準所包含的規(guī)則和要求。理論上,我們可以通過人工來檢查每條編碼規(guī)則的實施情況,但對于日益復雜的軟件顯然是力不從心的。大量的實踐表明,應用自動化工具是實施編碼標準,提高代碼質量的最佳路徑。 自動化工具中我們最熟悉的就是編譯器和鏈接器。高質量的編譯器和鏈接器應支持現(xiàn)代編程語言,如最新的 C 和 C++ 規(guī)范,報告每個構建步驟中可能出現(xiàn)的問題,以便它生成懷疑的警告,例如易失性變量或內存訪問,其評估順序可能會影響應用程序的邏輯。警告是第一道靜態(tài)分析檢查,絕不能忽視,尤其是在功能安全設置中。最好的建議是通過更改編譯器設置將所有警告都視為錯誤來將警告轉化為錯誤。這將迫使開發(fā)人員修復代碼中的所有歧義,因為所有的警告都將作為真正的問題處理。 專用的靜態(tài)分析工具基于源代碼分析,可以在不執(zhí)行程序的情況下發(fā)現(xiàn)潛在的問題,比如 IAR 提供了與 IAR Embedded Workbench 無縫集成的靜態(tài)分析工具 C-STAT。這種類型的工具可以幫助你找到代碼中最常見的缺陷來源,也可以幫助你找到開發(fā)人員在試圖編寫代碼時往往不會考慮的問題,特別是當他們?yōu)榱俗屇承┕δ苓\行而加入支撐代碼時。靜態(tài)分析工具確實能幫助你開發(fā)出更好的代碼,因為它們強制執(zhí)行編碼標準。事實上,如果正在創(chuàng)建一個功能安全認證的應用,你甚至會被建議,甚至強制要求使用靜態(tài)分析工具。 此外,嵌入式軟件在運行時仍然容易受到算術問題、緩沖區(qū)溢出、邊界問題、堆完整性和內存泄漏的影響。一個可行的方法是在可能發(fā)生潛在錯誤的所有地方插入特定的檢測代碼或斷言來檢測此類錯誤。但是,手動添加指令來檢測并以某種方式在運行時報告問題是一項非常耗時的任務。因此,使用動態(tài)或運行時分析工具來捕獲和觸發(fā)僅在運行時的缺陷和錯誤,是一個可以極大提高效率和生產力的方法。例如,在 IAR Embedded Workbench 中,開發(fā)人員可以使用運行時分析工具插件 C-RUN。

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

79958008-b32f-11ed-bfe3-dac502259ad0.png

總結

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

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 自動化
    +關注

    關注

    29

    文章

    5601

    瀏覽量

    79467
  • C++
    C++
    +關注

    關注

    22

    文章

    2113

    瀏覽量

    73742
  • 代碼
    +關注

    關注

    30

    文章

    4808

    瀏覽量

    68811

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

文章出處:【微信號:IAR愛亞系統(tǒng),微信公眾號:IAR愛亞系統(tǒng)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何提高嵌入式代碼質量?

    嵌入式系統(tǒng)的發(fā)展已經深刻地影響了我們日常生活的方方面面,從智能家居到汽車控制系統(tǒng),再到醫(yī)療設備和工業(yè)自動化等領域,嵌入式系統(tǒng)無處不在。嵌入式軟件的質量直接關系到系統(tǒng)的安全性、穩(wěn)定性和性能。因此,提高
    發(fā)表于 01-15 10:48

    誠聘高級運維自動化工程師

    獵頭職位:高級運維自動化工程師【合肥】工作職責: 1、根據(jù)基礎架構運維管理需求,規(guī)劃設計運維自動化平臺和系統(tǒng)的架構并推進落實;2、負責現(xiàn)有自動化運維系統(tǒng)和工具的維護和完善; 3、負責運
    發(fā)表于 12-12 10:37

    一個自動化工廠的標配是什么?

    監(jiān)視和控制生產過程中的各個參數(shù),使設備工作在正常狀態(tài)或最佳狀態(tài),并使產品達到最好的質量。因此可以說,沒有眾多的優(yōu)良的傳感器,現(xiàn)代化生產也就失去了基礎。 NO.5 變頻器 自動化工廠的交換器 變頻器
    發(fā)表于 08-22 11:30

    CasePlayer2--單元測試自動化工具

    CasePlayer2是一款日本普遍通用的單元測試自動化工具.它可以快速解析您的程序,定位程序中的問題點,生成程序相應的流程圖,式樣書等必要文檔.
    發(fā)表于 09-05 11:23

    2021年化工自動化控制儀表模擬考試一點通

    練習。2021年化工自動化控制儀表考試內容及化工自動化控制儀表作業(yè)模擬考試1、【單選題】工業(yè)標準化熱電偶鉑銠30-鉑銠6是()型熱電偶。(C
    發(fā)表于 09-02 07:41

    2021年化工自動化控制儀表考試試題及化工自動化控制儀表操作證考試 精選資料分享

    題庫來源:安全生產模擬考試一點通公眾號小程序化工自動化控制儀表考試試題根據(jù)新化工自動化控制儀表考試大綱要求,安全生產模擬考試一點通將化工
    發(fā)表于 09-13 06:55

    AutoKernel高性能算子自動優(yōu)化工具

    主要由資深HPC工程師(高性能計算優(yōu)化工程師)進行開發(fā),為了加快開發(fā)進程,縮短深度學習應用落地周期,自動化算子優(yōu)化是一個趨勢。AutoKernel是由OPEN AI LAB提出的高性能算子自動優(yōu)
    發(fā)表于 12-14 06:18

    單元測試/集成測試自動化工具--WinAMS

    CoverageMasterwinAMS : 適用于嵌入式目標機代碼的單元測試/集成測試工具全面支持嵌入式微機!驗證嵌入式C/C++軟件 實施以模塊為單位的自動化單元測試工具不需要Ho
    發(fā)表于 06-17 18:26

    Android和iOS 測試五個最好的開源自動化工具

    本文主要介紹Android和iOS 五個最好的開源自動化工具,這里整理了相關資料,希望能幫助測試軟件的朋友,有需要的看下。自動化測試在產品測試上有著非常重要的作用。實現(xiàn)測試自動化有多種積極的方式
    的頭像 發(fā)表于 02-06 15:48 ?8041次閱讀
    Android和iOS 測試五個最好的開源<b class='flag-5'>自動化工具</b>

    模擬EDA自動化工具如今已經登場

    各種不同類型的模擬電路增加‘秘密配方’,因此,他們通常不情愿采用自動化途徑。 雖然如此,與數(shù)字設計自動化工具較勁的模擬設計自動化工具如今已經登場了。
    發(fā)表于 05-21 16:30 ?3287次閱讀

    化工自動化儀表分類、功能優(yōu)勢及應用分析

      化工生產過程自動化,就是在化工設備上,配置一些自動化裝置,代替操作人員的部分直接勞動,使生產在不同程度上自動地進行。這種用
    發(fā)表于 08-26 10:16 ?7963次閱讀

    Keil集成AStyle代碼格式化工具

    借助AStyle代碼格式化工具能讓我們寫的代碼看起來工整而且規(guī)范,下面來介紹一下keil如何集成AStyle代碼格式化工具
    的頭像 發(fā)表于 03-30 09:12 ?3316次閱讀
    Keil集成AStyle<b class='flag-5'>代碼</b>格式<b class='flag-5'>化工具</b>

    EsDA — 嵌入式系統(tǒng)設計自動化工具

    EsDA — 嵌入式系統(tǒng)設計自動化工具
    的頭像 發(fā)表于 06-09 10:26 ?659次閱讀
    EsDA — 嵌入式系統(tǒng)設計<b class='flag-5'>自動化工具</b>

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

    本文將介紹如何應用編碼標準自動化工具,提高代碼質量
    的頭像 發(fā)表于 07-08 10:59 ?564次閱讀
    如何應用<b class='flag-5'>編碼</b><b class='flag-5'>標準</b>和<b class='flag-5'>自動化工具</b> <b class='flag-5'>提高</b><b class='flag-5'>代碼</b><b class='flag-5'>質量</b>

    Jenkins 與 SonarQube 集成部署,自動化代碼質量監(jiān)控

    前言 強化代碼質量,加速軟件交付!Jenkins 攜手 SonarQube,與華為云 Flexus X 云服務器強強聯(lián)合,打造自動化代碼質量
    的頭像 發(fā)表于 01-07 17:24 ?230次閱讀
    Jenkins 與 SonarQube 集成部署,<b class='flag-5'>自動化</b><b class='flag-5'>代碼</b><b class='flag-5'>質量</b>監(jiān)控