软件测试方法:QA 模型

⚡ 智能摘要

软件测试方法论定义了用于验证应用程序是否满足客户期望的策略和测试类型。瀑布式、迭代式、敏捷式和极限编程等方法论各自决定了测试的开始时间和反馈方式。

  • 🎯 核心定义: 针对被测应用程序是否符合客户预期,制定相应的策略和测试类型,每种策略和测试类型都有其自身的目标和交付成果。
  • 🪜 瀑布: 各个阶段严格按顺序进行,因此测试计划很早就开始,但执行要等到设计完成后才会进行。
  • 🔁 迭代: 一个大型项目被分成若干部分,每一部分都经历一个瀑布式循环,每次迭代后都会对整个系统进行测试。
  • 敏捷: 短周期迭代开发更倾向于快速响应变化而非进行广泛的规划,并且每次发布都会经过彻底测试。
  • 👥 极限编程: 采用结对编程和测试驱动开发,开发周期非常短,即在编写代码之前先编写测试。
  • 🧭 选择因素: 项目性质、客户要求和进度安排决定了哪种方法最合适。
  • 📋 设置要点: 合理的进度安排、明确的交付成果、商定的测试方法和透明的报告。

软件测试方法

什么是软件测试方法?

软件测试方法被定义为用于证明被测应用程序符合客户期望的策略和测试类型。测试方法包括功能测试和非功能测试,以验证被测应用程序。测试方法的示例包括 单元测试, 整合测试, 系统测试, 性能测试 等等。每种测试方法都有明确的测试目标、测试策略和可交付成果。

注意::由于软件测试是任何开发方法不可或缺的一部分,许多公司口语中使用开发方法和测试方法这两个术语。因此,与上述测试方法的定义相反,测试方法也可以指瀑布、敏捷和其他 QA 模型。讨论各种测试类型不会给读者带来任何价值。因此,我们将讨论不同的开发模型。

测试方法论、测试类型和测试策略

上述说明暗示了行业中确实存在一个模糊不清的问题。三个术语在日常对话中经常互换使用,但在项目文档中却代表不同的含义,混淆这些术语会导致测试计划回答错误的问题。

术语 它解答的问题 由……决定 例子
测试方法 测试在开发周期中何时以及如何发挥作用? 正在使用的发展模式 瀑布式开发、迭代式开发、敏捷开发、极限编程
测试类型 正在验证产品的哪个方面? 风险和需求覆盖 单元、集成、系统、性能、安全性
测试级别 软件的检查深度如何? 在构建层级结构中的位置 组件、集成、系统、验收
测试策略 我们组织在质量管理方面采取的方针是什么? 质量保证领导力,适用于所有项目 基于风险,自动化优先,左移
测试计划 这个项目究竟会测试什么内容?何时测试?由谁来测试? 项目特定测试经理 范围、进度安排、资源、准入和退出标准

一条有用的经验法则:方法论决定节奏,类型决定目标,而 测试计划 记录承诺内容。以下各节将探讨相关方法。

瀑布模型

瀑布模型

这是什么?

瀑布模型软件开发过程经历需求分析、设计等各个阶段 – 依次.

在该模型中,仅当前一阶段完成后,下一阶段才会开始。

测试方法是什么?

瀑布模型的第一阶段是需求阶段,在此阶段,在开始测试之前,所有项目需求都已完全定义。在此阶段,测试团队会集思广益,确定测试范围、测试策略并起草详细的测试计划。

只有在软件设计完成后,团队才会继续执行测试用例,以确保开发的软件能够按预期运行。

在这种方法中,测试团队只有当上一阶段完成后才能进入下一阶段。

优势 缺点
这种软件工程模型非常易于规划和管理。因此,只要事先明确定义和陈述了需求,就可以轻松地使用瀑布模型进行测试。 在瀑布模型中,只有前一阶段完成后才能开始下一阶段。因此,该模型无法容纳意外事件和不确定性。
这种方法不适用于需求经常变化的项目。

迭代开发

迭代开发

这是什么?

在这个模型中,一个大型项目被拆分成若干小部分,每个部分都要经历多次瀑布模型迭代。每次迭代结束时,都会开发一个新模块或改进一个现有模块。该模块会被集成到软件架构中,然后整个系统会进行整体测试。

测试方法是什么?

迭代完成后,整个系统都会接受测试。测试的反馈会立即产生,并会纳入下一个周期。根据过去迭代的经验,可以减少后续迭代所需的测试时间。

优势 缺点
迭代开发的主要优点是每个周期结束时可以立即获得测试反馈。 这种模式大大增加了沟通开销,因为在每个周期结束时,必须给出关于可交付成果、工作量等的反馈。

敏捷方法

敏捷方法论

这是什么?

传统的软件开发方法的前提是软件需求在整个项目中保持不变。但随着复杂性的增加,需求会发生许多变化并不断发展。有时,客户自己也不确定自己想要什么。虽然迭代模型解决了这个问题,但它仍然基于瀑布模型。

