Slide 1
第五章 特定环境及应用测试
第5章 特定环境及应用测试
客户客户//服务器体系结构测试服务器体系结构测试
图形用户界面图形用户界面GUIGUI测试测试
实时系统测试实时系统测试
面向对象软件的测试面向对象软件的测试
Slide 2
第五章 特定环境及应用测试
本章教学目标
理论环节理论环节
认识和理解特定环境及应用的测试认识和理解特定环境及应用的测试
掌握客户掌握客户//服务器体系结构测试方法服务器体系结构测试方法
掌握图形用户界面掌握图形用户界面GUIGUI测试内容测试内容
认识和理解实时系统测试认识和理解实时系统测试
认识和理解面向对象的软件测试基本概念和基本知识认识和理解面向对象的软件测试基本概念和基本知识
掌握面向对象软件测试的常用方法掌握面向对象软件测试的常用方法
实践环节实践环节
掌握对掌握对WebWeb进行的压力测试进行的压力测试
掌握类的数据流测试,重点设置登录服务器的网络设置掌握类的数据流测试,重点设置登录服务器的网络设置
Slide 3
第五章 特定环境及应用测试
客户/服务器体系结构测试
客户客户//服务器体系结构测试方法服务器体系结构测试方法
WebWeb网站的测试网站的测试
对对WebWeb进行压力测试进行压力测试
使用使用WASWAS进行进行WebWeb负载测试负载测试
Return
Slide 4
第五章 特定环境及应用测试
客户/服务器体系结构测试方法
从宏观上说,从宏观上说,C/SC/S体系结构的软件测试通常是从单个客户体系结构的软件测试通常是从单个客户
端开始,然后再逐步集成客户端、服务器和网络系统进行端开始,然后再逐步集成客户端、服务器和网络系统进行
集成测试,最后进行系统的整体测试。即从以下三个层面集成测试,最后进行系统的整体测试。即从以下三个层面
来进行来进行C/SC/S系统的测试:系统的测试:
((11)客户端的独立测试)客户端的独立测试
对客户端的测试主要是属于功能性测试。用户客户端对客户端的测试主要是属于功能性测试。用户客户端
应用以应用以““分离的分离的””模式被测试,即这层测试不考虑服务器模式被测试,即这层测试不考虑服务器
和底层网络的运行。通常包括:和底层网络的运行。通常包括:
客户端的测试客户端的测试————检测客户端的业务逻辑流程的应用检测客户端的业务逻辑流程的应用
操作系统平台测试操作系统平台测试————在各种系统平台上进行兼容性测试在各种系统平台上进行兼容性测试
浏览器测试浏览器测试
Slide 5
第五章 特定环境及应用测试
客户/服务器体系结构测试方法(续)
((22)客户端与服务器端的集成测试)客户端与服务器端的集成测试
客户端软件和关联的服务器端应用作一体测试,但并客户端软件和关联的服务器端应用作一体测试,但并
不过多考虑网络运行的关联因素。不过多考虑网络运行的关联因素。
对服务器的测试对服务器的测试————主要是性能的测试。测试包含服务器主要是性能的测试。测试包含服务器
的协调和数据管理功能以及服务器的性能(整体响应时间的协调和数据管理功能以及服务器的性能(整体响应时间
和数据的吞吐量)的表现。通常包括:数据库测试、连接和数据的吞吐量)的表现。通常包括:数据库测试、连接
速度测试、负载测试、压力测试。速度测试、负载测试、压力测试。
对应用服务器(中间件)的测试对应用服务器(中间件)的测试
对对C/SC/S系统的集成测试一般采用非增量式的方法完成。系统的集成测试一般采用非增量式的方法完成。
此外,此外,C/SC/S测试必须考虑面向对象的测试技术,尤其是测试必须考虑面向对象的测试技术,尤其是C/SC/S
系统基本上都采用了系统基本上都采用了GUIGUI(图形用户界面)。(图形用户界面)。
Slide 6
第五章 特定环境及应用测试
客户/服务器体系结构测试方法(续)
((33)整体测试)整体测试
对完整的对完整的C/SC/S体系结构整体测试,在上述功能测试和体系结构整体测试,在上述功能测试和
性能测试的基础上,还包括网络运行及其性能的测试。性能测试的基础上,还包括网络运行及其性能的测试。 整整
体测试通常包括以下测试项目:体测试通常包括以下测试项目:
事务测试事务测试————创建一系列的测试以保证每类事务被按照需创建一系列的测试以保证每类事务被按照需
求处理。事务测试着重于处理的正确性,同时也关注性能求处理。事务测试着重于处理的正确性,同时也关注性能
问题。问题。
网络通信测试网络通信测试————用于验证网络节点间的通信是否正常的用于验证网络节点间的通信是否正常的
发生,并且消息传递、事务和相关的网络通信有无错误的发生,并且消息传递、事务和相关的网络通信有无错误的
发生。发生。
Slide 7
第五章 特定环境及应用测试
Web网站的测试
基于基于 Web Web 的系统测试不但需要检查和验证是否按照设计的系统测试不但需要检查和验证是否按照设计
的要求运行,而且还要评价系统在不同用户的浏览器端的的要求运行,而且还要评价系统在不同用户的浏览器端的
显示是否合适。重要的是,还要从最终用户的角度进行安显示是否合适。重要的是,还要从最终用户的角度进行安
全性和可用性测试,从功能、性能、可用性、客户端兼容全性和可用性测试,从功能、性能、可用性、客户端兼容
性、安全性等方面讨论了基于性、安全性等方面讨论了基于WebWeb的系统测试方法。的系统测试方法。
对对WebWeb网站测试所采用的测试方法与策略有哪些?网站测试所采用的测试方法与策略有哪些?
————黑盒测试、白盒测试、静态测试和动态测试都有可能黑盒测试、白盒测试、静态测试和动态测试都有可能
用到,还会包括面向对象测试技术的运用。用到,还会包括面向对象测试技术的运用。
WebWeb网站的测试是一项复杂的任务,如何进行?网站的测试是一项复杂的任务,如何进行?
————最初的起点是把网页或整个网站当作一个黑盒子。最初的起点是把网页或整个网站当作一个黑盒子。
Slide 8
第五章 特定环境及应用测试
网页测试
文字测试:检查用户等级、术语、内容、准确度以及内容文字测试:检查用户等级、术语、内容、准确度以及内容
的时效性。的时效性。
链接测试:测试所有链接是否能按照指示的那样正确链接链接测试:测试所有链接是否能按照指示的那样正确链接
到应当链接的页面;测试所链接的页面是否存在;确保不到应当链接的页面;测试所链接的页面是否存在;确保不
存在孤立页面(即没有链接指向的页面)。存在孤立页面(即没有链接指向的页面)。
图形、图像测试:确保有明确的用途;颜色的搭配;图片图形、图像测试:确保有明确的用途;颜色的搭配;图片
的大小和质量;所有图形是否能够正确载入和显示。的大小和质量;所有图形是否能够正确载入和显示。
表单测试:检测域的大小;数据接收是否正确;可选域是表单测试:检测域的大小;数据接收是否正确;可选域是
否真正可选;提交操作的完整性等。否真正可选;提交操作的完整性等。
动态内容测试(要求能查看到程序源代码)动态内容测试(要求能查看到程序源代码)
CookiesCookies测试:测试:CookiesCookies是否起作用;是否按预定的时间进是否起作用;是否按预定的时间进
行保存;刷新对行保存;刷新对CookiesCookies有何影响等。有何影响等。
Slide 9
第五章 特定环境及应用测试
网站测试
数据库测试:在使用了数据库的数据库测试:在使用了数据库的WebWeb系统中,测试由用户系统中,测试由用户
提交的表单信息不正确而引起的数据一致性问题;测试由提交的表单信息不正确而引起的数据一致性问题;测试由
网络速度或程序设计等问题引起的输出故障。网络速度或程序设计等问题引起的输出故障。
服务器性能及负载(压力)测试:通过应用模拟的方法实服务器性能及负载(压力)测试:通过应用模拟的方法实
现,即通过某种程序方法(工具软件)模拟上万个链接和现,即通过某种程序方法(工具软件)模拟上万个链接和
下载来判断服务器的响应时间、并发访问数量等性能与负下载来判断服务器的响应时间、并发访问数量等性能与负
载能力。载能力。
可用性测试:包括整体界面测试和导航测试。可用性测试:包括整体界面测试和导航测试。
安全性测试:测试有效和无效的用户名和密码;测试安全性测试:测试有效和无效的用户名和密码;测试WebWeb
应用系统是否有超时的限制;测试相关信息是否写进了日应用系统是否有超时的限制;测试相关信息是否写进了日
志文件、是否可追踪;在使用了安全套接字时,测试加密志文件、是否可追踪;在使用了安全套接字时,测试加密
是否正确;在没有经过授权时,测试是否能拒绝在服务器是否正确;在没有经过授权时,测试是否能拒绝在服务器
端放置和编辑脚本。端放置和编辑脚本。
Slide 10
第五章 特定环境及应用测试
对Web进行压力测试
WebWeb服务测试原理服务测试原理
WebWeb压力测试压力测试
压力测试是系统测试的一部分,要被设计为通过应用压力测试是系统测试的一部分,要被设计为通过应用
很大的工作负载来使软件超负荷运转,其目的是要弄清楚很大的工作负载来使软件超负荷运转,其目的是要弄清楚
被测试的被测试的WebWeb服务是不是不仅能做预期应能做的事,而且服务是不是不仅能做预期应能做的事,而且
在被施加了某些高强度压力的情况下仍能继续正常运行。在被施加了某些高强度压力的情况下仍能继续正常运行。
如果压力测试通过对软件保持高强度的使用(不超过性能如果压力测试通过对软件保持高强度的使用(不超过性能
统计数字确定的限制)能够有效执行,那么它就经常能够统计数字确定的限制)能够有效执行,那么它就经常能够
发现许多其它测试无法发现的隐蔽错误。发现许多其它测试无法发现的隐蔽错误。
压力下的错误类型压力下的错误类型
内存泄露内存泄露————通常要求操作重复非常多的次数后才会出现通常要求操作重复非常多的次数后才会出现
并发与同步并发与同步
Slide 12
第五章 特定环境及应用测试
对Web进行压力测试(续)
有效的压力测试系统的关键条件有效的压力测试系统的关键条件
重复:就是一遍又一遍地执行某个操作或功能。这将确定重复:就是一遍又一遍地执行某个操作或功能。这将确定
一个操作能否正常执行,并且能否继续在每次执行时都表一个操作能否正常执行,并且能否继续在每次执行时都表
现正常。现正常。
并发:就是在同一时间内执行多个操作。由并发引起的错并发:就是在同一时间内执行多个操作。由并发引起的错
误只能通过执行多个代码示例才能测出来,测试时要同时误只能通过执行多个代码示例才能测出来,测试时要同时
遍历多条代码路径。遍历多条代码路径。
量级:要考虑到每个操作中的负载量,操作自身应尽可能量级:要考虑到每个操作中的负载量,操作自身应尽可能
给被测软件系统增加压力,即:尽量使单独的操作进行高给被测软件系统增加压力,即:尽量使单独的操作进行高
强度的使用,增加操作的量级。强度的使用,增加操作的量级。
随机变化:随机使用前面条件中的无数变化形式,就能够随机变化:随机使用前面条件中的无数变化形式,就能够
在每次测试运行时应用许多不同的代码路径。在每次测试运行时应用许多不同的代码路径。
Slide 13
第五章 特定环境及应用测试
使用WAS进行Web负载测试
负载测试是任何负载测试是任何Web Web 应用开发周期中一个重要的环节。应用开发周期中一个重要的环节。
在构造一个为大量用户服务的应用之前,搞清楚产品配置在构造一个为大量用户服务的应用之前,搞清楚产品配置
能够承受多大的负载非常重要。但是在实际开发过程中,能够承受多大的负载非常重要。但是在实际开发过程中,
若要按照实际投入运行的情况,组织成千上万的用户来进若要按照实际投入运行的情况,组织成千上万的用户来进
行压力测试,无论从那个方面看,都是不现实的。行压力测试,无论从那个方面看,都是不现实的。
为了有效的对为了有效的对WebWeb应用程序进行负载(压力)测试,微软应用程序进行负载(压力)测试,微软
公司发布了简单易用、功能强大的公司发布了简单易用、功能强大的WebWeb应用负载测试工具应用负载测试工具
WASWAS((Web Application Stress ToolWeb Application Stress Tool),它能够提供一种),它能够提供一种
简单的方法模拟大量用户进行访问目标网站,而且还能够简单的方法模拟大量用户进行访问目标网站,而且还能够
提供提供WebWeb应用程序工作时对硬件和软件的使用情况。应用程序工作时对硬件和软件的使用情况。
如何使用如何使用WASWAS进行进行WebWeb负载测试?负载测试?
%E4%BD%BF%E7%94%A8WAS%E8%BF%9B%E8%A1%8CWeb%E8%B4%9F%E8%BD%BD%E6%B5%8B%E8%AF%
Slide 14
第五章 特定环境及应用测试
图形用户界面GUI测试
由于由于GUIGUI开发环境采用了较多可重用的组件,因此在开发开发环境采用了较多可重用的组件,因此在开发
用户界面时高效、省时而且精确;但由于用户界面时高效、省时而且精确;但由于GUIGUI的复杂性,的复杂性,
增加了对这类情形的软件进行测试的难度,从而也加大了增加了对这类情形的软件进行测试的难度,从而也加大了
设计和执行测试用例的难度。设计和执行测试用例的难度。
目前,针对目前,针对GUIGUI的测试技术基本上都是采用自动化测试工的测试技术基本上都是采用自动化测试工
具来实现。具来实现。
具体测试工作中,具体测试工作中,GUIGUI测试经常需要考虑以下的测试内容测试经常需要考虑以下的测试内容
和方法:和方法:
窗体操作测试窗体操作测试
下拉式菜单和鼠标操作测试下拉式菜单和鼠标操作测试
数据项操作测试数据项操作测试
Slide 15
第五章 特定环境及应用测试
实时系统测试
实时系统:将硬件、软件、人力和数据库元素集成起来,实时系统:将硬件、软件、人力和数据库元素集成起来,
产生某种动作响应外部世界。在实时系统中,时间是交互产生某种动作响应外部世界。在实时系统中,时间是交互
的核心,它必须高速地获得数据,并在问题域规定的时间的核心,它必须高速地获得数据,并在问题域规定的时间
框架内对该问题域做出相应的处理。框架内对该问题域做出相应的处理。
实时系统测试的特殊性和复杂性:实时系统测试的特殊性和复杂性:
实时系统的时间依赖性和异步性给测试带来新的困难。实时系统的时间依赖性和异步性给测试带来新的困难。
实时系统的软件和硬件之间存在着密切关系,测试时必须实时系统的软件和硬件之间存在着密切关系,测试时必须
考虑硬件故障对软件处理的影响。考虑硬件故障对软件处理的影响。
实时系统测试的一般步骤:实时系统测试的一般步骤:
(1) (1)任务测试;任务测试;(2)(2)行为测试;行为测试;(3)(3)任务间测试;任务间测试;(4)(4)系统测试。系统测试。
Slide 16
第五章 特定环境及应用测试
面向对象软件的测试
面向对象的基本概念面向对象的基本概念
面向对象的软件测试与传统软件测试面向对象的软件测试与传统软件测试
面向对象软件测试模型面向对象软件测试模型
类的功能性测试和结构性测试类的功能性测试和结构性测试
状态转移图的面向对象软件测试状态转移图的面向对象软件测试
Return
Slide 17
第五章 特定环境及应用测试
面向对象的基本概念
对象对象
类类
消息消息
接口接口
继承继承
多态和动态绑定多态和动态绑定
Slide 18
第五章 特定环境及应用测试
对象
对象对象————是指包含了一组属性以及对这些属性的操作的封是指包含了一组属性以及对这些属性的操作的封
装体。属性可以是数据,也可以是另一个对象;每个对象装体。属性可以是数据,也可以是另一个对象;每个对象
都有它自己的属性值,表示该对象的状态;对象中的属性都有它自己的属性值,表示该对象的状态;对象中的属性
只能通过该对象所提供的操作来存取或修改。对象所具有只能通过该对象所提供的操作来存取或修改。对象所具有
的状态、行为、标识三个基本特征,分别对应与对象的属的状态、行为、标识三个基本特征,分别对应与对象的属
性、方法和对象名。性、方法和对象名。
对象是软件开发期间测试的直接目标。对象是软件开发期间测试的直接目标。
面向对象软件测试所关注的焦点:面向对象软件测试所关注的焦点:
((11)对象的行为是否符合它的规定说明;)对象的行为是否符合它的规定说明;
((22)该对象与和它相关的对象是否协同工作。)该对象与和它相关的对象是否协同工作。
Slide 19
第五章 特定环境及应用测试
类
类类————是具有相同属性和相同行为的对象的集合。面向是具有相同属性和相同行为的对象的集合。面向
对象程序运行的基本元素是对象,而类则是用来定义对对象程序运行的基本元素是对象,而类则是用来定义对
象这一基本元素的。象这一基本元素的。
在面向对象程序设计中,类是一个独立的程序单位,它在面向对象程序设计中,类是一个独立的程序单位,它
有一个类名,还包括用于描述对象属性的成员变量和用有一个类名,还包括用于描述对象属性的成员变量和用
于描述对象行为的于描述对象行为的成员函数成员函数。。
类是对象的抽象定义,它定义了用户将要如何创建对象类是对象的抽象定义,它定义了用户将要如何创建对象
的方法。使用类时必须先实例化的方法。使用类时必须先实例化——用对象名创建类的实用对象名创建类的实
例,再通过这个对象去访问类的成员变量,去调用类的例,再通过这个对象去访问类的成员变量,去调用类的
成员函数成员函数。。
Slide 20
第五章 特定环境及应用测试
消息
消息消息————是对象的操作将要执行的一种请求,是对象的操作将要执行的一种请求,也被称为成也被称为成
员函数调用或者方法调用。面向对象的程序的执行实际上员函数调用或者方法调用。面向对象的程序的执行实际上
是执行一个由消息连接起来的方法序列。是执行一个由消息连接起来的方法序列。
“ “发送消息发送消息MM到对象到对象N” N” =“=“调用调用NN对象的对象的MM方法方法” ”
一个对象通过向另一个对象发送消息来请求其服务,对象一个对象通过向另一个对象发送消息来请求其服务,对象
之间的协同工作是通过互相传送消息来完成的。之间的协同工作是通过互相传送消息来完成的。
一个消息通常包括接收对象名、调用的操作名和适当参数一个消息通常包括接收对象名、调用的操作名和适当参数
(如有必要)。消息只告诉接收对象需要完成什么操作,(如有必要)。消息只告诉接收对象需要完成什么操作,
但并不指示接收者怎样去完成操作。消息完全由接收者解但并不指示接收者怎样去完成操作。消息完全由接收者解
释,接收者独立决定采用什么方法来完成所需操作。释,接收者独立决定采用什么方法来完成所需操作。
Slide 21
第五章 特定环境及应用测试
消息(续)
从测试的角度看,关于消息有下面的结论:从测试的角度看,关于消息有下面的结论:
((11))消消息息的的发发送送者者决决定定何何时时进进行行发发送送消消息息,,可可能能会会做做出出
错误的决定;错误的决定;
((22))消消息息的的接接收收者者可可能能收收到到非非预预期期的的特特定定消消息息,,并并做做出出
不正确地反映;不正确地反映;
((33))消消息息可可能能含含有有参参数数。。在在处处理理一一条条消消息息时时,,参参数数能能被被
接接收收者者使使用用或或修修改改。。若若传传递递的的参参数数是是对对象象,,那那么么在在消消息息
被被处处理理前前和和处处理理后后,,对对象象必必须须处处于于正正确确的的状状态态,,而而且且必必
须是接收者所期望的接口。须是接收者所期望的接口。
Slide 22
第五章 特定环境及应用测试
接口
接口接口————是行为声明的集合。接口是由一些规范构成的,是行为声明的集合。接口是由一些规范构成的,
规范定义了类的一套完整的公共行为。规范定义了类的一套完整的公共行为。
从测试的角度,关于接口有下面的结论:从测试的角度,关于接口有下面的结论:
((11)接口封装了操作的说明。如果这一接口包含的行为和类)接口封装了操作的说明。如果这一接口包含的行为和类
的行为不相符,那么这一接口的说明就有问题。的行为不相符,那么这一接口的说明就有问题。
((22)接口非孤立,它与其它的接口和类有一定的关系。一个)接口非孤立,它与其它的接口和类有一定的关系。一个
接口可以指定一个行为的参数类型,使得实现该接口的类接口可以指定一个行为的参数类型,使得实现该接口的类
可以被当作一个参数进行传递。可以被当作一个参数进行传递。
Slide 23
第五章 特定环境及应用测试
继承
继承继承————是指在某个类的层次关联中,不同的类共享属性是指在某个类的层次关联中,不同的类共享属性
和操作的一种机制。继承允许一个新的类(称为子类)在和操作的一种机制。继承允许一个新的类(称为子类)在
一个已有的类(称为父类或者基类)的基础上进行定义。一个已有的类(称为父类或者基类)的基础上进行定义。
一个父类可以有多个子类,这些子类都是父类的特例。父一个父类可以有多个子类,这些子类都是父类的特例。父
类描述了这些子类的公共属性和操作,子类中还可以定义类描述了这些子类的公共属性和操作,子类中还可以定义
它自己的属性和操作。它自己的属性和操作。
从测试的角度来看,继承包含以下内容:从测试的角度来看,继承包含以下内容:
((11))继继承承提提供供一一种种机机制制,,通通过过这这种种机机制制,,潜潜在在的的错错误误能能够够从从
一个类传递到它的派生类。一个类传递到它的派生类。
((22))子子类类是是从从父父类类继继承承过过来来的的,,子子类类也也就就继继承承了了父父类类的的属属性性
和操作。因此,可以用测试父类的方法对子类进行测试。和操作。因此,可以用测试父类的方法对子类进行测试。
Slide 24
第五章 特定环境及应用测试
多态和动态绑定
多态多态————是指同一个操作作用于不同的对象可以有不同的是指同一个操作作用于不同的对象可以有不同的
解释,产生不同的执行结果。多态提供了将类看作是一种解释,产生不同的执行结果。多态提供了将类看作是一种
或多种类型的能力,它定义了用来支持多种不同类型所适或多种类型的能力,它定义了用来支持多种不同类型所适
应的策略。多态可分为包含多态与参数多态。应的策略。多态可分为包含多态与参数多态。
与多态密切相关的一个概念就是动态绑定。传统程序设计与多态密切相关的一个概念就是动态绑定。传统程序设计
语言把过程调用与目标代码的连接放在程序运行前进行,语言把过程调用与目标代码的连接放在程序运行前进行,
称为静态绑定。而动态绑定则是把这种连接推迟到运行时称为静态绑定。而动态绑定则是把这种连接推迟到运行时
才进行。才进行。
在程序运行过程中,当一个对象发送消息请求服务时,要在程序运行过程中,当一个对象发送消息请求服务时,要
根据接收对象的具体情况将请求的操作与实现的方法进行根据接收对象的具体情况将请求的操作与实现的方法进行
连接,即动态绑定。连接,即动态绑定。
Slide 25
第五章 特定环境及应用测试
面向对象的软件测试与传统软件测试
面向对象技术所独有的封装、继承、多态等新特点给测试面向对象技术所独有的封装、继承、多态等新特点给测试
带来一系列新的问题,增加了测试的难度。与传统的面向带来一系列新的问题,增加了测试的难度。与传统的面向
过程的程序设计相比,面向对象程序设计产生错误的可能过程的程序设计相比,面向对象程序设计产生错误的可能
性增大,或者使得传统软件测试中的重点不再那么突出,性增大,或者使得传统软件测试中的重点不再那么突出,
使原来测试经验和实践证明的次要方面成为了主要问题。使原来测试经验和实践证明的次要方面成为了主要问题。
例如:函数例如:函数 y = Function(x)y = Function(x)
如果该函数写在传统的面向过程的程序中,通常考虑如果该函数写在传统的面向过程的程序中,通常考虑
的是函数的是函数Function()Function()本身的行为特点。但若写在面向对象本身的行为特点。但若写在面向对象
的程序中,就不得不同时考虑基类函数的程序中,就不得不同时考虑基类函数Base::Function() Base::Function()
的行为和继承类函数的行为和继承类函数Derived::Function()Derived::Function()的行为。的行为。
Slide 26
第五章 特定环境及应用测试
面向对象技术面向对象技术的特点给测试带来的新问题具体表现为:的特点给测试带来的新问题具体表现为:
((11))封装把数据及对数据的操作封装在一起,限制了对象封装把数据及对数据的操作封装在一起,限制了对象
属性对外的透明性和外界对它的操作权限,在某种程度属性对外的透明性和外界对它的操作权限,在某种程度
上避免了对数据的非法操作,有效防止了故障的扩散。上避免了对数据的非法操作,有效防止了故障的扩散。
但同时,封装机制也给测试数据的生成、测试路径的选但同时,封装机制也给测试数据的生成、测试路径的选
取以及测试结构的分析带来了困难。取以及测试结构的分析带来了困难。
((22))继承实现了共享父类中定义的数据和操作,同时也可继承实现了共享父类中定义的数据和操作,同时也可
定义新的特征。子类是在新的环境中存在,所以父类的定义新的特征。子类是在新的环境中存在,所以父类的
正确性不能保证子类的正确性。继承使代码的重用率得正确性不能保证子类的正确性。继承使代码的重用率得
到了提高,但同时也使故障的传播几率增加。到了提高,但同时也使故障的传播几率增加。
((33)多态和动态绑定增加了系统运行中可能的执行路径,)多态和动态绑定增加了系统运行中可能的执行路径,
而且给面向对象软件带来了严重的不确定性,给测试覆而且给面向对象软件带来了严重的不确定性,给测试覆
盖率的活动带来新的困难。盖率的活动带来新的困难。
面向对象的软件测试与传统软件测试(续)(续)
Slide 27
第五章 特定环境及应用测试
与传统软件相比,由于存在的诸如继承、关联、动态绑定与传统软件相比,由于存在的诸如继承、关联、动态绑定
等关系,面向对象软件具有更复杂的依赖关系,一个类将等关系,面向对象软件具有更复杂的依赖关系,一个类将
不可避免的依赖于其它的类,从而增加了面向对象软件测不可避免的依赖于其它的类,从而增加了面向对象软件测
试的难度。试的难度。
传统软件中存在的依赖关系有:传统软件中存在的依赖关系有:变量间的数据依赖;模块变量间的数据依赖;模块
间的调用依赖;变量与其类型间的定义依赖;模块与其变间的调用依赖;变量与其类型间的定义依赖;模块与其变
量间的功能依赖。量间的功能依赖。
面向对象软件除了存在上述依赖关系外,还存在以下的依面向对象软件除了存在上述依赖关系外,还存在以下的依
赖关系:类与类间的依赖;类与操作间的依赖;类与消息赖关系:类与类间的依赖;类与操作间的依赖;类与消息
间的依赖;类与变量间的依赖;操作与变量间的依赖;操间的依赖;类与变量间的依赖;操作与变量间的依赖;操
作与消息间的依赖;操作与操作间的依赖。作与消息间的依赖;操作与操作间的依赖。
面向对象的软件测试与传统软件测试(续)(续)
Slide 28
第五章 特定环境及应用测试
面向对象软件测试模型
面向对象的程序结构不再是传统的功能模块结构,作为一面向对象的程序结构不再是传统的功能模块结构,作为一
个整体,个整体,原有集成测试所要求的逐步将开发的模块搭建在原有集成测试所要求的逐步将开发的模块搭建在
一起进行测试的方法已变得不可行一起进行测试的方法已变得不可行。而且,面向对象软件。而且,面向对象软件
抛弃了传统的开发模式,对每个开发阶段都有不同以往的抛弃了传统的开发模式,对每个开发阶段都有不同以往的
要求和结果,已经不可能用功能细化的观点来检测面向对要求和结果,已经不可能用功能细化的观点来检测面向对
象分析和设计的结果。因此,传统的测试模型对面向对象象分析和设计的结果。因此,传统的测试模型对面向对象
软件已经不再适用。软件已经不再适用。
面向对象的软件开发模型将开发过程定义为面向对象分析面向对象的软件开发模型将开发过程定义为面向对象分析
(OOA)(OOA)、、面向对象设计面向对象设计(OOD)(OOD)和面向对象编程和面向对象编程(OOP)(OOP)三个三个
阶段。针对这种开发模型阶段。针对这种开发模型,应该建立一种新的,应该建立一种新的测试模型测试模型。。
Slide 29
第五章 特定环境及应用测试
面向对象软件测试模型(续)
面向对象的测试模型
OO System Test
OO Integrate Test
OOA OOD OOP
OOA
Test
OOD
Test
OOP
Test
OO
Unit
Test
面向对象 分
析的测试
面向对象 设
计的测试
面向对象 编
程的测试
面向对象
系统测试
面向对象
单元测试
面向对象
集成测试
Slide 30
第五章 特定环境及应用测试
面向对象软件测试模型(续)
OOA Test OOA Test 和和OOD Test OOD Test 是对分析结果和设计结果的测试,是对分析结果和设计结果的测试,
主要是对分析设计产生的文档进行测试,是软件开发前期主要是对分析设计产生的文档进行测试,是软件开发前期
的关键性测试。的关键性测试。OOP Test OOP Test 主要针对编程风格和程序代码主要针对编程风格和程序代码
实现进行测试,主要的测试内容在面向对象单元测试和面实现进行测试,主要的测试内容在面向对象单元测试和面
向对象集成测试中体现。向对象集成测试中体现。
面向对象单元测试针对程序内部具体单一功能的模块进行面向对象单元测试针对程序内部具体单一功能的模块进行
测试,比如在测试,比如在C++C++程序中主要就是对类成员函数的测试。程序中主要就是对类成员函数的测试。
面向对象集成测试主要对系统内部的相互服务进行测试,面向对象集成测试主要对系统内部的相互服务进行测试,
如成员函数间的相互作用、类间的消息传递等。面向对象如成员函数间的相互作用、类间的消息传递等。面向对象
系统测试是基于面向对象集成测试的最后阶段的测试,主系统测试是基于面向对象集成测试的最后阶段的测试,主
要以用户需求为测试标准。要以用户需求为测试标准。
Slide 31
第五章 特定环境及应用测试
面向对象分析的测试(OOA Test)
OOAOOA直接映射问题空间,全面直接映射问题空间,全面地将问题空间中实现功能的地将问题空间中实现功能的
实例抽象为对象(不同于实例抽象为对象(不同于C++C++中的对象概念),用对象的中的对象概念),用对象的
结构反映问题空间的复杂实例和复杂关系,用属性和结构反映问题空间的复杂实例和复杂关系,用属性和服务服务
表示实例的特性和行为。表示实例的特性和行为。
OOAOOA的测试重点在其完整性和冗余性。对的测试重点在其完整性和冗余性。对OOAOOA阶段的测试阶段的测试
划分为五个方面:对认定的对象的测试;对认定的结构的划分为五个方面:对认定的对象的测试;对认定的结构的
测试;对认定的主题的测试;对定义的属性和实例关联的测试;对认定的主题的测试;对定义的属性和实例关联的
测试;对定义的服务和消息关联的测试。测试;对定义的服务和消息关联的测试。
——OOA ——OOA中认定的对象:是指对问题空间中的结构、其他中认定的对象:是指对问题空间中的结构、其他
系统、设备、被记忆的事件、系统涉及的人员等实际实例系统、设备、被记忆的事件、系统涉及的人员等实际实例
的抽象。的抽象。
Slide 32
第五章 特定环境及应用测试
面向对象设计的测试(OOD Test)
OODOOD是是OOAOOA的进一步细化和的进一步细化和扩充,重点在于说明项目的实扩充,重点在于说明项目的实
施方案,来确定类和类的结构。施方案,来确定类和类的结构。
对对OODOOD的测试,应针对功能的实现和重用以及对的测试,应针对功能的实现和重用以及对OOAOOA结果结果
的拓展进行,从以下三方面考虑:的拓展进行,从以下三方面考虑:
((11)对认定的类的测试)对认定的类的测试————是否涵盖了是否涵盖了OOAOOA中所有认定的中所有认定的
对象;是否能体现对象;是否能体现OOAOOA中定义的属性;是否能实现中定义的属性;是否能实现OOAOOA中中
定义的服务;是否对应着一个含义明确的数据抽象;是否定义的服务;是否对应着一个含义明确的数据抽象;是否
尽可能少的依赖其他类;类中的方法是否单用途。尽可能少的依赖其他类;类中的方法是否单用途。
((22)对构造的类层次结构的测试)对构造的类层次结构的测试————类层次结构是否涵盖了类层次结构是否涵盖了
所有定义的类;是否能体现所有定义的类;是否能体现OOAOOA中定义的实例关联;是否中定义的实例关联;是否
能实现能实现OOAOOA中定义的消息关联;子类是否具有父类没有的中定义的消息关联;子类是否具有父类没有的
新特性;子类间的共同特性是否完全在父类中得以体现。新特性;子类间的共同特性是否完全在父类中得以体现。
((33)对类库支持的测试)对类库支持的测试
Slide 33
第五章 特定环境及应用测试
面向对象编程的测试(OOP Test)
面向对象程序是把功能的实现分布在类中。能正确实现功面向对象程序是把功能的实现分布在类中。能正确实现功
能的类,通过消息传递来协同实现设计要求的功能。这种能的类,通过消息传递来协同实现设计要求的功能。这种
程序架构能将出现的错误精确的确定在某一具体的类。程序架构能将出现的错误精确的确定在某一具体的类。
对对OOPOOP的测试重点集中在类功能的实现和相应的面向对象的测试重点集中在类功能的实现和相应的面向对象
程序架构,主要体现为以下两个方面:程序架构,主要体现为以下两个方面:
((11)数据成员是否满足数据封装的要求)数据成员是否满足数据封装的要求————基本原则是数据基本原则是数据
成员是否被外界(数据成员所属的类或子类以外的调用)成员是否被外界(数据成员所属的类或子类以外的调用)
直接调用。直接调用。
((22)类是否实现了要求的功能)类是否实现了要求的功能————测试类的功能,不能仅满测试类的功能,不能仅满
足于代码能无错运行或被测试的类能提供的功能正确,应足于代码能无错运行或被测试的类能提供的功能正确,应
以所做的以所做的OODOOD结果为依据,检测类提供的功能是否满足了结果为依据,检测类提供的功能是否满足了
设计的要求,是否有缺陷。设计的要求,是否有缺陷。
Slide 34
第五章 特定环境及应用测试
面向对象的单元测试
传统的单元测试是针对程序的函数、过程或完成某一特定传统的单元测试是针对程序的函数、过程或完成某一特定
功能的程序块。沿用单元测试的概念,面向对象单元测试功能的程序块。沿用单元测试的概念,面向对象单元测试
实际测试类成员函数。实际测试类成员函数。单独的看待类的成员函数,与面向单独的看待类的成员函数,与面向
过程程序中的函数或过程没有本质的区别,过程程序中的函数或过程没有本质的区别,传统的测试方传统的测试方
法在面向对象单元测试中都可使用,如等价类划分法、因法在面向对象单元测试中都可使用,如等价类划分法、因
果图法、边值分析法、逻辑覆盖法、路径分析法等等。果图法、边值分析法、逻辑覆盖法、路径分析法等等。
面向对象编程的特性使得对面向对象编程的特性使得对成员函数成员函数的测试又不完全等同的测试又不完全等同
于传统的函数或过程测试。尤其是继承特性和多态特性,于传统的函数或过程测试。尤其是继承特性和多态特性,
使子类继承或重载的父类成员函数出现了传统测试中未遇使子类继承或重载的父类成员函数出现了传统测试中未遇
见的问题。这里要考虑如下两个问题:见的问题。这里要考虑如下两个问题:
((11)继承的成员函数是否都不需要测试?)继承的成员函数是否都不需要测试?
((22)对父类的测试是否能照搬到子类?)对父类的测试是否能照搬到子类?
Slide 35
第五章 特定环境及应用测试
面向对象的单元测试(续)
继承的成员函数是否都不需要测试?继承的成员函数是否都不需要测试?
对父类中已经测试过的成员函数,以下两种情况需要在对父类中已经测试过的成员函数,以下两种情况需要在
子类中重新测试:子类中重新测试:
a a))继承的成员函数在子类中做了改动;继承的成员函数在子类中做了改动;
b b))成员函数调用了改动过的成员函数的部分。成员函数调用了改动过的成员函数的部分。
例:例:假设存在父类假设存在父类BaseBase有有Inherited()Inherited()和和Redefined()Redefined()这两个这两个
成员函数成员函数,,继承父类继承父类BaseBase的子类的子类DerivedDerived只对只对Redefined() Redefined()
做了改动。那么,做了改动。那么,Derived::Redefined()Derived::Redefined()就需要重新测试;就需要重新测试;
对于对于Derived::Inherited()Derived::Inherited(),,若它包含了调用若它包含了调用Redefined()Redefined()的的
语句语句 (比如:(比如:x=x/Redefined()x=x/Redefined()),),就需要重新测试,否则就需要重新测试,否则
就不需要。就不需要。
Slide 36
第五章 特定环境及应用测试
面向对象的单元测试(续)
对父类的测试是否能照搬到子类?对父类的测试是否能照搬到子类?
引用前面的假设,成员函数引用前面的假设,成员函数Base::Redefined()Base::Redefined()和和Derived::RedefinedDerived::Redefined
()()已经是不同的。那么,按理应该要对已经是不同的。那么,按理应该要对Derived::Redefined()Derived::Redefined()
重新测试分析,设计测试用例。但是由于面向对象的继承重新测试分析,设计测试用例。但是由于面向对象的继承
使得两个函数相似,故只需要在对使得两个函数相似,故只需要在对Base::Redefined()Base::Redefined()的测的测
试要求和测试用例上添加对试要求和测试用例上添加对Derived::Redefined()Derived::Redefined()新的测试新的测试
要求和增补相应测试用例。要求和增补相应测试用例。
例例 Base::Redefined()Base::Redefined()含有如下语句:含有如下语句:
If (value<0) message(“less”);If (value<0) message(“less”);
else if (value==0) message(“equal”); else if (value==0) message(“equal”);
else message(“more”); else message(“more”);
…… ……
Slide 37
第五章 特定环境及应用测试
面向对象的单元测试(续)
例(续)例(续) 在在Derived::Redefined()Derived::Redefined()中定义为:中定义为:
If (value<0) message(“less”); If (value<0) message(“less”);
else if (value==0) message(“It is equal”); else if (value==0) message(“It is equal”);
else { else {
message(“more”); message(“more”);
if (value==88) message(“luck”); if (value==88) message(“luck”);
} }
…… ……
在原有对父类在原有对父类BaseBase的测试上,对的测试上,对Derived::Redefined()Derived::Redefined()
的测试只需作如下改动:将的测试只需作如下改动:将value==0value==0的测试结果期望改动;的测试结果期望改动;
增加增加value==88value==88的测试。的测试。
Slide 38
第五章 特定环境及应用测试
面向对象的集成测试
传传统统的的自自顶顶向向下下和和自自底底向向上上的的集集成成策策略略对对于于面面向向对对象象的的测测
试试集集成成是是没没有有意意义义的的,,类类之之间间的的相相互互依依赖赖使使其其根根本本无无法法在在
编编译译不不完完全全的的程程序序上上对对类类进进行行测测试试。。因因此此,,面面向向对对象象集集成成
测测试试通通常常需需要要在在整整个个程程序序编编译译完完成成后后进进行行。。此此外外,,面面向向对对
象象程程序序具具有有动动态态特特性性,,程程序序的的控控制制流流往往往往无无法法确确定定,,所所以以
也只能对整个编译后的程序做基于黑盒的集成测试。也只能对整个编译后的程序做基于黑盒的集成测试。
面面向向对对象象的的集集成成测测试试通通常常需需要要进进行行两两级级集集成成::一一是是将将成成员员
函数集成到完整类中;二是将类与其它类集成。函数集成到完整类中;二是将类与其它类集成。
面面向向对对象象的的集集成成测测试试能能够够检检测测出出相相对对独独立立的的单单元元测测试试无无法法
检检测测出出的的那那些些类类相相互互作作用用时时才才会会产产生生的的错错误误。。单单元元测测试试可可
以以保保证证成成员员函函数数行行为为的的正正确确性性,,集集成成测测试试则则只只关关注注于于系系统统
的结构和内部的相互作用。的结构和内部的相互作用。
Slide 39
第五章 特定环境及应用测试
面向对象的集成测试(续)
面面向向对对象象集集成成测测试试可可以以分分成成两两步步进进行行::先先进进行行静静态态测测试试,,
再进行动态测试。再进行动态测试。
静静态态测测试试主主要要针针对对程程序序结结构构进进行行,,检检测测程程序序结结构构是是否否符符合合
设设计计要要求求。。现现在在常常用用的的一一些些测测试试软软件件都都能能提提供供一一种种称称为为
““可可逆逆性性工工程程””的的功功能能,,即即通通过过源源程程序序得得到到类类关关系系图图和和函函
数数功功能能调调用用关关系系图图。。将将 ““可可逆逆性性工工程程 ””得得到到的的结结果果与与
OODOOD的结果相比较,以检测的结果相比较,以检测OOPOOP是否达到了设计要求。是否达到了设计要求。
动动态态测测试试则则测测试试与与每每个个动动态态语语境境有有关关的的消消息息。。设设计计测测试试用用
例例时时,,通通常常需需要要上上述述的的功功能能调调用用关关系系图图、、类类关关系系图图或或实实体体
关关系系图图为为参参考考,,确确定定不不需需要要被被重重复复测测试试的的部部分分,,从从而而优优化化
测试用例,使得进行的测试能够达到一定覆盖标准。测试用例,使得进行的测试能够达到一定覆盖标准。
Slide 40
第五章 特定环境及应用测试
面向对象的系统测试
系系统统测测试试应应该该尽尽量量搭搭建建与与用用户户实实际际使使用用环环境境相相同同的的测测试试平平
台台,,应应该该保保证证被被测测系系统统的的完完整整性性,,对对临临时时没没有有的的系系统统设设备备
部件,也应有相应的模拟手段。部件,也应有相应的模拟手段。
面面向向对对象象的的系系统统测测试试时时,,应应该该参参考考OOAOOA分分析析的的结结果果,,对对应应
描描述述的的对对象象、、属属性性和和各各种种服服务务,,检检测测软软件件是是否否能能够够完完全全
““再再现现””问问题题空空间间。。系系统统测测试试不不仅仅是是检检测测软软件件的的整整体体行行为为
表现,从另一方面看,也是对软件开发设计的再确认。表现,从另一方面看,也是对软件开发设计的再确认。
这这里里说说的的系系统统测测试试是是对对测测试试步步骤骤的的抽抽象象描描述述。。具具体体测测试试的的
内内容容包包括括::功功能能测测试试、、强强度度测测试试、、性性能能测测试试、、安安全全测测试试、、
恢复测试、可用性测试、安装恢复测试、可用性测试、安装//卸载测试等。卸载测试等。
Slide 41
第五章 特定环境及应用测试
类的功能性测试和结构性测试
对对面面向向对对象象软软件件的的类类测测试试相相当当于于传传统统软软件件中中的的单单元元测测试试。。
类类的的测测试试用用例例可可以以先先根根据据其其中中的的方方法法设设计计,,然然后后扩扩展展到到方方
法法之之间间的的调调用用关关系系。。类类测测试试一一般般也也采采用用传传统统的的两两种种测测试试方方
式:功能性测试和结构性测试,即黑盒测试和白盒测试。式:功能性测试和结构性测试,即黑盒测试和白盒测试。
功功能能性性测测试试以以类类的的规规格格说说明明为为基基础础,,主主要要检检查查类类是是否否符符合合
其其规规格格说说明明的的要要求求。。功功能能性性测测试试包包括括两两个个层层次次::类类的的规规格格
说明和方法的规格说明。说明和方法的规格说明。
结结构构性性测测试试则则是是从从程程序序出出发发,,对对类类中中方方法法进进行行测测试试,,需需要要
考考虑虑其其中中的的代代码码是是否否正正确确。。测测试试分分为为两两层层::第第一一层层考考虑虑类类
中中各各独独立立方方法法的的代代码码,,即即方方法法要要做做单单独独测测试试;;第第二二层层考考虑虑
方法之间的相互作用,即方法需要进行综合测试。方法之间的相互作用,即方法需要进行综合测试。
Slide 42
第五章 特定环境及应用测试
状态转移图的面向对象软件测试
面面向向对对象象设设计计方方法法通通常常采采用用状状态态转转移移图图建建立立对对象象的的动动态态行行
为为模模型型。。状状态态转转移移图图用用于于刻刻画画对对象象响响应应各各种种事事件件时时状状态态发发
生生转转移移的的情情况况,,图图中中结结点点表表示示对对象象的的某某个个可可能能状状态态,,结结点点
之间的有向边通常用之间的有向边通常用““事件事件//动作动作””标出。标出。
基基于于状状态态的的测测试试是是通通过过检检查查对对象象的的状状态态在在执执行行某某个个方方法法后后
是是否否会会转转移移到到预预期期状状态态的的一一种种测测试试技技术术。。使使用用该该技技术术能能够够
检验类中的方法是否能正确地交互。检验类中的方法是否能正确地交互。
————因因为为对对象象的的状状态态是是通通过过对对象象数数据据成成员员的的值值反反映映出出来来,,
所所以以检检查查对对象象的的状状态态实实际际上上就就是是跟跟踪踪监监视视对对象象数数据据成成员员的的
值值的的变变化化。。如如果果某某个个方方法法执执行行后后对对象象的的状状态态未未能能按按预预期期的的
方式改变,则说明该方法含有错误。方式改变,则说明该方法含有错误。
Slide 43
第五章 特定环境及应用测试
状态转移图的面向对象软件测试(续)
基于状态测试的主要步骤:基于状态测试的主要步骤:
((11))依依据据设设计计文文档档,,或或者者通通过过分分析析对对象象数数据据成成员员的的取取值值情情
况空间,得到被测试类的状态转移图。况空间,得到被测试类的状态转移图。
((22))给给被被测测试试的的类类加加入入用用于于设设置置和和检检查查对对象象状状态态的的新新方方法法,,
导出对象的逻辑状态。导出对象的逻辑状态。
((33))对对于于状状态态转转移移图图中中每每个个状状态态,,确确定定该该状状态态是是哪哪些些方方法法
的合法起始状态,即在该状态时对象允许执行哪些操作。的合法起始状态,即在该状态时对象允许执行哪些操作。
((44))在在每每个个状状态态,,从从类类中中方方法法的的调调用用关关系系图图最最下下层层开开始始,,
逐逐一一测测试试类类中中的的方方法法;;测测试试每每个个方方法法时时,,根根据据对对象象当当前前状状
态态确确定定出出对对方方法法的的执执行行路路径径有有特特殊殊影影响响的的参参数数值值,,将将各各种种
可能组合作为参数进行测试。可能组合作为参数进行测试。