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

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

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

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

代碼結(jié)構(gòu)分析

嵌入式大雜燴 ? 2023-05-12 22:23 ? 次閱讀

1 代碼結(jié)構(gòu)分析概述

在編寫代碼時,要求要結(jié)構(gòu)清晰、接口簡單。如果代碼結(jié)構(gòu)過于復(fù)雜,會帶來很多問題:代碼很難被理解,不方便編寫測試用例,容易隱藏錯誤,出現(xiàn)問題難以定位,修改代碼容易產(chǎn)生新的Bug等等。因此,需要有一些指標(biāo)來評估代碼的復(fù)雜度,以方便對過于復(fù)雜的代碼進行重構(gòu)。

代碼的復(fù)雜度通常可通過以下幾個指標(biāo)來評估:

  • 總行數(shù):包括注釋以及空行在內(nèi)的代碼行數(shù);
  • 語句數(shù)目:有效的語句行數(shù),包括#include、#define、#undef 這三個預(yù)處理命令在內(nèi),括號不包含在內(nèi);
  • 分支語句比例:分支語句占總語句數(shù)目的比例;
  • 注釋比例:注釋占總行數(shù)的比例;
  • 函數(shù)數(shù)目:函數(shù)的數(shù)量;
  • 平均每個函數(shù)的語句數(shù);
  • 函數(shù)圈復(fù)雜度;
  • 函數(shù)最大嵌套層數(shù);
  • 類的數(shù)量;
  • 平均每個類的函數(shù)數(shù)量。

2 基于的SourceMonitor代碼結(jié)構(gòu)檢查

當(dāng)前能夠進行代碼結(jié)構(gòu)檢查的工具有不少,本文中選擇 SourceMonitor 作為代碼結(jié)構(gòu)檢查工具。

2.1 SourceMonitor簡介

官網(wǎng)地址:https://www.derpaul.net/SourceMonitor/

SourceMonitor 是 Campwood Software LLC 擁有版權(quán)的自由軟件,非商業(yè)用途可免費使用。

SourceMonitor的主要功能是對代碼的一個分析和度量。即使用SourceMonitor軟件我們可以清晰的看到代碼的總行數(shù),注釋比例,語句數(shù)以及類的個數(shù)和函數(shù)的個數(shù)。

SourceMonitor 有以下特點:

  • 支持對 C、 C++C#、 VB.NET、 java、 Delphi、 Visual Basic 以及 HTML 在內(nèi)的多種語言的源代碼的分析;
  • 效率高,每秒鐘能夠分析 10000 行以上的代碼;
  • 可以修改各個度量指標(biāo)的閾值。

2.2 C語言度量值(C Metrics)

下面以C語言度量值為例,看看SourceMonitor都給我們反饋了哪些信息

總行數(shù)(Lines) :包括空行在內(nèi)的代碼行數(shù);

語句數(shù)目(Statements) :在C語言中,語句是以分號結(jié)尾的。分支語句if,循環(huán)語句for、while,跳轉(zhuǎn)語句goto都被計算在內(nèi),預(yù)處理語句#include、#define和#undef也被計算在內(nèi),對其他的預(yù)處理語句則不作計算,在#else和#endif、#elif和#endif之間的語句將被忽略;

分支語句比例(Percent Branch Statements) :該值表示分支語句占語句數(shù)目的比例,這里的“分支語句”指的是使程序不順序執(zhí)行的語句,包括if、else、for、while和switch;

注釋比例(Percent Lines with Comments) :該值指示注釋行(包括/……/和//……形式的注釋)占總行數(shù)的比例;

函數(shù)數(shù)目(Functions) :指示函數(shù)的數(shù)量;

平均每個函數(shù)包含的語句數(shù)目(Average Statements per Function) :總的函數(shù)語句數(shù)目除以函數(shù)數(shù)目得到該值;

函數(shù)圈復(fù)雜度(Function Complexity) :圈復(fù)雜度指示一個函數(shù)可執(zhí)行路徑的數(shù)目,以下語句為圈復(fù)雜度的值貢獻1:if/else/for/while語句,三元運算符語句,if/for/while判斷條件中的"&&"或“||”,switch語句,后接break/goto/ return/throw/continue語句的case語句,catch/except語句;

函數(shù)深度(Block Depth) :函數(shù)深度指示函數(shù)中分支嵌套的層數(shù)。

對其他語言,SourceMonitor輸出不同的度量值,例如在C++度量值中包括類的數(shù)目(Classes),在HTML中包括各個標(biāo)簽的數(shù)目(HTML Tags)、超鏈接數(shù)目(Hyperlinks)等。

2.2.1 SourceMonitor使用指南

首先在SourceMonitor官網(wǎng)下載SourceMonitor安裝包后,雙擊安裝包,按向?qū)нM行安裝即可,這里就不再贅述了。

