软件测试概念
什么是软件测试?
软件测试就是使用人工或者自动手段来运行测试系统,并发现问题,解决问题的过程,其目的在于检 验他是否满足规定的需求或弄清预期结果与实际结果之间的差别。
测试法则
功能 、可靠性(安全方向) 、易用性(弱势群体)、效率 、可维护性 、可移植性(兼容性)
测试的目的
测试是为了发现系统中的错误而执行程序的过程。
测试对象
软件测试对象:程序、数据、文档、过程、硬件、网络
测试阶段
单元测试->集成(接口)测试->系统测试(可视化阶段)->验收测试(内测Alpha、公测Beta)
软件测试的分类
按 开发阶段来说,分为单元,集成,系统,验收。
按 测试技术来说,分为黑盒(功能和数据),白盒(结构和逻辑),灰盒(输入和输出的正确性,通过一些特征性现象,事件,标志来判断内部的运行状态)。
按 实际运行来说,分为静态和动态测试。
按 实施组织来说,分为开发测试(验收测试,α测试),客户测试(β测试),第三方测试(独立测试)。
测试原则
不可能进行完全测试
软件测试是有风险的行为
测试无法显示潜在的测试缺陷
充分注意软件缺陷的群集现象
要避免软件测试的杀虫剂现象
并非所有bug都是需要修复的
尽早和不断进行软件测试
测试模型
V模型
W模型
H模型
在H模型中,测试是一个独立的流程。贯穿于整个产品周期中,可以与其他的流程同步进行,当某个测试时间点就绪时,软件测试就从准备阶段进入执行阶段。
X模型
X模型左侧显示的是针对单独程序片段所进行的相分离的编码和测试,进行频繁交接后,集成成一个最终可执行的程序在对这些可执行程序进行测试。
测试用例
测试用例定义
测试用例是一组测试输入、执行条件和预期结果的集合,目的是满足一个特定的目标,比如执行一条特定的程序路径和检验是否符合一个特定的数据。
测试用例特点
一、测试用例具有代表性
二、测试结果是可判定
三、测试结果可以再现
测试用例设计的原则
一、使用成熟的测试方法来设计测试用例
二、保证测试用例数据的正确性和操作的正确性
三、确保测试用例具有一定的代表性
四、每个测试用例都应针对单一的测试项
五、保证测试结果是可以判定的和复现的
六、保证测试用例描述的清晰、准确、具体
七、测试用例应满足项目的时间、人员和资金要求
黑盒测试测试方法
常见的错误类型
一、检查程序功能能否按需求说明书的规定正常使用,测试各个功能是都有遗漏,检测性能等特性要求是否满足。
二、检测人机交互是否错误,检测数据结构或外部数据库访问是否错,程序是否能适当接收输入数据而产生正确的输出结果,并保持外部信息(数据库或者文件)完整性;
三、检测程序初始化和终止方面的错误。
测试方法
一、等价类划分法
标准等价类(只考虑有效数据,不考虑无效数据)
健壮等价类(考虑无效等价类,有效等价类只取一个值)
原则:按区间划分、按数值划分、按数值集合划分、按限制条件或规则划分、细分等价类
二、边界值分析法
原则:
(1)输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及超越这个范围边界的值作为测试数据。
(2)输入条件规定了值的个数,则用最大个数,最小个数,比最小个数-1,比最大个数+1的个数作为测试数据。
(3)将规则(1)(2)应用于输出条件,即设计测试用例使输出值达到边界值左右的值。
(4)如果程序的规格说明给出的输入域和输出域是有序集合,则应取集合中的第一个元素和最后一个元素作为测试数据。
(5)如果程序中使用了一个内部数据结构,应当选择这个数据结构中的边界上的值作为测试数据。
(6)分析规格说明书,找出其他可能的边界条件。
三、决策表法
优点:
能够将复杂的问题按照各种可能的情况全部列出来避免遗漏。利用决策表能够设计出完整的测试用例集合。运用决策表设计测试用例可以将条件理解为输入,动作为输出。
适用范围:
(1)规格说明以决策表的形式给出,或较容易转换为决策表;
(2)条件的排列排序顺序不会也不应影响执行操作;
(3)规则的排列排序顺序不会也不应影响执行操作;
(4)当某一个规则的条件已经满足,并确定要执行的操作,不必校验别的规则;
(5)当某一规则的条件要执行多个操作任务,这些操作的执行顺序无关紧要;
(6)if-else逻辑:恒等 if a then b ;非 if (not a)then b;或 if(a or b )then c ; 与if(a and b)then c
(7)输入变量之间存在逻辑关系
(8)涉及输入变量子集的计算
(9)输入与输出之间存在因果关系
四、因果图法
因果图适合解决输入条件组合复杂的情况。通常Ci表示原因,Ei表示结果。
因果图的主要关系:
恒等: 若C1 = 1 ,则E1 =1 ,否则E1 =0;
非:若 C1 =1 ,则E1 = 0,否则 E1 = 1;
或:若C1或C2或C3=1,则E1=1,否则E1 =0 或者是其他任意个输入;
与:C1和C2 =1,则E1=1,否则E1=0与也有可能是任意个输入 。
输入状态相互之间存在的某些依赖关系叫“约束”,存在以下几种约束:
(1)E约束(异):A和B中最多有一个可能为1,即A和B不能同时为1;
(2)I约束(或):A,B,C至少有一个必须是1,即A,B,C不能同时为0;
(3)O约束(唯一):A,B必须有一个且仅有一个1;
(4)R约束(要求):当A为1时,B必须为1;
输出条件的约束只有一个:
(1)M约束(强制):若结果A为1时,则结果B 强制为0。
五、场景法
白盒测试
白盒测试(逻辑驱动测试)主要是内部逻辑测试为主。
白盒测试可分为静态测试(不执行程序情况下,软件系统的描述、表示和规格上的错误)和动态测试(执行程序,主要包括逻辑覆盖、基本路径法等)。
白盒测试方法
一、静态测试法(代码审查、代码走查、桌面检查)
二、逻辑覆盖法(语句覆盖法、判定覆盖法、条件覆盖法、判定-条件覆盖法、组合-条件覆盖法、路径覆盖法)
三、基本路径法(控制流图、环形复杂度、独立路径)
四、循环测试法
五、程序插桩技术
六、最少测试用例数计算(控制结构简化、估算方法)
单元测试
所谓的“单元”的意思:具有明确的功能、具有明确的规格定义、具有与其他部分明确的接口定义、能够与程序的其他部分清晰的区分。
单元测试定义
单元测试又称为模块测试,是最小单位的测试,其依据是详细设计规格说明书,对模块内所有重要的控制路径设计测试用例。单元测试多采用白盒测试技术,系统内多个模块可以并行地进行单元测试。
单元测试对象
单元测试所说的单元是指函数,在面向对象编程中,单元测试的单元是指类。