2、开,暴露问题
开的主要目的是使用一切手段发现问题,只有先发现了问题,才能找到问题的所在,最终解决问题。开,主要有以下事情要做,那就是:
◆ 怀疑一切
◆ 换位思考(模拟用户行为)
◆ 创造条件,把问题放大
2.1 怀疑一切
开讲得是广度,在这里没有什么是不可能的,本着怀疑一切的态度去列出任何可能的甚至是不可能的情况。在此时,要假设拿到手的软件就是一个垃圾,一无是处,而你的任务就是去蹂躏这个软件,用所有想得到的手段暴露出这个软件的所有弱点。基本上来说,怀疑的越多,越容易发现软件的缺陷。有些BUG之所以很难重现,很大程度上就是因为没有怀疑足够多的东西,有些路径没有走到。
测试之前,肯定都会先写测试用例。对于每一种类型的软件,总有和这种类型相匹配的一些重点嫌疑对象,这些重点嫌疑的东西,要重点测试。Windows上的所有带有用户界面的软件,都是事件驱动的。大多数软件,驱动者就是操作软件的用户;但对于一些网络的软件,例如IM软件,驱动者除了用户的操作之外,还有一个更重要,也是比较容易被忽视的就是网络数据的驱动。有些问题,虽然是在通过鼠标操作时候发生了某些异常,但实际上可能是这段时间内收到了某些网络数据,出发某个流程,出了异常。所以这个时候就要尽可能多怀疑一些情况,然后分别进行有针对性的测试。怀疑的对象越多,离真正的结果就越近。
怀疑一切,要敢于去怀疑,大胆地怀疑,只有想不到因素,没有测不出来的BUG,更没有重现不出来的BUG。
2.2 模拟用户的行为
测试归根到底是模拟用户的行为,替用户把各种可能的操作都做了,把各种问题都提前暴露出来,然后反馈到开发人员手里,修改掉。
在模拟用户行为的时候,不但要模拟用户正常的行为,更要模拟用户不正常的行为,因为用户完全可能做出一些意想不到的动作。某些流程在开发的时候已经设定好,只要按照这个流程操作,绝对不会出问题。然而到了用户手中,用户的某些操作,完全可能改变流程的方向,从而导致软件产生异常。因此模拟用户的操作是极其重要的。
模拟用户操作,需要做到覆盖全面。例如一个窗口在正常状态没有问题,但如果在窗口最小化的时候,或者正在拖动的时候,有某些事情发生,是否可能会出问题?类似这种情况,都是应该考虑在内的。
模拟用户操作,还需要模拟用户端个各种条件,包括软件条件和硬件条件。
用户行为的各种可能性,可以按照不同种类列出来,然后互相组合,一一进行测试。下图是一个IM产品聊天窗口的用户行为示意图:
上图看似复杂,而且是一个乘法的关系,很容易被吓到,但实际上即使全部条件算上,基本上也还是一个可控制的范围,全部走一遍是可以做到的。
当然,实际的应用中,可能比这个要更复杂一些,这时候可以使用表格列出各种条件,互相组合起来测试,问题总会暴露出来。