当前位置:文档之家› 基于模型的测试综述报告讲解

基于模型的测试综述报告讲解

基于模型的测试综述2016年1月摘要面向对象软件开发应用越来越广泛,自动化测试也随之被程序员认可和接受,随之而来的就是基于UML的软件开发技术的大范围普及和基于模型的软件测试技术的普遍应用。

基于模型的测试是软件编码阶段的主要测试方法之一,具有测试效率高、排除逻辑复杂故障测试效果好等特点。

本文描述了基于模型的测试的模型以及建模标准,并介绍基于模型的测试的基本过程以及支持工具,同时通过七个维度对基于模型的测试方法进行描述。

最后分析基于模型的测试的优缺点并列举了应用案例。

关键词:软件测试,基于模型的测试,软件模型,测试工具目录摘要 (I)1 引言 (2)2 基于模型的测试、模型以及建模标准 (2)2.1基于模型的测试 (2)2.2基于模型的测试的模型 (3)2.3建模标准 (4)3 基于模型的测试的基本过程及支持工具 (5)3.1基于模型的测试的基本过程 (5)3.2支持工具 (6)4 分类 (7)4.1 模型主体 (7)4.2 模型冗余程度 (7)4.3 模型特征 (7)4.4 模型表示法 (7)4.5 测试用例选择标准 (8)4.6 测试用例生成技术 (8)4.7 联机、脱机测试用例生成 (9)5 基于模型的测试的工具Spec Explorer (9)5.1 Spec Explorer (9)5.2 连接测试用例和待测系统 (9)5.3 静态模型和实例模型 (11)6 基于模型的测试的优缺点 (11)参考文献 (13)1 引言在软件开发的生命周期中,测试是一个非常重要的阶段。

软件测试[1]通过为特定测试目的而设计的测试用例的执行情况,与预期的软件行为进行一致性对比,从而判定软件错误所在,以此确保软件的可靠性和正确性。

由于软件产品的固有的复杂性质,软件测试的难度也就不言而喻。

传统的测试方法被认为是繁琐的、强工作量且容易出错。

应运而生的基于模型的测试开始受到日渐广泛的关注。

基于模型的测试(Model-Based Testing)[2]是一种系统化的测试方法,可被应用于软件生命周期早期阶段的产品的测试,并且它使完全自动化测试成为可能,其特点是:在产生测试例和进行测试结果评价时,都是根据被测试应用程序的模型及其派生模型(一般称作测试模型)进行的。

基于模型的测试深受工业界的青睐,原因如下:一是工业界通常需要验证软件产品的系统行为。

在产品设计的早期,基于模型的测试的使用有利于帮助找出不清晰的、易存在二义性的软件系统规格说明(“即编码前的分析设计模型/文档”)。

二是基于模型的测试方法使得大量不重复的、有意义的测试用例产生变得可能。

三是使用基于模型的测试一旦系统规格说明发生改变,只需要对测试模型进行修改就可以轻松地达到更新测试用例的目的。

本文组织如下,首先介绍了基于模型的测试及其特点,分析了主要的测试模型及如何选择合适的测试模型,重点是有限状态机模型、UML模型和马尔可夫链模型,并且提出了建模的标准;接着介绍基于模型的测试的基本过程以及支持工具,再通过七个维度对基于模型的测试方法进行描述,并对每一个维度探讨了可能取值,然后与其他软件测试技术相比,分析基于模型的测试的优缺点,最后列举了一些基于模型的测试的应用案例。

2 基于模型的测试、模型以及建模标准2.1基于模型的测试首先应该要明确软件模型的概念,是指用抽象化的方式对软件行为和软件结构进行阐述,软件行为可以通过一系列的输入输出逻辑和数据流分析来表示,软件结构则是通过部署图、流程图等图形方式直观表述,基于模型的测试就是通过上述两种抽象化方式产生测试用例。

相比于针对程序代码本身的测试,而基于模型的测试方法不仅可以有效地提高测试效率,提高测试例生成的自动化程度,进行测试失效辨识,也有利于评价测试结果。

基于模型的测试是对被测系统的模型化,然后根据模型特性,完全或者部分地自动生成测试用例的一种软件测试技术。

基于模型的测试是一个轻量级的,形式化的验证软件系统的方法。

首先,基于模型的测试对待测软件系统(通常被称为System Under Test,简称SUT)进行形式化的建模,设计出机器可读的模型;其次,和其他形式化方法比,基于模型的测试并不致力于让待测软件系统与规格说明在所有可能情况下都保持一致,而是系统化的从模型生成一组测试用例,使用这组测试用例测试待测软件系统,得到充分的证据说明待测系统的行为与模型期望是一致的。

2.2基于模型的测试的模型理想的模型需要容易被测试人员理解,能够把大的复杂的问题描述成小的简单的系统,最好还是以一种测试用例生成工具方便识别的形式。

想要同时满足以上所有的特性是很困难的,但是可以把几种不同的模型整合成一个,扬长避短地得到理想模型。

在基于模型的测试中使用过的模型可能有几十甚至上百种,我们不可能也没有必要去逐一了解,Mark Utting和Bruno Legeard把它们大致分为以下几种[3]:表2.1 MBT模型分类基于模型的测试中使用的典型模型有: 有限状态机(FSM,Finite State Machine)、UML模型和马尔可夫链等模型。

1.有限状态机该类模型是用状态转移图来表示,并通过状态的覆盖来生成测试用例。

这种模型可以将测试用的数据结合图的遍历算法自动生成输入的序列进行相应测试。

该种测试模型可以充分结合形式语言与自动机理论来进行分析和设计,适用范围主要是反应式的软件,但由于模型构造的工作规模比较大,自动构造就成为了这一模型的一个关键点。

