测试知识总结

软件测试理论部分

一、测试分类

从软件开发角度来看:

1.单元测试

单元测试是对程序中单独的程序或具有独⽴功能的代码段进⾏测试的过程

2.集成测试

集成测试在单元测试的基础上,先通过单元模块组装成系统或⼦系统,再进⾏测试。中带你是检查模 块之间的接⼝是否正确。

3. 系统测试

系统测试针对整个产品进⾏测试,验证系统是否满⾜需求规格说明的定义,以及软件系统的正确性和 性能等是否能满⾜。

4. 验收测试

验收测试是部署软件前(运维⼯程师进⾏代码部署操作)的最后⼀个测试,⽬的是确保软件准备就 绪,向需求⽅展示软件能够满⾜需求,验收测试细分为α测试和β测试。
α测试: 指的是由⽤户,测试⼈员,开发⼈员等共同参与的内部调试
β测试: 指的是内测后的公测,即完全交给最终⽤户测试

从软件结构和算法角度来看:

1.黑盒测试

⿊盒测试也称为功能测试,是通过测试来检测每个功能是否都能正常使⽤,在⿊盒测试中,把程序当 作⼀个不可开的⿊盒⼦,在完全不考虑程序内部特性的情况下,对程序接⼝进⾏测试,它只检查程序功能 是否按照需求规格说明书的规定正常使⽤,程序是否能适当的接受输⼊程序⽽产⽣正确的输出信息。

2.白盒测试

⽩盒测试⼜被称为结构测试,透明盒测试、逻辑驱动测试或基于代码测试,是对软件代码实现的细节 做细致检查。对于⽩盒测试,测试员必须要全⾯了解程序的内部逻辑结构,对所有逻辑路径进⾏测试

3.灰盒测试

是介于⽩盒测试和⿊盒测试之间的,灰盒测试关注输出对于输⼊的正确性,但同时也关注内部实现,不过这种关注不像⽩盒测试那么详细,完整,知识通过⼀些表征性的现象,事件,标志来判断内部的运⾏状态, 有时候输出是正确的,但内部存在错误点。这种情况⾮常多,如果每次都通过⽩盒测试来操作,效率低, 因此采⽤灰盒测试的⽅法。

软件测试角度来看

1.功能测试

主要检查实际功能是否符合⽤户的需求,因此测试的⼤部分⼯作也是围绕软件的功能进⾏。
功能测试主要包含:
1)逻辑功能测试
2)界面测试
3)易用性测试
4)安装测试
5)兼容性测试(软件本身的兼容性和不同平台下的兼容性)

2.性能测试

性能测试通过⾃动化的测试⼯具模拟多种正常,峰值以及异常负载条件 来对系统进⾏各项性能指标进 ⾏测试。中国软件测评中⼼将性能测试概括为三个⽅⾯:应⽤在客户端性能的测试,应⽤在⽹络上的性能 测试和应⽤在服务器端性能的测试。
通常情况下性能测试包括:时间性能和空间性能两种。
时间性能:主要指软件的⼀个具体响应时间。例如⼀个注册需要的时间,⼀个商品购买需要的时间 等。抛开具体的测试环境,来分析⼀次事务的响应时间是没有任何意义的。需要单间好⼀个具体且独⽴的 测试环境。
空间性能:主要指软件运⾏时所消耗的系统资源,如硬件资源,cpu,内存,⽹络消耗等。

从软件测试的⾃动化程度来看

1.手工测试

由测试⼈员⼀个⼀个的执⾏测试⽤例,通过输⼊⼀些参数,产看返回结果是否符合预期效 果

2.自动化测试

是以把⼈为驱动的测试⾏为转化为机器执⾏的⼀种过程。通常由测试⼈员根据测试⽤例 中描述的规则流程⼀步步执⾏测试,把得到的结果与预期结果进⾏⽐较。⾃动化测试是⼀个很⼴义的概 念,⼀般来说所有能替代⼈⼯测试的⽅式都属于⾃动化测试,我们⼀般说的单元测试就是⾃动化测试的⼀ 种,单元测试很多⼈称之为“毫秒级的⾃动化测试”,
可分为功能⾃动化测试,性能⾃动化测试
功能自动化测试:是通过测试⼯具(或框架)录制/编写测试脚本,对软件的功能进⾏测试,并验证测 试的结果是否正确,从⽽代替部分⼿⼯测试⼯作,达到节约⼈⼒成本和时间成本的⽬的。
性能自动化测试:通过性能⼯具模拟成千上万的虚拟⽤户向系统发送请求,从⽽验证系统的处理能 ⼒。

