第5章 特定环境及应用测试1.ppt_第1页
第5章 特定环境及应用测试1.ppt_第2页
第5章 特定环境及应用测试1.ppt_第3页
第5章 特定环境及应用测试1.ppt_第4页
第5章 特定环境及应用测试1.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第5章 特定环境及应用测试,5.1 客户/服务器体系结构测试 5.2 图形用户界面GUI测试 5.3 实时系统测试 5.4 面向对象软件的测试,本章教学目标,理论环节 认识和理解特定环境及应用的测试 掌握客户/服务器体系结构测试方法 掌握图形用户界面GUI测试内容 认识和理解实时系统测试 认识和理解面向对象的软件测试基本概念和基本知识 掌握面向对象软件测试的常用方法 实践环节 掌握对Web进行的压力测试 掌握类的数据流测试,重点设置登录服务器的网络设置,5.1 客户/服务器体系结构测试,5.1.1 客户/服务器体系结构测试方法 5.1.2 Web网站的测试 5.1.3 对Web进行压力测试 5

2、.1.4 使用WAS进行Web负载测试,Return,5.1.1 客户/服务器体系结构测试方法,从宏观上说,C/S体系结构的软件测试通常是从单个客户端开始,然后再逐步集成客户端、服务器和网络系统进行集成测试,最后进行系统的整体测试。即从以下三个层面来进行C/S系统的测试: (1)客户端的独立测试 对客户端的测试主要是属于功能性测试。用户客户端应用以“分离的”模式被测试,即这层测试不考虑服务器和底层网络的运行。通常包括: 客户端的测试检测客户端的业务逻辑流程的应用 操作系统平台测试在各种系统平台上进行兼容性测试 浏览器测试,客户/服务器体系结构测试方法(续),(2)客户端与服务器端的集成测试 客

3、户端软件和关联的服务器端应用作一体测试,但并不过多考虑网络运行的关联因素。 对服务器的测试主要是性能的测试。测试包含服务器的协调和数据管理功能以及服务器的性能(整体响应时间和数据的吞吐量)的表现。通常包括:数据库测试、连接速度测试、负载测试、压力测试。 对应用服务器(中间件)的测试 对C/S系统的集成测试一般采用非增量式的方法完成。此外,C/S测试必须考虑面向对象的测试技术,尤其是C/S系统基本上都采用了GUI(图形用户界面)。,客户/服务器体系结构测试方法(续),(3)整体测试 对完整的C/S体系结构整体测试,在上述功能测试和性能测试的基础上,还包括网络运行及其性能的测试。 整体测试通常包括

4、以下测试项目: 事务测试创建一系列的测试以保证每类事务被按照需求处理。事务测试着重于处理的正确性,同时也关注性能问题。 网络通信测试用于验证网络节点间的通信是否正常的发生,并且消息传递、事务和相关的网络通信有无错误的发生。,5.1.2 Web网站的测试,基于 Web 的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试,从功能、性能、可用性、客户端兼容性、安全性等方面讨论了基于Web的系统测试方法。 对Web网站测试所采用的测试方法与策略有哪些? 黑盒测试、白盒测试、静态测试和动态测试都有可

5、能用到,还会包括面向对象测试技术的运用。 Web网站的测试是一项复杂的任务,如何进行? 最初的起点是把网页或整个网站当作一个黑盒子。,网页测试,文字测试:检查用户等级、术语、内容、准确度以及内容的时效性。 链接测试:测试所有链接是否能按照指示的那样正确链接到应当链接的页面;测试所链接的页面是否存在;确保不存在孤立页面(即没有链接指向的页面)。 图形、图像测试:确保有明确的用途;颜色的搭配;图片的大小和质量;所有图形是否能够正确载入和显示。 表单测试:检测域的大小;数据接收是否正确;可选域是否真正可选;提交操作的完整性等。 动态内容测试(要求能查看到程序源代码) Cookies测试:Cookie

6、s是否起作用;是否按预定的时间进行保存;刷新对Cookies有何影响等。,网站测试,数据库测试:在使用了数据库的Web系统中,测试由用户提交的表单信息不正确而引起的数据一致性问题;测试由网络速度或程序设计等问题引起的输出故障。 服务器性能及负载(压力)测试:通过应用模拟的方法实现,即通过某种程序方法(工具软件)模拟上万个链接和下载来判断服务器的响应时间、并发访问数量等性能与负载能力。 可用性测试:包括整体界面测试和导航测试。 安全性测试:测试有效和无效的用户名和密码;测试Web应用系统是否有超时的限制;测试相关信息是否写进了日志文件、是否可追踪;在使用了安全套接字时,测试加密是否正确;在没有经

7、过授权时,测试是否能拒绝在服务器端放置和编辑脚本。,5.1.3 对Web进行压力测试,Web服务测试原理 Web压力测试 压力测试是系统测试的一部分,要被设计为通过应用很大的工作负载来使软件超负荷运转,其目的是要弄清楚被测试的Web服务是不是不仅能做预期应能做的事,而且在被施加了某些高强度压力的情况下仍能继续正常运行。如果压力测试通过对软件保持高强度的使用(不超过性能统计数字确定的限制)能够有效执行,那么它就经常能够发现许多其它测试无法发现的隐蔽错误。 压力下的错误类型 内存泄露通常要求操作重复非常多的次数后才会出现 并发与同步,对Web进行压力测试(续),图 Web服务测试原理,对Web进行

8、压力测试(续),有效的压力测试系统的关键条件 重复:就是一遍又一遍地执行某个操作或功能。这将确定一个操作能否正常执行,并且能否继续在每次执行时都表现正常。 并发:就是在同一时间内执行多个操作。由并发引起的错误只能通过执行多个代码示例才能测出来,测试时要同时遍历多条代码路径。 量级:要考虑到每个操作中的负载量,操作自身应尽可能给被测软件系统增加压力,即:尽量使单独的操作进行高强度的使用,增加操作的量级。 随机变化:随机使用前面条件中的无数变化形式,就能够在每次测试运行时应用许多不同的代码路径。,5.1.4 使用WAS进行Web负载测试,负载测试是任何Web 应用开发周期中一个重要的环节。在构造一

9、个为大量用户服务的应用之前,搞清楚产品配置能够承受多大的负载非常重要。但是在实际开发过程中,若要按照实际投入运行的情况,组织成千上万的用户来进行压力测试,无论从那个方面看,都是不现实的。 为了有效的对Web应用程序进行负载(压力)测试,微软公司发布了简单易用、功能强大的Web应用负载测试工具WAS(Web Application Stress Tool),它能够提供一种简单的方法模拟大量用户进行访问目标网站,而且还能够提供Web应用程序工作时对硬件和软件的使用情况。 如何使用WAS进行Web负载测试?,5.2 图形用户界面GUI测试,由于GUI开发环境采用了较多可重用的组件,因此在开发用户界面

10、时高效、省时而且精确;但由于GUI的复杂性,增加了对这类情形的软件进行测试的难度,从而也加大了设计和执行测试用例的难度。 目前,针对GUI的测试技术基本上都是采用自动化测试工具来实现。 具体测试工作中,GUI测试经常需要考虑以下的测试内容和方法: 窗体操作测试 下拉式菜单和鼠标操作测试 数据项操作测试,5.3 实时系统测试,实时系统:将硬件、软件、人力和数据库元素集成起来,产生某种动作响应外部世界。在实时系统中,时间是交互的核心,它必须高速地获得数据,并在问题域规定的时间框架内对该问题域做出相应的处理。 实时系统测试的特殊性和复杂性: 实时系统的时间依赖性和异步性给测试带来新的困难。 实时系统

11、的软件和硬件之间存在着密切关系,测试时必须考虑硬件故障对软件处理的影响。 实时系统测试的一般步骤: (1)任务测试;(2)行为测试;(3)任务间测试;(4)系统测试。,5.4 面向对象软件的测试,5.4.1 面向对象的基本概念 5.4.2 面向对象的软件测试与传统软件测试 5.4.3 面向对象软件测试模型 5.4.4 类的功能性测试和结构性测试 5.4.5 状态转移图的面向对象软件测试,Return,5.4.1 面向对象的基本概念,对象 类 消息 接口 继承 多态和动态绑定,对象,对象是指包含了一组属性以及对这些属性的操作的封装体。属性可以是数据,也可以是另一个对象;每个对象都有它自己的属性值

