当前位置:文档之家› 软件测试的目标与原则

软件测试的目标与原则


• 设连锁型分支结构中有 n 个判定,计算满 足关系式 n+1≤2m 的最小自然数m;
• 设t = 2m,取正交表Lt,并利用它设计测试 数据。 • 例如,一个连锁型分支结构中有三个判定 语句p1,p2,p3。全部路径是23=8 条。 先计算3+1≤2m = t 的 t,得 t = 4。取正交 表L4,把每一列当做一个判定,每一行当 做可取的测试用例,可得4个测试用例。
• 前5种覆盖标准把注意力集中在单个判定或 判定的各个条件上,可能会使程序某些路 径没有执行到。路径测试根据各判定表达 式取值的组合,使程序沿着不同的路径执 行,查错能力强。但由于它是从各判定的 整体组合出发设计测试用例的,可能使测 试用例达不到条件组合覆盖的要求。在实 际的逻辑覆盖测试中,一般以条件组合覆 盖为主设计测试用例,然后再补充部分用 例,以达到路径覆盖测试标准。
6种覆盖标准的对比
弱 发 现 错 误 能 力 强 语句覆盖 判定覆盖 条件覆盖 判定/条件覆盖 条件组合覆盖 路径覆盖 每条语句至少执行一次 每个判定的每个分支至少执行一次 每个判定的每个条件应取到各种可能的值 同时满足判定覆盖和条件覆盖 每个判定中各条件的每一种组合至少出现一次 使程序中每一条可能的路径至少执行一次
• 对于连锁型分支结构,当 n 较大时将无法 测试。 • 为减少测试用例的数目,可采用试验设计 法,抽取部分路径进行测试。 • 由于抽样服从均匀分布,因此,在假定各 条路径的重要性相同,或暂不明确各条路 径的重要性的情况下可以做到均匀抽样。 如果明确了各条路径的重要性,还可以采 取加权的办法,筛选掉部分路径,再用如 下的措施进行抽样。
测试用例——为了进行有效的测试而设计的输入 数据和预期的输出结果数据。
测试用例设计的基本目的是确定一组最有可能发现
某个错误或某类错误的测试数据。无论是黑盒测
试(下节内容介绍),还是白盒测试都不可能进行
穷举测试,所以测试用例的设计只能在周期和经
费允许的条件下,使用最少数目的测试用例,发 现最大数目可能的错误。
代码等组成;
测试配置包括测试计划、测试用例(其中
包括预期的结果)、测试工具等组成。
测试结果评价
经常发现严重的错误并需要修改软件, 则软件的质量和可靠性一定不高,需要 进一步测试; 如果测试所发现的错误不多且易于改正, 软件功能看起来也较完善,则需考虑两 种可能: 1)软件质量和可靠性确实令人满意; 2)测试不全面,很可能还潜伏着严重错误; 如果测试过程没有发现任何错误,则很 有可能是测试配置不合理。
白盒测试又称为结构测试或逻辑驱动测试,
此方法是将测试对象比作一个打开的盒子, 它允许测试人员利用程序内部的逻辑结构 和相关信息来设计或选择测试用例,对穿 过软件的逻辑路径进行测试,可以在不同 点检查程序的状态,以确定实际状态与预 期状态是否一致。
表面看来,白盒测试是可以进行完全的测试的,从理论上讲 也应该如此。只要能确定测试模块的所有逻辑路径,并为 每一条逻辑路径设计测试用例,并评价所得到的结果,就
1 2 3 4 5 6 7
0 1 0 1 0 1 0 1 0 0 1 1 0 0 1 1 0 1 1 0 0 1 1 0 0 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 0 0 1 1 1 1 0 0 0 1 L 4 1 0 1 0 L4 0 1
按照错误的性质和范围进行分类
4.数据错误 ①动态数据错误。 ②静态数据错误。静态数据指直接或间接地出现 在程序或数据库中的数据,其内容和格式都是 固定的。因此在内容或格式上都可能存在错误。 ③数据内容错误。是指由于内容被破坏或被错误 地解释而造成的错误。 ④数据结构错误。包括数据结构说明错误和数据 结构使用错误。 ⑤数据属性错误。数据属性是指数据内容的含义 或语义,如整数、字符等。数据属性错误是指 对数据属性的错误解释和错误使用而导致的错 误。
软件测试的常用方法
2.动态测试 动态测试是指事先设计好一组测试用例, 然后通过运行程序来发现错误。 动态测试有两种测试方法: 黑盒测试; 白盒测试。

