错误隐藏在角落里、集聚在边界处 ----Boris Beizer
白盒测试是看源代码的,静态分析和动态分析
程序结构主要有3种 顺序结构、分支结构、循环结构

- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- int main(int argc,char* argv[])
- {
-
- double a,b,x;
- cin>>a>>b>>x;
- if((a>1)&&(b==0))
- x=x/a;
- if((a==2)||(x>1))
- x=x+1;
- cout<<x;
- return 0;
-
- }

就是将程序的每个分支都走一遍
就比如上面的代码,case1:(A=2,B=0,X=2)就可以做到语句覆盖
类似于
两个条件,两个都满足,一个满足 就完成了判断覆盖
Case1: (A=2,B=0,X=3)
Case2: (A=1,B=0,X=1)
当然,还有另外的选择
case4:(A=3,B=0,X=3)
Case5: (A=2,B=1,X=1)
第一个条件a>1 有四种情况,就是a>1为真的,或者a>1为假的,b=0为真的,b=0为假的。
同理,第二个条件,也是有四种情况
自然条件覆盖用例也可以为:
其中第1、2、3、4个用例覆盖了if语句中的所有条件分支,第5、6、7、8个用例覆盖了第二个if语句中的所有条件分支。
根据给出的代码,我们可以列出以下判定条件:
那么我们可以列出以下四个用例:
对于第一个用例,判定条件1不成立,判定条件2成立,输出x+1=1。 对于第二个用例,判定条件1不成立,判定条件2不成立,不执行任何操作,输出x=0。 对于第三个用例,判定条件1成立,判定条件2成立,执行x=x+1=3操作,输出x=3。 对于第四个用例,判定条件1不成立,判定条件2不成立,不执行任何操作,输出x=1。
因此,四个用例分别覆盖了两个判定条件的所有情况。
接下来就是设计测试用例:

SABCDE
SACDE
SACE
SABCE
如果我不解释上面的图,你们肯定会认为,我给出的用例是有问题的。
它这个图的解释是,只要到了B,就说明第一个条件是对的,同理只要到了D,第二个条件就是对的,反过来,没有到就是没有B,就是第一个条件是错的。
总之,我个人认为书上这个图是很s “b”的
可以看出四条路径,再按照这四条路径出用例就是了
a=2,b=0,x=2 SABCDE
a=1,b=9,x=3 SACDE
a=3,b=0,x=0 SABCE
a=-1,b=9,x=-1 SACE

控制流图就长右边这样
假设程序为这个:
- 1、if a or b
- 2、x
- 3、else
- 4、y

有时候,过程两个东西会放在一起,只要没有分支就行了,就比如说上上的图的2,3放在一起,等等