测试基础之06 测试基础理论

Posted 凉生爱喝奶茶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试基础之06 测试基础理论相关的知识,希望对你有一定的参考价值。

软件测试的目的和原则

软测的目的

直白点来说软件测试的目的就是:提前发现软件的问题并修复,减少公司层面的损失。

软件测试原则

  1. 软件测试只能证明软件存在缺陷,不能证明不存在问题

  1. 不能进行穷举测试,应该分类别进行测试

  1. 测试应该要尽快的介入,越早发现问题,修复成本越低

  1. 坚信二八原则:20%模块中存在80%缺陷,bug存在集群现象

  1. 测试依赖测试环境(公司一般有测试环境,生产环境,开发环境,每个公司可能有些区别)

  1. 杀虫剂现象:讲的是同一个人测试同一个模块,有可能测试不出来,进行轮测的时候有可能会发现不一样的问题

软件开发模型

在软件测试行业,人们总结了很多软件开发模型用来描述一个软件开发的过程,如:

软件测试与软件的开发有着很重要的关系,作为测试人员,应该理解软件开发的模式,以便自己找准自己的定位。

瀑布模型

瀑布模型的特点

按流程直接,执行完一个阶段,才去执行下个阶段,且只执行一次。

瀑布模型的优缺点

优点:

开发流程每个阶段都区分开,流程清晰,方便管理

缺点:

需求改变,流程也需要重新进行,不适合现在的大部分开发流程

测试在最后阶段,发现风险修改成本较高


快速原型模型和螺旋模型

快速模型

快速模型特点

快速构建软件原型

支持用户参与

快速模型优缺点

优点:

完善瀑布模型的缺点,减少由于软件需求不明确带来的项目开发风险。

缺点:

不适合作为一个大型项目开发,适用于小项目,灵活度高的项目(小程序)


螺旋模型

螺旋模型的特点

引进了风险分析活动

螺旋模型的优缺点

优点:

螺旋模型很大程度上是一种风险驱动方法体系。

缺点:

需要丰富的风险评估经验和相当高的专业知识。

V模型

RAD(Rapid Application Development,快速应用开发)模型是软件开发过程中的一个重要模型,由于其模型构图形似字母V,所以又称软件测试的V模型。

V模型示意图:

https://baike.baidu.com/pic/V%E5%AD%97%E5%BD%A2%E5%BC%80%E5%8F%91%E6%B5%81%E7%A8%8B/2957522/1/377adab44aed2e732ccddaef8701a18b86d6fac9?fr=lemma#aid=1&pic=377adab44aed2e732ccddaef8701a18b86d6fac9

V模型优缺点

优点:

测试V模型包含了底层测试也包含了高层测试

缺点:

需求变更会导致重新返工的工作量巨大,灵活性比较低


W(双V)模型

W模型,由Evolutif公司提出,相对于V模型,W模型增加了软件开发各阶段中同步进行的验证和确认活动。

由两个V字型模型组成,分别代表测试与开发过程,明确表示出了测试与开发的并行关系。

W模型示意图:

https://baike.baidu.com/pic/W%E6%A8%A1%E5%9E%8B/3683857/1/cc506c8bf42d4654c8fc7aa1?fr=lemma#aid=1&pic=cc506c8bf42d4654c8fc7aa1

W模型的优缺点

优点:

强调测试早期介入,测试需要介入全面的流程,不只是测试代码,包括需求跟设计。

缺点:

测试要求技术高,实现比较困难。

软件质量模型的分类

软件质量模型

  • 软件质量,就是软件与明确地和隐含地定义的需求相一致的程度。

  • ISO 9126软件质量模型是评价软件质量的国际标准,这个模型是软件质量标准的核心,对于大部分的软件,都可以考虑从这这6个特性和27个子特性去测试、评价一个软件。

软件测试分类

按测试阶段划分

单元测试

单元测试又称模块测试,是指对软件设计开发中最小程序模块,进行正确性检查的测试工作。单元测试需要从程序内部结构出发设计测试用例。多个模块可以平行地独立进行单元测试。

集成测试

又叫组装,通常在单元测试的基础上,将所有程序模块进行有序的,递增的测试。

系统测试

将整个软件系统作为一个整体来进行测试,测试依据是需求说明书。

验收测试

检验软件是否满足用户需求的测试。

α测试
  • Alpha是内测版本

  • 通常只在软件开发者内部交流

  • 这个版本的bug相对较多

β测试
  • beta是公测版本,是对所有用户开放的测试版本

  • 通过一些专业爱好者的测试,将结果反馈给开发者,开发者再进行针对性的修改

