【软件测试】

本文详细介绍了软件测试的目的、类型、方法和重要性,包括白盒测试、黑盒测试、单元测试、集成测试、系统测试等,并强调了边界值分析、等价类划分在测试用例设计中的应用。此外,文章还探讨了测试模型、测试阶段划分和回归测试的概念,以及软件测试人员的素质要求和测试过程中的最佳实践。
摘要由CSDN通过智能技术生成

软件测试是什么?

软件测试是以发现软件的缺陷为目的,使软件运行,并将软件不运行所产生的危险性降低到允许的范围

软件测试是为了发现错误而执行程序的过程。

设计测试用例,并利用这些测试用例去运行程序,以 发现错误。

IEEE提出的软件工程标准术语,软件测试定义如下: “使用人工和自动手段来运行或测试某个系统的过程, 其目的在于检验它是否满足规定的需求或者是弄清预 期结果与实际结果之间的差别。”

软件测试的目的

发现程序的错误

发现程序中的错误并 进行修正,将软件不 工作的风险程度降低 到一个可以接受的程 度,而不是为了证明 软件没有问题

验证需求的正确

软件测试的目的就是 验证软件是否满足客户 的需求,确保提交到客 户的产品能够满足客户 的需求

质量保证的需要

软件质量保证是软件 开发周期中一个重要 环节,以软测试为中 心的软件质量保证技 术在软件质量保证过 程中起重要的作用

学习测试技术的目的

从一个测试例子说起

式样要求

•I大于等于0时,打印“I≧0”

•I小于0时,打印“I<0”

程序实现

PROGRAM SAMPLE

IF(I.GE.0)THEN (GE表示“≧”)

        PRINT*,‘I≧0’ (PRINT时显示‘I≧0’)

ELSE

        PRINT*,‘I<0’

END IF

END

A:6种测试用例:

case 1:I=1 测试结果:打印“I≧0”

case 2:I=5 测试结果:打印“I≧0”

case 3:I=10 测试结果:打印“I≧0”

case 4:I=-1 测试结果:打印“I<0”

case 5:I=-5 测试结果:打印“I<0”

case 6:I=-10 测试结果:打印“I<0”

B:2种测试用例:

case 1:I=1 测试结果:打印“I≧0”

case 2:I=-1 测试结果:打印“I<0”

C:3种测试用例:

case 1:I=1 测试结果:打印“I≧0”

case 2:I=0 测试结果:打印“I≧0”

case 3:I=-1 测试结果:打印“I<0”

各自测试的说明

• A:我实行了非常多的测试用例。所以3人之中我实施了 最好的测试!

• B:A实施了多余无用的测试。其实,这时候只要两个 测试用例就足够了。我实施了非常有效率的测试!

• C:A实施了多余无用的测试。而B的测试用例又太少 了,尤其是边界值左右的测试用例不足!

实施测试就需要掌握测试技术 三人谁实施了更好的测试用例,即掌握了正确的测试方法?

提示:如程序中“I>=0”误写成了“I>0”,谁能发现问题?

开发者测试的目的就是“保证自己设计东西的质量”!

什么是缺陷

软件缺陷是对软件产品预期属性的偏离现象

判断缺陷的规则
1. 软件未达到产品说明书标明的功能
2. 软件出现了产品说明书指明不会出现的错误
3. 软件功能超出产品说明书指明范围(额外的创造是不需要的)
4. 软件未达到产品说明书虽未指出但应达到的目标
5. 软件测试员认为软件难以理解、不易使用、运行速度缓慢
6. 最终用户认为不好

软件缺陷是不可能完全避免

开发过程中沟通不足

软件复杂度越来越高

程序编写时产生错误

需求理解不足及变化

项目进度和日程压力

开发文档的重视不够

软件开发工具的缺陷

 

软件测试的内容

验证设计

证实需求

发现缺陷

预防缺陷 

软件测试的规律

木桶原理

•在软件产品生产方面就是全面质量管理(TQM)的概念。产品质量的关键因素 是分析、设计和实现,测试应该是融于其中的补充检查手段。测试是提高产 品质量的必要条件,也是提高产品质量最直接、最快捷的手段,但决不是一 种根本手段。反过来说,如果将提高产品质量的砝码全部押在测试上,那将 是一个恐怖而漫长的灾难。

BUG的80-20原则

•一般情况下,在分析、设计、实现阶段的复审和测试工作能够发现和避免 80%的Bug,而系统测试又能找出其余Bug中的80%,最后的5%的Bug可能只有 在用户的大范围、长时间使用后才会曝露出来。因为测试只能够保证尽可能 多地发现错误,无法保证能够发现所有的错误。

•80% 的软件缺陷常常生存在软件 20% 的空间里。如要有效的软件测试,则 应重点关注高危多发 “ 地段 ” 。在那里发现软件缺陷的可能性会大的多。

软件测试的发展

传统测试

• 在开发的后期才介入和进行

• 其概念是基于代码运行的活动

• 以发现错误为目的的范畴

现代测试

• 已扩展到整个软件生命周期

• 其概念已扩展到静态的概念

• 已扩展到缺陷预防的范畴

软件测试人员的基本素质


探索精神
故障排除能手
不懈努力
创造性
追求完美
判断准确
老练稳重
说服力

1.他们不会害怕进入陌生环境,喜欢拿到新软件,安装在自己机器上,观看结果

2.他们善于发现问题的症结,喜欢猜谜

3.他们总是不停尝试。可能会碰到转瞬即逝或者难以重建的软件缺陷。他们不会心存侥幸,而是尽一切可能去寻找

4.只测试显而易见的事实,那不是一个很好的测试员。他们的工作是想出富有创意甚至超常的手动来寻找软件缺陷

5.他们力求完美,但是知道某些无法企及时,不去苛求,而是尽力接近目标

6.他们要决定测试内容、测试时间,以及看到的问题是否算作真正的缺陷

7.他们不害怕坏消息,他们必须告诉程序员。优秀的软件测试员知道怎样老练地处理这些问题,和不够冷静的程序员怎样合作

8.他们找出的软件缺陷有时被认为不重要,不用修复。测试员要善于表达观点,表明软件缺陷为何必须修复,并通过实际演示力陈观点

软件测试的几个基本概念


测试阶段划分

  • 单体测试:是指对单个模块或者是一个函数等更小单位的测试
  • 集成测试:是指都多个模块组合起来后进行的测试
  • 系统测试:是指整个系统的所有模块都结合起来以后进行的测试
  • 回归测试:是指修复或调整好软件环境之后进行测试
  • 差分测试:是指只对整个系统中新变更功能的相关部分的测试

测试方法划分

  • 手动测试:是指测试人员,根据功能规格说明书、编写的测试大纲或者其他测试文档,直接运行程序而完成的测试
  • 自动化测试:是指测试人员,使用自动测试工具,让程序自动运行而进行的测试
软件测试活动从不同的角度和手段考虑,可以分为:
  • 静态测试与动态测试
  • 白盒测试与黑盒测试
  • 手工测试与自动测试
  • 随机测试与穷举测试
静态测试

不运行被测试的软件系统,而是采用其他手段和技术对测 试软件进行检测的一种测试技术,如:

  • 代码检查
  • 文档评审(各种评审是一 种有效的静态测试方法)
  • 控制流分析
  • 数据流分析
  • 信息流分析
动态测试

按照预先设计的数据和步骤去运行被测软件系统,从而对 被测试软件系统进行检测的一种测试技术:

  • 单元测试
  • 集成测试
  • 系统测试
  • 验收测试
白盒测试

• 白盒测试又称结构测 试、逻辑驱动测试或 基于程序的测试。是依据被测试程序分析程序内部构造和设计用例,来对内部控制流程进行测试,可完全不考虑程序的整体功能实现情况。

• 白盒测试是基于程序结构的逻辑驱动测试。

白盒测试方法

语句覆盖:又称行覆盖、段覆盖、基本块覆盖,这是最常见的一种覆盖方 式,就是度量被测代码中每个可执行语句是否被执行到了。

条件覆盖:又称分支覆盖。设计足够的测试用例,使得程序中的每一个取“ 真”分支和取“假”分支至少经历一次。

判定覆盖:构造一组测试用例,使得每一判定语句中每个逻辑条件的可能 值至少满足一次 。通常一个判定语句是由多个条件组合而成。

路径覆盖:又称断言覆盖。它度量了是否函数的每一个分支都被执行了。 有多个分支嵌套时,需要对多个分支进行排列组合。可想而知 ,测试路径随着分支的数量指数级别增加。

程序插桩:简单的说就是借助被测程序中插入操作来实现测试目的的方法 。常用的就是断言语句,了解程序执行中的一些动态信息。

  • 设计思想:调试程序时我们常通过在程序中插入一些打印语句来输出我们 关心的信息,如程序实际执行路径,特定变量的的取值等,程序插装就是利用这种思想来获得我们需要的各种信息。
  • 关注重点:• 探测哪些信息 • 在程序什么位置进行探测 • 需要设置多少个探测点

测试设计用例分析_白盒测试1

 基本路径测试

  •   把流程图改成流图
  •   建立独立路径

        独立路径是指程序中至少引进一个新的处理语句集合或者一个新条件的任一路径。即独立路径必须至少包含一条在定义该路径之前不曾用到的新边 

  •   建立独立路径集合,组成路径覆盖测试所采用的测试用例集

测试设计用例分析_白盒测试2

独立路径建立

路径1:1->11
路径2:1->2->3->4->5->10->1->11 
路径3:1->2->3->6->8->9->10->1->11  
路径4:1->2->3->6->7->9->10->1->11
这里的每一条新的路径都包含了一条新边 
而路径1->2->3->4->5->10->1->2->3->6->8->9->10->1->11,对于上面4条来说不是独立路径,因为它只是已有路径的简单合并,并未包含任何新边
独立路径集合:路径1~路径4

黑盒测试

• 黑盒测试主要关注被测 软件的功能和非功能属性的实现,测试人员对被测产品的验证主要是根据其规格,验证其与规格的一致性。

• 黑盒测试把软件系统看成一个黑盒子,完全不考虑软件内部逻辑结构 和处理过程。

• 黑盒测试是基于规格和数据驱动的测试,依据是需求规格说明书。

黑盒测试设计


等价类划分

  •   等价类划分是指分步骤地把过多的测试用例减少到同样有效的小范围的过程
  •   等价类是指测试相同目标或者暴露相同软件缺陷的一组测试用例

等价类划分的步骤

  •   无效等价类和有效等价类的确定
  •   以最少的测试设计覆盖最多的有效等价类,直到完成覆盖为止
  •   选择一个测试设计去包含一个无效等价类,直到测试设计包含所有的无效等价类为止

等价划分的方法

  •   输入条件代表一个范围或者需要一个特定的值,则可以定义一个有效等价类和两个无效等价类 
  •   输入条件代表集合的某个元素或者是该输入条件是布尔式的,则可以定义一个有效等价类和一个无效等价类 
  •   如果确认已划分的等价类中各元素在程序中的处理方式是不同的,则应将此等价类进一步划小 
  •   默认值、空白、空值或者无输入等条件要作为特殊的等价类

把输入输出划分为一定的区域:

  • 用一个值等价代替区域内的其它值,测试单元行为
  • 区域内其它值被忽略

输入输出不仅仅包括进程的参数:

  • 外部数据,全局变量
  • 时间
  • 次序/历史
  • 状态

每一区域都应设计测试用例,区域分类如下:

  • 有效等价类
  • 无效等价类

实例说明 
设有条件式: 0<X<=10,则:
无效等价类1:
X<=0,如0,-1,-2,-3…..
有效等价类:
0<X<=10,如1,2…9,10
无效等价类2:
X>10,如11,12,13…

测试用例
• 测试用例1:
X=-1,覆盖无效等价类1;
• 测试用例2:
X=1,覆盖有效等价类;
• 测试用例3:
X=12,覆盖无效等价类2。

依据等价类划分进行测试,需要做到:
• 等价类划分需要和边界值分析结合来设计测试用例;
• 有效等价类测试用例需要包含有效等价类内的边界值以及中间值;
• 每个无效等价类都要分别测试,测试用例需要包含各无效等价类内的边界值。

边界值分析


边界值分析是指软件计划的操作界限所在的边缘条件

着眼于某条件的真、假交界处的值,以极限值来测试:

  • 错误可能经常发生在边界的取值;
  • 边界值分析使用与等价类划分同样的区域。

设计用例原则 :

  • 若输入规定了取值范围等,则应取范围的边界值;
  • 对于客户需求的每个输出条件也应取范围的边界值;
  • 如果客户需求中的输入和输出是有限的集合,则应当
  • 取集合中的第一个和最后一个元素作为测试用例;
  • 分析客户需求,找到其他可能的边界值。

边界值的数据类型:
包括数值、速度、字符、地址、位置、尺寸、数量等

边界特征:
第一个/最后一个、最小值/最大值、开始/完成、超过/在内、空/满、最短/最长、最慢/最快、最早/最迟、最大/最小、最高/最低、和相邻/最远等特征

边界值分析的方法
  输入条件代表以α和β为边界的范围时,测试用例应当包含α、β以及略大于α和略小于β的值 
  输入条件代表一组值,测试用例应当执行其中的最大值和最小值,还应当执行略大于最小值和略小于最大值的值 
  对于前两个方法,也要考虑输出条件,测试用例应当包括能够产生最大和最小的输出值的数据 
  如果程序数据结构有预定义的边界(比如要求数组有100项),要测试其边界的数据项 
边界值分析的注意事项
  在软件的每一个部分不断寻找边界时极为重要的,更多的边界将会被发现,从而找出更多的软件缺陷
  软件内部存在的边界是不能忽略的(2进制、ASCII、Unicode等) 

实例说明 
设有条件式: 0<X<=10,则:
• X<=0:-1,0,1
• 0<X<=10:-1,0,1,9,10,11
• X>10:9,10,11
测试用例:
只要测试X=-1,0,1,9,10,11这6个测试CASE就达到了边界值测试要求

依据边界值分析测试,需要做到:
• 边界值分析需要和等价类划分结合来设计测试用例;
• 边界值测试要选取正好等于、刚刚大于、或刚刚小于边界的值作为数据进行测试;
• 根据客户需求及硬件限制等状况找到各种可能的边界是进行边界值分析的关键。

状态迁移测试

状态迁移测试的目的:
通过给定的触发条件验证软件对应的状态迁移和处理是否正确。
状态迁移测试概述:
又称功能图分析方法或者流程测试,用这种方法可以逆向的设计测试用
例,比如状态和事件的非法组合。
状态迁移测试的原则:
根据状态迁移图,列出状态事件表,推导出测试路径,编写合法测试用例,同期编写出非法测试用例。

判定表驱动

内容概述
在一些数据处理问题中,某些操作是否实施依赖于多个逻辑条件的取值。也即在这些逻辑条件取值的组合所构成的多种情况下,分别执行不同的操作。判定表可以有效测试这类问题的正确与否。
基本应用
决策表的纵向描述输入条件和处理结果,横向描述测试项目编号。在表的各单元格中填写○/—(真/假)或具体的输入值。这样就可防止测试项目的遗漏,测试的重复进行,证明覆盖率,便于维护。
适用条件
• 客户需求以判定表形式给出,或是很容易转换成判定表;
• 条件或者规则的排列顺序不会也不应影响执行哪些操作;

错误推测法


内容概述
基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例。
基本思想
列出程序中所有可能有错误和易发生错误的特殊情况据此选择测试用例。
推测依据
• 该模块中常见的错误
• 以前产品测试中曾经发现的错误等
• 已发现缺陷的测试方法的推广
• 容易发生错误的情况 

基于客户需求的测试

  • 功能测试
  • 性能测试
  • 容错测试
  • 安全测试

黑盒综合测试策略
• 首先进行等价类划分,包括输入条件和输出条件的等价划分,将无限测试变成有限测试,这是减少工作量和提高测试效率最有效的方法。
• 在任何情况下,都必须使用边界值分析法。经验表明,用这种方法设计出的测试用例发现程序错误的的能力最强。
• 可以使用错误推测法追加一些测试用例,这需要依靠测试人员的智慧和经验。
• 对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,应当再补充足够的测试用例。
• 如果程序的功能说明中含有输入条件的组合情况,则一开始就可以选用判定表驱动法。
• 根据即客户需求和系统设计的要求进行必要的容错、性能和安全测试。

测试设计用例分析_黑盒测试


功能说明:
通过输入a、b、c的值来判断是否为等腰三角形,要求a、b、c为正整数且取值范围为(0,9999]
请建立测试用例进行测试

 

白盒和黑盒测试的差异点

软件产品周期简介


 根据需求文档进行分析制定测试策略和测试计划
 分别根据需求分析、概要设计和详细设计的输出进行测试设计
 使用测试设计文档,进行各个阶段的测试执行
 当软件产品周期,需求文档变化时,将重新进行前三个工作
 产品Release之后进行测试工作的总结

测试设计

根据测试阶段的不同,测试设计包括以下几种:
系统测试的测试设计
集成测试的测试设计
性能测试的测试设计
单体测试的测试设计

系统集成测试的测试设计


测试大纲的编写

  •  提出功能点
  •  功能点细化
  •  测试方法和测试结果填写

1.根据需求分析文档得到软件产品应该包括的功能点(包括大小功能点),组成测试大纲的第一部分,要求测试大纲必须覆盖软件产品应该包括的全部功能点
2.分析需求分析文档得到每个功能点的细化部分,组成测试大纲的第二部分,要求覆盖需求文档中所有可测试的内容
3.对每个功能点的细化部分,确定其测试方法(或者测试步骤)和预计的正确测试结果
测试用例的编写

  •   编写覆盖主要的功能点的测试用例,以供功能验证时使用
  •   需要特殊条件才能测试的功能点,必须编写测试用例

性能测试的测试设计


根据性能指标,选择测试用例
根据需求文档得到用户明确要求的性能指标
根据收集的性能指标,建立性能测试的测试大纲

版本升级的项目,各功能的性能指标不得低于旧版本的性能指标
模型产品,新模型各功能的性能指标以不低于旧模型的性能为要求

单体测试的测试设计


白盒测试的测试设计方法
命令覆盖
要求程序中每一可执行语句至少执行一次 
分支覆盖
要求程序中每个判定的True分支和False分支至少执行一次 
条件覆盖
要求使程序的每个条件语句的True和False取值至少满足一次 
路径覆盖
要求设计足够的测试用例,要求覆盖程序中所有的路径 

根据测试阶段的不同,测试执行分成

  •   单体测试的测试执行
  •   单集成测试的测试执行
  •   集成测试和系统测试的测试执行
  •   性能测试的测试执行

单体测试的测试执行

  •  根据白盒测试设计和黑盒测试设计得到测试用例
  •   编写对待测代码进行输入和得到输出程序,或者找到能对待测代码进行输入和得到输出的调试方法
  •   使用测试用例逐一输入,收集输出结果,检查输出结果是否正确
  •   代码检查是单体测试必须的步骤

单集成测试的测试执行-1


  自顶向下法
自顶向下法的步骤
1.将主控模块作为测试驱动器,所有的稳定桩替换为隶属于主控模块的模块
2.根据集成的实现方法(深度优先或者广度优先),下层的稳定桩一次一个地被替换为真正的模块
3.在每一个模块集成的时候都要进行测试
4.在完成了每一次测试之后,又一个稳定桩被用真正的模块替换

单集成测试的测试执行-2


  自底向上法
自底向上法的步骤:
1.低层模块组合成能够实现软件特定子功能的簇
2.写一个驱动程序(一个供测试用的控制程序)来协调测试用例的输入输出
3.对簇进行测试
4.移走驱动程序,沿着程序结构的层次向上对簇进行组合 

 集成测试和系统测试的执行-1

  • 判定需求,执行测试设计和测试用例,填写结果
  •  及时准确反馈产品缺陷
  •  定期完成修改的确认
  •  分析缺陷发生趋势,制定测试策略
  •  需求变更时,对应变更测试设计文档

 集成测试和系统测试的执行-2


 判定需求,执行测试设计和测试用例,填写结果

  • 获得测试版本的同时要获得版本对应的测试需求,根据需求选择相关的测试设计文档和测试用例文档
  • 根据选择的文档进行测试,要求至少完成一遍的覆盖,覆盖测试后填写测试结果(OK和NG)
  • 完成版本的测试时,把完成的文档测试结果和该版本发现的缺陷一起提交

集成测试和系统测试的执行-3


及时准确反馈产品缺陷

  •   测试中发现缺陷(包括不确定的)时,首先要进行记录,其次在进行是否缺陷的分析
  •   当天发现的缺陷要尽量在当天完成登陆
  •   要准确填写错误等级和再现率

错误等级

  • A类为严重影响系统运行(并且不可恢复)
  • B类为影响系统运行(可以恢复)
  • C类为不影响系统运行但必须修改
  • D类为所提建议 

再现率

  • 要求记录准确的测试和再现次数,尽量不要出现1/1的情况
  • 再现时注意环境的正确,在已经出现缺陷的环境上继续再现的意义不大
  • 再现前要尽量通过分析降低再现的难度和再现的步骤

集成测试和系统测试的执行-4


及时准确反馈产品缺陷
补充发现缺陷的相关信息(DEBUG信息,缺陷发生的图片,死机时的堆栈信息,发生缺陷的现场等)

集成测试和系统测试的执行-5


定期完成修改的确认

  •   当发布新的版本到测试时,要得到该版本开发人员投入的已经修改的缺陷,进行确认
  •   合理的分配测试时间,当测试工作量比较大时,首先完成变更点的测试,然后再进行确认测试

集成测试和系统测试的执行-6


 分析缺陷发生趋势,制定测试策略
 1.收集测试数据,分析并使用
区分整个测试时间里,测试时间占用情况的分类
功能覆盖测试
脱离测试设计文档的自由测试
差分测试 (针对功能点变更进行的测试)
发现缺陷的再现测试
确认测试
开发人员调试
2.根据不同分类收集测试数据
根据测试时间占用情况的分类进行测试数据的收集
分析测试效率,发现问题
对于功能覆盖测试、自由测试和差分测试都是有效的测试时间,基本上90%以上的缺陷都是这个期间发现的,因此可以得到测试组以及每个测试人员的测试效率,然后再结合实际进行分析,就能得到测试组或者某个测试成员的测试状态如何

