什么是软件测试?

查找软件错误并验证应用程序或系统是否适合使用

程序员拿着显示代码的智能手机,坐在显示代码的电脑前

软件测试如何工作?

软件测试是评估和验证软件产品或应用程序是否按预期运行的过程。 测试的好处包括防止出现错误、降低开发成本和提高性能。


软件测试的类型

目前存在多种不同类型的软件测试,而每种软件测试都具有特定的目标和策略:

  • 验收测试:验证整个系统是否按预期工作。
  • 集成测试:确保软件组件或功能可以一起运行。
  • 单元测试:验证每个软件单元是否按预期执行。 单元是应用程序中最小的可测试组件。
  • 功能测试:根据功能需求,通过模拟业务场景来检查功能。 黑盒测试是验证功能的常用方法。
  • 性能测试:测试软件在不同工作负载下的表现。 例如,负载测试用于评估真实负载条件下的性能。
  • 回归测试:检查新功能是否破坏或降低功能的效果。 如果没有时间进行完整的回归测试,那么可以使用健全测试在表面级别验证菜单、功能和命令。
  • 压力测试:测试系统在失败之前可以承受多大的压力。 这是一种非功能性测试。
  • 可用性测试:验证客户使用系统或 Web 应用程序完成任务的程度。

在所有情况下,验证基本要求都是一项关键评估。 同样重要的是,探索性测试可帮助测试人员或测试团队发现可能导致软件错误的、难以预测的场景和情况。

即使是一个简单的应用程序,也可能需要接受大量不同的测试。 测试管理计划有助于优先考虑在可用时间和资源固定的情况下哪些类型的测试可以提供最大价值。 通过运行最少的测试来找出最多的缺陷,以优化测试效率。


软件测试的历史

软件测试伴随着软件开发而出现,而软件开发是从第二次世界大战之后开始的。 计算机科学家汤姆·基尔伯恩 (Tom Kilburn) 编写了第一款软件,该软件于 1948 年 6 月 21 日在英国曼彻斯特大学首次亮相。 它使用机器代码指令来执行数学计算。

调试是当时的主要测试方法,并在接下来的二十年中一直如此。 到了二十世纪八十年代,开发团队不再只是找出并修复软件错误,而是在现实环境中测试应用程序。 它为更广泛的测试奠定了基础,其中包括作为软件开发生命周期一部分的质量保证过程。

“Alexander Yaroshko 在 uTest 开发者网站上的帖子中说道:"在二十世纪九十年代,出现了从测试到更全面的质量保证流程的转变,质量保证流程涵盖了整个软件开发周期,并影响了测试用例的规划、设计、创建和执行过程以及对现有测试用例和测试环境的支持。"

“测试已经达到了一个全新的水平,这使得测试方法得到了进一步发展,出现了用于管理测试过程的强大工具以及测试自动化工具。” 1

持续测试

从传统意义上讲,软件测试与开发的其余部分是分开的。 它通常在软件开发生命周期中的产品构建或执行阶段之后进行。 测试人员可能只有一个小窗口来测试代码 - 有时就在应用程序面世之前进行测试。 如果发现缺陷,可能几乎没有时间重新编码或重新测试。 按时发布软件但软件带有错误和修订程序的情况并不少见。 还有一种情况是,测试团队可能会修复错误但错过了软件的发布日期。

在开发周期的早期执行测试活动有助于将测试工作作为关注的重点,而不是作为开发的事后补救措施。 越早执行软件测试,解决缺陷的成本就越低。

许多开发团队目前都在使用一种称为"持续测试"的方法。 它是 DevOps 方法的一部分 - 开发和运营团队将在整个产品生命周期中进行协作。 目的是在平衡成本、质量和风险的同时加快软件交付的速度。 使用这种测试方法,团队无需等待软件构建完成就可以开始进行测试。 他们可以在开发周期的早期就运行测试,在缺陷更容易修复的情况下尽早地发现缺陷。


软件测试为何很重要

在开发软件时,很少有人会质疑质量控制的必要性。 延迟交付或软件缺陷会损害品牌声誉,从而导致客户失去信心进而流失。 在极端情况下,错误或缺陷可能会降低互连系统的性能或导致严重故障。

