软件测试基础

一、认识软件

1.1、 什么是软件 ?

计算机发明以来,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。计算机硬件、软件、操作系统等纷纷应运而生,并发展壮大,时至今日,计算机已经成为人类社会不可或缺的,无可替代的强大工具之一,被看做是20世纪以来最伟大的发明之一。其中,计算机软件在现代社会和经济生活中占有极其重要的地位,在各个领域中发挥着越来越重要的作用。

软件是:基于计算机硬件上的,是一系列按照特定顺序组织的计算机数据和指令的集合。
一般来讲软件被划分为系统软件应用软件和介于这两者之间的中间件。软件并不只是包括可以在计算机(这里的计算机是指广义的计算机)上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。简单的说软件就是程序加文档的集合体。另也泛指社会结构中的管理系统、思想意识形态、思想政治觉悟、法律法规等等。

我们常见的软件:
系统软件:windows10,Mac Os
应用软件:有桌面应用软件,有app


1.2、软件的生命周期(一个软件的诞生到结束)

同任何事物一样,一个软件产品或软件系统也要经历孕育、诞生、成长、成熟、衰亡等阶段,也就是软件的生命周期。概括来讲,软件的生命周期大体上分为3个主要阶段:软件定义时期软件开发时期软件运行和维护时期。这三个时期紧密联系,缺一不可,可以说牵一发而动全身
image

1、问题的定义及规划
此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性。

2、需求分析
在确定软件开发可行的情况下,对软件需要实现的各个功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。"唯一不变的是变化本身。",同样需求也是在整个软件开发过程中不断变化和深入的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。

3、软件设计
此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和详细设计。好的软件设计将为软件程序编写打下良好的基础。

4、程序编码
此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。

5、软件测试
在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。

6、运行维护
软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。

1.2、软件周期模型

瀑布模型、V模型、W模型、H模型、X模型、敏捷模型

1.2.1、瀑布模型

瀑布模型是最早出现的软件开发模型,它将软件生命周期的各项活动规定为按固定顺序而连接的若干阶段工作,如同瀑布流水,逐级下落。
等前一阶段的工作完成才能开始后一阶段的工作,前一阶段的输出文档就是后一阶段的输入文档,因此只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果

优点
  1.可强迫开发人员采用规范化的方法。
  2.严格地规定了每个阶段必须提交的文档。
缺点
  1.依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。
  2.只适用于项目开始时需求已确定的情况,应付需求变化能力较弱的开发模型

image



1.2.2、V模型

RAD(Rapid Application Development,快速应用开发)模型是软件开发过程中的一个重要模型,通过开发和测试同时进行的方式来缩短开发周期,提高开发效率。其形状像一个字母V,故称为V模型。又称软件测试的V模型。

V模型是一个著名的、以测试为驱动的开发模型,该模型强调开发过程中测试贯穿始终,是瀑布模型的一个变体。V模型描述了质量保证活动和沟通、建模相关活动以及早期构键相关的活动之间的关系。随着软件团队工作沿着V模型左侧步骤向下推进,基本问题需求逐步细化,形成问题及解决方案的技术描述。一旦编码结束,团队沿着V模型右侧的步骤向上推进工作,其实际上是执行了一系列测试(质量保证活动),这些测试验证了团队沿着V模型左侧步骤向下推进过程中所生成的每个模型。V模型提供了一种将验证确认活动应用于早期软件工程工作中的方法。
image

优点:
   清楚的标识了开发和测试的各个阶段;
   自上而下逐步求精,每个阶段分工明确,便于整体项目的把控。

缺点:
   自上而下的顺序导致了,测试工作在编码之后,就导致错误不能及时的进行修改;
   实际工作中,需求经常变化,导致v模型步骤,反复执行,返工量很大,灵活度较低。

改良:每个步骤都可以进行小的迭代(更新)工作。

二、 软件测试分类

2.1、方法分类:

2.1.1、黑盒测试

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

黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的,并不考虑程序的源代码。很明显,如果外部特性本身设计有问题或规格说明的规定有误,用黑盒测试方法是发现不了的。黑盒测试分为功能测试和性能测试:

1)功能测试(function testing),是黑盒测试的一方面,它检查实际软件的功能是否符合用户的需求。包括逻辑功能测试、界面测试、易用性测试和兼容性测试。

2)性能测试(performance testing),软件的性能主要有时间性能和空间性能两种。其中,时间性能主要指软件的一个具体事务的响应时间,而空间性能主要指软件运行时所消耗的系统资源。

参考:https://baike.baidu.com/item/黑盒测试/934030?fr=aladdin

2.1.2、白盒测试

白盒测试是把测试对象看作一个打开的盒子。利用白盒测试法进行动态测试时,需要测试软件产品的内部结构和处理过程,不需测试软件产品的功能。与黑盒测试相反,这种测试就要研究程序里面的源代码和程序结构。

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

静态测试:不要求在计算机上实际执行所测程序,主要以一些人工的模拟技术对软件进行分析和测试;
动态测试:是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。在动态分析技术中,最重要的技术是路径和分支测试。

参考:https://baike.baidu.com/item/白盒测试/934440?fr=aladdin

2.1.3、灰盒测试

灰盒测试,是介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。

参考:https://baike.baidu.com/item/灰盒测试/1906276?fr=aladdin

2.2、阶段分类:

2.2.1、单元测试(Unit Testing)

单元测试是最微小规模的测试,测试的是某个功能或代码块。典型地由程序员而非测试员来做,因为它需要知道内部程序设计和编码的细节知识。

  • 测试阶段:编码后或者编码前
  • 测试对象:模块
  • 测试人员:白盒测试工程师或开发人员
  • 测试依据:代码和注释+详细文档
  • 测试方法:白盒测试
  • 测试内容:模块接口测试、局部数据测试、路径测试、错误处理测试、边界测试

补充说明:
(1)学习测试依据时,我们可以对比软件测试的“V”模型结合记忆
(2)白盒测试不是单元测试,单元测试是白盒测试
(3)测试驱动开发:测试人员先编写测试用例,开发人员根据测试用例写程序


2.2.2、集成测试(Integration Testing)

集成测试是指一个应用系统的各个部件的联合测试,以决定他们能否在一起共同工作并没有冲突。部件可以是代码块、独立的应用、网络上的客户端或服务器端程序。这种类型的测试尤其与客户服务器和分布式系统有关。一般集成测试以前,单元测试需要完成。

集成测试也称联合测试(联调)、组装测试:将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。集成主要目的是检查软件单位之间的接口是否正确。

  • 测试阶段:一般是单元测试之后
  • 测试对象:模块间的接口
  • 测试人员:白盒测试工程师或开发工程师
  • 测试依据:单元测试的文档+概要设计文档
  • 测试方法:黑盒测试与白盒测试(灰盒测试)
  • 测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能的正确性、全局数据结构、单模块缺陷对系统的影响
    补充说明:
    单元测试是一个模块内部的测试,集成测试是在模块之间进行测试(至少两个)

2.2.3、系统测试(System Testing)

系统测试是将整个软件系统看做一个整体进行测试,包括对功能、性能,以及软件所运行的软硬件环境进行测试。

系统测试:将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段,包括回归测试和冒烟测试。

  • 测试阶段:集成测试阶段之后
  • 测试对象:整个系统(软件、硬件)
  • 测试人员:黑盒测试工程师
  • 测试依据:需求规格说明文档
  • 测试方法:黑盒测试
  • 测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等
    补充说明:
    (1)系统测试是从完整的角度,广面去看待问题,不再看模块
    (2)虽然系统测试包括冒烟测试和回归测试,但三者之间是有严格的先后顺序的,即:先冒烟、再系统、后回归。

(1)回归测试(Regression Testing):指修改了旧的代码之后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。(自动回归测试将大幅度降低系统测试、维护升级等阶段的成本)。

在整个软件测试过程中占有很大的工作比重,软件开发的各个阶段都会进行多次回归测试。随着系统的庞大,回归测试的成本越来越大,通过正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。

(2)冒烟测试(smoke testing):该术语来自硬件,指对一个硬件或一组硬件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试,也可以理解为该种测试耗时短,仅用一袋烟的功夫就足够了。

冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续正式的测试工作。
冒烟测试的执行者是版本编译人。
冒烟测试一般在开发人员开发完毕后送给测试人员来进行测试时,测试人员会先进行冒烟测试,保证基本功能正常,不阻碍后续测试。

2.2.4、验收测试(Accept Testing):

验收测试是基于客户或最终用户的规格书的最终测试,或基于用户一段时间的使用后,看软件是否满足客户要求。一般从功能、用户界面、性能、业务关联性进行测试。

验收测试(交付测试):是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。

  • 测试阶段:系统测试通过后
  • 测试对象:整个系统(包括软硬件)
  • 测试人员:主要是最终用户或者需求方
  • 测试依据:用户需求、验收标准
  • 测试方法:黑盒测试
  • 测试内容:同系统测试(功能、各类文档文档等)

下面,我们以手机为例,举个例子:
针对买回来的新手机以及它的美颜功能来进行测试。
(1)当买回来的手机,它的美颜功能有问题时,我们只针对美颜功能的代码进行测试,就是单元测试。
(2)对于新买回来的手机,检测手机通讯录是否可以增添、删除、更改手机号码,打电话时需要手动的输入电话,也可以在手机中查找,这就是集成测试。
(3)新手机都会有一个合格标签,原因是出厂前手机厂商会对某一个型号的手机功能全部测试一遍,包括手机硬件本身,手机自带的APP等,这个叫系统测试。
(4)当修好新买回来的手机的美颜功能以后,用户除了会查看美颜功能是否完好,还会查看其他功能是否也完好,这个叫回归测试。
(5)对于新买回来的手机,我们做的第一件事是将常用的手机功能试一遍,第二件事情就是讲所有功能都试一遍,这个叫冒烟测试。
(6)对于新买回来的手机,一般都有7天包退,30天包换,我们一般都是在7天内把手机的所有功能都试一遍,这叫验收测试。

2.3、对象分类:界面测试、功能测试、性能测试、安全测试、兼容性测试、稳定性测试、用户体验测试

2.4、执行方法分类:静态测试、动态测试

参考:
https://blog.csdn.net/cherrydreamsover/article/details/81385643
https://blog.csdn.net/zhang150114/article/details/90694717
https://blog.csdn.net/daboluo521/article/details/81385017

posted @ 2021-09-09 19:52  钟鼎山林  阅读(404)  评论(0编辑  收藏  举报