集成测试和系统测试的执行-7


需求变更时,对应变更测试设计文档

  • 对应产品开发过程中的需求变更方法,要和项目开始前的需求分析方法相同,对需求变更的部分及时修改或者填写测试设计文档

性能测试的测试执行


选择性能测试的对象,建立性能测试测试大纲
 收集评价用的性能数据,向测试大纲进行补充
 定期根据性能测试测试大纲,对产品进行性能测试数据收集
 及时反馈性能数据

  • 对提前收集的性能数据分析,评估当前的产品不能达到性能要求时立即向开发人员反馈性能数据
  • 对性能测试阶段收集的性能数据,进行分析后提交开发人员

反馈性能数据的目的:

  • 评估和预定的性能指标的差异
  • 帮助开发人员分析造成性能指标差异的原因

例题


Myers问题: 读入三个整数值。这三个数值表示了一个三角形三条边的长度。程序将输出一条信息,说明该三角形是不等边三角形,等腰三角形,还是等边三角形。(并不要求写出程序)写出你认为能充分地测试这个问题的测试实例(即特定的数据集)。

(格式可写成:测试实例说明     测试实例值       期望输出)。 

备注:假设该系统整数的取值范围是[-65536~65535]

例题答案


*1    合法的不等边三角形                 5    3    4               不等边三角形 
*2    合法的等腰三角形                    3    3    4                等腰三角形 
*3     合法的等边三角形                    3    3    3        等边三角形 
*4     两个相同值边的互换(第一次)      50   50   25              等腰三角形 
5     两个相同值边的互换(第二次)       25   50   50               等腰三角形 
6     两个相同值边的互换(第三次)       50   25   50               等腰三角形 

*7    一条边为0                           1000  1000  0               非法 
*8     一条边值为负                         3     3    -4               非法 
*9     两条相同边的第一次互换(非法)    5     5    10               非法 
10    两条相同边的第二次互换(非法)     10    5    5                非法 
11    两条相同边的第三次互换(非法)    5     10   5                非法 
*12    两条较小的边长之和小于最大的边长 8     2    5                非法 
13    上例的二条边第二次交换                2     8    5                非法 
14    上例的二条边再次交换                  2    5    8                 非法 
15    上例的二条边再次交换                  8    5    2                 非法 
16    上例的二条边再次交换                 5    8    2                 非法 
17    上例的二条边再次交换                  5    2    8              非法

软件测试模型

测试过程模型
随着测试技术的蓬勃发展,测试过程的管理显得犹为重要。测试专家提出了许多的测试过程管理模型, 这些模型定义了测试活动的流程和方法,为测试管理工作提供了指导。

  • V模型
  • W模型
  • X模型
  • H模型

V型模型
• 由Paul Rook提出
• 20世纪80年代后期创建
• 旨在改进软件开发的效率和效果
• 反映出了测试与分析设计的关系
• 与瀑布模型同样受到批评和质疑

W型模型
• Evolutif公司提出
• 增加了软件各开发阶段中应同步进行的验证和确认活动
• 两个V字型模型组成,分别代表测试与开发过程
• 明确表示出了测试与开发的并行关系 

X型模型
• Goldsmith提出对单独程序段进行独立的编码和测试,不断的集成后形成可执行的程序
• 集成的程序可以是最终的成品,也可是整个集成产品的一部分
• 变更可以发生在各个部分

H型模型
下图演示了在整个生产周期中某个层次上的一次测试“微循环”。图中标注的其它流程可以是任意的开发流程,例如设计流程或者编码流程。即只要测试条件成熟且准备活动完毕,测试执行活动就可进行。 H模型中软件测试过程活动完全独立,贯穿于整个产品的周期,与其他流程并发地进行。

测试模型的选择

理想的测试模型策略
以W模型作为框架,及早的、全面的开展测试,在软件单元测试和模块集成过程中考虑X模型思路。同时灵活运用H模型独立测试的思想,在达到恰当的就绪点时就应该开展独立的测试工作,同时将测试工作进行迭代,最终保证完成测试目标。

推荐的测试模型策略
• 以W测试模型作为项目开发应用的基本测试模型
• 需求分析的同时进行验收测试case的做成
• 系统设计的同时进行系统测试case的做成
• 概要设计的同时进行集成测试case的做成
• 详细设计的同时进行单元测试case的做成

软件测试流程

单元测试

内容概述
单元是软件说明书中提供的最小组件,如函数,子程序,过程,类和包等。单元测试就是针对软件中这些最小组件进行正确性验证的测试工作。对于C语言的程序单元测试主要针对函数,变量,子程序等,而对C++语言的程序单元测试主要针对类。
测试目的
经常与单元测试联系起来的另外一些开发活动包括代码Review,静态分析和动态分析。静态分析就是对软件的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和执行。动态分析就是通过观察软件运行时的动作,来提供执行跟踪,时间分析,以及测试覆盖度方面的信息。单元测试的目的在于发现各模块内部可能存在的各种错误,以保证进行集成测试前模块内部处理没有问题。单元测试主要是基于白盒测试(逻辑测试),但机能测试采用黑盒测试。

一些错误的认识

  • 太浪费时间了,现在要赶进度,时间上根本不允许,或随便做做应付领导。
  • 我是一个很棒的程序员,我写的代码肯定是没有问题的。
  • 做单元测试太烦了,直接集成,到时有问题在集成测试时肯定能发现,实在不行在系统测试总该能发现吧。
  • 单元测试仅仅是证明这些代码做了什么,根本发现不了什么问题。