γ测试
  • Gamma版本,是指软件版本正式发现的候选版,该版本已经相当成熟了,与即将发行的正式版相差无几,成为正式发布的候选版本。

按是否覆盖代码划分

黑盒测试

又称数据驱动测试,不考虑程序内部结构跟内部特性,注重于软件的功能需求,只看软件的输入数据和输出数据。

白盒测试

简单来说就是进行程序内部的代码测试和程序结构

灰盒测试

介于黑盒跟白盒测试之间的一种测试,不仅关注输出、输入的正确性,同时也关注程序内部的情况。

按是否运行分类

静态测试

不运行被测试的程序软件,静态检查代码,界面或者文档可能存在的错误。

动态测试

实际运行被测软件,输入相对应的测试数据,检查实际输出结果是否跟预期符合。

是否自动化划分

点点点测试

测试人员手动去执行测试

自动化测试

利用代码或者工具帮助人工进行测试

软件测试更多分类

冒烟测试

是对系统进行最基本功能的测试,保证基本的功能和流程能走通。

回归测试

修复一个bug之后,把之前的测试用例在新的代码下进行测试

随机测试

随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试用例没有覆盖到的部分

探索性测试

探索性测试意味着同时设计测试和执行测试。测试人员通过测试来不断学习被测系统。

软件缺陷的定义与判定标准

软件缺陷(bug)的定义

是指软件或者程序中存在的各种问题及错误

软件缺陷的判定标准

  • 软件未达到需求规格说明书中标明的功能

  • 软件出现了需求规格说明书指明不会出现错误的地方

  • 软件的功能超出了需求规格说明书指明的范围

  • 软件未达到需求规格说明书虽未指明但应该达到的目标

  • 软件测试人员认为软件难以理解,不易使用,运行速度慢,或者最终用户体验不好。

软件缺陷产生的原因

软件缺陷产生是不可避免的,造成软件缺陷产生的原因主要归纳如下:

  • 需求解释、记录或者定义错误

  • 设计文档说明存在错误或者拼写错误

  • 编码说明、程序代码有误

  • 硬件或者软件系统上存在错误

软件缺陷产生的根源

  • 需求的变更

  • 交流不充分

  • 软件的复杂性

  • 进度压力

软件缺陷的类型

  • 功能错误

  • 界面错误

  • 兼容性错误

  • 易用性问题

  • 改进建议

测试用例定义和8要素

测试用例

测试用例:是为了特定的目的而设计的一组测试输入、执行条件和预期结果的文档。

测试用例八大要素

软件测试用例的基本要素包括用例编号、用例标题、测试项目、用例级别、预置条件、测试输入、执行步骤、

预期结果。

测试基础之集成测试(初入行)




集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它最简单的形式是:把两个已经测试过的单元组合成一个组件,测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合为程序的更大部分。方法是测试片段的组合,并最终扩展成进程,将模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。


集成测试是在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相应技术指标及要求的活动。也就是说,在集成测试之前,单元测试应该已经完成,集成测试中所使用的对象应该是已经经过单元测试的软件单元。这一点很重要,因为如果不经过单元测试,那么集成测试的效果将会受到很大影响,并且会大幅增加软件单元代码纠错的代价。


集成测试是单元测试的逻辑扩展。在现实方案中,集成是指多个单元的聚合,许多单元组合成模块,而这些模块又聚合成程序的更大部分,如分系统或系统。集成测试采用的方法是测试软件单元的组合能否正常工作,以及与其他组的模块能否集成起来工作。最后,还要测试构成系统的所有模块组合能否正常工作。集成测试所持的主要标准是《软件概要设计规格说明》,任何不符合该说明的程序模块行为都应该加以记载并上报。


所有的软件项目都不能摆脱系统集成这个阶段。不管采用什么开发模式,具体的开发工作总得从一个一个的软件单元做起,软件单元只有经过集成才能形成一个有机的整体。具体的集成过程可能是显性的也可能是隐性的。只要有集成,总是会出现一些常见问题,工程实践中,几乎不存在软件单元组装过程中不出任何问题的情况。从图1可以看出,集成测试需要花费的时间远远超过单元测试,直接从单元测试过渡到系统测试是极不妥当的做法。


测试基础之集成测试(初入行)
      集成测试的目标是按照设计要求使用那些通过单元测试的构件来构造程序结构。单个模块具有高质量但不足以保证整个系统的质量。有许多隐蔽的失效是高质量模块间发生非预期交互而产生的。


以下两种测试技术是用于集成测试:

1)功能性测试。使用黑盒测试技术针对被测模块的接口规格说明进行测试。

2)非功能性测试。对模块的性能或可靠性进行测试。


