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

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

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

3天內不再提示

如何獲取應用的代碼圈復雜度做到線上監控

電子工程師 ? 來源:OSCHINA 社區 ? 作者:京東云開發者 ? 2022-08-08 15:11 ? 次閱讀

1 引言

軟件應用在發展到適當時機,” 重構”,是開發過程中不可避免需要進行的一項工作。重構代碼,以適配當前模塊設計之初未考慮到的多樣化場景,并增加模塊的可維護性、健壯性、可測試性。那么,如何明確重構的方向,以及量化重構的結果呢?代碼圈復雜度可以是一個供選擇的指標。下文介紹如何獲取應用的代碼圈復雜度做到線上監控,給到復盤程序復雜程度的數據支撐。

2 背景知識

2.1 圈復雜度

圈復雜度(Cyclomatic complexity,簡寫 CC)也稱為條件復雜度,是一種代碼復雜度的衡量標準。由托馬斯?J?麥凱布(Thomas J. McCabe, Sr.)于 1976 年提出,用來表示程序的復雜度,其符號為 VG 或是 M。它可以用來衡量一個模塊判定結構的復雜程度,數量上表現為獨立現行路徑條數,也可理解為覆蓋所有的可能情況最少使用的測試用例數。圈復雜度大說明程序代碼的判斷邏輯復雜,可能質量低且難于測試和維護。程序的可能錯誤和高的圈復雜度有著很大關系。

2.2 圈復雜度計算方式

常用結構圈復雜度計算

順序結構:順序結構復雜度為 1。

if-else-else、switch-case:每增加一個分支,復雜度增加 1,&& 、|| 運算也為一個分支。

循環結構:增加一個循環結構,復雜度增加 1。

return:增加一條 return 語句,復雜度將加 1。

2.3 圈復雜度度量標準

9a6f6d2c-16c5-11ed-ba43-dac502259ad0.png 如上列出行業內相對認可的度量數據,實際這個完全是看自己的業務體量和項目情況來決定的。假設你的業務很簡單,而且是個單體應用,功能都是很簡單的 CRUD,那你的圈復雜度即使想上去也沒有那么容易。此時你就可以選擇把圈復雜度的重構閾值設定為 10. 假設你的業務十分復雜,而且涉及到多個其他的微服務系統調用,再加上各種業務中的 corner case 的判斷,圈復雜度上 100 可能都不在話下。

2.4 降低圈復雜度方法

1)函數提煉與拆分,單一職責

拆分成子函數

每個函數要有明確的功能實現,不要為了追求行數少而合并功能實現

邏輯模塊和數據模塊要區分開編寫

2)優化算法

減少不必要條件、循環分支,盡量少用 if …else … ,采用三元表達式替換 if else

3)表達式邏輯優化

合并條件表達式,比如使用 a || b || c

4)減少提前 return

3 方案概述

3.1 腳本設計

1)開發語言

python

2)依賴環境

lizard

APScheduler

smtplib

pymysql

3)腳本架構 9a843afe-16c5-11ed-ba43-dac502259ad0.png

3.2 功能介紹

1)支持檢索語言范圍: 支持 15 種開發語言,包含常用語言如下

C/C++ (works with C++14)

Java

C# (C Sharp)

JavaScript (With ES6 and JSX)

Python

Golang

2)掃描參數配置說明:
利用 lizard 執行掃描,常用命令如下: 配置檢查范圍:

列出要分析的編程語言。如果留空,將搜索支持的所有語言。

-l LANGUAGES,--languages LANGUAGES

排除與模式匹配的文件。匹配一切?匹配任何單個字符,“/folder/” 遞歸地排除文件夾中的所有內容??梢灾付ǘ鄠€模式。不要忘了在模式周圍加 “” 號。

-x EXCLUDE,--exclude EXCLUDE

設置白名單,默認’./whitelizard.txt’

-W WHITELIST,--whitelist WHITELIST

配置閥值警告:

圈復雜度數警告的閾值,默認值為 15,>15 會產生警告。

-C CCN,--CCN CCN

設置字段的限制數??梢源a行數,圈復雜度,令牌數,參數數或自定義字段。如果函數設置超過了限制數會報警。

-T THRESHOLDS,--ThresholdTHRESHOLDS

配置報告輸出:

根據格式輸出到文件

-o OUTPUT_FILE,--output_file OUTPUT_FILE

官網地址:http://www.lizard.ws
源碼地址:https://github.com/terryyin/lizard 3)定時執行掃描任務:

通過 BackgroundScheduler 創建調度任務,自動觸發掃描方法,結果寫庫

defdojob():

scheduler=BackgroundScheduler()

scheduler.add_job(func,"cron",hour=21,minute=30)

scheduler.start()

3.3 結果展示

3.3.1 報告名詞解釋

Cyclomatic complexity,圈復雜度也就是分支復雜度,最好保持在 15 以下,目前腳本設置閥值 10。

LOC,包含注釋的代碼行數,目前設置 200 閥值。

