如何有效地与开发人员一起工作(二)

现在什么问题变小了?

为什么我要这么麻烦呢?看起来我是想去巴结一些朋友。朋友是好的,但是公司不会为我的社交生活付钱。公司给我报酬是让我使用一部分权力来达到某些目的,一种减少问题的方法。什么问题?

一般而言,摩擦。
我遵照John
Daly的原则,不断地问自己:“我做测试不是找bug是做什么?”摩擦会减缓进度。开发人员和测试人员的一些典型摩擦浪费的时间其实可以更好地用在找bug上。
我的这种方法还帮助解决其它的问题。
找Bug的成本高、找得太迟。
如果一个bug能尽早发现,总是会比等到开发人员已经忘记了这个问题相关的内容时再修改的成本要低、修改速度要更快些。同时也可以避免正式的bug跟踪数据库的管理成本。

开发人员不测试。
对开发人员普遍的抱怨是他们根本不会自己尝试一下就“把最新的build版本扔过墙来”。一测试就停掉了,因此是不可测的,它们又被扔回去。没有意义的工作:浪费时间。
一个类似的问题是开发人员声称一个bug已经被修正了,但是最简单的测试就能揭示bug仍然存在。我曾经见过一个程序员把一个6行代码的函数重复修改了4次,每次都会引入一个明显的问题。明显看到他根本没有对自己修改的程序进行任何的尝试。
看起来我把问题弄得更糟糕了,因为我让测试人员把这个程序员束缚住了,每次修改都及时进行测试。是否我没有给开发人员足够的时间测试?不是的,因为我改变了这里的经济学。在这之前,程序员如果节省了10分钟但是浪费了你两个小时,那不会对他造成任何损失。但是现在会了:那两个小时的浪费意味着更多的private的bug会变成public的bug。他会有更多的积极性去跑那些你为他构建的自动验证测试(“冒烟测试”),在把代码交给你之前他会尝试测试新加的功能和修改的bug。他会跟你讨论怎样的分工是有效的。

“请为我debug一下这个问题”
开发人员通常要求测试人员为他们做很多debug的工作。他们会要求具体的测试用例即使是只有几个有限的步骤。他们会要求要对不同输入的测试的扩展文档即使是他们可以自己有效地尝试进行。
同样地,这个问题也得到了减轻,因为浪费你的时间也会使程序员付出一些东西。更进一步地,因为反馈的循环很紧凑,你只需要给开发人员展示错误是什么,而不需要填写详细的bug报告,而这些报告可能要等上3周的时间开发人员才会看到你为开发人员debug的成本降低了。
不知道什么是最新的。
测试员通常会抱怨他们不知道什么是新的编译版本中的内容。所以他们不清楚应该测试什么东西。有时候我们没有考虑到这点:对于每个东西都及时更新并通知每个人实在是太麻烦了。有时候则是故意的:开发人员迫切希望增加这个新的特性,但是没能得到批准,然而他们听了Grace
Murray Hopper的演讲和她的口号“得到宽恕比得到许可更容易”,所以增加了新特性。(注:海军少将Grace Murray
Hopper,已故,在计算机的早期阶段。她被认为是第一个发现计算机bug的人,发现一个蛾虫躺在 Mark I
计算机里。(有些人对这个看法提出一些质疑。))
对于一个与你一起工作的人很难会欠缺考虑的,尤其是他是帮助你把问题阻止在新特性处于private的状态时。同样你也很难对这样一个人隐瞒你的恶作剧。

“停止要求那些愚蠢的文档。”
测试人员在判断产品有没有做它要做的事情之前,需要知道产品应该做的是什么。程序员不会很乐意提供那些文档。

当工作在一起的时候,更多的信息能被非正式地流转。那也许不是很理想,因为比你后来的测试员还是什么都不知道,但是比什么都没有要好。(注:顾客也会什么也不知道,但是现在一般人认为他们通过尝试系统的功能特性来学习和了解,而不是通过阅读测试人员需要的详细的文档。)作为测试员,我也通过自己编写文档来贡献自己的价值(把非正式的信息转成正式的信息)。(这与Coplien的唯利是图分析者模式类似)

“请做这些不是你的工作的事情。”
测试组看起来在收集令人讨厌的、困难的、往往阻止它们做真正的测试的工作。尤其是测试组被冠以QA的头衔时,一个很模糊的术语,任何不想维护配置管理系统或创建系统构建版本的人都会同意QA应该做这些事情。(注:确实,这里我为了效果而夸大了。我作为“构建独裁者”超过了一年的时间,我没有发疯,最少在一开始的时候没有。)测试人员帮助开发人员可能导致方向的迷失,例如,编写一些辅助的代码。
你从我的技术作者的经验可能已经猜想到我不反对测试人员帮助项目组。但是,一旦bug修改成为开发人员的例行仪式,John
Daly的原则会更让人着迷。

