软件测试读书笔记(佟伟光著)3

软件测试基本技术

白盒测试

白盒测试可分为静态和动态测试,动态测试技术主要包括程序插桩、逻辑覆盖、基本路径测试等。

  • 静态白盒测试
    人工检测代码非语法类错误,常用技术包括:代码检查法、静态结构分析法。
    代码检查法:主要是通过桌面检查、代码审查和走查方式,对代码和设计的一致性,代码的可读性以及对软件设计标准的遵循情况,代码逻辑表达的正确性,代码结构的合理性,程序中不安全、不明确和模糊的部分, 编程风格方面的问题等内容进行检查。
    静态结构分析法:通过使用测试工具分析程序源代码的系统结构、数据结构、数据接口、内部控制逻辑等内部结构,生成函数调用关系图、模块控制流图、内部文件调用关系图等各种图形、图表,清晰地标识整个软件的组成结构。通过分析这些图表(包括控制流分析、数据流分析、接口分析、表达式分析等),可以检查软件有没有存在缺陷或错误。
  • 程序插桩
    程序插桩是借助向被测程序中插入操作,来实现测试目的的方法,即向源程序中添加一些语句,实现对程序语句的执行、变量的变化等情况进行检查。
  • 逻辑覆盖
    逻辑覆盖是以程序内部的逻辑结构为基础的测试技术,通过对程序逻辑结构的遍历实现程序测试的覆盖。逻辑覆盖主要包括(1)语句覆盖:每一条可执行语句至少执行一次。(2)判定覆盖(也称为分支覆盖):程序中每个判断的取真分支和取假分支至少执行一次。(3)条件覆盖:程序中每个判断的每个条件的每个可能取值至少执行一次。(4)判定/条件覆盖:程序中每个判断的每个条件的所有可能取值至少执行一次,并且每个可能的判断结果也至少执行一次,即要求各个判断的所有可能的条件取值组合至少执行一次。(5)条件组合覆盖:程序中每个判断的所有可能的条件取值组合至少执行一次。
    测试覆盖准则:(1)错误敏感测试用例分例(ESTCA)准则:对于A rel B(其中rel可以是“<”,“=”和“>”)型的分支谓词,应适当地选择A与B的值,使得测试执行到该分支语句时,AB的情况分别出现一次。对于A rel c(rel可以是“<”或是“>”,A是变量,c是常量)型的分支谓词,当rel为“<”时,应适当地选择A的值,使得:A=c-M其中,M是距c最小的机器容许的整数,若A和c均为整型时,M=1。同样,当rel为“>”时,应适当地选择A,使得:A=c+M。对外部输入变量赋值,使其在每一测试用例中具有不同的值与符号,并与同一组测试用例中其他变量的值与符号不一致。(2)线性代码序列与跳转(LCSAJ)覆盖准则:LCSAJ是一组顺序执行的代码,以控制流跳转为其接收点。LCSAJ覆盖准则是一个分层准则:第一层:语句覆盖。第二层:分支覆盖。第三层:LCSAJ覆盖(即程序中每一个LCSAJ都至少在测试中经历过一次)。第四层:两两LCSAJ覆盖(即程序中每两个首尾相连的LCSAJ组合起来在测试中都要经历一次)。第n+2层:每n个首尾相连的LCSAJ组合在测试中都要经历一次。
  • 基本路径测试
    基本路径测试是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。在基本路径测试中,设计出的测试用例要保证在被测程序的每一条可执行语句上至少执行一次。
    基本路径测试的步骤:画出程序的控制流程图,计算程序环路复杂性,确定独立路径集合,准备测试用例,确保基本路径集中的每一条路径的执行。
    注:程序环路复杂性的三种计算方法如下:
    将环路复杂性定义为程序控制流图中的区域数。
    设E为程序控制流图的边数,N为图的结点数,则定义环路的复杂性为V(G)=E-N+2。
    若设P为程序控制流图中的判定结点数,则有V(G)=P+1。
    基本路径测试中的图形矩阵工具:自动化决定基本测试路径。
  • 其他白盒测试方法
    (1)域测试
    域指程序的输入空间,从域的子空间中挑选测试点,测试是否产生正确的结果。域测试的缺点:一是为进行域测试而对程序提出的限制过多,二是当程序存在很多路径时,所需的测试也就很多。
    (2)符号测试
    以符号代替具体的数值执行代数运算,存在问题:
    分支问题。当采用符号测试进行到某一分支点处,分支谓词是符号表达式时,在这种情况下通常无法决定谓词的取值,也就不能决定分支的走向。如果程序中有循环,而循环次数又决定于输入变量,那就无法确定循环的次数。
    二义性问题。数据项的符号值可能是有二义性的,这种情况通常出现在带有数组的程序中。
    大程序问题。符号测试中总要处理符号表达式。随着符号测试的执行,一些变量的符号表达式越来越大。特别是如果当符号执行树很大,分支点很多时,路径条件本身将变成一个非常长的合取式。
    (3) Z路径覆盖
    Z路径覆盖是对于程序中的循环机制进行简化后的路径覆盖,无论循环的形式和实际执行循环体的次数是多少,只考虑循环一次和零次两种情况。
    (4)程序变异
    程序变异是一种错误驱动测试。错误驱动测试主要有2种,即程序强变异和程序弱变异。
  • 白盒测试应用策略
    (1)尽量先使用工具进行静态结构分析。(2)测试中可采取先静态后动态的组合方式:先进行静态结构分析、代码检查,再进行覆盖率测试。(3)利用静态分析的结果作为引导,通过代码检查和动态测试的方式对静态分析结果做进一步的确认,使测试工作更为有效。(4)覆盖率测试是白盒测试的重点,一般可使用基本路径测试法达到语句覆盖标准;对于软件的重点模块,应使用多种覆盖率标准衡量测试的覆盖率。(5)在不同的测试结点,测试的侧重点不同:在单元测试阶段,以代码检查、逻辑覆盖为主;在集成测试阶段,需要增加静态结构分析等;在系统测试阶段,应根据黑盒测试的结果,采取相应的白盒测试。

