测试执行过程中,测试人员在大多数时候面对的是“是非判断”。即对照需求(包括需求文档、原型系统、用户字典、设计文档、其它参考文档等),来判断被测系统的行为是否正确。但实际上测试人员也有许多需要做出“非是非判断”的时候。而这种能力往往对于“测试质量”(指如果将测试作为一种服务,提供给需要者的服务质量)更为关键,也更难培养。本文将分为两大部分来表述笔者对于如下两个问题的理解:
(1)测试执行过程中有哪些“非是非判断”,它们为什么重要?
(2)这些“非是非判断”能力可以如何培养?
“非是非判断”之一:难以重现的问题
请回忆如下手工测试的场景:你正在执行测试,发现了一个缺陷,却很难重现。这时候你面对的就不是一个判断题了(即是不是缺陷的判断),而是一个证明题,要证明在什么样的前提条件下,如何经过一步步的演绎,程序在此场景下一定会出错。
解决这类问题为什么是重要的呢?因为大家最害怕的是风险,而难以重现的问题在我们没有重现它之前都蕴藏着无法把握的风险。我们知道风险带来的影响受到两个因素的影响,一个是风险发生的概率,二是风险带来的危害。难以重现的缺陷虽然发生概率也许比较低(也不一定,因为也许只是你没有发现它出现的必要条件,而此条件有可能是经常发生的),但如果后果是严重的,那它带来的影响可能并不小。所以作为第一现场的目击者,测试人员最有责任和义务去多花一些时间精力试图重现它。对于一个可以重现的问题,它的危害往往更容易被相对准确地度量。所以即使这个缺陷最后被决定不予修复,测试人员也不要觉得气馁。因为这个不予修复的结果是经过论证的,与无法重现而直接取消是不一样的。我比较认同Cem Kaner对于测试的定义“Software testing is an empirical technical investigation conducted to provide stakeholders with information about the quality of the product or service under test.”即,软件测试是一个为了给干系人提供关于被测产品或服务提供质量信息而进行的以观察或实验为根据的技术考察工作。所以测试的价值是提供有价值的质量信息,暴露风险,而不是做决定或者直接产生改变。
“非是非判断”之二:可以重现,但不容易解决的问题
请再回忆如下自动化测试的场景:你的某个自动化脚本没有语法错,也可以运行,但结果就是不对(明明正确的结果却被误报出错)。例如,我现在手头还搁置着这样一个下载查询结果到本地,结果比对文件名总报失败的脚本问题。又如,执行性能测试的时候出现了异常的服务器自动重启。这两种问题都可以反复重现,但通常你是第一次碰到,你想不通,也没有信心可以解决。这时候你面对的也不是一个判断题了,而是一个应用题,要找到产生这种差异的根源,并且试图解决。
解决这种问题的重要性比较明显。因为不解决它们,你对于它们提供的信息就没有信心。你没有信心,你就不能给你的干系人信心。从悲观的角度看,这种问题要耗费我们许多的精力,我们也不知道何时才能找到正确的方向和结论。从乐观的角度想,能够重现的问题都是好问题,解决它只是早晚和ROI的问题。
其实,测试人员在测试执行过程中会碰到的“非是非判断”还有很多,在非执行过程就更多了。如需求的学习、参加设计评审、编写测试计划和进行测试结果分析等等。所以,培养测试人员解决“非是非判断”问题的能力就成为一个值得思考的问题。
如何培养解决“非是非判断”问题的能力?
首先,要意识到自己有薄弱环节需要加强
一般测试人员在经过一到两年的工作之后,对于被测系统的需求有了一定了解,对黑盒测试常用的方法和技术有了一定运用,加上一些责任心和细心,已经能够独立地负责一些测试了。但是在碰到一些棘手的问题,如上面提到的“非是非判断”的时候,往往有些手足无措。感到手足无措是正常的,但是请不要把这些问题当成一个个特殊的问题,然后告诉自己“这个问题我从来没有碰到过,所以我不知道如何解决是正常的。”而是要透过这样一个一个比较有挑战性的问题,看到自己在哪些方面还需要大力地投入和改进。也许是对架构的理解、也许是对设计和编码的了解、也许是多样的测试手法、也许是综合考虑问题的思路。。。
其次,要珍惜碰到棘手问题的机会
前阵子我在小区里散步,走到一棵枇杷树下,抬头看到高一些的枝头上挂满了浅黄色成熟的枇杷,略矮一些的树枝上残留的枇杷多半是半青半黄的,而最低的枝头已经没有枇杷了。这象极了我们工作时,有些事情是我们举手之劳,轻易就可以完成的,正如去摘取那低处的枇杷。有些事情我们需要努力去蹦、去跳才能够到,正如摘取那略高处的枇杷。还有些事情是我们觉得有更高的价值,如那高处最甜美的枇杷,但以我们现在的能力,光多蹦几次也无济于事,所以我们需要手脑并用,去创造一些新的条件才可以做到。如通过一些工具武装自己,或者借用一些资源等。这样想来,碰到超出我们能力的棘手问题的时候,我们是否应该从更乐观的一面去看待它,把它当成那高处的枇杷呢?
当然,工作中有时迫于时间的压力,心急是难免的。但急是解决不了问题的,所以我们要用冷静理性的思考来缓冲自己迫切需要解决问题的情绪,要及时在感觉不对的方向停止前进,避免南辕北辙。更多的时候,我们需要培养自己及时停止在错误的方向前进的能力,而不要侥幸地期盼一下子就找到正确的方向。
如果你很少碰到棘手的问题,那恐怕你要刻意地去寻找一些这样的问题了。因为人一般是会倾向于蜗居在自己的舒适区里自我感觉良好的。但进步往往要开始于一些你感到不舒服而希望改变的地方。可喜的是这样的问题并不难找。
再次,运用系统思考方法来锻炼自己认识问题和解决问题的能力
即使有多年的工作经验,工作中有时我也会手足无措,感到自己面对的是一个小时候弄乱的毛线球,左拉右扯找不到解开打结的关键,甚至越来越乱。但当我有了这种感觉后,我一般让自己喊停,不再对着计算机快速地输入和快速地试错,而是停顿手上的动作,开始更多的思考和整理。我发散地想各种可能的因素,排除一些不可能的因素,重新理解各种已知的信息,重新审视我的思路和操作过程,分解大问题到小问题,逐步验证我的假设和实际结果。。。我相信,计算机不会骗人,解决复杂的计算机问题不能靠碰,也不能仅靠我脑子里原来已有的认识,而要临场学习更多的东西。但每次解决一个棘手的问题,我就得到了对于问题本身的新的认识,也掌握了解决它的至少一种方法。更重要的是,我更多地了解了自己,也为日后摘取更高处的枇杷在自己脚下多垫了一块砖。