chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于嵌入式ASIL D產(chǎn)品的開(kāi)發(fā)經(jīng)驗(yàn)

汽車(chē)ECU開(kāi)發(fā) ? 來(lái)源:汽車(chē)ECU開(kāi)發(fā) ? 2023-11-21 16:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

軟件開(kāi)發(fā)始于需求卻不能終于需求,我們?cè)跐M足需求的同時(shí),還需要考慮代碼本身的質(zhì)量,包括可讀性、可維護(hù)性、可擴(kuò)展性、可移植性、安全性、高效性等。

上一篇文章《汽車(chē)軟件單元測(cè)試的要點(diǎn)與意義》提到了諸如靜態(tài)分析與覆蓋度測(cè)試的一些代碼評(píng)價(jià)手段,這一篇講一些具體指標(biāo)。

這些指標(biāo)主要來(lái)自于ASIL D軟件的實(shí)踐經(jīng)驗(yàn)。

1

每個(gè)函數(shù)的語(yǔ)句數(shù)

該指標(biāo)是指函數(shù)內(nèi)部語(yǔ)句的個(gè)數(shù),是一種基礎(chǔ)的代碼復(fù)雜度度量方式。在多數(shù)語(yǔ)言中,我們可以使用工具自動(dòng)計(jì)算語(yǔ)句個(gè)數(shù)。

常見(jiàn)語(yǔ)句包含以下類(lèi)型:

以分號(hào)(;)結(jié)尾的簡(jiǎn)單語(yǔ)句

  • if語(yǔ)句
  • for語(yǔ)句
  • while語(yǔ)句
  • do語(yǔ)句
  • switch語(yǔ)句
  • break語(yǔ)句
  • continue語(yǔ)句
  • return語(yǔ)句
  • goto語(yǔ)句

語(yǔ)句個(gè)數(shù)應(yīng)盡量維持在10~20,最多不要超過(guò)50。

2

return語(yǔ)句的數(shù)量

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

出口點(diǎn)通常是return語(yǔ)句,所以我們也建議盡量減少其數(shù)量,比如,一個(gè)函數(shù)的return維持在1~2個(gè)之內(nèi)。

3

代碼行長(zhǎng)度

寫(xiě)文章要短句,是為了便于閱讀。代碼也是一樣,太長(zhǎng)的代碼行會(huì)明顯增加閱讀代碼的難度,很現(xiàn)實(shí)的問(wèn)題是,需要開(kāi)發(fā)人員左右滾動(dòng)屏幕

在保證合理的邏輯、換行和縮進(jìn)的前提下,要盡可能將長(zhǎng)代碼拆分。通常,低于160個(gè)字符的代碼行可以認(rèn)為是一個(gè)合理目標(biāo)。

4

圈復(fù)雜度

圈復(fù)雜度是指通過(guò)源代碼線性獨(dú)立路徑的個(gè)數(shù),也是用來(lái)衡量代碼復(fù)雜度。

如何計(jì)算呢?我們可以通過(guò)以下3個(gè)代碼控制流圖來(lái)看。

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

一種計(jì)算公式為,圈復(fù)雜度M=控制流圖邊數(shù)E-節(jié)點(diǎn)N+2

故,

圖1:M=1-2+2=1,即無(wú)判定節(jié)點(diǎn),圈復(fù)雜度為1。

圖2:M=4-4+2=2,即一個(gè)判定節(jié)點(diǎn),圈復(fù)雜度為2。

圖3:M=7-6+2=3,即兩個(gè)判定節(jié)點(diǎn),圈復(fù)雜度為3。

除了評(píng)價(jià)本身代碼判定邏輯的復(fù)雜性之外,圈復(fù)雜度還能夠用來(lái)確定最少需要多少個(gè)測(cè)試用例來(lái)滿足分支和路徑的覆蓋度。

一般經(jīng)驗(yàn)是,圈復(fù)雜度應(yīng)小于10,以達(dá)到較好的可測(cè)性。

