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

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

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

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

分享:

  3、软件模型分类

  软件模型又很多,目前常用的就有数百种。软件模型通常可以分为以下7类。

  (1)故障模型。该类模型是引起错误的常见软件模型,应该尽量避免,如内存泄漏故障(MLF)、使用空指针故障(NPDF)、数组越界故障(OOBF)、非计算类故障(ILCF)、使用未初始化变量的故障(UVF)、不完备的构造函数故障(ICF)以及操作符号故障(OAE)等。

  表2是对3197302行、美国生产的C++程序4类故障的测试结果。可以看出,4类故障总的故障密度为0.48/KLOC,也就是说,大约2000行C++的代码有一个故障。

  (2)安全漏洞模型。该类模型为他人攻击软件提供可能。而一旦软件被攻击成功,系统就可能发生瘫痪,所造成的危害可能更大,因此,此类漏洞应当尽量避免,如:缓冲区溢出漏洞模型、被感染数据漏洞模型、竞争条件漏洞模型以及风险操作S 随机数漏洞模型等。从统计的数据来看,在上述所给出的故障类型中,其故障密度一般在1个故障/1~2KLOC。因此,测试这些故障是很有价值的。

  (3)差性能模型。该模型在软件被动态运行时效率比较低下,主要包括调用了不必要的类构造方法、空字符串的比较、参数为常数的函数定义、创建不必要的对象以及声明未使用的属性及方法等。

  (4)并发故障类型。由于线程启动的任意性和不确定性使用户无法确定所编写的代码具体何时执行而导致对公共区域的错误使用,如死锁等。

  (5)不良习惯模型。该模型主要是由于程序员编写代码的不好习惯造成的一些错误。包括文件的空输入、垃圾不及时、类和方法等命名不合法、对象序列化、参数传递不一致和代码安全性问题等。

  (6)代码国际化模型。该模型主要是在语言进行国际化的过程中,可能造成本地设置和程序需求不符的情况下,造成匹配错误。

  (7)易诱骗代码模型。该模型主要指代码中容易引起歧义的、迷惑人的编写方式。比如无意义的比较,永远是真值的判断,条件分支使用相同的代码,声明了却未使用的域等。

  4、基于模型的软件测试流程

  基于模型的软件测试过程中从源代码输入开始,经历预编译、词法分析、语法分析与语义处理、抽象语法树生成、控制流图生成和故障扫描等几个步骤,最后生成故障报表。监测流程如图1所示。

  各个操作步骤如下所示:

  (1)预编译。由于源程序中存在宏定义、文件包含和条件编译等预处理命令,因此,在进行词法分析前必须进行预编译,将宏展开,这样有利于变量的查找。

  (2)词法分析。将预编译阶段产生的中间代码进行分解,形成各种符号表,为语法分析做准备。符号表的结构主要有:标识符表、类型表、关键表、常数表、运算符表和分界符表。

  (3)语法分析和语义处理。这一步主要是将输入字符串识别为单词符号流,并按照标准的语法规则,对源程序进一步分析,区分出变量定义、赋值语句和函数等等。语法分析的结果是生成语法树,并提供对外的接口。此外,通过语法树可以生成程序的控制流图和变量的定义使用链,为下一步的故障查找做准备。

  (4)抽象语法树生成。语法分析和语义处理之后生成抽象语法树,源程序中的所有语句都作为抽象语法树中的结点。抽象语法树是后续操作的基础,含有后续处理所需要的各种信息,如语句类型、变量名及类型等。

  (5)控制流图生成。在抽象语法树的基础上生成控制流图,控制流图必须能反映源程序的结构。

  (6)故障扫描。故障扫描是测试过程的关键步骤,首先定义测试模型,然后在控制流图上遍历对测试模型进行匹配,从而生成故障报表。工具所能检测的故障的集合取决于定义的测试模型集合。

  (7)人工确认。由于误报的存在,因此,需要对生成的故障进行人工确认。人工判定是基于模型的软件测试技术的主要消耗步骤。

  5、结束语

  面向模型的软件测试技术是测试效率很高的测试方法,是目前其他测试方法无法替代的。当然,它也不能替代已有的其他测试技术,因为,软件中的故障仅仅只依靠该方法进行测试是不行的。随着软件模型类型的逐步增多,测试算法的逐步成熟,以该方法为基础所开发的测试系统必然会在市场上广泛在我国,该技术的研究则刚刚起步,但已经收到了很好的效果。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号