本页总览
核心概念
软件测试 :在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
开发与测试模型
软件开发生命周期 (Software Development Life Cycle,简称 SDLC):从需求分析到维护的软件开发全过程结构化流程,包括需求收集、系统设计、实现、测试、部署以及维护。这个周期确保了软件的质量和精确性,同时也帮助项目团队有效地管理时间和资源。常见的 SDLC 模型有瀑布模型、螺旋模型、V 模型、敏捷模型等。
瀑布模型 :一种线性开发模型,按顺序依次完成需求、设计、开发、测试和部署,每个阶段完成后进入下一个阶段。
迭代模型 :一种逐步完善软件的开发方法,将复杂的软件开发过程分解为多个小的开发周期(迭代)。每个迭代都包含需求分析、设计、开发、测试和部署等完整阶段,逐步交付功能模块,直到最终完成整个软件。
螺旋模型 :结合瀑布模型和迭代模型,强调风险评估和迭代开发,适合复杂项目。
V 模型 :一种测试驱动的开发模型,强调开发和测试并行进行,测试活动与开发阶段一一对应。
原型模型 :通过快速开发一个可运行的原型,收集用户反馈后逐步完善,适合需求不确定的项目。
混合模型 :结合多种开发模型(如瀑布+敏捷)的优点,根据项目需求灵活调整开发流程。
敏捷模型 :一种以人为核心、迭代、循序渐进的开发方法,强调协作与快速交付。其核心原则包括快速响应变化、持续交付有价值的软件、紧密合作和及时反馈。常见的敏捷方法论包括 Scrum、Kanban 和极限编程(XP)。
Scrum :一种敏捷框架,通过短周期的迭代(Sprint)来交付软件功能。每个 Sprint 通常持续 2-4 周,包括计划、开发、测试和评审。
Kanban :一种可视化工作流程的敏捷方法,通过限制在制品(WIP)数量,优化团队的工作效率和交付速度。
极限编程 (Extreme programming,缩写为 XP):一种强调工程实践和持续改进的敏捷方法,包括结对编程、持续集成、重构和测试驱动开发(TDD)。
测试方法与技术
人工测试 :测试人员手动执行用例,适用于探索性及用户体验测试。
自动化测试 :利用工具/脚本自动执行测试,可提高测试效率、覆盖率和重复性。
白盒测试 :基于代码结构和逻辑的测试方法,测试人员需要了解代码实现细节。
黑盒测试 :不关心代码实现,仅从用户角 度测试软件功能是否符合需求。
灰盒测试 :介于白盒和黑盒之间,部分了解代码结构,同时关注功能表现。
静态测试 :不运行程序,通过代码审查、文档检查等方式发现缺陷。
动态测试 :通过运行程序,验证其在实际运行中的行为和性能。
探索性测试 :无预设脚本,依赖测试者经验实时设计并执行测试。
基于风险的测试 :优先测试高风险区域,优化资源分配。
关键字驱动测试 :用关键字描述操作,实现脚本与数据的分离。
数据驱动测试 :通过多组数据驱动同一测试逻辑,验证不同场景。
测试类型
功能测试 :验证软件是否满足需求文档中定义的功能。
非功能测试 :评估性能、安全等非功能属性(如负载测试)。
性能测试 :测量系统在特定条件下的响应速度、稳定性等。
兼容性测试 :检查系统在不同硬件、软件或网络环境中的运行情况,例如不同的操作系统、浏览器、设备。
安全测试 :识别漏洞,确保数据保密性、完整性和可用性。
可用性测试 :评估软件的易用性,是否符合用户操作习惯。
可访问性测试 :验证系统对残障用户的包容性(如屏幕阅读器兼容)。
完整性测试 :验证软件是否满足所有需求,功能是否完整。
回归测试 :验证软件在修改或更新后 ,原有功能是否仍然正常。
冒烟测试 :初步验证核心功能是否可用,决定是否进行深入测试。
健全性测试 :快速检查特定功能或缺陷修复后的基本表现。
恢复测试 :验证系统从故障(如断电)中恢复的能力。
配置测试 :在不同软硬件配置下测试系统兼容性。
安装测试 :确保软件安装/卸载过程无误且不影响系统。
测试阶段
单元测试 :针对代码最小单元(如函数)的测试,通常由开发者完成。
集成测试 :验证模块间接口和数据交互的正确性。
系统测试 :测试完整系统是否符合需求,覆盖功能与非功能。
验收测试 :用户或客户验证系统是否满足合同要求,含 Alpha/Beta 测试。
Alpha 测试 :内部测试阶段,通常由开发团队或内部用户进行。
Beta 测试 :外部测试阶段,由最终用户在实际环境中进行测试。
端到端测试 :模拟真实用户流程,验证系统整体行为。
性能测试子类
负载测试 :评估软件在高负载下的性能表现。
压力测试 :测试软件在极端条件下的稳定性和恢复能力。
容量测试 :确定系统最大处 理能力(如数据库存储极限)。
耐久性测试 :长时间运行系统,检查内存泄漏或性能下降。
测试文档与元素
测试文档 :记录测试过程和结果的文档,包括测试计划、测试用例、测试报告等。
测试计划 :定义测试目标、范围、策略、资源和时间安排的文档。
测试场景 :描述测试的具体场景或业务流程,用于设计测试用例。
测试用例 :详细描述测试步骤、输入数据和预期结果的条目。
测试策略 :高层指导方针,明确测试重点和方法论。
测试报告 :总结测试结果、缺陷统计及系统质量评估。
缺陷报告 :记录缺陷详情、重现步骤及修复状态的文档。
测试管理相关
测试覆盖率 :衡量测试用例对需求或代码的覆盖程度。
测试环境 :包含硬件、软件及配置的测试执行平台。
测试出口准则 :定义测试阶段结束的条件(如缺陷率阈值)。
缺陷生命周期 :从发现到关闭的缺陷状态流转过程。
开发与测试模型
测试驱动开发 (TDD):开发方法,先编写测试用例,再编写代码满足测试,通过迭代确保代码质量与功能符合性。
行为驱动开发 (BDD):扩展 TDD,以自然语言描述用户行为,促进开发、测试与业务人员的协作。
开发与协作工具
版本管理 :通过工具(如 Git、SVN)追踪和管理代码变更历史,支持团队协作与版本回溯。
持续集成 (CI):自动构建和测试代码变更,确保频繁提交的代码与主干版本兼容。
持续交付 (CD):自动化部署流程,确保代码通过测试后可快速、安全地发布到生产环境。
测试方法与技术
Mock 对象 :模拟依赖组件的行为,隔离被测单元以实现精准测试。
代码审查 :通过人工检查代码逻辑、风格和潜在缺陷,提升代码质量。
其他关键术语
Mock 测试 :用模拟对象替代依赖组件,隔离测试单元。
桩模块 (Stub):简化版组件,用于模拟未完成模块的行为。
等价类划分 :将输入数据划分为有效/无效类,减少用例数量。
边界值分析 :针对输入边界值设计测试用例,发现潜在错误。
主干开发 (Trunk-Based Development):团队成员频繁向主干分支提交代码,减少长期分支的合并冲突风险。
特性开关 (Feature Toggle):通过配置动态启用/禁用功能,支持渐进式发布与测试。
代码覆盖率 :量化测试用例对代码行、分支或条件的覆盖比例,辅助评估测试充分性。
测试成熟度模型 (TMM):一种评估和改进软件测试能力的模型,定义了不同成熟度级别的测试实践和标准。
能力成熟度模型集成 (CMMI):一种综合的软件过程改进模型,包含测试成熟度的评估和改进。