2.UML模型又称为统一建模语言,是软件工程中面向对象设计与分析中常用到的规范化建模语言。

该模型主要是利用状态图进行行为建模,状态图可以看作是有限状态机的扩展,强调了对复杂实时系统进行建模,提供了层次状态机的框架,即一个单独状态可以扩展为更低级别的状态机,并提供了并发机制的描述[4],因此UML使用状态图作对单个类的行为建模。

3.马尔可夫链是一种以统计理论为基础的统计模型,可以描述软件的使用在软件统计测试中得到了广泛应用。

马尔可夫链实际上是一种迁移具有概率特征的有限状态机,不仅可以根据状态间迁移概率自动产生测试例,还可以分析测试结果对软件性能指标和可靠性指标等进行度量[5,6]。

另外,马尔可夫链模型适用于对多种软件进行统计测试,并可以通过仿真得到状态和迁移覆盖的平均期望时间,有利于在开发早期对大规模软件系统进行测试时间和费用的规划。

马尔可夫链是统计测试的基本模型,在净室软件工程中得到了深入研究,在微软、Raytheon 及美国联邦航空署(FAA)都得到了成功应用[7]。

马尔可夫链可以用随机迁移矩阵或者带迁移概率的状态迁移图表示。

基于马尔可夫链的测试充分性准则一般要求测试过程中对马尔可夫链迁移的覆盖与实际使用相同[6]。

4.文法模型可以描述程序的语法。

由于不同的文法等价于不同的状态机因此也可以视为状态机模型的变体。

有关基于文法的测试可见文[8],这方面研究工作相对较少。

2.3建模标准随着系统的增长,建模是捕获和再利用有关系统知识的一个非常经济的手段。

对于一个测试团队来说,这些信息是非常宝贵的:一个测试工程师了解被测系统的行为需要占据的工作量,一旦这个信息被理解,该如何保存给下一个工程师、下一个版本或者更改要求呢?如果你处于测试的设计阶段,那么你是幸运的。

但是更常见的是,这些信息被埋藏在一个测试脚本中,一旦改变或者丢失就只能等待重新发现。

测试团队通过给系统构建一个给予指定输入得到所需行为的模型,可以获得有重用的最大优势就是这些工作都不会丢失。

一旦这个测试周期停止,下一周期就可以迅速开始。

如果该产品具有新的功能,它们可以逐步加入到模型中;如果产品的质量需要提高,那么模型需要改善和扩大测试;如果有新的人员加入到测试团队中,他们可以通过回顾模型迅速投入进来。

一旦你决定想要为被测系统建模,下一步建模的时候要思考这个系统管理的数据、执行的操作和与它通信的子系统。

下面给出几条原则:1.抽象原则,通常不把输入、输出纳入到模型中。

2.模型与被测系统不必完全一致。

3 基于模型的测试的基本过程及支持工具3.1基于模型的测试的基本过程基于模型的测试的基本过程共有6个步骤,如图2.1所示,其步骤如下:1.分析被测系统首先分析被测软件的系统特性,主要分析的是开发方式,主要有所采用的开发技术(面向对象、面向过程),开发语言,开发系统环境等。

然后根据分析结果,结合各个模型的特性选择合适的模型作为测试用例生成的模型。

2.建立抽象模型根据所选择的模型对被测软件进行建模,可以进一步分析该模型是否适合软件。

模型选择和建立模型可能是个反复的过程,只有在充分了解该软件系统的特点和各个模型的特点才可能为软件系统建立最恰当的模型。

这个模型是一个抽象模型,因为它应该比待测软件系统(通常被称为System Under Test,简称SUT)本身更小,更简单,它只关注关键环节。

建立完成后,需要检查该模型与所期望的行为是否一致。

3.生成抽象测试从模型生成抽象测试,必须选择一些测试选择标准,因为通常有无限多的可能的测试。

比如使用有限状态机FSM模型时,根据一定的覆盖准则遍历状态间的迁移所获得的转换路径就是测试路径,而且在使用FSM模型时选择不同的测试覆盖准则所产生的测试用例是不同的。

4.具体化抽象测试基于模型的测试的第四步是把高层的抽象测试转化为可执行的具体测试。

主要有两种方法:(1)使用模板和映射抽象测试的变换工具;(2)通过一些环绕在SUT 和代码实现间的适配器。

5.执行具体测试基于模型的测试的第五步是在被测系统上执行具体的测试用例,不管是在在线的还是离线的基于模型的测试,都可以使用测试执行工具和方法。

6.分析测试结果得到测试结果后,必须确定产生该故障的原因并采取纠正措施,因为有可能是建模时的缺陷模型导致的测试用例本身故障。

然后根据测试结果和分析结果,评估被测软件的质量,并且指出出错的地方和提出改进的意见和建议。

图2.1 基于模型的测试过程3.2支持工具基于模型的软件测试必须有相关工具支持。

当前支持基于模型的软件测试工具中比较具有代表性的有:1)支持状态机模型的工具。

包括,Software Engineering Technology 的测试工具toolSET_Certify运行于RISC6OOO和SUN 平台;现在此工具属于G-Lab,并已经提供了对统计测试的支持;IBM 的GOTCHA,可以根据用户事先确定的测试充分性准则进行基于软件状态模型的测试例生成;IBM的TCBean 是一个提供测试脚本管理功能的基于状态机的测试引擎。

2)支持马尔可夫链模型的工具。

包括,Cleanroom Software Engineering 的CleanTest,支持统计测试,是商用的使用模型及统计测试例生成工具;IBM 的Cleanroom Certification Assistant,可以自动化统计验证过程,通过使用概率分布产生测试例,并对测试结果进行分析。

相关主题