不可测试的代码。

测试人员通常会碰到很多代码的问题是很难重现的,但是用户可能不小心就暴露了这个问题。或者他们不清楚自己做了什么操作。或者不清楚代码究竟做了什么事情。当开发人员重视你的bug的时候,他们更倾向于添加增强可测试性的辅助代码。通常一点点就能帮了大忙)。

开发人员缺乏对bug的反省。
当我与开发人员紧密地工作在一起的时候,他们学到了我检测bug的技巧。他们会更加有能力防止那些我发现的bug的再次出现。这种方式下,我可以“顺流而上”,帮助开发人员设计和计划而不是仅仅对于已成事实的软件进行测试。我不会把这些东西推给开发人员;我会等他们来问。
我可能会引发什么问题?
每个解决方案都可能会带来潜在的新问题。
你必须要早点开始
如果你等到代码都写好了并放到公共的地方了才开始你与开发人员的工作,则剩下的就只有bug的修改了,你不能得到很大的益处。
引发对测试人员和程序员的比例的关注
考虑我的这种方法与“扔过墙”的测试方法的区别。
更多的中断驱动。为了维持好的关系,当程序员需要你的帮助时你要快速地反应。在传统的测试中,你拥有更多的自由去安排你的测试任务。
更加依赖结构的知识。在两种类型的测试中,你都必须从用户的角度看一个功能特性。在传统测试中,对功能特性的结构或整个系统的架构的理解会对你的测试有所帮助;它加强了你的以用户为中心的测试,并且有时候允许你忽略某些不必要的测试。但是,当你与开发人员紧密地工作在一起的时候,这些东西的理解就会更加有用:它们是有效沟通的关键并且也同样重要地让开发人员感觉到有效的沟通。
这里我需要小心说明。我不认为你需要成为一名程序员才能了解关于结构的知识。我曾经看到过很多非程序员能把这些学得很好。我曾经看到一个很棒的程序员高度赞扬一名非程序员因为解释结构给他们听需要他阐明他的思想。
这些区别意味着什么呢?
假设测试人员与开发人员的比例是1比10,而你尝试跟每个开发人员都紧密地工作在一起。
一般请求帮助会以不可预知的间隔发生。你需要安排好帮助他们的顺序。但是那自然会降低你对某些人的价值,所以下次他们就不会那么愿意叫你帮忙了。
你不能跟上每个程序员的子系统的结构。你会需要程序员解释一些东西,而这些东西在他们看来你应该早就知道了。你可能需要他们再次解释某些东西,而这可能会激怒程序员。(在他看来,他刚刚给你解释完。从你这边看来,介于7个不同的任务之间,很容易把刚才解释过的东西忘记了。)或者,更糟糕的是,你可能记住的一些东西不再是有效的,导致错误的测试或误报的bug。
在这种情况下,测试会退化成“扔过墙的测试”,因为在这种局限下“扔过墙的测试”会工作得更好些。为了避免不好的感觉,你也许倒不如就按这种方式测试更好些。
假设比例是1比3左右。则容易处理些,但是仍然可能会让开发人员失望,因为不能像他想的那样测试(意味着太多private的bug被忽略了)。你需要谨慎地处理这些问题。注意确保不要过分承诺,导致不能兑现期望。我曾经那样做过。很不好,比不紧密工作在一起还要糟糕。要尤其注意识别出开发人员代码的风险区域,或者高风险类型的bug,明确说明那些是你将要重点关注的区域。
因为我知道开发人员很容易寄希望于测试人员,我更喜欢被指定与一名开发人员紧密工作在一起,而同时用传统的方式兼顾其他两名开发人员。

你不能从秘诀中学习
假设测试人员和开发人员干得很漂亮,很少bug出现在公共源代码。这样的话谁还能从这些少得可怜不值一提的公共bug报告中学到东西呢?Noel
Nyman读了本文的初稿后写到:“当我到了一个新的测试组时,首要的信息源就是bug历史。它是洞悉产品的无价之宝,并且是制定回归测试内容的依据。没有谁告诉我关于产品的信息能超过我从旧bug中发现的信息的10%。”其他评论者也指出,开发人员可能学着避免他们自己独特类型的bug,但是他们不能从看其他开发人员制造的其他类型的bug中学到东西。过程改进组也会有类似的问题。
对于这个问题我没有很好的回答,除了作为一个我愿意付出的代价外别无它法。公共的bug还是会被发现并登记。在某种意义上,它们是最好的能学习的东西,因为它们逃脱了开发人员和测试人员的眼睛,但是了解私有的bug还是会更好些。成功实施过程改进的公司(我从未在这样的公司工作过)可能会更加无私一些,在那里开发人员会更加愿意把private的bug登记进去,为了公众着想。我在下一主要章节的论点会帮助我们朝那个方向前进。我没能有幸在一家公司是能很好地做评审的,但是这样的公司可能已经习惯于共享private的bug,至少在开发人员之间。