在敏捷方法中,软件以增量、快速的周期进行开发。重点是客户、开发人员和客户之间的互动,而不是流程和工具。敏捷方法侧重于响应变化,而不是广泛的规划。

测试方法是什么?

增量测试用于敏捷开发方法,因此,项目的每个版本都经过彻底测试。这确保在下一个版本发布之前修复系统中的任何错误。

优势 缺点
可以随时对项目进行更改以满足要求。 不断的客户互动意味着所有利益相关者(包括客户本身、软件开发和测试团队)的时间压力增加。
这种增量测试可最大程度地降低风险。

极限编程

极限编程

这是什么?

极限编程是一种敏捷方法,其理念是缩短开发周期。项目被划分为简单的工程任务。程序员编写一个简单的软件代码,然后反馈给客户,征求反馈。 Rev开发人员在考虑了客户的观点后,继续进行下一个任务。

在极限编程中,开发人员通常以两人一组的方式工作。

极限编程 用于客户要求不断变化的地方。

测试方法是什么?

极限编程遵循测试驱动开发,描述如下 -

  1. 添加 测试用例 将测试套件用于验证尚未开发的新功能。
  2. 运行所有测试,显然新添加的测试用例必须失败,因为该功能尚未编码
  3. 编写一些代码来实现特性/功能
  4. 再次运行测试套件。这一次,新的测试用例应该通过,因为功能已经编码
优势 缺点
对于软件设计思路模糊的客户,极限编程(XP)是一个不错的选择。 软件开发团队和客户之间的会议增加了时间要求。
持续测试和持续集成小版本确保交付的软件代码是高质量的

V模型和螺旋模型

大多数项目中还会出现另外两种模型,它们完善了整个图景,因为每种模型都以不同的方式解决了瀑布式方法的一个缺点。

V型模型。 V模型(通常称为验证与确认模型)将每个开发阶段与相应的测试阶段配对,用V字形的两臂来表示。需求与验收测试配对,高层设计与系统测试配对,底层设计与集成测试配对,编码与单元测试配对。其价值在于测试设计与每个开发阶段同步进行,而不是在编码之后,因此编写验收测试的人员可以在缺陷出现之前数月就发现模糊的需求。它的缺点继承自瀑布模型:该模型仍然假设需求是稳定的。

螺旋模型。 这种螺旋式迭代方法围绕着明确的风险分析展开。每个循环包含四个步骤:确定目标、识别并解决风险、开发和测试,以及规划下一次迭代。因此,测试集中在风险最高的地方,而不是均匀分布。它适用于大型、昂贵且运行时间长的项目,例如航空航天或银行核心系统,因为在这些项目中,后期发现风险的代价非常高昂。对于小型网络项目而言,在每个循环中进行正式的风险分析通常没有必要。

这两种模型都介于瀑布式开发和敏捷响应之间。在发布频率比两者都更重要的情况下, DevOps的 流水线将测试推送到持续集成中,以便自动验证每次提交。

选择哪种软件方法?

软件开发及其相应的测试方法有很多种。每种测试技术和方法都是为特定目的而设计的,有其相对的优点和缺点。

选择特定的方法取决于许多因素,例如项目性质、客户要求、项目进度等。

从测试的角度来看,一些方法在开发生命周期的早期推动测试输入,而其他方法则等到系统的工作模型准备就绪。

如何设置软件测试方法?

软件测试方法不应仅仅为了测试软件代码而建立。应该考虑全局,并且测试方法应该满足项目的主要目标。请参阅这份信誉良好的测试方法列表 软件测试服务提供商 他可以帮助您制定适合您项目目标的有效测试策略。

生产计划

现实的时间安排是实施成功测试方法的关键,并且时间安排应该满足团队每个成员的需求。

明确的交付成果

为了让团队所有成员达成共识,应该提供定义明确的交付成果。交付成果应该包含直接的内容,没有任何歧义。

测试方法

一旦计划完成并且交付了明确的交付成果,测试团队就应该能够制定正确的测试方法。定义文档和开发人员会议应该向团队表明可用于项目的最佳测试方法。

报告仪表板

透明的报告很难实现,但这一步决定了项目中使用的测试方法的有效性。

常见问题

是的,这种情况很常见。受监管的项目通常采用瀑布式管理模式,围绕敏捷交付团队开展工作,这样既能满足审计人员的要求,又能保证开发过程的快速反馈。

将测试活动提前到生命周期的早期阶段,以便在需求和设计阶段而不是编码之后发现缺陷。测试驱动开发是将左移测试推向极致的体现。

人工智能缩短了反馈周期,而不是取代模型。生成的测试用例、自愈定位器和基于风险的选择,使得敏捷开发周期缩短后,就能实现以往需要漫长开发阶段才能完成的测试覆盖率。

是的。测试影响分析会将代码更改映射到覆盖这些更改的测试,因此流水线可以在几分钟内运行有针对性的子集测试,而不是在夜间运行完整的回归测试套件。

是的,但要轻量级。敏捷开发更看重可工作的软件,而不是详尽的文档,但并非完全没有文档。验收标准、自动化测试和简洁的测试计划仍然是必要的证明。

总结一下这篇文章: