第3章 软件测试基本技术



前言

软件测试是软件工程中的重要部分,是确保软件质量的重要手段。随着软件的复杂度不断增强、软件产业的不断发展,软件测试得到越来越广泛的重视,将对软件测试基本技术分别进行较详细的介绍。


一、软件测试技术概述

对任何工程产品都可以使用白盒测试(又称为结构测试逻辑驱动测试)和黑盒测试(又叫数据驱动测试)两种方法之一进行测试。

黑盒测试:已知产品的功能设计规格和用户手册,可以测试验证每个功能是否都实现、每个实现了的功能是否符合要求,以及产品的性能是否满足用户的要求。

白盒测试:已知产品的内部工作过程,可以通过测试验证每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。

二、白盒测试技术

1.静态测试

最常见的静态测试是找出源代码的语法错误,这类测试可由编译器来完成。除此之外,测试人员需要采用人工的方法来检验程序,人工检测的方法主要有代码检查法静态结构分析法等。

2.程序插桩

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

3.逻辑覆盖

逻辑覆盖也是白盒测试中动态测试的主要方法之一,是以程序内部的逻辑结构为基础的测试技术,是通过对程序逻辑结构的遍历实现程序测试的覆盖,这种方法要求测试人员对程序的逻辑结构有清楚的了解。

  1. 逻辑覆盖的类型
    • 语句覆盖:设计若干个测试用例,运行被测试程序,使得每一条可执行语句至少执行一次。
    • 判定覆盖(也称为分支覆盖):设计若干个测试用例,运行所测程序,使程序中每个判断的取真分支和取假分支至少执行一次。
    • 条件覆盖:设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的每个可能取值至少执行一次。
    • 判定/条件覆盖:设计足够多的测试用例,运行所测程序,使程序中每个判断的每个条件的所有可能取值至少执行一次,并且每个可能的判断结果也至少执行一次,即要求各个判断的所有可能的条件取值组合至少执行一次。
    • 条件组合覆盖:设计足够多的测试用例,运行所测程序,使程序中每个判断的所有可能的条件取值组合至少执行一次。

  2. 测试覆盖准则
    (1)错误敏感测试用例分例(ESTCA)准则
    (2)线性代码序列与跳转(LCSAJ)覆盖准则

4.基本路径测试

  1. 程序的控制流程图
    控制流程图的图形符号
    程序流程图和对应的控制流程图

  2. 基本路劲测试的步骤
    (1)画出程序控制流程图
    (2)计算程序环路复杂性
    (3)确定独立路径集合
    (4)准备测试用例

  3. 基本路径测试中的图形矩阵工具

5.其他白盒测试方法

  1. 域测试
    域测试是一种基于程序结构的测试方法。域测试的“域”是指程序的输入空间,其测试方法是基于对输入空间的分析。

  2. 符号测试
    符合测试的基本思想是允许程序不仅仅输入具体的数值数据,也可以输入符号值,这一方法也因此而得名。

  3. Z路径覆盖
    一般称简化循环意义下的路径覆盖为Z路径覆盖。所谓的循环简化是指限制循环的次数。无论循环的形式和实际执行循环体的次数是多少,只考虑循环一次和零次两种情况,即只考虑执行时进入循环体一次和跳过循环体这两种情况。

  4. 程序变异
    程序变异是一种错误驱动测试,错误驱动测试方法是针对某类特定程序错误的。

6.白盒测试应用策略

(1)在测试中,应尽量先使用工具进行静态结构分析。
(2)测试中可采取先静态后动态的组合方式:先进行静态结构分析、代码检查,再进行覆盖率测试。
(3)利用静态分析的结果作为引导,通过代码检查和动态测试的方式对静态分析结果做进一步的确认,使测试工作更为有效。
(4)覆盖率测试是白盒测试的重点,一般可使用基本路径测试法达到语句覆盖标准;对于软件的重点模块,应使用多种覆盖率标准衡量测试的覆盖率。
(5)在不同的测试结点,测试的侧重点不同:在单元测试阶段,以代码检查、逻辑覆盖为主;在集成测试阶段,需要增加静态结构分析等;在系统测试阶段,应根据黑盒测试的结果,采取相应的白盒测试。

二、黑盒测试技术