控制Build
我曾经把这样的方法应用到相对单片集成的和自我包含的产品中:我从开发人员手中获取可执行程序然后在我的机器上执行。如果产品被分解成很多块(共享库、配置文件等。)并且开发人员不负责构建和整体地提交,或者没有实用的方法可以单独测试开发人员的每个模块,知道它是真的孤立的,跟其它模块是隔离的(尤其是包含其他开发人员在同时开发的模块时)
- 那么你就碰到了配置控制的难题了,它可能吞没紧密工作带来的好处。最好能定期获取完整的build版本。

设置了错误的期望值
开发人员可能会期望获得很好的益处但是不付出什么代价。应该小心设置他们的期望值。
你的工作是提供关于bug的早期信息。那就意味着所有的任务。项目经理认为有足够的质量的代码创建,要快速地进行。然而,如果开发人员修正bug时你在找bug,那么任务的第一部分,获得第一个可演示的代码版本并放到源代码控制中,可能会延迟。开发人员可能会认为那很恼人或不合适。
虽然你会小心的保证他的时间,但是你还是需要知道很多信息。你需要跟他讨论,或给他发送Email。这些都会占据他的时间,不可避免地使他觉得受到打扰。承诺尽量减少中断他的工作。例如,为了充分利用他的非工作时间,我曾经在开发人员吃中午饭、早餐、晚饭的时候访问他,或者在送他到机场的时候或取修理店取他的车时。但是有些时候打扰还是避免不了的。
确保你强调了你们的关系会不可避免地引发一些摩擦。你会烦人地在他认为他已经完成后发现一些严重的bug,让他感觉你为什么不能一开始就发现这些问题。他最好抱怨,即使是不恰当的抱怨,也好过“避而不理”(作为一种逃避不愉快的问题或人的方法而消失)。避而不理不是解决的办法,因为你会坚持。虽然是客气的坚持,但是还是坚持着。(我曾见这样说“我还是会坚持帮助你,即使你再也不能忍受。”)

如何有效地与开发人员一起工作(二),布布扣,bubuko.com

时间: 2024-08-22 14:04:38

如何有效地与开发人员一起工作(二)的相关文章

如何有效地与开发人员一起工作(五)

测试人员则会对程序员的自我形象造成威胁,他们会打击程序员的那些特征.他们会展示给人们看到那些抽象概念没有用,细节没有被掌握好,或者是问题还没被解决.这一点也不奇怪,然后,程序员往往会把测试员的注意力从那些基础的概念转移出去,把它看成是对他们写的代码的系统的探索,寻找代码错误.代码错误不是什么大问题.一个对代码错误不重视的程序员可能会失去一些威望,但是仍然可能会被认为是优秀的.程序员可能从来不制造代码错误,但是创建笨拙的抽象概念. 现在,对于测试人员而言,寻找代码错误只是工作的一小部分.概念上的错

如何有效地与开发人员一起工作(三)

合作可能会失败 紧密的合作关系是对时间的投资.有时候投资免不了得不到回报: 你的程序员是如此的固执以致你尖叫起来 – 只可惜很可能你的尖叫声还没他尖叫着说你固执来得响亮. 程序员可能会看起来故意阻碍或令人误解.(他也许在尝试通过使用公正的手段或不正当的手段来指示你从而节省他的时间.但是有时候他就是不可避免地粗心大意,或尝试隐藏他的无能,或其他什么原因.) 你的期望值没有达到.程序员对你做的事情不高兴. 我个人倾向于向糟糕的投资倾注更多的精力,更多的时间.那是错误的.有时候你必须承认计划失败并转向

如何有效地与开发人员一起工作(七)

