白盒测试 - 代码审查、逻辑覆盖
代码审查的范围
- 业务逻辑
- 算法效率
- 代码风格
- 编程规则
代码审查的方法
- 互查:模块相同或相近的编程人员之间互相检查。
- 走查:从头到尾将模块检查一遍。
- 代码审查:会议校验
代码审查的规则
- java基础语句的使用(不同类型数据的等于)
- 重载函数的审查:同名函数不同功能(改变参数个数和类型)
- 内存分配和管理:保证内存的及时释放和避免缓冲区溢出
- 程序性能的审查
(1)减少创建对象
(2)减少循环体的执行代码,能在循环体外的代码尽量放在循环体外
(3)提高处理异常出错的效率
(4)减少I/O读取操作时间
单元测试属于白盒测试范畴。
单元测试:是软件测试中最基础的测试,集成测试、功能测试和系统测试都建立在单元测试之上。
单元测试的对象:是构成软件产品或系统的最小的独立单元,如封装的类或对象、独立的函数、进程、组件或模块等。
单元测试用例设计
- 对程序所有独立的执行路径至少测试一次
- 对所有逻辑判断,真假情况至少各测试一次
- 对程序进行边界检查
- 检验内部数据结构的有效性(数据库设计与结构)
白盒测试方法:逻辑覆盖法(主要测试方法)
逻辑覆盖分为:语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖(由弱到强)
转换为
-
语句覆盖:使程序每条可执行语句至少被执行一次。但不能准确判断运算中的逻辑关系错误(a>0 or b>0)。
P1: (M-K-N-J-P) 语句覆盖最全的路径,MTNT
P2: (M-N-P) ,MFNF
P3: (M-K-N-P) ,MTNF
P4: (M-N-J-P) ,MFNT -
判断覆盖:使每个判断的真假值都至少各执行一次(判断MN的真假)。但会忽略一些情况(只要考虑到a>1,b的取值正负不会影响下面的组合)。
M={a>0 and b>0},N={a>1 or c>1}
2T 2F 都需要顾及到,选择以下其中一种即可。
组合1:P1+P2 全T+全F
组合2:P3+P4 TF+FT -
条件覆盖:使每个条件的真假值都至少执行一次(判断MN里每个条件的真假)。但不能保证覆盖所有路径。
条件a>0:取真为T1,取假为F1
条件b>0:取真为T2,取假为F2
条件a>1:取真为T3,取假为F3
条件c>1:取真为T4,取假为F4
不一定要经过所有路径,但要覆盖所有条件的TF。
如以下两次用例可满足:(and F or T)
P4: (M-N-J-P) ,MFNT,a=1,b=-2,c=-3,T1,F2,T3,F4
P4: (M-N-J-P) ,MFNT,a=-1,b=2,c=3, F1,T2,F3,T4 -
判断-条件覆盖:使用判断条件的取值至少被执行一次,同时使判断条件中所有条件的所有取值也至少被执行一次。
如:P1+P2(全T+全F)
P1: (M-K-N-J-P) ,MTNT,a=2,b=2,c=4,T1,T2,T3,T4
P2: (M-N-P) ,MFNF,a=-1,b=-1,c=-1,F1,F2,F3,F4 -
条件组合覆盖:与判断-条件覆盖的区别是,让每个条件的取值的所有可能组合都至少执行一次。
组合:P1+P2+P4(判断-条件覆盖+条件覆盖)
P1: (M-K-N-J-P) ,MTNT,a=2,b=2,c=4,T1,T2,T3,T
P2: (M-N-P) ,MFNF, a=-1,b=-1,c=-1,F1,F2,F3,F4
P4: (M-N-J-P) ,MFNT,a=1,b=-2,c=-3,T1,F2,T3,F4
P4: (M-N-J-P) ,MFNT,a=-1,b=2,c=3, F1,T2,F3,T4