日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

1 引言

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

2 背景知識

2.1 圈復雜度

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

2.2 圈復雜度計算方式

常用結(jié)構(gòu)圈復雜度計算

順序結(jié)構(gòu):順序結(jié)構(gòu)復雜度為 1。

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

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

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

2.3 圈復雜度度量標準

9a6f6d2c-16c5-11ed-ba43-dac502259ad0.png 如上列出行業(yè)內(nèi)相對認可的度量數(shù)據(jù),實際這個完全是看自己的業(yè)務體量和項目情況來決定的。假設你的業(yè)務很簡單,而且是個單體應用,功能都是很簡單的 CRUD,那你的圈復雜度即使想上去也沒有那么容易。此時你就可以選擇把圈復雜度的重構(gòu)閾值設定為 10. 假設你的業(yè)務十分復雜,而且涉及到多個其他的微服務系統(tǒng)調(diào)用,再加上各種業(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)腳本架構(gòu) 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/” 遞歸地排除文件夾中的所有內(nèi)容??梢灾付ǘ鄠€模式。不要忘了在模式周圍加 “” 號。

-x EXCLUDE,--exclude EXCLUDE

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

-W WHITELIST,--whitelist WHITELIST

配置閥值警告:

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

-C CCN,--CCN CCN

設置字段的限制數(shù)。可以代碼行數(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)建調(diào)度任務,自動觸發(fā)掃描方法,結(jié)果寫庫

defdojob():

scheduler=BackgroundScheduler()

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

scheduler.start()

3.3 結(jié)果展示

3.3.1 報告名詞解釋

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

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

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

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

3.3.2 執(zhí)行結(jié)果展示

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í)行文件分析,存儲掃描結(jié)果,通過數(shù)據(jù)圖表展示

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

4 總結(jié)

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

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

    關(guān)注

    117

    文章

    3849

    瀏覽量

    85525
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4979

    瀏覽量

    74458
  • 數(shù)據(jù)模塊
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    9933

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    移動式纜道雷達波測流系統(tǒng) 安裝 維護復雜度說明

    德??萍?DX-LLX-1M 移動式纜道雷達波測流系統(tǒng),安裝不算復雜、后期維護極簡,零基礎運維也能上手,不用專業(yè)水文技工常駐。
    的頭像 發(fā)表于 05-09 11:20 ?229次閱讀
    移動式纜道雷達波測流系統(tǒng) 安裝 維護<b class='flag-5'>復雜度</b>說明

    阿卡思微電子推出HimaFormal MC+UCAgent智能形式化驗證解決方案

    隨著芯片設計復雜度不斷攀升,如何確保隱藏在代碼中的邏輯Bug無處遁形,成為芯片成功流片的關(guān)鍵。
    的頭像 發(fā)表于 05-07 15:00 ?265次閱讀
    阿卡思微電子推出HimaFormal MC+UCAgent智能形式化驗證解決方案

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

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

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

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

    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 ?426次閱讀

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    機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 ?959次閱讀
    成<b class='flag-5'>圈</b>機PLC數(shù)據(jù)采集解決方案

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

    在多電機伺服系統(tǒng)的調(diào)試及使用過程中,需要實時獲取系統(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)交換機技術(shù)手冊

    ADIN2111是一款低功耗、低復雜度、雙以太網(wǎng)端口交換機,它集成了10BASE-T1L PHY和一個串行外設接口(SPI)端口。該器件使用低功率受限節(jié)點,面向工業(yè)以太網(wǎng)應用且符合IEEE
    的頭像 發(fā)表于 05-15 11:41 ?2999次閱讀
    ADIN2111集成10BASE-T1L PHY的低<b class='flag-5'>復雜度</b>、2端口以太網(wǎng)交換機技術(shù)手冊
    通许县| 汽车| 五家渠市| 孟津县| 泽普县| 武山县| 芦山县| 庆安县| 绿春县| 通渭县| 台安县| 波密县| 西充县| 光泽县| 铜山县| 磐石市| 巴彦县| 宜州市| 临夏市| 青田县| 玉林市| 綦江县| 博罗县| 东乡县| 元阳县| 乳山市| 霍邱县| 尉犁县| 恩施市| 丰顺县| 江达县| 永康市| 呼和浩特市| 宣汉县| 德州市| 阳朔县| 类乌齐县| 云南省| 高台县| 清涧县| 盐池县|