选择一个有效的角色 在这一节,我首先描述一下我喜欢的角色和这个角色的日常工作.然后描述这个角色解决的问题,最重要的是,可能产生的新问题. 假设你被告知要测试某个开发人员的工作,也许是增加了一个新特性到产品中.你也许要同时测试多个开发人员的程序,但是我会在后面的章节覆盖这些复杂的情况.我假设你会在编码阶段开始工作:在开发人员开始写第一行代码后,但在它被完成之前(除了修改bug的情况外).如果你在更早的阶段介入,那会更好,但是我不假设那种情况.如果你在代码完成后才开始进入你的工作,那么这个章节的作用

在惠州惠阳上班,拿深圳的工资,你有兴趣吗?招ASP.NET 开发人员,工作地点:惠州惠阳

条件: 一.熟练掌握ASP.NET 开发,具有MVC ,EF,LINQ等开发经验: 二.熟悉DIV ,HTML,jquery等技术: 三.对供应链和电子商务方面有较高的兴趣: 四.有一年以上工作经验:有创业热情: 五.有UI设计经验优先录取: 工作地点: 惠州惠阳秋长. 公司提供住宿,工作时间自由:待遇面议(参比深圳水平): 公司简介: 本团队是美国Logiciel.INC 在中国大陆区的技术团队,Logiciel.INC具体近二十年的供应链和电子商务开发经验,行业经验丰富,软件技术实力强大,具

如何解决开发人员的工作无法量化的问题

据江边望海了解很多互联网公司都会执行Kpi考核.一线的开发人员的Kpi工作量化不仅困扰这公司的HR也困扰着开发人员自己.月底的时候如何通过有效的数据分析每个开发人员的工作内容是一个很头疼的问题.所以,很多开发人员的Kpi绩效考核是直接领导凭借感觉打出来的. 很多网络公司每年都会有职位晋升的机会.但是,开发人员在准备填写晋升表的时候发现能拿出手的数据少之又少.天天在忙,却忙的没有结果. 1.基础篇 1.1.产品线思路 开发人员是网络公司的基础资源,类似大厨手中的食材.很多时候都是在相应产品经理.公

Front End Developer Questions 前端开发人员问题(二)

问题来源:http://markyun.github.io/2015/Front-end-Developer-Questions/ 二.CSS 1.介绍一下标准的CSS的盒子模型?与低版本IE的盒子模型有什么不同的?答:标准的CSS盒子模型:宽度=内容的宽度+边框的宽度+内边距宽度低版本的盒子模型:指的是内容的宽度 2.CSS选择符有哪些?哪些属性可以继承?答:(1)类选择符:id选择符:(2)class属性,伪类a标签,列a表ul,li,dl,dd,dt注:优先级(就近原则):!importa

开发人员汇报工作的感悟

在工作中少不了工作的汇报,汇报是展示自己工作的一种方式,让大家了解你做的工作或了解你下一阶段的工作.作为程序开发人员群体,整体做Presentation的能力较弱,或许是出于以下原因: 内心深处不想做汇报,认为汇报不重要. 当众讲话较紧张,想到汇报就头疼. 汇报内容较零乱,无条理性. PPT较死板,不够活泼. 汇报前准备较少,草草结束. 以上所列原因,纯属在工作中,从周围同事及自身得到的一些感受,可能这些原因中有更深的联系,在此不做深究. 既然汇报是重要的,那么该怎么提高自己这方面的能力呢,给出

开发人员改变世界的初心

[导语]端午节期间,去乡下过节了.我父母都是农民,我是农民的儿子,他们培养两个儿子上大学,值得敬佩!我们每个人都有父母,他们都想自己的孩子可以回家与他们过过节.聊聊天.大部分父母并不期待自己的孩子赚了非常多钱之后才回去看他们.即使你身无分文,你回去了,他们依旧非常高兴.这是爱,跟钱没关系.这篇文章写得比較任意,只是有些内容可以思考. 我们在做非常多事情的时候,都面临家庭的压力,束手无策.比方非常多开发人员跟我交流,说自己真的非常想创业,想法也特别多,而且可以吃苦耐劳坚持下去.可是家人希望自己工作

SWTBOK测试实践系列(2) --你会把开发人员提交测试的版本打回去吗?

开发人员奋斗了很多个夜晚,终于把版本提交测试了.他们可以松一口气了.但是噩耗很快传来,软件没有通过测试团队的预测试(为了保证测试进程,对开发人员提交的代码进行基本功能或业务流程的验证).开发经理老王,迅速找到负责预测试的测试经理老张. 老王说:老张啊,怎么回事?出什么问题了?我们好不容易开发完成了,你们怎么不测试还把版本打回来了? 老张说:你们提交的版本质量太差,没有我们的预测试,需要重新修改后,符合我们的要求,我们才能测试.你看看我们发现的这两个问题. 老王并没有看这两个问题,而是直接质疑老张