有人说,测试者来自火星,开发者来自金星。这是因为软件测试员和软件开发者就好比一对冤家,里面的缘由说不清也道不明。开发代表着创造,而测试则代表着摧毁,因为测试的目的就是以各种方式不断地从开发出的产品中发现大大小小的Bug,长此以往,开发者认为测试者是在故意找茬,两者的矛盾慢慢就会产生。


    敏捷之前项目中也有开发和测试,就如上文所说矛盾不少,比如测试测出一个bug,提单给开发,开发看了觉得这不是一个bug,实际业务过程中根本不会有这样的操作方法。还有测试提了一个问题单,开发在下面回复已解决,测试回归问题单的时候发现这个问题还存在,就质问开发这个问题没有解决还存在,开发肯定会说这个问题我已经解决了,是不是你的程序版本不对,重新构建一次,测试重新获取最新程序还是如此,开发因为任务重,同一个问题老是提过来肯定就会觉得烦,这样来几次就有可能吵起来。反正到最后开发觉得测试能力不行就只会找茬,真正的问题没有测出来,尽纠结一些无关重要的问题。而测试觉得开发的功能质量不行,不支持他们的工作。

以前并没有独立的产品经理来写需求,一般都是开发人员兼写需求,然后给测试人员测,当出现需求方面的理解不一致的问题,肯定都是开发人员更有理,就算测试人员找到几个不合理的需求,开发人员通常也不会虚心接受,反而觉得是在找自己的茬。所以在团队中独立出来产品经理负责所有需求是很有必要的,这样产品经理、开发、测试三者之间形成三足鼎立是比较好的局面。

一般来说测试人员都不会自己从SVN下载代码编译生成程序,然后进行测试。而是开发人员把编译好的程序和升级的数据库脚本拷贝到服务器的公共文件夹,然后测试人员再从服务器拷贝下来,数据库脚本在测试库上执行,经常会出现开发人员漏拷程序文件和数据库脚本,这样测试的结果肯定失败,然后开发找了半天原因发现只是漏了某个程序文件,然后就再循环一次。如此方式双方协作的效率很低,浪费了大量时间。

还有就是开发在完成功能后,并没有仔细进行自验证,只要代码编译通过了,一些明显错误没有修正就丢给测试去进行测试,那测试随便点两下系统就走不通了,只好打回给开发,一个需求测试用例跑完得反反复复好几次。

所以开发与测试之间要想好好协作,得双方需求理解一致、运行程序一致、运行环境一致、数据库一致,还要解决测试人员获取测试版本的方便性。

为了保障开发和测试对需求理解一致,我们在敏捷过程中通过计划会、测试用例评审和开发ShowCase这几个关键活动保障。计划会中产品经理讲解需求,开发和测试都会参加,如果需求理解不一致的地方就马上沟通由产品经理把关。到测试用例评审的时候,需求细化成一个个测试用例,这样让开发和测试进一步深化理解需求达成一致。到开发完成功能给测试Showcase,测试再一次核对开发实现功能与需求是否一致,明显不一致的地方当场指出来,等开发人员修正后才提交给测试进行测试,这样就基本能保证测试一次性就能跑完这个需求的所有测试用例。

运行程序、运行环境、数据库保持一致,这个靠手工的方式是很难不出错的,最好是通过一些工具来保障。我们团队是使用Jenkins来做持续构建,开发人员完成功能开发,然后提交代码到SVN,Jenkins检测到代码库变动,自动拉取最新代码进行编译构建、发布程序,测试数据库也自动还原成与开发数据库一致。

我们团队ShowCase的具体过程是这样的,开发完成功能提交代码后就通知测试进行ShowCase,这样时候持续构建已经生成了最新的环境,然后开发在测试环境上向测试人员进行功能展示,开发会按照需求把自己开发的功能都详细演示一遍,如果演示顺利通过测试人员则回到座位进行用例执行,如果演示没通过开发人员则继续修改代码完善直到演示通过为止。为什么开发一定要在测试环境上进行ShowCase,因为如果开发人员用自己的代码进行演示的话,还是有可能会出现代码效果与自动构建的程序不一致,所以为了避免这种情况,开发最好是在测试环境上进行演示。同样测试执行用例后产生的BUG,测试会提问题单,问题单要有详细的操作步骤与界面截图,然后开发人员解决BUG后要对此BUG进行根因分析,是代码逻辑错误还是需求理解问题,方便以后对BUG进行分析。BUG解决完后打回给测试的时候,开发也要进行ShowCase。

总之,现在觉得团队中开发和测试之间的关系还比较好,协作也很流畅,现在看来确实还是方法不对,虽然知道问题的原因但苦于找不到对症下药的办法,如果你的团队中也有类似情况可尝试一下ShowCase这个方法也好。

敏捷开发系列文章目录

【敏捷】7.showcase,开发中必须引起重视的小环节的更多相关文章

  1. showcase,开发中必须引起重视的小环节

    有人说,测试者来自火星,开发者来自金星.这是因为软件测试员和软件开发者就好比一对冤家,里面的缘由说不清也道不明.开发代表着创造,而测试则代表着摧毁,因为测试的目的就是以各种方式不断地从开发出的产品中发 ...

  2. 敏捷开发中的sprint是什么意思_百度知道

    敏捷开发中的sprint是什么意思_百度知道     敏捷开发中的sprint是什么意思    未成年RB21 | 浏览 4208 次    推荐于2016-02-27 15:19:02     最佳 ...

  3. Scrum Mastery:产品开发中如何优化产品价值?

    您是否在开发对组织来说有价值的产品?如何判断产品是否有价值? 如果没有经常提出这两个问题,那么您可能忽略了产品价值方面的问题. 产品是目前工作所要达成的目的,是组建团队的原因.产品也是你选择Scrum ...

  4. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

  5. GIT在iOS开发中的使用

    前言 在iOS开发中,很多公司对项目的版本控制管理都使用了git,当然也有部分公司使用的是svn.当年我最初接触的是svn,觉得使用起来挺方便的,但是每次切分支都需要下载一份新的代码起来,这实在太麻烦 ...

  6. IOS开发中UI编写方式——code vs. xib vs.StoryBoard

    最近接触了几个刚入门的iOS学习者,他们之中存在一个普遍和困惑和疑问,就是应该如何制作UI界面.iOS应用是非常重视用户体验的,可以说绝大多数的应用成功与否与交互设计以及UI是否漂亮易用有着非常大的关 ...

  7. 谈敏捷,谈开发 --《Agile Software Development》读后感

    谈敏捷,谈开发 --<Agile Software Development>读后感 北航计算机学院 110616班 11061171 毛宇 联系方式:maoyu815930@sina.co ...

  8. python开发中常用的框架

    以下是15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Django 应该是最出名的 ...

  9. iOS 开发中常见的设计模式

    最近有小伙伴问到在iOS开发中的几种设计模式,这里摘录一下别人的总结(因为已经感觉总结得差不多了,适用的可以阅读一下) 首先是开发中的23中设计模式分为三大类:1.创建型 2.结构型 3.行为型 (i ...

随机推荐

  1. php数据结构之二叉树

    树是一种比较重要的数据结构, 尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之 分,其次序不能任意颠倒. ...

  2. Hadoop HBase概念学习系列之HBase里的长表VS宽表VS窄表(十五)

    有时候啊,HBase表的设计方案通常,还会考虑如下一些因素,当然,这只是考虑范围里的部分呢. 更多的行还是更多的版本?后者使用了HBase自带的功能.但是需要在列簇中定义最大版本数,这样做可能有风险. ...

  3. session过期,拦截ajax请求并跳转登录页面

    1.方法一 :1.1使用filter 和ajaxsetup 对ajax进行拦截并跳转登录页面 public void doFilter(ServletRequest request, ServletR ...

  4. React & TypeScript

    之前看了一下 TypeScript 的知识,但是一直没有上手,最近开始结合 React 和 TypeScript 一起尝试了一下,感受还是很好的,所以写一下笔记. 环境配置没有参考其他东西,就是看了下 ...

  5. Java基础知识强化107:DecimalFormat

    1. 引入: 如何控制输出数据的精度? >1. 使用Math.round方法 (1)Java如何把一个float(double)四舍五入到小数点后2位,4位,或者其它指定位数 ? 答:比如,如下 ...

  6. vue2.* 事件结合双向数据绑定、模块化以及封装Storage实现todolist 待办事项 已经完成 和进行中持久化 06

    ceshi.vue <template> <div id="app"> <input type='text' v-model='todo' @keyd ...

  7. 随手练——Uva-11584 划分成回文串(区间DP)

    思路:dp[i]代表到第i位的最小值,枚举它的前几位,求出最小值. 转移方程:dp[ i ] = min(dp[ i ], dp[ j - 1 ] + 1 ) ; 本来觉得,代码加深部分可以提前bre ...

  8. DevOps 解读

    本文为 转载文章, 非原创 DevOps DevOps(Development和Operations的组合词)是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化.运 ...

  9. (第一章)改善JavaScript,编写高质量代码。

    根据<编写高质量代码改善JavaScript程序的188个建议>这本书,来记录我目前所了解的建议方式. 建议1:警惕Unicode乱码 根据ECMA标准规定JavaScript语言可以使用 ...

  10. 微信授权获取用户openid前端实现

    近来,倒霉的后台跟我说让我拿个openid做微信支付使用,寻思很简单,开始干活.   首先引导用户打开如下链接,只需要将appid修改为自己的就可以,redirect_url写你的重定向url   h ...