系列文章目录
第1章 软件测试概述
介绍软件测试的基本概念,包括软件测试的原则、分类和工作流程等基本知识。
第2章 软件测试计划
对制订测试计划的原则和方法进行较详细的介绍。
第3章 软件测试基本技术
对软件测试基本技术分别进行较详细的介绍。
第4章 软件测试过程
对软件测试的不同测试阶段的测试主要任务、采用的主要测试技术和方法、测试管理和组织等方面做较详细的介绍和说明。
第5章 测试用例设计
介绍测试用例的基本概念、测试用例的设计方法、测试用例的分类和测试用例的有效管理,并给出较详细的测试用例设计实例。
第6章 测试报告与测试评测
介绍如何报告发现的软件缺陷,以及有关测试评测的相关知识。
第7章 软件测试项目管理
分别介绍和讨论软件测试项目管理的基本概念、项目管理的思想、特点、方法和技巧。
第8章 面向对象软件测试
对面向对象软件测试的特点、测试模型和基本技术分别进行详细的介绍。
第9章 Web应用测试
介绍了有关Web应用测试方面的内容和技术。
第10章 软件测试自动化
介绍自动化测试的定义、自动化测试的作用、自动化测试工具的分类和自动化测试工具的应用等内容。
文章目录
前言
软件测试是软件工程中的重要部分,是确保软件质量的重要手段。随着软件的复杂度不断增强、软件产业的不断发展,软件测试得到越来越广泛的重视,本系列文章就将介绍软件测试的基础内容。
一、软件、软件危机和软件工程
1.软件、软件危机和软件工程基本概念
计算机软件是在计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。
程序是指按特定的功能和性能要求而设计的能够执行的指令序列;数据是指程序能正常操纵、处理的信息及其数据结构;文档是指与程序设计开发、维护和使用有关的图文材料。
2.软件工程的目标及其一般开发过程
从狭义上说,软件工程的目标是生产出满足预算、按期交付、用户满意的无缺陷的软件,进而当用户需求改变时,所生产的软件必须易于修改。从广义上说,软件工程的目标就是提高软件的质量与生产率,最终实现软件的工业化生产。
一个软件产品从形成概念开始,经过开发、测试、使用和维护,直到最后退出使用的全过程称为软件生存周期。
3.软件过程模型
软件过程模型是软件开发的指导思想和全局性框架。软件开发所遵循的软件过程是保证高质量软件开发的一个至关重要的因素。
-
瀑布过程模型
强调阶段的划分及其顺序性、各阶段工作及其文档的完备性,是一种严格线性的、按阶段顺序的、逐步细化的开发模式。
-
螺旋过程模型
螺旋过程模型需要经历多次需求分析、设计、实现、测试这组顺序活动。
-
增量过程模型
当迭代的速度加快,每次迭代只是在前一次的基础上增加少量功能的时候,这种迭代过程就是增量开发过程。
-
快速原型过程模型
在快速原型过程模型中,首先是快速进行系统分析,在设计人员和用户的紧密配合下,快速确定软件系统的基本要求,尽快实现一个可运行的、功能简单的原型系统,然后对原型系统逐步求精、不断扩充完善得到最终的软件系统。
-
敏捷过程模型
在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。
以上5种模型只是众多软件过程模型中较为典型的,除此之外还有喷泉模型、统一软件开发过程模型等。
二、软件缺陷与软件故障
软件缺陷是存在于软件(文档、数据、程序)之中的不希望出现或不可接受的偏差,软件缺陷导致软件在运行于某一特定条件时出现软件故障,这时软件缺陷被激活。
软件故障是指软件在运行过程中产生的不希望出现或不可接受的内部状态,对软件故障若无适当措施(容错)加以及时处理,就会使软件失效。
三、软件质量与质量模型
软件质量是与软件产品满足明确或隐含需求的能力有关的特征和特性的总和。其含义有以下4个方面。
- 能满足给定需求的特性。软件需求是衡量软件质量的基础,不符合需求的软件就不具备好的质量。设计的软件应在功能、性能等方面都符合要求,并可靠地运行。
- 具有所期望的各种属性的组合的程度,即软件结构良好,合理地利用系统资源,易读、易于理解,并易于修改,方便软件的维护。
- 能满足用户综合期望的程度,软件系统具有友好的用户界面,便于用户使用。
- 软件的组合特性。软件生存周期中各阶段文档齐全、规范,便于配置管理。
目前已有很多质量模型,它们分别定义了不同的软件质量属性,比较常见的3个质量模型是McCall模型、Boehm模型和ISO 9126,它们的共同特点是把软件质量特性定义成分层模型。比较普遍的质量特性模型是两层结构,第一层是按大类划分质量特性,叫做基本质量特性;第二层是每个大类所包含的子类质量特性;最后在各个类别的质量特性中一一列出对应的或相关的标准。
四、软件测试
1.软件测试的概念
-
软件测试的定义
软件测试就是为了发现错误而执行程序的过程。
-
软件测试的目的
软件测试的目的是为了保证软件产品的最终质量,在软件开发的过程中,对软件产品进行质量控制。
2.软件测试的原则
(1)尽早测试
(2)全面测试
(3)全过程测试
(4)独立的、迭代的测试
(5)Pareto原则
(6)对测试出的错误结果一定要有一个确认的过程
(7)制定严格的测试计划
(8)完全测试是不可能的,测试需要终止
(9)注意回归测试的关联性
(10)妥善保存一切测试过程文档
3.软件测试过程模型
软件测试过程模型是对测试过程的一种抽象,用于定义软件测试的流程和方法。
-
V模型
V模型是最具有代表意义的测试模型。V模型反映出了测试活动与分析设计活动的关系。
-
W模型
W模型由2个V型模型组成,分别代表测试过程与开发过程,明确表示出了测试与开发的并行关系。
-
X模型
-
H模型
4.软件测试的分类
-
按测试方式分类
(1)静态测试。不需要执行所测试的程序,查询代码是否符合规范,对程序的数据流和控制流进行分析。
(2)动态测试。选择实际测试用例运行所测试程序,模拟用户输入。 -
按测试方法分类
(1)白盒测试。已知软件的实现流程,按照该流程测试,白盒测试又叫结构测试、白箱测试、玻璃盒测试、基于代码的测试或基于设计的测试。耗费大量的财力、物力,对所有代码进行白盒测试的可能性比较小,且对测试人员的要求比较高,所以一般只进行重点部分的白盒测试。
(2)黑盒测试。通过对照软件的规格说明书,基于系统应该完成的功能进行测试,测试人员必了解该产品的设计思路,黑盒测试又叫行为测试、功能测试或基于需求的测试。
(3)灰盒测试。灰盒(Gray Box)是一种程序或系统上的工作过程被局部认知的装置。灰盒测试,也称作灰盒分析,灰盒测试是介于白盒测试和黑盒测试之间的一种测试方法,或者说是两者的结合,是基于对程序内部细节有限认知上的软件调试方法。测试者可能知道系统组件之间是如何互相作用的,但缺乏对内部程序功能和运作的详细了解。它关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像白盒测试那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态。灰盒测试可以避免过度测试,精简冗余用例。 -
按测试过程分类
(1)单元测试。单元测试在早期实施,侧重于核实软件的最小可测试元素,对单项功能或一段子程序进行测试,包括对每一行代码进行的基本测试。单元测试通常应用于实施模型中的构件,核实是否已覆盖控制流和数据流,以及构件是否可以按照预期工作,测试的内容包括界面测试、局部数据结构测试、边界条件测试、覆盖条件测试、出错处理等。
(2)集成测试。集成测试是将模块按照设计要求组装起来进行测试,主要目标是发现与接口有关的问题,主要测试模块之间的数据传输是否正确、模块集成后的功能是否实现、模块接口功能与设计需求是否一致。集成测试紧接在单元测试之后,当单元测试通过后,便可开始配置集成测试环境。
(3)系统测试。系统测试是将被测试的软件,作为整个基于计算机系统的一项元素,与计算机硬件、外部设备、支持软件、数据和人员等其他系统元素结合在一起,在实际运作环境下,对计算机系统进行一系列的测试,全面查找被测试系统的错误,测试系统的整体性、可靠性、安全性等,该类测试是从客户或最终用户的角度来看待系统的。
(4)验收测试。验收测试是为了检验接受测试的系统是否满足需求,测试的重点是测试产品在常规条件下的使用情况,主要由市场、销售、技术支持人员和最终用户一起按规定的需求,逐项进行有效性测试,检验软件的功能和性能及其他特性是否与用户的要求相一致,验收测试一般采用黑盒测试法。验收测试的基本事项包括功能确认(以用户需求规格说明为依据,检测系统对需求规定功能的实现情况)和配置确认(检查系统资源和设备的协调情况,确保开发软件的所有文档资料编写齐全,能够支持软件运行后的维护工作)。配置确认的文档资料包括设计文档、源程序、测试文档和用户文档等。上述4个过程相互独立且顺序相接,依次进行。
测试人员最初需要分别完成每个单元的测试任务,以确保每个模块能正常工作,单元测试大量地采用白盒测试方法,尽可能发现模块内部的程序差错。
单元测试结束后,测试人员把已测试过的模块组装起来,进行集成测试,其目的在于检验与软件设计相关的程序结构问题,这时较多地采用黑盒测试方法来设计测试用例。
完成集成测试以后,为检验被测试的软件能否与系统的其他部分(如硬件、数据库及操作人员)协调工作,需要进行系统测试。
最后进行验收测试,是按规定的需求,对开发工作初期制定的确认准则进行检验。验收测试是检验所开发的软件能否满足所有功能和性能需求的最后手段,通常采用黑盒测试方法。 -
按测试目的分类
(1)功能测试。功能测试主要针对产品需求说明书对软件进行测试,验证软件功能是否符合需求,包括对原定功能的检验以及测试软件是否有冗余功能、遗漏功能。
(2)健壮性测试。健壮性测试侧重于对程序容错能力的测试,主要是验证程序在各种异常情况下是否能正确运行,包括数据边界测试、非法数据测试、异常中断测试等。
(3)接口测试。接口测试是对各个模块进行系统联调的测试,包括程序内接口测试和程序外接口测试。在接口测试中,测试人员在单元测试阶段进行一部分工作,大部分工作是在集成测试阶段完成的。
(4)性能测试。性能测试主要测试系统的性能是否满足用户要求,即在特定的运行条件下验证系统的能力状况。性能测试主要是通过自动化的测试工具模拟正常、峰值以及异常负载状况,对系统的各项性能指标进行测试,测试中得到的负荷和响应时间等数据可以被用于验证软件系统是否能够达到用户提出的性能指标。
(5)强度测试。强度测试是一种性能测试,强度测试总是迫使系统在异常的资源配置下运行。强度测试的目的是找出因资源不足或资源争用而导致的错误,例如,如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷,这些缺陷可能由于争用共享资源(如数据库锁或网络带宽)而显现出来。一个系统在366MB内存下可以正常运行,但是降低内存容量后就不可能运行,系统提示内存不足,这个系统对内存的要求就是366MB。
(6)压力测试。压力测试是一种性能测试,主要是在超负荷环境中,检验程序是否能够正常运行。压力测试的目的是检测系统在资源超负荷的情况下的表现,是通过极限测试方法,发现系统在极限或恶劣环境中的自我保护能力。压力测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,压力测试还要评估软件的性能特征,例如响应时间、事务处理速率和其他与时间相关的性能特征。例如,在B/S结构中,用户并发量测试就属于压力测试,测试人员可以使用Webload工具,模拟上百人客户同时访问网站,看系统响应时间,处理速度如何?
(7)用户界面测试。用户界面测试主要对系统的界面进行测试,测试用户界面是否友好、软件是否方便易用、系统设计是否合理、界面位置是否正确等问题。
(8)安全测试。安全测试主要测试系统防止非法侵入的能力,例如测试系统在没有授权的内部或者外部用户对系统进行攻击或者恶意破坏时如何运行,是否能够保证数据的安全。
(9)可靠性测试。可靠性测试是指为了保证和验证软件的可靠性水平是否满足用户的要求而进行的测试,即确定软件是否满足软件规格说明书中规定的可靠性指标。软件可靠性测试的目的是给出可靠性的定量估计值,通过对软件可靠性测试中观测到的失效数据进行分析,可以评估当前软件可靠性的水平,验证软件可靠性是否达到要求。软件可靠性测试是一项高投入的测试工作,通常需要进行大量的测试。
(10)安装/反安装测试。安装测试主要检验软件是否可以正确安装,安装文件的各项设置是否有效,安装后是否影响整个计算机系统;反安装测试是逆过程,测试软件是否被删除干净,删除后软件是否影响整个计算机系统等。
(11)文档测试。文档测试主要检查内部/外部文档的清晰性和准确性,对外部文档而言,测试工作主要针对用户的文档,以需求说明、用户手册、安装手册等为主,检验文档是否和实际应用存在差别,而且还必须考虑文档是否简单明了,相关的技术术语是否解释清楚等问题。
(12)恢复测试。恢复测试主要测试当出现系统崩溃、硬件错误或其他灾难性问题时系统的表现情况,以及系统从故障中恢复的能力。
(13)兼容性测试。兼容性测试主要测试软件产品在不同的平台、不同的工具软件或相同工具软件的不同版本下的兼容性,其目的是测试系统与其他软件、硬件兼容的能力。
(14)负载测试。负载测试是通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征。例如,响应时间、事务处理速率和其他与时间相关的方面。
5.软件测试流程
-
制定测试计划
测试计划一般包括以下几个方面。
(1)软件测试背景。软件测试背景主要包括软件项目介绍、项目涉及人员(如项目负责人等)介绍以及相应联系方式等。
(2)软件测试依据。软件测试依据主要包括软件需求文档、软件规格书、软件设计文档等。
(3)测试范围的界定。测试范围的界定就是确定测试工作需要覆盖的范围。
(4)风险的确定。
(5)测试资源。确定完成任务需要消耗的人力资源、物资资源,主要包括测试设备需求、测试人员需求、测试环境需求以及其他资源需求。
(6)测试策略。测试策略主要包括采取测试的方法、搭建哪些测试环境、采用哪些测试工具和测试管理工具、对测试人员进行培训等。
(7)时间表的制订。在识别出子任务和估计出测试资源之后,可以将任务、资源与时间关联起来形成测试时间进度表。
(8)其他。测试计划还要包括测试计划编写的日期、作者信息等内容。 -
设计测试方案
-
测试准备和测试环境的建立
-
执行测试
执行测试是执行所有的或一些选定的测试用例,并观察其测试结果。执行测试的过程可以分为以下几个阶段。单元测试→集成测试→系统测试→验收测试,其中每个阶段都包括回归测试等。
执行测试的步骤由以下4部分组成。
• 输入,要完成工作所必须的入口标准。
• 执行过程,从输入到输出的过程或工作任务。
• 检查过程,确定输出是否满足标准的处理过程。
• 输出,产生的可交付的结果。 -
测试评估
(1)缺陷评估。缺陷评估可以建立在各种方法上,这些方法种类繁多,涵盖范围广(从简单的缺陷计数到严格的统计建模等)。严格的评估是用测试过程中缺陷达到的比率或发现的比率表示,常用模型假定该比率符合泊松分布,有关缺陷率的实际数据可以适用于这一模型。缺陷评估将评估当前软件的可靠性,并且预测当继续测试或排除缺陷时可靠性如何变化。缺陷评估被描述为软件可靠性增长建模,这是目前比较活跃的一个研究领域。
(2)覆盖评测。覆盖评测是对测试完全程度的评测,它是由测试需求和测试用例的覆盖与已执行代码的覆盖表示的。简而言之,测试覆盖是就需求(基于需求的)或代码的设计/实施标准(基于代码的)而言的完全程度的任意评测。
(3)质量评测。质量评测是对测试软件的可靠性、稳定性以及性能的评测,它建立在对测试结果的评估和对测试过程中确定的缺陷分析的基础上。当评估测试对象的性能行为时,可以使用多种评测,这些评测侧重于获取与行为相关的数据,如响应时间、计时配置文件、执行流、操作可靠性和限制。这些评测主要在“评估测试”活动中进行评估,但是也可以在“执行测试”活动中使用性能评测来评估测试进度和状态。主要的性能评测包括动态监测、响应时间/吞吐量、百分位报告、比较报告以及追踪和配置文件报告。 -
测试总结
6.软件测试发展历程和发展趋势
五、软件测试人员的基本素质
-
技能要求
(1)业务知识:指测试人员所测试软件涉及的的行业领域知识。
(2)计算机专业知识
计算机专业技能主要包含:
● 软件编程知识
● 网络、操作系统、数据库、中间件等知识
(3)测试专业知识
测试专业知识很多,测试专业知识涉及的范围很广:既包括黑盒测试、白盒测试、测试用例设计等基础测试技术,也包括单元测试、功能测试、集成测试、系统测试、性能测试等测试方法,还包括基础的测试流程管理、缺陷管理、自动化测试技术等知识。
(4)用户知识
测试应该始终站在用户、使用者的角度考虑问题,而不应该站在开发人员、实现者的角度考虑问题。 -
素质要求
(1)具有较强的责任心、自信心及工作要专心、细心、耐心。
(2)具有很强的沟通和交流能力。
(3)团队合作精神。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了软件测试的基本概念,希望能够对正在阅读的你有所帮助。如果你也对软件测试感兴趣的话,就跟着我一起学下去吧。
如果您觉得我写的还不错,请多给我点赞鼓励一下,您的支持也是我不断前进的最大动力。同时也欢迎您将本篇文章分享给您的朋友,一起学习。最后,也欢迎大家在私信和评论里与我探讨学习过程中遇到的问题,大家共同进步。