色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

基于嵌入式ASIL D產品的開發經驗

汽車ECU開發 ? 來源:汽車ECU開發 ? 2023-11-21 16:32 ? 次閱讀

軟件開發始于需求卻不能終于需求,我們在滿足需求的同時,還需要考慮代碼本身的質量,包括可讀性、可維護性、可擴展性、可移植性、安全性、高效性等。

上一篇文章《汽車軟件單元測試的要點與意義》提到了諸如靜態分析與覆蓋度測試的一些代碼評價手段,這一篇講一些具體指標。

這些指標主要來自于ASIL D軟件的實踐經驗。

1

每個函數的語句數

該指標是指函數內部語句的個數,是一種基礎的代碼復雜度度量方式。在多數語言中,我們可以使用工具自動計算語句個數。

常見語句包含以下類型:

以分號(;)結尾的簡單語句

  • if語句
  • for語句
  • while語句
  • do語句
  • switch語句
  • break語句
  • continue語句
  • return語句
  • goto語句

語句個數應盡量維持在10~20,最多不要超過50。

2

return語句的數量

為了提高代碼的可讀性,我們最好遵循“單一出口原則”,也就是盡量保證一個函數只有一個出口點(函數結束執行的地方)。

出口點通常是return語句,所以我們也建議盡量減少其數量,比如,一個函數的return維持在1~2個之內

3

代碼行長度

寫文章要短句,是為了便于閱讀。代碼也是一樣,太長的代碼行會明顯增加閱讀代碼的難度,很現實的問題是,需要開發人員左右滾動屏幕

在保證合理的邏輯、換行和縮進的前提下,要盡可能將長代碼拆分。通常,低于160個字符的代碼行可以認為是一個合理目標。

4

圈復雜度

圈復雜度是指通過源代碼線性獨立路徑的個數,也是用來衡量代碼復雜度。

如何計算呢?我們可以通過以下3個代碼控制流圖來看。

55ab37fa-73a0-11ee-939d-92fbcf53809c.png

一種計算公式為,圈復雜度M=控制流圖邊數E-節點N+2

故,

圖1:M=1-2+2=1,即無判定節點,圈復雜度為1。

圖2:M=4-4+2=2,即一個判定節點,圈復雜度為2。

圖3:M=7-6+2=3,即兩個判定節點,圈復雜度為3。

除了評價本身代碼判定邏輯的復雜性之外,圈復雜度還能夠用來確定最少需要多少個測試用例來滿足分支和路徑的覆蓋度。

一般經驗是,圈復雜度應小于10,以達到較好的可測性

5

非循環路徑數

這個指標也被稱為NPATH,是指通過軟件所有可能路徑的數量。其中,循環中的循環(for, while, do-while)只訪問一次。

因此,NPATH也給出了達到路徑覆蓋所需的測試用例的最大數量。而圈復雜度給出了測試用例的最小數量。

如下圖,對應的圈復雜度和NPATH分別為2和4。NPATH建議限制在80個以內

55b5f474-73a0-11ee-939d-92fbcf53809c.png

6

每個函數的嵌套級別

嵌套級別用來描述函數之間調用的深度層次。

當引入控制結構(if, while…)時,就會發生嵌套,每將控制結構放置在其他控制結構內部一次,嵌套級別就會增加一次。

以下為一個嵌套級別為2的代碼段示意。

if(a < K) {

if(b > L) {

function);

}

}

嵌套級別建議不超過4。

7

調用圖遞歸

調用圖是軟件工程中用于表示函數調用關系的有向圖,它顯示了哪個函數調用了哪個函數。

調用圖內部的遞歸是一個函數直接或間接(通過至少一個其他函數)再次調用自身的模式。

遞歸是一種很好的編程技巧,但在嵌入式中有一些缺點。

要想停止遞歸時,必須有一個結束條件,否則,遞歸將導致應用程序崩潰,但是,無論是直接遞歸還是間接遞歸,確定結束條件并不容易。

此外,由于遞歸算法需要更多的函數調用和堆棧操作,其使用會造成性能阻塞、可讀性差或堆棧溢出等問題。