1.功能测试

  1. 等价类划分
    (1)等价类划分概述。所谓等价类是指某个输入域的子集,等价类划分是一种典型的、常用的黑盒测试方法。

    等价类划分包括有效等价类和无效等价类两种情况。
    • 有效等价类:指对于程序规格说明来说,由合理的、有意义的输入数据构成的集合。利用它,可以检验程序是否实现了规格说明预先规定的功能和性能。
    • 无效等价类:指对于程序规格说明来说,由不合理的、无意义的输入数据构成的集合。利用它,可以检查程序中功能和性能的实现是否有不符合规格说明要求的地方。

    (2)划分等价类的方法。划分等价类的方法如下。
    ① 按区间划分
    ② 按数值划分
    ③ 按数值集合划分
    ④ 按限制条件划分
    ⑤ 按限制规则划分
    ⑥ 按处理方式划分

    在确立了等价类之后,建立等价类表,列出所有划分出的等价类。
    等价类表
    再从划分出的等价类中按以下原则选择测试用例。

    ① 每一个等价类规定一个唯一的编号。
    ② 设计一个新的测试用例,使其尽可能多的覆盖尚未覆盖的有效等价类;重复这一步骤,直到所有的有效等价类都被覆盖为止。
    ③ 设计一个新的测试用例,使其仅覆盖一个无效等价类,重复这一步骤,直到所有的无效等价类都被覆盖为止。

  2. 边界值分析方法
    在测试过程中,边界值分析方法是通过选择等价类边界的测试用例进行测试,另外,边界值分析不仅考虑输入条件边界,还要考虑输出域边界产生的测试情况。

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

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

    因果图方法最终生成的就是判定表,它适合于检查程序输入条件的各种组合情况。

  5. 场景法
    用例场景用来描述用例执行的路径,从用例开始到结束遍历这条路径上所有基本流和备选流。
    (1)基本流和备选流。
    • 基本流:采用直黑线表示,是经过用例的最简单的路径(无任何差错,程序从开始直接执行到结束)。
    • 备选流:采用不同颜色表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中,也可以起源于另一个备选流,或终止用例,不再加入到基本流中(各种错误情况)。

    (2)场景法设计步骤。应用场景法进行黑盒测试的步骤如下。
    ① 根据说明,描述出程序的基本流及各项备选流;
    ② 根据基本流和各项备选流生成不同的场景;
    ③ 对每一个场景生成相应的测试用例;
    ④ 对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值。

  6. 判定表驱动
    判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具。

    判定表通常由4个部分组成,
    • 条件桩:列出了问题的所有条件,通常认为列出的条件的次序无关紧要。
    • 动作桩:列出了问题规定可能采取的操作,这些操作的排列顺序没有约束。
    • 条件项:列出针对条件的取值和在所有可能情况下的真假值。
    • 具体项:列出在条件项的各种取值情况下应该采取的动作。

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

  7. 正交试验法
    正交试验法是依据近代代数中的伽罗瓦(Galois)理论,从大量的(实验)数据(测试用例)中挑选适量的、有代表性的点(用例),从而合理地安排试验(测试)的一种科学试验设计方法。类似的方法有聚类分析方法、因子方法等。

    正交试验法常使用下面2个术语。
    • 因子:影响实验指标的条件称为因子。
    • 因子的状态:影响实现因子的条件。

  8. 功能图法
    功能图法是用功能图形象地表示程序的功能说明,并机械地生成功能图的测试用例,功能图方法是一种黑盒白盒混合用例设计方法。

2.非功能测试

  1. 强度测试
    强度测试是验证软件的性能在各种极端的周边环境和系统条件下是否能正常工作,也就是验证软件的性能在各种极端的周边环境和系统条件下的承受能力。这里所谓“强度”包括两项:一项是超载运行测试,另一项是容量测试。

    超(满)载运行测试:是对软件在单位时间内所能承受的荷载的极限进行验证。

    容量测试:是对软件系统处理大量数据的能力进行检验。

  2. 性能测试
    性能测试通常是验证软件的性能在正常环境和系统条件下重复使用时是否还能满足性能指标,软件的性能测试是系统测试中难度较大的测试。

  3. 安全测试
    安全测试是为了检验软件的数据保密性和数据完整性的测试。

  4. 安装与卸载测试
    安装与卸载测试的重要性在于安装与卸载是软件给客户的第一印象。

  5. 配置测试
    配置测试主要注意三个方面:一是软件安装与卸载过程中系统配置的变化;二是软件完成安装后,人为改变配置,软件是否有相应的变化;三是硬件的不同组合是否与软件兼容。

  6. 兼容性测试
    兼容性测试是针对测试软件与其他软件之间以及测试软件与不同硬件之间的兼容性进行的测试。它包括该软件本身不同版本之间、该软件与其他不同版本软件之间、不同版本硬件之间的兼容性测试。

  7. 故障修复测试
    故障修复测试是为了保证软件无论在遇到特殊事故或任何出错的情况下,一旦故障排除,即能迅速恢复到事故或出错前的状况,继续正常运行。

  8. 使用性能测试
    使用性能测试从用户的角度去审视及改进软件,从而保证了软件的使用性能。使用性能测试一般是由用户实现的。

  9. 帮助菜单及用户说明测试
    软件的帮助菜单系统及用户说明书等是最容易被测试部门忽略的。关于测试帮助菜单及用户说明书,很重要的是对其使用性能进行测试,也就是从用户的角度来检验使用的方便程度及其可靠性、准确性。

3.黑盒测试策略

(1)首先进行等价类划分,包括输入条件和输出条件的等价类划分,将无限测试变成有限测试,这是减少工作量和提高测试效率最有效的方法。
(2)在任何情况下都必须使用边界值分析方法。经验表明,用这种方法设计出的测试用例发现程序错误的能力最强。
(3)可以用错误推测法追加一些测试用例,这需要依靠测试工程师的智慧和经验。
(4)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。
(5)如果程序的功能说明中含有输入条件的组合情况,则一开始就可选用因果图法和判定表驱动法。
(6)对于参数配置类的软件,要用正交试验法选择较少的组合方式达到最佳效果。
(7)功能图法也是很好的测试用例设计方法,可以通过不同时期条件的有效性,设计不同的测试数据。
(8)对于业务流清晰的系统,可以利用场景法贯穿整个测试案例过程,在案例中综合使用各种测试方法。

四、灰盒测试技术

灰盒测试是近年来提出的一种新的软件测试方法,它兼顾了白盒测试和黑盒测试方法的优点。

灰盒(Gray Box)是一种程序或系统上的工作过程被局部认知的装置。灰盒测试也称作灰盒分析,是基于对程序内部细节有限认知上的软件调试方法。灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了软件测试基本技术,希望能够对正在阅读的你有所帮助。如果你也对软件测试感兴趣的话,就跟着我一起学下去吧。

如果您觉得我写的还不错,请多给我点赞鼓励一下,您的支持也是我不断前进的最大动力。同时也欢迎您将本篇文章分享给您的朋友,一起学习。最后,也欢迎大家在私信和评论里与我探讨学习过程中遇到的问题,大家共同进步。

猜你喜欢

转载自blog.csdn.net/qq_50564231/article/details/130828815