软件工程与开发技术(西电第二版)第14章面向对象测试基础

上传人:xiao****017 文档编号:22141183 上传时间:2021-05-21 格式:PPT 页数:30 大小:605KB
返回 下载 相关 举报
软件工程与开发技术(西电第二版)第14章面向对象测试基础_第1页
第1页 / 共30页
软件工程与开发技术(西电第二版)第14章面向对象测试基础_第2页
第2页 / 共30页
软件工程与开发技术(西电第二版)第14章面向对象测试基础_第3页
第3页 / 共30页
点击查看更多>>
资源描述
第 14章 面 向 对 象 测 试 基 础 第14章 面向对象测试基础 14.1 面向对象的单元测试 14.2 面向对象的集成测试 14.3 面向对象的确认测试与系统测试 14.4 设计测试用例 14.5小结 第 14章 面 向 对 象 测 试 基 础 14.1 面向对象的单元测试在面向对象的软件开发中,“封装”导致了类和对象的定义特点,这意味着类和类的实例(对象)包装了属性(数据)和处理这些数据的操作(也称为方法或服务)。软件的核心是“对象”,不像传统软件开发中的“单元”(或者说单元的概念改变了)。也就是说,封装起来的类和对象是最小的可测试单元。一个类可以包含一组不同的操作,而一个特定的操作也可能定义在一组不同的类中。因此,面向对象的软件单元测试与传统测试方法不一样,它的含义发生了很大变化。 第 14章 面 向 对 象 测 试 基 础 面向对象软件的单元测试不是独立地测试单个操作,而是把所有操作都看成类的一部分,全面地测试类和对象所封装的属性和操纵这些属性的操作整体。具体地说,在面向对象的单元测试中不仅要发现类的所有操作中存在的问题,还要考查一个类与其他的类协同工作时可能出现的错误。现以实例说明:在一个类层次中,操作A在超类中定义并被一组子类继承,每个子类都可使用操作A,但是A要调用子类中定义的操作并处理子类的私有属性。由于在不同的子类中使用操作A的环境有所不同,因此有必要在每个子类的语境中测试操作A。这就是说,当测试面向对象软件时,传统的单元测试方法是不完备的,我们不能再独立地对操作A进行测 试。 第 14章 面 向 对 象 测 试 基 础 14.2 面向对象的集成测试 1基于线程的测试(Thread_based Testing)基于线程的测试把响应系统的一个输入或一个事件所需要的一组类集成起来进行测试。应当分别集成并测试每个线程,同时为了避免产生副作用再进行回归测试。该测试需要基于系统的动态模型。 第 14章 面 向 对 象 测 试 基 础 2基于使用的测试(Use_based Testing)基于使用的测试首先测试几乎不使用服务器类的那些类(称为独立类);接着测试使用独立类的最下层的类(称为依赖类);然后,对根据依赖类的使用关系,从下到上一个层次一个层次地持续进行测试,直至把整个软件系统测试完为止。除了上述两种测试方法,还有一种集群测试法,是面向对象软件集成测试的一个步骤。为了检查一群相互协作的类,用精心设计的测试用例,力图发现协作错误,即集群测试。通过研究对象模型可以确定协作类。为减少测试工作的工作量,在进行集成测试时,可参考类关系图或实体关系图,确定不需要被重复测试的部分,从而优化测 试用例,使测试能够达到一定的标准。 第 14章 面 向 对 象 测 试 基 础 14.3 面向对象的确认测试与系统测试通过对软件的单元测试和集成测试,仅能确认软件开发的功能是正确的,不能确认在实际运行时,它是否满足用户要求,是否大量存在与实际使用条件下的各种应用相矛盾的错误。为此在完成上述测试活动后,还必须经过规范的确认测试和系统测试。面向对象软件的确认测试或系统测试与传统的确认测试一样,通过设计测试用例,主要检查用户界面和用户可识别的输出,不再考虑类之间相互连接的细节。测试人员应该认真研究动态模型和描述系统行为的脚本,为系统的输入信息 设计出错处理的通路,模拟错误的数据和软件界面可能发生的错误,设计出合理的测试用例。 第 14章 面 向 对 象 测 试 基 础 14.4 设计测试用例14.4.1 测试用例概述类似于用例(Use Case)的定义,测试用例(Test Case)是为实现某个特殊目标(验证或者找错)而执行系统的过程。它包括精心设计的一组测试输入、执行条件以及预期结果,以便测试某个程序功能或者路径是否满足特定需求。测试用例包括对特定的软件产品进行测试的任务描述,体现测试方案、方法、技术和策略,其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等, 并形成文档。 第 14章 面 向 对 象 测 试 基 础 测试用例是针对软件产品的功能、业务规则和业务处理所设计的测试方案。对软件的每个特定功能或运行操作路径的测试构成了一个个测试用例。不同类别的软件,测试用例的策略、方法和侧重点都是不同的。例如,企业信息管理类软件,其需求不确定或者变化较为频繁,通常的策略是把测试数据和测试脚本从测试用例中划分出来,以供重用。目前,面向对象软件的测试用例的设计方法还处于研究、发展阶段。1993年,Berard提出了指导面向对象的软件测试用例设计的方法,要点如下: 第 14章 面 向 对 象 测 试 基 础 (1) 每一个测试用例都要有一个唯一的标识,并与被测试的一个或几个类相关联起来。(2) 每个测试用例都要陈述测试目的。(3) 对每个测试用例要有相应的测试步骤,包括被测对象的特定状态、所使用的消息和操作、可能产生的错误及测试需要的外部环境。(4) 与传统软件测试(测试用例的设计由软件的输入处理输出或单个模块的算法细节驱动)不同,面向对象测试关注于设计适当的操作序列以检查类的状态。 第 14章 面 向 对 象 测 试 基 础 测试用例分为基于黑盒的测试用例和基于白盒的测试用例。前者也叫做基于系统外部需求的测试用例,主要根据需求分析阶段的用例规格描述和其他需求进行设计,只观察系统的外观表现是否满足预期要求;后者又称为基于系统内部结构的测试用例,主要依据分析设计阶段的逻辑和物理模型,如类图和顺序图以及代码设计测试用例,旨在测试软件功能执行过程中对象的交互过程,包括消息、响应以及各个程序路径等。 第 14章 面 向 对 象 测 试 基 础 14.4.2 面向对象概念对测试用例设计的影响封装性和继承性是类的重要特性,这为面向对象的软件开发带来很多好处,同时它又为面向对象的软件测试带来负面影响。类的属性和操作是被封装的,而测试需要了解对象的详细状态。同时,当改变数据成员的结构时,要测试是否影响了类的对外接口,是否导致相应的外界必须改动。例如,强制的类型转换会破坏数据的封装性。请看下面的这段程序: 第 14章 面 向 对 象 测 试 基 础 class Hd int a=1; char *h=“Hd”;class Vb public:int b=2; char *v=Vb;Hd p;Vb *q=(Vb *)这样,p的私有数据成员a可以通过q被随意访问,破坏了类Vb的封装性。 第 14章 面 向 对 象 测 试 基 础 此外,继承不会减少对子类的测试,相反,会使测试过程更加复杂化。因此,继承也给测试用例的设计带来负面影响。当父类与子类的环境不同时,父类的测试用例对子类没有什么使用价值,必须为子类设计新的测试用例。在设计面向对象的测试用例时应注意以下三点:(1) 继承的成员函数需要测试。对于在父类中已经测试过的成员函数,根据具体情况仍需在子类中重新测试。一般在下述两种情况下要对成员函数重新进行测试: 继承的成员函数在子类中有所改动。 成员函数调用了改动过的成员函数。 第 14章 面 向 对 象 测 试 基 础 (2) 子类的测试用例可以参照父类。例如,有两个不同的成员函数的定义如下:father:B()中定义为if (value0) message(less);else if (value=0) message(equal);else message(more);son:B()中定义为if (value 账户余额 在步骤 2 处重新加入基本流 TC y 场景4 步骤 2 - 提款金额 账户余额 不执行备选流 3,执行基本流 TC z 场景4 步骤 2 - 提款金额 = 账户余额 不执行备选流 3,执行基本流 第 14章 面 向 对 象 测 试 基 础 2基于白盒技术的单元测试的测试用例设计从理论上来讲,白盒测试应该测试程序每一条可能的路径。在所有简单的单元内实现这样的目标是不切实际的。作为最基本的测试,应将每个决策(Decision)到决策路径(DD 路径)测试至少一次,这样可确保将所有语句至少执行一次。决策通常是指 if 语句,而 DD 路径是两个决策之间的路径。 第 14章 面 向 对 象 测 试 基 础 要达到这种程度的测试覆盖,测试用例应确保:(1) 每个if语言的布尔表达式的求值结果为true和false。例如,表达式(a4)的求值结果为true/false 的四种组合,即满足条件覆盖。(2) 每一个循环至少要执行零次、一次和一次以上。 (3) 可使用代码覆盖工具来确定白盒测试未测试到的代码,另外在进行白盒测试的同时应进行可靠性测试。例如,假设对类SetofPrime中的isPrime函数执行结构测试。该函数检查集合是否包含了某个指定的整数。isPrime函数的代码和相应的流程图如图14.2所示。 第 14章 面 向 对 象 测 试 基 础 图14.2 基于白盒技术的测试用例设计 第 14章 面 向 对 象 测 试 基 础 理论上,测试用例应遍历代码内路径的所有组合情况。在 isPrime函数的for循环中存在两个可选择的路径。测试用例可以一次、多次遍历该循环,或是根本就不遍历。如果测试用例根本就没有遍历循环,则在代码中只能找到一条路径。如果遍历一次,将有三条路径;如果遍历两次,将存在六条路径。如此类推。因此路径组合总数根本无法完全测试,必须选择所有这些路径的子集。本例中,可以采用三个测试用例来执行所有的语句,测试数据m分别为2、3、4,这和基于黑盒的等价类划分方法得到的结果是一致的。 第 14章 面 向 对 象 测 试 基 础 14.5 小 结面向对象测试和传统测试方法有很多类似的地方,主要区别在于面向对象测试中的单元测试是以类作为基本单元的,必须针对类单元设计单元测试用例。除了类单元测试之外,还有类协作测试。面向对象方法在软件测试中的应用之一就是测试用例或测试案例(Test Case)概念的提出,这也是用例思想在软件测试中的应用即通过设计合适的测试案例来发现软件设计中存在的问题。此时可根据用例的使用或者实现过程来设计测试用例,前者可以参照用例规格说明,后者可以根据参与实现的类之间的关系来设计用例,以便更好地发现类协作之间的问题。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!