0%

软件测试

链接: https://pan.baidu.com/s/1BWtrXszBZuQsIQbsdVfLDw 密码: f5bo

软件测试定义及基本概念

测试是为了证明程序有错,通过运行程序发现其中存在的问题。
• 软件测试可以证明软件有错;
• 软件测试不可以证明软件没有错

使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别

缺陷在软件开发每个阶段都会产生,所以软件测试应该贯穿软件开发始终

Debug不属于测试,属于开发调试

Fault, Error & Failure

Fault的定义:软件中的静态缺陷,可能导致系统或功能失效的异常条件(Abnormal condition that can cause an element or an item tofail.),可译为“故障”。

Error的定义:错误的内部状态是某些故障的表现,计算、观察或测量值或条件,与真实、规定或理论上正确的值或条件之间的差异(Discrepancy between a computed, observed or measured value or condition and the true, specified, or theoretically correct value or condition.),可译为“错误”。Error是能够导致系统出现Failure的系统内部状态。

Failure的定义:关于预期行为的要求或其他描述的外部不正确行为,当一个系统不能执行所要求的功能时,即为Failure,可译为“失效”。(Termination of the ability of an element or an item to perform a function as required.)

 举例

  病人告诉医生自己的各种症状,身体没有健康地工作 – Failures

  医生想找出疾病的根源,如病毒 – Fault

  病人身体状态异常,比如血压较高,心跳不规律等 – Errors

2021 05 23 14 23 02屏幕截图

2021 05 23 14 23 17屏幕截图

2021 05 23 14 23 32屏幕截图

2021 05 23 14 24 01屏幕截图

2021 05 23 14 24 42屏幕截图


2021 05 23 14 30 37屏幕截图

Fault is defined by fixing

2021 05 23 14 31 32屏幕截图

Fault is defined by testing!

2021 05 23 14 31 53屏幕截图

2021 05 23 14 32 11屏幕截图

2021 05 23 14 32 36屏幕截图

2021 05 23 14 32 50屏幕截图

2021 05 23 14 18 53屏幕截图

软件测试级别

单元测试(组件测试)

• 集成测试

• 系统测试

• 验收测试

• 维护测试

2021 05 23 14 44 20屏幕截图

从测试方法会不会关注程序内部的结构可以将其划分为:白盒测试、黑盒测试和灰盒测试,黑盒测试不关注程序内部的实现结构,仅仅是通过向程序进行输入来观察程序的输出对不对;白盒测试就需要关注程序内部的实现结构,对程序的代码逻辑结构实施相关的测试

白盒测试

结构覆盖

2021 05 24 20 39 37屏幕截图

Control Flow Graph&and Its Coverage

控制流图及其覆盖

2021 05 26 17 01 24屏幕截图

2021 05 26 17 01 42屏幕截图

2021 05 26 17 02 09屏幕截图

2021 05 26 17 02 23屏幕截图

2021 05 26 17 02 38屏幕截图

2021 05 26 17 03 36屏幕截图

语句覆盖/代码行覆盖:目标保证程序中每一条语句最少执行一次,其覆盖标准无法发现判定中逻辑运算的错误;

判定覆盖/分支覆盖:是指选择足够的测试用例,使得运行这些测试用例时,每个判定的所有可能结果至少出现一次,

                             但若程序中的判定是有几个条   件联合构成时,它未必能发现每个条件的错误;

条件覆盖:是指选择足够的测试用例,使得运行这些测试用例时,

              判定中每个条件的所有可能结果至少出现一次,但未必能覆盖全部分支;

条件组合覆盖:是使每个判定中条件结果的所有可能组合至少出现一次,因此判定本身的所有可能解说也至少出现一次,

                   同时也是每个条件的所有可能结果至少出现一次;

路径覆盖: 是每条可能执行到的路径至少执行一次,试图覆盖软件中的所有路径;

语句覆盖是一种最弱的覆盖,

判定覆盖和条件覆盖比语句覆盖强,满足判定/条件覆盖标准的测试用例一定也满足判定覆盖、条件覆盖和语句覆盖,

路径覆盖也是一种比较强的覆盖,但未必考虑判定条件结果的组合,并不能代替条件覆盖和条件组合覆盖。

条件组合覆盖是除路径覆盖外最强的

二、测试的时候:

条件组合覆盖为主, 路径覆盖为辅

三、帮助理解的小例子(借鉴他人)

  if A and B then Action1 
  if C or D then Action2 

