[软件测试] 第一部分 软件测试基础

发布时间 2023-12-30 21:05:22作者: feixianxing

第一部分 软件测试基础

概念与定义

  1. 软件危机:软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。

  2. 软件测试(IEEE1983):软件测试是使用人工和自动手段来运行或测试某个系统的过程,目的在于检验被测软件系统是否满足规定的需要,或是弄清楚预期结果与实际结果之间的差别。

  3. 软件缺陷(Ron Patton在《软件测试》一书中提出):只有至少满足下列五个规则之一,才称发生了一个软件缺陷。

    1. 软件未实现产品说明书要求的功能;

    2. 软件出现了产品说明书指明不应该出现的错误;

    3. 软件实现了产品说明书未提到的功能;

    4. 软件未实现产品说明书虽未明确提及但应该实现的目标;

    5. 软件难以理解、不易使用、运行缓慢或者——从测试员的角度看——最终用户会认为不好。

  4. 软件缺陷(IEEE729-1983标准的定义)

    • 从产品内部看,缺陷是软件产品开发或维护过程中产生的错误、毛病等各种问题;
    • 从产品外部看,缺陷是系统所需要实现的某种功能的失效或违背。
  5. 测试用例(IEEE1990):测试用例是一组测试输入、执行条件和预期结果,目的是要满足一个特定的目标,比如执行一条特定的程序路径或检验是否符合一个特定的需求的用例。

  6. 测试用例(百度百科的定义):测试用例(Test Case)是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档。

  7. 软件质量(ISO8402):反映实体满足明确或隐含需要能力的特征总和。

  8. 软件质量(GB/T 11457-2006《软件工程术语》):软件质量是

    • 软件产品中能满足给定需要的性质和特性的总体。
    • 软件具有所期望的各种属性的组合程度。
    • 顾客和用户觉得软件满足其综合期望的程度。
    • 确定软件在使用中将满足顾客预期要求的程度。
  9. 静态测试:不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。

  10. 动态测试:通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能指标。

  11. 手工测试:指测试人员按照事先为覆盖被测软件需求而编写的测试用例,根据测试大纲中所描述的测试步骤和方法,手工地一个一个地输入执行,包括与被测软件进行交互(如输入测试数据、记录测试结果等),然后观察测试结果,看被测程序是否存在问题,或在执行过程中是否会有异常发生,属于比较原始但是必须执行的一个步骤。

  12. 自动化测试:自动测试是将大量的重复性的测试工作交给计算机去完成,通常是使用自动化测试工具来模拟手动测试步骤,执行用某种程序设计语言编写的测试程序的过程。

  13. 黑盒测试:忽略系统或部件的内部机制只集中于响应所选择的输入和执行条件产生的输出的一种测试。通过测试来检测每个功能是否正常使用,通过软件的外部表现来发现缺陷和错误。

  14. 白盒测试:又称结构测试或逻辑驱动测试,指通过对程序内部结构的分析、检测来寻找问题。

  15. 灰盒测试:介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。

  16. 单元测试(白盒):单元测试又称模块测试,是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。

    单元定义:(举例)C中指一个函数,Java中指一个类,在图形化的软件中,单元一般指1个窗口,1个菜单。

  17. 集成测试(灰盒):又称组装测试或联合测试。集成测试是检验在单元测试的基础上,将所有模块(软件单元)按照设计(概要设计)要求(如根据结构图)组装成为子系统或系统,进行集成测试。集成测试就是测试这些软件单元是否能够进行正确交互的测试。

  18. 系统测试(黑盒):将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合走来,在实际运行环境下对计算机系统进行的一系列严格有效地测试,以发现软件潜在的问题保证系统的正常运行。

  19. 功能测试:主要针对产品需求规格说明书对软件进行测试,逐项验收软件功能是否符合要求。

  20. 接口测试:指对各个模块进行系统联调的测试,包含程序内接口和程序外接口测试。

  21. 性能测试:主要测试系统的性能是否满足用户要求,即在特定的运动条件下验证系统的能力状况。主要是通过自动化测试工具模拟正常、峰值及异常负载状况,对系统的各项性能指标进行测试,测试中得到的负荷和响应时间等数据可以被用于验证软件系统是否能够达到用户提出的性能指标。

  22. 压力测试:是一种性能测试,指在超负荷环境中,检验程序是否能够正常运行,检验系统的稳定性。

  23. 负载测试:是一种性能测试,是通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。

简答

软件生命周期(瀑布模型)

  1. 计划
  2. 需求分析
  3. 设计
  4. 程序编码
  5. 测试
  6. 运行维护

软件测试的对象

软件 = 程序 + 数据 + 文档 + 服务

因此,软件测试的对象是程序、数据、文档和服务。

软件测试的目的

软件测试是通过设计和运行测试用例来校验被测系统的实际输出与预期输出是否一致,最终目标是保证系统应符合需求。

软件测试的基本流程

  1. 需求分析
  2. 制定测试计划
  3. 设计测试方案
  4. 执行测试
  5. 测试评估
  6. 测试总结
  7. 测试维护

测试用例的主要组成

  • 输入:测试数据和测试步骤(操作步骤);
  • 输出:系统预期执行结果;
  • 测试环境:系统环境设置,即进行软件测试所必需的工作平台和前提条件。

测试用例的基本属性

  • 典型性(代表性):能揭示最有可能存在缺陷的地方,能代表和覆盖合理与不合理、合法或不合法的情况。
  • 可测试性(可判定性):一个测试用例的预期输出必须是可以检验的,可以根据相关开发文档得到明确的、可判定的结论。
  • 可重现性:对于相同的测试用例,系统的预期执行结果应该完全相同。否则,如果系统预期输出存在不确定性,一旦实际运行该测试用例,也无法进行校验。
  • 独立性:测试用例应尽量独立。

测试用例设计原则

根据《GB/T15532一2008计算机软件测试规范》,设计测试用例时,应遵循以下原则:

  1. 基于测试需求的原则
    按照测试类别的不同要求设计测试用例。
  2. 基于测试方法的原则
    比较成熟的测试用例设计方法与丰富的实践经验相融合才能设计出高品质的测试用例。
  3. 兼顾测试充分性和效率的原则
    测试用例集应兼顾测试的充分性和测试的效率,每个测试用例的内容也应完整,具有可操作性。
  4. 测试执行的可再现性原则
    应保证测试用例执行的可再现性。

软件质量的特性(ISO/IEC 9126)

  1. 功能性
  2. 可靠性
  3. 易用性
  4. 效率
  5. 可维护性
  6. 可移植性

总结

软件测试

  • 根本目的:确保被测系统符合用户需求
  • 基本过程:设计测试用例、执行测试用例
  • 测试手段:手工/自动化
  • 测试方式:动态运行(动态测试)/静态审阅(静态测试)
  • 基本流程:需求分析、计划、设计、执行、评估、总结、维护

软件测试可以验证软件质量,但不能提高软件质量。

提高软件质量的途径是改进软件开发过程的质量