12、,表示该对象的状态;对象中的属性只能通过该对象所提供的操作来存取或修改。对象所具有的状态、行为、标识三个基本特征,分别对应与对象的属性、方法和对象名。 对象是软件开发期间测试的直接目标。 面向对象软件测试所关注的焦点: (1)对象的行为是否符合它的规定说明; (2)该对象与和它相关的对象是否协同工作。,类,类是具有相同属性和相同行为的对象的集合。面向对象程序运行的基本元素是对象,而类则是用来定义对象这一基本元素的。 在面向对象程序设计中,类是一个独立的程序单位,它有一个类名,还包括用于描述对象属性的成员变量和用于描述对象行为的成员函数。 类是对象的抽象定义,它定义了用户将要如何创建对象的方法。

13、使用类时必须先实例化用对象名创建类的实例,再通过这个对象去访问类的成员变量,去调用类的成员函数。,消息,消息是对象的操作将要执行的一种请求,也被称为成员函数调用或者方法调用。面向对象的程序的执行实际上是执行一个由消息连接起来的方法序列。 “发送消息M到对象N” =“调用N对象的M方法” 一个对象通过向另一个对象发送消息来请求其服务,对象之间的协同工作是通过互相传送消息来完成的。 一个消息通常包括接收对象名、调用的操作名和适当参数(如有必要)。消息只告诉接收对象需要完成什么操作,但并不指示接收者怎样去完成操作。消息完全由接收者解释,接收者独立决定采用什么方法来完成所需操作。,消息(续),从测试的

14、角度看,关于消息有下面的结论: (1)消息的发送者决定何时进行发送消息,可能会做出错误的决定; (2)消息的接收者可能收到非预期的特定消息,并做出不正确地反映; (3)消息可能含有参数。在处理一条消息时,参数能被接收者使用或修改。若传递的参数是对象,那么在消息被处理前和处理后,对象必须处于正确的状态,而且必须是接收者所期望的接口。,接口,接口是行为声明的集合。接口是由一些规范构成的,规范定义了类的一套完整的公共行为。 从测试的角度,关于接口有下面的结论: (1)接口封装了操作的说明。如果这一接口包含的行为和类的行为不相符,那么这一接口的说明就有问题。 (2)接口非孤立,它与其它的接口和类有一定

15、的关系。一个接口可以指定一个行为的参数类型,使得实现该接口的类可以被当作一个参数进行传递。,继承,继承是指在某个类的层次关联中,不同的类共享属性和操作的一种机制。继承允许一个新的类(称为子类)在一个已有的类(称为父类或者基类)的基础上进行定义。一个父类可以有多个子类,这些子类都是父类的特例。父类描述了这些子类的公共属性和操作,子类中还可以定义它自己的属性和操作。 从测试的角度来看,继承包含以下内容: (1)继承提供一种机制,通过这种机制,潜在的错误能够从一个类传递到它的派生类。 (2)子类是从父类继承过来的,子类也就继承了父类的属性和操作。因此,可以用测试父类的方法对子类进行测试。,多态和动态

16、绑定,多态是指同一个操作作用于不同的对象可以有不同的解释,产生不同的执行结果。多态提供了将类看作是一种或多种类型的能力,它定义了用来支持多种不同类型所适应的策略。多态可分为包含多态与参数多态。 与多态密切相关的一个概念就是动态绑定。传统程序设计语言把过程调用与目标代码的连接放在程序运行前进行,称为静态绑定。而动态绑定则是把这种连接推迟到运行时才进行。 在程序运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。,5.4.2 面向对象的软件测试与传统软件测试,面向对象技术所独有的封装、继承、多态等新特点给测试带来一系列新的问题,增加了测试

17、的难度。与传统的面向过程的程序设计相比,面向对象程序设计产生错误的可能性增大,或者使得传统软件测试中的重点不再那么突出,使原来测试经验和实践证明的次要方面成为了主要问题。 例如:函数 y = Function(x) 如果该函数写在传统的面向过程的程序中,通常考虑的是函数Function()本身的行为特点。但若写在面向对象的程序中,就不得不同时考虑基类函数Base:Function() 的行为和继承类函数Derived:Function()的行为。,面向对象技术的特点给测试带来的新问题具体表现为: (1)封装把数据及对数据的操作封装在一起,限制了对象属性对外的透明性和外界对它的操作权限,在某种程

18、度上避免了对数据的非法操作,有效防止了故障的扩散。但同时,封装机制也给测试数据的生成、测试路径的选取以及测试结构的分析带来了困难。 (2)继承实现了共享父类中定义的数据和操作,同时也可定义新的特征。子类是在新的环境中存在,所以父类的正确性不能保证子类的正确性。继承使代码的重用率得到了提高,但同时也使故障的传播几率增加。 (3)多态和动态绑定增加了系统运行中可能的执行路径,而且给面向对象软件带来了严重的不确定性,给测试覆盖率的活动带来新的困难。,面向对象的软件测试与传统软件测试(续),与传统软件相比,由于存在的诸如继承、关联、动态绑定等关系,面向对象软件具有更复杂的依赖关系,一个类将不可避免的依

19、赖于其它的类,从而增加了面向对象软件测试的难度。 传统软件中存在的依赖关系有:变量间的数据依赖;模块间的调用依赖;变量与其类型间的定义依赖;模块与其变量间的功能依赖。 面向对象软件除了存在上述依赖关系外,还存在以下的依赖关系:类与类间的依赖;类与操作间的依赖;类与消息间的依赖;类与变量间的依赖;操作与变量间的依赖;操作与消息间的依赖;操作与操作间的依赖。,面向对象的软件测试与传统软件测试(续),5.4.3 面向对象软件测试模型,面向对象的程序结构不再是传统的功能模块结构,作为一个整体,原有集成测试所要求的逐步将开发的模块搭建在一起进行测试的方法已变得不可行。而且,面向对象软件抛弃了传统的开发模

20、式,对每个开发阶段都有不同以往的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因此,传统的测试模型对面向对象软件已经不再适用。 面向对象的软件开发模型将开发过程定义为面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)三个阶段。针对这种开发模型,应该建立一种新的测试模型。,面向对象软件测试模型(续),面向对象的测试模型,面向对象软件测试模型(续),OOA Test 和OOD Test 是对分析结果和设计结果的测试,主要是对分析设计产生的文档进行测试,是软件开发前期的关键性测试。OOP Test 主要针对编程风格和程序代码实现进行测试,主要的测试内容在面

21、向对象单元测试和面向对象集成测试中体现。 面向对象单元测试针对程序内部具体单一功能的模块进行测试,比如在C+程序中主要就是对类成员函数的测试。面向对象集成测试主要对系统内部的相互服务进行测试,如成员函数间的相互作用、类间的消息传递等。面向对象系统测试是基于面向对象集成测试的最后阶段的测试,主要以用户需求为测试标准。,面向对象分析的测试(OOA Test),OOA直接映射问题空间,全面地将问题空间中实现功能的实例抽象为对象(不同于C+中的对象概念),用对象的结构反映问题空间的复杂实例和复杂关系,用属性和服务表示实例的特性和行为。 OOA的测试重点在其完整性和冗余性。对OOA阶段的测试划分为五个方

22、面:对认定的对象的测试;对认定的结构的测试;对认定的主题的测试;对定义的属性和实例关联的测试;对定义的服务和消息关联的测试。 OOA中认定的对象:是指对问题空间中的结构、其他系统、设备、被记忆的事件、系统涉及的人员等实际实例的抽象。,面向对象设计的测试(OOD Test),OOD是OOA的进一步细化和扩充,重点在于说明项目的实施方案,来确定类和类的结构。 对OOD的测试,应针对功能的实现和重用以及对OOA结果的拓展进行,从以下三方面考虑: (1)对认定的类的测试是否涵盖了OOA中所有认定的对象;是否能体现OOA中定义的属性;是否能实现OOA中定义的服务;是否对应着一个含义明确的数据抽象;是否尽

23、可能少的依赖其他类;类中的方法是否单用途。 (2)对构造的类层次结构的测试类层次结构是否涵盖了所有定义的类;是否能体现OOA中定义的实例关联;是否能实现OOA中定义的消息关联;子类是否具有父类没有的新特性;子类间的共同特性是否完全在父类中得以体现。 (3)对类库支持的测试,面向对象编程的测试(OOP Test),面向对象程序是把功能的实现分布在类中。能正确实现功能的类,通过消息传递来协同实现设计要求的功能。这种程序架构能将出现的错误精确的确定在某一具体的类。 对OOP的测试重点集中在类功能的实现和相应的面向对象程序架构,主要体现为以下两个方面: (1)数据成员是否满足数据封装的要求基本原则是数

