基于模型的测试属于软件测试领域的一种测试方法。MBT步骤如下:

常规测试一般是由人来设计几个特定的测试场景,然后断言测试结果。测试用例固定。缺少不确定性。基于模型的测试(Model-based Testing)是需要实现一个模型,然后制定行为和行为之间的关系以及行为和系统的关系(有限状态机),然后测试系统根据被测系统的状态、之前设置的限制条件和策略来生成很多用例(每执行一次生成的用例会不同),测试结果受一系列操作的影响,可以产生不确定性,更有可能发现一些想不到的很深路径下的BUG。

基于模型的测试主要包括以下部分:
1、模型程序(Model Program ):在这里定义被测系统的可以被执行的一些操作(action),比如创建一个虚机、删除一个虚机等。还有这些操作能被执行的条件(xxx_enabled)和系统在各个操作下的状态(state)。
2、Test Harness/Steper/adapter:访问被测系统,具体实现模型中定义的操作(action)。
3、策略(Strategies):在测试运行过程中,完成一个操作(action)后,下一个应该执行哪个操作,是由这个策略决定的,最简单的策略可以用随机选择的方式,还可以自己实现一些更复杂的选择策略算法,比如Zstack的公平调度算法和基于历史测试路径的调度算法。
4、测试执行器(Test Runer):执行测试、检查

基于模型的测试的一般步骤:
1、分析理解被测试软件
基于模型的软件测试要求充分理解被测试软件。构造可以用于测试的模型的工作主要是根据测试目的确定测试对象和测试特征,针对被测试软件的相关属性建立相应模型。这个阶段的具体工作包括,
充分了解软件需求规范和设计文档、用户手册和开发队伍充分交流。
1)识别软件系统的用户,枚举每个用户的输入序列,研究每项输入的可能取值范围,包括, 合法值、边界值、非法值,以及预期输出。这项工作往往需要工具支持。
2)记录输入发生条件和响应发生条件。软件系统的响应是指用户能够得到的输出或可见的软件内部状态的改变。其目的是设计可以引发特定响应的测试例和评价测试结果。
3)研究输入序列,如,输入发生时刻,软件系统接收特定输入的条件,输入处理顺序。
4)理解软件内部数据交换和计算过程,产生可能发现缺陷的测试数据。
2、选择合适的测试模型
不同的模型适用于不同类型软件的测试 因此需要根据软件特点选择模型。
1)了解可用的模型:不同的应用领域要使用不同的测试模型。例如,电话交换系统多使用状态模型;并发软件系统中不同组件并发运行用状态图建模;马尔可夫链可以对软件进行失效统计分析。模型的选择还依赖于软件系统的工作特点,例如,测试长期运行软件系统可以使用状态机模型。
2)根据模型特征进行选择:只有充分理解模型和软件系统,才能选择合适的模型对软件进行测试。以状态机为例,自动机理论可以对状态机进行分类,说明不同的状态机可以表达什么语言,从而可以根据应用程序的功能和特点,选择不同的状态机模型。由于根据有限状态机产生测试数据相当于遍历有向图,因此图论算法可以指导产生测试例。
3)人员、组织和工具的影响:基于模型的软件测试对测试人员的知识结构和技术水平提出了一定要求。如果一个开发组织使用模型(如UML)完成需求分析和系统设计,开展基于模型的软件测试就比较容易,因为根据系统分析和设计的模型进行测试,往往可以直接应用基于模型的软件测试技术,还可以根据测试的进展不断调整模型或模型的细节并有利于在开发过程早期进行测试规划。另外还要根据开发组织使用的测试工具选择特定的模型。
3、构造测试模型
以基于状态机模型的测试为例说明如何构造测试模型。首先要抽象出软件系统状态,状态抽象一般要根据输入及输出条件进行,一般包括以下过程:
1)生成一个输入序列并说明每个输入的适用条件,称作输入约束。例如电话未摘机时,才允许有摘机动作发生。
2)对每个输入要说明产生不同响应的上下文环境,称作响应约束。例如,电话摘机时,如果当前状态为振铃,则进行通话,否则为拨号音。
3)根据输入序列、输入约束和响应约束构造相应状态机模型,如下图示例。

4、生成和执行测试例
测试例的自动生成依赖于测试所使用的模型。以有限状态机模型为例,被遍历路径中弧的标记构成的序列就是测试例。在构造满足测试准则的路径时,必须考虑约束条件,如路径长度限制,统计测试还要考虑迁移概率。生成了满足特定的测试充分性准则的测试例集合后就可以执行测试例。以状态机模型为例~ 首先要写出仿真该软件系统的每个不同外界激励的脚本,称为仿真脚本( simulation script) ,每个仿真脚本对应模型中一个不同的迁移;然后把测试例集合翻译为测试脚本( test script)。也可以用测试生成器通过遍历状态机的迁移直接产生测试脚本。测试例的执行就是测试脚本的执行过程。脚本是可以重复利用的资源,维护测试脚本也是测试工作的一部分。
5、收集测试结果进行分析
基于模型的软件测试方法并没有解决测试失效辨识(Test Oracle) 问题,仍然要人工检查输出是否正确。但是通过状态验证可以部分解决测试失效辨识问题,状态是内部数据的抽象,比较容易验证。另外,与传统测试相比,基于模型的软件测试的优势之一就是可以根据测试结果分析软件的其它质量因素,如可靠性。

