• 13
  • 13
分享
  • 这是你想找的——基于模型的测试
  • 曼倩诙谐 2021-08-24 09:57:10 字数 2688 阅读 2107 收藏 13

  简介

  基于模型的测试(简称MBT),是属于软件测试领域的一种测试方法。

  与常规的设计测试用例,然后运行测试用例,验证运行结果与用例期望值是否一致的测试方法不同。MBT首先对被测软件系统进行建模,制定行为和行为之间的关系以及行为和系统的关系(有限状态机)。

  其次,使用建模模型根据被测系统的状态、之前设置的限制条件和策略来生成很多用例,测试结果受一系列操作的影响。MBT可以产生更多不确定性的用例,更能发现一些意料之外的软件缺陷。

  MBT主要包括:分析被测系统、选择测试模型、构建测试模型、生成和执行测试用例、收集和分析测试结果几个步骤。

  其中最重要也是最难的几点就是选择测试模型、构建测试模型,以及生成和执行测试用例。

  下面简要介绍以下常用的测试模型和市面开源的MBT工具。

  常用的测试模型

  MBT建模通常有两种类型:一是以针对测试数据进行建模,二是针对用户行为进行建模。

  针对测试数据建模

  这是测试人员在测试过程中经常使用的。比如:边界值法、等价类方法等等,在此不再赘述。

  针对用户行为进行建模

  如:判定表、因果图、有限状态机FSM建模法、统一建模语言UML建模法等等。

  对于判定表和因果图方法,测试人员已经非常熟悉,在此也不做阐述。下面简要介绍下FSM和UML建模法。

  有限状态机FSM建模法

  有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。

  有限状态机的关键在于“有限”,即使用它建模的系统状态切换时有限、可以枚举的。

  状态机的4要素为:现态、条件、动作、次态。使用有限状态机可以有效地表达软件系统和相关过程中基于状态的行为。

  以“光线暗开灯,光线亮关灯”为例,有限状态机的状态表可以如下表1所示:

1-1.png

表1 “开关灯”有限状态机状态表

  统一建模语言UML建模法

  UML又叫统一建模语言。使用UML建模可以从9个图入手:

  ·用例视图角度下的用例图建模;

  ·设计视图角度下的类图和对象图建模;

  ·进程视图角度下的序列图、协作图、状态图和活动图建模;

  ·实现试图角度下的构件图建模;

  ·以及拓扑视图角度下的部署图建模。

  与有限状态机类似, UML 状态机加入了更复杂的特征,可以提供需求分析人员、开发人员和测试人员等多种角色对软件进行模型分析。

  常用的建模工具

  目前MBT工具有很多,例如:spec expoler、graphwalker、certifyit、Conformiq Designer等等,简要信息和区别如下表所示。

1-2.png