5

非循環(huán)路徑數(shù)

這個(gè)指標(biāo)也被稱(chēng)為NPATH,是指通過(guò)軟件所有可能路徑的數(shù)量。其中,循環(huán)中的循環(huán)(for, while, do-while)只訪問(wèn)一次。

因此,NPATH也給出了達(dá)到路徑覆蓋所需的測(cè)試用例的最大數(shù)量。而圈復(fù)雜度給出了測(cè)試用例的最小數(shù)量。

如下圖,對(duì)應(yīng)的圈復(fù)雜度和NPATH分別為2和4。NPATH建議限制在80個(gè)以內(nèi)

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

6

每個(gè)函數(shù)的嵌套級(jí)別

嵌套級(jí)別用來(lái)描述函數(shù)之間調(diào)用的深度層次。

當(dāng)引入控制結(jié)構(gòu)(if, while…)時(shí),就會(huì)發(fā)生嵌套,每將控制結(jié)構(gòu)放置在其他控制結(jié)構(gòu)內(nèi)部一次,嵌套級(jí)別就會(huì)增加一次。

以下為一個(gè)嵌套級(jí)別為2的代碼段示意。

if(a < K) {

if(b > L) {

function);

}

}

嵌套級(jí)別建議不超過(guò)4。

7

調(diào)用圖遞歸

調(diào)用圖是軟件工程中用于表示函數(shù)調(diào)用關(guān)系的有向圖,它顯示了哪個(gè)函數(shù)調(diào)用了哪個(gè)函數(shù)。

調(diào)用圖內(nèi)部的遞歸是一個(gè)函數(shù)直接或間接(通過(guò)至少一個(gè)其他函數(shù))再次調(diào)用自身的模式。

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

要想停止遞歸時(shí),必須有一個(gè)結(jié)束條件,否則,遞歸將導(dǎo)致應(yīng)用程序崩潰,但是,無(wú)論是直接遞歸還是間接遞歸,確定結(jié)束條件并不容易。

此外,由于遞歸算法需要更多的函數(shù)調(diào)用和堆棧操作,其使用會(huì)造成性能阻塞、可讀性差或堆棧溢出等問(wèn)題。

一般不建議使用遞歸。

8

不同函數(shù)的調(diào)用次數(shù)

更多的函數(shù)調(diào)用必然帶來(lái)更大的復(fù)雜性,整體最好不超過(guò)7次

9

參數(shù)數(shù)量

參數(shù)的數(shù)量是函數(shù)復(fù)雜性和接口復(fù)雜性的另一個(gè)指標(biāo)。存在的參數(shù)越多,就越容易在調(diào)用函數(shù)時(shí)出錯(cuò),比如,參數(shù)順序錯(cuò)誤。

如果函數(shù)參數(shù)超過(guò)了5個(gè),可以試著把函數(shù)分成使用較少參數(shù)的邏輯部分。

10

goto語(yǔ)句

goto語(yǔ)句可以使程序直接跳轉(zhuǎn)到同一函數(shù)中的預(yù)定義位置。

goto是一個(gè)很有爭(zhēng)議的語(yǔ)句。在處理錯(cuò)誤或跳出多層循環(huán)時(shí),有很直接的效果,但非邏輯性的跳轉(zhuǎn)會(huì)讓代碼很難理解、出了錯(cuò)誤也很難追蹤。

所以,通常強(qiáng)烈建議不要使用goto語(yǔ)句

11

注釋密度

除了從語(yǔ)句結(jié)構(gòu)上降低外,代碼復(fù)雜度還有一種應(yīng)對(duì)方式是代碼注釋。

函數(shù)功能的文本化描述就是注釋?zhuān)@顯然有助于理解代碼。特別地,代碼已經(jīng)長(zhǎng)時(shí)間沒(méi)有被修改,或者代碼必須由原始編寫(xiě)人分析或修改時(shí),這些注釋更加有用。

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

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5200

    文章

    20472

    瀏覽量

    334439
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67568

