白盒测试之代码审查


测试有点像挖井打水,有的人在一个地方,有的人因为土质松软在另外一个地方打水,是一门广撒网的学科

白盒测试分为两个层级:代码审查和单元测试

代码审查

能看懂逻辑即可,并能发现一些问题,在研发发起的代码审查这种会议中起到校验的作用

代码审查的范围
合格的代码应具备正确性、清晰性、规范性、一致性和高效性(高效性:代码要尽量少的复制性代码,高内聚低耦合)
◆概括起来,代码审查的工作涵盖下列方面

1.业务逻辑的审查
比如点餐app到支付宝进行付款,如果支付宝发生了问题产生了当机,可能会超时无法支付,那么在测试的时候可能会无法发现这种问题,所以需要查看 业务逻辑来排查问题
2.算法的效率(空间复杂性,时间复杂度衡量)
3.代码风格
4.编程规则

代码审查的方法
互查:就是在相同模块或相近模块的编程人员之间互相检查对方的代码(敏捷中的结对编程)
走查:从头到尾将写好的程序检查-一遍
代码审查(开会,在会议里按照一定规则对代码进行审查)

代码审查的规则

◆Java最基本语句的使用

重载函数的审查(针对重载要看是否重载正确)

◆**内存分配和管理:**当进行内存分配和管理时,很重要一点就是确保内存的及时释放和避免缓冲区溢出。()(可以在代码中打一些内存回收等,方便后续发现问题的定位)

程序性能的审查
1.减少创建对象(是否每次都new出了大量的对象)
2.减少循环体的执行代码,能放在循环体外的代码要尽量放在循环体外
3.提高处理异常出错的效率
4.减少I/O操作时间(尽量少和外界交互)

单元测试

针对单元测试如何进行逻辑覆盖

单元测试
**单元测试是软件测试中最基础的测试,集成测试、功能测试和系统测试都建立在单元测试之上,**单元测试的对象是构成软件产品或系统的最小的独立单元,如封装的类或对象、独立的函数、进程、子过程、组件或模块等(百分之99单元测试都是开发来做的 )
**单元测试是对软件中的最小可验证单元进行检查和验证。**比如对Java中的类和方法的测试。

测试原则:
1、尽可能保证测试用例相互独立(测试用例中不能直接调用其他类的方法,而应在测试用例中重写模拟方法);
2、此阶段一般由软件的开发人员来实施,用来自我测验。用以检验所开发的代码功能符合自己的设计要求。

单元测试的好处:
1、尽早的发现缺陷;
2、利于重构;
3、简化集成;
4、文档;
5、用于设计。

单元测试的不足:
1、不可能覆盖所有的执行路径,所以不可能保证捕捉到所有路径的错误;
2、每行代码需要3~5行代码进行单元测试,存在投入与产出的平衡。

单元测试用例设计

◆对于单元测试用例的设计和程序的实现过程,主要集中在白盒测试方法之上,并力求达到下列测试要求

  1. 对程序模块所有独立的执行路径至少要测试一 次。
    2.对所有逻辑判定, 其结果为真、假两种情况至少要测试一次。
    3.对程序进行边界检查 (常见的如数据越界检验)。
    4.检验内部数据结构的有效性。(数据库的设计结构是否能达到要求)

白盒测试方法之逻辑覆盖法

(用代码去校验代码应该如何做)
逻辑覆盖法是白盒测试中最主要的测试方法
逻辑覆盖分为语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖, 其本思想不同,产生的测试用例不同,覆盖范围也有所不同

举例说明如何理解逻辑覆盖法:
有代码如下:
在这里插入图片描述
代码逻辑用线框流程图转化下:

在这里插入图片描述

语句覆盖(最早出现的逻辑覆盖方法)

◆基本思想:设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执一次。
由上述逻辑图可得程序模块有四条不同的路径:
两个判定条件是true或者false的不同来判定路径
在这里插入图片描述

通过观察,我们发现: P1包含了所有可执行语句,按照语句覆盖的测试用例设计原则,只要设计一组测试用例覆盖PI路径,就可达到要求
◆解决: 如输入数据: a=2,b=1, c=6

语句覆盖的不足
◆在使用语句覆盖法进行测试用例设计时,能够使得所有的执行语句都被测试,但是不能准确判断运算中的逻辑关系错误。
◆在这个例子中,如果程序将M的条件"(a>0 AND b >0)“写成.”(a>0 OR b>0)",这时的测试用例仍然可以覆盖所有可执行语句,但不能发现其中的逻辑错误

判定覆盖

◆基本思想:是使每个判断的取真值和取假值都至少经历一次
在这里插入图片描述
在这里插入图片描述

判定覆盖的限制
例如,在上面的例子中,如果条件N中是"c<1" 而不是’c>1"则组合1的测试结果没有差别。

条件覆盖

◆基本思想:是使每个条件的取真值和取假值都至少经历一次
在这里插入图片描述
那么:
对于第一个判定条件M,可以进一步分为以下两种:
条件a>0:取真时为T1,取假时为F1
条件b>0:取真时为T2,取假时为F2
对于第二个判定条件N,可进一步分为以下两种:
●条件a>1:取真时为T3,取假时为F3
●条件c> 1:取真时为T4,取假时为F4

在这里插入图片描述
◆保证每个条件至少有一次取真、取假( TI/FI,T2/F2, T3/F3T4/F4),满足条件覆盖,但是覆盖了相同的路径P3。说明即使做到条件覆盖,也不能保证覆盖所有路径(PI、P2、P3和P4),可以观察出上面的取值条件将会永远是对于判定条件来说M为false,N为true。通过的路径反而更单一了
◆**测试用例满足看似更复杂、要求更高的条件覆盖,事实上也不一定能满足判定覆盖的要求。**这里,每个条件至少有一次取真、取假(TI/FI, T2/F2, T3/F3, T4/F4)。而M只获得假值、N只获得真值,不是每个判定条件(M或N)“真”,“假"值至少被执行一次。

解决方法:
只是满足一种覆盖条件,还会遗漏程序逻辑路径或判定错误,依旧存在较大风险。所以,白盒测试要求同时满足两种以上的测试覆盖要求,测试的覆盖率才能满足质量要求,将风险降到很低。

判定-条件覆盖

基本思想:确保设计足够或精巧的测试用例,可使得判断条件中所有条件的可能取值至少被执行一次, 同时,所有判断的可能结果也至少被执行一次。

在这里插入图片描述

每一个判定条件都是true。同时每一个判定语句也是true
每一个判定条件都是false。同时每一个判定语句也是false
但是仍然没有走完所有路径

条件组合覆盖

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

(和条件判定的区别是。加了组合的概念。两个条件,每个都是true或者false,就会生成四种组合)
在这里插入图片描述

决定测试覆盖的范围,来决定逻辑覆盖的方法。(至少做到判定条件覆盖)

发布了82 篇原创文章 · 获赞 7 · 访问量 4170

猜你喜欢

转载自blog.csdn.net/sunshine612/article/details/105420816