基于模型的测试综述报告讲解.docx
- 文档编号:29009967
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:21
- 大小:134.65KB
基于模型的测试综述报告讲解.docx
《基于模型的测试综述报告讲解.docx》由会员分享,可在线阅读,更多相关《基于模型的测试综述报告讲解.docx(21页珍藏版)》请在冰豆网上搜索。
基于模型的测试综述报告讲解
基于模型的测试综述
2016年1月
摘要
面向对象软件开发应用越来越广泛,自动化测试也随之被程序员认可和接受,随之而来的就是基于UML的软件开发技术的大范围普及和基于模型的软件测试技术的普遍应用。
基于模型的测试是软件编码阶段的主要测试方法之一,具有测试效率高、排除逻辑复杂故障测试效果好等特点。
本文描述了基于模型的测试的模型以及建模标准,并介绍基于模型的测试的基本过程以及支持工具,同时通过七个维度对基于模型的测试方法进行描述。
最后分析基于模型的测试的优缺点并列举了应用案例。
关键词:
软件测试,基于模型的测试,软件模型,测试工具
I
摘要................................................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基于模型的测试的工具SpecExplorer...............................................9
5.1SpecExplorer....................................................................................................9
5.2连接测试用例和待测系统..............................................................................9
5.3静态模型和实例模型....................................................................................11
6基于模型的测试的优缺点..................................................................11
参考文献..................................................................................................13
1
引言1
[1]通过为在软件开发的生命周期中,测试是一个非常重要的阶段。
软件测试特定测试目的而设计的测试用例的执行情况,与预期的软件行为进行一致性对比,从而判定软件错误所在,以此确保软件的可靠性和正确性。
由于软件产品的固有的复杂性质,软件测试的难度也就不言而喻。
传统的测试方法被认为是繁琐的、强工作量且容易出错。
应运而生的基于模型的测试开始[2]是一种系统化)Model-BasedTesting受到日渐广泛的关注。
基于模型的测试(的测试方法,可被应用于软件生命周期早期阶段的产品的测试,并且它使完全自动化测试成为可能,其特点是:
在产生测试例和进行测试结果评价时,都是根据被测试应用程序的模型及其派生模型(一般称作测试模型)进行的。
基于模型的测试深受工业界的青睐,原因如下:
一是工业界通常需要验证软件产品的系统行为。
在产品设计的早期,基于模型的测试的使用有利于帮助找出不清晰的、易存在二义性的软件系统规格说明(“即编码前的分析设计模型/文档”)。
二是基于模型的测试方法使得大量不重复的、有意义的测试用例产生变得可能。
三是使用基于模型的测试一旦系统规格说明发生改变,只需要对测试模型进行修改就可以轻松地达到更新测试用例的目的。
本文组织如下,首先介绍了基于模型的测试及其特点,分析了主要的测试模型及如何选择合适的测试模型,重点是有限状态机模型、UML模型和马尔可夫链模型,并且提出了建模的标准;接着介绍基于模型的测试的基本过程以及支持工具,再通过七个维度对基于模型的测试方法进行描述,并对每一个维度探讨了可能取值,然后与其他软件测试技术相比,分析基于模型的测试的优缺点,最后列举了一些基于模型的测试的应用案例。
基于模型的测试、模型以及建模标准2
2.1基于模型的测试
首先应该要明确软件模型的概念,是指用抽象化的方式对软件行为和软件结构进行阐述,软件行为可以通过一系列的输入输出逻辑和数据流分析来表示,软件结构则是通过部署图、流程图等图形方式直观表述,基于模型的测试就是通过上述两种抽象化方式产生测试用例。
相比于针对程序代码本身的测试,而基于模型的测试方法不仅可以有效地提高测试效率,提高测试例生成的自动化程度,进行测试失效辨识,也有利于评价测试结果。
基于模型的测试是对被测系统的模型化,然后根据模型特性,完全或者部分2
地自动生成测试用例的一种软件测试技术。
基于模型的测试是一个轻量级的,形式化的验证软件系统的方法。
首先,基于模型的测试对待测软件系统(通常被称为SystemUnderTest,简称SUT)进行形式化的建模,设计出机器可读的模型;其次,和其他形式化方法比,基于模型的测试并不致力于让待测软件系统与规格说明在所有可能情况下都保持一致,而是系统化的从模型生成一组测试用例,使用这组测试用例测试待测软件系统,得到充分的证据说明待测系统的行为与模型期望是一致的。
2.2基于模型的测试的模型
理想的模型需要容易被测试人员理解,能够把大的复杂的问题描述成小的简单的系统,最好还是以一种测试用例生成工具方便识别的形式。
想要同时满足以上所有的特性是很困难的,但是可以把几种不同的模型整合成一个,扬长避短地得到理想模型。
在基于模型的测试中使用过的模型可能有几十甚至上百种,我们不可能也没有必要去逐一了解,MarkUtting和BrunoLegeard把它们大致分为以[3]:
下几种
模型分类表2.1MBT
类型
示例
Pre/Post基于
B、OCL、JML、Spec#、Z
基于转换
FSM、状态图、UML状态机
统计式
马尔可夫链
基于历史
消息队列图、UML顺序图
函数式
HOL系统
操作式
Petri网
数据流式
Lustre、块状图
基于模型的测试中使用的典型模型有:
有限状态机(FSM,FiniteState
Machine)、UML模型和马尔可夫链等模型。
1.有限状态机该类模型是用状态转移图来表示,并通过状态的覆盖来生成测试用例。
这种模型可以将测试用的数据结合图的遍历算法自动生成输入的序列进行相应测试。
该种测试模型可以充分结合形式语言与自动机理论来进行分析和设计,适用范围主要是反应式的软件,但由于模型构造的工作规模比较大,自动构造就成为了这一模型的一个关键点。
2.UML模型又称为统一建模语言,是软件工程中面向对象设计与分析中常用到的规范化建模语言。
该模型主要是利用状态图进行行为建模,状态图可以看作是有限状态机的扩展,强调了对复杂实时系统进行建模,提供了层次状态机的框架,即一个单独状态可以扩展为更低级别的状态机,并提供了并发机制的描[4],因此UML使用状态图作对单个类的行为建模。
述
3
3.马尔可夫链是一种以统计理论为基础的统计模型,可以描述软件的使用
在软件统计测试中得到了广泛应用。
马尔可夫链实际上是一种迁移具有概率特征的有限状态机,不仅可以根据状态间迁移概率自动产生测试例,还可以分析测试[5,6]。
另外,马尔可夫链模型适用结果对软件性能指标和可靠性指标等进行度量于对多种软件进行统计测试,并可以通过仿真得到状态和迁移覆盖的平均期望时间,有利于在开发早期对大规模软件系统进行测试时间和费用的规划。
马尔可夫链是统计测试的基本模型,在净室软件工程中得到了深入研究,在微软、Raytheon[7]。
马尔可夫链可以用随机迁移矩阵)都得到了成功应用及美国联邦航空署(FAA或者带迁移概率的状态迁移图表示。
基于马尔可夫链的测试充分性准则一般要求[6]。
测试过程中对马尔可夫链迁移的覆盖与实际使用相同
4.文法模型可以描述程序的语法。
由于不同的文法等价于不同的状态机
[8],这方面研究因此也可以视为状态机模型的变体。
有关基于文法的测试可见文工作相对较少。
2.3建模标准
随着系统的增长,建模是捕获和再利用有关系统知识的一个非常经济的手段。
对于一个测试团队来说,这些信息是非常宝贵的:
一个测试工程师了解被测系统的行为需要占据的工作量,一旦这个信息被理解,该如何保存给下一个工程师、下一个版本或者更改要求呢?
如果你处于测试的设计阶段,那么你是幸运的。
但是更常见的是,这些信息被埋藏在一个测试脚本中,一旦改变或者丢失就只能等待重新发现。
测试团队通过给系统构建一个给予指定输入得到所需行为的模型,可以获得有重用的最大优势就是这些工作都不会丢失。
一旦这个测试周期停止,下一周期就可以迅速开始。
如果该产品具有新的功能,它们可以逐步加入到模型中;如果产品的质量需要提高,那么模型需要改善和扩大测试;如果有新的人员加入到测试团队中,他们可以通过回顾模型迅速投入进来。
一旦你决定想要为被测系统建模,下一步建模的时候要思考这个系统管理的数据、执行的操作和与它通信的子系统。
下面给出几条原则:
1.抽象原则,通常不把输入、输出纳入到模型中。
2.模型与被测系统不必完全一致。
4
基于模型的测试的基本过程及支持工具3
3.1基于模型的测试的基本过程
基于模型的测试的基本过程共有6个步骤,如图2.1所示,其步骤如下:
1.分析被测系统
首先分析被测软件的系统特性,主要分析的是开发方式,主要有所采用的开发技术(面向对象、面向过程),开发语言,开发系统环境等。
然后根据分析结果,结合各个模型的特性选择合适的模型作为测试用例生成的模型。
2.建立抽象模型
根据所选择的模型对被测软件进行建模,可以进一步分析该模型是否适合软件。
模型选择和建立模型可能是个反复的过程,只有在充分了解该软件系统的特点和各个模型的特点才可能为软件系统建立最恰当的模型。
这个模型是一个抽象模型,因为它应该比待测软件系统(通常被称为SystemUnderTest,简称SUT)本身更小,更简单,它只关注关键环节。
建立完成后,需要检查该模型与所期望的行为是否一致。
3.生成抽象测试
从模型生成抽象测试,必须选择一些测试选择标准,因为通常有无限多的可能的测试。
比如使用有限状态机FSM模型时,根据一定的覆盖准则遍历状态间的迁移所获得的转换路径就是测试路径,而且在使用FSM模型时选择不同的测试覆盖准则所产生的测试用例是不同的。
4.具体化抽象测试
基于模型的测试的第四步是把高层的抽象测试转化为可执行的具体测试。
主要有两种方法:
(1)使用模板和映射抽象测试的变换工具;
(2)通过一些环绕在SUT和代码实现间的适配器。
5.执行具体测试
基于模型的测试的第五步是在被测系统上执行具体的测试用例,不管是在在线的还是离线的基于模型的测试,都可以使用测试执行工具和方法。
6.分析测试结果
得到测试结果后,必须确定产生该故障的原因并采取纠正措施,因为有可能是建模时的缺陷模型导致的测试用例本身故障。
然后根据测试结果和分析结果,评估被测软件的质量,并且指出出错的地方和提出改进的意见和建议。
5
反馈
需求分析反馈模型反馈抽象测试具体化分析结果预期测试生成测试输出输入序列观察执行测试反馈被测系统
2.1基于模型的测试过程图3.2支持工具当前支持基于模型的软件测试工基于模型的软件测试必须有相关工具支持。
具中比较具有代表性的有:
的测试工具支持状态机模型的工具。
包括,SoftwareEngineeringTechnology1),G-LabSUN平台;现在此工具属于toolSET_Certify运行于RISC6OOO和
可以根据用户事先确定GOTCHA,的并已经提供了对统计测试的支持;IBM
TCBean的IBM的测试充分性准则进行基于软件状态模型的测试例生成;是一个提供测试脚本管理功能的基于状态机的测试引擎。
Engineering的Cleanroom2)支持马尔可夫链模型的工具。
包括,Software
IBMCleanTest,支持统计测试,是商用的使用模型及统计测试例生成工具;可以自动化统计验证过程,通过使用,的CleanroomCertificationAssistant概率分布产生测试例,并对测试结果进行分析。
司公公司针对UML模型提供测试支持的工具。
包括,SilverMarkIBM3)对UML和VisualAge开发的支持测试用例生成和回归测试的TestMetor的designerConnection。
的软件可靠性工程工具箱和AT&ST包括对统计测试结果进行分析的工具。
4)
均提供多种时间域和区间域模型进行SMERFS,美国海军水面战中心开发的
,支持可靠性估计和CASRE美国空军喷气动力实验室开发的可靠性估计;
预测。
6
分类4
本文通过七个维度对基于模型的测试方法进行描述。
并对每一个维度探讨了可能取值。
4.1模型主体
模型主体包括SUT模型和SUT所处环境模型。
目前基于模型的软件测试中往往两者都同时考虑。
SUT模型的作用包括:
(1)作为SUT的oracle(因为SUT包含了预期行为);
(2)利用结构信息产生测试用例。
SUT所处环境模型用于限制SUT模型的可能输出。
4.2模型冗余程度
基于模型的测试可以被应用到不同的场景。
大致说来,主要区别在用于测试[9]中描述了两个可能场景。
第一个场景中和用于实现的模型间的冗余程度。
文献模型被用来同时产生测试用例和系统实现。
该场景中用于产生代码的模型必须描述详细,但对测试用例生成来说确需要抽象级别更高的模型。
第二个场景是:
模型仅用于产生测试用例。
该模型根据规约文档生成,而SUT则是手工实现。
我们可以使用该模型作为系统的规约补充,但其相当复杂。
往往需要补充文档辅助才能使用。
4.3模型特征
模型特征与非确定性、时序问题、模型的连续性或事件离散性有关。
非确定性在SUT和模型中均会发生。
时序问题一般与实时系统相关。
而就动态性而言。
模型可能是离散的、连续的或两者综合。
基于模型的软件测试过去往往关注离散模型,但连续或者混合模型目前在嵌入式系统中得到广泛使用和研究。
不同的模型特征将影响对模型表示法的选择、测试用例的生成和执行。
4.4模型表示法
[10]获得如下的分类:
SUT进行建模,根据目前存在大量模型范式对1)基于状态的表示法:
针对变量集和修改变量的操作对系统进行建模,变量集代表系统内部状态的一个快照,操作通过前置条件和后置条件定义。
典型代表为Z、B、VDM和JML。
2)基于Transition的表示法:
描述不同系统状态间的transition。
采用类似FSM的形式进行表示。
结点代表系统的状态,边代表系统的操作或行为。
目7
前常通过添加数据变量、采用分层的机器和机器之间的并行来加强表示能力。
典型代表为Statecharts.hbeledtransitionsystem和I/Oautomata。
3)基于历史的表示法:
通过描述随着时间的推移,行为允许的轨迹对系统进行建模。
可以使用不同的类型的时间记号(离散或连续,线性或分支,点或区间等),导致了不同类型的时序逻辑。
4)函数表示法:
将系统描述为数学函数集。
有可能是一阶的也有可能是多阶的。
但该类表示法较为抽象和难于使用。
所以在基于模型的测试中使用并不多。
5)操作表示法:
认为系统是可执行进程集,进程间并行执行。
该表示法适合描述分布式系统或通讯协议。
典型代表是进程代数或者Petrinet。
6)随机表示法:
通过基于事件或者输入值的概率模型来描述系统,更倾向于为环境建模。
例如使用Markovchain为期望的用户操作版本建模.据此产生的测试用例集可以体现用户的实际使用场景。
4.5测试用例选择标准
测试用例选择标准可以辅助测试用例的生成。
目前并不存在一个最优标准。
普遍使用的标准包括:
1)结构化模型覆盖标准:
标准充分利用了模型结构信息,例如在基于transition的模型中。
采用与图相关的覆盖标准来生成测试用例。
2)数据覆盖标准:
标准主要关注如何从大规模数据空间里面选择典型取值。
常见的方式是等价类划分和边界值分析。
3)基于需求的覆盖标准:
当模型的元素与SUT的非形式化需求相关时,需要基于需求的覆盖标准。
例如:
需求数量可能与UML状态图的transition有关。
4)Ad—hoc测试用例规约:
除了模型,测试工程师可以依据经验,用形式化的表示方法编写必须覆盖的测试用例规约。
指定对应的测试用例。
5)随机标准:
大部分用于环境模型。
因为是环境决定了SUT的使用方式。
行为概率直接用模型表示。
产生的测试用例反应了用户的实际操作情况。
6)基于缺陷的标准:
适用于SUT模型。
最常见的基于缺陷的覆盖标准是变异覆盖。
包括对模型进行变异、产生测试用例用于区分变异模型和原有模型。
4.6测试用例生成技术
目前在给定SUT模型和测试用例规约下。
主要包括如下技术:
8
1)测试用例随机生成:
采用随机游走的方式从系统的输入空间随机采样。
但可能导致每次生成的测试用例集拥有不同的特征,目前常常将随机游走与用户操作版本相结合。
2)专用的图搜索算法:
包括结点覆盖、边覆盖算法。
3)受限的模型检验:
用来确认或者证伪一个系统的属性。
对于特定的属性。
如果属性不满足的时候。
模型验证将输出一个反例。
4)符号执行:
它采用符号(如变量的名称)而不是实际的值来代表系统的输入,作为结果。
执行过程中系统所有的变量及输出为符号或关于符号的表达式。
5)演绎定理证明:
与模型验证相似。
用定理证明器代替了模型验证器。
一般用来检查公式的可满足性。
4.7联机、脱机测试用例生成
主要关注测试用例产生和执行的时机。
在联机测试用例生成时,测试用例产生算法可以依据SUT的实际输出予以调整。
这在SUT是非确定的时候是必要的。
脱机测试用例生成意味着测试用例在生成结束后才能执行。
脱机测试的一个优势是测试用例易于管理,因为测试用例变动较小。
并且可以尝试采用最小化方法对测试用例规模进行缩减。
基于模型的测试的工具SpecExplorer
5
5.1SpecExplorer
[11]是微软发布的一款与VisualStudioSpecExplorer紧密整合的基于模型测试的工具。
用户可以通过SpecExplorer对一个软件系统的期望行为进行建模,并自动生成能够在VisualStudio的测试框架下运行的测试代码。
模型可以用当前主流的程序设计语言C#开发,然后通过Cord语言脚本对模型进行配置和裁剪。
[12]这个名字来源于该工具可ExplorerSpec以自动探索规格说明(即Specification,简称Spec)的所有潜在行为,并将其行为模型表示为状态机。
一次探索的输出有可能非常巨大,所以SpecExplorer提供了Cord语言对输出进行裁剪,并选出测试中真正关心的场景。
SpecExplorer能够高效的解决状态爆炸的问题。
5.2连接测试用例和待测系统
[13]:
直接连接和适配SpecExplorer支持两种连接测试用例和待测系统的方式9
器连接。
直接连接是指将
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 模型 测试 综述 报告 讲解