打開 SourceMonitor,選擇菜單“File→New Project”新建項目。

1683896863274x0e51xaemr

彈出如下圖所示的語言選擇對話框,選擇源文件的語言以及需要掃描的文件類型,SourceMonitor 對自動掃描對應(yīng)的源文件進行分析。 閏年判斷函數(shù)是使用 C 語言編寫的, 所以選擇 C 語言,掃描的文件類型指定.c 和.h,然后點擊下一步繼續(xù)。

1683896863625x4cudrx9f6

在接下來彈出的如下圖所示的對話框中,設(shè)置項目的名稱和保存路徑,并點擊下一步繼續(xù)。

1683896863956pnviqdnwl8

在接下來彈出的如下圖所示的對話框中,填入源文件所在的目錄,并點擊下一步繼續(xù)。

1683896864256fw9xsupj66

設(shè)置源代碼目錄后,后面所有設(shè)置都采用默認(rèn)設(shè)置即可,一直點擊下一步直到完成。

1683896864553st636cvelz

在新建項目完成后,系統(tǒng)會自動創(chuàng)建一個檢查點,可以手動修改檢查點的名稱和需要檢查的文件列表。修改完畢后,點擊OK 按鈕檢查點的創(chuàng)建,詳見下圖。

16838968648687qkxr1nmsr

2.2.2 分析代碼結(jié)構(gòu)

新建項目并創(chuàng)建檢查點后,接下來就可以進行代碼結(jié)構(gòu)分析了。在檢查列表中列出了當(dāng)前已經(jīng)創(chuàng)建的所有的檢查點,詳見下圖。

1683896865163qdr2hjoy1y

針對每個檢查點,SourceMonitor 給出了每個度量指標(biāo)的具體的值,可以通過左右劃動滾動條進行查看。

如果需要查看某個檢查點是否有指標(biāo)超標(biāo),可右擊對應(yīng)的檢查點,然后在右鍵菜單中選擇“Display CheckPoint Metrics Kiviat Graph”,詳見下圖。

1683896865549bh9oq9cg1a

打開的指標(biāo)度量圖標(biāo)詳見下圖。

1683896865926y2lwfh3n5c

從指標(biāo)度量圖表中可以看出,每個指標(biāo)都有下限和上限值。 在實際應(yīng)用中,要求注釋比例和平均每個函數(shù)的代碼數(shù)必須在下限和上限指示的范圍內(nèi),而其他的指標(biāo)則要求不能超出上限,否則代碼就需要重構(gòu)。

若從指標(biāo)度量圖中發(fā)現(xiàn)某項指標(biāo)不合格,則可雙擊對應(yīng)的檢查點打開文件列表。在打開的文件列表中,可以通過點擊表頭改變排序方式以快速找到指標(biāo)不合格的文件。如下圖所示為按文件名升序進行排序。

1683896866253puyfbt8cbp

找到指標(biāo)不合格的文件,單擊鼠標(biāo)右鍵,然后在右鍵菜單中選擇“Display Function Metrics”打開函數(shù)列表,詳見下圖。

1683896866572omzzv0yp7w

同樣在打開的函數(shù)列表中,可以通過點擊表頭改變排序方式以快速找到指標(biāo)不合格的函數(shù),然后就可以對對應(yīng)的函數(shù)進行重構(gòu)。如下圖所示為按照函數(shù)名稱升進行排序。

16838968669299hf5qjmneu

2.2.3 修改指標(biāo)閾值

在有些時候,開發(fā)者可能并不希望使用系統(tǒng)默認(rèn)的指標(biāo)閾值,而是希望能夠自定義指標(biāo)閾值。 SourceMonitor 支持對各個指標(biāo)的閾值進行自定義,這樣使用時就會更加靈活。選擇菜單“File→Option”,打開選項設(shè)置對話框。

168389686722171aelv6yqi

如果需要修改對應(yīng)語言的閾值,可以選中對應(yīng)的選項卡進行修改即可。詳見下圖。

1683896867517f8qnmokssl

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

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
收藏 人收藏

    評論

    相關(guān)推薦

    llama.cpp代碼結(jié)構(gòu)&調(diào)用流程分析

    llama.cpp 的代碼結(jié)構(gòu)比較直觀,如下所示,為整體代碼結(jié)構(gòu)中的比較核心的部分的代碼結(jié)構(gòu)
    的頭像 發(fā)表于 11-07 09:23 ?2228次閱讀
    llama.cpp<b class='flag-5'>代碼</b><b class='flag-5'>結(jié)構(gòu)</b>&amp;調(diào)用流程<b class='flag-5'>分析</b>

    【跑通HarmonyOS智能家居模塊模塊】lingxin-yuhe Codelab第二期記錄帖

    Ability(JS)】新建一個工程。4、大體看一下代碼結(jié)構(gòu)分析一下。Tools選擇運行模擬器。5、運行出來的如圖所示。
    發(fā)表于 04-17 08:05

    LINUX 進程源代碼分析

    LINUX 進程源代碼分析 task_struct 數(shù)據(jù)結(jié)構(gòu)表示進程的數(shù)據(jù)結(jié)構(gòu)是struct task_struct。task_struct 結(jié)構(gòu)
    發(fā)表于 02-09 15:13 ?16次下載

    如何看懂源代碼--(分析代碼方法)

    如何看懂源代碼--(分析代碼方法) ________________________________________我們在寫程式時,有不少時間都是在看別人的代碼。 例如看小組的
    發(fā)表于 02-10 14:40 ?51次下載

    靜態(tài)代碼分析

    Fortify的靜態(tài)代碼分析器(Static Code Analyzer,SCA)是組成Fortify 360的三個分析器之一。SCA工作在開發(fā)階段,以用于分析應(yīng)用程序的源
    發(fā)表于 04-07 20:32 ?22次下載

    Hypertable底層存儲結(jié)構(gòu)分析

    通過分析Hypertable 的源代碼,描述了CellStore 存儲結(jié)構(gòu),介紹其讀寫流程,總結(jié)了該結(jié)構(gòu)存在的缺陷,并提出了優(yōu)化思路。優(yōu)化步驟主要包括:將關(guān)鍵字?jǐn)?shù)據(jù)進行合并,建立關(guān)鍵字
    發(fā)表于 05-12 16:37 ?27次下載
    Hypertable底層存儲<b class='flag-5'>結(jié)構(gòu)</b><b class='flag-5'>分析</b>

    FatFS源代碼閱讀分析

    FatFS 文件系統(tǒng)的源代碼閱讀分析解釋
    發(fā)表于 10-29 17:13 ?0次下載

    德國mk代碼分析

    德國mk代碼分析德國mk代碼分析德國mk代碼分析
    發(fā)表于 01-15 17:03 ?9次下載

    ARM單片機教程(HAYDEN Luo bios總體結(jié)構(gòu)及源代碼分析

    ARM單片機教程(HAYDEN Luo bios總體結(jié)構(gòu)及源代碼分析)文檔免費下載,由于 Hayden Luo Bios 的結(jié)構(gòu)特殊性,雖然是縮減,卻絲毫沒有改動 bios 的大
    發(fā)表于 10-27 15:50 ?12次下載
    ARM單片機教程(HAYDEN Luo bios總體<b class='flag-5'>結(jié)構(gòu)</b>及源<b class='flag-5'>代碼</b><b class='flag-5'>分析</b>)

    Java異常的習(xí)題和代碼分析

    Java異常的習(xí)題和代碼分析
    發(fā)表于 07-08 14:54 ?5次下載
    Java異常的習(xí)題和<b class='flag-5'>代碼</b><b class='flag-5'>分析</b>

    linux內(nèi)核源代碼分析:進程的task_struct 結(jié)構(gòu)資料下載

    電子發(fā)燒友網(wǎng)為你提供linux內(nèi)核源代碼分析:進程的task_struct 結(jié)構(gòu)資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計、用戶指南、
    發(fā)表于 04-03 08:45 ?12次下載
    linux內(nèi)核源<b class='flag-5'>代碼</b><b class='flag-5'>分析</b>:進程的task_struct <b class='flag-5'>結(jié)構(gòu)</b>資料下載

    MATLAB代碼和例子分析

    MATLAB代碼和例子分析
    發(fā)表于 05-27 09:44 ?0次下載

    什么是靜態(tài)代碼分析?靜態(tài)代碼分析概述

    靜態(tài)分析可幫助面臨壓力的開發(fā)團隊。高質(zhì)量的版本需要按時交付。需要滿足編碼和合規(guī)性標(biāo)準(zhǔn)。錯誤不是一種選擇。 這就是開發(fā)團隊使用靜態(tài)分析工具/源代碼分析工具的原因。在這里,我們將討論靜態(tài)
    的頭像 發(fā)表于 07-19 12:09 ?1567次閱讀
    什么是靜態(tài)<b class='flag-5'>代碼</b><b class='flag-5'>分析</b>?靜態(tài)<b class='flag-5'>代碼</b><b class='flag-5'>分析</b>概述

    瑞數(shù)的代碼結(jié)構(gòu)及逆向分析

    上述文章中,詳細(xì)介紹了瑞數(shù)的特征、如何區(qū)分不同版本、瑞數(shù)的代碼結(jié)構(gòu)以及各自的作用,本文就不再贅述了,不了解的同志可以先去看看之前的文章。 逆向目標(biāo) 目標(biāo):瑞數(shù) 6 代 網(wǎng)站
    的頭像 發(fā)表于 11-02 11:08 ?1942次閱讀
    瑞數(shù)的<b class='flag-5'>代碼</b><b class='flag-5'>結(jié)構(gòu)</b>及逆向<b class='flag-5'>分析</b>

    【鴻蒙】OpenHarmony 4.0藍牙代碼結(jié)構(gòu)簡析

    OpenHarmony 4.0藍牙代碼結(jié)構(gòu)簡析前言 OpenHarmony 4.0上藍牙倉和目錄結(jié)構(gòu)進行一次較大整改,本文基于4.0以上版本對藍牙代碼進行
    的頭像 發(fā)表于 02-26 16:08 ?1535次閱讀
    【鴻蒙】OpenHarmony 4.0藍牙<b class='flag-5'>代碼</b><b class='flag-5'>結(jié)構(gòu)</b>簡析
    主站蜘蛛池模板: 无码天堂亚洲国产AV久久| 老熟女重囗味GRANNYBBW| 伊人久久大香线蕉综合网站| 久久超碰色中文字幕| 99国产精品欲AV蜜桃臀麻豆| 日日碰狠狠躁久久躁综合网| 国产午夜亚洲精品不卡电影| 尤物yw193can入口| 日本久久网站| 红桃视频国产AV| A国产一区二区免费入口| 天美传媒MV高清免费看| 久久re热线视频国产| www.av日韩| 亚洲高清视频网站| 免费果冻传媒2021视频| 国产成人高清精品免费观看| 伊人久久精品AV无码一区| 秋霞电影网午夜鲁丝片| 果冻传媒 在线播放观看| 99久久99久久久99精品齐| 天天躁日日躁狠狠躁午夜剧场| 久久久无码精品亚洲A片软件| 伧理片午夜伧理片| 亚洲欧美一区二区三区久久| 暖暖 日本 视频 在线观看免费| 国产美女视频一区二区二三区| 3a丝袜论坛| 小黄鸭YELLOWDUCK7596| 蜜柚在线观看免费高清官网视频| 国产精品久久久久影院色老大| 67194成在线观看免费| 午夜伦理伦理片在线观| 免费成年人在线视频| 国产网址在线观看| 99视频免费看| 艳鉧动漫1~6全集观看在线| 日本夜夜夜| 久久网站视频| 国产精品无码人妻99999| 99热都是精品|