【转】对测试用例中异常流的思考

设计用例最开始遇到的异常情况,就是前置条件引起的异常流。例如,不具备订购条件的用户,不能订购该服务,这种条件排列组合就会产生很多种异常场景。

  接下来遇到的异常场景就是,在操作进行中遇到的。

  

[plain] view plaincopyprint?

  1. 1)比如说操作进行时,断电、断网、死机等原因导致的信息丢失的异常;
  2. 2)订购过程中,用户或产品的状态变化引起的异常。例如商品下架或价格调整的处理;或是用户在下单后付款前,被监管等。
  3. 3)操作中应该选择的选项没有选择时的场景,例如购买产品服务时,未选择同意服务协议的场景,此时付款按钮应该灰显,无法进行付款操作。
  4. 4)通过构造URL产生的异常场景。例如用户存在某产品失效的订单,通过URL进入订单支付的页面的异常情况,此时应该提示此订单已经失效,支付不成功。
  5. 5)打开两个页面做相同操作时的异常流。例如,用户满足订购该产品的条件,用户打开两个购买服务页面A和B,当在A页面订购成功后,点击B页面的订购可能有三种可能:一是若订购的产品是周期型的,则进入续费的流程;二是,若订购的产品是永久型的,则会提示不可重复订购;三是,若订购的产品是计量型的,则可继续正常订购。
  6. 6)用户账户余额不足,充值失败的异常场景。

  最后还有一些不怎么被关注的异常。因为这些异常发生的概率极低,而且通过正常的验证方式非常麻烦。例如,订购服务打标志位的问题。我们通常的测试方法,是去验证用户做了某个操作之后,有没有成功地打上应有的标志位;但是我们会忽略掉,如果用户做了某个操作后,除了打上应有的标志位以外,还打上了非期望的标志位的异常场景。这时,我们是否要验证每一个标准位是否有被误打上。这样工作量就太大了,因为也许有非常多的标准位。面对这种情况,我认为可以通过两个步骤来保证质量。第一,将标志位分类,以期望的标志位为标准,筛选出与它关系及其密切的标志位,例如有依赖关系和对立关系的标志位,这些标志位是重点校验的对象。第二,从源头检查。找出这些标志位的值是从何而来,可以通过检查配置或代码走读来检验。

  由于实际上,普通人类的思维不可能缜密的无懈可击,不可能把大量复杂的逻辑整理得完美无瑕。这就像是小说里的“密室杀人案”,看上去是多么的不可思议,然而真相大白时的结果却是完全符合逻辑的。因此,作为测试设计人员,我们必须有良好的预见性,去摸索,并组合一些“必然”的错误。当然每一种产品都有他的特殊性,于是就存在其独特的异常场景。以上是我的一些想法,欢迎拍砖和补充,谢谢!

版权声明:本文出自fnngj的51Testing软件测试博客:http://www.51testing.com/?363937

原创作品,转载时请务必以超链接形式标明本文原始出处、作者信息和本声明,否则将追究法律责任。

时间: 2024-08-05 12:52:12

【转】对测试用例中异常流的思考的相关文章

程序设计中关于异常机制的思考

