簡體   English   中英

在這個例子中,邊緣和條件覆蓋的最小測試用例數量是多少?

[英]What is the minimum number of test cases for edge and condition coverage in this example?

在我的教科書中,這個問題的解決方案是測試用例的最小數量是 3。但是,對於完整的邊緣和條件覆蓋,我不能 go 低於 4。

int x=0;
int k=10;
while (x<=10 && z>0) {
   if (z<=y && k>=x)
      y=y-z;
   k--;
   if (y>0) x++;
   else break;
} 

我的解決方案是這樣的: {z=1, y=0},{z=-1, y=0},{z=1, y=10},{z=1, y=3} 其中哪一項(如果有)是多余的? 解決這個問題的三個測試用例組合是什么? 還是我的教科書有錯誤?

好奇的 function。

如下所示,僅看x ,就有許多有趣的區域,每個區域都值得一個測試向量。

我不同意“測試用例的最小數量是 3”。

struct kx {
  int k, x;
};

struct kx foo(int z, int y) {
  int x = 0;
  int k = 10;
  while (x <= 10 && z > 0) {
    if (z <= y && k >= x)
      y = y - z;
    k--;
    if (y > 0)
      x++;
    else
      break;
  }
  struct kx r = {k, x};
  return r;
}

int main(void) {
  for (int z = -2; z <= 12; z++) {
    for (int y = -2; y <= 20; y++) {
      struct kx newest = foo(z, y);
      printf(" %2d", newest.x);
    }
    printf("\n");
  }
}

Output

  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  1  2  3  4  5 11 11 11 11 11 11 11 11 11 11 11 11 11 11
  0  0  0 11  0 11  1 11  2 11  3 11  4 11  5 11 11 11 11 11 11 11 11
  0  0  0 11 11  0 11 11  1 11 11  2 11 11  3 11 11  4 11 11  5 11 11
  0  0  0 11 11 11  0 11 11 11  1 11 11 11  2 11 11 11  3 11 11 11  4
  0  0  0 11 11 11 11  0 11 11 11 11  1 11 11 11 11  2 11 11 11 11  3
  0  0  0 11 11 11 11 11  0 11 11 11 11 11  1 11 11 11 11 11  2 11 11
  0  0  0 11 11 11 11 11 11  0 11 11 11 11 11 11  1 11 11 11 11 11 11
  0  0  0 11 11 11 11 11 11 11  0 11 11 11 11 11 11 11  1 11 11 11 11
  0  0  0 11 11 11 11 11 11 11 11  0 11 11 11 11 11 11 11 11  1 11 11
  0  0  0 11 11 11 11 11 11 11 11 11  0 11 11 11 11 11 11 11 11 11  1
  0  0  0 11 11 11 11 11 11 11 11 11 11  0 11 11 11 11 11 11 11 11 11
  0  0  0 11 11 11 11 11 11 11 11 11 11 11  0 11 11 11 11 11 11 11 11

達到 100% 條件覆蓋的測試用例的最小數量確實是 3。

以下是測試用例: {z=10,y=1},{z=1,y=1},{z=1,y=10}

為了實現完整的條件覆蓋,條件中的每個 Boolean 表達式必須分別評估為每個truefalse

對於if (z<=y && k>=x)條件

z<=y : true
k>=x: true

z<=y : true
k>=x: false

z<=y : false
k>=x: false

z<=y : false
k>=x: true

對於if(y>0)條件

y>0: true

y>0:false

請注意,由於存在修改變量值的 while 循環,因此僅在一個測試用例中就可以涵蓋多個 Boolean 表達式。

第一個測試用例{z=10,y=1}涵蓋

z<=y : false
k>=x: false

z<=y : false
k>=x: true

y>0: true

第二個測試用例{z=1,y=1}涵蓋

z<=y : true
k>=x: true

y>0:false

第三個測試用例{z=1,y=10}覆蓋了剩余的 Boolean 表達式

z<=y : true
k>=x: false

這樣一來,代碼中每個條件中的每個 Boolean 表達式都被覆蓋,因此確保了 100% 的條件覆蓋

您可以在 if 語句之前打印到控制台所需的表達式的 Boolean 值,以確保條件中的每個 Boolean 表達式分別被評估為truefalse

int x=0;
int k=10;
while (x<=10 && z>0) {
   System.out.println((z<=y),(k>=x))
   if (z<=y && k>=x)
      y=y-z;
   k--;
   System.out.println((y>0))
   if (y>0) x++;
   else break;
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM