反对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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Python版本信息获取方法详解与实战

《Python版本信息获取方法详解与实战》在Python开发中,获取Python版本号是调试、兼容性检查和版本控制的重要基础操作,本文详细介绍了如何使用sys和platform模块获取Python的主... 目录1. python版本号获取基础2. 使用sys模块获取版本信息2.1 sys模块概述2.1.1

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Python版本与package版本兼容性检查方法总结

《Python版本与package版本兼容性检查方法总结》:本文主要介绍Python版本与package版本兼容性检查方法的相关资料,文中提供四种检查方法,分别是pip查询、conda管理、PyP... 目录引言为什么会出现兼容性问题方法一:用 pip 官方命令查询可用版本方法二:conda 管理包环境方法

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

SpringBoot中ResponseEntity的使用方法举例详解

《SpringBoot中ResponseEntity的使用方法举例详解》ResponseEntity是Spring的一个用于表示HTTP响应的全功能对象,它可以包含响应的状态码、头信息及响应体内容,下... 目录一、ResponseEntity概述基本特点:二、ResponseEntity的基本用法1. 创

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

java中ssh2执行多条命令的四种方法

《java中ssh2执行多条命令的四种方法》本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感... 目录1 使用分号隔开2 使用管道符号隔开3 使用写EOF的方式4 使用脚本的方式大家平时有没有遇到自