91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

1 引言

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

2 背景知識(shí)

2.1 圈復(fù)雜度

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

2.2 圈復(fù)雜度計(jì)算方式

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

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

if-else-else、switch-case:每增加一個(gè)分支,復(fù)雜度增加 1,&& 、|| 運(yùn)算也為一個(gè)分支。

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

return:增加一條 return 語句,復(fù)雜度將加 1。

2.3 圈復(fù)雜度度量標(biāo)準(zhǔn)

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

2.4 降低圈復(fù)雜度方法

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

拆分成子函數(shù)

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

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

2)優(yōu)化算法

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

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

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

4)減少提前 return

3 方案概述

3.1 腳本設(shè)計(jì)

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

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

-x EXCLUDE,--exclude EXCLUDE

設(shè)置白名單,默認(rèn)’./whitelizard.txt’

-W WHITELIST,--whitelist WHITELIST

配置閥值警告:

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

-C CCN,--CCN CCN

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

-T THRESHOLDS,--ThresholdTHRESHOLDS

配置報(bào)告輸出:

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

-o OUTPUT_FILE,--output_file OUTPUT_FILE

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

通過 BackgroundScheduler 創(chuàng)建調(diào)度任務(wù),自動(dòng)觸發(fā)掃描方法,結(jié)果寫庫(kù)

defdojob():

scheduler=BackgroundScheduler()

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

scheduler.start()

3.3 結(jié)果展示

3.3.1 報(bào)告名詞解釋

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

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

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

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

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

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

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

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

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

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

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

4 總結(jié)

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

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

    關(guān)注

    117

    文章

    3846

    瀏覽量

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

    關(guān)注

    30

    文章

    4972

    瀏覽量

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

    關(guān)注

    0

    文章

    11

    瀏覽量

    9926

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    淺談復(fù)雜芯片設(shè)計(jì)中的SPICE仿真困境

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

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

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

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

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

    新思科技2025年高光時(shí)刻回顧

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

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

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

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

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

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

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

    程序運(yùn)行慢,是否需檢查算法時(shí)間復(fù)雜度過高?

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

    閑魚平臺(tái)獲取商品詳情API接口

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

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

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

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

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

    網(wǎng)絡(luò)化多電機(jī)伺服系統(tǒng)監(jiān)控終端設(shè)計(jì)

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

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

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

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

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

    如何獲取XferData的錯(cuò)誤代碼?

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