表2 MBT工具简要信息

  建模举例

  由于GraphWalker兼容java和python开发平台,已经能够良好的嵌入CI流水线特点,本文使用GraphWalker建模工具进行模型测试举例。

  GraphWalker的安装和使用文档可以参考graphwalker.github.io。

  样例1

  需求分析

  以表1中的“开关灯”有限状态机状态表为例,设计MBT模型。光线暗时,按下开灯键灯亮;光线亮时,按下关灯键灯灭。

  模型图设计

  使用YED工具(下载地址:https://www.yworks.com/products/yed)画出来的FSM模型图大致如下图1所示。

  图中每一个圆角矩形框表示一个状态,如:登录成功状态、注册成功状态等。

  每一个单向箭头表示为了达到下一个状态需要做的任何动作,如:“。”,它可以选择一些菜单选项,单击按钮等测试动作,GraphWalker只接受单向有向边(箭头)。

1-3.png

图1 样例1 FSM模型图

  测试用例生成

  运行graphwalker编译好的jar包生成测试用例,使用命令为:

java -jar .\target\graphwalker-cli-4.3.2-SNAPSHOT.jar  offline --model .\sample\light.graphml "random(edge_coverage(100))"

  其中offline表示离线模式,此外graphwalker还有online在线模式,在线模式graphwalker可以作为服务器提供restful和websocket服务。

  --model表示模型参数,后跟.graphml文件。

  random(edge_coverage(100))为停止运行的条件,在此例中表示随机路径覆盖率100%时,停止用例生成。

  graphwalker用例生成结果如下图2所示。

1-4.png

图2 样例1用例生成结果

  样例2

  需求分析

  拟设计一个网站的登录页面,若用户未注册,则需进行注册;若用户已经注册,则可以直接使用用户名、密码进行登录。

  模型图设计

  使用YED绘制的样例模型图如下图3所示。

1-5.png

图3 样例2模型图

  测试用例生成

java -jar .\target\graphwalker-cli-4.3.2-SNAPSHOT.jar  offline --start-element v_开始 --model .\sample\demo.graphml "quick_random(edge_coverage(100))"

  使用命令生成用例,部分用例如下图4所示。

  在该命令中,--start-element定义模型的入口,不使用该参数时,默认入口为start,如图1所示。

  本例中,停止用例生成的条件是quick_random(edge_coverage(100)),表示使用最短路径遍历所有边,覆盖率100%是退出用例生成。

1-6.png

图4 样例2用例生成结果


  MBT的意义

  经过上述短暂的介绍,你可能对MBT有了初步的认识。

  但是你可能会问:使用这样那样的工具进行MBT建模到底有什么作用?

  可以这样告诉你:在我们工作中经常涉及的功能测试、界面测试、性能测试等测试工作中,我们几乎都是对已经成熟定型的需求或代码进行测试。

  而这些常用测试方法的弊端在于,无法将测试前移到需求设计阶段进行。

  其实,在本例2中,笔者在运行用例生成的过程中就发现一个潜在的问题,模型设计不够合理,导致用例生成量剧增。由此可见,使用工具进行模型测试时,一方面能够帮助测试人员熟悉需求和软件行为,另一方面还能帮助测试人员挖掘需求中的不合理之处。

  因此,使用MBT方法,可以在需求设计阶段引入测试,对需求进行建模和模型测试,挖掘需求设计中潜在的问题和缺陷。



作者:刘晓佳Rachel   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   据报道,当地时间周四,谷歌宣布,将在其加拿大平台上封锁加拿大新闻。在此之前,Facebook也采取了类似的措施,以此对抗该国强制要求互联网平台向当地新闻机构付费的新规。  当该法律大约6个月后生效时,谷歌将在其加拿大搜索结果及其他产品中删除指向加拿大新闻的网络链接。  Facebook母公司Meta上周也宣布了类似的声明,以此抗议加拿大刚刚通过的C-18法案,即《在线新闻法案》。  加拿大媒体行业呼吁对互联网巨头加强监管,以使新闻机构能够挽回多年来因为Facebook和谷歌等在广告市场攻城拔寨而遭受的损失。  加拿大独立预算监管机构去年估计,新闻企业每年可以从该法律强制的交易中获得3.3亿...
            0 0 1223
            分享
          • Postman Newman 是什么?Postman Newman 是一个 CLI(命令行界面)工具,可以使用它来运行 Postman 中的集合(Collection)和环境(Environment)进行自动化测试。它是 Postman 的命令行 Collection Runner,能够直接从命令行运行 Postman 集合。使用 Newman 可以测试 API 的功能、性能、可靠性和安全性,同时可以将测试结果输出成多种格式的报告,例如 HTML、JSON、JUnit 等,以方便开发人员进行问题定位和分析。Postman Newman 的作用通过 Postman Newman 进行自动化...
            0 0 1089
            分享
          •   众所周知,索尼 PlayStation Portal 是一款串流掌机,需借助 PS5 的串流功能才能实现远程游玩,亚版定价 1580 港币及 6480 新台币。  今天,索尼宣布为 PlayStation Portal 提供系统更新,新增 PS5 游戏(暂不支持 PS3 和 PS4 兼容游戏)的云串流 Beta 功能。简单来说就是用户哪怕自己没买 PS5 也能玩了。  索尼 PlayStation Portal 结合了 DualSense 无线控制器的主要特色,包括自适应扳机和触觉反馈等功能,搭载高通骁龙 680 芯片,采用了 8 英寸 LCD 屏幕,能以 1080p 60fps 画面串流...
            0 0 56
            分享
          • 前言测试开发是近几年行业中一个流行词,既然是测试开发工程师,那么代码开发能力是最基本的要求,所以面试时必然少不了一些算法题考验你的编程功底。斐波那契数列?青蛙爬楼梯就是斐波那契数列的演化,解题思路一样。写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0,   F(1) = 1  F(N) = F(N - 1) + F(N - 2), 其中 N ...
            0 0 2743
            分享
          •   苹果公司正在大幅提高保修期外电池更换的价格,这次主要是针对iPhone 16 Pro机型。最新款 iPhone 两款较大机型保修期外更换电池的新费用为 119 美元,高于iPhone 15 Pro和 Pro Max 的 99 美元。普通 iPhone 16 和 iPhone 16 Plus 的费用仍为 99 美元。  苹果上一次提高保修期外电池更换费用是在 2022 年的 iPhone 14 机型上。价格从 69 美元涨到了 99 美元。  由于所有新款 iPhone 都自带至少一年的AppleCare保修,预计新买家不会很快感受到这一变化。购买 AppleCare+ 保修服务可在三年或更...
            0 0 544
            分享
      • 51testing软件测试圈微信