【1+X】软件测试概述

想看更多内容请移步专栏

转载:【1+X】软件测试技术 - 软件测试概述 - 蓝桥云课 (lanqiao.cn)

软件测试概述

知识点

  • 软件测试的概念
  • 软件测试的目的
  • 软件测试的重要性
  • QA 和软件测试的区别
  • 软件测试技术分类
  • 功能自动化测试工具
  • 性能自动化测试工具
  • 测试管理工具

简介

软件测试是软件工程的一个环节,是伴随软件工程的诞生而诞生的,其目的是让软件变得更加完善。随着软件复杂程度的增加、规模的扩大,软件测试作为一种能够保证软件质量的有效手段,越来越受到人们的重视了。

本章主要介绍软件测试的概念、目的、重要性以及在软件工程中的地位,软件测试的技术分类和常见的软件测试工具,让学生对软件测试有一个宏观了解,培养软件测试的基本思维。

软件测试介绍

软件测试的概念

在早期的软件开发中,测试的含义很狭隘,将测试等同于调试。纠正软件中已知的故障,常常由开发人员自己完成这项工作,对于测试的投入极少,测试介入也很晚,常常是等产品已基本完成时才开始进行测试,这种情况至今依然存在。

由于早期的软件代码行数很少,程序员可以独立进行开发、调试,直至最后的发布使用。然而,随着真正的商业软件的出现,程序规模爆炸式的增长,程序代码行数增加为千万数量级。随着软件的复杂度不断增加,开发的难度也越来越大,要保证程序的正确性和可靠性,要在程序的技术内涵和用户特定领域的需求之间找一个平衡点,必须提升软件测试的专业化,必须将软件测试岗位视为一个专门的工种。

IEEE 对测试的定义: 使用人工或自动的手段来运行或测定某个系统的过程,其目的是在于检验它是否满足规定的需求或弄清楚预期结果与实际结果之间的差别。

以上概念定义于 1983 年,但无法让我们了解软件测试的全貌,为了弄清楚软件测试的概念,咱们先来看一下什么是软件?

软件是计算机系统中与硬件相互依存的一部分,包括程序、数据以及与其相关文档的完整集合。 其中,程序是按事先设计的功能和性能要求执行的指令序列; 数据是使程序能正常操作信息的数据结构; 文档是与程序开发、维护和使用有关的图文材料。

软件中不同的组成部分对应不同的测试工作,所以 GB/T 对软件测试进行了新的定义:

GB/T 11457 对测试的定义:依据规范的软件检测过程和检测方法,按照测试计划和测试需求对被检测软件的文档、程序和数据进行测试的技术活动。

因此,软件测试工作,不仅是程序测试,还包括数据和文档测试。

随着软件产业的发展,软件测试技术及概念也在“与时俱进”,为了大家能更好地理解软件测试的概念的发展与沿袭,下面罗列一些不同时期关于软件测试的定义:

  • 确信程序做了它应该做的事(Hetzel,1973)。
  • 为找出错误而运行程序或系统的过程(Myers,1979)。
  • 查出规格说明中错误,以及与规格说明不符的地方。
  • 一切以评价程序或系统的属性、能力为目的的活动(Hetzel,1983)。
  • 对软件质量的度量(Hetzel,1983)。
  • 评价程序或系统的过程。
  • 验证系统满足需求,或确定实际结果与预期结果之间的区别。
  • 确认程序正确实现了所要求的功能。
  • 测试是与软件开发或维护工作并行进行的一个过程。
  • 是在用户需求和开发技术之间找一个平衡点。

软件测试的目的

GB/T 15532—2008 软件测试目的:

  • 验证软件是否满足软件开发合同或项目开发计划、系统设计文档、软件需求规格说明、软件设计说明和软件产品说明等规定的软件质量要求;
  • 通过测试,发现缺陷;
  • 为软件产品的质量测量和评价提供依据。

实际上,不同的测试阶段,需要考虑不同的测试目标。比如,在开发阶段中,如单元测试、集成测试和系统测试等的主要目标是识别和修正尽可能多的缺陷。在验收测试中,测试的主要目标是确认系统是否按照预期工作,建立满足用户需求的信心。 通常情况下,软件测试至少要达到下列目标:

  • 确保产品完成了它所承诺或公布的功能

    开发出的软件所有功能应该达到书面说明需求。当然书面文档的不健全甚至不正确将会导致测试效率低下、测试目标不明确和测试范围不充分,进而导致最终测试的作用不能充分发挥、测试效果不理想。因此具体问题一定要具体分析,一个好的测试工程师应该尽量来弥补文档不足所带来的缺陷。

  • 确保产品满足性能和效率的要求

    现在的用户对软件性能方面的要求越来越高,系统运行效率低或用户界面不友好、用户操作不方便的产品市场空间肯定会越来越小。因此通过测试改善产品性能和效率也是测试工作的一个目标。实际上用户最关心的不是软件的技术有多先进、功能有多强大,而是能从这些技术、这些功能中得到多少好处。

  • 确保产品是健壮的、适应用户环境的

    健壮性即稳定性,是产品质量的基本要求,尤其对于一个用于事务关键或时间关键的工作环境中。软件只有稳定的运行,才不至于中断用户的工作,因此通过健壮性测试确保产品的稳定性也是软件测试工作的一个目标。

软件测试的重要性

第一,软件测试可以减少软件的不正确执行导致的资金、时间和商业信誉损失,甚至能减少人员伤亡风险。

人类历史上真正意识到软件缺陷的危害是通过一起医疗事故。20 世纪 80 年代加拿大的一个公司生产了一种治疗癌症用的放射性治疗仪。当时在加拿大和美国共使用了 11 台这样的放射性治疗仪,结果造成了 6 例病人很快死亡,原因是:放射性治疗仪的软件存在缺陷。 接下来再看看不完整的软件测试带来的其他教训。

  • 2016 年雅虎遭遇两轮重大数据泄露事故,9 月的第一轮影响超过 5 亿雅虎用户账户,而 12 月则导致约 10 亿用户账户泄露;
  • 2010 年世界杯足球赛期间,Twitter 的多次大规模的宕机事件让用户无法忍受;
  • 2010 年,国内某银行核心业务系统发生故障,导致该银行包括柜台、网银、ATM 机在内的所有渠道的业务停滞 4.5 小时……;
  • 2008 年奥运票务系统因无法承受瞬间每小时 800 万次的流量而宕机;
  • 2006 年,英国伦敦希思罗机场航站楼因应用缺陷导致行李处理系统故障,积压行李达万件;

这些例子都是软件缺陷导致的严重后果,而严格的软件测试可以使这种风险降低,保障软件质量,从而保障人们的生命财产安全。

第二,软件测试可以降低软件开发成本,强化项目进度和质量上的控制。有调查显示,通过必要的测试,软件缺陷可以减少 75%,而软件的投资回报率则可增长到 350%。在软件测试上投入更多成本,会降低软件项目的整体成本和风险。

第三,软件测试的发展推动了软件工程的发展,通过分析在若干项目中发现的缺陷和引起缺陷的根本原因,我们就可以改进软件开发过程。过程的改进又可以预防相同的缺陷再次发生,从而提高以后系统的质量。

所以,软件测试在软件工程中是不可或缺的。

软件质量保证和软件测试的区别

软件测试是软件质量保证(Software Quality Assurance,SQA)的一部分,有助于提高软件的质量,但不是软件质量保证的全部。测试与质量的关系很像在考试中“检查”与“成绩”的关系。学习好的学生,在考试时通过认真检查能减少因疏忽而造成的答题错误,从而“提高”了考试成绩(取得他本来就该得的好成绩)。而学习差的学生,他原本就不会做题目,无论检查多么细心,也不能提高成绩。所以说,软件的高质量是设计出来的,而不是靠测试修补出来的。

软件质量保证目的: 提供一种有效的人员组织形式和管理方法,通过客观地检查和监控“过程质量”和“产品质量”,从而实现持续地改进质量,是一种有计划的、贯穿于整个产品生命周期的质量管理方法。

它与软件测试的主要区别是:

  • QA 主要职责是创建和加强促进软件开发并防止软件缺陷的标准和方法,软件测试的目的则是在最短的时间内发现尽可能多的缺陷,并确保这些缺陷得以修复。
  • QA 要管理和控制软件开发流程的各个过程,软件测试只能保证尽量暴露软件的缺陷;
  • QA 侧重事前预防,而软件测试侧重事后检测;

当然,软件测试对于促进软件质量有重要意义,质量保障可以从缺陷中学习,进而提高设计水平,制定预防措施。

现在很多公司都把测试人员作为质量保证部门中的成员,冠以 SQA 的头衔。在这里需要注意的是,不管是单纯的测试人员还是赋予了部分 SQA 的角色的测试人员,都不要以一种管理者的姿态出现在开发人员面前,应该始终保持一种帮助开发人员纠正错误、保证产品质量的服务态度。

软件测试技术分类

随着测试行业的发展,测试技术也越来越五花八门,按照不同的分类标准,测试技术所包含的技术也不同。如果按照软件测试时是否查看程序内部代码结构,可以分为黑盒测试和白盒测试;按照软件的开发阶段可以分为单元测试、集成测试、系统测试和验收测试;按照是否需要执行被测软件的角度,可以分为静态测试和动态测试;按照测试目标的不同,可以分为功能测试和非功能测试;按照测试的执行方式,又可以分为手工测试和自动化测试等。

接下来我们一起来看看它们的详细解释。

黑盒测试和白盒测试

  • 黑盒测试(Black-box Testing)

黑盒测试是把软件产品当作是一个黑盒子,在不考虑程序内部结构的情况下,在程序接口进行测试,它只检查程序功能是否按照需求说明书的规定正常使用,程序是否能接收输入数据而产生正确的输出结果。

这当然很好,因为测试人员不用费神去理解软件里面的具体构成和原理,只需要像用户一样看待软件产品就行了,如下图所示。

黑盒测试着眼于程序的外部结构,不考虑内部逻辑,主要针对软件界面和软件功能进行测试。如果内部特性本身设计有问题或规格说明的规定有错误,用黑盒测试方法是发现不了的。

黑盒测试方法主要有:等价类、边界值、判定表、因果图、状态图、正交法、错误猜测法、大纲法等测试方法。这些内容会在后面的章节中详细讲到。

  • 白盒测试(White-box Testing)

白盒测试是一种以理解软件内部结构运行方式为基础的软件测试技术。测试人员采用各种工具设备对软件进行检测,甚至把软件摆上手术台剖开来看个究竟。通常需要跟踪一个输入在程序中经过了哪些函数的处理,这些处理方式是否正确。这个过程如下图所示。

但白盒测试也有其局限性,无法检查程序的外部特性,无法对未实现的规格说明的程序内部欠缺部分进行测试。 白盒测试方法一般包括控制流测试(语句覆盖测试、分支覆盖测试、条件覆盖测试、条件组合覆盖测试、路径覆盖测试)、数据流测试、程序编译、程序插桩、域测试和符号求值等。 在测试过程中,应该综合应用黑盒测试和白盒测试,不要用黑盒测试和白盒测试来划分自己属于哪一类测试人员,一个优秀的测试人员应该懂得各种各样的测试技术和寻找缺陷的手段。

手工测试和自动化测试

  • 手工测试(Manual Testing)

手工测试,是利用人工的方式去执行测试,由人一个一个的输入用例数据,然后观察结果,和自动化测试相对应,属于最基本的测试方法。

  • 自动化测试(Automated Testing)

自动化测试是利用工具或程序来代替人工的测试方法。

自动化测试是软件测试发展的一个必然结果。随着软件技术的不断发展,测试工具也得到了长足的发展,人们开始利用测试工具来帮助自己做一些重复性的工作。

自动化测试的优势:

  • 借助计算机能力,可以重复地、不知疲倦地运行;
  • 对于数据能进行精确的、大批量的比较,而且不会出错;

自动化测试的局限性:

  • 测试工具本身不能满足所有的测试要求;

  • 测试工具的复杂性制约了人们的使用;

  • 有些测试工具非常昂贵;

  • 程序本身不稳定时,不建议使用自动化测试工具;

  • 自动化脚本的维护量很大,需要专人去维护。

手工测试胜在测试业务逻辑,而自动化测试胜在测试底层架构。比如测试一些崩溃、挂起、错误返回码、异常和内存使用等等。速度快,但是也困难一些。

所以自动化测试永远也不会完全取代手工测试,手工测试和自动化测试结合起来才是硬道理。因为很多数据的正确性、界面美观、业务逻辑的满足程度等都离不开测试人员的人工判断。但仅仅依赖手工测试的话,则会让测试过于低效,尤其是回归测试的重复工作量对测试人员会造成的巨大压力。

V 模型的测试级别

所谓的 V 模型是软件测试过程中的一个重要模型,由于其模型构图形似字母 V,所以又称软件测试的 V 模型,这个会在《软件测试过程模型》中详细讲到。

  • 单元测试(Component Testing/Unit Testing)

单元测试也称为组件测试,是指对软件中的最小可测试单元进行检查和验证,如一个模块,一个过程等等。它的目的是检验软件基本组成单元的正确性。

对于单元测试中单元的含义,一般来说,要根据实际情况去判定,如 C 语言中单元指一个函数,Java 里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分隔离的情况下进行测试。

单元测试是编写一小段代码,用于检验被测代码的一个很小很明确的功能是否正确,编写的这一小段代码被称为桩或驱动。

桩(Stub):是指模拟被测试的模块所调用的模块。 驱动器(Driver):代替某个软件组件来模拟控制和调用其他组件或系统的软件或测试工具。

一个好的单元测试将会在软件开发阶段发现大部分缺陷,并且修改它们的成本也很低,因为在软件开发后期,修改缺陷会变得很困难,并且要耗费大量的时间和开发费用。

一个单元测试人员需要具备一些测试知识,比如代码编写能力,基本的测试技能,部分单元测试工具的使用等。

单元测试的缺点是无法发现一些接口问题和大环境的缺陷,但接口测试的问题可以在集成测试阶段发现。那么接下来看看什么叫集成测试。

  • 集成测试(Integration Testing)

集成测试是将通过测试的单元模块组装成系统或子系统再进行测试,目的是对组件之间的接口进行测试,以及测试一个系统内不同部分的相互作用。

比如操作系统、文件系统、硬件或系统之间的接口,集成测试是单元测试的逻辑扩展。它最简单的形式是:把两个或多个已经测试过的单元组合成一个组件,测试它们之间的接口。集成测试的目标是确保单元组合在一起后能够按既定意图协作运行,并确保增量的行为正确。

集成测试的实施方案有很多种,如自底向上集成测试和自顶向下的集成测试等。它所测试的内容包括单元间的接口以及集成后的功能。

自底向上的集成是从最底层模块(即叶子节点)开始,按照调用图的结构,从上而下,逐层将各模块组装起来。在从下而上的集成测试环境中,需对哪些未经集成测试的模块开发驱动模块。

自顶向下的集成是从主控模块(主程序,即根节点)开始,按照系统程序结构,沿着控制层从上而下,逐渐将各模块组装起来。在从上向下的集成测试过程中,需对哪些未经集成的模块开发桩模块。在集成过程中,可以采用宽度优先或深度优先的策略向下推进。

那么什么样的人才能做集成测试呢?需要具备开发技能、具备有关组件间的交互知识,还要具备一些测试基础技能。

集成测试也有其自身的缺陷,比如组件外的缺陷无法被发现。另外,如果程序对整个系统的需求不满足,这样的缺陷测试不出来,那么就需要与系统测试相结合,接下来看看什么是系统测试。

  • 系统测试(System Testing)

系统测试是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案。

系统测试发现问题之后要经过调试找出错误原因和位置,然后进行改正。是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。对象不仅仅包括需测试的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。

系统测试主要依据《系统需求规格说明书》文档进行测试。主要测试的是系统需求、整个系统的功能和非功能的需求。那么做系统测试的测试人员,需要具备测试技术、要熟悉软件系统的需求,还有性能测试知识和工具的使用。

系统测试也有缺陷,没有实现或者没有完全实现用户的隐性需求,在系统测试中是无法发现的。

  • 验收测试(Acceptance Testing)

验收测试是在软件产品完成了功能测试和系统测试之后,产品发布之前所进行的软件测试活动,是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是建立对系统、系统的某部分或特定的系统非功能特征建立信心。

它在系统测试的后期,以用户测试为主,或有测试人员等质量保证人员共同参与的测试,它也是软件正式交给用户使用的最后一道工序。一般是根据产品说明书严格检查产品,逐字逐句对照说明书上对软件产品做出的各方面要求,确保所开发的软件产品符合用户的各项要求。

验收测试有下面几种典型的类型:

  • 用户验收测试

用户验收测试一般是验证由商业用户使用一个系统的可用性。通常由用户来组织这些测试,并基于商业过程和典型的用户场景选择测试用例。

  • 运行(验收)测试

运行(验收)测试由系统管理员来进行验收而开展的相关测试,测试内容主要包括:系统备份/恢复测试、灾难恢复测试、用户管理测试、维护任务测试、安全漏洞阶段性检查。

  • 合同和法规性验收测试

合同验收测试根据合同中规定的生产客户定制软件的验收准则,对软件进行测试。应该在合同拟定时定义验收准则。法规性验收测试根据必须要遵守的法律法规来进行测试,比如政府、法律和安全方面的法律法规。

  • α 测试和 β 测试

α 测试是由用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试,试图发现错误并修正。目的是评估软件产品的 FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。 α 测试不能由程序员或测试人员完成。 β 测试是由软件的最终用户在一个或多个客户场所进行的测试。经过 α 测试的版本被称为 β 版本,同 α 测试一样都是由潜在的客户进行测试,而不是由产品的开发者进行测试,不同的是,β 测试开发者通常不在现场。 α 测试和 β 测试都不能替代内部的系统测试。只有当系统测试已经证明软件足够稳定后,才可以将新产品提交给潜在的客户做验收测试。 有些组织也可能使用不同的术语,比如在系统正式移交给客户之前或之后进行的测试分别称为工厂验收测试和现场验收测试等。

要注意的是,在开发方将软件提交用户方进行验收测试之前,必须保证开发方本身已经对软件的各方面进行了足够的正式测试。用户在按照合同接收并清点开发方的提交物时,要查看开发方提供的各种审核报告和测试报告内容是否齐全,再加上平时对开发方工作情况的了解,基本可以初步判断开发方是否已经进行了足够的正式测试。

功能和非功能测试

根据特定的测试目标或测试原因,一系列测试活动可以旨在对软件系统进行验证。每种测试类型都会针对特定的测试目标,可能是测试软件所实现的功能,也可能是非功能的质量特征,比如可靠性或可用性、系统或软件的结构或架构,或与变更相关,比如确认缺陷已经被修改(确认测试)以及变更后是否引入新的缺陷(回归测试)。

  • 功能测试(Functional Testing/Behavioral Testing)

功能测试就是指验证系统能做什么。功能测试是一个试图发现程序与其外部规格说明之间存在不一致的过程。外部规格说明是一份从最终用户的角度对程序行为的精确描述。可以采用基于规格说明书的技术,根据软件或系统的功能来设计测试条件和测试用例。功能测试主要是考虑软件的外部表现行为(也可以叫黑盒测试)。

功能测试通常是一项黑盒操作。功能测试基于功能和特征(在文档中描述的内容或测试员自己的理解)以及专门的系统之间的交互,可以在各个级别的测试中进行(例如组件测试可以基于组件的规格说明书)。

功能测试涉及了软件在功能上正反两面的测试,而非功能测试就是所有其他方面的测试。

安全性测试也是功能测试的一种,它会对安全性相关的功能(比如防火墙)进行测试,从而检测系统和数据是否能抵御外部恶意的威胁,如病毒等。有的书籍把安全性测试归类为非功能测试,也无可厚非。在现代的学科中,安全性测试早已经是独立的一种测试分类。

互操作性测试也是一种功能性测试,评估软件产品与其他一个或多个组件或系统交互的能力。

  • 非功能特性测试(非功能测试)

非功能测试是指为了测量系统和软件的特征,需要进行的测试。这些特征可以用不同尺度予以量化,比如进行性能测试来检验响应时间。国际标准化组织 ISO 在 ISO9126 中定义了几个非功能属性。

非功能测试包括但不限于以下:性能测试、负载测试、压力测试、可用性测试、可维护性测试、可靠性测试和可移植性测试。非功能性测试就是测试系统工作的怎样。非功能测试可以在任何测试级别上执行。我们来看看一些常见的非功能测试的定义。

  • 性能测试(Performance Testing)

性能测试是指通过工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。(比如:处理速度、响应时间、CPU 使用、内存使用情况等。)主要考查一些性能指标是否符合用户要求。

负载测试和压力测试都属于性能测试,两者可以结合进行。

  • 负载测试(Load Testing)

负载测试是确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。

  • 压力测试(Stress Testing)

压力测试是在规定的或超过规定的需求条件下测试组件/系统,以对其进行评估。它是为了评价一个系统或组件达到或超过需求规定的界限时的反应的测试。可以检查系统在超负荷的情况下的性能反应。

  • 可靠性测试(Reliability Testing)

软件使用者期望软件能够无误运行,所以可靠性是度量软件如何在主流情形下和非预期情况下维持它的功能,有时也包括软件出错时的自恢复能力。例如,自动定时保存现行文件的功能就可以归类到可靠性。

  • 可用性测试(Usability Testing)

如果用户不明白应该怎么使用,那么即使是零差错的软件也会变得毫无用处。可用性测试是用户学习和控制软件以达到用户需求的容易程度,进行可用性研究、重视顾客反馈意见和对错误信息和交互内容的检查都能提高可用性。

  • 可维护性测试(Maintainability Testing)

可维护性描述的是修改软件而不引入新错误所需的工作量。产品代码和测试代码都必须具备高度的可维护性。团队成员对代码的熟悉程度、产品的可测性和复杂度都对可维护性有影响 。

  • 可移植性测试(Portability Testing)

可移植性是指一种计算机上的软件装置到其他计算机上的能力,软件移植是实现功能的等价联系,而不是等同联系。从狭义上讲,是指可移植软件应独立于计算机的硬件环境;从广义上讲,可移植软件还应独立于计算机的软件,即高级的标准化软件,它的功能与机器系统结构无关,可跨越很多机器界限。

  • 兼容性测试(Compatibility Testing)

兼容性测试是指测试软件在特定的硬件平台上、不同的应用软件之间、不同的操作系统平台上、不同的网络等环境中是否能够很友好的运行的测试。

  • 安全性测试

安全测试是检查系统对非法侵入的防范能力。主要包括用户认证、系统网络安全和数据库安全方面的测试。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。

  • 本地化测试(Localizability Testing)

本地化是软件版本语言进行更改,本地化测试的对象是软件的本地化版本。本地化测试的目的是测试特定目标区域设置的软件本地化质量。本地化测试的环境是在本地化的操作系统上安装本地化的软件。

  • 配置测试(Configuration Testing)

配置测试是验证被测软件在不同的软件和硬件配置中的运行情况。配置测试执行的环境是所支持软件运行的环境。测试环境适合与否严重影响测试结果的真实性和正确性。

静态和动态测试

  • 静态测试(Static Testing)

静态测试是指不运行被测软件,只是静态地检查程序代码、界面或文档可能存在的错误的过程方法。

静态测试方法包括检查单和静态分析等方法,对文档的静态测试方法主要以检查单的形式进行,而对代码的静态测试方法一般采用代码审查、代码走查和静态分析,静态分析一般包括控制流分析、数据流分析、接口分析和表达式分析。

  • 动态测试(Dynamic Testing)

动态测试方法相对于静态测试而言的,是指实际运行被测程序,输入相应的测试数据,检查输出结果和预期结果是否相符的过程。

目前,动态测试也是公司的测试工作的主要方式。

动态测试在建立在程序的执行过程中,一般采用白盒测试方法和黑盒测试方法相结合的方法。

其他测试术语

与变更相关的测试主要有确认测试(再测试)和回归测试。

  • 确认测试(Confirmation Testing)

当发现和修改了一个缺陷后,应该重新进行测试以确定原来的缺陷已经成功的修改,这称之为确认测试。

  • 回归测试(Regression Testing)

回归测试是对已修改过缺陷的程序进行重复测试,以发现在这些变更后是否有新的缺陷引入或被屏蔽。

这些缺陷可能存在于被修改的软件中,也可能在与之相关或不相关的其他软件组件中。当软件发生变更或应用软件的环境发生变化时,需要进行回归测试。回归测试的规模可以根据在已正常运行的软件中发现新的缺陷的风险大小来决定。

回归测试有两重含义:一是所做的修改达到了预期的目的,也就是确认测试;二是要保证不影响软件的其他功能的正确性。所以回归测试是包含了确认测试的,同时要测试其他功能模块有没有引入新的缺陷。

回归测试会在所有的测试级别上发生,同时适用于功能测试、非功能测试和白盒测试。回归测试一般都会被执行很多次,而且通常很少有变动,所以利用自动化测试工具来进行回归测试是最好的选择。

  • 冒烟测试(Smoke Testing)

该术语源自硬件行业。对一个硬件或硬件组件进行更改或修复后,直接给设备加电,如果没有冒烟,则该组件就通过了基本功能的测试。在软件中,“冒烟测试”是指测试版本的主要功能的测试。冒烟测试是微软首先提出来的一个概念,具体来说,冒烟测试就是在每日构建后,对系统的基本功能进行简单的测试,目的是确认软件基本功能正常,可以进行后续的正式测试工作,不至于让测试人员白忙活。

冒烟测试的名称可以理解为:该种测试耗时短,仅用一袋烟功夫就够了。

  • 随机测试(Ad-hoc Testing)

随机测试通常是指临时准备的、随机的缺陷搜索的测试过程。它是让测试人员发挥自己想象的去测试,其目的是模拟用户的真实操作发现一些边缘性的缺陷,它没有用例的约束,会起到意想不到的效果,是测试的一个重要补充手段,可以保证测试有效覆盖。主要是在测试感觉不充分的情况下应用。

其实在测试级别中并没有刻意增加这个测试阶段,但测试人员在工作过程中却一直在做随机测试,因为一个用例不可能完全准确的涵盖功能点,也不可能充分指出所有测试方法和可能的情况,所以想到了就测试,就是这么一种感觉。从定义上看,谁都可以做随机测试,但经验告诉我们,经验越丰富的测试人员,越适合做随机测试,测试覆盖度越高。

随着网络的发展,软件从以单机运行的模式过渡到了基于网络的协同工作模式,这促使了新的软件技术的出现。性能测试、压力测试变得越来越重要。同样,伴随着网络出现的问题是安全问题、黑客问题,因此也促进了安全性测试技术的出现,人们一面开始怀念当年那些只要锁住机器就万事大吉的美好时光,一面寻求更安全的软件应用。安全性测试可以说是给了用户和软件开发商一支“安神剂”。

随着操作系统的发展,各种平台和版本的操作系统不断涌现,给人们带来新的卓越体验的同时,也给软件企业带来了烦恼,因为如果想尽可能让更多的用户使用自己的产品,就需要支持各种各样的使用环境。今天,软件再也不是只有在大型机器上才有的神秘东西,不仅充斥了个人电脑、网络,还蔓延到了每个人的手机上,因此,手机的软件测试又由于其特殊性而渐渐地成为一个分支的趋势。

常见软件测试工具

随着软件测试的地位逐步提高,测试的重要性逐步显现,测试工具的应用已经成为普遍的趋势,测试工具可以使软件的一些缺陷直观地显示在读者面前。总体来说,软件测试工具分为自动化软件测试工具测试管理工具

自动化软件测试工具存在的价值是为了提高测试效率,用软件来代替一些人工输入。自动化测试工具又分为功能自动化测试工具性能自动化测试。

测试管理工具是为了复用测试用例,提高软件测试的价值。一个好的软件测试工具和测试管理工具结合起来使用将会使软件测试效率大大地提高。

功能自动化测试工具

功能测试工具一般是通过自动录制、检测和回放用户的应用操作,将被测系统的输出记录同预先给定的标准结果比较,功能测试工具能够有效地帮助测试人员对复杂的企业级应用的不同发布版本的功能进行测试,提高测试人员的工作效率和质量。其主要目的是检测应用程序是否能够达到预期的功能并正常运行。

  • UFT(QTP)

    Micro Focus 的自动化功能测试工具 Unified Functional Testing,前身是 HP 公司的 QTP。UFT 是一个 B/S 结构的自动化功能测试利器,它可以覆盖绝大多数的软件开发技术,简单高效,并具备测试用例可重用的特点。它是一款先进的自动化测试解决方案,用于创建功能和回归测试。它自动捕获、验证和重放用户的交互行为。UFT 为每一个重要软件应用和环境提供功能和回归测试自动化的行业最佳解决方案。

  • Selenium

    Selenium 是为正在蓬勃发展的 Web 应用开发的一套完整的测试系统。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。它的主要功能包括:测试与浏览器的兼容性—测试你的应用程序是否能够很好地工作在不同浏览器和操作系统之上。测试系统功能,创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成。Selenium 的核心 Selenium Core 基于 JsUnit,完全由 JavaScript 编写,因此可以运行于任何支持 JavaScript 的浏览器上,包括 IE、Mozilla Firefox、Chrome、Safari 等。

  • WinRunner

    WinRunner 是一款强大的企业级自动化功能测试工具。Mercury Interactive 公司的 WinRunner 用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner 能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。

  • SilkTest

    SilkTest 是面向 Web 工具、Java 应用和传统的 C/S 应用,进行自动化的功能测试和回归测试的工具。它提供了用于测试的创建和定制的工作流设置、测试计划和管理、直接的数据库访问及校验等功能,使用户能够高效率地进行软件自动化测试。

性能自动化测试工具

性能自动化测试工具的主要目的是度量应用系统的可扩展性和性能,是一种预测系统行为和性能的自动化测试工具。在实施并发负载过程中,通过实时性能检测来确认和查找问题,并针对所发现问题对系统性能进行优化,确保应用的成功部署。负载压力测试工具能够对整个企业架构进行测试,通过这些测试,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期循环。

  • LoadRunner

    Micro Focus 公司的 LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具,前身是 HP 公司开发的。通过以模拟上千万用户实施并发负载及实时性能检测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使 LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。

    LoadRunner 是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实时性能检测,来帮助更快的查找和发现问题。此外,还能支持广泛的协议和技术,为特殊环境提供特殊的解决方案。

  • JMeter

    JMeter 是 Apache 组织的开放源代码项目,它是功能和性能测试工具的综合体。

    JMeter 可以用于测试静态或者动态资源的性能(文件、Servlets、Perl 脚本、Java 对象、数据库和查询、ftp 服务器或者其他的资源)。JMeter 用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。你可以用 JMeter 提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。

  • WebLOAD

    WebLOAD 是 Radview 公司推出的一个性能测试和分析工具,它让 Web 应用程序开发者自动执行压力测试,webload 通过模拟真实用户的操作,生成压力负载来测试 Web 的性能。

  • WAS

    WAS(Web Application Stress Tool)是由微软的网站测试人员所开发,专门用来进行实际网站压力测试的一套工具。透过这套功能强大的压力测试工具,可以使用少量的 Client 端计算机仿真大量用户上线对网站服务所可能造成的影响。

    它可以数种不同的方式建立测试指令,支持多种客户端接口,支持多用户。

测试管理工具

一般而言,测试管理工具对测试需求、测试计划、测试用例、测试实施进行管理,并且测试管理工具还包括对缺陷的跟踪管理。测试管理工具能让测试人员、开发人员或其他的 IT 人员通过一个中央数据仓库,在不同地方就能交互信息。

  • ALM/QC

    QC(Quality Center)的前身是大名鼎鼎的 TD,而后被 HP 公司收购并改名为 QC,是基于 Web 的测试管理工具,可以组织和管理应用程序测试流程的所有阶段,包括制定测试需求、计划测试、执行测试和跟踪缺陷。可使用该软件在较大的应用程序生命周期中实现特定质量流程和过程的数字化,该软件还支持在 IT 团队间进行高水平沟通和协调。

  • BugFree

    BugFree 是借鉴微软的研发流程和 bug 管理概念,使用 PHP+MySQL 独立写出的一个 bug 管理系统。简单实用、免费并且开放源代码。因为采用的是 B/S 结构,所以客户端无须安装任何软件,通过 IE,FireFox 等浏览器就可以自由使用。

    它可以对软件开发出现的问题进行有效的跟踪管理,并协调开发人员、测试人员和需求三方的关系,规范软件的研发流程。通过对问题的有效跟踪管理,可以持续地改进产品的质量,可以记录对问题的处理过程,使之作为知识的积累。

  • 禅道

    禅道,除了是一款功能比较齐全的测试管理工具之外,还是一款开源的项目管理软件,是由青岛易软天创公司开发的。它的特点是将软件研发中的产品管理,项目管理,质量管理三个核心流程融合在一套工具里面,是一款软件生命周期管理软件,为软件测试和产品研发提供一体化的解决方案,是一款优秀的国产开源测试管理工具。

    它的核心管理思想是基于 Scrum,然后在 Scrum 基础上完善了测试管理,文档管理,事务管理等功能。

除以上三种常用的测试工具外,还有白盒测试工具、测试辅助工具以及测试框架。白盒测试工具常见的比如 JTEST、JUNIT、Jcontract、C++ Test。测试辅助工具本身并不执行测试,但可以使用它们生成测试数据,为测试提供数据准备。常见的测试框架有 RFT、BS、Robot 等。

测试工具的应用可以提高测试的效率。但是在选择和使用测试工具的时候,我们也应该看到,在测试过程中,并不是所有的测试工具都适合我们。同时,有了测试工具,会使用测试工具并不等于测试工具真正能在测试中发挥作用。

对于测试工具的选择,我们要遵循以下几个原则:

  • 只买对的,不买贵的。
  • 选择主流测试工具。
  • 分阶段、初步引入测试工具。
  • 选择技术支持完善的产品。
  • 如果需要多种测试工具,尽量选择同一家公司的产品。

小结

读者需要掌握的内容:

  • 软件测试的概念
  • 软件的概念
  • 软件测试的目的
  • 软件测试和 QA 的区别
  • 测试技术的分类及专业术语
  • 常用的测试工具

这些都是在面试或者笔试当中会被经常问到的,掌握了这些,才能跟面试官沟通的时候有共同语言。

软件测试是一门需要不断学习和补充新知识的学科,要想成为一名优秀的测试人员就必须像练武之人想成为一名武林高手一样不断演习武艺,博采众家之长,消化吸收后据为己有,这样才能最终称霸武林,立于不败之地。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值