2013-10-18 60 views
-1
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; 

我必須找到這個代碼的圈複雜度,然後建議一些白盒測試用例和黑盒測試用例。但是我無法爲代碼製作CFG。向我解釋圈複雜度的控制流程

+0

示例似乎是從網上直播的?對於你的部分問題已經有了解釋。另外,如果你有代碼,你爲什麼要在這裏提出黑盒測試?最後,請解釋CFG,我的想法似乎都不符合上下文。 –

回答

1

瀏覽複雜性相關材料我遇到了這個問題,以及在別人的博客和別人的書中討論過的例子。眼看作爲例子是相同的......

http://www.guru99.com/cyclomatic-complexity.html

http://books.google.pl/books?id=M-mhFtxaaskC&lpg=PA385&ots=jB8P0avJU7&d&hl=pl&pg=PR1#v=onepage&q&f=false - >去384頁

不過,希望能夠使有些問題對他人有用。

算法

http://www.cs.swan.ac.uk/~csmarkus/CS339/dissertations/GregoryL.pdf摘自:

  1. 計算程序圖表。
  2. 計算圈複雜度。
  3. 選擇一組基礎路徑。
  4. 生成測試用例對於每個這些路徑

首先兩點可以有時摺疊的,因爲計算的複雜性可以不必涉及圖形建築物。然而,對於基本的路徑集,您至少需要在您的腦海中繪製草圖。

計算

要計算的複雜性,你需要做出決定你如何去了解它。

  1. 從圖中, 1.1。計數區域 1.2。與一個出口點計數邊緣,節點,出口點
  2. 從源代碼,計數條件句
  3. 從與許多出口點,計數條件句,減去出口點和添加2.

複雜等於源代碼:

  • 區的量 - 這是最好的,在圖可見,我做了一個在其他SO問題,以便將鏈接而不是複製有/粘貼
  • 個邊緣 - 節點+ 2 *(出口點)
  • 邊緣 - 節點+(出口點)//提供強連通圖
  • (決策點)+ 1 //提供的一個入口點,一個出口點
  • (決策點) - (出口點)+ 2 //許多出口點

決策點= IF,FOR,WHILE ... 由於`如果(A或/和b)等同於如果一個和/或者如果b,複合條件將複雜度加2,那麼if的複雜度就是2(因爲無論如何它都是2)。

示例圖表和更多閱讀鏈接:https://stackoverflow.com/a/21658235/999165

基礎路徑測試 - 白箱測試

麥凱布注意的是複雜號碼是一個號碼,如果線性獨立的電路 - 通過代碼路徑,因而它也是一個最小的測試用例數。因此,您需要構建儘可能多的測試用例,以及您擁有的許多路徑。路徑由通過圖形去選擇,因爲它是一個迷宮:

開始與路徑計數器爲零和: 1.向左走向上直到匯聚節點(退出點) 2.路徑計數器+ 1 3.轉到左再次,在達到接收器之前的最低決策點處,選擇右邊而不是左邊 4.重複步驟1 - 3,直到所有決策點完全耗盡

您所遍歷的節點組成您的路徑。

http://en.wikipedia.org/wiki/Basis_path_testing

+0

http://www.guru99.com/cyclomatic-complexity.html確切地說,我在找什麼。如果需要注意 - 方法/模塊中的「獨立路徑的最大數目」,則複雜性V(G)具有實際意義/相關性。或者換句話說,對於該方法的輸入,可能有多少控制流(開始到結束)。 – parasrish