测试如何应对新的开发模式?

软件测试呀 软件测试呀     2022-12-06     595

关键词:

1、为什么需要测试左移,测试右移?

测试可以保证产品质量,重要性不言而喻。但,要做好测试也比较困难,需要克服很多挑战。尤其是,持续交付、敏捷开发等开发模式为传统 软件测试方式带来了更大的时间压力。

我们先来看看下面这种熟悉的测试方式都有什么问题:测试人员接到项目后参与需求评审,然后根据需求文档写用例、准备脚本,等开发提测之后正式开始测试、提 Bug、回归,测试通过后就结束了,项目交给运维上线,之后投入下一个项目继续重复这样的流程。

这样的流程看似没什么错,但有两大问题:

测试人员非常被动。当需求质量、开发质量较差的时候,测试人员只能被动接受。

但同时,测试又被认为是质量的责任人。如果因为需求质量、开发提测质量差而导致上线延期,大家通常会首先怪罪测试团队。

这些问题,在新的开发模式下愈发严重。因为这些新的开发模式有一个共同点,就是要缩短产品的交付周期,对自动化的要求越来越高,能够专门留给传统竖井流程中测试环节的时间越来越短,自然更难保证质量。在极端的情况下,比如在持续部署的模式下,所有测试都是自动化的,已经完全没有留给测试人员专门进行手工测试的时间了。与此同时,测试的能力和质量又是这些开发模式成功的关键。否则,即使可以频繁地构建产品,质量不过关价值也为零。所以,在快速开发模式的挑战下,测试左移、测试右移就应运而生了。这些测试模式,能让测试人员拥有更多主动权,以及更多的时间进行测试。

那,到底什么是测试左移和测试右移呢?

2、什么是测试左移和测试右移?

测试左移和右移,就是把测试的范围从传统测试的节点中释放出来,向左和右扩展。

向左扩展,就是让测试介入代码提测之前的部分。比如,扩展到开发阶段,在架构设计时就考虑产品的可测试性,并尽量进行开发自测等。另外,测试可以更进一步扩展到需求评审阶段,让测试人员不只是了解需求,更要评估需求的质量,比如分析需求的合理性以及完整性等。

类似的,测试右移,是让测试介入代码提测之后的部分。比如,测试人员在产品上线过程中,利用线上的真实环境测试。另外产品上线之后,测试人员仍然介入,通过线上监控和预警,及时发现问题并跟进解决,将影响范围降到最低。这样一来,测试人员不但有更多的时间进行测试,还能发现在非生产环境中难以发现的问题。

3、测试左移的原则和实践

1、调整团队对测试的态度;

2、把测试添加到开发和产品需求步骤中;

3、频繁测试,快速测试。

3.1

测试左移原则一:

调整团队对测试的态度

调整团队对测试的态度,打破竖井的工作方式,是测试左移的前提。一个有效的办法是,按照功能的维度管理团队,让整个功能团队对产品负责。也就是说,如果产品质量出现问题,不只是测试团队“背锅”,而是会影响整个功能团队的绩效。同时,让质量问题的直接责任人承担更多的责任,来进一步增强团队成员的责任心。这种利益绑定的办法,虽然简单但非常有效,只不过出现质量问题时要记得进行根因分析,以避免再次出现类似问题。

另外,还要改变团队成员对测试工作的认知。传统的工作方式中,我们通常认为发现 Bug 最重要,但其实为了提高产品质量,更重要的是预防 Bug。所以说,在测试左移的过程中,我们应该更聚焦在预防 Bug 上。

3.2

测试左移原则二:

把测试添加到开发和产品需求步骤中

测试左移的第一步,是把测试工作融入到开发步骤中。常用的办法是,让测试人员参与到开发阶段的方案设计中,了解开发的实现方式。因为很多开发人员可能只熟悉他负责的那一部分,而测试人员往往对全局更加了解,所以测试人员要评估改动范围以及是否有遗漏的模块和系统。

另外一个比较彻底,也很有效的方法是全栈开发,通过运维团队提供工具和支持,让开发人员尽量参与到运维工作中去。对于测试来说,也是同样的道理。我们可以让测试团队转型,进行工具开发,并更多地去支持专项测试,比如性能测试、安全测试等,通过“使能”的办法,让开发人员完成功能测试,包括单元测试、集成测试等。

说到让开发人员完成部分测试工作,常常会听到很多质疑声。反对者认为,测试人员的心理模型跟开发人员不一样,他们更倾向于去找问题。而开发人员面对自己开发的产品,潜意识里就不愿意去找问题,比如,他们不愿意专门尝试各种边界输入进行测试,而把自己开发的功能搞崩溃。所以,开发人员和测试人员更适合分开。

这种观念,在 10 年前瀑布开发模式盛行时就深入人心。我曾经也非常认同,但在 Facebook 工作了 5 年后改变了看法。如果你能够把开发人员的责任界定得很清楚,谁开发的产品谁要保证质量,那么开发人员自然而然地就会去尝试做好测试,比如进行边界测试。而且,开发人员最了解自己写的代码,所以他能够最高效地对自己的代码进行测试。

当然,做全栈开发的同时我们仍会保留一部分功能测试人员,毕竟从竖井模式转变到全栈模式是一个循序渐进的长期过程。不过 Facebook 做到了极致,完全没有了功能测试人员,也就是我们所说的“去 QA”。

测试左移到了开发阶段之后,再往左移一步就到了产品设计阶段,在这里,测试人员除了解需求外,更重要的是评估需求的质量。

我推荐使用 BDD(Behavior Driven Development,行为驱动开发)的方法进行开发,促进团队在需求评审时更多地考虑测试。BDD 是通过特定的框架,用自然语言或类自然语言,按照编写用户故事或者用例的方式,从功能使用者的视角描述并编写测试用例,从而让业务人员、开发人员和测试人员着眼于代码要实现的业务行为,并以此为依据通过测试用例进行验证。

3.3

测试左移原则三:

频繁测试,快速测试

测试左移的第三个重要原则是,频繁测试、快速测试。在测试左移之前,我们需要等待提测,比较被动,不能频繁测试。但测试左移到开发阶段之后,我们就有了很大的自由度去频繁运行测试,从而更好地发挥测试的作用,尽早发现更多的问题。

这里最重要的方法就是,我在讲持续开发时提到的几个关于验证的操作,具体包括:

规范化、自动化化本地检查;

建设并自动化代码入库前的检查流程;

提供快速反馈,促进增量开发。

另外,为了能够顺利、频繁地运行测试,我们还要提升测试运行的速度。给测试提速的常见办法包括:

并行运行。比如把测试用例放到多台机器上运行,用资源换时间。

提高构建速度。比如使用精准构建,因为通常构建之后才能运行测试。

精准测试,也就是只运行跟改动最相关的测试。可以建立需求与代码的关系,以及需求与测试用例的关系,从而在代码改动时重点关注与之最相关的测试用例。

分层测试,即不同情况运行不同测试用例集合。

减少不必要的用例。比如,识别不稳定的用例,对其删除或者优化。

房子要一层一层盖,知识要一点一点学。大家在学习过程中要好基础,多上手实操,话不多说,这里狠狠上一次干货!我熬夜整理好的各阶段(功能、接口、自动化、性能、测开)技能学习资料+实操讲解,非常适合私下里学习,比找资料自学高效多了,分享给你们。

领取关 w/x/g/z/h:软件测试小dao

敲字不易,如果此文章对你有帮助的话,点个赞收个藏来个关注,给作者一个鼓励。也方便你下次能够快速查找。

测试人员在敏捷团队中扮演的角色

...布开发模式到敏捷开发模式的转型,这种转型相对传统的测试人员来说,不论是在角色定位还是在技能栈方面都提出了更大的挑战,那么测试人员应该如何应对呢?下面根据我平时工作的一些总结体会来说说测试人员应该发力的... 查看详情

编码规范--如何应对需求变更(代码片段)

如何应对需求变更  现在的程序员为什么这么累,其实很大程度上来说是加班原因使编码质量占了大部分因素,但是不少同学都不认为是代码质量导致的加班,都认为是不断的需求改动导致的加班。但是话又说回来,谁的需求... 查看详情

如何在新的 Facebook 开发者中禁用应用程序的沙盒模式?

】如何在新的Facebook开发者中禁用应用程序的沙盒模式?【英文标题】:HowtodisableSandboxModeforappinnewFacebookDeveloper?【发布时间】:2014-01-0911:24:10【问题描述】:我在新的开发者设计中看不到禁用它的选项!【问题讨论】:【参考方... 查看详情

如果运行模式为 parallel="methods",如何强制 TestNG 为每个方法创建新的测试类实例

...arallel="methods",如何强制TestNG为每个方法创建新的测试类实例【英文标题】:HowtoforceTestNGcreatenewinstanceoftestclassforeachmethodifrunmodeisparallel="methods"【发布时间】:2013-03-1523:59:23【问题描述】:如果运行模式为parallel=&qu... 查看详情