①语句覆盖最弱,只需要让程序中的语句都执行一遍即可 。上例中只需设计测试用例使得A=true B=true C=true 即可。

②分支覆盖又称判定覆盖:使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假均曾被满足。上例需要设计测试用例使其分别满足下列条件即可(1)A=true,B=true,C=true,D=false(2)A=true,B=false,C=false,D=false。

③条件覆盖:要使得每个判断中的每个条件的可能取值至少满足一次。上例中第一个判断应考虑到A=true,A=false,B=true,B=false第二个判断应考虑到C=true,C=false,D=true,D=false,所以上例中可以设计测试用例满足下列条件(1)A=true,B=true,C=true,D=true(2)A=false,B=false,C=false,D=false。
④路径覆盖:要求覆盖程序中所有可能的路径。所以可以设计测试用例满足下列条件(1)A=true,B=true,C=true,D=true(2)A=false,B=false,C=false,D=false(3)A=true,B=true,C=false,D=false(4)A=false,B=false,C=true,D=true。

主路径/基本路径覆盖

主路径覆盖

2021 05 24 21 52 34屏幕截图

2021 05 24 22 58 12屏幕截图

2021 05 24 21 53 10屏幕截图

2021 05 24 21 54 36屏幕截图

2021 05 24 21 56 54屏幕截图

2021 05 24 21 57 06屏幕截图

基本路径覆盖

程序的环路复杂性:程序基本路径集中的独立路径数量,这是确保程序中每个可执行语句至少执行一次所必需的测试用例数目的上界。

CC=E-V+2

独立路径:至少包含有一条在其它独立路径中从未有过的边的路径。

Data Flow Coverage

2021 05 25 23 03 18屏幕截图

2021 05 24 22 54 43屏幕截图

2021 05 25 22 53 10屏幕截图

变异测试

变异测试是一种 fault-based 的软件测试技术。这项技术已经广泛研究并使用了三十余年。它为软件测试贡献了一系列方法,工具,和可靠的结果。本文将对变异测试进行深入的调查,分析它的优势和不足之处,并对比几种不同的变异测试方法,提出一些改进的建议。

  下面用一个例子来解释什么是变异测试,考虑以下代码片段:

  if(a && b) c = 1;

  else c = 0;

条件运算符如果用||来替换&&,就会产生以下变异:

 if(a || b) c = 1;

 else c = 0;

为了杀死这个突变,需要满足以下条件:

(1)测试数据必须对突变和原始程序引起的不同状态覆盖。如:a=1,b=0可以达到目的。

(2)c的值应该传播到程序输出,并被测试检查。

弱突变覆盖需满足(1),强突变覆盖需满足(1)(2)。

271335490794607

自动化测试

黑盒测试

随机测试

随机测试(random testing,RT):首先定义程序的输入域,然后在输入域上随机选择一些点作为测试用例,比较方便实现测试的自动化。但也有一些问题:

(1)输入域的定义(define input domain):首先需要详细分析文档,选择合适的输入域

(2)随机数生成(generate random sequence):计算机系统中很难得到真正的随机数,作为替代可以采用伪随机数的生成算法,使用这些算法时需要给定合适的算法种子(random.org网站生提供了随机数生成的服务)

比较特殊的随机测试技术—模糊测试(Fuzz testing)

模糊测试可以看作是随机测试的一种特殊应用,主要应用于软件安全性测试。需要构建非法的输入攻击软件使软件崩溃。

2.

随机测试很简单,但是由于不考虑任何其他类型的信息可能会导致错误检测效率的降低。

自适应随机测试(ART): 导致程序出错的测试用例有聚集性的特点,例如矩形状分布(block),条带状分布(strip)和散点状分布(points)。前两者可以用用测试用例聚集性的特征来提高测试效率(近朱者赤近墨者黑,a passed test,nearby tests may ba passed; a failed test, nearby tests may be failed. ),提示在随机测试中选择测试用例时可以到尽可能远的地方选择,即自适应随机测试(Adaptive random test,ART)的特性。

固定候选集的自适应随机测试算法(FSCS-ART algorithm):首先随机生成第一条测试用例,如果测试终止条件(寻找到错误或者测试资源耗尽)不满足,选择下一条测试用例时首先随机生成k个候选测试用例(c1……ck),然后对于每个ci计算其与已有测试用例的距离,选择距离最大的ci,运行这条测试用例,以此类推,直到测试终止条件满足。