集成测试的必要性还在于一些模块虽然能够单独地工作,但并不能保证连接起来也能正常工作。程序在某些局部反映不出来的问题,有可能在全局上会暴露出来,影响功能的实现。此外,在某些开发模式中,如迭代式开发,设计和实现是迭代进行的。在这种情况下,集成测试的意义还在于它能间接地验证概要设计是否具有可行性。


集成测试是确保各单元组合在一起后能够按既定意图协作运行,并确保增量的行为正确。它所测试的内容包括单元间的接口以及集成后的功能。使用黑盒测试方法测试集成的功能。并且对以前的集成进行回归测试。


测试基础之集成测试(初入行)
       集成测试是一种正规测试过程,必须精心计划,并与单元测试的完成时间协调起来。在制定测试计划时,应考虑如下因素:

1、是采用何种系统组装方法来进行组装测试;

2、组装测试过程中连接各个模块的顺序;

3、模块代码编制和测试进度是否与组装测试的顺序一致

4、测试过程中是否需要专门的硬件设备;

解决了上述问题之后,就可以列出各个模块的编制、测

 试计划表,标明每个模块单元测试完成的日期、首次集成测试的日期、集成测试全部完成的日期、以及需要的测试用例和所期望的测试结果。

在缺少软件测试所需要的硬件设备时,应检查该硬件的交付日期是否与集成测试计划一致。


任何合理地组织集成测试,即选择什么方式把模块组装起来形成一个可运行的系统,直接影响到模块测试用例的形式、所用测试工具的类型、模块编号和测试的次序、生成测试用例和调试的费用。通常,有两种不同的组装方式:一次性组装方式和增值式组装方式。


完成标准


怎样判定集成测试过程完成了,可按以下几个方面检查:

1、成功地执行了测试计划中规定的所有集成测试;

2、修正了所发现的错误;

3、测试结果通过了专门小组的评审。

集成测试应由专门的测试小组来进行,测试小组由有经验的系统设计人员和程序员组成。整个测试活动要在评审人员出席的情况下进行。

在完成预定的组装测试工作之后,测试小组应负责对测试结果进行整理、分析,形成测试报告。测试报告中要记录实际的测试结果、在测试中发现的问题、解决这些问题的方法以及解决之后再次测试的结果。此外还应提出不能解决、还需要管理人员和开发人员注意的一些问题,提供测试评审和最终决策,以提出处理意见。


测试基础之集成测试(初入行)

集成测试过程

根据IEEE标准 集成测试划分为4个阶段:计划阶段,设计阶段,实现阶段,执行阶段(实施阶段)

计划阶段

1)时间安排 概要设计完成评审后大约一个星期

2)输入 需求规格说明书 概要设计文档 产品开发计划路标

3)入口条件 概要设计文档已经通过评审

4)活动步骤 1.定被测试对象和测试范围 2.评估集成测试被测试对象的数量及难度,即工作量 3.确定角色分工和作任务4.标识出测试各阶段的时间,任务,约束等条件5.考虑一定的风险分析及应急计划6.考虑和准备集成测试需要的测试工具,测试仪器,环境等资源7.考虑外部技术支援的力度和深度,以及相关培训安排8.定义测试完成标准

5)输出 集成测试计划

6)出口条件 集成测试计划通过概要设计阶段基线评审

设计阶段

  1)时间安排详细设计阶段开始

  2)输入需求规格说明书概要设计集成测试计划

  3)入口条件概要设计基线通过评审

  4)活动步骤 1.被测对象结构分析 2.集成测试模块分析3.集成测试接口分析4.集成测试策略分析

  5.集成测试工具分析6.集成测试环境分析7.集成测试工作量估计和安排。

  5)输出集成测试设计(方案)

  6.出口条件集成测试设计通过详细设计基线评审。

  实现阶段

  1)时间安排在编码阶段开始后进行

  2)输入需求规格说明书概要设计集成测试计划集成测试设计

  3)入口条件详细设计阶段

  4)活动步骤:1.集成测试用例设计2.集成测试代码设计(如果需要)3.集成测试脚本(如果需要)4.集成测试工具(如果需要)

  5)输出集成测试用例集成测试规程集成测试代码集成测试脚本集成测试工具

  6)出口条件测试用例和测试规程通过编码阶段基线评审

  执行阶段

  1)时间安排单元测试已经完成后就可以开始执行集成测试了

  2)输入 需求规格说明书概要设计集成测试计划集成高度设计集成测试例集成测试规程集成测试代码(如果有)集成测试脚本集成测试工具详细设计代码单元测试报告

  3)入口条件单元测试阶段已经通过基线化评审

  4)活动步骤执行集成测试用例回归集成测试用例撰写集成测试报告

  5)输出集成测试报告

  6)出口条件集成测试报告通过集成测试阶段基线评审


 集成测试过程

