测试自动化与测试工具软件——软件测试的必经之路测试自动化的理由•提高测试的效率;•达到更好的测试效果;•减少测试中引入的错误;•节约软件测试阶段的代价;•仿真作模拟•坚持不懈•需要强调指出:所有可以自动化的测试工作都可以用手工完成;测试工具•查看器和监视器–Viewer–Monitor–Communicationsanalyzer•程序驱动工具–控制和操作被测试软件的工具•Batchfile•脚本运行工具•Stubs–Emulator测试工具•压力和负载工具–Stess–Load•干扰注入器和噪声发生器–内存、CPU等资源–数据•分析工具–Word,excel,database,filecomparer,scape,cal,cameral回顾:简单的软件测试过程SoftwaretobetestedTestCaseOutputVerification测试自动化涵盖的内容•软件测试过程的自动化–测试用例自动生成–测试驱动自动生成–自动执行测试–测试结果自动比较–测试报告自动生成•软件测试管理的自动化(计算机辅助)•软件程序分析的自动化自动化的一般规律•自动化工作适用范围–大量的重复性的劳动;–复杂的计算过程;•自动化工作的条件–能形式化的进行描述的工作;–能避免交互的工作;自动化中要考虑的问题•需要做的工作–编程(自动测试工具、驱动程序、桩程序)–自动化测试的前期准备–自动化测试的数据接口•避免自动化工作对测试的真实性有效性带来不利影响;测试数据自动生成•即根据已知的一些条件生成用于测试的输入数据。生成测试数据的依据不同,方法也不同。•基于程序结构的测试数据生成–静态分析•基于谓词计算的分析方法–动态搜索(基于路径覆盖)•遗传算法•退火算法•二分法测试数据自动生成•基于需求说明的测试数据生成–基于形式逻辑的规格说明(因果图的形式化描述)–等价类方法–边界条件分析–基于UML图的测试数据生成测试过程自动化•主要工作–消除程序运行过程中的用户交互过程;–自动执行多个测试用例;–保留执行结果;–能观察和控制执行过程(可控制性);•主要方法–替换程序中的交互函数;–驱动程序和桩程序的编写;–事件驱动测试测试结果自动比较•把测试的实际输出结果,和测试用例的预期结果进行比较,得出测试用例是否通过的结论;•必须强调的是测试用例的ID;•结果比较时的一些特殊情况–GUI测试测试报告自动生成•根据测试结果比较的结论,产生测试报告;–测试情况总结,错误定位分析;–测试有效性和可靠性分析;•如果要进一步进行测试情况的分析,还需要相应的信息;–控制流程图;–数据流图;其他工作•测试过程的自动化管理(Rational)–产生测试计划;–进行测试过程跟踪;•程序相关信息提取–程序控制流图生成–程序单元识别和相互关系分析–变量依赖关系分析–程序切片例子:一个测试驱动器的开发典型的测试工具软件•结构性测试工具,一般完成以下一种或几种功能:–(1)对被测程序进行静态分析,得到相关的结构信息;–(2)确定测试模块(或类,也可以是方法)的顺序;–(3)根据一定的覆盖准则(例如分支、路径、定义-使用对覆盖等)产生测试数据,(有的也可能产生期望输出);–(4)自动生成测试过程中所需要的桩模块;–(5)执行被测程序,收集动态测试的信息,并根据相应的测试准则评估测试结果。•代表软件有C++Test、Cantata++等;该方向的原型系统研究比较多,典型的有TOONS、OOTME、ASTOOT、OOTA等。典型的测试工具软件•功能性测试工具,功能性测试工具最常见的是利用脚本的录制(Record)/回放(Playback),模拟用户的操作,记录被测程序的输出并同预先给定的标准结果比较。•代表性的软件有:RationalTeamTest、Robot、TestRuner、VisualTest、QC/Replay等。典型的测试工具软件•性能/负载测试工具主要是检查系统在重负载情况下的性能,多用于对网络应用程序的测试。•常见的工具有QALoad、RationalSuitPerformanceStudio等典型的测试工具软件•测试辅助工具通常包含以下几类:–(1)覆盖分析工具,如Panorama-C/C++、TCATC/C++/Java、CTC++等;–(2)软件度量(如复杂性分析)工具,如CMT++、McCabeQA、PC-Metric等;–(3)运行时错误(如内存泄漏)检查工具,如BoundsChecker、MemCheck等;–(4)错误跟踪工具,如BugTracker、VisualBugz等;–(5)测试项目管理工具,如TestManager、TestLibraryManager等。