二、V模型

v模型概念图
V模型中的过程是从左向右描述了基本开发过程和测试⾏为。V模型的价值在于它⾮常明确的表明了测试过程中存在的不同级别,并且清楚的描述了这些测试阶段和开发过程各个阶段对应的关系。

开发阶段:

1.需求分析

主要明确客户需要的是什么?需要软件做成什么样⼦,还有那些功能。这点⽐较关键的是需求分析师和客户沟通时理解能⼒和交互性。要求分析师能准确的把客户所需要达到的功能,实现⽅式,等表述出来,给出分析结果,写出需求规格说明书。

2.概要分析

主要是架构的实现,指搭建架构,表述各模块功能、模块接⼝连接和数据传递的实现等各项事务。

3.详细设计

对概要设计中表述的各个模块进⾏深⼊分析,对各个模块组合进⾏分析等,这⼀阶段要求达到伪代码级别,已经把程序的具体实现功能,现象等描述出来。其中需要包含数据库设计说明。

4.软件编码

按照详细设计好的模块功能表,编程⼈员编写出实际的代码。

测试阶段

1.单元测试

单元测试是对程序中单独的程序或具有独⽴功能的代码段进⾏测试的过程

2.集成测试

集成测试在单元测试的基础上,先通过单元模块组装成系统或⼦系统,再进⾏测试。中带你是检查模 块之间的接⼝是否正确。

3. 系统测试

系统测试针对整个产品进⾏测试,验证系统是否满⾜需求规格说明的定义,以及软件系统的正确性和 性能等是否能满⾜。

4. 验收测试

验收测试是部署软件前(运维⼯程师进⾏代码部署操作)的最后⼀个测试,⽬的是确保软件准备就 绪,向需求⽅展示软件能够满⾜需求,验收测试细分为α测试和β测试。
α测试: 指的是由⽤户,测试⼈员,开发⼈员等共同参与的内部调试
β测试: 指的是内测后的公测,即完全交给最终⽤户测试

三、测试方法

冒烟测试

指在对⼀个新版本进⾏⼤规模的系统测试之前,先验证软件的基本功能是否实现,是否具备可测性。

回归测试:

指修改了旧代码后,重新进⾏测试以确认修改后没有引⼊新的错误或导致其他代码产⽣错误

随机测试:

是指测试中的所有输⼊数据都是随机⽣成的,其⽬的是模拟⽤户的真实操作,并发现⼀些边缘性错误

安全测试:

在软件产品的⽣命周期中,特别是产品开发过程基本完成到发布阶段,对产品进⾏检验,以验证产品符合 安全需求定义和产品质量标准的过程

四、测试用例设计方法

(一)等价类划分方法:

1.定义

是把所有可能的输入数据,分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。常用的黑盒测试用例设计方法。

2.划分等价类:

等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。
等价类划分可有两种不同的情况:有效等价类和无效等价类。
1)有效等价类
是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
2)无效等价类
无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。
设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。

3.划分等价类的标准:

1)完备测试、避免冗余;
2)划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合;
3)并是整个集合:完备性;
4)子集互不相交:保证一种形式的无冗余性;
5)同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"。

(二)边界值分析方法:

1.定义:

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

2.与等价划分的区别

1)边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
2)边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。

3.边界值分析方法的考虑:

应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。

4.常见的边界值

1)对16-bit 的整数而言 32767 和 -32768 是边界
2)屏幕上光标在最左上、最右下位置
3)报表的第一行和最后一行
4)数组元素的第一个和最后一个
5)循环的第 0 次、第 1 次和倒数第2 次、最后一次