原文標(biāo)題:評(píng)價(jià)ASIL D軟件代碼的11個(gè)指標(biāo)

文章出處:【微信號(hào):eng2mot,微信公眾號(hào):汽車(chē)ECU開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    嵌入式系統(tǒng)開(kāi)發(fā)實(shí)踐經(jīng)驗(yàn)分享

    工程師一刻也沒(méi)忘記交付能同時(shí)滿足質(zhì)量、時(shí)間安排和預(yù)算目標(biāo)的項(xiàng)目的需求。一個(gè)事半功倍的方法 就是借鑒嵌入式系統(tǒng)開(kāi)發(fā)人員社區(qū)多年來(lái)累計(jì)的經(jīng)驗(yàn)教訓(xùn)。下面我們就來(lái)了解一些為嵌入式開(kāi)發(fā)帶來(lái)了最佳
    發(fā)表于 12-14 11:39 ?3145次閱讀
    <b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>開(kāi)發(fā)</b>實(shí)踐<b class='flag-5'>經(jīng)驗(yàn)</b>分享

    如何從零開(kāi)始開(kāi)發(fā)一款嵌入式產(chǎn)品(20 年的嵌入式經(jīng)驗(yàn)

    如何從零開(kāi)始開(kāi)發(fā)一款嵌入式產(chǎn)品(20 年的嵌入式經(jīng)驗(yàn)) 高級(jí)工程師的經(jīng)驗(yàn)之談,個(gè)人覺(jué)得非常好,借
    發(fā)表于 05-07 11:43

    如何從零開(kāi)始開(kāi)發(fā)一款嵌入式產(chǎn)品(20 年的嵌入式經(jīng)驗(yàn)

    如何從零開(kāi)始開(kāi)發(fā)一款嵌入式產(chǎn)品(20 年的嵌入式經(jīng)驗(yàn)) 高級(jí)工程師的經(jīng)驗(yàn)之談,個(gè)人覺(jué)得非常好,借
    發(fā)表于 05-07 11:45

    嵌入式開(kāi)發(fā)調(diào)試經(jīng)驗(yàn)分享

    嵌入式開(kāi)發(fā)過(guò)程中的一點(diǎn)調(diào)試經(jīng)驗(yàn)嵌入式開(kāi)發(fā)最麻煩的在現(xiàn)場(chǎng)調(diào)試過(guò)程中或?qū)嶋H運(yùn)營(yíng)過(guò)程中出現(xiàn)問(wèn)題很難定位。我在實(shí)際開(kāi)發(fā)過(guò)程中一點(diǎn)經(jīng)驗(yàn)分享給大家
    發(fā)表于 11-05 08:15

    Linux嵌入式產(chǎn)品開(kāi)發(fā)有哪些注意事項(xiàng)

    應(yīng)用層開(kāi)發(fā)嵌入式產(chǎn)品,并會(huì)逐漸向底層學(xué)習(xí)。本系列文章所有內(nèi)容均為個(gè)人開(kāi)發(fā)過(guò)程中逐漸累積的經(jīng)驗(yàn)之談,如有問(wèn)題,歡迎路過(guò)大神指出,共同學(xué)習(xí)。 本
    發(fā)表于 12-17 07:25

    嵌入式系統(tǒng)開(kāi)發(fā)學(xué)習(xí)心得體會(huì)_經(jīng)驗(yàn)總結(jié)

    本文主要介紹的是嵌入式系統(tǒng)開(kāi)發(fā)學(xué)習(xí)心得體會(huì)及經(jīng)驗(yàn)總結(jié),首先介紹了嵌入式系統(tǒng)開(kāi)發(fā)的三大關(guān)鍵點(diǎn),其次推薦了
    的頭像 發(fā)表于 05-18 10:24 ?3.3w次閱讀

    嵌入式開(kāi)發(fā)產(chǎn)品有哪些_嵌入式開(kāi)發(fā)的流程

    本文主要闡述了嵌入式開(kāi)發(fā)產(chǎn)品,其次介紹了嵌入式開(kāi)發(fā)的流程。
    發(fā)表于 08-31 15:38 ?1.2w次閱讀

    嵌入式產(chǎn)品開(kāi)發(fā)不同階段的解析

    嵌入式 產(chǎn)品,與普通 電子產(chǎn)品 一樣,開(kāi)發(fā)過(guò)程都需要遵循一些基本的流程,都是一個(gè)從需求分析到總體設(shè)計(jì),詳細(xì)設(shè)計(jì)到最后產(chǎn)品完成的過(guò)程。 ? 但
    的頭像 發(fā)表于 10-30 11:00 ?1181次閱讀

    嵌入式產(chǎn)品開(kāi)發(fā)有哪些不同的階段

    嵌入式產(chǎn)品,與普通電子產(chǎn)品一樣,開(kāi)發(fā)過(guò)程都需要遵循一些基本的流程,都是一個(gè)從需求分析到總體設(shè)計(jì),詳細(xì)設(shè)計(jì)到最后產(chǎn)品完成的過(guò)程。但是,與普通電
    發(fā)表于 12-25 11:44 ?20次下載

    嵌入式開(kāi)發(fā)(一):嵌入式開(kāi)發(fā)新手入門(mén)

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

    嵌入式開(kāi)發(fā)資料免費(fèi)分享

    嵌入式開(kāi)發(fā)資料免費(fèi)分享嵌入式工程師經(jīng)驗(yàn)分享:如何學(xué)習(xí)嵌入式開(kāi)發(fā)截取文檔部分學(xué)習(xí)嵌入式工程師經(jīng)驗(yàn)
    發(fā)表于 10-21 11:07 ?47次下載
    <b class='flag-5'>嵌入式開(kāi)發(fā)</b>資料免費(fèi)分享

    視頻教程-嵌入式Linux開(kāi)發(fā)基礎(chǔ)-嵌入式

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

    新手怎么學(xué)習(xí)嵌入式開(kāi)發(fā)?嵌入式培訓(xùn)怎么學(xué)?

    掌握哪些技能呢?市場(chǎng)上需要的嵌入式人才必須具備C語(yǔ)言編程經(jīng)驗(yàn)、嵌入式操作系統(tǒng)(嵌入式Linux)經(jīng)驗(yàn)、內(nèi)核裁剪
    發(fā)表于 11-03 09:21 ?17次下載
    新手怎么學(xué)習(xí)<b class='flag-5'>嵌入式開(kāi)發(fā)</b>?<b class='flag-5'>嵌入式</b>培訓(xùn)怎么學(xué)?

    藍(lán)橋杯嵌入式開(kāi)發(fā)學(xué)習(xí)索引

    聯(lián)系方式作者:馬一飛QQ:791729359 藍(lán)橋杯嵌入式開(kāi)發(fā)學(xué)習(xí)目錄藍(lán)橋杯嵌入式開(kāi)發(fā)經(jīng)驗(yàn)分享(1.
    發(fā)表于 11-03 10:36 ?20次下載
    藍(lán)橋杯<b class='flag-5'>嵌入式開(kāi)發(fā)</b>學(xué)習(xí)索引

    嵌入式產(chǎn)品開(kāi)發(fā)流程

    嵌入式產(chǎn)品,與普通電子產(chǎn)品一樣,開(kāi)發(fā)過(guò)程都需要遵循一些基本的流程,都是一個(gè)從需求分析到總體設(shè)計(jì),詳細(xì)設(shè)計(jì)到最后產(chǎn)品完成的過(guò)程。但是,與普通電
    發(fā)表于 11-04 10:06 ?36次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>產(chǎn)品</b><b class='flag-5'>開(kāi)發(fā)</b>流程