工作内容

 单元测试工作内容及其流程

需求获取

集成测试需求所确定的是对某一集成工作版本的测

 集成测试

试的内容,即测试的具体对象。集成测试需求主要来源于设计模型(Design Model)和集成构件计划(Integration Build Plan)。集成测试着重于集成版本的外部接口的行为。因此,测试需求须具有可观测、可测评性。

1. 集成工作版本应分析其类协作与消息序列,从而找出该工作版本的外部接口。

2. 由集成工作版本的外部接口确定集成测试用例。

3. 测试用例应覆盖工作版本每一外部接口的所有消息流序列。

注意:一个外部接口和测试用例的关系是多对多,部分集成工作版本的测试需求可映射到系统测试需求,因此对这些集成测试用例可采用重用系统测试用例技术。


工件清单

1、 软件集成测试计划

2、 集成测试用例

3、 测试过程

4、 测试脚本

5、 测试日志

6、 测试评估报告


常用方案选型


集成测试的实施方案有很多种,如自底向上集成测试、自顶向下集成测试、Big-Bang集成测试、三明治集成测试、核心集成测试、分层集成测试、基于使用的集成测试等。


自顶向下集成(Top-Down Integration)方式是一个递增的组装软件结构的方法。从主控模块(主程序)开始沿控制层向下移动,把模块一一组合起来。分两种方法:

第一:先深度:按照结构,用一条主控制路径将所有模块组合起来;

第二:先宽度:逐层组合所有下属模块,在每一层水平地集成测试


组装过程分以下五个步骤:

步骤一:用主控模块作为测试驱动程序,其直接下属模块用承接模块来代替;

步骤二:根据所选择的集成测试法(先深度或先宽度),每次用实际模块代替下属的承接模块

步骤三:在组合每个实际模块时都要进行测试;

步骤四:完成一组测试后再用一个实际模块代替另一个承接模块;

步骤五:可以进行回归测试(即重新再做所有的或者部分已做过的测试),以保证不引入新的错误。


自底向上测试

自底向上的集成(Bottom-Up Integration)方式是最常使用的方法。其他集成方法都或多或少地继承、吸收了这种集成方式的思想。自底向上集成方式从程序模块结构中最底层的模块开始组装和测试。因为模块是自底向上进行组装的,对于一个给定层次的模块,它的子模块(包括子模块的所有下属模块)事前已经完成组装并经过测试,所以不再需要编制桩模块(一种能模拟真实模块,给待测模块提供调用接口或数据的测试用软件模块)。自底向上集成测试的步骤大致如下:


步骤一:按照概要设计规格说明,明确有哪些被测模块。在熟悉被测模块性质的基础上对被测模块进行分层,在同一层次上的测试可以并行进行,然后排出测试活动的先后关系,制定测试进度计划。图2给出了自底向上的集成测试过程中各测试活动的拓扑关系。利用图论的相关知识,可以排出各活动之间的时间序列关系,处于同一层次的测试活动可以同时进行,而不会相互影响。


步骤二:在步骤一的基础上,按时间线序关系,将软件单元集成为模块,并测试在集成过程中出现的问题。这里,可能需要测试人员开发一些驱动模块来驱动集成活动中形成的被测模块。对于比较大的模块,可以先将其中的某几个软件单元集成为子模块,然后再集成为一个较大的模块。


步骤三:将各软件模块集成为子系统(或分系统)。检测各自子系统是否能正常工作。同样,可能需要测试人员开发少量的驱动模块来驱动被测子系统。


步骤四:将各子系统集成为最终用户系统,测试是否存在各分系统能否在最终用户系统中正常工作。


方案点评:自底向上的集成测试方案是工程实践中最常用的测试方法。相关技术也较为成熟。它的优点很明显:管理方便、测试人员能较好地锁定软件故障所在位置。但它对于某些开发模式不适用,如使用XP开发方法,它会要求测试人员在全部软件单元实现之前完成核心软件部件的集成测试。尽管如此,自底向上的集成测试方法仍不失为一个可供参考的集成测试方案。


一起成长,一起分享,希望能对您有所帮助,我们是TestMadman,期待您的关注。



以上是关于测试基础之06 测试基础理论的主要内容,如果未能解决你的问题,请参考以下文章

Android基础总结

测试基础之集成测试(初入行)

安卓基础干货:安卓测试以及解析

功能测试之测试基础回顾

Go语言基础之单元测试

Go语言基础之单元测试