一、引言
模型驱动的软件测试(Model-Driven Test)技术是针对软件中的一些常见的软件模型而提出的一种测试技术,如故障模型、安全模型、死锁模型等。模型驱动的软件测试以明确描述系统预期行为的抽象模型为依据,根据模型覆盖测试准则自动生成抽象的测试用例,自动地产生测试脚本,执行测试并自动评价测试结果,从而有效提高测试效率。这一技术正成为当前软件工程学术界研究的一个重要方向。
近年来,基于模型的软件测试技术得到快速的发展,大量的软件测试工具被研制出来从而可以自动地检测软件中的故障,并且在对一些大型商业软件和开源软件的测试中发现了大量的以前测试没有发现的软件故障和安全隐患。
二、模型驱动的软件测试技术的特点
与其他测试技术相比,基于模型的软件测试技术具有如下特点:
(1)故障模型根据被测试应用程序的分析设计模型及其生成测试模型、产生测试用例和进行测试结果评价。
(2)大大提高了测试自动化水平以及测试效率。
(3)部分解决了测试失效辨识问题,往往能发现其他测试技术难以发现的故障,保证了软件质量。
(4)有利于测试用例的重用,并可以应用成熟的理论和技术获得比较完善的分析结果。
三、软件模型分类
软件模型是对软件行为和软件结构的抽象描述。软件模型通常可以分为以下7 类:
(1)故障模型
故障模型主要是会引起错误的常见软件模型, 应该尽量避免, 如内存泄漏故障(MLF) 、使用空指针故障(NPDF) 、数组越界故障(OOBF) 、非法计算类故障(ILCF) 、使用未初始化变量的故障(UVF) 、不完备的构造函数故障(ICF) 以及操作符异常故障(OAF) 等。
(2)安全漏洞模型
安全漏洞模型为他人攻击软件提供可能。而一旦软件被攻击成功,系统就可能发生瘫痪,所造成的危害可能更大。因此,此类漏洞应当尽量避免,如:缓冲区溢出漏洞模型、被感染数据漏洞模型、竞争条件漏洞模型等。
(3)差性能模型
该模型在软件动态运行时效率比较低下,因此建议采用更高效的代码来完成同样的功能。这类模型主要包括调用了不必要的基本类型包装类的构造方法、空字符串的比较、拷贝字符串、未声明为static 的内部类、参数为常数的数学方法、创建不必要的对象以及声明未使用的属性及方法等。
(4)并发故障模型
该模型主要是针对程序员对多线程的编码机制不十分了解,对各种同步的方法、Java 存储器模型和Java 虚拟机的工作机制不是很清楚,而且由于线程启动的任意性和不确定性使用户无法确定所编写的代码具体何时执行而导致对公共区域的错误使用,如死锁等。
(5)不良习惯模型
该模型主要是由于程序员编写代码的不好习惯造成的一些错误。包括文件的空输入、垃圾回收的问题,类、方法和域的命名问题,方法调用,对象序列化,域初始化等。
(6)代码国际化模型
该模型主要是在语言进行国际化的过程中,可能造成本地设置和程序需求不符的情况,造成匹配错误。
(7)易诱骗代码模型
该模型主要指代码中容易引起歧义的、迷惑人的编写方式。比如无意义的比较,永远是真值的判断,条件分支使用相同的代码,声明了却未使用的域等,即那些混淆视听,无法正常判断程序的真正意图的代码。
四、模型驱动的软件测试过程
模型驱动的软件测试方法通过对测试过程的抽象化,分离测试模型和测试执行,从而能够通过正向或逆向手段建立针对WA某方面特征的测试模型,并重用有针对性的测试执行手段。传统黑盒、白盒测试方法与模型驱动的软件测试方法并不矛盾,它们可以被包含到模型驱动的软件测试过程中。
如图1所示,测试模型是模型驱动的软件测试的核心概念,它在测试的不同阶段表现为不同视图。
(1)通过被测系统(SUT)视图得到测试模型;
(2)基于测试模型,自动化或半自动化地得到测试用例集,通过测试用例视图描述;
(3)在测试执行阶段,测试部署和调度视图通过相应模型描述测试的执行环境以及执行过程;
(4)根据部署调度模型自动执行测试用例,生成的结果通过测试结果视图显示,并将某些结果直接反馈给被测系统模型、测试用例模型以及部署调度模型,在各自视图上直观的显示出来,便于分析结果进行回归测试。
五、模型驱动的软件测试工具
模型驱动的软件测试必须有相关工具支持。当前,有代表性的模型驱动的软件测试工具中有:
(1)支持状态机模型的工具。包括:Software Engineering Technology的测试工具toolSET_Certify,运行于RISC6000和SUN平台;IBM的GOTCHA,可以根据用户事先确定的测试充分性准则进行基于软件状态模型的测试例生成;IBM 的TCBean是一个提供测试脚本管理功能的基于状态机的测试引擎。
(2)支持马尔可夫链模型的工具。包括:Cleanroom Software Engineering的CleanTest,支持统计测试,是商用的使用模型及统计测试例生成工具;IBM 的CleanroomCertification Assistant,可以自动化统计验证过程,通过使用概率分布产生测试例,并对测试结果进行分析。
(3)对UML模型提供测试支持的工具。包括:SilverMark公司针对IBM 公司的VisualAge开发的支持测试用例生成和回归测试的TestMetor和UML Designer Connection。
本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/