软件测试-白盒测试(更新ing)

    • 白盒测试是什么?

      • n动态方法是指按一定步骤生成测试用例并驱动被测程序运行来发现错误。 
      • 静态方法是指按一定步骤直接检查源代码来发现错误,而不用生成测试用例并驱动被测程序运行来发现错误,也称为代码检查法。
      • 白盒测试,有时也称为玻璃盒测试,是一种基于源程序或代码的测试方法,分成静态和动态两种方法。
      • 白盒测试方法
        • 1.语句覆盖

          • 语句覆盖法的基本思想是设计若干测试用例,运行被测程序,是程序中的每个可执行语句至少被执行一次。
            • 如果是顺序结构,就是让测试从头执行到尾。
            • 如果有分支,条件和循环,需要执行足够的测试覆盖全部语句。
          • 在下图中,如果可以将 a>0 and b>0 , c=c/a ,a>1 or c>1 ,c=c+1 ,c=b+c 全部执行过的话,就是语句覆盖。

            • 选择一条路径(1-2-4)就可以完成语句覆盖 (100%语句覆盖)
            • 选择一组测试用例:a = 2 , b = 2 , c = 6 可以按照上面路径完后才能语句覆盖
        • 2.判定覆盖

          • 判定覆盖法的基本思想是设计若干用例,运行被测程序,是的程序中的每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾满足。
            • 即一个判断的 T 和 F 分支都至少经历一次
          • 如下图

          • 测试样例 1
            • (1) maxint = 10 ,N = -1
              • 对于判断 “N < 0”结果是 T
              • 对于判断“(i < N )and (result <= maxint)”结果是 T 和 F
              • 对于判断“result <= maxint” 结果是 T
            • (2) maxint = 0, N = -1
              • 对于判断 “N < 0”结果是 T
              • 对于判断“(i < N )and (result <= maxint)”结果是 T 和 F
              • 对于判断“result <= maxint” 结果是 F
            • 综上,以上测试样例满足了全部的语句覆盖,但是没有覆盖全部的分支,因为对于 “N < 0” 的 N 分支并没有经过。
          • 测试样例 2
            • (1)maxint = 10 ,N = 3
              • 对于判断 “N < 0”结果是 F
              • 对于判断“(i < N )and (result <= maxint)”结果是 T 和 F
              • 对于判断“result <= maxint” 结果是 T
            • (2)maxint = 0 , N =-1
              • 对于判断 “N < 0”结果是 T
              • 对于判断“(i < N )and (result <= maxint)”结果是 T 和 F
              • 对于判断“result <= maxint” 结果是 F
            • 综上,以上测试样例覆盖了全部的分支
        • 3.条件覆盖

          • 条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。
          • 注意:并不能说满足了条件覆盖就一定能够满足判定覆盖(如下图中 分别选择 T and F 和 F and T 满足了条件覆盖,但是并没有满足分支覆盖,因为这两个的结果都是 F)
          • 例如:

          • 具体如下图:

        • 4.判定-条件覆盖

          • 判定-条件覆盖是判定和条件覆盖设计方法的交集,即设计足够的测试用例,是的判断条件的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次。
          • 如下图:

          • 上图的测试用例结合起来就满足了判定-条件覆盖。
          • 判定-条件覆盖不一定覆盖所有情况。
        • 5.条件组合测试

          • 条件组合测试的基本思想是设计足够的测试用例,是得判断中每个条件的所有可能组合至少出现一次,并且每个判断本身的判定结果也至少出现一次。
          • 它与条件覆盖的差别是它不是简单地要求每个条件都出现“真”与“假”两种结果,而是要求让这些结果的所有可能组合都至少出现一次。
          • 如图: