发现缺陷: 首要目标是找出软件中存在的错误、故障或漏洞。
验证: 检查软件是否按照规格说明书、设计文档和用户需求正确构建。(“我们是否构建了正确的东西?” -> 检查功能是否符合要求)
确认: 评估软件是否满足用户的实际需求和期望。(“我们是否构建了正确的东西?” -> 检查最终产品是否解决了用户的问题)
评估质量: 提供关于软件整体质量的客观信息,包括功能性、可靠性、可用性、性能、安全性等方面。
降低风险: 通过提前发现问题,降低软件上线后出现故障导致业务损失、声誉损害或安全风险的可能性。
建立信心: 为用户、开发团队和管理层提供软件可以正常工作的信心。
单元测试: 针对软件的最小可测试单元(如函数、方法、类)进行测试,通常由开发人员完成。
集成测试: 将多个单元或模块组合在一起进行测试,检查它们之间的接口和交互是否正确。
系统测试: 在完整的、集成的系统上进行测试,验证整个系统是否满足规定的需求。关注端到端业务流程。
验收测试:
用户验收测试: 由最终用户或客户执行,以确定软件是否满足其业务需求并可被接受。
Alpha测试: 在开发环境内部由潜在用户或独立测试团队进行。
Beta测试: 在真实用户环境中由外部用户群体进行。
功能测试: 验证软件的功能是否按照需求规格说明书工作。关注“做什么”。
子类型: 冒烟测试(快速检查主要功能是否正常)、回归测试(确保修改没有引入新错误或破坏原有功能)。
非功能测试: 评估软件在非功能属性方面的表现。关注“做得怎么样”。
性能测试: 检查系统在各种负载下的响应时间、吞吐量、资源利用率等(包括负载测试、压力测试、稳定性测试)。
安全性测试: 识别系统中的漏洞和弱点,防止未授权访问、数据泄露等。
可用性测试: 评估软件是否易于学习和使用,用户体验是否良好。
兼容性测试: 检查软件在不同硬件、操作系统、浏览器、网络环境或与其他软件一起使用时是否正常工作。
可靠性测试: 验证软件在指定条件下无故障运行的能力和持续时间。
本地化/国际化测试: 验证软件适应不同区域语言和文化设置的能力。
基于代码的测试:
白盒测试: 测试者了解程序的内部结构、设计和实现。测试用例基于代码逻辑(如路径覆盖、条件覆盖)。通常由开发人员执行。
黑盒测试: 测试者不了解程序内部结构,只关注输入和输出。测试用例基于需求和功能规格。这是最常见的测试类型。
灰盒测试: 介于白盒和黑盒之间,测试者了解部分内部结构(如数据库设计、架构),但测试仍主要关注外部行为。
需求分析: 理解需求,确定可测试性。
测试计划: 制定测试策略、范围、目标、资源、进度、风险等。
测试设计: 基于需求和风险分析,设计详细的测试用例和测试数据。
测试环境搭建: 准备必要的硬件、软件、网络和数据配置。
测试执行: 按照测试用例执行测试,记录结果,报告缺陷。
缺陷跟踪与管理: 记录、报告、跟踪缺陷直至修复和验证。
测试报告与评估: 总结测试活动、结果、覆盖度、发现的缺陷、剩余风险,评估软件质量状态。
测试结束活动: 归档测试资产,总结经验教训。
目的: 利用工具和脚本自动执行重复性测试任务(尤其是回归测试),提高效率、覆盖率和执行速度,减少人为错误。
适用场景: 重复执行、数据驱动测试、性能测试、冒烟测试、稳定功能模块的回归测试。
工具: Selenium, Cypress, Appium, JMeter, Katalon Studio, TestComplete, Postman (API测试) 等。
关键点: 自动化测试需要投入开发和维护成本,并非所有测试都适合自动化。需要明智地选择自动化范围和工具。
持续测试: 测试活动贯穿整个开发生命周期,而不是集中在最后阶段。
测试左移: 在开发早期(需求、设计、编码阶段)就介入测试活动,如参与需求评审、编写单元测试、进行代码审查等,以更早地发现和修复缺陷。
测试右移: 在软件发布到生产环境后继续进行监控和测试(如A/B测试、金丝雀发布、生产环境监控),以获得真实的用户反馈和性能数据。
自动化是核心: 自动化测试是实现持续集成和持续交付的关键环节,确保快速、频繁的发布质量。
穷尽测试的不可能性: 不可能测试软件的所有输入组合和执行路径。
不断变化的需求: 尤其在敏捷开发中,需求变更频繁,测试用例和计划需要随之调整。
时间和资源限制: 测试往往面临时间压力和资源不足的问题。
环境复杂性: 搭建和管理多样化的测试环境(尤其是云、移动端、IoT)可能很复杂。
沟通与协作: 测试团队与开发、产品、业务团队之间的有效沟通至关重要。
度量测试有效性: 如何准确衡量测试覆盖度和质量提升效果存在挑战。
人工智能与机器学习: 用于智能测试用例生成、缺陷预测、测试结果分析、自动化测试脚本维护等。
测试中台/服务化: 提供统一的测试工具链、环境和数据服务。
API测试和微服务测试: 随着微服务架构流行,API和契约测试变得尤为重要。
无代码/低代码测试自动化: 降低自动化测试的门槛。
大数据测试、IoT测试、区块链测试等 针对新兴技术领域的专门测试方法。
质量工程: 将质量保证活动更广泛地融入整个工程实践和流程中。
软件测试是软件开发生命周期中不可或缺的一部分,是保障软件产品质量、降低风险、满足用户期望的关键活动。它涉及多种技术、方法和流程,需要专业的技能和持续的学习以适应技术的发展(如敏捷、DevOps、AI)。有效的测试不仅仅是发现Bug,更是为产品成功和用户满意度提供信心保障。
甘公网安备 62010202003729号