930 likes | 1.1k Views
软件测试方法和技术 - Ch.6 集成测试和系统测试. 第五章回顾. 单元测试的定义与进行单元测试的重要性 单元测试的目标与任务 静态测试技术的运用 动态测试技术的运用 调试与评估 单元测试的过程与文档管理 单元测试的常用工具简介. 第六章 集成测试和系统测试. 6.1 系统集成的模式与方法 6.2 功能测试 6.3 系统测试 6.4 压力测试、容量测试和性能测试 6.5 安全性、可靠性和容错性测试. 6.1 系统集成的模式与方法. 软件集成测试前的准备. ◇人员安排 ◇测试计划 ◇测试内容 ◇集成模式 ◇测试方法.
E N D
第五章回顾 • 单元测试的定义与进行单元测试的重要性 • 单元测试的目标与任务 • 静态测试技术的运用 • 动态测试技术的运用 • 调试与评估 • 单元测试的过程与文档管理 • 单元测试的常用工具简介
第六章 集成测试和系统测试 6.1 系统集成的模式与方法 6.2 功能测试 6.3 系统测试 6.4 压力测试、容量测试和性能测试 6.5安全性、可靠性和容错性测试
6.1系统集成的模式与方法 软件集成测试前的准备 ◇人员安排 ◇测试计划 ◇测试内容 ◇集成模式 ◇测试方法
集成测试的模式 渐增式测试模式与非渐增式测试模式 非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。 渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。 各自的优缺点
自顶向下和自底向上集成方法 驱动程序/驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。 桩程序/桩模块(stub),也有人称为存根程序,用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口
自顶向下法(Top-down Integration) 自顶向下法的主要优缺点
自底向上法(Bottom-up Integration) 自底向上法的主要优缺点
混合策略(Modified Top-down Integration) 混合法:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合
大棒集成方法(Big-bang Integration) 采用大棒集成方法,先是对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成测试 。 因为所有的模块一次集成的,所以很难确定出错的真正位置、所在的模块、错误的原因。这种方法并不推荐在任何系统中使用,适合在规模较小的应用系统中使用。
三明治集成方法(Sandwich Integration) 采用三明治方法的优点是:它将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块的正确性。采用这种方法的主要缺点是:在真正集成之前每一个独立的模块没有完全测试过。
改善的三明治集成方法 改进的三明治集成方法,不仅自两头向中间集成,而且保证每个模块得到单独的测试,使测试进行得比较彻底 。
6.2功能测试 功能测试的目的和内容 • 程序安装、启动正常,有相应的提示框、错误提示等 • 每项功能符合实际要求 • 系统的界面清晰、美观 • 菜单、按钮操作正常、灵活,能处理一些异常操作 • 能接受正确的数据输入,对异常数据的输入可以进行提示、容错处理等 • 数据的输出结果准确,格式清晰,可以保存和读取 • 功能逻辑清楚,符合使用者习惯 • 系统的各种状态按照业务流程而变化,并保持稳定 • 支持各种应用的环境 • 能配合多种硬件周边设备 • 软件升级后,能继续支持旧版本的数据 • 与外部应用系统的接口有效
功能测试的方法 • 1. 等价类划分法 • 2. 边界值分析法 • 3. 错误推测法 • 4.因果图法 • 5. 组合分析法
等价类划分法 • 数学含义 A<=x<=B C<=y<=D
确立等价类的原则 • 如果输入条件规定了取值范围,或者值的个数,则可以确立一个有效等价类和两个无效等价类,例如: • 数据范围是1~50 • 有效等价类为“>=1&&<=50” • 两个无效等价类为“<1”和“>50”
确立等价类的原则 • 如果输入条件是一个布尔量,则可以确立一个有效等价类和一个无效等价类 • 如果规定了输入数据的一组值,而且程序要对每一个输入值分别进行处理,这时要对每一个规定的输入值确立一个有效等价类,而对于这组值之外的所有值确立一个无效等价类
确立等价类的原则 • 如果规定了输入数据必须遵守的规则,则可以确立一个有效等价类(即遵守规则的数据)和若干无效等价类(从不同角度违反规则的数据),例如: • 测试密码域,要求密码必须是数字或字母 • 有效等价类为“密码是数字和字母的组合” • 无效等价类为“密码包括中文”、“密码包括其它符号”等 • 如果确知已划分的等价类中的各元素在程序中的处理方式不同,则应进一步划分成更小的等价类
等价类测试用例设计 • 分析输入输出 • 划分有效等价类、无效等价类 • 设计测试用例,使其尽可能多的覆盖有效等价类 • 设计测试用例,使其一次只覆盖一个无效等价类
使用等价类划分法测试的实例 • 保险公司计算保费费率的程序 某保险公司的人寿保险的保费计算方式为: 投保额×保险费率 其中,保险费率依点数不同而有别,10点及10点以上保险费率为0.6%,10点以下保险费率为0.1%;而点数又是由 投保人的年龄、性别、婚姻状况和抚养人数来决定,具体规则如下:
计算保费费率的程序 (1)分析程序规格说明中给出和隐含的对输入条件的要求,列出等价类表(包括有效等价类和无效等价类)。 • 年龄:一位或两位非零整数,值的有效范围为1~99 • 性别:一位英文字符,只能取值‘M’或’F’ • 婚姻:字符,只能取值‘已婚’或‘未婚’ • 抚养人数:空白或一位非零整数(1~9) • 点数 :一位或两位非零整数,值的范围为1~99 (2)根据(1)中的等价类表,设计能覆盖所有等价类的 测试用例。
等价类划分法 • 某一PASCAL语言版本中规定: “标识符是由字母打头,后跟字母或数字的任意组合构成。有效字符数为8个,最大字符数为80个”,且规定 • 标识符必须先说明,再使用 • 在同一说明语句中,标识符至少出现一个
等价类划分法 划分好等价类测试:防止遗漏测试案例。
例子: 某城市电话号码由三部分组成,分别是: 地区码—— 空白或三位数字; 前 缀—— 非‘0’或‘1’开头的三位数字; 后 缀—— 4位数字。 假定被测程序能接受一切符合上述规定的电话号码, 拒绝所有不符合规定的电话号码。要求: 请选择适当的黑盒测试方法,写出选择该方法的原因,并使用该方法的步骤,给出测试用例表。
输入条件 有效等价类 编号 无效等价类 编号 地区码 空白 3位数字 有非数字字符 少于3位数字 多于3位数字 使用等价类划分法 5 6 7 1 2 8 9 10 11 12 3 13 14 15 4
NextDate 函数包含三个变量:month 、 day 和 year ,函数的输出为输入日期后一天的日期。 例如,输入为 2006年3月 7日,则函数的输出为 2006年3月8日 。要求输入变量 month 、 day 和 year 均为整数值,并且满足下列条件: ①1≤month≤12②1≤day≤31③1920≤year≤2050
边界值分析法 • 数学含义 A<=x<=B C<=y<=D
无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部。无数的测试实践表明,大量的故障往往发生在输入定义域或输出值域的边界上,而不是在其内部。 • 怎样用边界值分析法设计测试用例? (1)首先确定边界情况。通常输入或输出等价类的边界就是应该着重测试的边界情况。 (2)选取正好等于、刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值。
举例 —— 常见的边界值 • 对16-bit 的整数而言 32767 和 -32768 是边界 • 屏幕上光标在最左上、最右下位置 • 报表的第一行和最后一行 • 数组元素的第一个和最后一个 • 循环的第 0 次、第 1 次和倒数第 2 次、最后一次
边界值分析 • 边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。
边界值分析 • 通常情况下,软件测试所包含的边界检验有几种类型: 数字、字符、位置、质量、大小、速度、方位、尺寸、 空间等 • 相应地,以上类型的边界值应该在: 最大/最小、首位/末位、上/下、最快/最慢、最高/最低、 最短/最长、 空/满等情况下
内部边界值分析 • 某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子边界值条件。 • 内部边界值条件主要有下面几种: • 数值的边界值检验 • 字符的边界值检验 • 其它边界值检验
边界值分析法测试用例 • 在边界值分析法中获取测试用例的方法是: (1) 每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取min、min+、nom、max-和max。 (2) 对程序中的每个变量重复 (1) 。
x2 c d a b x1 边界值分析法测试用例 • 例1:有两个输入变量x1(a≤x1≤b)和x2(c≤x2≤d)的程序F的边界值分析测试用例如下: { <x1nom,x2min>, <x1nom,x2min+>, <x1nom,x2nom>, <x1nom,x2max>, <x1nom,x2max->, <x1min,x2nom>, <x1min+,x2nom>, <x1max,x2nom>, <x1max-,x2nom> }
边界值分析法测试用例(续) • 例2:有二元函数f(x,y),其中x∈[1,12],y∈[1,31]。 则采用边界值分析法设计的测试用例是: { <1,15>, <2,15>, <11,15>, <12,15>, <6,15>, <6,1>, <6,2>, <6,30>, <6,31> } • 推论:对于一个含有n个变量的程序,采用边界值分析法测试程序会产生4n+1个测试用例。
练习:有函数f(x,y,z),其中x∈[1900,2100],y∈[1,12],z∈[1,31]的。请写出该函数采用边界值分析法设计的测试用例。练习:有函数f(x,y,z),其中x∈[1900,2100],y∈[1,12],z∈[1,31]的。请写出该函数采用边界值分析法设计的测试用例。 { <2000,6,1>, <2000,6,2>, <2000,6,30>, <2000,6,31>, <2000,1,15>, <2000,2,15>, <2000,11,15>, <2000,12,15>, <1900,6,15>, <1901,6,15>, <2099,6,15>, <2100,6,15>, <2000,6,15> }
x2 c d a b x1 健壮性测试 • 健壮性测试是作为边界值分析的一个简单的扩充,它除了对变量的5个边界值分析取值外,还需要增加一个略大于最大值(max+)以及略小于最小值(min-)的取值,检查超过极限值时系统的情况。因此,对于有n个变量的函数采用健壮性测试需要6n+1个测试用例。 • 前面例1中的程序F的健壮性测试如下图所示: • 练习:请为例2中的函数f(x,y)写出相应的健壮性测试用例。
边界值分析法测试举例 • 实例1 三角形问题的边界值分析测试用例 在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。在此,我们将三角形每边边长的取范围值设值为[1, 100] 。 说明:如果程序规格说明中没有显式地给出边界值,则可以在设计测试用例前先设定取值的下限值和上限值。 • 实例2 NextDate函数的边界值分析测试用例 在NextDate函数中,隐含规定了变量mouth和变量day的取值范围为1≤mouth≤12和1≤day≤31,并设定变量year的取值范围为1912≤year≤2050 。
边界值分析法 • 例如:测试一个排序程序的边界值分析法的例子,其边界条件有: • 排序序列为空; • 排序序列仅有一个数据; • 排序序列为满,用猜错法补充一下测试用例; • 排序序列已经按要求排好序; • 排序序列的顺序与要求的顺序恰好相反; • 排序序列中的所有数据全部相等。 因为错误最容易发生在边界值附近,所以边界值分析法对于多变量函数的测试很有效,尤其是对于像C/C++数据类型要求不是很严格的语言有利 。
错误推测法 这个错误到底在哪?
因果图 • 因果图法最终生成的是决策表。利用因果图生成测试用例的基本步骤如下: (1)分析软件规格说明中哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。 (2)分析软件规格说明中的语义,找出原因与结果之间、原因与原因之间对应的关系, 根据这些关系画出因果图。 (3)由于语法或环境的限制,有些原因与原因之间、原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。 (4)把因果图转换为决策表。 (5)根据决策表中的每一列设计测试用例。
因果图法测试举例 • 实例用因果图法测试以下程序。 程序的规格说明要求:输入的第一个字符必须是#或*,第二个字符必须是一个数字,此情况下进行文件的修改;如果第一个字符不是#或*,则给出信息N,如果第二个字符不是数字,则给出信息M。 • 解题步骤: (1)分析程序的规格说明,列出原因和结果。 (2)找出原因与结果之间的因果关系、原因与原因之间的约束关系,画出因果图。 (3)将因果图转换成决策表。 (4)根据(3)中的决策表,设计测试用例的输入数据和预期输出。
e1 c1 ~ 10 ∨ E e2 c2 ∧ e3 c3 ~ 因果图法测试举例(续) (1)分析程序规格说明中的原因和结果: (2)画出因果图(编号为10的中间结点是导出结果的进一步原因):
因果图法测试举例(续) (3)将因果图转换成如下所示的决策表: 规则 选项