ART可以有效提高软件测试的效率,加快发现错误的速度,但也存在一些问题:

(1)测试用例之间距离(distance)的定义,需要分析程序的规格说明;

(2)考虑测试用例的分布情况(sampling):随机测试中测试用例在输入域中的分布是均匀的,自适应随机测试可能不满足这一需求。测试用例数量庞大时,大量测试用例聚集于输入域边界附近,为此提出了一种扩大输入域的自适应随机测试技术,首先人为扩大输入域,然后在扩大的输入域使用自适应随机测试,则大量测试用例会集中于扩大后的输入域,然后将扩大的输入域剪切,这样在剩下的区域中测试用例的分布依然均匀。

(3)前面都是连续输入域,输入域不连续呢?Anti-Random Testing:首先随机选择第一条测试用例,选择第二条测试用例使需要计算测试用例与已有的测试用例的hamming距离之和,选择距离之和最大的,以此类推,直到终止。

等价类划分

一个等价类或者等价划分是指测试相同目标或者暴露相同软件缺陷的一组测试用例

在寻找等价划分时,考虑把软件具有相似输入、相似输出、相似操作的分在一组。这些组就是等价划分

2021 05 25 19 55 27屏幕截图

边界条件/次边界条件

2021 05 25 20 00 47屏幕截图

次边界条件:2的幂,ASCII表

2021 05 25 20 07 12屏幕截图

2021 05 25 20 05 52屏幕截图

组合测试

变量之前可能有联系

暴力解决,所有变量等价类相乘

2021 05 25 20 12 54屏幕截图

复杂度太高

两两组合

2021 05 25 20 13 10屏幕截图

t-ways

2021 05 25 20 13 30屏幕截图

多变量

2021 05 25 20 15 29屏幕截图

决策表

决策表是设计黑盒测试,检查产品在输入变量各种逻辑条件的行为的宝贵工具

决策表的优点:能够将复杂的问题按照各种可能的情况全部列举出来,简明并避免遗漏。因此,利用决策表能够设计出完整的测试用例集合。
在一些数据处理问题当中,某些操作的实施依赖于多个逻辑条件的组合,即:针对不同逻辑条件的组合值,分别执行不同的操作。决策表很适合于处理这类问题。

2021 05 25 20 34 38屏幕截图

2021 05 25 20 34 58屏幕截图

2021 05 25 20 35 17屏幕截图

2021 05 25 20 35 28屏幕截图

集成测试

1. 系统集成的模式与方法

1.1 集成测试前的准备

1.2 集成测试的模式

渐增式测试模式与非渐增式测试模式 

非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。

渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。

1.3 自顶向下和自底向上集成方法

2021 05 26 16 30 14屏幕截图

2021 05 26 16 30 38屏幕截图

2021 05 26 16 30 56屏幕截图

1.4 大棒与三明治集成方法

2021 05 26 16 31 18屏幕截图

2021 05 26 16 31 51屏幕截图

1.5 持续集成

2. 功能测试

目的和内容:

程序安装、启动正常,有相应的提示框、错误提示等
每项功能符合实际要求
系统的界面清晰、美观
菜单、按钮操作正常、灵活,能处理一些异常操作
能接受正确的数据输入,对异常数据的输入有提示、容错处理等
数据的输出结果准确,格式清晰,可以保存和读取
功能逻辑清楚,符合使用者习惯
系统的各种状态按照业务流程而变化,并保持稳定
支持各种应用的环境
能配合多种硬件周边设备
软件升级后,能继续支持旧版本的数据
与外部应用系统的接口有效

相关的测试类型:

正确性
产品功能是否与需求和设计文档一致
可靠性
用户交互是否引发软件崩溃和其它异常
易用性
软件产品完成特定任务的难易程度

3. 回归测试

回归测试的目的
所做的修改达到了预定的目的,如错误得到了改正,新功能得到了实现,能够适应新的运行环境等;
不影响软件原有功能的正确性。

回归测试的方法
再测试全部用例
基于风险选择测试
基于操作剖面选择测试
再测试修改的部分

4. 非功能性测试

性能测试
压力测试
容量测试
安全性测试
可靠性测试
容错性测试

系统测试

验收测试

验收测试(Acceptance Test):在软件产品完成了功能测试和系统测试之后、产品发布之前所进行的软件测试活动它是技术测试的最后一个阶段,也称为交付测试。

-------------本文结束感谢您的阅读-------------
Your support will be the driving force of my creation