软件测试基础

1.为什么测试

缺陷的相关术语

错误
  • 与错误相关的英语表示为ERROR、ERRORNEOUS ACTION、MISTAKE等等。

  • 定义:人为的产生不正确结果的行为【与IEEE610一致】。

  • 人为的原因导致一个不正确的结果。它可以是程序内的内部错误,也可能是文档内的错误。

故障/缺陷
  • 与故障相关的英语表示为FAULT、DEFECT、BUG等等。

  • 定义:可能会导致软件组件或系统无法执行其定义的功能的下次,例如:错误的语句或者变量定义。

  • 内在的缺陷是人为错误的具体表现,可以是不正确的文档、程序段、指令或数据定义。

失效/失败
  • 与失效/失败相关的英语表示为FAILURE等等。

  • 定义:组件/系统与预期的交付、服务或结果存在的偏差【与Fenton一致】。

  • 外部失效是内部缺陷在执行测试软件时的外部反映。它是(规范说明)期望的值与实际(观察到)的值存在偏差,如系统的不正确的反应、崩溃、死机。

术语之间的关系图

 

术语之间的关系
  • 运行存在缺陷的软件系统,并不一定会产生运行错误或对用户产生消极的影响,即失效。

  • 一个缺陷的存在不一定会产生失效,但是有的缺陷可以产非常多的失效。

  • 缺陷屏蔽:一个缺陷会被测试对象中的另外缺陷所掩盖。

 

多少测试才充分

  • 要进行完全的测试,在有限的时间和资源的条件下,找出所有的软件缺陷和错误,使软件产品趋于完美,是不可能的。

什么时候测试结束

什么时候结束测试,需要考虑不同利益干系人在时间、成本和质量三者之间的平衡。

  • 当测试时间用尽时。

  • 当继续测试没有发现新的失效和缺陷时。

  • 当无法考虑新的测试用例时。

  • 当达到所有要求得测试覆盖时。

  • 当所有发现的缺陷都已经清除时。

 

2.什么是测试

2.1测试的定义

测试的正向思维
  • 测试就是建立一种新型,确信程序能够按期望的设想进行。

  • 评价一个程序和系统的特性或能力,并确定它是否达到期望的结果。软件测试就是以此为目的的任何行为。

测试的逆向思维
  • 测试是为发现错误而执行一个程序或者系统的过程。

  • 测试是为了证明程序有错,而不是证明程序无错误。

  • 一个好的测试用例是在于它能发现至今未发现的错误。

狭义的测试
  • 一般狭义的测试是运行软件系统进行测试的过程,即执行测试的过程。

广义的测试
  • 测试贯穿整个软件开发的生命周期。

  • 在测试执行之前之后都有相应的测试活动,比如测试计划、设计、实现、评估和报告等等。

  • 测试包含了动态测试和静态测试。

 

 

2.2测试的目的

测试的目的依赖于测试级别、测试视角和测试参与人员!针对任何级别的软件测试,其测试目的都不是惟一的,通常是前面这些测试目的的组合,或者说这些测试目的是相同的!

  • 软件测试可以降低软件系统在运行环境中的风险。

  • 通过软件测试发现其中的缺陷,并进行修改,提高软件系统的质量。

2.3测试和调试

 

测试和调试的区别

人员的不同:通常来说,测试人员进行测试活动,开发人员进行调试活动(当然,开发人员进行调试活动也会进行一些测试活动,比如,单元测试通常由开发人员来进行)。

目标的不同:测试和调试在目标、方法和思路上有所不同。比如,测试的目的之一是发现软件中的缺陷,而调试的目的通常是定位和修改软件中的缺陷。

过程不同:测试是从已知的条件开始,使用预先定义的过程,并且有愚者的结果;调试是从未知的条件开始,结束的过程可能不可预计。

计划的不同:测试可以计划,可以预先指定测试用例和过程,工作进度可以度量;描述调试的过程或持续的时间相对比较困难。

对象不同:测试的对象包括软件开发过程中的文档、数据以及代码,而调试的对象一般来说只是代码。

2.4软件测试和质量

软件测试工作量
  • 穷尽测试不可能,因此,运用有限的测试策源非常重要!

  • 为了得到让人满意的结果,测试必须结构化、系统化的方式设计执行。这样才能在有限的测试资源和工作量下,找到尽可能多的陷阱,避免执行不必要的测试。

3.测试的基本原则

原则1:测试可以显示缺陷的存在;

  • 通过测试,可以减少测试对象中存在未被发现的缺陷的可能性;

  • 但即使在测试过程中没有发现缺陷,也不能证明测试对象是完全正确的。

原则2:穷尽测试不可能

 

原则3:测试尽早的介入:

 

原则4:缺陷的集群效应,即测试对象中发现的80%的缺陷来自20%的模块

原则5:杀虫剂的悖论,即同样的测试用例被重负使用多次,将不能发现新的问题和缺陷

原则6:测试活动依赖于测试对象的背景,比如安全性相关的测试对象和一般的商业对象,测试活动是完全不一样的

原则7:不存在缺陷并不代表是有用的系统。

4.测试的基本过程

 

4.1结构化的软件测试过程

  • 结构化的软件测试,使软件测试在整个软件开发过程中可以对软件进行系统的、结构化的测试;

  • 结构化的软件测试过程包括: 计划和控制 分析和设计 实现和执行 出口准则评估和报告 测试结束活动结构化测试过程

测试文档输入:
  • 测试计划/测试进度

  • 概要测试规格说明

  • 详细测试规格说明/测试脚本/测试环境

  • 测试日志/缺陷报告/测试报告

  • 测试总结报告

4.2测试计划课控制

测试计划活动
  • 识别测试任务和测试范围

  • 确定测试方法和测试技术

  • 确定测试级别和测试准则

  • 确定测试工作量和测试准则

  • 确定测试资源

  • 确定测试工作产品和输出

测试控制活动
  • 监控和记录测试进度、测试覆盖率以及出口准则评估

  • 测量和分析测试结果

  • 缺陷跟踪和回归测试计划

  • 跟踪和监控工作量分布和风险状态

  • 更新测试计划

测试分析和设计活动
  • 评审测试依据,比如需求、设计文档

  • 分析和确定测试优先级

  • 识别测试条件、测试需求、测试数据

  • 设计概要测试用例并确定优先级

  • 规划测试环境搭建,假话测试基础设施和工具

评估和报告活动
  • 根据测试出口准则检查测试日志

  • 根据检查结果,判断是否循环要更多的测试,或者需要修改测试出口准则

  • 为了项目利益干系人提供测试报告

测试结束活动
  • 检查测试工作产品是否提交

  • 提交的缺陷是否关闭

  • 提交的变更记录是否关闭

  • 测试件、测试环境和测试基础设备的归档和移交

  • 分析和总结经验教训,输出测试总结报告

5.测试的误区

  • 测试活动是整个开发生命周期中的一个阶段,测试活动在开发活动之后

  • 软件质量是有测试人员决定的,假如在客户中发现缺陷,那是测试人员的责任

  • 测试人员不需要具备很高的技能,能力不佳的人才去做测试

  • 测试是测试人员的事情,和开发人员无关

  • 测试工作的多少,或者工作量,是由项目的进度来确定的,时间多一点就多做一点,少就少做一点

posted @ 2021-11-14 19:35  我在路上-T  阅读(113)  评论(0)    收藏  举报