大三下每日打卡058(软件测试期末复习)

软件测试

 

软件测试的根本目的是:为了提高软件质量,降低软件风险

概念:软件从“出生”到“消亡”的过程,称为生命周期。

1

问题定义

主要确定软件的开发目的和可行性

2

需求分析

作用在整个软件的生命周期中,直接关系到后期的开发成功率

3

软件设计

在需求分析的基础上,对整个软件进行设计

4

软件开发

选择语言开发,指定规范

5

软件测试

查找软件设计和软件开发中的问题并加以修正

6

软件维护

包括纠正性维护和改进性维护两种,在软件生命周期中持续时间最长

软件测试的分类:

1.按照测试阶段来分类

 1)单元测试

 2)冒烟测试

 3)集成测试

 4)系统测试

 5)验收测试

2.按测试技术分类

 1)黑盒测试

 2)白盒测试

 3)灰盒测试

3.按照软件质量特性分类

 1)功能测试

 2)性能测试

4.按照自动化程度分类

 1)手工测试

 2)自动化测试

静态测试和动态测试

1.静态测试不用运行程序,发挥人的逻辑思维,方法有代码审查,代码检查,桌面检查(阅读自己的程序),静态分析等,其实就是自己去读一读代码,看看有没有明显错误,边写边可以静态测试

2.动态测试:代码必须实现后才能进行,要进行测试数据的准备,主要是的方法有黑盒测试,白盒测试,灰盒测试

1.V模型

    描述了基本的开发过程与测试过程,主要反映了测试活动分析与设计之间的关系。

 

 2.W模型

    V模型演变而来,强调测试应伴随整个软件生命周期,有利于尽早的发现问题。

 

 3.H模型

    测试级别不存在严格的次序关系,软件生命周期的各阶段的测试工作可以反复触发、迭代、,即不同的测试可以反复迭代的进行。

 

 4.X模型

    X模型的设计原理是将程序分成多个片段反复迭代测试,然后将多个片段集成再进行迭代测试。

 

软件测试的原则:

1.测试应该基于用户需求

2.测试要尽早进行,开始写代码就可以开始测试了

3.穷尽测试是不可能的

4.遵循GoodEnough原则(测试的投入和产出是平衡的)

5.测试缺陷要符合二八定理(缺陷不是均匀分布的,百分之80%的缺陷分布在20%的模块里)

6.避免定向思维导致的缺陷免疫

 

黑盒测试法的概念:

黑盒测试(也叫功能测试或数据驱动测试):在测试时,把被测程序视为一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下进行。

黑盒测试并不是无知的测试。黑盒测试意味着产品内部知识在测试中不起重要作用。黑盒测试强调有关软件的用户和环境知识。

 

黑盒测试的用例设计方法:

 1.等价类划分

 2.边界值分析

 3.判定表法

 4.因果图法

 5.错误推测法

 6.正交实验法

 7.场景法

1.等价类划分:

1)有效等价类:对于程序的需求规格说明书来说是合理的,有意义的输入数据组成的集合。

2)无效等价类:对于程序的需求规格说明书来说是不合理的,无意义的输入数据组成的集合,无效等价类至少有一个存在。

如何划分等价类?:首先从程序的规格说明书中找出各个输入条件,再为每个输入条件划分两个或多个等价类,形成若干的互不相交的子集。

采用等价类划分法设计测试用例通常分两步进行: 

1)确定等价类,列出等价类表。 

2)确定测试用例。

原则1:在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。

原则2:在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类; 

原则3:在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。(True or False)(奇数 和 偶数)

原则4:在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。

原则5:在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)

原则6:在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。 

  • 1)确定测试对象,保证非测试对象的正确性;
  • 2)为每个等价类规定一个唯一编号;
  • 3)设计有效等价类的测试用例,使其尽可能多的覆盖尚未覆盖的有效等价类;
  • 4)设计无效等价类的测试用例,使其覆盖所有的无效等价类。

 

2.边界值分析:

边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。

边界值不是从等价类里面选一个代表,而是使这个等级类的每一个边界作为测试条件,边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。 

常见的边界值 

 1.对16-bit 的整数而言 -32768 和 32767是边界 

报表的第一行和最后一行 

数组元素的第一个和最后一个 

4)循环的第 0 次、第 1 次和倒数第 2 次、最后一次

边界值分析法利用输入变量的最小值(min)、略大于最小值(min+)、输入值域内的任意值(nom)、略小于最大值(max-)和最大值(max)来设计测试用例。

 

加上健壮性测试就是:除了对变量的5个边界值变量的最小值(min)、略大于最小值(min+)、输入值域内的任意值(nom)、略小于最大值(max-)和最大值(max)分析取值外,还需要增加一个略大于最大值(max+)以及略小于最小值(min-)的取值