对于以上错误认识的产生归根结底还是由于对单元测试的理解不够,没有真正认识到单元测试的重要性。
单元测试是软件测试的基础,因此单元测试的效果会直接影响到软件的后期测试,最终在很大程度上影响到产品的质量。

单元测试的重要性

时间方面:
如果认真的做好了单元测试,在系统集成联调时非常顺利,因此会节约很多时间,反之那些由于因为时间原因不做单元测试或随便做做的则在集成时总会遇到那些本应该在单元测试就能发现的问题,而这种问题在集成时遇到往往调查困难,花费大量时间才发现是个很低级的错误,正所谓得不偿失。
测试效果:
根据以往的测试经验来看,单元测试的效果是非常明显的,首先它是测试阶段的基础,做好了单元测试,在做后期的集成测试和系统测试时就很顺利。其次在单元测试过程中能发现一些很深层次的问题,同时还会发现一些很容易发现而在集成测试和系统测试很难发现的问题。再次单元测试关注的范围也特殊,它不仅仅是证明这些代码做了什么,最重要的是代码是如何做的,是否做了它该做的事情而没有做不该做的事情。

测试成本:
在单元测试时某些问题就很容易发现,如果在后期的测试中发现问题所花的成本将成倍数上升。比如单元测试时发现1个问题需1个小时,则在集成测试时就需2个小时,在系统测试时则需3个小时,同理还有定位问题和解决问题的费用也是成倍数上升的,这就是我们要尽可能早的排除尽可能多的bug来减少后期成本的因素之一。
产品质量:
单元测试的好与坏直接影响到产品的质量,可能就是由于代码中的某一个小错误就导致了整个产品的质量降低一个指标,或者导致更严重的后果,如果我们做好了单元测试这种情况是可以完全避免的。千里之堤毁于蚁穴,QC或者产品投入使用后发生的一些问题往往是一些简单的原因导致的。

总之,单元测试是构筑产品质量的基石,我们不能为节省时间不做单元测试或随便做做而让我们在后期浪费太多不值得的时间,我们也不愿意因为由于节省那些时间导致开发出来的整个产品失败或重来!

测试环境
• 单元本身不是独立的程序,需要开发驱动模块和桩模块
• 驱动模块:用来驱动被测模块的主程序,来保证测试的实施
• 桩模块:用来代替所测模块调用的子模块

单元测试标准
1.必须达到一定覆盖度要求:
• 对于没有任何分支判断的函数达到100%语句覆盖就可以;
• 对于有分支判定,但判定中条件只有一个的函数需要达到100%判定覆盖和语句覆盖;
• 对于有分支判定,但判定中的条件为组合条件的函数需要达到100%判定-条件组合覆盖。
2.进行逻辑覆盖测试的同时,还必须对输入输出进行正常值、边界值、异常值的测试。

实际应用
单体测试报告书作为单体测试的具体应用,结合测试理论和方法对单元测试内容进行明确要求,概要说明如下:
• 应用的测试方法
白盒测试:逻辑覆盖/程序结构分析(控制流/数据流/信息流)
黑盒测试:等价类划分/边界值分析/错误推测法
• 应用的测试工具
WINAMS: 适用于采用瑞萨系列芯片的模型
Simulator:适用于采用NEC等芯片的模型
VC++工具: 各种芯片的模型都可以使用,但效率相对较低
• 应用的代码检查工具
SQMLINT: 适用于采用瑞萨系列芯片的模型
PCLINT: 各种芯片的模型都可以适用
QAC: 各种芯片的模型都可以适用
注:代码检查工具作为静态测试的手段,可帮助发现程序中存在逻辑错误问题。 

 

 

 

集成测试

内容概述
是在单元测试基础上,将所有模块按概要设计要求组装成子系统或系统,验证组装后功能及模块间接口是否正确的测试工作。
测试目的
集成模式的目的是检验软件模块对《概要设计说明书》(含接口定义书等)的符合程度。同时也包含系统进行集成的过程。
测试级别
• 模块内集成
• 子系统内集成
• 子系统间集成 
集成方式
• 自底向上结合
• 自顶向下结合

 实际应用
结合测试报告书作为集成测试的具体应用,结合测试理论和方法对集成测试内容进行明确要求,概要说明如下:
• 应用的测试方法
白盒测试:程序结构分析(控制流/数据流/信息流)
黑盒测试:基于客户需求的测试/等价类划分/边界值分析/错误推测法/判定表驱动
• 应用的测试工具
实机测试:通过样机或调试板等实机测试环境进行确认
Simulator:通过Simulator工具对模块间SEQUENCE等进行模拟测试
• 测试的主要内容
1)模块间的接口检证
2)模块间的SEQUENCE检证
3)模块及模块间机能检证
4)模块及模块间性能检证
5)模块与硬件关联检证
6)模块间容错处理检证

 

 

 

 

 

 系统测试

内容概述
是将已集成完的软件系统作为整个基于计算机系统的一个元素,与硬件、外设、数据等其他系统元素结合,在实际环境下对计算机系统进行的测试工作。
测试目的
系统测试的目的在于通过与《需求规格说明书》(即客户需求)做比较,发现软件与系统需求定义不符合或者矛盾的地方。
实际应用
• 由评价人员实施
• 基于客户需求的测试-主要是功能测试
• 主要是黑盒测试

 差异点分析