Token count ,token 的個數,一個程序最多可以有 8192 個令牌, 每個令牌都是一個詞,例如關鍵字,標識符,常量,標點符號,操作符。對括號和字符串計數作為 1 個令牌。逗號、句點、LOCAL、分號、END 和注釋不計算在內。

Parameter count,參數統計就是函數的參數個數,目前腳本設置閥值 10。

3.3.2 執行結果展示

Windows 環境運行腳本,輸入 file_root(文件地址)執行掃描,支持自動彈出瀏覽器展示本次運行的 Html 報告

9a9d7532-16c5-11ed-ba43-dac502259ad0.png

每周定期執行,按照系統維度掃描,支持觸發郵件通知對應系統研發查看超過閥值方法名稱

9ac2ce18-16c5-11ed-ba43-dac502259ad0.png 3.3.3 應用數據監控

每周定期拉取指定分支最新代碼,執行文件分析,存儲掃描結果,通過數據圖表展示

9aef003c-16c5-11ed-ba43-dac502259ad0.png

4 總結

對于軟件代碼好壞的衡量,圈復雜度可以作為一個參考指標,研發可以通過提煉拆分函數、優化算法、優化邏輯表達式等方法降低模塊(函數)圈復雜度。以上闡述圈復雜度一種線上監控方法,利用好線上化數據,結合現有團隊項目情況,才能形成更好的實踐機制。

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

    關注

    117

    文章

    3791

    瀏覽量

    81157
  • 代碼
    +關注

    關注

    30

    文章

    4802

    瀏覽量

    68735
  • 數據模塊
    +關注

    關注

    0

    文章

    11

    瀏覽量

    9784

原文標題:重構指標之如何監控代碼圈復雜度

