软件测试概述



软件测试是对软件进行评估,以验证其是否满足从用户和系统规格中收集的需求。测试可以在软件开发生命周期的阶段级别进行,也可以在程序代码的模块级别进行。软件测试包括验证和确认。

软件确认

确认是检查软件是否满足用户需求的过程。它在SDLC结束时进行。如果软件符合其开发目的的要求,则表示它已通过确认。

  • 确认确保正在开发的产品符合用户需求。
  • 确认回答了这样一个问题:“我们正在开发的产品是否满足用户对该软件的所有需求?”
  • 确认强调用户需求。

软件验证

验证是确认软件是否满足业务需求,以及是否按照正确的规范和方法开发的过程。

  • 验证确保正在开发的产品符合设计规范。
  • 验证回答了这样一个问题:“我们是否严格按照所有设计规范开发此产品?”
  • 验证侧重于设计和系统规范。

测试目标是:

  • 错误 - 这些是开发人员实际犯下的编码错误。此外,软件输出与预期输出之间的差异也被视为错误。

  • 缺陷 - 当存在错误时,就会发生缺陷。缺陷,也称为bug,是导致系统故障的错误的结果。

  • 故障 - 故障是指系统无法执行所需任务的能力。当系统中存在缺陷时,就会发生故障。

手动测试与自动化测试

测试既可以手动进行,也可以使用自动化测试工具进行。

  • 手动测试 - 此测试是在不借助自动化测试工具的情况下进行的。软件测试人员为代码的不同部分和级别准备测试用例,执行测试并将结果报告给经理。

    手动测试既费时又费力。测试人员需要确认是否使用了正确的测试用例。大部分测试都涉及手动测试。

  • 自动化测试 - 此测试是借助自动化测试工具进行的测试过程。使用自动化测试工具可以克服手动测试的局限性。

一项测试需要检查是否可以在Internet Explorer中打开网页。这可以通过手动测试轻松完成。但是,要检查Web服务器能否承受100万用户的负载,手动测试是无法实现的。

有一些软件和硬件工具可以帮助测试人员进行负载测试、压力测试和回归测试。

测试方法

测试可以基于两种方法进行:

  • 功能测试
  • 实现测试

在不考虑实际实现的情况下测试功能时,称为黑盒测试。另一种方法称为白盒测试,它不仅测试功能,还分析其实现方式。

穷举测试是理想的完美测试方法。测试输入和输出值范围内的每一个可能的值。如果值的范围很大,在现实场景中不可能测试每一个值。

黑盒测试

它用于测试程序的功能。它也称为“行为”测试。在这种情况下,测试人员有一组输入值和相应的预期结果。如果提供输入后,输出与预期结果匹配,则程序测试“通过”,否则为“失败”。

Black-box Testing

在这种测试方法中,测试人员不知道代码的设计和结构,测试工程师和最终用户对软件进行此测试。

黑盒测试技术

  • 等价类划分 - 输入被划分为相似的类。如果一个类的元素通过了测试,则假设该类的所有元素都通过了测试。

  • 边界值分析 - 输入被划分为上限值和下限值。如果这些值通过了测试,则假设介于两者之间的所有值也可能通过测试。

  • 因果图法 - 在前两种方法中,一次只测试一个输入值。因果图是一种测试技术,它以系统的方式测试输入值的组合。

  • 成对测试 - 软件的行为取决于多个参数。在成对测试中,对多个参数的不同值进行成对测试。

  • 基于状态的测试 - 系统在提供输入时会改变状态。这些系统根据其状态和输入进行测试。

白盒测试

它用于测试程序及其实现,以提高代码效率或结构。它也称为“结构”测试。

White-box testing

在这种测试方法中,测试人员知道代码的设计和结构。代码的程序员对代码进行此测试。

以下是一些白盒测试技术

  • 控制流测试 - 控制流测试的目的是设置覆盖所有语句和分支条件的测试用例。分支条件在为真和为假的情况下都进行测试,以便可以覆盖所有语句。

  • 数据流测试 - 此测试技术强调覆盖程序中包含的所有数据变量。它测试变量的声明和定义位置以及它们的使用或更改位置。

