McCabe 迴圈複雜度:使用流程圖計算


軟體度量

度量提供了軟體產品或過程的特徵或屬性的大小、維度或容量的定量概念或指示。軟體度量可以定義為與軟體成本、質量、規模和進度相關的軟體屬性的定量度量。

例如 -

  • 度量 - 錯誤數量

  • 指標 - 每人發現的錯誤數量

軟體測試中的迴圈複雜度

在軟體測試中,程式碼段的迴圈複雜度是一個指標,用於衡量給定軟體程式的複雜度。它可以定義為軟體產品原始碼中獨立路徑的定量度量。可以透過控制流圖或透過軟體程式中的函式、模組、方法或類來衡量。

獨立路徑是指至少有一條邊在任何其他路徑中都尚未遍歷的路徑。1976 年,Thomas J. McCabe 開發了迴圈複雜度。迴圈複雜度基於軟體程式的控制流表示。控制流以圖的形式表示軟體程式,該圖由節點和邊組成。

節點表示處理任務,邊表示節點之間的控制流。

軟體程式的流程圖表示法

流程圖表示法定義了透過邊連線的節點。以下是 if-else、while 語句和正常流程式列的流程圖。

如何計算迴圈複雜度

數學表示 - 迴圈複雜度是透過圖表的獨立路徑的集合。它透過以下公式表示 -

  • V(G) = E – N + 2,其中 E = 邊數,N = 節點數

            或,

  • V(G) = P + 1,其中 P = 謂詞節點數,包含條件

迴圈複雜度的屬性

  • V(G) 表示透過圖表示的最大獨立路徑數。

  • V(G) > 1

  • 如果 V(G) = 1,即 V(G) 為單位,則 G 只能有一條路徑。

  • 將複雜度降低到 10。

迴圈複雜度對軟體測試有什麼用?

基本路徑測試是一種在白盒測試中使用的技術,以確保在軟體測試期間至少執行一條語句。迴圈複雜度評估透過程式的所有線性獨立路徑,即測試用例的數量將等於軟體程式的迴圈複雜度。它由於迴圈複雜度 (M) 的屬性而有用 -

  • M 是實現分支覆蓋所需的測試用例數(稱為上限)。

  • 或者,M 可以是透過圖的路徑數,包括獨立路徑(稱為下限)。

計算迴圈複雜度和設計測試用例的步驟

  • 從軟體程式碼構建具有節點和邊的圖。

  • 識別獨立路徑。

  • 如果 V(G) = 1,即 V(G) 為單位,則 G 只能有一條路徑。

  • 設計測試用例。

在形成基本集後,必須編寫測試用例以實現每條路徑。

V(G) - 如果軟體程式很小,則也可以手動計算迴圈複雜度。如果程式過於複雜,則需要自動化工具,因為它涉及更多流程圖。根據複雜度數字,專案團隊決定需要實施哪些措施來進行度量。

下表概述了複雜度數字和 V(G) 的相應含義 -

複雜度
意義
1 – 10
結構良好、編寫良好的程式碼 高可測試性 成本和工作量較低
10 – 20
複雜程式碼 中等可測試性 中等成本和工作量
20 – 40
過於複雜的程式碼 低可測試性 高成本和工作量
> 40
無法測試 非常高的成本和工作量

計算迴圈複雜度的工具

全球市場上有許多工具可用於確定軟體產品或應用程式的複雜性。某些工具用於某些技術。複雜度可以透過軟體程式中的決策點數量來確定。例如,原始碼中的 if、for、for-each、while、do、catch、case 語句。

一些用於計算迴圈複雜度的工具是 -

OClint

這是一個靜態程式碼分析工具,用於提高軟體產品的質量,並透過檢查 C、C++、Objective-C 程式碼並找出可能的問題(如 -)來減少缺陷:

  • 可能的錯誤 - if、else、try、catch、finally 語句

  • 未使用的程式碼 - 這包括未使用的區域性變數和引數。

  • 複雜的程式碼 - 這包括非常高的迴圈複雜度、NPath 複雜度和非常高的 NCSS。

  • 冗餘程式碼 - 這包括冗餘的 if 語句、無用的括號等。

  • 程式碼異味 - 這包括長方法和長引數列表。

  • 不良實踐 - 這包括反向邏輯和引數賦值。

使用 OClint,我們可以使用高階功能自動化檢查過程 -

  • 依賴於軟體原始碼的抽象語法樹以獲得更好的準確性和效率。減少誤報以防止有用的結果淹沒在其中。

  • 它允許在執行時甚至動態載入規則到系統中。

  • 它提供敏捷且可擴充套件的配置,以確保使用者可以自定義工具的行為。

  • 它的命令列呼叫支援持續整合 (CI) 和軟體程式碼的持續檢查,以便儘早解決技術債務,從而降低維護成本。

GTMetrix

此工具用於分析頁面的載入速度及其效能。它為我們的頁面和 Pagespeed 以及 WiSlow 提供分數。它是一個開源工具,用於獲取有關站點效能的詳細報告。它還提供有關改進網頁分數的建議。它還有助於我們從 WordPress 執行分析。

它還有助於我們安排每日、每週或每月的報告。它還會在 WordPress 管理員處通知我們網站的狀態。首先,我們需要建立一個 GTMetrix 帳戶。該帳戶在有限的時間內和每天一定數量的請求內是免費的。

Reflector Add In

此工具用於 .NET 程式集的程式碼度量。

迴圈複雜度的使用

  • 它還可以指導測試過程,並且易於應用。

  • 它還有助於開發人員向客戶保證所有路徑都已徹底測試。

  • 它有助於更多地強調未覆蓋的路徑。

  • 它有助於更多地強調未覆蓋的路徑。

  • 迴圈複雜度指標有助於提高程式碼覆蓋率。

  • 它有助於評估應用程式或軟體程式中的風險。

  • 如果儘早使用,指標有助於降低程式的更多風險。

迴圈複雜度的優點

  • 迴圈複雜度可用作質量指標。

  • 它提供了各種設計的相對複雜性。

  • 它比 Halstead 的指標計算速度更快。

  • 迴圈複雜度還用於衡量最低工作量和最佳集中領域。

  • 它還可以指導測試過程,並且易於應用。

迴圈複雜度的缺點

  • 迴圈複雜度是軟體程式的控制複雜度的度量,而不是資料複雜度的度量。

  • 巢狀條件結構比未測試的結構更難且更復雜。

  • 對於簡單的比較和決策結構,迴圈複雜度可能會給出誤導性的數字。

結論

迴圈複雜度是一種軟體度量技術。它用於結構化或白盒測試。它主要用於評估軟體程式的複雜性。如果軟體程式具有更多決策點,則軟體程式的複雜性會增加。對於複雜度較高的軟體程式,隨著時間的推移,錯誤的機率會增加,從而導致維護和故障排除。

更新於: 2021 年 12 月 17 日

4K+ 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.