我的软件测试之旅:(2)转变——作为专职测试人员

后来我被直接派驻客户(诺基亚网络杭州3G研发中心,现诺基亚西门子网络杭州研发中心)现场,再后来被直接买下,成为了诺基亚的员工。也正是从派驻诺基亚那时起,我开始了自己作为专职测试人员的旅程。但编程这个活动一直都伴随着我,直到现在,这也是我从来都不认为开发、测试有着很清晰的界限的原因,欲知详情请继续往下看。

  当时我们两家公司合作已经有一段时间,已经有数十位工程师在诺基亚干活,我们这一批人是专门为研发中心某个产品线的测试部门补充人力的。团队管理非常简单,我们自己公司的事务由自己的外包经理或者叫协作者经理(Collaboration Manager)管理,当然,在我们这批人和经理之间还有小组长(Team Leader)。而从做事情做项目的角度呢,我们则直接由诺基亚的项目经理来负责管理,也即由他们来分配任务、确定时间表等各种事务。

  该产品线的结构应该属于比较常见的一种,分为几个开发部门和一个测试部门,支持型的部门还有质量管理部和产品管理部、项目集群(Program)管理部等等。使用的是自己独特的开发模式,类似于瀑布模型,也即分阶段、基于文档的开发模式。一个产品的开发会被分割为多个项目集群,而后项目集群再分作多个项目,每一个项目又分割为多个子项目。通常一个子项目也即是某个或某些模块的开发任务,或者测试任务,测试和开发是独立分开进行的子项目。测试项目要等待整体的开发完成之后才开始。

  刚到诺基亚时,我颇为感慨,果然是大公司啊,真是有风范,的确很有人文关怀的感觉,我们所担心的事情都有人考虑到。当时,诺基亚的新员工都要先参加总长度两个月的入职培训,包括从诺基亚介绍、价值观等人事的部分,也包括对产品线产品的介绍,以及开发模式的介绍,以及开发、测试具体流程的介绍,总之,非常的全面,凡是未来会用到的全都有涉及到。只要保留好课堂的材料和自己的笔记,回头上手干活基本上没有任何问题。

  机缘巧合,我还在参加培训就被小组长抽调过去先参与到测试项目的工作中去了,也许是因为我看着比较顺眼吧……当时的我心中非常忐忑,不知道该如何干活,所幸有诺基亚的导师(Tutor)制度在,小组长给我安排了一位导师(在此要非常感谢她的辅导,帮助我顺利地融入诺基亚的氛围,真的非常感谢!),她教给我作为一个测试人员所要做的各种事情,给我很多的相关资料可以自我学习,也手把手地指导我执行以及分析和写测试报告等等很多很多。总之,和她配合,我受益颇多,测试项目开始不久,我就差不多已经可以独立工作了。

  我加入时导师已经在开始执行测试的阶段,于是我主要是要去理解测试计划、理解测试用例,熟悉测试工作和被测产品,掌握测试执行的各种操作命令。测试部门的知识传承做得相当不错,所有的文档都有模板和介绍,很容易就上手,知道各个部分写的是什么东西,以及如何使用。而且在测试用例中,不止包含测试步骤,通常也包括要执行的命令,和每个步骤的预期结果,以及最终的预期测试结果。测试报告也有模板,只要按照模板的要求,将测试时的环境,被测对象的各种版本信息,执行的命令和返回的输出等等各种信息都记录下来就行。

  当我渐渐地熟悉如何执行测试后,就开始对周遭事物有着各种好奇,成天都缠着导师问各种问题。一开始主要是在测试失败,或者得到一些不完全符合预期的输出时,不知道该算是通过还是失败,就要去找导师请教。慢慢地就开始问很多关于,为什么要这么设计这个用例啊,到底要测试的是什么功能,之类的问题,而导师的回答总会附上一句,“多看看功能需求说明书吧”。于是我就开始看功能需求说明书(Functional Requirement Specification),从中去理解我所测的对象所应该实现的功能。功能需求说明书也是有模板的,不过依然会出现不清楚或者难以理解的地方,这也是让测试人员很头疼的地方,因为无法确定测试的对策。最好的解决办法就是去问文档的作者,只不过这份文档的作者通常就是其开发人员(或者开发人员所在领域的专家),而他们通常都比较忙,忙着进行后续版本的开发(针对同一版本,测试总在开发完成后开始,所以测试开始时,开发人员都已经在做新功能的开发了)。

  而我的幸运则在于,当时开发那个功能模块的开发人员人都很好,是公认的牛人,而且很健谈,很愿意和测试人员交流(基于开发项目的进度压力,这一点还是比较难得的)。而且他的特点在于,除了开发自己负责的模块,他会花很多时间,多数是自己的业余时间,阅读其他模块的代码,而后是其他领域(Domain,技术领域)。他后来的发展也非常快,因为他阅读的代码很多,所以开发起来也就速度很快,了解的多分析问题也就很快、对整体架构把握也好。而我则是从他身上了解到很多该模块设计的原理,以及所要实现的功能,和服务的对象(其他模块),对我理解被测对象从而更好地有针对性地进行测试帮助非常大。

  这一个模块的测试还有一个比较特殊的地方,它其实是支持型模块,为系统内其他模块提供调试、日志相关的服务,所以测试中很必然地要针对各种情况下的记录、显示灯功能进行验证。如果直接借用现有模块来测试,会有一定的困难:首先是处于稳定性的考虑,其他模块一般都是要等到我们测试完成了才会开始使用;其次,就算有一些模块在使用,也不大会专门为了测试而频繁地修改它的代码,编译,然后提供给我们用于测试,除开开发人员工作繁忙,也还有编译和版本管理实践很花时间的原因。因此,我必须要自己开发一些测试应用程序(Test Application),这个程序里面,使用被测对象所提供的服务,并且要知道如何修改产品的启动列表,从而可以使这个测试应用程序可以在设定的时间点其中以及打印相关的信息。

我们当时所使用的测试工具也是诺基亚内部的工具部门自己开发的,说实话,相当好用。由于我们的产品具有自己的一套人机交互界面,所以只能用自己的工具来操作测试。这个测试工具自带的就有提供一个类C的脚本语言,可以很方便的写测试脚本,语言本身也很简单,上手不难,而且会写一点脚本对于测试 工作的辅助作用也很大。因而,从这个角度出发来看的话,我们并不存在完全手工的测试。

  做测试不可避免地肯定会发现软件的缺陷(Bug),发现缺陷之后需要将相关的信息记录下来,录入到缺陷追踪系统中去,开发人员会相应地收到通知。看到这里大家脑海里恐怕会浮现出一幅景象:测试人员提交缺陷报告后,过了好久开发人员终于回复过来“缺乏信息,需要得到某某模块的输出”,测试人员又吭哧吭哧地重现场景,再填好信息发过去,结果开发人员又要求别的信息,通常都要来回好几趟,才最后可能定位出问题根源,然后开发人员开始修改。当时我们的流程中对于开发人员最后的回复有一些要求的,定位出问题根源后,需要给出描述,以及计划在哪一个版本中进行修复,有一个例外,就是如果这个问题是“正常的”,不用改,那么通常会标识为“无需修订”(CNN,Correction Not Needed),打回给测试人员,结束当前的缺陷追踪流程。如果测试人员对此有异议,就好玩了,就开始打嘴仗,最后再和开发、测试的资深工程师(一般是相关技术领域的技术专家和测试专家)一起讨论定夺。缺陷修复的速度主要受到测试开发双方人员沟通效率的影响,从发现缺陷并记录下来,到定位出问题根源制定修复计划,通常以天数计算,而修复的过程,一般来说都是以小时计算,个别疑难问题稍微多花一些时间。

  有一次,我发现了一个错误,然后把现象记录下来,提交到缺陷追踪系统中,结果开发人员的回复是无法重现。于是我在测试环境中又再执行了好几次,发现问题都能够很稳定的重现,于是就再通过系统把这个信息返回回去。幸得开发人员也是态度很积极的工程师,估摸着心里很好奇,就直接来找我,于是我就在座位上给他重现,结果,居然没有重现成功!让人百思不得其解。长话短说,后来发现原因在于我之前执行的时候,都是用跑脚本的方式执行,而我们现场调试是手工执行的方式,但这两种方式的差别在哪里呢?经过仔细地分析,我们发现和测试用例的步骤有关。测试用例是要在一个会话(Session)上监听消息(产生特定消息是模块的功能之一),所以我们会先打开一个会话开启监听,然后再打开一个会话,再里面进行一些操作,然后回到之前的会话里去查看相应的消息是否有出现。而手工和脚本的差别在于,手工的情况下,我们人眼看到操作结束,就返回到第一个会话去停止监听,而后检查监听到的消息。在脚本中,为了确保操作是成功的,通常会等待一点时间,然后再切换到第一个会话执行后续的动作。但最大的区别在于,手工操作时,我们可以在测试工具中打开两个小窗口,监听和操作的会话都是处于活动状态(Active)的,而在脚本中,则只有当前会话处于活动状态。

  通过多次地现场协同重现缺陷场景,开发人员确定该问题不是被测的模块所引起的,还给了我一些建议,建议我找会话管理这一块的人来看看。后来发现这正是问题所在,通过分析之前执行的测试日志记录,包括我们现场重现的情况,对方很快就确认原因是会话超时(Timeout),为了节约资源避免浪费,每一个会话都有超时时间,超过这一时间没有任何动作的话,会话就会被关闭。而我的测试中,恰好离开第一个会话再回来,中间的间隔就超过了这个超时时长,导致会话关闭,第一个会话中的监听无法得到要监听的内容,测试结果分析的时候得不到预期的结果,测试也就无法通过了。修复非常的简单,对于会话超时处理的地方修改几行代码即可,但这个问题解决(Troubleshooting)的过程才是最艰难的地方,需要我们细心检查,发现任何可能的蛛丝马迹,甚至还要发挥想象力,将不同线索联系起来,最终才定位出缺陷的根源。

  正由于上述提到的缺陷管理时间中的沟通成本,我们一直在思索如何能够改进。一是从缺陷管理工具入手,加强它的功能,提高它的速度;二是从缺陷管理流程的角度出发,尽量简化,提高它的可操作性;三则是从组织架构方面出发,思考是否可以改变现有开发模式,拉近开发、测试人员之间的距离,使得沟通无需依赖工具也可以进行。

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

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

