软件测试技术资料课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《软件测试技术资料课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 技术资料 课件
- 资源描述:
-
1、IT Education & Training2007年3月IT Education & T第9章 面向对象软件测试 9.1 面向对象测试的问题 9.2 类测试 9.3 面向对象的集成测试 9.4 GUI测试 9.5 面向对象的系统测试 IT Education & T9.1 面向对象测试的问题 面向对象技术开发出的程序无需进行测试? 面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成测试所要求的逐步将开发的模块搭建在一起进行测试的方法已成为不可能。IT Education & T9.1 面向对象测试的问题 面向对象软件测试的单元是什么? 面向对象软件的特征对测试的影响封装继承
2、多态迭代的软件开发过程IT Education & T9.1 面向对象测试的问题 面向对象软件测试是根据面向对象的软件开发过程结合面向对象的特点提出的。它包括:分析与设计模型测试技术类测试技术(单元测试)对象交互测试技术(集成测试)类层次结构测试技术(集成测试)面向对象系统测试技术 IT Education & T面向对象测试模型面向对象测试模型 面向对象的开发模型突破了传统的瀑布模型,将开发分为面向对象分析(OOA),面向对象设计(OOD),和面向对象编程(OOP)三个阶段。分析阶段产生整个问题空间的抽象描述,在此基础上,进一步归纳出适用于面向对象编程语言的类和类结构,最后形成代码。 IT
3、Education & T面向对象测试模型面向对象测试模型 OOA Test:面向对象分析的测试 OOD Test:面向对象设计的测试OOP Test:面向对象编程的测试 OO Unit Test:面向对象单元测试OO Integrate Test:面向对象集成测试OO System Test:面向对象系统测试IT Education & T迭代的模型IT Education & T第9章 面向对象软件测试 9.1 面向对象测试的问题 9.2 类测试 9.3 面向对象的集成测试 9.4 GUI测试 9.5 面向对象的系统测试 IT Education & T9.2 类测试测试 面向对象软件产品
4、的基本组成单位是类,从宏观上来看,面向对象软件是各个类之间的相互作用。在面向对象系统中,系统的基本构造模块是封装了的数据和方法的类和对象,而不再是一个个能完成特定功能的功能模块。每个对象有自己的生存周期,有自己的状态。消息是对象之间相互请求或协作的途径,是外界使用对象方法及获取对象状态的惟一方式。对象的功能是在消息的触发下,由对象所属类中定义的方法与相关对象的合作共同完成。且在不同状态下对消息的响应可能完全不同。工作过程中对象的状态可能被改变,产生新的状态。对象中的数据和方法是一个有机的整体,测试过程中不能仅仅检查输入数据产生的输出结果是否与预期的吻合,还要考虑对象的状态,且在不同状态下对消息
5、的响应可能完全不同。工作过程中对象的状态可能被改变,产生新的状态。对象中的数据和方法是一个有机的整体,测试过程中不能仅仅检查输入数据产生的输出结果是否与预期的吻合,还要考虑对象的状态。 IT Education & T9.2 类测试测试 类测试是由那些与验证类的实现是否和该类的说明完全一致的相关联的活动组成的。该类测试的对象主要是指能独立完成一定功能的原始类。如果类的实现正确,那么类的每一个实例的行为也应该是正确的。 类测试我们考虑下面一些内容:类测试的内容类测试的人员类测试的时间类测试的程度类测试的方法IT Education & T9.2 类测试测试 类测试的内容类测试的目的主要是确保一个
6、类的代码能够完全满足类的说明所描述的要求对一个类进行测试以确保他只做规定的事情,对此给与关注的多少,取决于提供额外的行为的类相关联的风险在运行了各种类的测试后,如果代码的覆盖率不完整,这可能意味着该类包含了额外的文档支持的行为需要增加更多的测试用例来进行测试(后面将给出两个测试标准的考虑) IT Education & T9.2 类测试测试 类测试的时间类测试的开始时间一般在完全说明这个类,并且准备对其编码后不久,就开发一个测试计划至少是确定测试用例的某种形式。如果开发人员还负责该类的测试,那么尤其应该如此。因为确定早期测试用例有利于开发人员理解类说明,也有助于获得独立代码检查的反馈。 类测试
7、可以在开发过程中的不同位置进行。在递增的反复开发过程中,一个类的说明和实现在一个工程的进程中可能会发生变化,所以因该在软件的其它部分使用该类之前执行类的测试。每当一个类的实现发生变化时,就应该执行回归测试。如果变化是因发现代码中的缺陷(bug)而引起的,那么就必须执行测试计划的检查,而且必须增加或改变测试用例以测试在未来的测试期间可能出现的那些缺陷。IT Education & T9.2 类测试测试 类测试的测试人员 类测试通常由他的开发人员测试,让开发人员起到测试人员的作用,就可使得必须理解类说明的人员数量减至最少。而且方便使用基于执行的测试方法,因为他们对代码极其的熟悉。由同一个开发者来测
8、试, 也有一定的缺点:开发人员对类说明的任何错误理解,都会影响到测试。因此,最好要求另一个类的开发人员编写测试计划,并且允许对代码进行对立检查。这样就可以避免这些潜在的问题了。 IT Education & T9.2 类测试测试 类测试的程度建立覆盖率标准可以根据已经测试了多少类和实现了多少类说明来衡量测试的充分性。对于类的测试,通常需要将这两者都考虑到,希望测试到操作和状态转换的各种组合情况。一个对象能维持自己的状态,而状态一般来说也会影响操作的含义。但要穷举所有组合式不可能的,而且是没必要的 。因此,就因该结合风险分析进行选择配对系列的组合,以致达到使用最重要的测试用例并抽取部分不太重要的
9、测试用例。 IT Education & T9.2 类测试测试 类测试的标准:面向对象程序是把功能的实现分布在类中。能正确实现功能的类,通过消息传递来协同实现设计要求的功能。正是这种面向对象程序风格,将出现的错误能精确的确定在某一具体的类。因此,在面向对象编程(OOP)阶段,忽略类功能实现的细则,将测试的目光集中在类功能的实现和相应的面向对象程序风格,主要体现为以下两个方面(假设编程使用C+语言): 数据成员是否满足数据封装的要求 类是否实现了要求的功能 IT Education & T9.2 类测试测试 1 数据成员是否满足数据封装的要求 数据封装是数据和数据有关的操作的集合。检查数据成员是
10、否满足数据封装的要求,基本原则是数据成员是否被外界(数据成员所属的类或子类以外的调用)直接调用。更直观的说,当改编数据成员的结构时,是否影响了类的对外接口,是否会导致相应外界必须改动。值得注意,有时强制的类型转换会破坏数据的封装特性。IT Education & T9.2 类测试测试 例如:class Hidenprivate:int a=1;char *p= hiden;class Visiblepublic:int b=2;char *s= visible;.Hiden pp;Visible *qq=(Visible *)&pp;在上面的程序段中,pp的数据成员可以通过qq被随意访问。 I
11、T Education & T9.2 类测试测试 2 类是否实现了要求的功能n类所实现的功能,都是通过类的成员函数执行。在测试类的功能实现时,应该首先保证类成员函数的正确性。单独的看待类的成员函数,与面向过程程序中的函数或过程没有本质的区别,几乎所有传统的单元测试中所使用的方法,都可在面向对象的单元测试中使用。IT Education & T9.2 类测试测试n 类函数成员的正确行为只是类能够实现要求的功能的基础,类成员函数间的作用和类之间的服务调用是单元测试无法确定的。因此,需要进行面向对象的集成测试。n测试类的功能,不能仅满足于代码能无错运行或被测试类能提供的功能无错,应该以所做的OOD结
12、果为依据,检测类提供的功能是否满足设计的要求,是否有缺陷。必要时(如通过OOD结仍不清楚明确的地方)还应该参照OOA的结果,以之为最终标准。 IT Education & T9.2 类测试测试 传统的单元测试是针对程序的函数、过程或完成某一定功能的程序块。沿用单元测试的概念,实际测试类成员函数。一些传统的测试方法在面向对象的单元测试中都可以使用。如等价类划分法,因果图法,边值分析法,逻辑覆盖法,路径分析法,等等,单元测试一般建议由程序员完成。 IT Education & T9.2 类测试测试 用于单元级测试进行的测试分析(提出相应的测试要求)和测试用例(选择适当的输入,达到测试要求),规模和
13、难度等均远小于后面将介绍的对整个系统的测试分析和测试用例,而且强调对语句应该有100%的执行代码覆盖率。在设计测试用例选择输入数据时,可以基于以下两个假设:1. 如果函数(程序)对某一类输入中的一个数据正确执行,对同类中的其他输入也能正确执行。2. 如果函数(程序)对某一复杂度的输入正确执行,对更高复杂度的输入也能正确执行。 IT Education & T9.2 类测试测试 例如需要选择字符串作为输入时,基于本假设,就无须计较于字符串的长度。除非字符串的长度是要求固定的,如IP地址字符串。在面向对象程序中,类成员函数通常都很小,功能单一,函数的间调用频繁,容易出现一些不宜发现的错误。IT E
14、ducation & T9.2 类测试测试 例如: if (-1=write (fid, buffer, amount) error_out();该语句没有全面检查write()的返回值,无意中断然假设了只有数据被完全写入和没有写入两种情况。当测试也忽略了数据部分写入的情况,就给程序遗留了隐患。 按程序的设计,使用函数strrchr()查找最后的匹配字符,但误程序中写成了函数strchr(),使程序功能实现时查找的是第一个匹配字符。 程序中将if (strncmp(str1,str2,strlen(str1)误写成了if (strncmp(str1,str2,strlen(str2)。如果测试
15、用例中使用的数据str1和str2长度一样,就无法检测出。IT Education & T9.2 类测试测试 继承的测试问题面向对象编程的特性使得对成员函数的测试,又不完全等同于传统的函数或过程测试。尤其是继承特性和多态特性,使子类继承或过载的父类成员函数出现了传统测试中未遇见的问题。Brian Marick 给出了二方面的考虑: 继承的成员函数是否都不需要测试?对父类的测试是否能照搬到子类?IT Education & T9.2 类测试测试 1. 继承的成员函数是否都不需要测试?对父类中已经测试过的成员函数,两种情况需要在子类中重新测试:a)继承的成员函数在子类中做了改动;b)成员函数调用了
16、改动过的成员函数的部分。例如:假设父类Bass有两个成员函数:Inherited()和Redefined(),子类Derived只对Redefined()做了改动。Derived:Redefined()显然需要重新测试。对于Derived:Inherited(),如果它有调用Redefined()的语句(如:x=x/Redefined(),就需要重新测试,反之,无此必要。 IT Education & T9.2 类测试测试 2. 对父类的测试是否能照搬到子类?援用上面的假设,Base:Redefined()和Derived:Redefined()已经是不同的成员函数,它们有不同的服务说明和执行
17、。对此,照理应该对 Derived:Redefined()重新测试分析,设计测试用例。但由于面向对象的继承使得两个函数有相似,故只需在 Base:Redefined()的测试要求和测试用例上添加对Derived:Redfined()新的测试要求和增补相应的测试用例。 IT Education & T9.2 类测试测试 例如:Base:Redefined()含有如下语句If (value0) message (less);else if (value=0) message (equal);else message (more);Derived:Redfined()中定义为If (value0)
18、message (less);else if (value=0) message (It is equal);elsemessage (more);if (value=88)message(luck);在原有的测试上,对Derived:Redfined()的测试只需做如下改动:将value=0的测试结果期望改动;增加value=88的测试。 IT Education & T9.2 类测试测试 具体说类测试的方法有两种代码检查执行测试用例 代码检查优点:同行走查,往往能查出5060以上的比较明显的错误不足:代码检查易受人为因素影响,代码检查在回归测试方面明显需要更多的工作量,常常和原始测试差不多
19、IT Education & T9.2 类测试测试 基于执行测试用例的方法优点:克服了代码检查的不足缺点:确定测试用例和开发测试驱动程序也需要很大的工作量。在某些情况下,构造一个测试驱动程序的工作量比开发这个类的还多,此时就应该评估在使用了这个类的系统之外测试测试这个类所花的代价和带来的收益。 IT Education & T9.2 类测试测试 构建测试用例:要对类进行测试,就必须先确定和构建类的测试用例。类的描述方法有OCL,自然语言,和状态图等方法,可以根据类说明的描述方法构件类的测试用例。根据类说明(用OCL表示)确定测试用例根据类的状态转换图来构建类的测试用例IT Education
20、& T9.2 类测试测试 根据类的说明确定测试用例 用OCL表示的类的说明中描述了类的每一个限定条件条件。在OCL条件下分析每个逻辑关系,从而得到由这个条件的结构所对应的测试用例。这种确定类的测试用例的方法叫做根据前置条件和后置条件构建测试用例。其总体思想是:为所有可能出现的组合情况确定测试用例需求。在这些可能出现的组合情况下,可满足前置条件,也能够到达后置条件。根据这些需求,创建测试用例;创建拥有特定输入值(常见值和特殊值)的测试用例;确定它们的正确输出预期输出值。 IT Education & T9.2 类测试测试 例如A、B、C代表用OCL表示的组件,前置条件和后置条件列表如下(下页):
21、 IT Education & T9.2 类测试测试IT Education & T9.2 类测试测试IT Education & T9.2 类测试测试 根据前置条件和后置条件创建测试用例的基本步骤如下: 1 确定在表1中与前置条件形成相匹配的各个项目所指定的一系列前置条件的影响。2 确定在表2中与后置条件形成相匹配的各个项目所指定的一系列前置条件的影响。3 根据影响到列表中各个项目的所有可能的组合情况从而构造测试用例需求。一种简单的方法就是:用第一个列表中的每一个输入约束来代替第二个列表中每一个前置条件。4 排除表中生成的所有无意义的条件。IT Education & T9.2 类测试测试
22、根据状态转换图构建测试用例 状态转换图以图例的形式说明了与一个类的实例相关联的行为。状态转换图可用来补充编写的类说明或者构成完整的类说明。状态图中的每一个转换都描述了一个或多个测试用例需求。因而,可以用过在转换的每一端选择有代表性的值和边界来满足这些需求。如果转换是受保护的,那么也应该为这些保护条件选择边界。状态的边界值取决于状态相关属性值的范围,可以根据属性值来定义每一个状态。 IT Education & T9.2 类测试测试 两种构建测试用例方法的比较和根据前置条件和后置条件创建类的测试用例相比,根据状态转换图创建类的测试用例有非常大的优势。在类的状态图中,类相关联的行为非常的明显和直观
23、,测试用例的需求直接来自于状态转换,因而很容易确定测试用例的需求。不过基于状态图的方法也有其不利的方面。如要完全理解怎样根据属性值来定义状态;事件是如何在一个给定的状态内影响特定值等。这都很难仅从简单的状态图中确定。因此,在使用基于状态转换图进行测试时,务必在生成的测试用例时检查每个状态转换的边界值和预期值。 IT Education & T第9章 面向对象软件测试 9.1 面向对象测试的问题 9.2 类测试 9.3 面向对象的集成测试 9.4 GUI测试 9.5 面向对象的系统测试 IT Education & T9.3 面向对象的集成测试 面向对象设计(OOD)采用造型的观点,以OOA为基
展开阅读全文