基于OOPN网的类行为的测试分析与用例生成算法

为什么要进行类行为的测试分析

面向对象的开发相信很多人都非常清楚其基本的理念。而面向对象的测试,在实际测试工作中很少有人提及。在面向对象的测试中,可以大致分为算法、类、子系统、系统四个级别。除了白盒测试外,一般测试人员都在子系统或者系统级别进行测试,很少能够感受到面向对象与面向过程的测试区别——在测试过程中,采用基于业务的、基于处理过程的、基于事件的、基于场景的等的测试方法都适用于面向对象和面向过程的系统测试。而对于面向对象的测试中,对象和类的概念必然会对测试产生影响。而这一影响被很多人都忽略了。特别是类的行为,其封装性、消息传递、多态特性都是传统测试分析中遗漏的,造成潜在且难以发现的BUG。

为什么使用OOPN网

OOPN网是Petri网的发展。

在系统分析和设计时,状态图、时序图、类图等工具都是很好的描述系统的模型。而petri网在描述实际系统运行时的类之间的行为互动,特别是合适用于描述异步的、并发的过程。经典的Petri网是简单的过程模型,由两种节点:库所和变迁,有向弧,以及令牌组成的。

Petri网

Petri网的详细介绍参考:Petri网

经过多年的发展,在基本的Petri网上,已经扩展出各种高级Petri网模型。将面向对象的思想和Petri网结合,就形成了面向对象的Petri网(Object Oriented Petri Net,OOPN)。本文讨论的是简化的OOPN网下,对类行为的测试分析的一个实例。

定义OOPN网

OOPN网有很多定义。本文对OOPN的定义如下:

定义:一个面向对象的Petri网是一个5元组,OOPN={P,T,C,G,F},其中

P={P11,P12……},是库所(表示状态)的有限集合,。

T={T11,T12……},是变迁(表示操作)的有限集合

C={gray,red,blue},是颜色的有限集合。

其中,gray:灰色表示同步路径;red:红色表示异步路径,blue:蓝色表示需要并发控制路径。

G={G11,G12……},是消息(调用服务)的有限集合。

F是P、T、G间的有向弧的集合。

业务背景

在一个支付业务中,支付的处理过程可以简要描述为:接收到卡信息,对卡信息进行验证。验证未通过,则提示卡信息错误。验证通过后,调用支付服务。收到支付结果后,更新订单状态。在这个过程中,主要有订单处理类OrderHandle,卡信息类CardInfo,支付服务类PayService,支付回调处理类PayCallBackHandle。

建立OOPN模型


订单处理类与卡信息类交互的OOPN网
支付处理类与支付服务类交互的OOPN网

注:G41属于订单类的服务,未列出。

测试分析

通过建立OOPN模型,很明确订单处理类、卡信息类、支付服务类之间的关系。特别是在订单处理类与支付服务类之间的异步路径、并发控制路径是测试的特别关注点。同时也明确了并发点来源是由于之前的异步路径造成的。并发控制路径的要点就是库所(状态)的变迁是唯一的。

用例生成算法

1 将OOPN模型中的变迁T取出,形成{输入库所,变迁,输出库所}的三元组。其中输入库所中,包含门G的,将门作为输入库所。输出库所中,包含门G的,将门作为输出库所。

2 归并所有的三元组。由于输出库所必然是其他三元组的输入库所,所以取输入库所不在输出库所集合中的,作为初始输入库所。将输出库所与输入库所的三元组首位相连,并将连接的三元组标记为已遍历。遇到输出库所作为多个输出库所的,采用深度遍历,直到完成一条路径后再返回走下一节点。若遇到并发控制路径,需要给予并发控制标记。直到输出库所为终态或为异步调用库所,则完成一条路径,加入测试路径集合

3 重复2的过程,当无法找到未遍历的三元组且输入库所不在输出库所集合中时,继续第4步。

4 将测试路径集合中,有相同并发控制标记的测试路径,取出添加到并发测试路径集中。

5 最终得到的测试路径集和并发测试路径集即为测试用例。

对于订单处理类与卡信息类交互的OOPN网,可以得到以下三元组:

(p11,t11,g21)

(g22,t12,p11)

(g23,t13,g31)

(g21,t21,p22)

(g21,t21,p23)

(p22,t22,g22)

(p23,t23,g23)

归并三元组得到测试路径:

(p11,t11,g21,t21,p22,t22,g22,t12,p11)

(p11,t11,g21,t21,p23,t23,g23,t13,g31)

对于支付处理类与支付服务类交互的OOPN网,可以得到以下三元组:

(g31,t31,p32)

(g31,t31,p33)

(p32,t32,g32)

(p33,t33,g33)

(g32,t41,p42)

(g33,t42,p43)

(p42,t43,g41)

(p43,t43,g41)

归并三元组得到2条测试路径:

(g31,t31,p32,t32,g32,t41,p42,t43,g41)

(g31,t31,p33,t33,g33,t42,p43,t43,g41)

得到并发控制测试路径:

(g31,t31,p32,t32,g32,t41*,p42*,t43*,g41*)

(g31,t31,p33,t33,g33,t42*,p43*,t43*,g41*)

*:表示并发控制标记

总结

使用OOPN进行测试分析考虑了对象之间的行为交互,体现了面向对象的封装、消息传递的特性,是能够覆盖到数据流、状态变迁、类之间的消息的同步和异步操作、并发控制的测试分析方法。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容