大家好,这些天我正在准备ISTQB考试,我遇到了其中一个问题。
问题是(最初复制粘贴):
给出以下代码,这是真的:
IF A > B THEN
C = A – B
ELSE
C = A + B
ENDIF
Read D
IF C = D
Then Print “Error”
ENDIF
a.1语句覆盖测试,3分支覆盖
b.2语句覆盖测试,2分支覆盖
c.2对声明范围的测试。 3分支覆盖
d.3测试语句覆盖率,3测试分支覆盖率
我解决了3个分支覆盖测试(1.如果A> B为真2.如果A> B为假3.如果C = D为真),则3为语句覆盖(C = A + B,C = AB和错误)。
然而,答案说,2个语句覆盖测试和2个分支覆盖测试。有人可以解释一下。
答案 0 :(得分:2)
分支覆盖率::
分支覆盖率是对程序中每个分支的要求 (例如,if语句,循环),每个分支至少已被执行 一次测试期间(有时也被描述为这样说 每个分支条件必须至少为真一次且为假 在测试期间至少一次。)
声明范围::
声明覆盖是一种白盒测试技术,涉及到 在源代码中至少执行一次所有语句。 它是一个度量,用于计算和测量数量 源代码中已经执行的语句。
因此,尝试为您的代码编写行号::
1. READ A --> Added just to make it more clear
2. READ B --> Added just to make it more clear
3. IF A > B
4. THEN C = A – B
5. ELSE
6. C = A + B ENDIF
7. Read D
8. IF C = D
9. Then Print “Error” ENDIF
10. END OF PROGRAM
因此,考虑上面的定义并采取一些测试用例::
测试案例1 :: A = 10,B = 11,D = 21
声明涵盖 = 1,2,3,5,6,7,8,9,10。
测试案例2 :: A = 11,B = 10,D = 10
涵盖的声明 = 1,2,3,4,7,8,10。
因此,如果你查看所涵盖的陈述,你会发现只需要2个测试用例来覆盖所有陈述。
现在,进入分支覆盖
如果你制作了上面代码的程序流程图,并按照上面的定义,那么在语句3
和语句8
处有一个分支,因为它们是if
因此,它们可以是true
或false
因此分支就在那里。因此,分支覆盖范围的定义表明我们需要遍历程序中的每个分支。
从3
开始,我可以转到4
或5
(2个分支),让我们说分支3
到4
是{ {1}}和3L
分支3
为5
(L和R表示左右)。类似地,对于语句3R
,2个分支可以是8
到8
(如果是10
)和C != D
到8
然后是{{1 }}。然后让这两个分支分别称为9
和10
。 (只是为了理解而命名)
因此,从测试用例2 您可以意识到您已经从测试用例1 覆盖了您的分支8L
和8R
,您可以意识到你已经覆盖了你的分支3L
和8R
因此,只有2个测试用例,您已涵盖所有分支和语句。
希望它能让你清楚!尽力做到这一点。万一你不明白尝试制作程序流程图并重新阅读答案。
编辑:: 在您的问题描述中引用
我解决了3个分支(1.如果A> B为真2.if A> B为假3.如果C = D 是真的)和3个陈述(C = A + B,C = A-B和错误)。
我编号的每一行都是一个陈述,而不仅仅是你所写的。此外,每个3R
条件有4个分支2。重点是用测试用例覆盖每个分支和每个语句。问题还在于需要多少测试用例,而不是分支和语句的数量!
答案 1 :(得分:1)
它要求分支和语句覆盖所需的测试数量,而不是语句和分支的数量。
对于语句覆盖标准,每个语句必须至少执行一次,因此必须达到条件和外部的所有语句。为此,我们需要(A> B)条件来评估一次为真,另一次为假,并将(C = D)条件评估为真。这可以仅用两个测试来完成,因为两个条件(A> B和C = D)彼此独立。例如,(A = 2,B = 1,C = 1,D = 1)和(A = 1,B = 2,C = 3,D = 3)是两个满足语句覆盖范围的测试用例。
对于分支覆盖,我们需要将每个条件评估为true一次,将false评估为另一个。同样,这可以通过这里的两个测试来完成,因为条件是彼此独立的,所以例如这两个测试:(A = 2,B = 1,C = 1,D = 1)和(A = 1, B = 2,C = 3,D = 6)将满足分支覆盖标准,因为在我们的测试集中A> B和C = D都至少评估为真和假一次。