“边开发边测试”给测试带来的变化

近期,为了对外缩短发布周期,对内建立更加快速的反馈机制,我们团队全面尝试了从“先开发后测试”到“边开发边测试”的转变。在此过程中,我感到测试用例设计和评审、测试执行两个活动需要做出一定的调整。

  1、测试用例设计和评审:从时间驱动转变为用户故事驱动

  当开发和测试顺序执行时,我们的功能测试计划会指定测试用例设计和评审时间。当开发和测试并行时,我们不再以时间的维度来计划测试用例的设计和评审,而是以用户故事的维度。我称这一转变为“从时间驱动的测试用例设计和评审转为用户故事驱动”。“用户故事驱动的测试用例设计和评审”有两个要点:(1)以用户故事的优先级来确定测试用例设计的优先级;(2)配合开发节奏,以一个或多个用户故事为批次,多次分批进行测试用例评审。为了让团队对测试用例设计的进度有一个直观的了解,我们为每个用户故事创建了一个设计测试用例的任务。

  2、测试执行

  (1)从广度优先转变为深度优先

  以前的测试我们会安排多个轮次,每个轮次的测试重点和方法都有所变化。而现在再也没有测试轮次的概念了,因为除了回归测试期间,基本都是每日构建,有什么测什么。那么这样的变化要求测试人员怎样调整测试执行呢?我认为是要把“回锅肉”模式变为“煮饭”模式。“回锅肉”模式是先把五花肉煮个八成熟(类似我们先把某个用户故事测试完成),然后再和大蒜等配料一起回到锅里炒,并最终装盘(类似我们通过回归测试最后确保所有功能在一起工作正常,然后发布)。“煮饭”模式是“一灶火把饭煮熟”,因为夹生饭再煮又浪费时间又不好吃。这类似我们的测试要围绕该用户故事尽量一次测试充分,而不要象以前因为知道后续还有多轮测试而有意识地推迟某些当前就可以做的测试。从某种程度上说,是要把广度优先测试转移到深度优先测试。

  当然,深度优先的一个缺陷在于可能会忽视用户故事间的关系。因为用户故事的INVEST(Independent,Negotiable,Verifiable,Estimable,Small,Testable)特性,故事间是比较独立的。但是由用户故事构成的系统却不能忽视故事间的内在关联。所以,我建议在测试单个用户故事之后,在回归测试之前,尽量穿插一定的用户场景测试(scenario testing),把在某些用户场景上自然集成起来的多个故事一起测试,从而尽早暴露故事间的一些缺陷,弥补深度优先测试的不足。当然,最后的回归测试也是对深度优先测试的一个补充。

  (2)测试执行需要借力于持续集成

  持续集成不是传统测试范畴的内容,但为了及时保卫胜利果实,对已经进行过测试之处的正确性和稳定性提供必要的及时的检查和信心保障,持续集成不可或缺。边开发边测试的过程中,我们通过集成了自动化测试的每日构建,及时发现了由于版本不断被修改而造成的意料之外的问题。开发人员也因为能将引起这些问题的原因及时锁定在近期刚刚修改过的内容上而加快了修复一些棘手问题的速度。当开发和测试人员马不停蹄地向前冲的时候,持续集成为我们巩固了后方。

  除了上述两个较大的方面,我也隐约感到其它一些方面,如测试进度报告、测试人员心态的困扰等,也有一些变化,还有更多细节需要调整。所以,我们仍然需要拥抱变化,应需而变,持续调整和改进我们的测试实践。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-08-02 04:51:55

“边开发边测试”给测试带来的变化的相关文章

敏捷开发时代:软件安全测试需更灵活

我们生活在一个软件定义的世界中.软件几乎接触到方方面面.任何努力保持竞争优势或市场先机的企业,都必须在某种程度上重新整合其软件.这会导致快速的开发方法,如敏捷开发和开发运维,促进持续的产品改进.但是,这些新的开发方法能够使测试最小化,反过来又可能破坏性能和安全性. 为保持竞争优势,企业必须提供高质量的应用体验.此外,安全是必须的而不是"有安全性也不错".因而,持续的测试方法已经日益重要,其动态性就像新的开发过程一样.幸运的是,企业越来越明白这种不断增长的需要,并且重新思考整个过程. 推

对项目开发中几种测试类型的理解和实操

项目 原文: 测试一般是放在系统完成后进行测试,但今天,却常常听到资深开发人员劝导新人们:"测试是开发的第一步"这句话如何理解呢?如果从日本人发明的巴克质量管理的方式去理解,大概是指每一个环节交给下一级时都应该进行测试.有些测试对后面的操作没有太大的影响,如图片不漂亮,菜单不合理,布局很难看之类:而另一些,却直接让下一级无法开始工作,象用例不清晰:用例自相矛盾:组件内部错误:框架不合理等等.固然,一级级把关,可以把质量提高到至少一个档次以上:但就每一个环节而言,仍然是在开发的最后阶段.

iOS开发入门:OCUnit测试框架

使用OCUnit测试框架iOS单元测试框架 原则上,是否使用测试框架都不会影响单元测试结果,但是"工欲善其事,必先利其器"使用单元测试框架更便于我们测试和分析结果. 主要的iOS单元测试框架有: OCUnit,是开源测试框架,与Xcode工具集成在一起使用非常方便,测试报告以文本形式输出到输出窗口: GHUnit,是开源测试框架,它可以将测试报告以应用形式可视化输出到设备或模拟器上,也可以以文本形式输出到输出窗口:GHUnit可以测试OCUnit编写的测试用例: OCMock,是开源测

软件开发中的数据库测试技术

摘要:根据以往软件测试经验,对数据库测试的内容和方法,进行了详细的分析,阐明了数据库测试在软件开发中的重要性. 关键词:数据库测试:性能测试:DataFactory 1.引言 数据库系统的开发在应用软件开发中所占的比重越来越大,随之而来的问题也越来越突出.比如:数据冗余,功能和性能方面存在的问题已经严重影响应用软件的使用.软件测试人员往往重视对软件功能和编码的测试,而忽略对软件性能,特别是数据库访问并发测试.因为,他们固有的思想中认为数据库设计存在问题对系统性能影响不大,或从根本上忽略了数据库在

使用Android、S3C6410开发板和Ubuntu测试Linux驱动

开发可统计单词个数的Android驱动程序(2) 八. 指定回调函数       本节讲的内容十分关键.不管Linux驱动程序的功能多么复杂还是多么"酷",都必须允许用户空间的应用程序与内核空间的驱动程序进行交互才有意义.而最常用的交互方式就是读写设备文件.通过file_operations.read和file_operations.write成员变量可以分别指定读写设备文件要调用的回调函数指针.      在本节将为word_count.c添加两个函数:word_count_read

google测试分享-测试经理

前言:这个系列分享的内容大部分都是出自于<google是如何测试的>的书,不是我YY的,我只是大自然的搬用工,希望对大家有那么一点点的用处,当然后面也会有个人的一些想法. 上一次分享了google测试分享-GTA,大概说了下google是如何使用GTA来管理整个测试阶段,特别是测试计划的安排,那这次会聊一聊google测试经理是如何进行团队管理的. 为了让这些blog分享更有逻辑性,我打算分几个专题来分享google测试相关的测试理念. google测试分享-SET和TE google测试分享

大数据量分页存储过程效率测试附测试代码与结果

测试环境 硬件:CPU 酷睿双核T5750 内存:2G 软件:Windows server 2003 + sql server 2005 OK,我们首先创建一数据库:data_Test,并在此数据库中创建一表:tb_TestTable 复制代码 代码如下: create database data_Test --创建数据库 data_Test GO use data_Test GO create table tb_TestTable --创建表 (id int identity(1,1) pri

有人能指导下-大数据压力测试去测试软件响应速度

问题描述 大数据压力测试去测试软件响应速度 怎么样去开发一个数据生成器,并在大数据背景下测试软件的响应速度...这个该怎么做? 解决方案 国内有AutoRunner和TestCenter,这两个是免费的. 解决方案二: 开发一个数据生成器? 不是很理解, 而且你场景描述太不清楚了,你是要通过专业的测试软件进行测试还是只是生成数据调用程序接口? 生成数据可以程序代码生成 或者 数据库的可以用存储过程创建, excel也可以啊 解决方案三: 根据你的程序来判断,产生一些尽可能和真实数据类似的随机伪数

visual studio-Visual Studio Web负载测试,测试摘要分析

问题描述 Visual Studio Web负载测试,测试摘要分析 测试为简单login页面测试,10并发持续10分钟 我用同种方式测过外网址,数据很漂亮,错误只有45个Timeout,Avg.Page Time在0.6,浮动也不大,请大神明示以下问题: 失败测试数(比例):81465(58.1) 1.如此高的失败率说明什么?开发web"> 2.错误栏里有1000次的403错误意味什么?(图中显示为同时出现) 3.页面在请求时调用本地cookie会加速页面展示,但为什么会有0.039s的A

使用Spring测试类测试,抛出HibernateException异常

问题描述 我在开发中使用SpringTest测试机制进行服务层的单元测试,结果单元测试在执行初始化方法时就抛出异常,错误如下java.lang.IllegalStateException: Failed to load ApplicationContext... ...Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dictionaryManage