软件测试工具 Software Testing Tool 任课老师:黄武 2019/1/17 58
提纲 软件测试概述 软件测试工具分类 软件测试工具选择 单元测试工具cppUnit介绍 2019/1/17 58
1 软件测试概述 软件测试的基本内容 软件测试的定义 软件测试的分类 软件测试的简单过程 2019/1/17 58
1.1 软件测试的基本内容 软件测试 图 软件测试知识域主题的分解结构 软件测试基础 测试级别 测试相关的度量 测试技术 测试过程 测试有关的术语 关键问题 测试与其它活动的联系 测试对象 测试目标 实际考虑 测试活动 评价被测程序 评价完成的测试 基于测试人员的直觉和经验 基于规格说明 基于代码 基于应用本质 选择和组合技术 基于错误 图 软件测试知识域主题的分解结构 2019/1/17 58
1.2 软件测试的定义 在IEEE标准610.12-1990中将软件测试定义为: 软件测试(Software Test)——在指定的条件下操作测试系统或组件(1),观察或记录结果(2),并对测试系统或组件的不同方面做出评估(3)的过程 总体来讲,软件测试是一个寻找和证实软件缺陷的过程 2019/1/17 58
1.3 软件测试的分类 单元测试 集成测试 系统测试 确认测试 回归测试 软件测试级别的几个阶段 2019/1/17 58
1.3.1 各种软件测试之间的关系 技术方法 应用目标/特性 单元测试 系统测试 验收测试 性能测试 强壮性测试 功能测试 白盒测试 黑盒测试 测试阶段或层次 适用性测试 可靠性测试 集成测试 安全性测试 2019/1/17 58
1.4 软件测试的简单过程 在很多软件程序员的眼中,测试软件就是运行软件,看软件在运行过程中是否出错; 实际上,运行软件只是软件测试的一部分 实际的软件测试是需要设计的,设计的结果是构建了测试用例,而测试是按照测试用例来运行软件的,运行软件得到的结果需要记录,统计 2019/1/17 58
1.4.1 最简单的测试过程 最简单的测试过程至少包括测试设计,生成测试用例,执行测试用例以及测试结果分析几个阶段 测试管理 测试设计 1.4.1 最简单的测试过程 最简单的测试过程至少包括测试设计,生成测试用例,执行测试用例以及测试结果分析几个阶段 测试设计 执行测试用例 测试结果分析 生成测试用例 测试管理 2019/1/17 58
1.4.2 一个软件测试的例子 对“Hello world”程序进行测试 ,程序代码如下: void static main (int argc, char* argv[] ) { printf( “Hello world”); return 0; } 2019/1/17 58
1.4.2.1 建立测试用例 测试最基本的方法就是建立并运行测试用例,我们通常使用表格的方式来构建简单的测试用例 表1 测试Hello world程序的测试用例 用例编号 说明 操作过程 输入值 期望的结果 1 测试程序功能 运行软件 无 在控制台上打印出”Hello world” 2019/1/17 58
1.4.2.2 执行测试用例 将Hello world 程序编译、连接形成可执行程序Hello.exe,然后运行它,因为测试不要求输入值,因此运行软件即是执行测试 Hello.exe 2019/1/17 58
1.4.2.3 记录运行的结果 程序在控制台上打印出Hello world字样 2019/1/17 58
1.4.2.4 测试总结 测试的实际结果与期望的结果一致,程序的打印功能是正确的 上面4步就是对Hello world程序的一次正式测试,尽管它还不够完整,但是它让我们看到了测试的整个过程 2019/1/17 58
1.4.3 对Hello World软件的改进 void static main (int argc, char* argv[] ) { switch ( *argv[1] ) { case ‘1’: /// 输入1打印Hello world printf( “Hello world!”); break; case ‘2’: /// 输入2打印Hello guy printf( “Hello guy!”); default: /// 输入其它参数打印Hello printf( “Hello!”); } 2019/1/17 58
1.4.3.1 建立测试用例 由于该程序接受参数,我们可以选择不同的输入参数来进行软件测试 表2 测试改进后Hello world程序的测试用例 编号 说明 操作过程 输入值 期望的结果 1 测试程序功能 运行软件 在控制台上打印出”Hello world!” 2 在控制台上打印出”Hello guy!” 3 在控制台上打印出”Hello!” 4 测试程序健壮性 无 打印出”Hello!” 2019/1/17 58
1.4.3.2 执行测试用例 我们在控制台上运行该程序,分别给程序带不同的输入参数,可执行程序的名字是Hello.exe Hello 1 2019/1/17 58
1.4.3.3 记录运行的结果 表3 测试改进后Hello world程序的结果记录 测试编号 输入 期望的结果 实际的结果 通过/失败 1 2 打印”Hello guy!” 3 打印”Hello!” 4 无 弹出错误对话框 失败 2019/1/17 58
1.4.3.3.1 错误对话框 执行不带参数的Hello程序后,弹出错误对话框,程序崩溃 2019/1/17 58
1.4.3.4 测试总结 在程序中使用了输入参数变量*argv[1],如果不输入任何参数,那么argv[1]为空指针(NULL),程序访问空指针会出现问题,如果我们在程序的前面对参数个数加以保护,就不会出现上面的问题 真是想不到,这么简单的一个程序也会出错 ! 是的,即使我们认为再简单的程序也可能包含错误,但软件测试可以找到这些错误 2019/1/17 58
问题 你以前正规的做过软件测试吗? 你知道测试工具对于测试而言有什么作用吗? 2019/1/17 58
2. 软件测试工具分类 测试工具是为了提高测试效率,用软件代替测试人工输入的有效方法 根据测试工具的作用,可以分类为: 白盒测试工具 黑盒测试工具 功能测试工具 性能测试工具 2019/1/17 58
2.1 白盒测试 白盒测试——软件测试员可以了解软件的内部结构以及实现的具体代码,从而可以根据程序的内部情况来设计更实用的测试案例 白盒测试工具就是针对代码进行测试,测试中发现的错误可以定位到代码的具体位置 if (x >1 0) p=x*2; else p= x; … 输入 输出 白盒测试 2019/1/17 58
2.1.1 白盒测试工具的分类 白盒测试工具可以分为两类 静态测试工具 直接对代码进行语法分析,根据某种质量模型评估代码,不需要运行代码 动态测试工具 动态测试工具采用在程序中插桩的方式,让程序中插入一些代码,然后运行代码统计程序运行时的数据 2019/1/17 58
2.1.2 白盒静态测试工具 白盒静态测试工具的代表是Telelogic公司的Logiscope软件 Telelogic是1983年在瑞典创立的复杂软件及系统开发解决方案供应商,其提供从需求管理、变更管理、可视化软件工程到软件测试的工具,其产品被各国军方所采用,2008年被IBM公司收购 2019/1/17 58
2.1.2.1 Logiscope软件 Logiscope是Telelogic公司推出的专用于软件质量保证和软件测试的产品 主要功能是对软件做质量分析和测试以保证软件的质量,并可做认证、反向工程和维护,特别是针对要求高可靠性和高安全性的软件项目和工程 http://blog.csdn.net/jxxy012/article/details/502548 2019/1/17 58
2.1.2.3 Logiscope软件的三大功能 Audit:定位错误模块,可评估软件质量及复杂程度,提供代码的直观描述,自动生成软件文档(根据标准进行评估) RuleChecker:根据工程中定义的编程规则自动检查软件代码错误,可直接定位错误。包含大量标准规则,用户也可定制创建规则,自动生成测试报告 TestChecker:测试覆盖分析,显示没有测试的代码路径,通过插装和软件运行进行分析 2019/1/17 58
2.1.2.2 Logiscope软件界面 2019/1/17 58
2.1.3 白盒动态测试工具 白盒动态测试工具的代表包括: Rational公司的Purify Numega公司的BoundsChecker Compuware公司的Devpartner等 Numega 1997年被Compuware收购 Micro Focus公司2009年收购Compuware公司的测试产品线 2019/1/17 58
2.1.3.1 IBM Rational Purify简介 IBM Rational Purify是一个面向VC, VB或者Java开发的测试工具,用于检查Visual C/C++ 和Java 代码中与内存有关的错误,确保整个应用程序的质量和可靠性 主要用于查找Visual C/C++ 程序中的传统内存访问错误,以及Java 代码中与垃圾内存收集相关的错误方面 2019/1/17 58
2.1.3.2 Purify界面 2019/1/17 58
2.2 黑盒测试工具 黑盒测试——是基于需求说明书的软件测试,在这种测试下,我们不需要了解软件的内部结构,内部分支,以及软件代码的具体实现 黑盒测试工具一般原理是利用脚本的录制和回放,模拟用户的操作,然后比较记录结果和预先设定的结果来判定测试的正确性 输入 输出 黑盒测试 2019/1/17 58
2.2.1 典型的黑盒测试工具 典型的黑盒测试工具包括: Compuware公司的QACenter Rational公司的teamTest、Robot等 2019/1/17 58
2.2.1.1 QACenter简介 QACenter测试软件是一个综合型的测试工具集,它帮助测试人员创建一个快速、可重用的测试过程 这些测试工具自动帮助管理测试过程,快速分析和调试程序,包括针对回归,强度,单元,并发,集成,移植,容量和负载建立测试用例,自动执行测试和产生文档结果 2019/1/17 58
2.2.1.2 QACenter的组成 QACenter主要包括以下几个模块: QARun:应用的功能测试工具 QALoad:强负载下应用的性能测试工具 QADirector:测试的组织设计和创建以及管理工具 TrackRecord:集成的缺陷跟踪管理工具 EcoTools:高层次的性能监测工具 http://baike.baidu.com/link?url=DePzfsLyNzDNZlBW6jiuNVbwy4ipGzw5GUTm_SHC-tvXeSX0To4Q1bm0SDcnMGADlOe-2R9wjHHuIhN9O6_JC_ 2019/1/17 58
2.3 功能测试工具 功能测试是对产品各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能 功能测试工具包括: Rational Robot SilkTest WinRunner 2019/1/17 58
2.3.1 Rational Robot Rational Robot 是rational 的产品之一,提供了软件的功能测试,它提供了许多类似机器人的重复过程 IBM Rational Robot 可以让测试人员对 .NET、Java、Web和其他基于 GUI 的应用程序进行自动的功能性回归测试 Rational Robot 可开发三种测试脚本,包括用于功能测试的GUI脚本、用于性能测试的VU以及VB脚本 2019/1/17 58
2.4 性能测试工具 性能测试是指通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试 性能测试工具用于测试软件的性能,包括: HP公司的LoadRunner Microsoft公司的WebStress Apache Jmeter(开源软件) 2019/1/17 58
2.4.1 LoadRunner LoadRunner是一种预测系统行为和性能的负载测试工具 2019/1/17 58
2.4.2 LoadRunner工作原理 2019/1/17 58
2.4.3 LoadRunner界面 2019/1/17 58
2.5 测试管理工具 测试管理包括对测试计划、测试用例、测试实施以及测试缺陷进行管理 测试管理工具是对测试过程进行管理的工具,典型的测试管理工具包括: Mercury Interactive公司(2006年被HP收购)TestDirector Rational公司的testManager Mozilla公司的Bugzilla(开源工具) 2019/1/17 58
2.5.1 TestDirector TestDirector是HP(Mercury Interactive)公司生产的企业级测试管理工具,也是业界第一个基于Web的测试管理系统,它可以在公司内部或外部进行全球范围内测试的管理 通过在一个整体的应用系统中集成了测试管理的各个部分,包括需求管理,测试计划,测试执行以及错误跟踪等功能 2019/1/17 58
2.5.2 TestDirector项目管理 基于Internet的测试项目管理 2019/1/17 58
2.5.3 TestDirector界面 2019/1/17 58
问题: 有这么多的测试工具,你怎么选择适合于你的测试工具呢? 2019/1/17 58
3. 测试工具的选择 测试工具众多,因此需要根据一定的条件来选择适合自己要求的测试工具 选择的测试工具的因素: 功能 价格 测试自动化 适合软件生命周期的各个阶段 2019/1/17 58
3.1 选择的步骤 图 测试工具选择步骤 成立小组 定义问题 测试自动化 的解决方案 工具供应商 确定 需求 商务谈判 决定 候选评估 演示检验 约束 工具软件市场 图 测试工具选择步骤 2019/1/17 58
3.1.1 选择的步骤说明 成立小组负责测试工具的选择和决策,制定时间表 确定需求,并研究不同的解决方案 了解市场上满足需求的产品,包括:基本功能、价格、限制以及服务等 根据了解的情况,决定是自己开发还是从市场上购买 2019/1/17 58
3.1.2 选择的步骤说明(续) 确定2~3种候选产品 请候选产品厂家介绍、演示产品 初步确定 商务谈判 最后决定 2019/1/17 58
问题 你知道什么是测试驱动开发吗? 2019/1/17 58
4. CppUnit单元测试 测试驱动开发(TDD)是以测试作为开发过程的中心,它坚持在编写实际代码之前,先写好基于产品代码的测试代码 XUnit是一个基于测试驱动开发的测试框架,它为我们在开发过程中使用测试驱动开发提供了一个方便的工具,使我们得以快速的进行单元测试 XUnit的成员有很多,如JUnit,PythonUnit等;CppUnit是XUnit家族中一个专门面向C++的测试框架 2019/1/17 58
4.1 初识CppUnit工具 将cppunit-1.12.1.tar.gz复制到你的计算机上 2019/1/17 58
4.2 编译CppUnit的例子 进入example文件夹,用VC++6.0打开examples.dsw 将CppUnitTestApp工程设为Active Project,编译后运行进入CppUnit的基于GUI方式进行单元测试的界面TestRunner 使用“Browse”按钮选择“Core”下的“TestCaseTest”案例 点击“Run”运行得到测试结果 2019/1/17 58
4.3 CppUnit的GUI界面 运行TestCaseTest的结果 2019/1/17 58
4.4 CppUnit的组织 CppUnit将所有的单元测试按照树的结构来表示 在CppUnit中,最小的测试单元称为测试方法TestMethod;而多个相关的测试方法又可以组成一个测试用例TestCase;多个测试用例又组成测试包 TestSuite CPPUnit的树形组织结构 2019/1/17 58
课堂讨论 学生讲解:介绍一款你熟悉的软件测试工具,比如WinRunner软件测试工具,讲讲它属于什么类型的测试工具,它的原理,它是如何工作的等 2019/1/17 58
作业 名次解释 软件测试 软件测试工具 简答题 软件测试工具是如何分类的,对每一类软件测试工具举一个例子 介绍软件测试工具Quick Test Professional 2019/1/17 58