测试方法不同
• 系统测试主要属于黑盒测试
• 单元测试主要属于白盒测试
• 集成测试属于白盒和黑盒结合测试,也称灰盒测试
考察范围不同
• 单元测试主要测试模块内部的逻辑处理
• 集成测试主要测试模块间的接口,以及单元组合后的整体功能
• 系统测试主要测试整个系统对于客户需求是否满足
评估基准不同
• 系统测试的评估基准是测试用例对需求规格的覆盖率
• 单元测试和集成测试主要的评估主要是代码的覆盖率

验收测试

内容概述
是为用户方组织的有效性和系统测试,它的测试数据通常是系统测试的测试数据的子集,这是软件在投入使用前的最后测试。
测试目的
其目的是在产品投入使用前向软件的购买者展示该软件系统满足客户的需求。有时验收测试也可能由客户方来实施,如信赖性测试。
测试方法
• 性能测试
• 功能测试
• 随机测试
• 可靠性测试

回归测试

内容概述
软件在测试或其他活动中发现的缺陷经过修改后,或进行式样变更对应后,就需要对已经进行过的测试的某些子集重新进行一遍测试。
测试目的
其目的是验证缺陷得到了正确的修复,或变更符合客户的需求,同时修正或变更没影响到其他功能。回归测试可能发生在单体,集成,系统测试任何阶段。
测试策略
• 完全重复测试
• 选择性重复测试

回归测试要求

  • 在单元、集成和系统测试阶段的代码修改都要进行回归测试;
  • 单元测试后进行的代码修改需要由开发人员实施单元测试回归,即对代码变更可能影响到的单元测试用例实施测试;
  • 集成测试后进行的代码修改需要由开发人员实施单元和集成测试回归,即对代码变更可能影响到的单元和集成测试用例实施测试;
  • 系统测试后进行的代码修改需要由开发人员实施单元和集成测试回归,同时评价人员要进行系统测试回归;
  • 在实施回归测试时必要的情况下还需要追加必要的单元、集成和系统测试用例来确保代码变更可能影响到的范围都能被测试到;
  • 系统测试阶段实施的回归测试需要开发人员和评价分别实施相应的回归测试,并非只是由评价人员实施; 

软件测试总结

  • 测试应当分级别;
  • 测试应当有重点;
  • 测试应当尽早、频繁和全面的进行;
  • 测试是开发的朋友,不是开发的敌人;
  • 测试人员应当客观公正的记录和报告缺陷;
  • 测试自动化能解决一部分问题,但不是全部;
  • 测试是个持续进行的过程,而不是一个阶段;
  • 测试必须被计划、被控制,并且提供时间和资源;
  • 测试应当在测试成本和软件质量效益间找到一个平衡点;
  • 测试不是为了证明程序的正确性,而是为了证明程序有问题;
  • 测试是不可能穷尽的,当测试出口条件满足时就可停止测试;
  • 测试不仅包含功能性的验证,还应包含性能性、可靠性,安全性等方面的验证。 
旅之灵夫
关注 关注
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件测试
weixin_44093711的博客
01-09 1965
软件测试工具 软件测试工具分为性能测试工具、自动化软件测试工具和测试管理工具。性能测试工具、自动化软件测试工具存在的价值是为了提高测试效率,用软件来代替一些人工输入。测试管理工具是为了复用测试用例,提高软件测试的价值,更好的管理测试过程。一个好的软件测试工具和测试管理工具结合起来使用将会使软件测试效率大大的提高。 工具分类 测试管理工具 TestDirector(大而全) jira(简单好用) Quality Center(复杂,收费) 禅道(简单好用) bugzilla(功能简单) svn(代码和文档管理
软件测试过程
01-16
### 软件测试过程详解 #### 一、软件测试的重要性及目的 软件测试是确保软件质量的关键步骤,其目的是验证软件是否满足预期的功能和性能要求。通过一系列的方法和技术,软件测试能够帮助发现软件中存在的缺陷,并...
软件测试基础知识
最新发布
zhangsiyuan1998的博客
07-18 862
测试用例(Test Case)是为某个特殊目标而编制的 一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。(1)指导测试的实施测试用例主要适用于集成测试、系统测试和回归测试。在实施测试测试用例作为测试的标准,测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试。并对测试情况记录在测试用例管理软件中,以便自动生成测试结果文档。
软件测试报告模板
06-15
软件测试报告模板 软件测试报告模板是软件测试过程中的重要文档,它记录了软件测试的整个过程,包括测试计划、测试用例设计、测试环境配置、测试执行情况、测试结果分析等内容。通过软件测试报告模板,可以确保软件...
全程软件测试.pdf
07-14
软件测试是一项至关重要的活动,在软件开发生命周期(SDLC)中占据关键地位。它包括一系列的活动,旨在评估软件产品的质量,确保其满足规定的需求,并且没有缺陷。软件测试的角色可以从开发过程中早期阶段的缺陷预防...
软件测试课程设计报告.docx
01-15
软件测试领域,课程设计报告通常是对一个特定项目进行系统性测试的过程的详细记录,旨在培养学生的实践能力和理论知识的结合。以下是对该报告中涉及的软件测试知识点的详细说明: 1. **测试级别**: - **单元...
软件测试计划模板,各种测试阶段任务、人员分配和时间安排、工作规范
05-20
简述本计划的目的。如本文档旨在说明各种测试阶段任务、人员分配和时间安排、工作规范等。
【软工】黑白盒
凉快
12-23 1064
软件测试软件测试的目的: 发现错误 好的测试则是发现至今没有发现的错误 测试的原则: 尽早地和不断地进行软件测试 测试用例(测试的使用例子)由测试输入数据和对应的输出结果组成 程序员尽量不要检查自己的程序,这样很难发现错误 测试用例应该包括合理输入条件和不合理输入条件 由以上几个原则,我们不难看出,测试人员很多时候,他们的水平要比开发人员还要高,他们在进行测试的时候需要考虑的更加全面,从多个角度来测
软件测试_笔记(完整版)
热门推荐
S_gy_Zetrov的博客
07-02 6万+
软件测试复习(部分) 概述 程序+文档+数据=软件 狭义的软件测试定义:为发现软件缺陷而执行程序或系统的过程 广义的软件测试定义:人工或自动地运行或测定某系统的过程,目的在于检验它是否满足规定的需求或弄清预期结果和实际结果间的差别 为什么要做软件测试 发现软件缺陷 功能错 功能遗漏 超出需求部分(画蛇添足) 性能不符合要求 软件质量高低:是否符合用户习惯、符合用户需求 测试...
软件测试入门指南
"软件测试入门" 本文档是一份关于软件测试的入门指南,由晏斌在2006年编写并发布。文档首先介绍了软件测试的重要性,并讨论了测试人员的职业发展方向,以及软件测试行业的一些基本概念和常见误区。接着,它探讨了...
463
原创
5768
点赞
6979
收藏
4384
粉丝
关注
私信
写文章

热门文章

  • 【GitHub项目推荐--13个最佳开源语音识别引擎】【转载】 10521
  • 【GitHub项目推荐--20个酷炫的开源免费javaScript动画库,前端开发、游戏开发推荐收藏】【转载】 9484
  • 【GitHub项目推荐--14个Vue3开源后台管理项目,优选、多星!】【转载】 9088
  • 【软件工程中的各种图】 9033
  • 【GitHub项目推荐--数字人开源项目】【转载】 8821

分类专栏

  • GitHub项目推荐 236篇
  • 大模型 1篇
  • 学习 39篇
  • 工具 20篇
  • 脚本语言 2篇
  • 其他 13篇
  • 车载HMI开发工具 4篇
  • 算法 3篇
  • python 3篇
  • C++ 40篇
  • 4篇
  • 人工智能 27篇
  • 嵌入式 5篇
  • C语言 22篇
  • 图解学习 10篇
  • 计算机网络 5篇
  • 内存 3篇
  • 计算机视觉 1篇
  • linux 21篇
  • Android 1篇
  • protobuf 4篇
  • 多任务编程 9篇
  • 软件测试 1篇
  • C# 1篇
  • 虚拟机 1篇
  • 操作系统 1篇
  • CPU 1篇
  • 科普 9篇
  • 思维导图 1篇
  • 设计之美 1篇
  • 代码设计 1篇
  • 进程间通信 11篇
  • 汇编语言 5篇
  • 内存泄漏 2篇
  • 虚拟化 1篇
  • GDB调试 1篇
  • 程序员的素养 1篇
  • 程序设计 1篇
  • 内存管理 1篇
  • 引擎 1篇
  • 代码混淆艺术 1篇
  • bug 1篇
  • 赚钱 1篇
  • 汽车电子 4篇
  • TTS 1篇
  • 编译问题 4篇
  • VSCode 1篇
  • EB GUIDE 3篇
  • gcc 2篇
  • ubuntu 5篇
  • 内核 1篇

最新评论

  • 【硬核图解!30 张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?】【转载】

    gsh2527: 觉得讲的很通俗易懂,咋没有评论呢

  • 【GitHub项目推荐--21个最佳开源网络爬虫库,适合Python、Java、Go、JavaScript开发语言】【转载】

    Ivy@HPC: 这篇文章分享了21个GitHub上热门的开源网络爬虫库,涵盖了Python、Java、Go、JavaScript多种开发语言,对于想要提升数据抓取技能的开发者来说,是个不错的资源集合,值得收藏和参考。

  • 【linux ProtoBuf安装及使用】

    绯雨千叶: make之后,最好加一个 make check

  • 【GitHub项目推荐--21个最佳开源网络爬虫库,适合Python、Java、Go、JavaScript开发语言】【转载】

    小王毕业啦: 这篇文章给我带来了很多新的启发,对于网络爬虫库的选择有了更清晰的了解。博主文章中的细节描写非常到位,深入浅出,让我对Python、Java、Go和JavaScript等开发语言的网络爬虫库有了更深入的了解。期待博主未来可以继续分享更多类似的优质内容,也希望能够得到博主的指点,在技术领域更上一层楼。非常感谢博主的分享和支持!

  • 【GitHub项目推荐--14个Vue3开源后台管理项目,优选、多星!】【转载】

    m0_58117344: 怎么都打不开呢

最新文章

  • 【GitHub项目推荐--无代码平台】【转载】
  • 【GitHub项目推荐--开源RPA(机器人流程自动化)软件】【转载】
  • 【GitHub项目推荐-- AI4S平台:生物医学平台】【转载】
2024
08月 2篇
07月 5篇
05月 4篇
04月 9篇
03月 69篇
02月 162篇
01月 120篇
2023年91篇
2022年4篇
2021年6篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

PHP网站源码丹竹头网站搜索优化横岗网站设计模板广州seo优化大芬网站改版坪山SEO按天计费塘坑企业网站制作石岩英文网站建设爱联百度seo广州企业网站建设永湖企业网站制作南山外贸网站制作罗湖网站推广方案南联阿里店铺运营木棉湾网站推广方案龙华seo网站推广宝安关键词按天扣费沙井阿里店铺运营横岗模板制作爱联百搜词包荷坳网页制作大鹏至尊标王丹竹头网站建设民治网站制作平湖网站优化按天扣费广州网站改版民治网页制作横岗seo优化南联百姓网标王推广南山建站民治高端网站设计歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化