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

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

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

3天內不再提示

如何獲取應用的代碼圈復雜度做到線上監(jiān)控

電子工程師 ? 來源:OSCHINA 社區(qū) ? 作者:京東云開發(fā)者 ? 2022-08-08 15:11 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 引言

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

2 背景知識

2.1 圈復雜度

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

2.2 圈復雜度計算方式

常用結構圈復雜度計算

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

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

循環(huán)結構:增加一個循環(huán)結構,復雜度增加 1。

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

2.3 圈復雜度度量標準

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

2.4 降低圈復雜度方法

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

拆分成子函數(shù)

每個函數(shù)要有明確的功能實現(xiàn),不要為了追求行數(shù)少而合并功能實現(xiàn)

邏輯模塊和數(shù)據(jù)模塊要區(qū)分開編寫

2)優(yōu)化算法

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

3)表達式邏輯優(yōu)化

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

4)減少提前 return

3 方案概述

3.1 腳本設計

1)開發(fā)語言

python

2)依賴環(huán)境

lizard

APScheduler

smtplib

pymysql

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

3.2 功能介紹

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

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

Java

C# (C Sharp)

JavaScript (With ES6 and JSX)

Python

Golang

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

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

-l LANGUAGES,--languages LANGUAGES

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

-x EXCLUDE,--exclude EXCLUDE

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

-W WHITELIST,--whitelist WHITELIST

配置閥值警告:

圈復雜度數(shù)警告的閾值,默認值為 15,>15 會產(chǎn)生警告。

-C CCN,--CCN CCN

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

-T THRESHOLDS,--ThresholdTHRESHOLDS

配置報告輸出:

根據(jù)格式輸出到文件

-o OUTPUT_FILE,--output_file OUTPUT_FILE

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

通過 BackgroundScheduler 創(chuàng)建調度任務,自動觸發(fā)掃描方法,結果寫庫

defdojob():

scheduler=BackgroundScheduler()

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

scheduler.start()

3.3 結果展示

3.3.1 報告名詞解釋

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

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

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

Parameter count,參數(shù)統(tǒng)計就是函數(shù)的參數(shù)個數(shù),目前腳本設置閥值 10。

3.3.2 執(zhí)行結果展示

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

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

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

9ac2ce18-16c5-11ed-ba43-dac502259ad0.png 3.3.3 應用數(shù)據(jù)監(jiān)控

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

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

4 總結

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

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

    關注

    117

    文章

    3849

    瀏覽量

    85473
  • 代碼
    +關注

    關注

    30

    文章

    4977

    瀏覽量

    74392
  • 數(shù)據(jù)模塊

    關注

    0

    文章

    11

    瀏覽量

    9930

原文標題:重構指標之如何監(jiān)控代碼圈復雜度

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    淺談復雜芯片設計中的SPICE仿真困境

    在現(xiàn)代集成電路設計領域,SPICE(Simulation Program with Integrated Circuit Emphasis)仿真一直是驗證電路功能和性能的核心手段。然而,隨著芯片設計復雜度的指數(shù)級增長,傳統(tǒng)SPICE仿真正面臨著前所未有的挑戰(zhàn)。
    的頭像 發(fā)表于 03-13 13:39 ?682次閱讀

    高效電源監(jiān)控:MAX706和MAX708系列微處理器監(jiān)控電路解析

    降低了監(jiān)控+3V電源供應水平所需的復雜度和組件數(shù)量,相比單獨的集成電路或分立組件,能大幅提高系統(tǒng)的可靠性和準確性。
    的頭像 發(fā)表于 02-28 09:50 ?251次閱讀

    MAX791:多功能微處理器監(jiān)控電路的深度解析

    復雜度、減少所需組件數(shù)量的產(chǎn)品。下面,我們就來詳細了解一下這款產(chǎn)品。 文件下載: MAX791.pdf 一、產(chǎn)品概述 MAX791 微處理器監(jiān)控電路是一款可有效降低微處理器(μP)系統(tǒng)中電源供應和電池控制功能監(jiān)控
    的頭像 發(fā)表于 02-27 16:05 ?346次閱讀

    新思科技2025年高光時刻回顧

    當技術復雜度從“單點優(yōu)化”邁向“系統(tǒng)級協(xié)同”,創(chuàng)新的尺度也隨之被重新定義。過去一年,對新思科技來說,是一個載入史冊的年份。
    的頭像 發(fā)表于 02-24 17:42 ?1951次閱讀

    電能質量在線監(jiān)測裝置支持密碼復雜度要求嗎?

    現(xiàn)代電能質量在線監(jiān)測裝置(尤其是中高端型號,適配電網(wǎng)安全要求)普遍支持密碼復雜度要求 ,且部分裝置會強制啟用該功能,核心目的是防范弱密碼導致的非法訪問、數(shù)據(jù)篡改或設備操控風險,符合電力行業(yè)信息安全
    的頭像 發(fā)表于 12-12 11:07 ?712次閱讀

    免停電接線的電能質量在線監(jiān)測裝置的安裝和調試復雜嗎?

    免停電接線的電能質量在線監(jiān)測裝置 整體安裝調試復雜度較低 ,遠低于傳統(tǒng)停電接線模式,其中低壓系統(tǒng)可實現(xiàn) “快速部署、簡易調試”,中高壓系統(tǒng)因需專業(yè)工具與資質,復雜度略有提升,但仍能通過標準化流程降低
    的頭像 發(fā)表于 12-05 18:00 ?3912次閱讀
    免停電接線的電能質量在線監(jiān)測裝置的安裝和調試<b class='flag-5'>復雜</b>嗎?

    工業(yè)安全新突破:DINA Elektronik 無傳感器驅動監(jiān)控技術重磅亮相!

    在工業(yè)自動化日益智能化的今天,如何在不增加系統(tǒng)復雜度的前提下提升機器安全性與運行效率,成為眾多工程師與企業(yè)關注的焦點。本月,由SchmersalUSA主辦、DINAElektronikGmbH深度
    的頭像 發(fā)表于 11-18 14:49 ?739次閱讀
    工業(yè)安全新突破:DINA Elektronik 無傳感器驅動<b class='flag-5'>監(jiān)控</b>技術重磅亮相!

    程序運行慢,是否需檢查算法時間復雜度過高?

    程序運行慢,需檢查算法時間復雜度是否過高?
    發(fā)表于 11-17 08:08

    閑魚平臺獲取商品詳情API接口

    ? ?閑魚是阿里巴巴旗下的二手交易平臺,為開發(fā)者提供了豐富的API接口,方便獲取商品數(shù)據(jù)。本文將詳細介紹如何通過API獲取商品詳情,包括申請流程、調用方法和代碼示例。內容基于公開API文檔和實踐經(jīng)驗
    的頭像 發(fā)表于 10-27 16:01 ?1317次閱讀
    閑魚平臺<b class='flag-5'>獲取</b>商品詳情API接口

    物聯(lián)網(wǎng)平臺應用環(huán)境監(jiān)控:低代碼零編程簡化開發(fā),組態(tài)應用

    復雜開發(fā)轉化為“拖拽組件、關聯(lián)設備”的簡單操作,讓企業(yè)無需編程也能快速搭建、靈活調整監(jiān)控系統(tǒng),適配工業(yè)、園區(qū)、農(nóng)業(yè)等多場景環(huán)境監(jiān)控需求。 一、低代碼零編程:打破技術壁壘,人人能搭
    的頭像 發(fā)表于 08-29 15:33 ?1090次閱讀

    機PLC數(shù)據(jù)采集解決方案

    中,如何高效采集成機 PLC 數(shù)據(jù),以實現(xiàn)生產(chǎn)過程的精細化管理和遠程監(jiān)控,成為眾多電線生產(chǎn)企業(yè)亟待解決的問題。 某中型電線生產(chǎn)企業(yè)擁有多條電線成生產(chǎn)線,這些成機來自不同廠家,型號
    的頭像 發(fā)表于 07-10 17:08 ?922次閱讀
    成<b class='flag-5'>圈</b>機PLC數(shù)據(jù)采集解決方案

    網(wǎng)絡化多電機伺服系統(tǒng)監(jiān)控終端設計

    在多電機伺服系統(tǒng)的調試及使用過程中,需要實時獲取系統(tǒng)運行時各個電機和負載的運行狀態(tài)數(shù)據(jù),并通過對相應數(shù)據(jù)的分析進行控制器參數(shù)的整定和故障判斷。而在傳統(tǒng)的基于CAN總線的多電機系統(tǒng)中,總線上傳輸?shù)臄?shù)據(jù)
    發(fā)表于 06-23 07:15

    ADIN2111集成10BASE-T1L PHY的低復雜度、2端口以太網(wǎng)交換機技術手冊

    ADIN2111是一款低功耗、低復雜度、雙以太網(wǎng)端口交換機,它集成了10BASE-T1L PHY和一個串行外設接口(SPI)端口。該器件使用低功率受限節(jié)點,面向工業(yè)以太網(wǎng)應用且符合IEEE
    的頭像 發(fā)表于 05-15 11:41 ?2942次閱讀
    ADIN2111集成10BASE-T1L PHY的低<b class='flag-5'>復雜度</b>、2端口以太網(wǎng)交換機技術手冊

    如何獲取 OpenAI API Key?API 獲取代碼調用示例 (詳解教程)

    ,催生了從智能聊天到復雜數(shù)據(jù)分析等前所未有的應用場景。OpenAI API Key 是開啟這些能力的關鍵,它既是身份憑證,也是資源管理和安全保障的核心。然而,安全、高效地獲取、管理和使用 API
    的頭像 發(fā)表于 05-04 11:42 ?1.9w次閱讀
    如何<b class='flag-5'>獲取</b> OpenAI API Key?API <b class='flag-5'>獲取</b>與<b class='flag-5'>代碼</b>調用示例 (詳解教程)

    如何獲取XferData的錯誤代碼?

    我正在使用 FX3 EVM,并將把該產(chǎn)品用于我公司的某種產(chǎn)品。我有一個類似標題的問題。如何獲取XferData的錯誤代碼 原型如下 bool CCyUSBEndPoint::XferData
    發(fā)表于 04-30 08:27