第5章 软件验证技术——测试分类及方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
黑盒测试
软件工程
黑盒测试又称为功能测试或数据驱动测试。它是在已 知软件所应具有功能的前提下,通过测试来检测每个功能 是否都能正常使用。主要有等价类划分、边界值分析、错 误推测等方法。主要用于软件系统测试阶段。 主要用来证实: 1、软件功能的可操作性 2、检查程序是否满足功能要求或遗漏了功能 3、程序是否能正确地接收输入数据并产生正确的输出信 息 4、数据结构是否错误或外部数据库访问是否错误 5、界面和性能是否错误 6、初始化和终止是否错误。
5.2.2
Fra Baidu bibliotek
集成测试
软件工程
2. 渐增方式 渐增方式又称增殖式组装方式。该方式是把下一个 要测试的模块同已经测试好的模块连接起来进行测试, 测试完以后再把下一个应该测试的模块连接进来测试。 显然渐增方式的作法与非渐增方式不同。它的集成是 逐步实现的,集成测试也是逐步完成的。当使用渐增 方式把模块连接到程序中去,按不同的次序实施时有: 自顶向下和自底向上两种策略可供选择。 ①自顶向下集成 自顶向下集成首先单独测试最顶层的模块或构件。 最顶层的模块或构件一般是一个控制模块或构件,它 可能调用其他还没有测试的模块或构件。因此,测试 时需要为它编写存根程序代替所有直接附属于主控模 块的模块。存根程序接受被测模块或构件的调用并且 返回结果数据,以便测试能够进行下去。
5.1 软件测试概述
软件工程
l 软件测试是为了发现缺陷而执行程序的过程。 l 测试是为了证明程序中有错误,而不是证明程序中 无错误。 l一个好的测试用例指的是它可能发现至今尚未发现的 缺陷。 l一次成功的测试指的是发现了新的软件缺陷的测试。
测试的目的是想以最少的时间和人力找出软件 中潜在的各种错误和缺陷。 测试只能尽可能多的查找出程序中错误,而不 能证明程序中没有错误。
5.1.2 软件测试的方法和步骤
软件工程
1. 软件测试方法 根据测试过程是否需要运行被测试的程序,软 件测试方法一般分为静态测试方法与动态测试方 法。 ①静态测试 静态测试是在对软件代码进行分析、检查和 测试时不实际运行被测试的程序,同时它还可以 用于对各种软件文档进行测试。静态测试可以采 用人工检测和计算机辅助的手段进行,它适用于 软件开发的全过程。
2. 渐增方式
软件工程
自顶向下测试方法的主要优点是不需要测试 驱动程序,能够在测试阶段的早期实现并验证系 统的主要功能,而且能在早期发现上层模块的接 口错误。自顶向下测试方法的主要缺点是需要存 根程序,可能遇到与此相联系的测试困难,低层 关键模块中的错误发现较晚,而且用这种方法在 早期不能充分展开人力。因此在实际的集成测试 中,往往采用将两种策略进行混合使用的策略。
白盒测试
软件工程
• 白盒测试也称结构测试或逻辑驱动测试。 它是在已知程序内部结构和处理过程的 前提下,通过测试来检测程序中的每条 路径是否按预定要求正常运行。主要有 逻辑覆盖、基本路径测试等,它主要用 于验证测试的充分性。 • 测试人员完全知道程序的内部结构和处 理算法,并按照程序内部的逻辑测试程 序,对程序中尽可能多的逻辑路径进行 测试,在所有的点检验内部控制结构和 数据结构是否和预期相同。
第5章 软 件 验 证 技 术
软件工程
软件编码和软件测试通常统称为软件实现。 软件编码就是平常所说的软件编程,实质上,编码是把详细设 计的算法翻译成计算机上可执行的语言,翻译员就是程序员。 程序的质量主要取决于软件设计的质量。 在软件交付使用以前必须经过严格的软件测试,通过测试尽可 能找出软件计划、总体设计、详细设计、软件编码中的错误, 并加以纠正,才能得到高质量的软件。 通常软件测试并不是在软件编码完全完成后进行,它常常横跨 软件生命周期中两个阶段。 测试的工作量和成本非常大,据统计测试工作量要占软件开发 总工作量的40%到50%以上,用在测试上的开销要占软件开发 总成本的30%至50%。测试的目的是确保软件的质量,尽量找出 软件错误并加以纠正,而不是证明软件没有错误。
2. 渐增方式
软件工程
自底向上集成 1、单独测试位于系统最底层的模块或 构件 2、最底层模块或构件与那些直接调用 最底层模块或构件的上一层模块或构 件集成起来一起测试。 这个过程一直持续下去,直到将系 统所有的模块或构件都集成起来,形 成一个完整的软件系统进行测试。
2. 渐增方式
软件工程
自底向上集成 具体步骤如下: ①把低层模块组合成实现某个特定的软件子功能 的功能集合。 ②写一个驱动程序(用于测试的控制程序),协调 测试数据的输入和输出。 ③ 对由模块组成的子功能集合进行测试。 ④ 去掉驱动程序,沿软件结构自下而上移动,把 子功能集合组合起来形成更大的子功能集合。 ⑤ 重复②~④步。 自底向上集成测试一般适用于底层存在众多 通用例行子程序、采用面向对象设计方法以及系统 使用了大量单独的可重用模块的地方。
5.1 软件测试概述
软件工程
• 软件测试的范围: 对软件计划、软件设计、软件编码进 行查错和纠错的活动,它涉及到软件开发 周期中各个阶段的错误,并分析错误的性 质与位置而加以纠正。 • 纠正过程可能涉及到改正或重新设计相关 的文档活动。 • 找错的活动称软件测试,纠错的活动称软 件调试。
5.1.1 软件测试的概念和原则
2. 渐增方式
软件工程
自顶向下集成 在组装过程中,可以使用深度优先的策略或 宽度优先的策略。深度优先的策略是首先集成一 个主控路径下的所有模块,主控路径的选择具有 任意性,它依赖于应用程序的特性。宽度优先的 策略是将每一层中所有直接隶属于上层的模块集 成起来测试。为了保证加入模块没有引进新的错 误,可能需要进行回归测试。 所谓回归测试就是在对软件进行修改之后 所进行的测试,其目的是检验对软件的修改是否 正确。回归测试一般在软件维护阶段进行,但在 软件开发和测试阶段也经常会用到。回归测试通 常包括重新运行原有的测试数据。因此,需要弄 清哪些测试数据与被修改部分有关。
2.软件测试过程
软件工程
③集成测试 集成测试又称组装测试或联合测 试。它是指在单元测试的基础上,将模 块或组件按照设计要求组装起来同时进 行测试,其主要目标是发现与接口有关 的问题,即模块或组件之间的协调与通 信。
2.软件测试过程
软件工程
④系统测试 集成完模块或组件后,系统测试是 确保整个测试的软件系统与系统的功能 和非功能性需求保持一致。为了完成这 一目的,需要开展下面几种系统测试活 动:功能测试、性能测试、验收测试、 安装测试。
5.2 软件测试的策略
软件工程 5.2.1 单元测试 单元测试通常采用白盒测试对模块或组件进行彻底测试,然 后辅之以黑盒测试使之对任何合理和不合理的输入都能鉴 别和响应。 所测模块、驱动程序和存根程序共同构成了一个模块 “测试环境”。 测试主要针对每个模块或组件的5个基本特征进行测试:
1. 2. 3. 4. 5. 模块或组件接口 局部数据结构 重要的执行通路 出错处理通路 影响上述各方面特性的边界条件。
第5章 软 件 验 证 技 术
软件工程
本章要点 : 软件测试的任务、方法及步骤 单元测试、集成测试和系统测试 测试用例的设计 软件调试的原则、方法和步骤 软件可靠性 常用的软件测试工具
第5章 软 件 验 证 技 术
软件工程
本章学习目标 :
掌握测试阶段的目的及原则、测试方法和步骤 理解单元测试、集成测试和系统测试方法和策略 深刻理解并掌握白盒、黑盒测试法用例的设计技术 理解调试的原则,掌握调试的方法和步骤 掌握可靠性概念及指标,MTTF及错误总数的估算方法
2.软件测试过程
软件工程
与软件开发过程相反,测试是从模 块或组件开始,自底向上逐步集成的过 程。 代码审查对应编码阶段 单元测试对应详细设计或源程序代码 集成测试对应概要设计 系统测试对应需求说明书
5.2 软件测试的策略
软件工程 5.2.1 单元测试 在单元测试时,由于被测试的模块或组件处于整个软件 结构的某一层位置上,一般是被其它模块或组件调用或调用 其它模块或组件,其本身不能单独运行,因此需要为被测模 块或组件设计驱动程序和存根程序。 驱动程序也就是一个“主程序”,它接收测试数据,把这些 数据传送给被测试的模块或组件,并且印出有关的结果。 存根程序也称桩(stub)程序,它代替被测试的模块所调用的 模块或组件。因此存根程序也可以称为“虚拟子程序”。
5.2 软件测试的策略
软件工程
5.2.2 集成测试 在每个模块完成单元测试以后,需要按照设计时 的结构图,把它们连接起来,进行集成测试。通常 将模块连接成系统主要有两种方式:非渐增方式、 渐增方式。 1. 非渐增方式 不非渐增方式又称为一次性组装方式, 也称为 大爆炸集成(Big-bang Integration)。这种方式是 在所有模块进行了单元测试后,将所有模块按设计 的结构图要求连接起来,连接后的程序作为一个整 体来进行测试。 在一些很小型的软件项目中,可以使用非渐增方 式进行系统集成测试,而在大型软件项目中,这种 集成测试策略显然是不合适的。所以目前在进行集 成测试时普遍采用渐增方式来进行测试。
2.软件测试过程
软件工程
一个规范化的软件测试过程通常包括以下 一些基本测试活动:制定软件测试计划、编制 软件测试大纲、设计和生成测试用例、实施测 试、生成软件问题报告。
通常可以将测试阶段划分成代码审查、单 元测试、集成测试和系统测试4个阶段。
2.软件测试过程
软件工程
①代码审查 代码审查是一种非常有效的程序验 证技术,对于典型的程序来说,可以查 出30%~70%的逻辑设计错误和编码错误。 它是由审查小组通过阅读、讨论和争议 对程序进行静态测试的过程。
1. 软件测试方法
软件工程
②动态测试 (黑盒测试与白盒测试) 动态测试就是通过运行软件来检验软件的 动态行为和运行结果的正确性。 动态测试的主要特征是计算机必须真正运 行被测试的程序,通过输入测试数据,对其 运行情况(即输入与输出之间的对应关系)进 行分析。 因此所有动态测试都必须包括两个基本要 素:被测试软件和用于运行软件的数据,即 测试数据。
5.2.3 系统测试
软件工程
系统测试的目的是保证所实现的系统确实是用户所想 要的。为了到达此目的,需要完成一系列测试活动。这些 活动包括功能测试、性能测试、验收测试、安装测试。 1. 功能测试 功能测试也称为需求测试,主要测试系统的功能性需 求,找出功能性需求和系统之间的差异,即检查软件系统 是否完成了需求规格中所指定的功能。功能测试主要使用 黑盒测试技术。 2. 性能测试 性能测试主要测试系统的非功能性需求,找出非功能 性需求和系统之间的差异,即检查软件系统是否完成了需 求规格中所指定的非功能性要求,如安全性、计算精度、 运行速度以及安全性等。性能测试期间要进行很多项测试 活动,下面是主要的一些活动。
1. 错误(error)、缺陷(fault)和故障(failure)
软件工程 错误(error) 人们在进行软件开发的过程中犯了一个错,则 称为一个错误(error)。例如:一个实际测量值与理论预期 值之间的差异,这种差异就是错误;一些人的行为引起的软 件中的某种故障,通常这些故障是由软件错误造成的。 缺陷(fault)常被称为bug,它是导致软件失败的一个条件。 故障(failure)又称失效,它是指软件不能按软件规格说明 要求执行,从而引起软件行为与用户需求的不一致现象。
2.软件测试过程
软件工程
②单元测试 单元测试就是对软件中的基本组成单位 (如一个类、类中的一个方法、一个模块等) 进行测试。 因为需要知道程序内部设计和编码的细 节,所以单元测试一般由程序员而非测试人 员来完成。通过测试可发现实现该模块的实 际功能与定义该模块的功能说明不符合的情 况,以及编码的错误。
缺陷是开发人员所看到的软件系统的内部问题,而故 障是用户从外部观察到的软件行为与软件需求的偏差。并不 是每个软件缺陷都一定会导致软件发生故障,缺陷只有在满 足某种条件的情况下才会导致软件故障。
5.1.1 软件测试的概念和原则
软件工程
2. 软件测试的基本原则 l不完全原则 :不完全原则表明测试是不完全 的,穷举测试是不可能的。 l免疫性原则 :软件缺陷具有免疫性,测试人 员完成的测试越多,其免疫能力就越强,寻找 更多软件缺陷也就更加困难。 l全程测试原则 :全程测试原则要求软件测试 不仅存在于完成程序之后,而应该跨越整个软 件开发流程。 l 80/20原则 :80/20原则是指80%的软件缺 陷存在于软件20%的空间里,软件缺陷具有空 间聚集性。