第9章 面向对象软件测试
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 传统的单元测试是针对程序的函数、过 程或完成某一定功能的程序块。沿用单 元测试的概念,实际测试类成员函数。 一些传统的测试方法在面向对象的单元 测试中都可以使用。如等价类划分法, 因果图法,边值分析法,逻辑覆盖法, 路径分析法,等等,单元测试一般建议 由程序员完成。
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 类测试的标准:
–面向对象程序是把功能的实现分布在类中。能正确 实现功能的类,通过消息传递来协同实现设计要求 的功能。正是这种面向对象程序风格,将出现的错 误能精确的确定在某一具体的类。因此,在面向对 象编程(OOP)阶段,忽略类功能实现的细则,将 测试的目光集中在类功能的实现和相应的面向对象 程序风格,主要体现为以下两个方面(假设编程使 用C++语言):
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 类测试的测试人员
类测试通常由他的开发人员测试,让开发人员起到测 试人员的作用,就可使得必须理解类说明的人员数量 减至最少。而且方便使用基于执行的测试方法,因为 他们对代码极其的熟悉。由同一个开发者来测试, 也有一定的缺点:开发人员对类说明的任何错误理解, 都会影响到测试。因此,最好要求另一个类的开发人 员编写测试计划,并且允许对代码进行对立检查。这 样就可以避免这些潜在的问题了。
yangsh@neusoft.com
IT Education & Training
• 面向对象软件产品的基本组成单位是类,从宏观上来 看,面向对象软件是各个类之间的相互作用。在面向 对象系统中,系统的基本构造模块是封装了的数据和方 法的类和对象,而不再是一个个能完成特定功能的功能 模块。每个对象有自己的生存周期,有自己的状态。消 息是对象之间相互请求或协作的途径,是外界使用对象 方法及获取对象状态的惟一方式。对象的功能是在消 息的触发下,由对象所属类中定义的方法与相关对象的 合作共同完成。且在不同状态下对消息的响应可能完 全不同。工作过程中对象的状态可能被改变,产生新的 状态。对象中的数据和方法是一个有机的整体,测试过 程中不能仅仅检查输入数据产生的输出结果是否与预 期的吻合,还要考虑对象的状态,且在不同状态下对消 息的响应可能完全不同。工作过程中对象的状态可能 被改变,产生新的状态。对象中的数据和方法是一个有 机的整体,测试过程中不能仅仅检查输入数据产生的输 出结果是否与预期的吻合,还要考虑对象的状态。
• 类测试可以在开发过程中的不同位臵进行。在递增的反复开发过 程中,一个类的说明和实现在一个工程的进程中可能会发生变化, 所以因该在软件的其它部分使用该类之前执行类的测试。每当一 个类的实现发生变化时,就应该执行回归测试。如果变化是因发 现代码中的缺陷(bug)而引起的,那么就必须执行测试计划的 检查,而且必须增加或改变测试用例以测试在未来的测试期间可 能出现的那些缺陷。
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 类测试的时间 类测试的开始时间一般在完全说明这个类,并且准备对其编码后 不久,就开发一个测试计划——至少是确定测试用例的某种形式。 如果开发人员还负责该类的测试,那么尤其应该如此。因为确定 早期测试用例有利于开发人员理解类说明,也有助于获得独立代 码检查的反馈。
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 用于单元级测试进行的测试分析(提出相应的 测试要求)和测试用例(选择适当的输入,达 到测试要求),规模和难度等均远小于后面将 介绍的对整个系统的测试分析和测试用例,而 且强调对语句应该有100%的执行代码覆盖率。 在设计测试用例选择输入数据时,可以基于以 下两个假设: 1. 如果函数(程序)对某一类输入中的一 个数据正确执行,对同类中的其他输入也能正 确执行。 2. 如果函数(程序)对某一复杂度的输入 正确执行,对更高复杂度的输入也能正确执行。
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 2 类是否实现了要求的功能
类所实现的功能,都是通过类的成员函数 执行。在测试类的功能实现时,应该首先保 证类成员函数的正确性。单独的看待类的成 员函数,与面向过程程序中的函数或过程没 有本质的区别,几乎所有传统的单元测试中 所使用的方法,都可在面向对象的单元测试 中使用。
yangsh@neusoft.com
IT Education & Training
迭代的模型
yangsh@neusoft.com
IT Education & Training
第9章 面向对象软件测试
• • • • • 9.1 面向对象测试的问题 9.2 类测试 9.3 面向对象的集成测试 9.4 GUI测试 9.5 面向对象的系统测试
IT Education & Training
面向对象软件测试
软件外包教研室
2013-7-9
IT Education & Training
第9章 面向对象软件测试
• • • • • 9.1 面向对象测试的问题 9.2 类测试 9.3 面向对象的集成测试 9.4 GUI测试 9.5 面向对象的系统测试
yangsh@neusoft.com
IT Education & Training
9.2 类测试
类函数成员的正确行为只是类能够实现要 求的功能的基础,类成员函数间的作用和类 之间的服务调用是单元测试无法确定的。因 此,需要进行面向对象的集成测试。 测试类的功能,不能仅满足于代码能无错 运行或被测试类能提供的功能无错,应该以 所做的OOD结果为依据,检测类提供的功 能是否满足设计的要求,是否有缺陷。必要 时(如通过OOD结仍不清楚明确的地方) 还应该参照OOA的结果,以之为最终标准。
–分析与设计模型测试技术 –类测试技术(单元测试) –对象交互测试技术(集成测试) –类层次结构测试技术(集成测试) –面向对象系统测试技术
yangsh@neusoft.com
IT Education & Training
面向对象测试模型
• 面向对象的开发模型突破了传统的瀑布 模型,将开发分为面向对象分析 (OOA),面向对象设计(OOD),和 面向对象编程(OOP)三个阶段。分析 阶段产生整个问题空间的抽象描述,在 此基础上,进一步归纳出适用于面向对 象编程语言的类和类结构,最后形成代 码。
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 类测试的程度
–建立覆盖率标准 –可以根据已经测试了多少类和实现了多少类说明来 衡量测试的充分性。对于类的测试,通常需要将这 两者都考虑到,希望测试到操作和状态转换的各种 组合情况。一个对象能维持自己的状态,而状态一 般来说也会影响操作的含义。但要穷举所有组合式 不可能的,而且是没必要的 。因此,就因该结合风 险分析进行选择配对系列的组合,以致达到使用最 重要的测试用例并抽取部分不太重要的测试用例。
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 例如: class Hiden {private: int a=1; char *p= "hiden";} class Visible {public: int b=2; char *s= "visible";} ….. ….. Hiden pp; Visible *qq=(Visible *)&pp; • 在上面的程序段中,pp的数据成员可以通过qq被随意 访问。
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 例如需要选择字符串作为输入时,基于 本假设,就无须计较于字符串的长度。 除非字符串的长度是要求固定的,如IP 地址字符串。在面向对象程序中,类成 员函数通常都很小,功能单一,函数的 间调用频繁,容易出现一些不宜发现的 错误。
yangsh@neusoft.com
IT Education & Training
面向对象测试模型
OOA Test:面向对象分析的测试 OOD Test:面向对象设计的测试 OOP Test:面向对象编程的测试
OO Unit Test:面向对象单元测试 OO Integrate Test:面向对象集成测试 OO System Test:面向对象系统测试
IT Education & Training
9.1 面向对象测试的问题
• 面向对象软件测试的单元是什么? • 面向对象软件的特征对测试的影响
–封装 –继承 –多态 –迭代的软件开发过程
yangsh@neusoft.com
IT Education & Training
9.1 面向对象测试的问题
• 面向对象软件测试是根据面向对象的软 件开发过程结合面向对象的特点提出的。 它包括:
yangsh@neusoft.com
9.2 类测试
IT Education & Training
9.2 类测试
• 类测试是由那些与验证类的实现是否和该类的 说明完全一致的相关联的活动组成的。类测试 的对象主要是指能独立完成一定功能的原始类。 如果类的实现正确,那么类的每一个实例的行 为也应该是正确的。 • 类测试我们考虑下面一些内容:
–类测试的内容 –类测试的人员 –类测试的时间 –类测试的程度 –类测试的方法
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 类测试的内容 类测试的目的主要是确保一个类的代码能够完 全满足类的说明所描述的要求。对一个类进行 测试以确保它只做规定的事情,对此给与关注 的多少,取决于提供额外的行为的类相关联的 风险.在运行了各种类的测试后,如果代码的 覆盖率不完整,这可能意味着该类包含了额外 的文档支持的行为.需要增加更多的测试用例 来进行测试(后面将给出两个测试标准的考虑)
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 例如: • · (-1==write (fid, buffer, amount)) error_out(); if 该语句没有全面检查write()的返回值,无意中断然假设了只 有数据被完全写入和没有写入两种情况。当测试也忽略了 数据部分写入的情况,就给程序遗留了隐患。 ·按程序的设计,使用函数strrchr()查找最后的匹配字符, 但误程序中写成了函数strchr(),使程序功能实现时查找的 是第一个匹配字符。 ·程序中将if (strncmp(str1,str2,strlen(str1)))误写成了if (strncmp(str1,str2,strlen(str2)))。如果测试用例中使用的数 据str1和str2长度一样,就无法检测出。
• 数据成员是否满足数据封装的要求 • 类是否实现了要求的功能
yangsh@neusoft.com
IT Education & Training
9.2 类测试
• 1 数据成员是否满足数据封装的要求 数据封装是数据和数据有关的操作 的集合。检查数据成员是否满足数据封 装的要求,基本原则是数据成员是否被 外界(数据成员所属的类或子类以外的 调用)直接调用。更直观的说,当改编 数据成员的结构时,是否影响了类的对 外接口,是否会导致相应外界必须改动。 值得注意,有时强制的类型转换会破坏 数据的封装特性。
yangsh@neusoft.com
IT Education & Training
9.1 面向对象测试Fra Baidu bibliotek问题
• 面向对象技术开发出的程序无需进行测 试? • 面向对象程序的结构不再是传统的功能 模块结构,作为一个整体,原有集成测 试所要求的逐步将开发的模块搭建在一 起进行测试的方法已成为不可能。
yangsh@neusoft.com