黑盒测试技术

黑盒测试一般可分为功能测试和非功能测试两大类。功能测试方法主要包括等价类划分、边值分析、因果图、错误推测、功能图法等,主要用于软件确认测试。非功能测试方法主要包括性能测试、强度测试、兼容性测试、配置测试、安全测试等。

  • 等价类划分
    把所有可能的输入数据(即将程序的输入域)划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。等价类分为有效等价类和无效等价类;划分等价类的方法:
    如果可能的输入数据属于一个取值范围,则可以确定1个有效等价类和2个无效等价类。
    如果规定了输入数据的一组值,而且程序要对每个输入值分别进行处理,则可为每一个输入值确立一个有效等价类,此外针对这组值确立一个无效等价类,它是所有不允许的输入值的集合。
    如果可能的输入数据属于一个值的集合,可以确定一个有效等价类,并划分一个无效等价类。
    在输入条件是一个布尔量的情况下,可确定1个有效等价类和1个无效等价类。
    规定了输入数据必须遵守的规则的情况下,可确立1个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
    在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。
  • 边界值分析方法
    对于循环结构,第0次、最后1次、第1次和倒数第2次是边界。
    对于16位整型数据,32767和-32768是边界。
    数组的第一个和最后一个下标元素是边界。
    报表的第一行和最后一行是边界。
  • 错误推测法
    基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例。
  • 因果图法
    利用图解法分析输入的各种组合情况,从而设计测试用例,它适用于检查程序输入条件的各种组合情况。
    因果图:


    四种因果关系

    五种约束

    因果关系是输入与输出之间的关系,约束是输入内部或输出内部之间的依赖。
    互斥:表示a、b 2个原因不会同时成立,最多有1个可能成立。包含:表示a、b、c 3个原因中至少有1个必须成立。唯一:表示a和b当中有且仅有1个成立。要求:表示当a出现是,b必须也出现。强制:表示当a是1时,b必须是0。前四种约束是输入之间的,最后的强制是输出内部的依赖。
    因果图生成测试用例步骤:
    (1)根据软件规格说明书找出原因和结果
    (2)找出因果之间的因果关系和约束
    (3)将因果图转换为判定表
    (4)根据判定表生成测试用例

  • 场景法
    场景法中,基本流是软件功能按照正确的事件流实现的一条正确流程,采用黑直线表示;备选流是出现故障或缺陷的过程,采用不同颜色表示。
    场景法生成测试用例步骤:
    (1)根据说明,描述出程序的基本流及各项备选流;
    (2)根据基本流和各项备选流生成不同的场景;
    (3)对每一个场景生成相应的测试用例;
    (4) 对生成的所有测试用例重新复审,去掉多余的测试用例,测试用例确定后,对每一个测试用例确定测试数据值。
  • 判定表驱动
    判定表包含四个部分:
    判定表

    判定表生成步骤:
    (1)确定规则的个数,假如有n个条件,每个条件有2个取值(0,1),故有种规则;
    (2)列出所有的条件项和动作项;
    (3)填入条件取值;
    (4) 填入集体动作,得到初始判定表;
    (5)简化,合并相似规则(相同动作)。
  • 正交试验法
    正交试验法是从大量的测试用例中挑选适量的、有代表性的点用例,从而合理地安排测试的一种科学试验设计方法。优点:节省测试工作工时;可控制生成的测试用例数量;测试用例具有一定的覆盖率。
  • 功能图法
    功能图由状态迁移图和逻辑功能模型构成,
    功能图法生成测试用例的步骤:
    (1) 对每个状态,由其逻辑功能模型(因果图或判定表)生成局部测试用例;
    (2) 由状态迁移图生成测试路径;
    (3) 根据测试路径及路径上状态对应的局部测试用例合成完整的测试用例;

非功能测试

  • 强度测试
    强度测试是验证软件的性能在各种极端的周边环境和系统条件下是否能正常工作,包括两项:一项是超载运行测试,另一项是容量测试。超(满)载运行测试是对软件在单位时间内所能承受的荷载的极限进行验证。容量测试是对软件系统处理大量数据的能力进行检验。
  • 性能测试
    性能测试通常是验证软件的性能在正常环境和系统条件下重复使用时是否还能满足性能指标。性能测试包括系统反应时间、用户反应时间、软件界面反应时间、中央处理器的利用率、检查内存泄露等。
  • 安全测试
    安全测试是为了检验软件的数据保密性和数据完整性的测试。
  • 安装与卸载测试
  • 配置测试
    配置测试主要关注:(1)软件安装与卸载过程中系统配置的变化;(2)软件完成安装后,人为改变配置,软件是否有相应的变化;(3)硬件的不同组合是否与软件兼容。
  • 兼容性测试
    兼容性测试包括该软件本身不同版本之间、该软件与其他不同版本软件之间、不同版本硬件之间的兼容性测试。
  • 故障修复测试
    故障修复测试是为了保证软件无论在遇到特殊事故或任何出错的情况下,一旦故障排除,即能迅速恢复到事故或出错前的状况,继续正常运行。
  • 使用性能测试
    使用性能测试从用户的角度去审视及改进软件,从而保证了软件的使用性能。通常通过Alpha及Beta测试来实现。
  • 帮助菜单及用户说明测试

黑盒测试策略

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

你可能感兴趣的:(软件测试读书笔记(佟伟光著)3)