【软工】测试程序

Chapter 8 测试程序

软件测试的特点

开销大、不能进行穷举测试

错误、故障、失效

软件故障和失效

故障分类

算法故障:由于处理步骤中的某些错误,使得对于给定的输入、构建的算法或者逻辑没有产生适当的输出。

语法故障

计算故障和精度故障:一个公式的是显示错误的、或者计算结果没有达到要求的精度

文档故障:文档与程序实际做的事情不一致。

压力故障、过载故障

能力故障、边界故障:系统活动到达指定极限的时候,系统性能会变得不可接受

计时故障、协调故障:开发实施系统,

吞吐量故障、性能故障:系统不能以规定的速度执行

恢复故障:系统失效时,不能表现得像设计人员希望的那样进行恢复

标准和过程故障:可能并不总是会影响程序运行,但是会培育一种环境,使得参与人员达到一种共识:在测试或者修改系统的时候可能会产生故障。代码难以让他人理解以及难以理解发现解决问题的数据描述

测试步骤

image-20220614214920209

首先进行构件代码的单元测试、然后对测试的构件

  • 根据设计规格说明进行集成测试,产生集成的模块
  • 对集成模块按照系统功能需求进行功能测试,得到运行的系统
  • 对运行的系统根据其他软件需求进行性能测试,得到验证、确认的软件
  • 然后对验证、确认的软件按照客户需求规格说明进行验收测试,得到接受的系统
  • 对接收的系统根据用户环境进行安装测试得到使用中的系统

软件测试方法

  • 静态测试,程序不执行
    • 静态分析器、自动工具
    • 代码评审(人工方式)
  • 动态测试,程序执行
    • 黑盒测试、测试功能
    • 白盒测试,测试结构

动态测试方法

通过选择适当的测试用例,执行程序。

白盒方法:分析程序的内部逻辑结构,注意选择适当的覆盖标准,设计测试用例,对主要路径进行尽可能多的测试。

黑盒法:不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。

测试用例:为特定目标而编制的一组测试输入、执行条件和预期结果,其目的是测试程序中的路径,核实程序或软件能否满足某个特定的需求。

白盒法

白盒法又称为逻辑覆盖法,其测试用例选择,是按照不同覆盖标准确定的。

image-20220614220124701

白盒法常用的覆盖标准

①语句覆盖:选择足够的测试用例,使得程序中每个语句至少都能被执行一次。
②判定覆盖:执行足够的测试用例,使得程序中每个判定至少都获得一次“真”值和“假”值。
③条件覆盖:执行足够的测试用例,使得判定中的每个条件获得各种可能的结果。
④判定/条件覆盖:执行足够的测试用例,使得判定中每个条件取到各种可能的值,并使每个判定取到各种可能的结果。
⑤条件组合覆盖:执行足够的例子,使得每个判定中条件的各种可能组合都至少出现一次。

白盒法步骤:

1)选择逻辑覆盖标准。
2)按照覆盖标准列出所有情况。
3)选择确定测试用例。
4)验证分析运行结果与预期结果。

[例子]

Procedure(VAR A,B,X:REAL);
BEGIN
IF (A>1) AND (B=0)
THEN X:=X/A ;
IF (A=2) OR (X>1)
THEN X:=X+1
END;

image-20220614220419091

image-20220614221454336

黑盒法

不考虑程序的内部结构与特性,只根据程序功能或程序的外部特性设计测试用例。(偏重于功能测试吗)

image-20220614221655869

等价类划分法

等价类划分法是一种重要的、常用的黑盒测试方法,它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。

image-20220614221823363

等价类划分是黑盒测试技术,可将测试用例数量降到最少。
等价类划分是将可能的输入划分成若干等价的类,每一个类选择一个测试用例,这种方法假设对于一个类的所有成员来说,系统通常按照类似的方式运行。
关键步骤:确定等价类和选择测试输入
基本原则:
每个可能的输入属于某一个等价类
任何输入都不会属于多个等价类
用等价类的某个成员作为输入时,如果证明执行存在误差,那么用该类的任何其他成员作为输入,也能检查到同样的误差。

划分等价类可分为两种情况:
(1)有效等价类
-是指对软件规格说明而言,是有意义的、合理的输入数据所组成的集合。利用有效等价类,能够检验程序是否实现了规格说明中预先规定的功能和性能。
(2)无效等价类
-是指对软件规格说明而言,是无意义的、不合理的输入数据所构成的集合。利用无效等价类,可以鉴别程序异常处理的情况,检查被测对象的功能和性能的实现是否有不符合规格说明要求的地方。

image-20220614235254449

例:程序输入x取值于一个固定的枚举类型{1,3,7,15},且程序
中对这4个数值分别进行了处理,则有效等价类为x=1、x=3、
x=7、x=15,无效等价类为x≠1,3,7,15的值的集合。

(3)按照数值集合划分在输入条件规定了输入值的集合或规定了“必须如何”的条件下,可以确定一个有效等价类和一个无效等价类(该集合有效值之外)。

image-20220614235930707

设计测试用例时,应同时考虑有效等价类和无效等价类测试用例的设计。
根据已列出的等价类表可确定测试用例,具体过程如下:
(1)首先为等价类表中的每一个等价类分别规定一个唯一的编号。
(2)设计一个新的测试用例,使它能够尽量覆盖尚未覆盖的有效等价类。重复这个步骤,直到所有的有效等价类均被测试用例所覆盖。
(3)设计一个新的测试用例,使它仅覆盖一个尚未覆盖的无效等价类。重复这一步骤,直到所有的无效等价类均被测试用例所覆盖。

为有效等价类设计一个测试用例、每个无效等价类都设计一个

image-20220615000415759

image-20220615000421492

边界值分析法

边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。
例:测试计算平方根的函数
-输入:实数
-输出:实数
-规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息“平方根非法-输入值小于0”并返回0。

image-20220615001034023

集成测试

每个模块都能单独工作,但这些模块集成在一起之后却不能正常工作;或是系统集成后虽可以正常运行,但系统的容错性、安全性以及整体性却得不到保障,系统不能长时间运行等等。这就需要进行集成测试和系统测试,以找出其中的软件缺陷,来提高整个软件的质量和可靠性。

image-20220615001832991

集成测试又称组装测试,是在单元测试的基础上,将所有模块按照设计要求组装成子系统或系统进行的测试活动。

集成的基本策略比较多,分类比较复杂,但是都可以归结为以下两类:
非增量式集成策略——一步到位 Non-Incremental Testing
增量式集成策略——逐步实现 Incremental Testing

驱动模块(Driver):用来模拟待测模块的上级模块。驱动模块在集成测试中接受测试数据,将相关的数据传送给待测模块,启动待测模块,并打印出相应的结果。

桩模块(Stub):也称为存根程序,用以模拟待测模块工作过程中所调用的模块。桩模块由待测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验待测模块与下级模块的接口。

非增量式测试是采用一步到位的方法来构造测试:
对所有模块进行个别的单元测试后,按照程序结构图将各模块连接起来,把连接后的程序当作一个整体进行测试。
又叫大爆炸式集成(Big Bang)

image-20220615002709623

增量式测试的集成是逐步实现的:

逐次将未曾集成测试的模块和已经集成测试的模块(或子系统)结合成程序包,再将这些模块集成为较大系统,在集成的过程中边连接边测试,以发现连接过程中产生的问题

  • 自顶向下增量式测试

    从属于主控模块的按深度优先方式(纵向)或者广度优先方式(横向)集成到结构中去

    自顶向下集成测试的整个过程由3个步骤完成:
    (1)主控模块作为测试驱动器。
    (2)根据集成的方式(深度或广度),下层的桩模块一次一次地被替换为真正的模块。
    (3)在每个模块被集成时,都必须进行单元测试。
    重复第2步,直到整个系统被测试完成。

  • 自底向上增量式测试

    从具有最小依赖性的底层组件开始,按照依赖关系树的结构,逐层向上集成,以检验系统的稳定性。
    最常用的集成策略,其他方法都或多或少应用此种方法。

    测试步骤

    •(1)起始于模块依赖关系树的底层叶子模块,也可以把两个或多个叶子模块合并到一起进行测试
    •(2)使用驱动模块对步骤1选定的模块(或模块组)进行测试
    •(3)用实际模块代替驱动模块,与它已测试的直属子模块组装成一个更大的模块进行测试
    •(4)重复上面的行为,直到系统最顶层模块被加入到已测系统中

  • 三明治增量式测试

    混合式集成,把系统划分成三层,中间一层为目标层,目标层之上采用自顶向下集成,之下采用自底向上集成

    image-20220615100739472

    (1)首先对目标层之上一层使用自顶向下集成,因此测试A,使用桩代替B,C,D
    (2)其次对目标层之下一层使用自底向上集成,因此测试E,F,使用驱动代替B,D
    (3)其三,把目标层下面一层与目标层集成,因此测试(B,E),(D,F),使用驱动代替A
    (4)最后,把三层集成到一起,因此测试(A,B,C,D,E,F)

软件缺陷数目估计

估计残留软件缺陷数目的方法
•播撒模型
•静态模型
•根据测试覆盖率的预测模型

故障播种

检测到的播种故障数目 / 总的播种故障数目 = 检测到的非播种故障的数目 / 总的非播种故障的数目

image-20220615101405379

10 / 2 = N / 158 , N = 790

改进

假设软件经过X个月的排错时间,程序中将不再存在错误。那么让两个人共同对程序进行排错,经过足够长(X的一半或更少)的排错时间后,第一个人发现了n个错误,第二个人发现了m个错误,其中属于两个人共同发现的错误有m1个,则程序中的固有错误:

按照课本,有两个小组x,y,共同发现q个

有效性E1 = x/n E2 = y/n 并且 q/y = x/n 推出=> n = q / (E1*E2)

所以N = m*n / m1

image-20220615102357612

image-20220615102412022

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tototototorres

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值