基于模型的软件测试的评价
1、基于模型的软件测试的优势
基于模型的软件测试大大提高了测试自动化水平,部分解决了测试失效辨识问题,可以进行测试结果分析,有利于测试制品的重用,并可以应用成熟的理论和技术获得比较完善的分析结果。现代软件工程强调增量和迭代的开发过程,采用面向对象开发技术,提高软件开发质量和加快软件开发速度。由于面向对象软件系统的规范多数使用模型表达,这些模型中包含了大量可以用于软件测试的信息,因此基于模型的软件测试可以把软件测试工作提前到开发过程早期,如进行测试工作的早期规划。
2、基于模型的软件测试的缺点
基于模型的软件测试存在以下缺点:
1)测试人员需要具备一定的理论基础,如状态机理论和随机过程的知识。还要掌握相关工具使用方法。
2)需要一定的前期投入,如模型的选择,软件功能划分,模型构造等。
3)有时无法克服模型的固有缺陷,如状态爆炸,这对检验,评审和维护模型都提出了要求,也直接影响了测试自动化。状态爆炸问题一般通过抽象和排除方法( abstraction Sexclusion) 减小测试规模,降低测试难度来解决。

什么是基于模型的测试?相关推荐

  1. python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线、多个模型的校准曲线(calibration curve)

    python基于模型对测试集和训练集的预测概率结果文件可视化模型的校准曲线.多个模型的校准曲线(calibration curve) 目录

  2. 基于模型的嵌入式开发流程_如何使用基于模型的测试来改善工作流程

    基于模型的嵌入式开发流程 Unit testing is not enough – so let's start using model-based testing to improve our wo ...

  3. 软件测试智能化 优势,陈耿-软件测试的智能化之路-基于模型的测试实践.pdf

    国际软件质量工程峰会 International Software Quality Engineering Forum 软件测试的智能化之路 -基于模型的测试实践 目录 • 自我介绍 • 什么是基于模 ...

  4. 基于模型的测试的测试设计

    为什么80%的码农都做不了架构师?>>>    TeemuKanstrén是一名资深科学家,目前在芬兰VTT技术研究中心工作,他还是多伦多大学的一名客座博士后.他的工作涉及:以改进行 ...

  5. [Simulink] 基于模型的测试与验证学习笔记_Step 3: Detecting Desig Errors

    文章目录 Simulink Design Verifier 对模型做死逻辑检测 问题分析 模型除以零的检测 自动设计错误检测 总结 [注] 本文为2018 Mathworks 年会上机教程学习笔记, ...

  6. [Simulink] 基于模型的测试与验证学习笔记_Step 4:Testing By Simulation

    文章目录 仿真测试 Test Harness 创建Test Harness 导入测试用例 构建Test Harness模型 执行测试.分析结果 利用SDI进行结果的验证 Model Verficati ...

  7. MBT简述:基于模型的测试

    参考: 1.http://blog.csdn.net/TMQ1225/article/details/53940828 2.http://tmq.qq.com/2016/12/graphwalker/ ...

  8. 软件测试52讲-用机器设计测试用例:基于模型的测试

    MBT 的基本原理是通过建立被测系统的设计模型,然后结合不同的算法和策略来遍历该模型,以此生成测试用例的设计. 执行 MBT 的过程就好比你把软件系统的设计画为了一张由节点和边构成的数据结构意义上的& ...

  9. 【腾讯TMQ】基于模型的自动化测试工具——GraphWalker

    一.概述 GraphWalker就是一个基于测试模型的用例生成工具.它主要应用于FSM, EFSM模型.可以用来它可以直接读取FSM, EFSM图形模型.json模型.生成测试用例. 二.背景知识 要 ...

最新文章

  1. JS中的null和undefined,undefined为啥用void 0代替?
  2. Entity相互关系
  3. 设计模式-结构型-装饰
  4. 平衡二叉树 构造方法
  5. linux重设mysql密码是多少_Linux学习:重设mysql root密码
  6. 读取oracle bfile字段,ORACLE中BFILE字段的使用研究_oracle
  7. n个台阶,一个人每次最多走m步,算法实现
  8. 华为服务器装系统怎么选pxe,华为TaiShan服务器PXE操作系统
  9. GeeksForGeeks 翻译计划 | ApacheCN
  10. SQL Server 网络协议和 TDS 端点
  11. 基于matlab模糊pid控制系统,基于MATLAB的模糊自适应PID控制器的设计
  12. java - day006 - 构造方法
  13. Gif制作工具:gif图片制作。gif图片怎么生成。三款gif生成工具。
  14. cad lisp 示坡线_AutoCAD命令-画示坡线
  15. 基于 Java 机器学习自学笔记 (第60天:过去十日的总结)
  16. WIN7搭建web服务器的步骤
  17. 决策树系列(四)——基于决策树算法实现员工离职率预测
  18. 第六十一期:中国农民花3000块,发明史上最牛输入法!曾火遍中国20年
  19. 如何在eclipse中建立一个安卓工程
  20. h5跨域访问图片_h5标签canvas关于getImageData跨域的问题

热门文章

  1. http之短链接原理分析
  2. 自媒体人必不可少的多平台同步、一文多发小助手
  3. 精准医学:NGS和MFC方法在多发性骨髓瘤MRD评估中的比较|预后监测
  4. python羊车门问题的蒙特卡洛解法
  5. 泰坦尼克号乘客生存情况预测分析之第三部分建模及模型评价
  6. 计算机临床医学自动化哪个好,这五个专业待遇高,就业好,但是很难学,挂科风险大,选择要慎重...
  7. 编写一个java_Java入门篇(一)——如何编写一个简单的Java程序
  8. 订单里面有多个商品的问题怎么解决
  9. C++上机实验六第2题
  10. Vue 微商城项目(一)