如何在 iOS 模拟器或开发设备上测试半自治应用程序模式

】如何在iOS模拟器或开发设备上测试半自治应用程序模式【英文标题】:HowtotestSemi-AutonomousappmodeiniOSsimulatororonadevdevice【发布时间】:2021-06-0120:49:45【问题描述】:使用通话时UIAccessibilityRequestGuidedAccessSession要让应用进入和退出... 查看详情

如何测试 django 数据库模式?

】如何测试django数据库模式?【英文标题】:HowdoItestadjangodatabaseschema?【发布时间】:2010-09-1310:09:08【问题描述】:我想编写可以显示数据库是否与我的models.py文件同步的测试。其实我已经写好了,只是发现django每次基于models.py... 查看详情

风险应对

风险的类别风险的来源应对方案人员学生、老师、评审员多交流沟通流程项目的建立、维护可以投票来决定技术开发和测试工具、与产品相关的技术多学习,关注新知识环境开发环境可以加一个虚拟环境 查看详情

敏捷开发:

...发布版本    (3)系统恶化:XP创建和维护一个综合的测试套件    (4)测试率。    (5)业务误解。XP希望需求客户是团队内部人员。在一个发布周期中,客户欢迎提交一个新的没有完成的功能,    (6)    (7)... 查看详情

如何打开或关闭windows的测试模式

参考技术A测试模式是为了测试一些硬件而设立的,windows2008R2默认是不允许安装没有认证的驱动的,而新的硬件肯定没有微软的认证驱动,为了测试这些硬件及其驱动,就要用到这个测试模式。你安装的防火墙,使用了虚拟硬件... 查看详情

如何在 Android 上测试打盹模式?

】如何在Android上测试打盹模式?【英文标题】:HowtotestDozeModeonAndroid?【发布时间】:2017-08-2006:07:39【问题描述】:有一个旧的Android应用可以在后台运行2服务(Service)。通过在工作时发送数据和记录的可能性来更新应用程序并... 查看详情

(引用)自动化如何应对ui变更

让我们来聊一下UI自动化测试转载:http://mt.sohu.com/20161209/n475414269.shtml  我发现了,大家极度关心自动化测试,尤其是UI自动化测试,虽然现在作为专项测试,离开这些越来越远了,但总能遥想以前,我总能想起自己做nokia的Wind... 查看详情

gof之适配器模式

...中应用,但是环境要求的接口是这些现存对象不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?意图(Intent)将一个类的接口转换成客户希望的另一个接口。A... 查看详情

如何能成为测试老大?先搞懂项目中的敏捷开发模式

1什么是敏捷开发?1、敏捷开发是以用户的需求进化为核心,采取迭代、循序渐进的方式来进行软件项目的开发。2、即将项目切分为多个子项目,每个子项目单独发布,保证软件较早可用。3、及时收集用户反馈&#x... 查看详情

adapter适配器模式(设计模式03)

...用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?定义:将一个类的接口转换成客户希望的另一个接口。Adapte... 查看详情

用户意见千千万app开发该如何应对处理

用户意见千千万APP开发该如何应对处理  无论我们开发怎样的app,其最终目的都是为了获得用户的认可。只有用户认可了,才有可能帮助推广成为平台的忠实用户。若想获得用户的认可,首先产品得是能解决用户需求的,... 查看详情

测试人员遇到不断变化的项目需求该如何应对?

需求频繁变更这个产生的主要原因是:  1.前期需求调研工作没有做到位,在需求调研时没有真正深入了解用户需要什么东西?用户做这个东西的目的是什么?为什么要这么做?  2.项目经理对项目掌控力度够,在... 查看详情

测试工程师如何帮助开发域的质量变好

...ea本地sonarlint插件(开发时注意不引入新的问题)2、单元测试单元测试的两种实践:普通的开发模式实现开发实现故事卡的逻辑代码,然后再根据写好的代码编写单元测试,对单元模块进行测试。采用测试驱动开发的开发人员,... 查看详情

fabricdev开发模式的搭建测试过程(代码片段)

在利用Fabric开发Chaincode的时候,调试Chaincode显得尤为不方便,因为Chaincode正常应该运行在Docker容器中,每次修改Chaincode后想要使其更改生效必须得对Chaincode进行升级重新实例化,给我们的开发调试带来了很大的不便。下面给大家... 查看详情