24、据成员是否被外界(数据成员所属的类或子类以外的调用)直接调用。 (2)类是否实现了要求的功能测试类的功能,不能仅满足于代码能无错运行或被测试的类能提供的功能正确,应以所做的OOD结果为依据,检测类提供的功能是否满足了设计的要求,是否有缺陷。,面向对象的单元测试,传统的单元测试是针对程序的函数、过程或完成某一特定功能的程序块。沿用单元测试的概念,面向对象单元测试实际测试类成员函数。单独的看待类的成员函数,与面向过程程序中的函数或过程没有本质的区别,传统的测试方法在面向对象单元测试中都可使用,如等价类划分法、因果图法、边值分析法、逻辑覆盖法、路径分析法等等。 面向对象编程的特性使得对成员函数的测试

25、又不完全等同于传统的函数或过程测试。尤其是继承特性和多态特性,使子类继承或重载的父类成员函数出现了传统测试中未遇见的问题。这里要考虑如下两个问题: (1)继承的成员函数是否都不需要测试? (2)对父类的测试是否能照搬到子类?,面向对象的单元测试(续),继承的成员函数是否都不需要测试? 对父类中已经测试过的成员函数,以下两种情况需要在子类中重新测试: a)继承的成员函数在子类中做了改动; b)成员函数调用了改动过的成员函数的部分。 例:假设存在父类Base有Inherited()和Redefined()这两个成员函数,继承父类Base的子类Derived只对Redefined() 做了改动。那么

26、,Derived:Redefined()就需要重新测试;对于Derived:Inherited(),若它包含了调用Redefined()的 语句 (比如:x=x/Redefined()),就需要重新测试,否则就不需要。,面向对象的单元测试(续),对父类的测试是否能照搬到子类? 引用前面的假设,成员函数Base:Redefined()和Derived:Redefined()已经是不同的。那么,按理应该要对Derived:Redefined()重新测试分析,设计测试用例。但是由于面向对象的继承使得两个函数相似,故只需要在对Base:Redefined()的测试要求和测试用例上添加对Derived:

27、Redefined()新的测试要求和增补相应测试用例。 例 Base:Redefined()含有如下语句: If (value0) message(“less”); else if (value=0) message(“equal”); else message(“more”); ,面向对象的单元测试(续),例(续) 在Derived:Redefined()中定义为: If (value0) message(“less”); else if (value=0) message(“It is equal”); else message(“more”); if (value=88) message

28、(“luck”); 在原有对父类Base的测试上,对Derived:Redefined()的测试只需作如下改动:将value=0的测试结果期望改动;增加value=88的测试。,面向对象的集成测试,传统的自顶向下和自底向上的集成策略对于面向对象的测试集成是没有意义的,类之间的相互依赖使其根本无法在编译不完全的程序上对类进行测试。因此,面向对象集成测试通常需要在整个程序编译完成后进行。此外,面向对象程序具有动态特性,程序的控制流往往无法确定,所以也只能对整个编译后的程序做基于黑盒的集成测试。 面向对象的集成测试通常需要进行两级集成:一是将成员函数集成到完整类中;二是将类与其它类集成。 面向对象的

29、集成测试能够检测出相对独立的单元测试无法检测出的那些类相互作用时才会产生的错误。单元测试可以保证成员函数行为的正确性,集成测试则只关注于系统的结构和内部的相互作用。,面向对象的集成测试(续),面向对象集成测试可以分成两步进行:先进行静态测试,再进行动态测试。 静态测试主要针对程序结构进行,检测程序结构是否符合设计要求。现在常用的一些测试软件都能提供一种称为 “可逆性工程”的功能,即通过源程序得到类关系图和函数功能调用关系图。将“可逆性工程”得到的结果与OOD的结果相比较,以检测OOP是否达到了设计要求。 动态测试则测试与每个动态语境有关的消息。设计测试用例时,通常需要上述的功能调用关系图、类关系图或实体关系图为参考,确定不需要被重复测试的部分,从而优化测试用例,使得进行的测试能够达到一定覆盖标准。,面向对象的系统测试,系统测试应该尽量搭建与用户实际使用环境相同的测试平台,应该保证被测系统的完整性,对临时没有的系统设备部件,也应有相应的模拟手段。 面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论