日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php 函数圈复杂度,圈复杂度和McCabe

發(fā)布時間:2024/3/26 php 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 函数圈复杂度,圈复杂度和McCabe 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【書名】:軟件架構(gòu)——Python語言實現(xiàn)

【主題】:圈復(fù)雜度

【摘要】:圈復(fù)雜度(Cyclomatic Complexity)是衡量計算機程序復(fù)雜程度的一種措施。它根據(jù)程序從開始到結(jié)束的線性獨立路徑的數(shù)量計算得來的。在 Python 中可以使用 mccabe 包測量程序的圈復(fù)雜度。

1 圈復(fù)雜度

對于沒有任何分支的代碼,它的圈復(fù)雜度為 1 ,意味著代碼只有一條路徑。例如下面的函數(shù):

對于有一條分支的代碼,它的圈復(fù)雜度為 2 ,比如下面遞歸計算階乘的代碼:

在 1976 年, Thomas J. McCabe 開發(fā)了使用有向圖計算復(fù)雜的算法。為了得到這個指標,程序控制流程圖可以畫成一個有向圖,其中:節(jié)點表示一個程序塊

邊表示從一個程序塊到另一個程序塊的控制流

根據(jù)程序的控制圖,McCabe 復(fù)雜度可以表示為

其中:E:邊的數(shù)量

N:節(jié)點的數(shù)量

P:連接組件的數(shù)量

2 McCabe的使用

在 Python 中可以使用 McCabe 包測量程序的圈復(fù)雜度。它可以當作一個獨立的模塊,也可以當作程序的一個插件。可以使用 pip 安裝模塊

2.1 作為命令行使用

和 unittest 、flake8 等工具一樣。

2.2 作為 flake8 插件

當 flake8 版本在 2.0 以上和 McCabe 已經(jīng)安裝的情況下,該插件可用。

在命令中使用 --max-complexity 選項即可。

根據(jù) McCabe 圈復(fù)雜度大于 10 ,就認為是 too complex ,需要進行重構(gòu)以降低復(fù)雜度。

3 程序控制圖

3.1 生成程序控制圖

以上述 factorial 函數(shù)代碼為例子,將其保存為一個 factorial.py 文件中,如下:

第一步 使用 python -m mccabe factorial.py -d

輸出 dot 文本圖形描述語言的有向圖。

第二步,Graphviz渲染圖片

Graphviz 是 AT&T Labs Research開發(fā)的圖形繪制工具軟件.它使用一個特定的DSL(領(lǐng)域特定語言): dot作為腳本語言,然后使用布局引擎來解析此腳本,并完成自動布局。graphviz提供豐富的導(dǎo)出格式,如常用的圖片格式,SVG,PDF格式等。

打開 Graphviz 編輯器,將上述文檔保存為 factorial.gv 文檔,生成程序控制圖。

第三步,計算 McCabe 復(fù)雜度

根據(jù)公式,復(fù)雜度: M = 5 - 4 + 2 x 1 = 2

4 降低復(fù)雜度

使用字典替代復(fù)雜的 if-else 分支代碼是 Python 中降低復(fù)雜度一個有效的方法。

比如可以將下面的分支代碼:

改為下面的字典映射代碼

復(fù)雜度也從 3 降低到 1 。

5 參考資料

總結(jié)

以上是生活随笔為你收集整理的php 函数圈复杂度,圈复杂度和McCabe的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。