软件测试学习笔记-概念篇(一)

简介: 前言   每个系统的成型,上线都离不开测试,这段时间陆陆续续的学习测试,在这里总结一番;作为学习交流之用; 正文 软件测试概述 软件测试的历史: 什么是软件测试: 早期定义:软件测试是对程序能够按预期运行建立起一种信心。

前言

  每个系统的成型,上线都离不开测试,这段时间陆陆续续的学习测试,在这里总结一番;作为学习交流之用;

正文

软件测试概述

软件测试的历史:

这里写图片描述

什么是软件测试:

早期定义:软件测试是对程序能够按预期运行建立起一种信心。
经典定义:测试是为了发现错误而执行程序的过程。
IEEE定义(ISO/IEC/IEEE 29119):使用人工或者自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。

软件测试≠程序测试 

五大要素和两个目标:

这里写图片描述

五大要素有:质量、人员、资源、流程、技术。
其中最主要的是软件质量,其他四个要素都是为质量服务的。
其次是人员,决定了技术,资源,流程,以及配置和使用。
技术包含了:软件测试技术、软件测试方法、使用的工具。技术是手段。
流程:测试计划,测试用例,测试执行,测试报告。有一些进入进出的标准(规范性,对软件测试做一个规范的要求)。
资源:测试所需要的硬件设备、网络环境、测试设备、测试时间(周期)。

注意:人不是资源。

目标:
①提升测试覆盖率-> 能够有效的保证软件的质量
②提升测试效率->能够使我们更好地完成软件测试

软件测试所遵循的原则

一、测试显示缺陷的存在,但不能证明系统不存在缺陷。
经过软件测试,可以发现软件中的故障;但是经过软件测试,不能保证软件就没有故障了。
二、穷尽测试是不可能的,应设定及时终止的条件。
三、测试应该尽早进行
这里写图片描述

四、缺陷具备群集特性
越是发现问题多的模块,越是需要重点测试的对象
五、测试的杀虫剂悖论
在测试中,如果采用同样的测试用例,同样的测试方法。多次重复的测试某一个模块,最后就不能再发现新的缺陷。所以说,测试用例和测试方法应该不定期的评审修改,并且增加不同的测试方法和用例来测试不同的部分,从而更多的发现软件的缺陷。
六、测试的二八原则
测试时间和资源往往是有限的,要找出所有的缺陷是不可能的,这时我们需要遵循二八原则。
把80%的时间或者资源用在20%的重点模块上,重点测试模块中20%的重要模块。来达到测试效率和资源配置的最佳的比例。
七、测试活动依赖于测试背景
针对不同的测试背景针对的活动是不同的,比如:电信级的软件对性能、大并发量的访问会有更高的要求。而金融,银行系统相关的软件,对安全性能要求更高。

软件测试阶段,手段,模式

按测试阶段来分类

单元测试、继承测试、系统测试、验收测试

单元测试

什么是单元测试

对软件中的最小可测试单元进行检查和验证

 

单元测试的原则:

1.尽可能保证各个测试用例是相互独立的;

2.一般由代码的开发人员来实施,用以检验所开发的代码功能符合自己的设计要求。

 

单元测试的益处:

1.能尽早发现缺陷;收益最高;

2.有利于重构;

3.简化集成;

4.文档;

5.用于设计;

 

单元测试的限制

1.不可能覆盖所有的执行路径,所以不可能保证捕捉到所有路径的错误;

2.每一行代码,一般需要3-5行测试代码才能完成单元测试。所以存在投入和产出的一个平衡;

 

单元测试框架:

Xunit,JUnit,nunit,PPUnit,CppUnit

 

集成测试:

定义:

在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统过程中各部分工作是否达到或实现相应技术指标及要求的活动

 

集成测试的主要实施方案

1.Big Bang  全部完成,测试

2.自顶向下  

3.自底向上  从最低层测试,逐步组装测试;(常用测试)

4.核心系统集成 

5.高频集成

 

集成测试&单元测试

1.测试的对象不同;

2.测试的一举不同;

3.测试的方法不同;

 

系统测试

定义:是将经过集成测试的软件,作为计算机系统的一个部分,系统中其他部分结合起来,在实际运行环境下对计算机系统进行的一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行。

 

关注点

关注系统本身的使用

关注系统与其他相关系统间的连通

关注系统在不同使用压力下的表现

关注系统在真实使用环境下的表现

 

系统测试&集成测试

  测试环境:

    集成测试:由通过了单元测试的各个模块所集成起来的构件

    系统测试:除了软件之外,还包括计算机硬件及相关的外围设备、数据采集和传输机构、支持软件、系统操作人员等整个系统;

  测试时间:

    集成测试介于单元测试和系统测试之间测试

    系统测试在集成测试之后

  测试内容:

    集成测试:各个单元模块之间的接口

    系统测试:整个系统的功能和性能

  测试角度:

    集成测试:偏向于技术角度的验证

    系统测试:偏向于业务角度的验证

 

验收测试 

  定义:也称交付测试,针对用户需求、业务流程的正式的测试,确定系统是否满足验收标准,由用户、客户、或其他授权机构决定是否接受系统。

 

  细分

    用户验收测试

    运行验收测试

    合同和规范验收测试

    alpha测试

    Beta测试

 

按测试手段来分类:

  黑盒测试、白盒测试

  静态测试、动态测试

  手工测试、自动化测试

 

黑盒测试

  定义:把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。主要针对软件界面和软件功能进行测试。

  图例:

 

 优点: 

  1.容易实施,不需要关注内部的实现

  2.更贴近用户的使用角度

缺点:

  1.测试覆盖率角度,一般只能覆盖到代码量的不到40%;

  2.针对黑盒测试的自动化测试,复用率较低,维护成本较高;

关注点:

  1.是否有不正确或者遗漏的功能?

  2.在接口上,输入是否能正确的接受?能否输出正确的结果?

  3.是否有数据结构错误或者外部信息(例如数据文件)访问错误?

  4.性能上是否能够满足要求?

黑盒测试的主要设计方法

 

白盒测试

定义 

  白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。

图示:

  

优点:

  1.迫使测试人员去仔细思考软件的实现,理解原理

  2.可以检测代码中的每一条分支和路径

  3.揭示隐藏在代码中的错误

  4.对代码的测试比较彻底

缺点:

  1.昂贵

  2.无法检测代码中遗落的路径和数据敏感性错误

  3.不能直接验证需求的正确性

主要测试方法:

  

静态测试

  定义:

    静态测试是指无须执行被测程序,而是通过评审软件文档或代码,度量程序静态复杂度,检查软件是否符合编码标准,借以发现编写的程序的不足之处,减少错误出现的概率;

 方式:

  

 

动态测试

  定义:

    动态测试时指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率,正确性和健壮性等;

手动测试

  定义:  

    由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。更适用针对深度的测试和强调主管判断的测试。

  方法:众包测试,探索式测试

自动化测试:

  定义:使用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查。

  方法:单元测试,接口测试,性能测试等

 手工测试VS自动化测试

 

 按测试模式来测试来分类

  瀑布模型、敏捷测试、基于脚本的测试、基于风险的测试、探索式测试等

传统瀑布模型

瀑布模型的优缺点

 

V模型

 W模型

X模型

  

H模型

  

敏捷测试

Agile Testing --遵循敏捷宣言的一种测试实践

敏捷宣言

 

关注点:

  强调从客户角度进行测试

  重点关注迭代测试新功能,不在强调测试阶段

  尽早测试,不间断测试,具备条件即测试

  强调持续反馈

  预防缺陷重于发现缺陷

 

敏捷测试VS传统测试

 

 探索式测试(ET)

完全抛开测试脚本的测试

它是一种测试风格、思维而不是一种技术

优点:

  更能激发测试人员的创造性和工作乐趣

  增加了发现新的或较深入Bug的可能性

  在较短时间内找到更多Bug以及对SUT作一个快速的评估

  有利于更加有效地实施自动化

  更加适用于敏捷项目

  减少了在简单、繁复上用例的无谓编写时间

  测试管理上有局限性,较难协调和控制

  对于Bug的重复利用和重现上作用有限

   对测试人员的测试技能和业务知识深度依赖较大

    只有在SUT已完全可用的前提下才更有作用

  ET的生产率很难定义

  ET本身较难进行自动化

局部探索式测试

  输入、状态、代码路径、用户数据、执行环境

全局探索式测试

  

 

 

 探索式测试的流程

  

 

 基于风险的测试-RBT

  Risk-based Testing

  一种基于对软件失效的风险评估并以此指导测试计划、设计、执行、结果评估的软件测试类型

那些是风险?

质量风险、管理风险

风险级别=风险可能性X风险严重度

 未完待续。。

小舟从此逝,江海寄余生。 --狐狸
目录
相关文章
|
7月前
|
Java 测试技术 Maven
JAVA单元测试概念与实战
单元测试是软件开发中的一个测试方法,用于验证软件代码中最小的、独立的单元是否按照预期工作。在Java中,这通常指的是单个的方法或者一个类的个别功能。单元测试的目的是隔离代码的每个部分,并确保各个部分是正确的。
116 4
|
2月前
|
消息中间件 分布式计算 大数据
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
大数据-123 - Flink 并行度 相关概念 全局、作业、算子、Slot并行度 Flink并行度设置与测试
141 0
|
5月前
|
测试技术 API 数据库
性能测试概念
**性能测试评估系统在负载下的表现,关注响应时间、吞吐量、并发用户数和资源利用率。关键指标包括RT、HPS、TPS、QPS、RPS等。并发数可由QPS和平均响应时间计算。提升压力的技术手段涉及多进程、多线程,各有优劣。P90、P95、P99等分位数用于描述数据分布,揭示不同负载场景下的系统性能。**
|
2月前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
245 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
2月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
241 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(四):Pytest介绍和使用
本文是关于自动化测试框架Pytest的介绍和使用。Pytest是一个功能丰富的Python测试工具,支持参数化、多种测试类型,并拥有众多第三方插件。文章讲解了Pytest的编写规则、命令行参数、执行测试、参数化处理以及如何使用fixture实现测试用例间的调用。此外,还提供了pytest.ini配置文件示例。
47 2
|
2月前
|
测试技术 Python
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
本文主要介绍了自动化测试中setup、teardown、断言方法的使用,以及unittest框架中setUp、tearDown、setUpClass和tearDownClass的区别和应用。
73 0
自动化测试项目学习笔记(二):学习各种setup、tearDown、断言方法
|
2月前
|
分布式计算 Hadoop Unix
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制
45 1
|
2月前
|
前端开发 测试技术 程序员
在工作中会涉及到的几个环境(概念补充) 办公环境、开发环境、测试环境、线下环境、线上环境/生产环境都是什么,他们之间的关系?
本文解释了在职场中可能会接触到的不同环境,包括办公环境、开发环境、测试环境和生产环境(线上环境),以及它们之间的关系和重要性。
80 1
|
4月前
|
Kubernetes 监控 Java
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
发布策略:蓝绿部署、金丝雀发布(灰度发布)、AB测试、滚动发布、红黑部署的概念与区别
520 0