边界值法需要4n+1个测试用例

健壮性测试6n+1个测试用例。

3.判定表法:

判定表由四个部分组成:条件桩,动作桩,条件项,动作项还有规则。

条件桩:列出所有问题的条件,通常认为这些条件的顺序无关紧要

动作桩:列出问题规定可能采取的操作,顺序不要求

条件项:列出针对它所列条件的取值

动作项:列出条件项各种取值下应该采取的操作

规则:任何一个条件组合的特定取值及其相应要执行的操作。在判定表中贯穿条件项和动作项的一列就是一条规则。

 

构造判定表的5个步骤:

确定规则的个数。有n个条件的判定表有2n个规则(每个条件取真、假值)

列出所有的条件桩和动作桩。

填入条件项。

填入动作项,得到初始判定表

简化决策表,合并相似规则若表中有两条以上规则具有相同的动作,并且在条件项之间存在极为相似的关系,便可以合并。合并后的条件项用符号“-”表示,说明执行的动作与该条件的取值无关,称为无关条件。

 

 

 

 

决策表优点和缺点优点:

优点:它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。

缺点:不能表达重复执行的动作,例如循环结构。

4.因果图

利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况

 

恒等:若 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

 

E约束(互斥):原因a和原因b中最多有一个可能成立,即a和b不会同时成立。

I约束(包含):a、b、c这三个原因中至少有一个必须成立。

O约束(唯一):原因a和b中必须有一个,且仅有一个成立。

R约束(要求):原因a出现时,原因b也必须出现,a出现时,不可能b不出现。

M约束(强制):若结果a为1,则结果b强制为0。当a为0,b的值不确定

 

 

 

 

 

5.错误推测法:

列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。比如设计一些非法的、错误的、不正确和垃圾数据进行输入测试。比如以前测试中曾经发现的错误,例如输入数据和输出数据为0的情况

6.正交实验法:

是从大量的实验点中挑选出适量的,有代表性的点,应用依据伽罗瓦(Galois)理论导出的“正交表”,合理安排实验的一种科学的设计方法。

 此法包含三个关键因素

指标:判断实验优劣的标准;

因子:所有影响实验指标的条件;

因子的状态:指因子变量的取值;

表格有 5 个因素(音形码、拼音码、路名码、行业类别、特征码),每个因素有 2 个水平(0 和 1)。
完全组合需要 25=3225=32 行

 

 

7.场景法:

分为基本流和备选流

测试用例方法选择的综合策略:

首先进行等价类划分,包括输入条件和输出条件的等价划分,将无限测试变成有限测试,这是减少工作量和提高测试效率最有效的方法

在任何情况下,都必须使用边界值分析法,经验表明,用这种方法设计出的用例,发现程序错误的能力最强

可以用错误推测法追加一些用例,这需要依靠测试工程师的经验

对照程序逻辑,检查出已设计出的测试用例的逻辑覆盖程度,如果没有足够覆盖,应当再补充足够的测试用例

如果程序说明中有输入条件的组合情况,则一开始就可以选用因果图或判定表驱动法设计测试用例

对于参数配置类型的软件,要用正交试验法选择较少的组合方式,达到最佳效果

对于业务流清晰的系统,可利用场景法贯穿整个测试案例过程,在案例中综合使用各种设计方法

白盒测试:

白盒测试又称为透明盒测试、结构测试,它基于程序内部结构进行测试,而不是测试应用程序的功能。

常用的白盒测试技术:

1.逻辑覆盖法(逻辑驱动测试)

2.基本路径测试方法

白盒测试前要先进行黑盒测试

不可能进行彻底的白盒测试

基本路径测试:

1.根据模块逻辑构造控制流图(Flow Graph)

2.计算控制流图的环复杂度 (Cyclomatic Complexity)

3.列出包含起始节点和终止节点的基本路径

4.检查一下列出的基本路径数目是否超过控制流图的环复杂度 

5.设计覆盖这些基本路径的测试用例

 

 

 

 

 

已简单条件为节点的控制流图

如果基本路径必须是可行的,则逻辑关系会压缩基本路径集合数量,因此环复杂度是包含起始点和终止点的基本路径数目的上限

试覆盖率越高效果越好。但覆盖率不是目标,只是一种手段。 

语句覆盖:选择足够多的测试用例,使得程序中的每个可执行语句至少执行一次。

判定覆盖:通过执行足够的测试用例,使得程序中的每个判定至少都获得一次“真”值和“假”值, 也就是使程序中的每个取“真”分支和取“假”分支至少均经历一次,也称为“分支覆盖”。

条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的可能取值(真/假)都至少满足一次。