一般不建議使用遞歸

8

不同函數的調用次數

更多的函數調用必然帶來更大的復雜性,整體最好不超過7次

9

參數數量

參數的數量是函數復雜性和接口復雜性的另一個指標。存在的參數越多,就越容易在調用函數時出錯,比如,參數順序錯誤。

如果函數參數超過了5個,可以試著把函數分成使用較少參數的邏輯部分。

10

goto語句

goto語句可以使程序直接跳轉到同一函數中的預定義位置。

goto是一個很有爭議的語句。在處理錯誤或跳出多層循環時,有很直接的效果,但非邏輯性的跳轉會讓代碼很難理解、出了錯誤也很難追蹤。

所以,通常強烈建議不要使用goto語句

11

注釋密度

除了從語句結構上降低外,代碼復雜度還有一種應對方式是代碼注釋。

函數功能的文本化描述就是注釋,這顯然有助于理解代碼。特別地,代碼已經長時間沒有被修改,或者代碼必須由原始編寫人分析或修改時,這些注釋更加有用。

一種算法是,注釋密度是指第一個語句之后找到的注釋數量與語句數量之間的比率,20%是一個可參考的下限。

審核編輯:黃飛

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

    關注

    5086

    文章

    19140

    瀏覽量

    305862
  • 函數
    +關注

    關注

    3

    文章

    4333

    瀏覽量

    62708

原文標題:評價ASIL D軟件代碼的11個指標