(三).因果图

  1. 4种符号分别表示了规格说明中向4种因果关系。
  2. 因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。
  3. Ci表示原因,通常置于图的左部;ei表示结果,通常在图的右部。Ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。
  1. 因果图概念
  1. 关系
    ①恒等:若ci是1,则ei也是1;否则ei为0。
    ②非:若ci是1,则ei是0;否则ei是1。
    ③或:若c1或c2或c3是1,则ei是1;否则ei为0。“或”可有任意个输入。
    ④与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入。
  2. 约束
    输入状态相互之间还可能存在某些依赖关系,称为约束。例如, 某些输入条件本身不可能同时出现。输出状态之间也往往存在约束。在因果图中,用特定的符号标明这些约束。
    A.输入条件的约束有以下4类:
    ① E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。
    ② I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。
    ③ O约束(唯一);a和b必须有一个,且仅有1个为1。
    ④R约束(要求):a是1时,b必须是1,即不可能a是1时b是0。
    B.输出条件约束类型
    输出条件的约束只有M约束(强制):若结果a是1,则结果b强制为0。
  1. 采用因果图法设计测试用例的步骤:
    1)分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。
    2)分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图。
    3)由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不可能出现,为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件。
    4)把因果图转换为判定表。
    5)把判定表的每一列拿出来作为依据,设计测试用例。

(四)判定表驱动分析方法

1.定义:

判定表是分析和表达多逻辑条件下执行不同操作的情况的工具。

2.判定表的优点

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

3.判定表通常由四个部分组成

1)条件桩:列出了问题得所有条件。通常认为列出的条件的次序无关紧要。
2)动作桩:列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。
3)条件项:列出针对它左列条件的取值。在所有可能情况下的真假值。
4)动作项:列出在条件项的各种取值情况下应该采取的动作。

4.规则及规则合并

1)规则:任何一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。
2)化简:就是规则合并有两条或多条规则具有相同的动作,并且其条件项之间存在着极为相似的关系。

(五)正交实验设计方法

利用因果图来设计测试用例时, 作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图而得到的测试用例数目多的惊人,给软件测试带来沉重的负担,为了有效地,合理地减少测试的工时与费用,可利用正交实验设计方法进行测试用例的设计。
利用正交实验设计测试用例的步骤:
1.提取功能说明,构造因子–状态表
把影响实验指标的条件称为因子.而影响实验因子的条件叫因子的状态.利用正交实验设计方法来设计测试用例时,首先要根据被测试软件的规格说明书找出影响其功能实现的操作对象和外部因素,把他们当作因子,而把各个因子的取值当作状态.对软件需求规格说明中的功能要求进行划分,把整体的概要性的功能要求进行层层分解与展开,分解成具体的有相对独立性的基本的功能要求.这样就可以把被测试软件中所有的因子都确定下来,并为确定个因子的权值提供参考的依据.确定因子与状态是设计测试用例的关键.因此要求尽可能全面的正确的确定取值,以确保测试用例的设计作到完整与有效。
2.加权筛选,生成因素分析表
对因子与状态的选择可按其重要程度分别加权.可根据各个因子及状态的作用大小,出现频率的大小以及测试的需要,确定权值的大小。
3.利用正交表构造测试数据集
正交表的推导依据Galois理论(这里省略,需要时可查数理统计方面的教材)。
利用正交实验设计方法设计测试用例,比使用等价类划分,边界值分析,因果图等方法有以下优点:节省测试工作工时;可控制生成的测试用例数量;测试用例具有一定的覆盖率。

(六)功能图分析方法