判定/条件覆盖:设计足够多的测试用例,使得程序中每个判定包含的每个条件的所有情况(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。 ——满足判定/条件覆盖的测试用例一定同时满足判定覆盖和条件覆盖。

组合覆盖:通过执行足够的测试用例,使得程序中每个判定的所有可能的条件取值组合都至少出现一次。 ——满足组合覆盖的测试用例一定满足判定覆盖、条件覆盖和判定/条件覆盖。

路径覆盖:设计足够多的测试用例,要求覆盖程序中所有可能的路径。 

 

 

 

语句覆盖:设计若干测试用例,使得程序中每条语句至少被执行一次。

设计原则:测试用例尽量少,覆盖率尽量高,语句覆盖是最弱的逻辑覆盖准则。发现错误能力很“弱”,找不到逻辑分支的错

结果:

 

判定覆盖:设计若干测试用例,使得程序中每个判定至少有一次为真值,有一次为假值

设计缺点:对复合条件判断,只判定整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。

结果:

 

条件覆盖:设计若干测试用例,使得判定中的每个条件的可能取值至少满足一次。

条件覆盖不能包涵判定覆盖,他们是并列的

条件覆盖缺点:条件覆盖并不能保证判定覆盖。 对复合条件,条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。

结果:

 

 

 

判定条件覆盖:设计若干测试用例,使得判定中的每个条件的可能取值至少出现一次,且每个判断本身的判定结果也至少出现一次。

 

条件组合覆盖:设计若干测试用例,使得每个判定中条件结果的所有可能组合至少出现一次

 

 

上面这组测试用例覆盖了所有8种条件取值的组合,覆盖了所有判定的真假分支,但是却丢失了一条路径abe。

路径覆盖:前面提到的5种逻辑覆盖都未涉及到路径的覆盖。事实上,只有当程序中的每一条路径都受到了检验,才能使程序受到全面检验。路径覆盖的目的就是要使设计的测试用例能覆盖被测程序中所有可能的路径。就是全面覆盖

 

其他白盒测试方法:

循环测试

数据流测试

程序插桩

 

循环测试:四种不同类型的循环结构

简单循环

嵌套循环

连接循环

非结构循环

 

数据流图:

 

程序插桩:

“插桩”:通过在源代码中加入记录信息语句,以便进行运行信息的追踪和调试,统计有关的运行资源状况。

程序插桩方法:借助往被测程序中插入操作,来实现测试目的的方法,即向源程序中添加一些语句,实现对程序语句的执行、变量的变化等情况进行检查。

print语句(最简单的插桩)插桩技术是实现各种覆盖测试的必要手段。

断言

NS图:

 

 

 

 

 

单元测试

是对软件基本组成单元进行的测试。是检验程序最小单位,即检查模块有无错误,它是在编码完成后必须进行的测试工作。

完整计划下的单元测试,是对时间的更高效 的利用。

一个单元测试的例子:

 执行单元测试的一般步骤为编译运行程序(查看能否正确运行)→静态测试(检查代码是否符合规范)→动态测试(深入检查代码的正确性,容错性和边界值等),其中静态测试时我们需要提前准备一份“编码规范检查单”,进行动态测试时我们需要提前设计一些测试步骤、测试数据,即测试用例。

编译运行阶段:

静态分析:

动态分析:

 

 

 

 

 

对发现的问题已进行修改并通过回归测试。

单元测试的通过与否可以参考如下准则:

1)功能与设计说明一致;

2)性能达到软件设计指标;

3)命名和编码符合规则;

4)逻辑测试达到规定的覆盖率,若达不到规定指标,应在测试报告中给出合理解释;(5)对发现的问题已进行修改并通过回归测试。

驱动模块桩模块

 

 

被测模块、驱动模块和桩模块——“单元测试的环境”:

 

 

集成测试:

静态测试技术——针对概要设计的测试

动态测试技术——灰盒测试

灰盒测试是介于黑盒测试白盒测试之间的一种测试方法,既关注系统的外部行为(功能),又部分了解其内部结构和实现逻辑,但不完全依赖代码级别的细节。它结合了黑盒的用户视角和白盒的代码视角,是一种高效且实用的测试策略。

集成测试的基本策略可以分为两类:

非增量式集成策略(一步到位)又叫大爆炸集成(big bang)

 

一个维护型或被测试系统较小 的项目

增量式集成策略(逐步实现):

1)自顶向下增量式测试 2)自底向上增量式测试 3)三明治增量式测试(混合增量式测试)

自顶向下增量式测试分为广度优先和深度优先添加

 

 

自底向上增量式测试

 

系统测试

 将已经集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使用)环境下,对计算机系统进行系列的测试活动。

 

posted @ 2025-05-26 10:34  软件拓荒人  阅读(33)  评论(0)    收藏  举报