3.1.16 并发操作的测试探索
这里用一个例子来介绍并发操作会发生什么样的缺陷。
案例3-15:博文系统。
图3-2 博文审批系统
被测系统是一个需要审核员审核的博文系统。注册该网站的会员可以在博文上发布博文,但是发表的博文必须经该网站的审核员审核通过后,才可正式发布到网上去。在这个产品中,网站会员具有的权限是:
- 书写博文,并提交给审核员进行审核。
- 对审核员退回的博文进行修改,然后重新提交。
- 对已提交未审核通过的博文可以随时进行修改或删除。
审核员具有的权限是:
- 审核通过,博文正式发表在网上。
- 审核退回,审核员需要书写退回理由。
博文审批系统如图3-2所示。
设想可能会发生的过程(见图3-3),审核员A正在审核一篇博文,这时书写这篇博文的作者B觉得这篇博文不太合适,已将它删除。此时审核员A进行审核通过或者审核拒绝时会出现什么情况?希望出现的情况是:在审核员A进行操作后,系统会出现相应的提示信息“该博文已经被发表者删除,请与作者联系!”的提示信息。然而在软件测试过程中经常会出现数据库发生错误,页面显示系统调用的英文错误日志信息。
再进行一次探索(见图3-4),比如这时审核员A和B同时对同一篇博文进行审核,审核员A进行了一次审核通过的操作,过了几分钟后,审核员B进行了一次审核退回的操作,期望审核员B看到的也是一条友好性的提示信息:“该博文已经被审核员A审核通过,请您与审核员A联系!”,而不是在页面中出现一些用户看不懂的英文错误日志信息或者这篇博文被操作的审核员B退回了。上述例子是审核通过在先、审核退回在后。同样,可以考虑审核退回在先、审核通过在后的情形。
图3-3 删除与审核之间的并行冲突
图3-4 审核之间的并行冲突
3.1.17 页面刷新功能的测试探索
几乎所有人机交互页面都具有刷新功能。在网络信号不强时,用户可以浏览存在缓存上的内容,网络一旦畅通,页面变化后,用户通过按下【刷新】按钮,就可以及时地看到最新页面的内容。但是,刷新功能的存在往往给产品带来一定隐患,暗藏着一些缺陷。下面通过两个案例进行介绍:
案例3-16:创建后的刷新。
用户进入表单填写页面、填写内容、然后提交表单,页面出现“表单数据提交成功”的提示信息。在这个提交成功的页面上按下浏览器上的【刷新】按钮,页面会出现英文提示的数据库错误日志,大致内容是表单中的某某字段不允许相同。显然,在刷新的时候,系统把表单数据又重新进行了一次提交。正确的处理办法是:刷新后,不再重新提交数据库,应该告诉用户不允许同时提交相同的信息。
案例3-17:删除后的刷新。
用户查询到一条记录,单击【删除】按钮,页面出现对应“记录删除成功”的提示信息。在删除成功的页面上按下浏览器上的【刷新】按钮,页面用英文提示数据库或程序中出现了空指针异常的错误日志。显然,在刷新时,程序对同一条记录又进行了一次删除操作。正确的办法是:不再重新删除记录,应该告诉用户删除的记录不存在,无法删除。
3.1.18 不常用功能的测试探索
这里还以表单提交页面举例。一个表单提交页面中往往会出现2~3个按钮(Button),一个是【提交】(Submit)按钮,一个是【重置】(Reset)按钮(这个按钮往往在有些页面被删除),还有一个是【取消】(Cancel)按钮。对于【提交】按钮,几乎每一个测试工程师都不会遗忘,而对于【重置】和【取消】按钮,可能无人问津,而在操作【重置】或者【取消】按钮,往往会发现一些隐藏的缺陷。
案例3-18:恢复出厂设置。
机顶盒软件有一个功能为“恢复出厂设置”,这个功能在产品第一个版本发布时测试过,并且当时仅发现一个很小的缺陷,并得到复测通过。近两年来,产品已经从1.0更新到4.1.2,但是由于考虑到用户使用“恢复出厂设置”的情况很少,所以没有再进行一次回归测试。在版本4.1.2发布后不到一个月,有一个用户提到使用“恢复出厂设置”有些设置没有被恢复,而这些设置经开发人员定位后发现,大部分都是从第V3.2.1版本中引入的。
顾翔凡言:
敏捷具有适用性,即使用了敏捷,也不要做成假敏捷,掌握敏捷的真谛。