文章出處:【微信號:OSC開源社區,微信公眾號:OSC開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    AI時代下芯片復雜度飆升,思爾芯國產硬件仿真加速芯片創新

    引言在人工智能(AI)技術蓬勃發展的今天,芯片的復雜度正以前所未有的速度飆升,輕松跨越了百億邏輯門級別的大關。這一趨勢不僅推動了半導體行業的快速發展,也對硬件仿真系統提出了更高的挑戰和要求。在近日
    的頭像 發表于 12-27 18:01 ?375次閱讀
    AI時代下芯片<b class='flag-5'>復雜度</b>飆升,思爾芯國產硬件仿真加速芯片創新

    芯片設計復雜度劇增,紫光芯片云 3.0 助力企業搭建專業設計環境

    。 ? 實際上,國內中小IC設計企業居多,而如今他們面臨更加復雜的設計需求。隨著芯片制程和規模要求不斷提高,芯片設計環境所需資源越來越大,設計環境構建更加復雜,初創企業如何搭建設計環境,中小企業如何在人員經驗欠缺的情況下完成有效布局,又如
    的頭像 發表于 12-26 17:04 ?796次閱讀
    芯片設計<b class='flag-5'>復雜度</b>劇增,紫光芯片云 3.0 助力企業搭建專業設計環境

    46,16,560°!什么樣的位置傳感器能做到!

    關于電機控制位置信息的獲取,你們都是用什么方法?編碼器?霍爾傳感器?最近,B站KOL達爾聞的妮姐收到了一套位置傳感器demo,簡單小試后,她驚訝地發現這個位置傳感器能記錄46,也就是0°至
    的頭像 發表于 12-11 01:04 ?282次閱讀
    46<b class='flag-5'>圈</b>,16,560°!什么樣的位置傳感器能<b class='flag-5'>做到</b>!

    簡潔至上——探索產品與技術的優雅原則

    ,將復雜的邏輯轉化為直觀、易用的用戶功能,并將冗長、難以維護的代碼結構變為簡潔、效率高的形式。 在《人月神話》中作者提到,軟件開發的復雜度可以劃分為本質復雜度和偶然
    的頭像 發表于 10-25 11:12 ?873次閱讀
    簡潔至上——探索產品與技術的優雅原則

    時間復雜度為 O(n^2) 的排序算法

    作者:京東保險 王奕龍 對于小規模數據,我們可以選用時間復雜度為 O(n2) 的排序算法。因為時間復雜度并不代表實際代碼的執行時間,它省去了低階、系數和常數,僅代表的增長趨勢,所以在小規模數據情況下
    的頭像 發表于 10-19 16:31 ?1186次閱讀
    時間<b class='flag-5'>復雜度</b>為 O(n^2) 的排序算法

    10月25日|英飛凌儲存器解決方案線上技術論壇

    主要面向方案設計群體(系統架構師、設計工程師等),探討(由多種需求驅動的)設計復雜度增加,和資格認證所帶來的挑戰,以及如何減少開發成本并縮短上市時間。話題涵蓋:可
    的頭像 發表于 10-15 08:04 ?312次閱讀
    10月25日|英飛凌儲存器解決方案<b class='flag-5'>線上</b>技術論壇

    汽車異構硬件平臺開發如何進行靜態代碼分析

    隨著汽車軟件開發復雜度的提升,異構硬件平臺的應用已成為必然趨勢。多編譯器環境的引入不僅是技術發展的自然產物,更是解決日益增長的功能需求和技術挑戰的有效途徑。在此背景下,Helix QAC 作為一款
    的頭像 發表于 10-09 16:15 ?542次閱讀
    汽車異構硬件平臺開發如何進行靜態<b class='flag-5'>代碼</b>分析

    卷染機物聯網遠程監控系統方案

    隨著紡織行業的快速發展,卷染機作為紡織生產中的重要設備,其穩定性和效率直接影響到產品的質量和生產成本。然而,傳統的卷染機監控方式存在著數據不集中、響應速度慢、資源浪費嚴重及操作復雜度高等痛點,這些
    的頭像 發表于 10-08 15:53 ?129次閱讀
    卷染機物聯網遠程<b class='flag-5'>監控</b>系統方案

    PCB與PCBA工藝復雜度的量化評估與應對措施

    一站式PCBA智造廠家今天為大家講講PCBA工藝復雜嗎?PCBA工藝的復雜性應對PCBA工藝復雜性的措施。在電子制造領域,PCBA工藝是至關重要的環節。盡管對許多人來說,PCBA工藝可能看似
    的頭像 發表于 09-13 09:21 ?437次閱讀

    業務復雜度治理方法論--十年系統設計經驗總結

    一、復雜度綜述 1、什么是復雜度 軟件設計的核心在于降低復雜性。 --《軟件設計的哲學》 業界對于復雜度并沒有統一的定義, 斯坦福教授John Ousterhout從認知負擔和工作量方
    的頭像 發表于 09-05 14:11 ?1019次閱讀
    業務<b class='flag-5'>復雜度</b>治理方法論--十年系統設計經驗總結

    關于音電機一些參數的解析

    在日常對接客戶的時候,小編多次遇到如下情況,譬如客戶上來就問你們的音電機速度能做到多快?你們的音電機模組精度能做到多高?等等諸如此類的問題,在此,小編想跟大家解釋一番。 關于音
    的頭像 發表于 09-04 08:19 ?368次閱讀
    關于音<b class='flag-5'>圈</b>電機一些參數的解析

    CISC(復雜指令集)與RISC(精簡指令集)的區別  

    復雜度, 將復雜性交給編譯器。舉一個例子,CISC提供的乘法指令,調用時可完成內存a和內存b中的兩個數相乘,結果存入內存a ,需要多個CPU周期才可以完成;而RISC不提供“一站式”的乘法指令,需
    發表于 07-30 17:21

    PCB與PCBA工藝復雜度的量化評估與應用初探!

    , 不知道如何區分普通和復雜的PCB和 PCBA的設計,并采用什么樣的方式來處理。 基于上述考慮, 我們參考了業 界已有的作法, 設計了一個PCB 和 PCBA的工藝復雜度計算公式以解決這 方面
    發表于 06-14 11:15

    軟件架構搞好了,還用擔心代碼可讀性差?

    一、架構的概念及由來嵌入式軟件架構是指在嵌入式系統中用于組織和管理軟件組件的結構和設計。嵌入式軟件架構的出現是為了解決嵌入式系統中軟件復雜度和系統要求不斷增加的挑戰。以下是嵌入式軟件架構出現的原因
    的頭像 發表于 06-14 08:10 ?286次閱讀
    軟件架構搞好了,還用擔心<b class='flag-5'>代碼</b>可讀性差?

    STM32F303啟動文件中的Stack_Size和Stack_Mem如何在C代碼獲取其地址或值?

    為了在業務代碼監控系統的堆棧使用情況,想在業務代碼獲取Stack_Mem的內存地址和Stack_Size的值。目前定義如下:可實現讀取棧地址但無法讀取棧大小 extern unsi
    發表于 04-01 08:18
    主站蜘蛛池模板: 一本道高清到手机在线| 99热这里只就有精品22| 国产成人综合在线观看| 三级电影免费看| 国产免费人成在线看视频| 亚洲精品一区三区三区在线观看| 久久久精品3d动漫一区二区三区| 97人人添人人澡人人澡人人澡| 欧美亚洲国产手机在线有码 | 女人被躁到高潮嗷嗷叫小| 超碰免费视频caopoom9| 亚洲国产成人精品无码区APP| 狼群资源网中文字幕| 电影内射视频免费观看| 亚洲免费在线| 欧美日韩中文字幕综合图区 | 40岁东北老阿姨无码| 色多多涩涩屋下载软件| 久久99久久成人免费播放| 成人国产精品免费网站| 伊人久久大香线蕉影院95| 日本妈妈JMZZZZZ| 久久精品免费观看久久| 国产成人一区二区三区在线观看| 中国二级毛片| 午夜射精日本三级| 欧美视频 亚洲视频| 精品无码日本蜜桃麻豆| 国产 亚洲 日韩 欧美 在线观看| 伊人久久综合热青草| 天上人间影院久久国产| 男人都懂www深夜免费网站| 国产中文字幕一区| 高h np 强j 乱l 双性| 2020久久精品永久免费| 胸太大被男同桌吃好爽| 让男人玩尿道的女人| 久久日本片精品AAAAA国产| 国产精品你懂的在线播放| porono日本xxx| 2021全国精品卡一卡二|