[软件测试] 第一部分 软件测试基础
目录
软件测试期末复习系列
课件知识点整合:
PTA习题汇总:
概念与定义
-
软件危机:软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
-
软件测试(IEEE1983):软件测试是使用人工和自动手段来运行或测试某个系统的过程,目的在于检验被测软件系统是否满足规定的需要,或是弄清楚预期结果与实际结果之间的差别。
-
软件缺陷(Ron Patton在《软件测试》一书中提出):只有至少满足下列五个规则之一,才称发生了一个软件缺陷。
-
软件未实现产品说明书要求的功能;
-
软件出现了产品说明书指明不应该出现的错误;
-
软件实现了产品说明书未提到的功能;
-
软件未实现产品说明书虽未明确提及但应该实现的目标;
-
软件难以理解、不易使用、运行缓慢或者——从测试员的角度看——最终用户会认为不好。
-
-
软件缺陷(IEEE729-1983标准的定义):
- 从产品内部看,缺陷是软件产品开发或维护过程中产生的错误、毛病等各种问题;
- 从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。
-
测试用例(IEEE1990):测试用例是一组测试输入、执行条件和预期结果,目的是要满足一个特定的目标,比如执行一条特定的程序路径或检验是否符合一个特定的需求的用例。
-
测试用例(百度百科的定义):测试用例(Test Case)是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档。
-
软件质量(ISO8402):反映实体满足明确或隐含需要能力的特征总和。
-
软件质量(GB/T 11457-2006《软件工程术语》):软件质量是
- 软件产品中能满足给定需要的性质和特性的总体。
- 软件具有所期望的各种属性的组合程度。
- 顾客和用户觉得软件满足其综合期望的程度。
- 确定软件在使用中将满足顾客预期要求的程度。
-
静态测试:不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。
-
动态测试:通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。
-
手工测试:指测试人员按照事先为覆盖被测软件需求而编写的测试用例,根据测试大纲中所描述的测试步骤和方法,手工地一个一个地输入执行,包括与被测软件进行交互(如输入测试数据、记录测试结果等),然后观察测试结果,看被测程序是否存在问题,或在执行过程中是否会有异常发生,属于比较原始但是必须执行的一个步骤。
-
自动化测试:自动测试是将大量的重复性的测试工作交给计算机去完成,通常是使用自动化测试工具来模拟手动测试步骤,执行用某种程序设计语言编写的测试程序的过程。
-
黑盒测试:忽略系统或部件的内部机制只集中于响应所选择的输入和执行条件产生的输出的一种测试。通过测试来检测每个功能是否正常使用,通过软件的外部表现来发现缺陷和错误。
-
白盒测试:又称结构测试或逻辑驱动测试,指通过对程序内部结构的分析、检测来寻找问题。
-
灰盒测试:介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。
-
单元测试(白盒):单元测试又称模块测试,是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。
单元定义:(举例)C中指一个函数,Java中指一个类,在图形化的软件中,单元一般指1个窗口,1个菜单。
-
集成测试(灰盒):又称组装测试或联合测试。集成测试是检验在单元测试的基础上,将所有模块(软件单元)按照设计(概要设计)要求(如根据结构图)组装成为子系统或系统,进行集成测试。集成测试就是测试这些软件单元是否能够进行正确交互的测试。
-
系统测试(黑盒):将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合走来,在实际运行环境下对计算机系统进行的一系列严格有效地测试,以发现软件潜在的问题保证系统的正常运行。
-
功能测试:主要针对产品需求规格说明书对软件进行测试,逐项验收软件功能是否符合要求。
-
接口测试:指对各个模块进行系统联调的测试,包含程序内接口和程序外接口测试。
-
性能测试:主要测试系统的性能是否满足用户要求,即在特定的运动条件下验证系统的能力状况。主要是通过自动化测试工具模拟正常、峰值及异常负载状况,对系统的各项性能指标进行测试,测试中得到的负荷和响应时间等数据可以被用于验证软件系统是否能够达到用户提出的性能指标。
-
压力测试:是一种性能测试,指在超负荷环境中,检验程序是否能够正常运行,检验系统的稳定性。
-
负载测试:是一种性能测试,是通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。
简答
软件开发模型(瀑布模型)
- 计划
- 需求分析
- 设计
- 程序编码
- 测试
- 运行维护
软件测试模型
➕ 于2024-01-03补充
V模型
概念:V模型是软件开发瀑布模型的变种,描述了基本的开发过程和测试行为,明确了测试阶段与开发阶段的对应关系。V模型左侧是开发过程的各个阶段,右侧是测试过程的各个阶段,同一水平上的开发阶段和测试阶段存在对应关系,每个测试阶段需要测试对应开发阶段的成果物。
意义:
- 单元测试和集成测试验证系统设计。
- 系统测试验证系统需求。
- 验收测试也称为交付测试验收用户需求。
局限性:未在需求阶段进入测试,不能体现“尽早开展测试”的原则。
W模型
概念:W模型是对V模型的改进,明确地描述出了测试与开发的并行关系。强调测试与开发同步进行。W模型由两个V模型组成,分别代表测试与开发过程,同一水平的开发阶段与测试阶段一一对应。
意义:
- 注重在软件开发的各个阶段应用静态测试技术。
- 强调尽早展开测试。
局限性:
- 对于很多项目,执行过程中并不产生文档,W模型无法适用。
- 需求、设计、编码等活动被视为串行,测试和开发活动保持着一种线性的前后关系。无法有效支持迭代开发模型及变更调整。
- 该模型使用起来的技术复杂度高,对于需求和设计的测试要求很高,实践困难。
H模型
概念:H模型将测试活动完全分割出来,使得测试准备活动和测试执行活动清晰地体现出来。在H模型中,软件测试模型是一个独立的流程,贯穿于整个产品周期,与其他流程并发地进行。当某个测试时间点就绪时,软件测试即从测试准备阶段进入测试执行阶段。图仅仅显示了整个测试生命同期中某个层次的“微循环”。图中其他流程可以是任意开发流程,如设计流程和编码流程,也可以是其他非开发流程。
软件测试的对象
软件 = 程序 + 数据 + 文档 + 服务
因此,软件测试的对象是程序、数据、文档和服务。
软件测试的目的
软件测试是通过设计和运行测试用例来校验被测系统的实际输出与预期输出是否一致,最终目标是保证系统应符合需求。
软件测试的基本流程
- 需求分析
- 制定测试计划
- 设计测试方案
- 执行测试
- 测试评估
- 测试总结
- 测试维护
测试用例的主要组成
- 输入:测试数据和测试步骤(操作步骤);
- 输出:系统预期执行结果;
- 测试环境:系统环境设置,即进行软件测试所必需的工作平台和前提条件。
测试用例的基本属性
- 典型性(代表性):能揭示最有可能存在缺陷的地方,能代表和覆盖合理与不合理、合法或不合法的情况。
- 可测试性(可判定性):一个测试用例的预期输出必须是可以检验的,可以根据相关开发文档得到明确的、可判定的结论。
- 可重现性:对于相同的测试用例,系统的预期执行结果应该完全相同。否则,如果系统预期输出存在不确定性,一旦实际运行该测试用例,也无法进行校验。
- 独立性:测试用例应尽量独立。
测试用例设计原则
根据《GB/T15532一2008计算机软件测试规范》,设计测试用例时,应遵循以下原则:
- 基于测试需求的原则
按照测试类别的不同要求设计测试用例。 - 基于测试方法的原则
比较成熟的测试用例设计方法与丰富的实践经验相融合才能设计出高品质的测试用例。 - 兼顾测试充分性和效率的原则
测试用例集应兼顾测试的充分性和测试的效率,每个测试用例的内容也应完整,具有可操作性。 - 测试执行的可再现性原则
应保证测试用例执行的可再现性。
软件质量的特性(ISO/IEC 9126)
- 功能性
- 可靠性
- 易用性
- 效率
- 可维护性
- 可移植性
软件测试基本原则(10条)
➕ 于2024-01-03补充
-
尽早测试:尽早发现软件缺陷,降低缺陷的修复成本。
-
全面测试:两层含义(1)对产品进行全面的测试,(2)开发人员、测试人员、甚至用户,全面地参与到测试工作中。
-
全过程测试:两层含义(1)测试人员充分关注开发全过程,(2)测试人员对测试全过程进行全程跟踪。
-
独立的、迭代的测试:两层含义(1)将测试过程从开发过程中抽离,作为独立过程,(2)由独立的专业的软件测试机构完成。
-
Patero原则(缺陷聚集):少数系统模块分布了大部分缺陷。
如果一个模块已发现许多错误,则剩余错误可能很多,越需要进行深入和多次测试。
-
对测试出的结果一定要有一个确认的过程。
-
制订严格的测试计划。
-
穷尽测试是不可能的,测试需要终止。(需要精心设计测试优先级)
-
注意回归测试的关联性。(注意修复一个错误而引发更多错误的现象)
-
妥善保存一切测试过程文档。(测试的重现性需要测试文档)
补充:测试应基于客户要求。
总结
软件测试
- 根本目的:确保被测系统符合用户需求
- 基本过程:设计测试用例、执行测试用例
- 测试手段:手工/自动化
- 测试方式:动态运行(动态测试)/静态审阅(静态测试)
- 基本流程:需求分析、计划、设计、执行、评估、总结、维护
软件测试可以验证软件质量,但不能提高软件质量。
提高软件质量的途径是改进软件开发过程的质量。