多年来一直在做软件测试。我遇到过刚开始工作的测试人员,有一些很资深很优秀的测试人员,也有很多长不大的测试人员。很多测试人员技术功底深,操作能力强,但很难发现问题。为什么?让我们谈谈如何进行良好的测试以及需要开发哪些能力。先不谈工作态度和技术背景。做任何工作都必须有良好的工作态度。如果只想混日子,不管做什么工作都不会进步。技术背景当然也是需要的,测试人员可能没有开发人员那么深。比如在开发某些协议的时候,开发人员往往已经背熟了rfc,而测试人员不需要那么熟练。那么,除此之外,测试人员还需要培养哪些能力?我遇到过很多非常渴望通过案例的测试人员。如果一个案例因为某种原因被阻止或失败,他们都表现出沮丧,或者嘲笑开发人员,认为这给他们的工作带来了麻烦。如果一个案子顺利通过,他们都喜出望外,觉得自己终于完成了一项工作,可以跟经理交代了。但是高级测试人员不是这样的。他们渴望的不是通过一个案例,而是通过这个案例帮助开发者发现更多的问题。当问题出现时,他们会感到兴奋,而不是沮丧。他们会追根究底,调查为什么会存在这个问题,如何解决这个问题,如何改进测试计划以发现更多类似的问题等等。当测试人员急于完成一个案例时,往往会下意识地忽略掉很多本该发现的问题。只要能继续经营,不出现重大错误,他们就不会主动找错误。记得某部门有个老外,刚来的时候反馈了很多bug。大家发现他报的很多bug以前都遇到过,但是因为不影响测试过程,所以不认为是bug,就忽略了。但其实有些bug是很严重的问题,比如系统的CPU突然被长期hack占用,内存泄露,状态显示与真实情况不符等等。到了用户身上,就会成为用户投诉产品的一种可能。那个老外也曾经指导我做平台集成测试。在他的指导下,我在两周内报告了十多个错误。我记得很清楚的一个是扩展卡上的以太网端口与主机上的以太网端口的顺序相反。主机上的网口从左到右递增,而扩展卡上的网口是右1左2,机器上没有标注。这很容易导致配置错误。当我第一次遇到这个问题时,我以为是我的问题。为什么我没有配对?但是老外说你也是用户,你不配对,用户就不会配对。说到用户,这一定是个bug。很多人不喜欢做集成测试,因为软件还没有准备好,测试用例运行不流畅。当我发现这么多bug的时候,真正的case一个都没真正完成。我坚持安装和基本配置。但我一点也不气馁。反而在过程中发现了很多问题,对最基本的系统启动和安装也有了很多深入的了解。一个测试人员的快速成长,不是通过顺利完成测试任务,而是遇到很多问题,在问题中寻求成长,在问题中寻找答案。测试人员的一个非常重要的品质是他们欢迎问题并且喜欢发现问题而不是完成测试。我发现资深测试人员都有自己良好的测试习惯,我曾经将此视为我所学到的最宝贵的财富。但是当我想把它传递给其他测试人员时,他们却嗤之以鼻。我有个同事,把所有操作都提前写在文档里,用copy-paste输入命令。这样就可以完全重复测试过程,不存在人工输入错误的问题,从而实现测试过程的重现。输入命令时,他会打开实时日志显示和告警显示,并使用工具记录所有命令输出。每次输入命令,他都会检查是否有问题。如果有问题,他会马上分析问题的原因,考虑是不是bug。很多测试人员只是在出现重大问题时才想检查记录错误,比如调用失败,或者机器重启,或者整个测试结果与预期不符。我刚开始测试的时候也是这样。这样往往无法判断错误是什么时候发生的,发生了什么操作,只好重新来一遍。如果不是不可避免的问题,也无法解释清楚。很多测试人员在测试计划上写了一套,自己做一套。由于测试计划和执行不是同时做的,在执行过程中发现了一些问题,调整了测试步骤,但没有及时更新计划,没有记录操作步骤。当你发现问题时,你必须回忆你所做的步骤,这是浪费时间。如果没有问题出现,则根本不记录测试步骤。这些问题看似简单,但影响却不小。因此,在平时的测试工作中,有意识地培养自己良好的测试习惯,是成为一名优秀的测试人员非常重要的品质。资深测试人员总是把自己当成用户,喜欢评论软件给用户的感受。这是很多测试人员不敢做的事情。在测试报告中,我们只关注报告了多少bug,这些bug有没有被修改,而并不关心测试人员对软件的评价。其实这些评价对于开发者来说是非常重要的。测试人员通常可以感觉到系统的最薄弱点在哪里。比如错误的系统内存保护机制导致系统频繁崩溃,系统层次过多,交互问题很大,系统出现瓶颈,性能无法提升等等。软件人员只有零星的bug,却无法得到整体的感受。这些反馈对于系统架构师和开发人员改进系统、提高产品质量非常重要。一个好的测试人员应该永远站在用户的角度,表达自己对软件和产品的感受。高级测试人员喜欢与软件人员结对工作。因为软件人员对软件的架构比较清楚,所以可以很快定位出现的问题。从软件人员对开发过程的描述中,也可以提前判断出哪里容易出现bug。作为该软件的用户,测试人员可以快速反馈他们对使用该软件的感受。让开发者懂得测试,也可以帮助开发者更好地理解用户的需求,深入了解软件的使用方式。有些开发人员从未进过实验室,也从未使用过他们编写的软件。这是非常非常错误的。一个好的测试人员会与开发人员交朋友并与他们一起工作。敏捷的拥护者说,测试人员应该分布在开发人员中并与他们密切合作。这个我也不是很认同。测试人员之间的交流更重要,测试人员不能被软件实现所束缚。这是有限制的。拆散测试人员,测试人员在团队中往往处于劣势,很容易成为开发人员的附庸。开发人员让他们测试什么就测试什么,开发人员认为问题就是问题所在。测试人员很难成长。所以,和软件人员一起工作,是测试人员有足够的测试经验,应该是一种平等的合作。执行测试有点像探雷,需要一步一个脚印,谨慎前行。目的是找到我的,而不是通过。