文章出處:【微信號:eng2mot,微信公眾號:汽車ECU開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式系統開發實踐經驗分享

    工程師一刻也沒忘記交付能同時滿足質量、時間安排和預算目標的項目的需求。一個事半功倍的方法 就是借鑒嵌入式系統開發人員社區多年來累計的經驗教訓。下面我們就來了解一些為嵌入式開發帶來了最佳
    發表于 12-14 11:39 ?2456次閱讀
    <b class='flag-5'>嵌入式</b>系統<b class='flag-5'>開發</b>實踐<b class='flag-5'>經驗</b>分享

    如何從零開始開發一款嵌入式產品(20 年的嵌入式經驗

    如何從零開始開發一款嵌入式產品(20 年的嵌入式經驗) 高級工程師的經驗之談,個人覺得非常好,借
    發表于 05-07 11:43

    如何從零開始開發一款嵌入式產品(20 年的嵌入式經驗

    如何從零開始開發一款嵌入式產品(20 年的嵌入式經驗) 高級工程師的經驗之談,個人覺得非常好,借
    發表于 05-07 11:45

    嵌入式開發調試經驗分享

    嵌入式開發過程中的一點調試經驗嵌入式開發最麻煩的在現場調試過程中或實際運營過程中出現問題很難定位。我在實際開發過程中一點經驗分享給大家
    發表于 11-05 08:15

    Linux嵌入式產品開發有哪些注意事項

    應用層開發嵌入式產品,并會逐漸向底層學習。本系列文章所有內容均為個人開發過程中逐漸累積的經驗之談,如有問題,歡迎路過大神指出,共同學習。 本
    發表于 12-17 07:25

    嵌入式系統開發學習心得體會_經驗總結

    本文主要介紹的是嵌入式系統開發學習心得體會及經驗總結,首先介紹了嵌入式系統開發的三大關鍵點,其次推薦了
    的頭像 發表于 05-18 10:24 ?3.1w次閱讀

    嵌入式開發產品有哪些_嵌入式開發的流程

    本文主要闡述了嵌入式開發產品,其次介紹了嵌入式開發的流程。
    發表于 08-31 15:38 ?1.1w次閱讀

    嵌入式產品開發不同階段的解析

    嵌入式 產品,與普通 電子產品 一樣,開發過程都需要遵循一些基本的流程,都是一個從需求分析到總體設計,詳細設計到最后產品完成的過程。 ? 但
    的頭像 發表于 10-30 11:00 ?501次閱讀

    嵌入式產品開發有哪些不同的階段

    嵌入式產品,與普通電子產品一樣,開發過程都需要遵循一些基本的流程,都是一個從需求分析到總體設計,詳細設計到最后產品完成的過程。但是,與普通電
    發表于 12-25 11:44 ?20次下載

    嵌入式開發(一):嵌入式開發新手入門

    本篇文章整理下嵌入式開發中一些入門的基礎技能,都是根據以往的工程經驗整理,適用于之前沒做過嵌入式開發的新手。嵌入式開發流程一般如下,一般是在PC機的Windows系統下安裝Ubuntu
    發表于 10-14 10:58 ?79次下載
    <b class='flag-5'>嵌入式開發</b>(一):<b class='flag-5'>嵌入式開發</b>新手入門

    嵌入式開發資料免費分享

    嵌入式開發資料免費分享嵌入式工程師經驗分享:如何學習嵌入式開發截取文檔部分學習嵌入式工程師經驗
    發表于 10-21 11:07 ?47次下載
    <b class='flag-5'>嵌入式開發</b>資料免費分享

    視頻教程-嵌入式Linux開發基礎-嵌入式

    嵌入式Linux開發基礎 嵌入式工程師、嵌入式講師、10多年
    發表于 11-02 13:21 ?30次下載
    視頻教程-<b class='flag-5'>嵌入式</b>Linux<b class='flag-5'>開發</b>基礎-<b class='flag-5'>嵌入式</b>

    新手怎么學習嵌入式開發嵌入式培訓怎么學?

    掌握哪些技能呢?市場上需要的嵌入式人才必須具備C語言編程經驗嵌入式操作系統(嵌入式Linux)經驗、內核裁剪
    發表于 11-03 09:21 ?17次下載
    新手怎么學習<b class='flag-5'>嵌入式開發</b>?<b class='flag-5'>嵌入式</b>培訓怎么學?

    藍橋杯嵌入式開發學習索引

    聯系方式作者:馬一飛QQ:791729359 藍橋杯嵌入式開發學習目錄藍橋杯嵌入式開發經驗分享(1.
    發表于 11-03 10:36 ?20次下載
    藍橋杯<b class='flag-5'>嵌入式開發</b>學習索引

    嵌入式產品開發流程

    嵌入式產品,與普通電子產品一樣,開發過程都需要遵循一些基本的流程,都是一個從需求分析到總體設計,詳細設計到最后產品完成的過程。但是,與普通電
    發表于 11-04 10:06 ?36次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>產品</b><b class='flag-5'>開發</b>流程
    主站蜘蛛池模板: 尤蜜网站在线进入免费| 青柠在线观看视频在线| 色戒床震视频片段| 国产成人无码精品久久久按摩| 午夜精品久久久内射近拍高清 | 日日啪无需播放器| 国产又色又爽又刺激在线播放| 伊人久99久女女视频精品免| 成人国产亚洲精品A区天堂蜜臀| 巨胸美女狂喷奶水www网麻豆| 亚洲国产成人精品无码区99| 夫外出被公侵犯日本电影| 亚洲 欧洲 国产 日产 综合| 高h全肉图| 亚洲一区免费香蕉在线| 内射少妇36P亚洲区| 找老女人泻火对白自拍| 久九九精品免费视频| 99久久re6热精品首页| 美女胸禁止18以下看| 在线观看黄色小说| 久久这里只有精品国产99| xfplay 无码专区 亚洲| 奇米狠狠一区二区三区| 国产精品7777人妻精品冫| 一品道门在线视频| 人与禽交3d动漫羞羞动漫| 99久久精品费精品国产一区二| 日本精品久久久久中文字幕 1| 精品国产成人a区在线观看| vivoe另类| 伊人久久大香线蕉资源| 丝瓜视频樱桃视频在线观看免费| 老头狠狠挺进小莹体内视频| 国产精品久久久久久久久齐齐| 69成人免费视频| 亚洲国产精品无码中文字满| 奇米色偷偷| 辣文肉高h粗暴| 国产一区二区精品视频| 赤兔CHINESE最新男18GUY|