反对N-1方法,支持同步N方法

2023-10-28 11:20
文章标签 方法 支持 同步 反对

本文主要是介绍反对N-1方法,支持同步N方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    现在,很多团队已经开始使用Scrum进行软件开发。在实践Scrum过程中,必然要面对一个开发team和测试team如何协作,如何安排二者迭代(iteration or sprint)次序的问题。很多Agile培训机构给出的一个经典方式,N-1模式,如下图1。  但是,我个人非常反对这种方法。我推荐大家使用图2的同步N的方法。当然,所谓同步N的方法也不是什么标准的名词,我好像也没有听说过相关的定义,只是先随便用个名词与大家探讨这件事情,只要大家会意就好。

 

图1  N - 1的方法

 

 

 图2  同步的N的方法

 

一、解释N-1方法

       所谓N-1方法,也即测试滞后开发一个迭代周期(Agile里边的一个迭代是2-6周)。宏观上来说,也就是测试team在迭代N里边测试开发team在迭代N-1里边开发的软件。具体来讲这里的测试狭义上指FVT(Function Verification Test)。因为如果加上SVT,BVT,GVT,TVT,etc,模式会更加复杂。

 

二、N-1方法的缺点

 1 使用N-1方法,很难实践Scrum的真谛

        Scrum最核心的东西就是尽早、持续的提供可用的稳定的软件给Stakeholders,  并从Stakeholders那里得到反馈,形成产品连续优化的循环。但是使用N-1的方法,我们在开发期间似乎永远无法给Stakeholders一个真正的可用的稳定的软件。在迭代N结束的时候,如果你把迭代N-1的软件介质给Stakeholders用,那些介质里边迭代N-1的代码其实都没有被测过;如果你把迭代N的软件介质给客户用,新增的迭代N的功能则没有被测试过。

 2 使用N-1方法,开发和测试team目标会不统一

        由于开发和测试的目标不同,因而二者在被对方block的时候,总是很难从对方那里得到最高的优先级去扫除这些Block Issues,并且双方相互Push的过程只能给对方带来压力;让一个原本应该精诚合作的团体成为测试和开发两个对立面。比如测试team在测试过程中发现了N-1迭代的defects,并被这些defects block不能继续工作,需要开发团队马上fix。但是此时开发团队未必有这个优先级去做这件事,因为开发团队有自己在迭代N的开发任务;如果去fix这些上个迭代的defects则很有可能影响本迭代的代码质量,造成恶性循环。于是双方都陷入了郁闷的状态,两个team的进度状况也许很快就会同时亮红灯。

 3 使用N-1方法,造成效率低下

        Agile及其他相关研究里边有这样一个观点,事情一次做完效率最高。因此,将同一个功能拖到2个甚至更多个迭代中去做,效率显然不会很高。试想开发团队在迭代N-1开发了功能,却要在2周、4周、6周,甚至8-10周后回过头来Fix defects效率可想而知。此时,估计很多东西早已忘到九霄云外了,developer要重新整理思路,熟悉code,有时甚至需要重新搭建环境,等等,白白浪费很多时间。

另外,大家还知道,dependency也是妨碍高效的罪魁祸首之一。N-1的模式中,开发团队在需求理解、知识传递上很容易成为测试团队的dependency。假设开发团队获得需求、design、相关知识需要时间是X, 开发团队将这些信息传递给测试团队,两个团队的时间加起来就是3X。但如果测试团队可以shift left,和开发团队同步,这个时间测试2X。

 

 

 三、解释同步N方法

 

1基本模型理想模型

        所谓同步N方法就是要开发、测试team协同工作,在一个迭代里共同完成相同的功能(Story)。正如图2所示,

       首先,两个team同时选择Stroies,分析需求;测试团队从一开始就和开发团队站在同一起跑线上,避免dependency。

       而后,双方共同完成开发设计和计划。开发团队做code 部分的设计;测试团队做测试计划设计。

       接下来开发团队写code,做UT,而测试团队则细化test case或是搭建测试环境。

       最后,测试团队执行正式的FVT,开发人员fix defects。

2完善模型真实模型

       当然,上面的模型只是一个基本的模型。

      真是环境中,由于具体工作的差异,图2中开发和测试两条线并不一定总是同步;有的时候开发的工作多一些,有的时候测试的工作多一些。此时,需要Team,Scrum Master,PM,或是其他长官从中动态协调双方资源。当然,这样的协调需要developer,tester各自扩展一些对方的技术,需要双方的素质在横向上都有一个提升。

      另外,虽然图里的两条线是平行的,但是协调的需求首先从客观上打破了平行。其实,我们主观也希望两条线能够很好的交叉。也就是说们希望开发、测试能够互相帮助,有一个较好的配合。开发和测试的人思维模式往往有些差异,而我们恰恰希望利用这些差异、整合双方的观点使产品做得更好、更全面。而实际操作中有很多问题对另一方往往不是问题,我们也希望通过这种整合提高双方的效率。

 

 

四、同步N方法的优点

 

1 相对于N-1,这种方法可以及时为Stakeholders提供可用、稳定的软件。

2 开发测试可以为共同的目标奋斗、而不再成为敌人。

3 提高了效率

   团队可以一次把一个功能彻底做完。

   消除了dependency。

   开发测试协同工作提高效率。

4 整合开发、测试的不同视角提高质量。

5 测试team也可以更多的contribute需求分析,Story分析和设计。 

 

五、同步N方法的案例

 ITCAM  for RT

 

六、对同步N方法的质疑与回 

 

1 问: Developer和Tester相互拓展对方的技能是不是使双方都不专业了?

   答:我们经常会对自己的技能进行拓展或者叫充电,这是IT人必须的。对于Developer或Tester在纵向拓展自己本领域的技能,我举双手赞同。但我同时也认为,适时、适度的抬头在横向上涉猎或提高也是很有益的。我做过developer也做过tester,我知道他们的思想和技能有很大的不同,各自也有很大的局限性。如果二者可以相互借鉴,二者都能做得更好。同时,我相信大部分IT人是愿意接受这种提高的。

2 问: 对Developer和Tester的工作做互换,双方能适应吗?

   答:这个转化是很痛苦,所以需要在协调的时候讲究一些技巧。你肯定不能让tester明天就去写code,让developer马上就去跑点。培训是必须的,循序渐进更是要点。我的建议是从双方互相帮助开始,根据需要逐渐深入。随着team逐渐走向成熟,双方磨合更加到位,这些痛苦也就不存在了。

3 问:能否让Developer把FVT也包了?

   答:有些team确实这样做了,我作为Developer也做过FVT,可是感觉效果不好。自己写code自己测,有些问题是测不出来的,因为自己在测试环境、内容、方法上都会有assumption。所以,专门留出测试的role还是有必要的。

 Writing.... 

 

这篇关于反对N-1方法,支持同步N方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292854

相关文章

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

Python处理函数调用超时的四种方法

《Python处理函数调用超时的四种方法》在实际开发过程中,我们可能会遇到一些场景,需要对函数的执行时间进行限制,例如,当一个函数执行时间过长时,可能会导致程序卡顿、资源占用过高,因此,在某些情况下,... 目录前言func-timeout1. 安装 func-timeout2. 基本用法自定义进程subp

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4: