基于模型的软件测试方法研究

发表于:2013-6-24 11:16

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:吴艳 张惠    来源:51Testing软件测试网采编

  摘要:随着面向对象软件开发技术的广泛应用和软件测试自动化的要求,基于模型的软件测试逐渐得到了软件开发人员和软件测试人员的认可和接受。基于模型的软件测试是软件编码阶段的主要测试方法之一,具有测试效率高、排除逻辑复杂故障测试效果好等特点。但是误报、漏报和故障机理有待进一步研究。对主要的测试模型进行了分析和分类,同时,对故障密度等参数进行了初步的分析;最后,提出了一种基于模型的软件测试流程。

  关键词:软件测试;软件模型;基于模型的测试;静态分析;

  1、引言

  基于模型的软件测试技术是针对软件中的一些常见的软件模型而提出的一种测试技术,如故障模型、安全模型和死锁模型等等。与形式验证排除故障不同,基于模型的软件测试技术首先提出软件模型,然后通过检测算法进行检测,如果检测算法是完全的,则能够从软件中排除该类模型。

  近年来,基于模型的软件测试技术得到快速发展,大量的软件测试工具被研制出来并可以自动检索软件中的故障,在对一些大型商业软件和开源软件的测试中发现了大量的以前测试没有发现的软件故障和安全隐患。例如,SDV在对Windows操作系统126个使用多年的驱动程序测试中发现了65个故障,包括12个严重故障;MC在Linux和OpenBSD软件中发现了近500个故障以及100多个安全漏洞。FindBugs在Eclipse、J2SE和Jboss等开源软件中发现上百个的故障。

  我国有不少高校和研究所从事软件测试及相关理论方面的研究工作,但是,尚未见国产的基于模型的商业化软件测试工具,目前国内测试中心使用的相关测试工具都是从国外购置的。近年来,和国外合作利用基于模型的静态分析测试工具对IBM、HP、BOEING等知名企业已经长期运行的数百万行商业代码进行测试和分析,发现了数百个的故障。同时,在军队预先研究等项目资助下自主开发了C/C++的故障查找工具TGSOFM,对国内7个软件约32万行、2类故障进行测试,发现了约300个故障。

  2、基于模型的软件测试技术

  2.1 技术特点

  与其他测试技术相比,基于模型的软件测试技术具有以下特点:

  (1)根据被测试应用程序的分析设计模型及其生成测试模型、产生测试用例和进行测试结果评价。

  (2)大大提高了测试自动化水平以及测试效率。在内存为1G,CPU为1.8G的PC机上,FindBugs对Eclipse、J2SE和Jboss等开源软件进行分析,所耗时间不超过65min,其中,J2SE中的rt.jar分析,该程序包有13083个类,约40M大小,所耗时间只需45min。在内存为512M,CPU为2.4G的PC机上,TGSOFM对约万行的VC程序进行故障分析所耗时间只需2min左右。

  (3)部分解决了测试失效辨识问题,往往能发现其他测试技术难以发现的故障,保证了软件质量。

  (4)有利于测试用例的重用,并可以应用成熟的理论和技术获得比较完善的分析结果。

  2.2 存在的主要问题

  基于模型的软件测试技术不能代替已有的其他测试技术,它是其他测试技术的一个有效补充。基于模型的软件测试技术虽然今年来得到广泛的研究,但是有一些问题依然没有得到很好地解决:

  (1)误报问题。误报问题是基于模型的软件测试技术一个共性问题。通常基于模型的软件测试技术都属于静态分析技术,由于某些故障的确定需要动态的执行信息,因此,对于基于静态分析的测试工具来说,误报问题是不可避免的。为此,Cadar等人提出,将动态测试与静态测试有机结合来解决误报问题。

  (2)漏报问题。漏报问题主要由模型定义和模型检测算法引起。目前软件模式没有一个规范统一的定义形式。不同的故障查找工具都给出自己所能检测的模型定义,这些定义一般是一些自然语言的描述;同时,针对具体的软件模型,不同的测试工具一般设计自己的检测算法,从检测的效率和实现的复杂性上考虑,不同的算法给出不同的假设以降低计算复杂性,这导致对于相同的模型,用不同的测试工具进行检测得到的故障结果集合很大不同。文献使用一些常用的Java程序故障自动分析工具对Eclips和JDK等开源软件进行测试,发现不同的测试工具得到的检测结果集差别较大;使用TGSOFM和Ressoning公司的工具对4个软件项目约32万行源代码关于内存泄漏和空指针引用故障进行测试,发现的故障集合有所不同。

  (3)模型机理。由于编程过程中,程序员具有较强的个体性,因此,软件模型是多种多样的。通常软件中的故障主要出自于程序员,如错误的理解造成的、二义性造成的、疏忽造成的和遗漏造成的。

  例:某C/S结构、采用Delphi语言开发的数据库类软件,该软件大约30万行,分7个子系统、20个模块,测试结果如表1所示:

  在该例子中,由于疏忽造成的错误占错误总数的大约63%,如果不考虑测试引入的错误,则疏忽造成的错误占错误总数的大约80%。虽然单个软件具有很强地个体性,但是,大量的测试数据统计分析可以发现有些软件模型是具有共性的,比如说内存泄漏故障模型、非法指针引用故障模型等。

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号