测试策略的实现

简介: 测试策略的实现

《持续交付 发布可靠软件的系统方法》读书笔记

很多项目只依靠手工的验收测试来验证软件是否满足它的功能需求和非功能需求。即使某些项目有一些自动化测试,但这些测试常常因无人维护或很少维护而过时,所以还是需要大量的手工测试作为补充。测试是跨职能部门的活动,是整个团队的责任,应该从项目一开始就一直做测试,从一开始就将质量内嵌于产品之中。质量内嵌是指从多个层次(单元、组件和验收)上写自动化测试,并将其作为部署流水线的一部分来执行,即每次应用程序的代码、配置或环境以及运行时所需软件发生变化时,都要执行一次。手工测试也是质量内嵌的关键组成部分,如演示、可用性测试和探索性测试在整个项目过程中都应该持之以恒地做下去。质量内嵌还意味着,你要不断地改进自动化测试策略。测试策略的设计主要是识别和评估项目风险的优先级,以及决定采用哪些行动来缓解风险的一个过程。好的测试策略会带来很多积极作用。测试会建立我们的信心,使我们相信软件可按预期正常运行。也就是说,软件的缺陷较少,技术支持所需的成本较低,客户认可度较高。测试还为开发流程提供了一种约束机制,鼓励团队采用一些好的开发实践。一个全面的自动化测试套件甚至可以提供最完整和最及时的应用软件说明文档,这个文档不仅是说明系统应该如何运行的需求规范,还能证明这个软件系统的确是按照需求来运行的。

测试的分类

ad93c2f793d55952819e97ddd386668d.png

业务导向且支持开发过程的测试

自动的 - 功能验收测试

技术导向且支持开发过程的测试

自动的 - 单元测试、集成测试、系统测试

业务导向且评价项目的测试

手工的 - 演示、易用性测试、探索性测试

技术导向且评价项目的测试

自动的/手工的 - 非功能性验收测试,包括容量测试、安全性测试等

现实中的情况与应对策略

新项目

新项目有机会实现所描述的理想国,最重要的事情就是一开始就要写自动化验收测试。为了能做到这一点,你需要:

  1. 选择技术平台和测试工具;
  2. 建立一个简单的自动化构建;
  3. 制定遵守INVEST原则[即独立的(Independent)、可协商的(Negotiable)、有价值的(Valuable)、可估计的(Estimable)、小的(Small)且可测试的(Testable)]的用户故事[ddVMFH]及考虑其验收条件;

然后就可以严格遵守下面的流程:

  1. 客户、分析师和测试人员定义验收条件;
  2. 测试人员和开发人员一起基于验收条件实现验收测试的自动化;
  3. 开发人员编码来满足验收条件;
  4. 只要有自动化测试失败,无论是单元测试、组件测试还是验收测试,开发人员都应该把它定为高优先级并修复它。

遵守我们所说的流程,会改变开发人员写代码的方式。同后补验收测试的项目相比,那些从一开始就使用了自动化验收测试的代码库一般总是有更好的封装、更清晰的表达、更清楚的职责分离和更多的代码重用。这的确是一个良性循环:在正确的时机写测试会产出更好的代码。

项目进行中

引入自动化测试最好的方式是选择应用程序中那些最常见、最重要且高价值的用例为起点。这就需要与客户沟通,以便清楚地识别真正的业务价值是什么,然后使用测试来做回归,以防止功能被破坏。

遗留系统

在这种情况下,如果没有自动化构建流程,那么最高优先级的事儿就是创建一个,然后再创建更多的自动化功能测试来丰富它。如果有文档,或能够找到那些曾经或正工作在这个系统之上的成员的话,创建自动化测试套件会更容易一些。然而现实往往并非如此。项目的出资人(sponsor)并不愿意让开发团队把时间花费在一些看上去低价值的活动上,比如为已经在生产环境中使用的功能创建测试。他们会问:“这些功能不是已经在之前被QA团队验证过了吗?”因此,一定要聚焦于系统中高价值的功能。向客户解释一下,创建回归测试套件的价值在于保护系统当前的功能,这样就很容易啦。坐下来与用户一起识别系统中高价值的功能是非常重要的。利用前面一节所说的技术,创建一套广泛的自动化测试,覆盖这些高价值的核心功能。当然,我们不该在这上面花太长时间,因为这只是一个保护已有功能的框架。有了这个测试套件之后,就要逐渐为新增功能添加相应的测试。对于遗留系统来说,这些覆盖核心功能的测试就是非常重要的冒烟测试了。

集成测试

假如你的应用程序需要通过一系列不同的协议与各种外部系统进行交互,或者它由很多松散耦合的模块组成,而模块之间还有很复杂的交互操作的话,集成测试就非常重要了。我们所说的“集成测试”是指那些确保系统的每个独立部分都能够正确作用于其依赖的那些服务的测试。我们要确保在正式部署到生产环境之前,应用程序不要与真实的外部系统进行交互,否则就要想办法告诉外部系统,这个应用程序所发送的数据只是用于测试的。一般来说,有两种常见的方法来保证你可以安全地测试自己开发的应用程序,而不必与真正的外部系统进行交互,而且通常要同时使用这两种方法。

  1. 在测试环境中使用一个“防火墙”将该应用程序与外部系统隔离开来,而在开 发过程中,越早这么做越好。当外部系统不可用时,这也是测试应用程序行为 的一个好方法。
  2. 在应用程序中使用一组配置信息,让其与外部系统的模拟版本进行交互。

