在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

代碼結構分析

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

1 代碼結構分析概述

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

代碼的復雜度通常可通過以下幾個指標來評估:

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

2 基于的SourceMonitor代碼結構檢查

當前能夠進行代碼結構檢查的工具有不少,本文中選擇 SourceMonitor 作為代碼結構檢查工具。

2.1 SourceMonitor簡介

官網地址:https://www.derpaul.net/SourceMonitor/

SourceMonitor 是 Campwood Software LLC 擁有版權的自由軟件,非商業用途可免費使用。

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

SourceMonitor 有以下特點:

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

2.2 C語言度量值(C Metrics)

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

總行數(Lines) :包括空行在內的代碼行數;

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

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

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

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

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

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

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

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

2.2.1 SourceMonitor使用指南

首先在SourceMonitor官網下載SourceMonitor安裝包后,雙擊安裝包,按向導進行安裝即可,這里就不再贅述了。

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

1683896863274x0e51xaemr

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

1683896863625x4cudrx9f6

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

1683896863956pnviqdnwl8

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

1683896864256fw9xsupj66

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

1683896864553st636cvelz

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

16838968648687qkxr1nmsr

2.2.2 分析代碼結構

新建項目并創建檢查點后,接下來就可以進行代碼結構分析了。在檢查列表中列出了當前已經創建的所有的檢查點,詳見下圖。

1683896865163qdr2hjoy1y

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

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

1683896865549bh9oq9cg1a

打開的指標度量圖標詳見下圖。

1683896865926y2lwfh3n5c

從指標度量圖表中可以看出,每個指標都有下限和上限值。 在實際應用中,要求注釋比例和平均每個函數的代碼數必須在下限和上限指示的范圍內,而其他的指標則要求不能超出上限,否則代碼就需要重構。

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

1683896866253puyfbt8cbp

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

1683896866572omzzv0yp7w

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

16838968669299hf5qjmneu

2.2.3 修改指標閾值

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

168389686722171aelv6yqi

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

1683896867517f8qnmokssl

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

    關注

    30

    文章

    4788

    瀏覽量

    68603
收藏 人收藏

    評論

    相關推薦

    llama.cpp代碼結構&調用流程分析

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

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

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

    LINUX 進程源代碼分析

    LINUX 進程源代碼分析 task_struct 數據結構表示進程的數據結構是struct task_struct。task_struct 結構
    發表于 02-09 15:13 ?16次下載

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

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

    靜態代碼分析

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

    Hypertable底層存儲結構分析

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

    FatFS源代碼閱讀分析

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

    德國mk代碼分析

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

    ARM單片機教程(HAYDEN Luo bios總體結構及源代碼分析

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

    Java異常的習題和代碼分析

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

    linux內核源代碼分析:進程的task_struct 結構資料下載

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

    MATLAB代碼和例子分析

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

    什么是靜態代碼分析?靜態代碼分析概述

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

    瑞數的代碼結構及逆向分析

    上述文章中,詳細介紹了瑞數的特征、如何區分不同版本、瑞數的代碼結構以及各自的作用,本文就不再贅述了,不了解的同志可以先去看看之前的文章。 逆向目標 目標:瑞數 6 代 網站
    的頭像 發表于 11-02 11:08 ?1964次閱讀
    瑞數的<b class='flag-5'>代碼</b><b class='flag-5'>結構</b>及逆向<b class='flag-5'>分析</b>

    【鴻蒙】OpenHarmony 4.0藍牙代碼結構簡析

    OpenHarmony 4.0藍牙代碼結構簡析前言 OpenHarmony 4.0上藍牙倉和目錄結構進行一次較大整改,本文基于4.0以上版本對藍牙代碼進行
    的頭像 發表于 02-26 16:08 ?1567次閱讀
    【鴻蒙】OpenHarmony 4.0藍牙<b class='flag-5'>代碼</b><b class='flag-5'>結構</b>簡析
    主站蜘蛛池模板: 久久久久国产成人精品亚洲午夜 | 国产高清视频在线免费观看| 亚洲第一免费播放区| 2020天天操| 五月婷六月丁香| h视频免费网站| 婷婷在线综合| 高清欧美日本视频免费观看| 国产精品色片| 69美女poren 18| 色天使色婷婷丁香久久综合| www.色天使| 国产男靠女免费视频网站| 四虎精品永久在线| 97影院理论片在线观看| 欧美极品在线| 日本最好的免费影院| 午夜影院免费入口| 成人夜夜| 天堂福利视频| 国产一线在线观看| 国产老头和美女在线观看| 一本二卡三卡四卡乱码二百| 国产全肉乱妇杂乱视频| 日本xxxxx69| 日本三级香港三级人妇99视| 午夜影院404| 国产高清在线观看| 国产精品四虎| 在线一区二区观看| 免费观看a黄一级视频| 国产午夜精品久久久久九九| 婷婷亚洲五月| 天天弄天天干| 亚洲日韩色综合视频| 永久看片| 99久久国产免费中文无字幕| 国产成人在线播放视频| 一区二区高清在线观看| 久色网| 神马影院午夜dy888|