语句和分支覆盖

statement and branch coverage

大家好,最近我正在准备 ISTQB 考试,但遇到其中一个问题。

mock exam QUESTION 16

问题在这里(原是复制粘贴):

给定以下代码,这是正确的:

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.ifA>B 为假 3.如果 C=D 为真)和 3 个语句覆盖测试(C=A +B ,C=A-B 和错误)。

但是答案说 2 个测试语句覆盖率和 2 个分支覆盖率测试。有人可以解释一下吗。

它问的是分支和语句覆盖所需的测试次数,而不是语句和分支的次数。

对于语句覆盖标准,每条语句必须至少执行一次,所以必须达到条件语句和条件语句之外的所有语句。为此,我们需要 (A>B) 条件评估一次为真,另一次评估为假,并且 (C=D) 条件评估为真。这可以通过两个测试来完成,因为两个条件(A>B 和 C=D)彼此独立。例如,(A=2, B=1, C=1, D=1) 和 (A=1, B=2, C=3, D=3) 是两个满足语句覆盖率的测试用例。

对于分支覆盖,我们需要每个条件判断一次为真,一次为假。同样,这可以通过此处的两个测试来完成,因为条件彼此独立,因此例如这两个测试:(A=2, B=1, C=1, D=1) 和 (A=1, B=2, C=3, D=6) 将满足分支覆盖标准,因为 A>B 和 C=D 在我们的测试集中至少评估一次为真和假。

分支机构覆盖范围::

Branch coverage is a requirement that, for each branch in the program (e.g., if statements, loops), each branch have been executed at least once during testing. (It is sometimes also described as saying that each branch condition must have been true at least once and false at least once during testing.)

语句覆盖率::

Statement coverage is a white box testing technique, which involves the execution of all the statements at least once in the source code. It is a metric, which is used to calculate and measure the number of statements in the source code which have been executed.

因此,尝试为您的代码添加行号 ::

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处有一个分支,因为它们是[=13] =] 条件所以,它们可以是 truefalse 因此分支就在那里。所以,Branch Coverage的定义是说我们需要遍历程序中的每一个分支。

因为从 3 我可以去 45 (2 个分支),让我们说分支 343L 并且 35 的分支是 3R (L 和 R 表示左和右)。同样对于语句 8,2 个分支可以是 810(如果 C != D)和 89,然后是 10.让这 2 个分支分别称为 8L8R。 (只是命名以供理解)

因此,从 测试用例 2 你可以意识到你已经从 测试用例 1 中覆盖了你的分支 3L8R ,你会发现你已经覆盖了分支 3R8L

因此,仅用 2 个测试用例,您就覆盖了所有分支和语句。

希望它能让你明白!我尽力这样做了。以防万一你不明白尝试制作程序流程图并重新阅读答案。

EDIT :: 在你的问题描述中你引用了

I solved as 3 branches ( 1. if A>B is true 2.if A>B is false 3. if C=D is true )and 3 statements ( C=A+B ,C=A-B and Error).

我编号的每一行都是一个声明,不仅仅是你写的那些。此外,每个 if 条件有 4 个分支 2。重点是用测试用例覆盖每个分支和每个语句。而且题目还问需要多少个测试用例,而不是分支和语句的个数!