例如,日产汽车公司因为安全气囊传感器检测器的软件缺陷而不得不召回超过 100 万辆汽车。 又例如,导致 12 亿美元的军用卫星发射失败的软件错误。 2  这些数字所代表的后果不言自明。 2016 年,美国在资产中出现的软件故障导致了 1.1 万亿美元的经济损失。 更为严重的是,这些软件故障还影响了 44 亿客户。  3

虽然测试本身会产生一定的开销,但如果公司采用良好的测试方法和质量保证流程,他们每年可以在开发和支持方面节省数百万美元。 早期的软件测试会在产品面世之前发现问题。 开发团队越早收到测试反馈,他们就能越早解决以下问题:

  • 架构缺陷
  • 糟糕的设计决策
  • 无效或不正确的功能
  • 安全漏洞
  • 可扩展性问题

如果开发留出了足够的测试时间,那么可以提高软件的可靠性,并交付几乎没有错误的高质量应用程序。 满足甚至超出客户期望的系统可能会带来更多的销售额和更大的市场份额。


软件测试最佳实践

软件测试遵循一个通用过程。 此过程包括定义测试环境、开发测试用例、编写脚本、分析测试结果和提交缺陷报告。

测试可能非常耗时。 对于小型构建,手动测试或临时测试可能就足够了。 但是,对于大型系统,通常会使用一些工具来自动执行任务。 自动化测试可帮助团队实施不同的场景,测试差异化因素(例如将组件迁移到云环境中),并快速获得关于哪些组件有效和哪些组件无效的反馈。

优秀的测试方法应包括应用程序编程接口 (API)、用户界面和系统级别。 自动化测试越多,运行得越早,效果就越好。 有些团队会构建内部测试自动化工具。 但是,供应商解决方案提供了可简化关键测试管理任务的功能,例如:

  • 持续测试:项目团队将在每个构建可用时对其进行测试。 这种类型的软件测试依赖于与部署过程相集成的测试自动化技术。 使用这种软件测试方法,可以在开发周期的早期在真实的测试环境中验证软件,从而改进设计并降低风险。
  • 配置管理:组织集中维护测试资产并跟踪要测试的软件构建。 团队可以访问资产,例如,代码、需求、设计文档、模型、测试脚本和测试结果。 出色的系统应包括用户认证和审计跟踪,可以帮助团队以最少的管理工作满足合规性要求。
  • 服务虚拟化:测试环境可能不可用,尤其是在代码开发的早期。 服务虚拟化可以模拟缺失或尚未完成的服务和系统,让团队能够减少依赖关系并尽早地进行测试。 他们可以复用、部署和更改配置来测试不同的场景,而无需修改原始环境。
  • 缺陷或错误跟踪 监控缺陷对于测试和开发团队衡量和提高质量至关重要。 使用自动化工具,团队可以跟踪缺陷、衡量其范围和影响,并发现相关问题。
  • 指标和报告:利用报告和分析功能,团队成员可以共享状态、目标和测试结果。 高级工具可以集成项目指标并在仪表板中显示结果。 团队可以快速查看项目的整体运行状况,并可以监控测试、开发和其他项目元素之间的关系。

相关解决方案

IBM Rational Test Workbench

IBM Rational Test Workbench 提供软件测试工具来支持 DevOps 方法:API 测试、功能 UI 测试、性能测试和服务虚拟化。


IBM Rational Test Virtualization Server

IBM Rational Test Virtualization Server 软件支持在开发生命周期的早期频繁地进行测试。


IBM Rational Performance Tester

作为 DevOps 方法的一部分,IBM Rational Performance Tester 可帮助软件测试团队更早、更频繁地进行测试。


IBM Engineering Workflow Management

使用单一工具即可完成团队协作、代码管理、站会安排、开发段规划和工作跟踪等功能。 可在内部部署,也可在云端部署。


IBM Rational ClearCase

IBM Rational ClearCase 提供了对软件资产(包括代码、需求、设计文档、模型、测试计划和测试结果)的受控访问。


IBM Engineering Test Management

IBM Engineering Test Management 是一个协作性的质量管理解决方案,可以提供端到端的测试规划和测试资产管理,广泛覆盖从需求到缺陷的各个方面。