软件自动化测试技术选择:驶入测试“快车道”
 
2008-12-04 来源:网络
 

软件测试,特别是测试自动化技术属于当前国际软件界最有争议,亟待发展的技术。所谓自动化测试就是希望能够通过自动化测试工具或其他手段,按照测试工程师的预定计划进行自动的测试,目的是减轻手工测试的劳动量,从而达到提高软件质量的目的。

测试工具

在进行测试活动时,采用合适的测试方法和相对应的自动化测试工具是至关重要的。

1.静态分析工具

静态分析工具的特点是一种直接对代码进行分析,不需要运行代码,也不需要对代码编译链接,生成可执行文件,从中寻找可能导致错误的异常情况的测试工具。静态测试工具一般是对代码进行语法扫描,找出不符合编码规范的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等。

● 静态确认工具

对源程序进行静态分析和确认,从而发现某些常见的错误。这样的测试工具还能进行不可靠结构的检查,识别出可疑的易出错的结构,并进行危险变量的监视。

● 符号执行工具

以符号值作为程序的输入,使程序符号执行。系统可以“穷尽”测试符号的选择,以便能自动或者交互地检查符号执行树的每条路径,并自动对输出结果与输出断言进行比较,一般说来,这样的符号执行系统都具有交互式纠错功能,包括跟踪断点设置、状态存储等。

● 程序验证工具

交互式程序验证系统,是程序正确性证明的一个工具。输入源程序和程序断言;输出是对程序正确性的一个判断,即程序执行结果是否必定满足断言的要求。系统可自动产生程序中的断言,系统的内部实现基于符号逻辑变换和结构归纳。

2.动态分析工具

动态分析工具的主要功能是分析被测程序逻辑中每个语句的执行次数。动态分析工具与静态分析工具不同,动态分析工具一般采用“插桩”的方式,向代码生成的可执行文件中插入一些监测代码,用来统计程序运行时的数据,其与静态分析工具最大的不同就是动态分析工具要求被测系统实际运行。

● 覆盖监视工具

这样的工具系统可在程序逻辑的适当位置安插一些“探测器”,以便对程序进行监视,产生带统计数字的报告。使用该工具可以测试出没有执行的语句,以便增加相应的测试数据。

● 驱动工具

采用自底向上渐增方式测试时需要编写许多虚构的驱动模块。驱动工具可以免除人们编写驱动模块的负担。它提供一种测试语言来写测试过程,表明要测试的模块、使用的测试用例、预期的输出等。这样不再需要人工编写任何驱动程序,系统能自动把输入数据传送给被测模块,并负责将实际输出结果与预期的结果相比较。

● 测试数据产生工具

这是帮助自动选择测试用例的工具。这样的系统利用一个存放程序各种“素材”的共用信息库,使测试人员能用命令方便地定义测试用例,并在适当的时候自动运行这些测试用例。而当被测程序修改后系统能自动个性测试用例,以保持这些测试用例的可用性。此种工具对于测试系统在实际环境中的性能以及测试一个数据库的管理系统时比较方便。

● 符号查错工具

此工具提供屏幕显示功能,显示程序的动态执行情况,或者在程序执行中断时,显示程序执行的当前状态的历史信息,以便进行检查和修改。这样的查错系统,实际上为程序提供了一个执行的环境,能够跟踪监视和控制程序的执行。系统界面以查错命令方式交互工作,系统实现依赖于程序执行的历史记录。

3.综合测试评估工具

把静态分析、动态分析、测试评估等综合在一起,测试人员可以用命令来控制系统执行不同的测试工具,各工具模块之间的通信通过数据库来实现。一个可行的简单办法是建立一组测试工具,或者叫做测试工具库。这些工具可能都是相互独立设计的,彼此间没有什么联系,但都能从某一侧面对程序进行测试,任由用户选择使用。

测试脚本

在测试过程中,测试脚本起着关键的作用。每种脚本技术在支持脚本完成测试事例的时间和开销上都有各自的长处和短处。对于软件测试来说,使用哪种脚本技术并不是最主要的,脚本所支持的实现测试事例体系的整体考虑才是最主要的。

1.线性脚本技术

线性脚本是录制手工执行的测试事例得到的脚本。这种脚本包括所有的击键、功能键、箭头控制测试软件的控制键及输入数据的数字键。如果用户只使用线性脚本技术,即录制每个测试事例的全部内容,则每个测试事例可以通过脚本完整地被回放。几乎任何可重复的操作都可以使用线性脚本技术实现自动化。

2.结构化脚本技术

结构化脚本类似于结构化程序设计,结构化脚本中含有控制脚本执行的指令,这些指令或为控制结构或为调用结构。所有测试工具脚本语言支持三种基本控制结构。第一种形式为“顺序”脚本(即前面介绍的线性脚本)。另外两种控制结构形式的脚本为“选择”或“叠代”。选择控制结构使脚本具有判断功能,最普通的形式是“if”语句判断条件为真或为假; 叠代控制结构可以根据需要重复一个或多个指令序列,有时也将这种结构称为“循环”。

除控制结构外,一个脚本可以调用另一个脚本,即将一个脚本的控制点转到另一个子脚本的开始,执行完子脚本后再将控制点返回到第一个脚本。这种机制可以将较大的脚本分为几个较小的易于管理的脚本。

结构化脚本技术的主要优点是健壮性更好;可以执行许多其他类似的功能,如需要重复的指令可以使用循环结构;还可以作为模块被其他脚本调用。其缺点是使用脚本变得更加复杂,而且测试数据仍然“捆绑”在脚本中。

3.共享脚本技术

共享脚本是指脚本被多个测试事例使用。这种技术的思路是产生一个执行某种任务的脚本,而不同的测试要重复这个任务,当要执行这个任务时只需在每个测试事例的适当地方调用这个脚本。这样将带来两个好处: 第一,可以节省生成脚本(编写或录制指定的操作)的时间。


 第二,当重复任务发生变化时,只需要修改一处脚本。

共享脚本以比较小的开销实现相似的测试用例,结构性好、模块性强、维护成本低于线性脚本,它适合于小型系统或大型应用中的一小部分测试。但是由于每个测试仍需要一个特定的测试脚本,因此维护成本仍然比较高。

4.数据驱动脚本技术

数据驱动脚本技术将测试输入存储在独立的数据文件中,而不是存储在脚本中,脚本中只存放控制信息。执行测试时,从文件中而不是直接从脚本中读取测试输入。这种方法的最大好处是同一个脚本可以运行不同的测试,另一个优点是数据文件的格式对于测试者而言易于处理。

测试的初始建立需要花费一定的时间,然而对于大系统,由于生命周期较长并且改动频繁,使用这个方法,所获得的收益将远远超过所花费的开销。

5.关键字驱动脚本技术

数据驱动技术要求每个测试用例执行的导航和操作必须一样,测试的逻辑知识建立在控制脚本和数据文件中,两者需要统一。如果允许控制脚本支持广泛的测试用例,那么就会增加数据文件的复杂性。这样,就使测试用例自动化变得非常困难。

关键字驱动技术则是将数据文件变为测试用例的描述,用一系列关键字指定要执行的任务,这些关键字存在于测试文件中。解释这些关键字则需要另外的支持脚本。控制脚本读取测试文件中的关键字,并通过关键字调用相关的支持脚本,这样,测试软件或特殊应用对控制脚本的约束将大大减小。这种测试方法有利于当测试工具发生改变时,不需要改变测试用例,只要更新实现测试用例的支持脚本即可。


火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。
资源网站: UML软件工程组织