一个程序的功能说明通常由动态说明和静态说明组成.动态说明描述了输入数据的次序或转移的次序.静态说明描述了输入条件与输出条件之间的对应关系.对于较复杂的程序,由于存在大量的组合情况,因此,仅用静态说明组成的规格说明对于测试来说往往是不够的.必须用动态说明来补充功能说明.功能图方法是用功能图FD形式化地表示程序的功能说明,并机械地生成功能图的测试用例. 功能图模型由状态迁移图和逻辑功能模型构成.状态迁移图用于表示输入数据序列以及相应的输出数据.在状态迁移图中,由输入数据和当前状态决定输出数据和后续状态.逻辑功能模型用于表示在状态中输入条件和输出条件之间的对应关系.逻辑功能模型只适合于描述静态说明,输出数据仅由输入数据决定.测试用例则是由测试中经过的一系列状态和在每个状态中必须依靠输入/输出数据满足的一对条件组成.功能图方法其实是是一种黑盒白盒混合用例设计方法。
1.功能图
功能图由状态迁移图和布尔函数组成.状态迁移图用状态和迁移来描述.一个状态指出数据输入的位置(或时间),而迁移则指明状态的改变.同时要依靠判定表或因果图表示的逻辑功能.例,一个简化的自动出纳机ATM的功能图。
2.测试用例生成方法
从功能图生成测试用例,得到的测试用例数是可接受的. 问题的关键的是如何从状态迁移图中选取测试用例.若用节点代替状态,用弧线代替迁移,则状态迁移图就可转化成一个程序的控制流程图形式.问题就转化为程序的路径测试问题(如白盒测试)问题了.
3.测试用例生成规则
为了把状态迁移(测试路径)的测试用例与逻辑模型(局部测试用例)的测试用例组合起来,从功能图生成实用的测试用例,须定义下面的规则.在一个结构化的状态迁移(SST)中,定义三种形式的循环:顺序,选择和重复.但分辨一个状态迁移中的所有循环是有困难的.(其表示图形省略)。
4.从功能图生成测试用例的过程
1)生成局部测试用例:在每个状态中,从因果图生成局部测试用例.局部测试用例由原因值(输入数据)组合与对应的结果值(输出数据或状态)构成。
2)测试路径生成:利用上面的规则(三种)生成从初始状态到最后状态的测试路径。
3)测试用例合成:合成测试路径与功能图中每个状态中的局部测试用例.结果是初始状态到最后状态的一个状态序列,以及每个状态中输入数据与对应输出数据的组合。
5.测试用例的合成算法:采用条件构造树.

(七)场景设计方法

现在的软件几乎都是用事件触发来控制流程的,事件触发时的情景便形成了场景,而同一事件不同的触发顺序和处理结果就形成事件流。这种在软件设计方面的思想也可以引入到软件测试中,可以比较生动地描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时使测试用例更容易理解和执行。

(八)错误推测方法

1. 定义:

基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。

2. 错误推测方法的基本思想:

列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。

  1. 例如, 输入数据和输出数据为0的情况;输入表格为空格或输入表格只有一行。 这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。
  2. 例如,前面例子中成绩报告的程序,采用错误推测法还可补充设计一些测试用例:
    I. 程序是否把空格作为回答
    II. 在回答记录中混有标准答案记录
    III. 除了标题记录外,还有一些的记录最后一个字符即不是2也不是3
    IV. 有两个学生的学号相同
    V. 试题数是负数。
  3. 再如,测试一个对线性表(比如数组)进行排序的程序,可推测列出以下几项需要特别测试的情况:
    I. 输入的线性表为空表;
    II. 表中只含有一个元素;
    III. 输入表中所有元素已排好序;
    IV. 输入表已按逆序排好;
    V. 输入表中部分或全部元素相同。

测试用例设计综合策略
1.综合策略
1)在任何情况下都必须使用边界值分析方法,经验表明用这种方法设计出测试用例发现程序错误的能力最强。
2)必要时用等价类划分方法补充一些测试用例。
3)用错误推测法再追加一些测试用例。
4)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度,如果没有达到要求的覆盖标准,应当再补充足够的测试用例。
5)如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法。
2.测试用例的设计步骤
1)构造根据设计规格得出的基本功能测试用例;
2)边界值测试用例;
3)状态转换测试用例;
4)错误猜测测试用例;
5)异常测试用例;
6)性能测试用例;
7)压力测试用例。
3.优化测试用例的方法
1)利用设计测试用例的8种方法不断的对测试用例进行分解与合并;
2)采用遗传算法理论进化测试用例;
3)在测试时利用发散思维构造测试用例。

五、软件缺陷

六、对测试的理解

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值