流程

在每个迭代开始时,召集所有的项目干系人开个会。假如没有做迭代式开发,那么就在某个用户故事开始开发的前一周召开这样的会议。让客户、分析人员、测试人员坐在一起,找到最高优先级的测试场景。测试人员和开发人员在开发前应该尽早一起讨论这些验收测试。这会让开发人员更好地了解用户故事,并理解最重要的场景是什么样的。与开发完用户故事之后再沟通相比,这会大大减少开发人员和测试人员之间的反馈循环,有助于减小遗漏功能的几率,并有助于减少缺陷。

管理待修复缺陷列表

理想情况下,你的应用程序根本不应该有缺陷。如果使用测试驱动开发和持续集成,并有一个全面的自动化测试集,其中包括系统级别的验收测试,以及单元测试和组件测试,在测试人员和用户发现缺陷之前,开发人员就应该能够捕获它们。然而探索性测试、演示以及用户使用的过程中,都可能会发现应用程序的缺陷,这也许是不可避免的。这些缺陷都会放在待修复缺陷列表(backlog)中。我们可以把缺陷分为严重(critical)、阻塞(blocker)、中(medium)和低(low)四个级别。根据这种分类方式,就能在待修复缺陷列表中根据优先级将缺陷与用户故事按相同方式来排序,并可将二者一起放置。

小结

在很多项目中,测试被认为是一个由一些专职人员负责的独立阶段。可是,只有当测试成为与软件交付相关的每个人的责任,并从项目一开始就被引入并持续进行时,才能产生高质量的软件。测试主要是建立反馈环,而这个反馈环会驱动开发、设计和发布等活动。将测试推迟到项目后期的计划最终都会失败,因为它破坏了产生高质量、高生产率,以及(最重要的)反映项目进展情况的反馈环。如果每次修改后都能运行一次自动化测试集合,就能建立最短的反馈环。

推荐阅读

目录
相关文章
|
3天前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
3天前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
14 4
|
8天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
1月前
|
缓存 监控 算法
软件测试中的性能瓶颈分析与优化策略
【10月更文挑战第6天】 性能测试是确保软件系统在高负载条件下稳定运行的重要手段。本文将深入探讨性能测试的常见瓶颈,包括硬件资源、网络延迟和代码效率等问题。通过具体案例分析,我们将展示如何识别并解决这些问题,从而提升软件的整体性能。最后,文章还将分享一些实用的性能优化技巧,帮助读者在日常开发和测试中更好地应对性能挑战。
82 3
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
1月前
|
存储 数据管理 测试技术
提升软件测试效率的实用技巧与策略
在软件开发过程中,测试是一个至关重要的环节,它直接关系到产品质量和用户体验。本文将探讨几种实用的技巧和策略,帮助测试人员提升工作效率,确保软件质量。从测试自动化到持续集成,我们将一一解析这些方法如何优化测试流程。
|
23天前
|
测试技术 UED
软件测试中的“灰盒”方法:一种平衡透明度与效率的策略
在软件开发的复杂世界中,确保产品质量和用户体验至关重要。本文将探讨一种被称为“灰盒测试”的方法,它结合了白盒和黑盒测试的优点,旨在提高测试效率同时保持一定程度的透明度。我们将通过具体案例分析,展示灰盒测试如何在实际工作中发挥作用,并讨论其对现代软件开发流程的影响。
|
6天前
|
测试技术 持续交付 Docker
探索软件测试中的自动化策略与挑战
在当今快节奏的软件开发周期中,自动化测试已成为提高产品质量和缩短上市时间的关键。然而,实施有效的自动化测试策略并非易事,它面临着技术选型、脚本维护、环境配置等一系列挑战。本文深入探讨了自动化测试的重要性,分析了常见的自动化测试工具和框架,并讨论了在构建和维护自动化测试体系过程中遇到的主要难题及其解决方案。通过案例分析,本文旨在为软件测试工程师提供实用的指导和建议,以优化他们的自动化测试实践。
|
10天前
|
jenkins 测试技术 持续交付
软件测试中的自动化测试策略
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和效率的关键工具。本文将探讨自动化测试的重要性、实施策略以及面临的挑战,旨在为软件开发团队提供实用的指导和建议。
|
11天前
|
测试技术 持续交付
探索软件测试的艺术:从基础到高级策略
【10月更文挑战第31天】本文是一篇深入探讨软件测试领域的指南,旨在为读者提供一个结构化的框架来理解并应用各种测试技术。文章将通过浅显易懂的语言和实际代码示例,带领读者从测试的基础概念出发,逐步深入到更复杂的测试策略。无论你是测试新手还是希望提升技能的专业人士,这篇文章都将为你揭示如何通过有效的软件测试保证产品质量和用户满意度。