用黑盒法测试时,必须在所有可 能的输入条件和输出条件中确定测试数 据。是否要对每个数据都进行穷举测试 呢? 例如测试一个程序,需输入 3 个 整数值。微机上,每个整数可能取值有 216 个 , 3 个 整 数 值 的 排 列 组 合 数 为 216×216×216=248≈3×1014 。 假 设 此 程序执行一次为1毫秒,用这些所有的数 据去测试要用1万年!但这还不能算穷举 测试,还要输入一切不合法的数据。可 见,穷举地输入测试数据进行黑盒测试 是不可能的。
系统工程
需求分析
概要设计
设计、编码
单元测试 集成测试 验收测试
系统测试
软件工程的开发与测试的关系
测试阶段的信息流
正确的程序
软件配置 测试
测试配置 预期结果 测试结果
错误
排错
评价
可靠性 可靠性预测 错误统计 模型
测试阶段的信息流
14.1.3 测试阶段的信息流
测试的输入流有软件配置和测试配置。
软件配置由需求规格说明、设计说明、源
• 对于嵌套型分支结构,若有 n 个判定语句, 则存在 n+1 条路径,需要 n+1 个测试用例;
• 对于连锁型分支结构, 若有 n 个判定语句, 则存在2n 条路径,需要有 2n 个测试用例, 覆盖所有的路径。
p1 p1 p2 p3
s1
p2
s2
s1
s2
s3
s4
s3
p3
s4
s5
s6
嵌套型分支结构
连锁型分支结构
按照错误的性质和范围进行分类
5.代码错误 代码错误主要包括语法错误、键入错误、 对语句的理解错误等。 例如,Myers(1976)指出,美国第一个 去金星的太空任务的失败是由于在一个 Fortran do循环中缺少一个逗号。
软件测试的常用方法
1.静态测试 静态测试是采用人工检测和计算机辅助静态分 析的方法对程序进行检测。 人工检测是指靠人工走查程序或评审软件。这 种走查与评审主要针对编码的质量和软件开发 各个阶段的文档,特别是总体设计和详细设计 阶段的错误。能发现 30%~70%的逻辑设计和 编码错误。 计算机辅助静态分析是指利用静态分析软件工 具对程序进行静态分析,主要检测变量是否用 错、参数是否匹配、循环嵌套是否有错、是否 有死循环和永远执行不到的死代码等等。同时, 它还可对程序的特性进行分析。
软件测试中常见的错误类型
按照错误的影响和造成的后果进行分类, 可分为:较小错误,中等错误,较严重 错误,严重错误,非常严重的错误,最 严重的错误。 按照软件生存周期各个阶段分类,可分 为:问题定义错误、需求分析规格说明 错误、设计错误、编码错误等等。 这里重点介绍一种按照错误的性质和范 围进行分类的方法,可以将错误分为如 下几类:
按照错误的性质和范围进行分类 1.功能错误 ①需求规格说明错误。主要是指其中有 错误、多余或遗漏的功能,有二义性 或自相矛盾。 ②设计实现错误。设计或实现的功能不 是规格说明或用户所要求的功能。
按照错误的性质和范围进行分类
2.系统错误 ①外部接口错误。如与打印机的接口错误。 ②内部接口错误。指各程序模块间的联系存在错 误。如输入/输出、数据保护、子程序访问等。 ③硬件结构错误。如错误地理解I/O指令、中断 处理、设备启动和初始化等而引起的错误。 ④软件结构错误。由于软件结构不合理或不清晰 所引起的错误。往往在系统满载时才能发现。 ⑤操作系统错误。该类错误是由于不了解操作系 统而引起的,操作系统本身也有错误。 ⑥控制与顺序错误。包括事件的时间顺序不正确、 等待一个不可能发生的事件等等。 ⑦资源管理错误。既资源使用不当。资源死锁等。
软件测试的步骤
部件 代码 部件 代码
单元测试 单元测试
设计 规格说明
系统 功能需求
其他环境 安装测试

部件 代码 单元测试
集成测试
功能测试
功能 系统
性能测试
验收测试
验证, 生效的 软件
测试后 的模块
集成后 的模块
被接受 的系统 在使用中的系统
测试步骤
软件测试的步骤
可得到100%正确的程序。但实际测试中,这种穷举法是
无法实现的,因为即使是很小的程序,也可能会出现数目 惊人的逻辑路径。如图所示是一个小程序的流程图。
循 环 小 于 等 于 20 次
• 图中,一个圆圈代表一行源程序代码(或一个语句块)。其 中有五条通路,左边曲线箭头表示执行次数不超过20次循 环。这样的执行路径就有520个,近似为1014个可能的路 径。如果1 ms完成一个测试,由此测试程序需3170年。 • 由此看出,即使精确地实现了白盒测试,也不能断言测 试过的程序全正确,因为实行穷举测试,由于工作量过大, 需用时间过长,实施起来是不现实的。这就是程序测试的 经济学问题。既然在测试阶段穷举法测试是不可行的,那 么为了节省时间和资源,提高测试效率,就必须精心设计 测试用例。需从大量的可用测试用例中精选出少量的测试 数据,使得采用这些测试数据能够达到最佳的测试效果, 即能高效地、尽可能多地发现隐藏的错误。测试只能发现 错误,并不能保证程序没有错误。
• 语句覆盖发现错误能力最弱。判定覆盖包含了语 句覆盖,但它可能会使一些条件得不到测试。条 件覆盖对每一条件进行单独检查,一般情况下它 的检错能力较判定覆盖强,但有时达不到判定覆 盖的要求。判定/条件覆盖包含了判定覆盖和条件 覆盖的要求,但由于计算机系统软件实现方式的 限制,实际上不一定达到条件覆盖的标准。条件 组合覆盖发现错误能力较强,凡满足其标准的测 试用例,也必然满足前4种覆盖标准。
按照错误的性质和范围进行分类
3.加工错误(算法错误) ①计算与操作错误。指计算、函数求值和一般 操作过程中的错误。 ②初始化错误。如忘记了初始化工作区、数据 区,错误地对循环变量赋初值,不正确的初 始化等等。 ③局部控制和次序错误。如遗漏路径、不可达 到的代码段、循环嵌套或终止条件不正确、 死循环等等。 ④逻辑错误。如多分支、判断条件不正确等。
相关主题