程序的运行过程从来都不是一帆风顺的,运行期间会遇到各式各样的突发状况,如文件打不开.内存分配错误.数据库连不上等等.作为一个进阶过程中的编程人员,思考和处理例外状况极为重要.因为它在很大程度保证了程序的连贯性和稳定性,并为问题的发现提供支撑. 下面就本人在编程过程中有关异常的编程范式做一下总结. 一.面向过程形式 面向过程式的范式将异常的传递都交于函数的参数与返回值来处理,如: bool func ( const InType& input, OutType& output, string

需求用例分析之异常流

问题的引出 备选流,又称备选事件流,英文是Alternative Flow.在RUP和UML中,备选流的解释如下:备选事件流包括与正常行为相关的可选或异常特征的行为,同时也包括正常行为的各种变形.您可以将备选事件流看作是基本事件流的"绕行道",有些备选事件流将返回到基本事件流,而有些将结束此用例的执行. 分析RUP对于备选流的定义,可以看到备选流可以分成两类: 1,不同做法但仍然达成用例目标: 2,异常情况,无法达成用例目标. 在实际用例分析中,由于备选流可能存在两种情况,导致备选流存

Delphi中文件流的使用方法

在Delphi中,所有流对象的基类为TStream类, 其中定义了所有流的共同属性和方法.TStream类中定义的属性介绍如下: 1.Size: 此属性以字节返回流中数据大小. 2.Position: 此属性控制流中存取指针的位置. Tstream中定义的虚方法有四个:1.Read:此方法实现将数据从流中读出.函数原形为:Function Read(var Buffer;Count:Longint):Longint;virtual;abstract;参数Buffer为数据读出时放置的缓冲区,Co

菜鸟关于C++异常的一些思考

菜鸟关于C++异常的一些思考 最近领导要在C++项目中用异常,就学习了相关的一些知识,有一些体会,希望能得到大家斧正. 1.什么是异常 C++之父Bjarne Stroustrup在<The C++ Programming Language>中讲到:一个库的作者可以检测出发生了运行时错误,但一般不知道怎样去处理它们(因为和用户具体的应用有关):另一方面,库的用户知道怎样处理这些错误,但却无法检查它们何时发生(如果能检测,就可以再用户的代码里处理了,不用留给库去发现).Bjarne Strous

Libgdx中TextButton的一些思考

因为有要实现以下TextButton的这个需求.然后就去看了一下Libgdx中文档.游戏中的按钮,很多人都比较习惯使用换图片的方式来实现.很少有人会直接使用libgdx中的TextButton,如果实在不行也是自己去写一个TextButton的类. 抱着"它真的有那么渣的态度吗",我去看了一下libgdx自带的TextButton.以下是我的思考的轨迹.整理如下: 在现在,libgdx的资料那么少,有的那些资料也是比较基础的.抱着"看别人的,还不如自己去官方文档."

八、java中异常机制

一.为什么要有异常处理机制? java中的异常处理机制简单的讲就是try..catch..finally的使用. 程序难免会出现错误, 如果没有异常处理机制, 那么程序员在编写代码的时候就必须检查特定的结果, 并在程序的很多地方去处理它. 有了异常处理机制后,就不必在每个方法调用处都检查, 只需要用try包裹住可能发生异常的代码段, 这样做的好处是: 1.降低了代码的复杂度,正如上面所说的,不需要每个方法调用处都去检查: 2.将“描述正常情况下应该做什么事情”和“如果出了错怎么办” 的逻辑分开:

springboot请求体中的流只能读取一次的问题

场景交代 在springboot中添加拦截器进行权限拦截时,需要获取请求参数进行验证.当参数在url后面时(queryString)获取参数进行验证之后程序正常运行.但是,当请求参数在请求体中的时候,通过流的方式将请求体取出参数进行验证之后,发现后续流程抛出错误: Required request body is missing ... 经过排查,发现ServletInputStream的流只能读取一次(参考:httpServletRequest中的流只能读取一次的原因). 这就是为什么在拦截器

Calcite中的流式SQL

Calcite中的流式SQL Calcite中的流式SQL总体设计思路 总体语法应该兼容SQL,这个是和目前流处理SQL的发展趋势是一致的. 如果部分功能标准SQL中没有包含,则尽量采用业界标杆(Oracle).比如模式匹配的功能,目前流处理中还没有针对语法达成共识,那么在设计上,就采用Oracle data warehouse的Match Recognize的方式.还有滑窗功能. 如果还有功能目前业界标杆都没有,那么就通过函数的方式拓展,翻滚窗口和跳动窗口,这两个窗口在标准SQL中都是不包含的

理解Java中字符流与字节流的区别

1. 什么是流 Java中的流是对字节序列的抽象,我们可以想象有一个水管,只不过现在流动在水管中的不再是水,而是字节序列.和水流一样,Java中的流也具有一个“流动的方向”,通常可以从中读入一个字节序列的对象被称为输入流:能够向其写入一个字节序列的对象被称为输出流. 2. 字节流 Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据.Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了组基本的输入字节流和输出字节流.InputStre