一、静态测试技术-代码检查

1.静态测试时在不运行代码的情况下,通过一组质量准则或其他准则对测试项进行检查的测试,成本更低、效率较高,更重要的是可以在软件生存周期的早期阶段发现软件的缺陷

2.代码检查常见形式:

  1)代码审查:代码审查的目的是检查代码和设计的一致性,代码执行标准的情况,代码逻辑表达的正确性,代码结构的合理性以及代码的可读性

  2)代码走查:由测试人员组成小组,准备一批有代表性的测试用例,集体扮演计算机的角色,沿程序的逻辑,逐步运行测试用例,查找被测软件缺陷

3.在实际使用中,代码检查能快速地找到软件缺陷,而且代码检查看到的是软件缺陷本身而费表面的故障现象

4.常见的代码检查项目包括:检查变量的交叉引用表、检查标号的交叉引用表、检查子程序、宏、函数,等价性检查、常量检查、标准检查、风格检查

比较流控制、选择激活路径、对照程序的规格说明,详细阅读源代码,逐字进行分析和思考,比较实际的代码和期望的代码,从他们的差异中发现程序的问题和错误

5.静态分析测试工具可以提供如下的常见辅助分析

6.控制流分析:一种常见的控制流分析方法是通过生成程序的有向控制流图来对代码进行分析,控制流图使用如图的流图符号来描述逻辑控制流,其中用圆形节点表示基本代码块,节点间的有向边代表控制流路径,反向边白哦是可能存在的循环

 

 

7.一个共识程序的可能错误和高的圈复杂度有相关(非因果)关系,尽可能不超过10,一些特定情形下,圈复杂度上限可放宽到15

8.使用函数间的嵌套关系,并据此计算函数的扇入和扇出值,扇出过大一般是因为缺乏中间层次,应该适当增加中间层次的模块,扇出太小时,可以把下级模块进一步分解成若干个子功能模块或者合并到上级模块中去

9.数据流分析:数据对象的顺序和可能状态的抽象表示

10.数据流分析的作用时用来测试变量设置点和使用点之间的路径,也称为定义-使用,能快速发现软件的定义和使用异常方面缺陷

11.接口分析:接口一致性是程序的静态错误分析和设计分析要共同研究的题目,接口一致性的设计分析可以检查模块之间接口的一致性和模块与外部数据库接口的一致性

12.接口静态错误分析:检查过程与实参在类型、函数过程之间的一致性,因此要检查形参与实参在类型、数量、维数、顺序、使用上的一致性,检查全局变量和公共数据在使用上的一致性

13.表达分析:发现和纠正在表达式中出现的错误

 

 

 二、动态测试技术

1.基于结构的动态测试要关注语句、分支、路径、调用等程序结构的覆盖,为了设计较少的用例,达到更高的覆盖率甚至100%的覆盖率,动态测试关键是用例设计

2.基于结构的动态测试用例设计,设计基础是建立在对软件程序的控制结构的了解上,原则:

  保证一个模块中的所有独立路径至少被使用一次

  对所有逻辑值均需测试true和false

  在上下边界及可操作范围内运行所有循环

  检查内部数据结构以确保其有效性

3.常见的测试用例设计方式可以分基于控制流和数据流两大类

三、动态测试技术-基于控制流

1.基于控制流设计用例,是通过对程序控制流所表达出来的逻辑结构的遍历,实现对程序不同程度的覆盖,并认为当所选择的用例能达到对应程度的覆盖时,执行这些用例能够达到期望的测试效果

 

 2.基于控制流设计的用例里,测试特征集都是被测的代码段。

 

 3.语句测试,选择足够多的测试数据,使被测程序中每条语句都要被经历到

 

 

 

 

 4.分支测试

 

 5.判断测试

 

 6.条件覆盖

 

 7.分支条件测试

 

 8.分支组合测试

 

 9.修正条件判定测试MCDC,要满足两个条件,首先,每一个程序模块的入口和出口点都要考虑至少被调用一次,每个程序的判断到所有可能的结果值知道转换一次,其次,程序的判断被分解为通过逻辑操作符连接的bool条件,每个条件对于判定的结果值都是独立的

 

 

 四、动态测试技术-基于数据流

1.基于数据流设计测试用例时通过选择的定义-使用的覆盖率来导出测试用例集,以覆盖测试项中变量定义和使用之间的路径,

  定义可能变量赋了新的值,使用是变量出现,但不是赋新的值,计算使用是指一个变量作为其他变量定义或输出的计算输入

 

 2.基于数据流设计测试用例时,对应的测试条件是其中的定义-使用对,需要识别定义列汇总的每个条目到该变量的谓词使用或计算使用列的每个条目之间的路径,如表示的每个定义-使用对就是一个测试条件,共计16个测试条件

 五、基于机构的辅助测试技术

1.词法分析和语法分析

2.程序插桩技术,借助被测程序中插入操作,来实现测试目的的方法,插入内容也称为桩模块

3.程序驱动技术,也称驱动模块,在测试时能传递数据给模块,而且能接收模块已处理过的数据,以使模块运行

 

 六、基于结构测试的综合策略

1.尽量先用工具对被测软件进行静态分析

2.采取先静态后动态的组合方式

3.覆盖率是对动态测试用例设计是否充分的监督

4.常规软件测试应达到语句和分支/判断测试均100%覆盖,对于一些高安全的软件可能需要达到MCDC测试覆盖100%覆盖

5.不同测试阶段,测试的重点不同,在单元测试阶段,以代码检查,编码规则检查和动态测试为主,在系统测试阶段,在使用编码规则检查和静态分析度量工具对代码进行扫描检查后,主要根据黑盒测试结果,采取相应的白盒测试作为补充

posted on 2021-09-26 14:26  丝瓜123  阅读(514)  评论(0)    收藏  举报