测试级别

测试本身可以在SDLC的不同级别定义。测试过程与软件开发并行运行。在进入下一阶段之前,会对一个阶段进行测试、验证和确认。

单独进行测试是为了确保软件中没有隐藏的错误或问题。软件在各个级别进行测试:

单元测试

在编码过程中,程序员会对程序的单元进行一些测试,以了解其是否没有错误。测试在白盒测试方法下进行。单元测试帮助开发人员确定程序的各个单元是否按要求工作并且没有错误。

集成测试

即使软件单元单独工作良好,也需要找出集成在一起的单元是否也能在没有错误的情况下工作。例如,参数传递和数据更新等。

系统测试

软件被编译成产品,然后作为一个整体进行测试。这可以使用以下一项或多项测试来完成

  • 功能测试 - 根据需求测试软件的所有功能。

  • 性能测试 - 此测试证明软件的效率。它测试软件执行所需任务的效率和平均时间。性能测试通过负载测试和压力测试来完成,在这些测试中,软件在各种环境条件下承受高用户和数据负载。

  • 安全性和可移植性 - 当软件旨在在各种平台上运行并由多人访问时,会进行这些测试。

验收测试

当软件准备交付给客户时,它必须经过最后的测试阶段,在该阶段测试其用户交互和响应。这很重要,因为即使软件符合所有用户需求,如果用户不喜欢其外观或工作方式,也可能会被拒绝。

  • α测试 - 开发团队本身通过在工作环境中使用系统来执行α测试。他们试图找出用户对软件中某些操作的反应以及系统应该如何响应输入。

  • β测试 - 在软件内部测试之后,将其交给用户,仅出于测试目的在其生产环境中使用。这还不是交付的产品。开发人员期望在此阶段用户会发现一些细微的问题,这些问题之前被忽略了。

回归测试

每当软件产品使用新代码、功能或功能进行更新时,都会对其进行彻底测试,以检测添加的代码是否有任何负面影响。这称为回归测试。

测试文档

测试文档在不同的阶段准备:

测试前

测试始于测试用例的生成。以下文档需要作为参考:

  • SRS文档 - 功能需求文档

  • 测试策略文档 - 此文档描述在发布产品之前应进行多长时间的测试。

  • 测试策略文档 - 此文档提到测试团队的详细方面,责任矩阵以及测试经理和测试工程师的权利/责任。

  • 可追溯性矩阵文档 - 这是与需求收集过程相关的SDLC文档。随着新需求的出现,它们将添加到此矩阵中。这些矩阵帮助测试人员了解需求的来源。它们可以向前和向后追溯。

测试中

在测试开始和进行过程中,可能需要以下文档

  • 测试用例文档 - 本文档包含需要执行的测试列表。它包括单元测试计划、集成测试计划、系统测试计划和验收测试计划。

  • 测试描述 - 本文档详细描述所有测试用例及执行步骤。

  • 测试用例报告 - 本文档包含测试结果的测试用例报告。

  • 测试日志 - 本文档包含每个测试用例报告的测试日志。

测试后

测试后可能生成以下文档:

  • 测试总结 - 此测试总结是对所有测试报告和日志的综合分析。它总结并得出软件是否准备好发布的结论。如果软件准备好发布,则在版本控制系统下发布。

测试与质量控制、质量保证和审计

我们需要理解软件测试与软件质量保证、软件质量控制和软件审计不同。

  • 软件质量保证 - 这是软件开发过程监控手段,通过它确保所有措施都符合组织的标准。此监控是为了确保遵循了正确的软件开发方法。

  • 软件质量控制 - 这是一个保持软件产品质量的系统。它可能包括软件产品的功能和非功能方面,从而提升组织的良好声誉。此系统确保客户获得满足其需求的优质产品,并且产品被认证为“适合使用”。

  • 软件审计 - 这是对组织用于开发软件的程序的审查。一个独立于开发团队的审计团队检查软件过程、程序、需求和SDLC的其他方面。软件审计的目的是检查软件及其开发过程是否都符合标准、规则和法规。

广告