<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Mccabe 的環復雜性:使用流程圖進行計算(示例) > 原文: [https://www.guru99.com/cyclomatic-complexity.html](https://www.guru99.com/cyclomatic-complexity.html) 要了解環復雜性,首先要了解- ### 什么是軟件指標? 測量不過是產品/過程屬性的大小/尺寸/容量的定量指示。 軟件度量標準被定義為軟件系統在成本,質量,規模和進度方面具有的屬性的定量度量。 **范例-** ``` Measure - No. of Errors Metrics - No. of Errors found per person ``` 在本教程中,您將學習- * [什么是軟件指標?](#1) * [什么是環復雜性?](#2) * [程序的流程圖符號:](#3) * [如何計算環復雜度](#4) * [圈復雜度的屬性:](#5) * [此指標對軟件測試有何用處?](#6) * [有關 V(G)的更多信息:](#7) * [環復雜度計算工具:](#8) * [環復雜性的用途:](#9) ## 什么是環復雜性? **循環復雜度**是一種用于度量程序復雜度的軟件度量。 它是程序源代碼中獨立路徑的定量度量。 獨立路徑被定義為具有至少一個在其他任何路徑中從未被遍歷過的邊緣的路徑。 可以相對于程序中的功能,模塊,方法或類來計算圈復雜度。 該度量標準是由 Thomas J. McCabe 在 1976 年開發的,它基于程序的控制流表示形式。 控制流將程序描述為一個由節點和邊組成的圖形。 在圖中,節點表示處理任務,而邊緣表示節點之間的控制流。 **![Cyclomatic complexity image.](https://img.kancloud.cn/87/83/878303e4ff1d9313f8a0dac6935536af_355x202.png)** ## 程序的流程圖符號: 程序的流程圖表示法定義了通過邊連接的幾個節點。 下面是語句的流程圖,如 if-else,While,直到和正常順序。 ![Cyclomatic Complexity flow graph](https://img.kancloud.cn/1a/a5/1aa542aef02aa7f3d6ddf7937f9a2cda_624x350.png).png) ## 如何計算環復雜度 **數學表示形式:** 在數學上,它是通過圖形圖的一組獨立路徑。 可以使用以下公式定義程序的代碼復雜度- ``` V(G) = E - N + 2 ``` 哪里, E-邊數 N-節點數 ``` V (G) = P + 1 ``` 其中 P =謂詞節點數(包含條件的節點) 范例- ``` i = 0; n=4; //N-Number of nodes present in the graph while (i<n-1) do j = i + 1; while (j<n) do if A[i]<A[j] then swap(A[i], A[j]); end do; i=i+1; end do; ``` 該程序的流程圖將是 ![Cyclomatic Complexity flow graph for this Program](https://img.kancloud.cn/5e/4d/5e4ddd5677272c957f37f7408936ca7d_344x265.png).png) **數學計算,** * V(G)= 9-7 + 2 = 4 * V(G)= 3 +1 = 4(條件節點是 1,2 和 3 個節點) * 基礎集-程序的可能執行路徑的集合 * 1, 7 * 1, 2, 6, 1, 7 * 1, 2, 3, 4, 5, 2, 6, 1, 7 * 1, 2, 3, 5, 2, 6, 1, 7 ## 圈復雜度的屬性: 以下是圈復雜度的屬性: 1. V(G)是圖中獨立路徑的最大數量 2. V(G)> = 1 3. 如果 V(G)= 1,則 G 將具有一條路徑 4. 將復雜度降至 10 ## 此指標對軟件測試有何用處? 基礎路徑測試是白盒技術之一,它保證在測試過程中至少執行一條語句。 它檢查通過程序的每條線性獨立路徑,這意味著**意味著數量測試用例,將等同于程序的循環復雜性。** 由于圈復雜度(M)的屬性,此指標非常有用- 1. M 可以是達到分支覆蓋率的測試用例數(上限) 2. M 可以是通過圖形的路徑數。 (下界) 考慮這個例子- ``` If (Condition 1) Statement 1 Else Statement 2 If (Condition 2) Statement 3 Else Statement 4 ``` 該程序的循環復雜度為 8-7 + 2 = 3。 由于計算的復雜度為 3,因此上述示例的完整路徑覆蓋范圍需要三個測試用例。 ## 應遵循的步驟: 計算環復雜度和測試用例設計時,應遵循以下步驟。 **步驟 1** -通過代碼構造帶有節點和邊的圖 **步驟 2** -標識獨立路徑 **步驟 3** -循環復雜度計算 **步驟 4** -測試用例的設計 一旦基本集形成,應編寫測試案例以執行所有路徑。 ## 有關 V(G)的更多信息: 如果程序較小,則可以手動計算圈復雜度。 如果程序非常復雜,則需要使用自動化工具,因為這涉及更多流程圖。 基于復雜度數字,團隊可以得出需要采取措施的措施的結論。 下表概述了 v(G)的復雜度數和相應含義: | **復雜度編號** | **含義** | | 1-10 | 結構化且編寫良好的代碼 高可測試性 成本和工作量更少 | | 10-20 | 復雜代碼 可測試性 成本和工作量中等 | | 20-40 | 非常復雜的代碼 低可測試性 成本和精力都很高 | | > 40 | 根本無法測試 很高的成本和工作量 | ## 環復雜度計算工具: 許多工具可用于確定應用程序的復雜性。 一些復雜度計算工具用于特定技術。 復雜度可以通過程序中決策點的數量來確定。 決策點是源代碼中的 for,for,for,while,do,catch 語句。 工具的示例是 * [OCLint](https://github.com/oclint/oclint "OCLint") -用于 C 和相關語言的靜態代碼分析器 * .NET 程序集的反射器添加代碼內度量 * [GMetrics](https://github.com/dx42/gmetrics "GMetrics") -在 [Java](/java-tutorial.html) 相關應用程序中查找指標 ## 環復雜性的用途: 圈復雜度可以證明在以下方面非常有幫助 * 幫助開發人員和測試人員確定獨立的路徑執行 * 開發人員可以確保所有路徑都至少經過了一次測試 * 幫助我們將重點更多地放在未發現的路徑上 * 提高軟件工程中的代碼覆蓋率 * 評估與應用程序或程序相關的風險 * 在周期的早期使用這些指標可以降低程序的更多風險 ### 結論: Cyclomatic Complexity 是用于結構化或[白盒測試](/white-box-testing.html)的軟件度量。 它主要用于評估程序的復雜性。 如果決策點更多,那么程序的復雜性就會更多。 如果程序具有較高的復雜度數,則錯誤的可能性會很高,從而增加維護和故障排除的時間。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看