时间: 2024-10-27 21:37:31

我的软件测试之旅:(2)转变——作为专职测试人员的相关文章

我的软件测试之旅:(10)贡献——开发项流程

开发项流程(Development Item Process) 当时的这个Scrum试点项目身负重任,其中之一就是要探索出在新型的敏捷模式下该使用何种的开 发流程,负责人就是当时的Linux部门经理,而我则捞到了负责测试部分流程的机会.整个试点项目的人员扩张速度不错,4个人的团队维持了好几个迭代,陆续有人加入,新的测试人员在大概是第四个迭代的时候才补充进来,而后逐渐扩张到两三个团队.这样的扩张速度对测试流程的确定来说非常好,一开始我可以只考虑自己的想法,不断地尝试摸索,可以很快地得到反馈然后改进

我的软件测试之旅:(12)机遇——测试自动化培训师和教练

测试自动化小组尝试过另一款芬兰同事开发的新型框架,名字叫做robotframework,如今已经开源.这个框架本身使用Python语言开发完成,用来开发可接受性测试,是关键字驱动的测试自动化框架,支持多种测试用例的格式,我最喜欢的是使用表格的HTML文件格式.框架非常好用,各方评价都非常高,但是由于核心的开发者都在芬兰,杭州本地需要有人能够进行培训.辅导,才有可能做到快速地推广使用.于是测试自动化小组的同事参加了该框架的高级培训,以及如何进行入门级培训的培训,然后向杭州研发中心的其他同事提供培训

我的软件测试之旅:(6)跳转——追逐新鲜事物的探险者

我似乎一直都很喜欢去尝试新鲜的东西,直到现在好像也是如此,只是动力没有以前大,尽头也没有以前那么足.当时被公司派过来做外包,一开始我还不情愿,被老板悉心教育后,半推半就地接受了安排,现在想来,倒是幸运.但之后,欣然接受邀请加入测试自动化小组,主动要求担纲测试框架维护者,也都是我自己的决定.再后来,得到执行回归测试,以及之后更新回归测试自动化脚本的工作时,我也都没有推脱.而那个大模块测试的任务,回想起来也是很艰巨,用开发来做比喻,就是需求还异常的不清晰呢,你就背负着在某个时候必须交货的重任. 再后

我的软件测试之旅:(3)同期——加入测试自动化小组

刚被派遣到诺基亚不久,确切地说是刚刚结束新员工入职培训的时候,小组长问我对测试自动化是否 感兴趣,我觉得好像蛮酷的,而且还可以被派到北京去参加两天的培训,英国人授课,何乐而不为呢.这个英国人就是Mark Fewster,<Software Test Automation>的作者,这本书被认为是该领域的开山之作,详细地描述了测试自动化相关的所有细节.战略和战术.于是就这样我加入了只有两个人的兼职测试自动化小组,之所以成立这个小组是因为在国外的其他研发中心使用测试自动化的效果非常好,所以要把它引入

我的软件测试之旅:(9)行动——简化测试文档和流程

现有的各种测试相关文档都很齐备,但是已经有较丰富经验的我感觉到其中的信息有很多都是不必要的冗余,老早就想把它们给简化简化.因为我这个人总觉得,如果是没有必要的或者不需要的信息,为何一定要放在文档里呢,直接不写不就行了么?放在那里总会吸引人去看一眼,然后心想"哦,N/A.",这也是时间和精力的浪费啊!保持文档干净整洁,只记录有意义的信息,不是很好么.而且,在原来的测试管理工具中,测试用例和测试计划,都有很多不同的版本,针对的是不同的产品发布版本.版本多也好的,但问题就是有的时候时间上最新

我的软件测试之旅:(5)难点——功能改进的测试

测某一个功能很容易,但是如果被测的对象是功能的改进(Improvement)呢?例如要提高性能(Performance),提高配额(Quota)准确度,过滤以减少不必要的日志数量. 当我拿到这样的功能需求规格说明书时,我一头雾水.其实我都算是二手,这个被测大模块(多个模块组成的一种服务型模块)的测试任务(算是个子项目)是从他人手中转交给我的,他人也是刚刚接受作为这个领域的测试负责人,上手不到几个月,连这个测试任务都还没有熟悉就转交给我.于是我只能努力地去获取各种可以提供参考的信息,首先我到测试管

《Google软件测试之道》目录—导读

内容提要 Google软件测试之道 每天,Google都要测试和发布数百万个源文件.亿万行的代码.数以亿计的构建动作会触发几百万次的自动化测试,并在好几十万个浏览器实例上执行.面对这些看似不可能完成的任务,谷歌是如何测试的呢? 本书从内部视角告诉你这个世界上知名的互联网公司是如何应对21世纪软件测试的独特挑战的.本书抓住了Google做测试的本质,抓住了Google测试这个时代最复杂软件的精华.本书描述了测试解决方案,揭示了测试架构是如何设计.实现和运行的,介绍了软件测试工程师的角色:讲解了技术

一个初级码农的测试之旅(一)——初识单元测试

前言 首先说一下我自己--一个码农,准确的讲我是一名在中国最大互联网公司搬砖的初级码农.我不是计算机科班出身,一年前进入公司的时候,从未接触过web开发,没有完整的学习过数据库知识,写不出一条完整的sql语句,甚至不知道js和css到底是怎么控制页面行为和样式的--这样的人为什么可以通过面试?反正不是因为我长得帅. 背景知识 文章最初,先介绍一下我们团队的产品--阿里云持续交付平台(crp.aliyun.com),是一个旨在服务阿里云上众多开发者的持续交付平台(你可能还没听说过,但不妨一试哦),

《Google软件测试之道》—第2章2.1节SET的工作

第2章 软件测试开发工程师 Google软件测试之道 C:\Documents and Settings\Administrator\桌面\页面提取自- 9780321803023_book.jpg 在理想情况下,一个完美的开发过程是怎样进行的呢?测试先行,在一行代码都没有真正编写之前,一个开发人员就会去思考如何测试他即将编写的代码.他会设计一些边界场景的测试用例,数据取值范围从极大到极小.导致循环语句超出限制范围的情况,另外还会考虑很多其他的极端情况.这些测试代码会作为产品代码的一部分,以自检