您的位置:首页 > 房产 > 建筑 > 最新传奇手游2022首发排行_荣耀手机商城官方网_seo网站优化课程_女教师遭网课入侵视频大全播放

最新传奇手游2022首发排行_荣耀手机商城官方网_seo网站优化课程_女教师遭网课入侵视频大全播放

2025/3/18 7:13:44 来源:https://blog.csdn.net/weixin_74301566/article/details/146324182  浏览:    关键词:最新传奇手游2022首发排行_荣耀手机商城官方网_seo网站优化课程_女教师遭网课入侵视频大全播放
最新传奇手游2022首发排行_荣耀手机商城官方网_seo网站优化课程_女教师遭网课入侵视频大全播放

6、面向对象软件测试

面向对象程序设计语言对软件测试的影响

面向对象的特点

面向对象技术

  • 对象
  • 对象的状态和行为
  • 类的结构(类间关系)
  • 消息和方法

与传统的程序相比较,面向对象程序主要特征有

  • 封装性
  • 继承性
  • 多态性

面向对象程序设计语言对软件测试的影响

继承是类之间的一种联系,类可以通过派生生成新类,派生出的新类称为子类。通过继承机制,子类可以继承父类的特点和功能,这一特征为缺陷的扩散提供了途径,如果父类带有缺陷,派生出的子类也会带有缺陷。继承使代码的重用率得到了提高,但同时也使缺陷的传播几率增加

另外子类可以具有自己独有的特点和功能,子类是在新的环境中存在,所以父类的正确性不能保证子类的正确性

多态是同一个操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。多态性增强了软件的灵活性和重用性,同时也使得测试的工作量成倍增加。多态和动态绑定增加了软件运行中可能的执行路径,而且给面向对象软件带来了不确定性,给测试覆盖带来了困难

例如,在传统的面向过程程序中,对于某个函数 Function (  ),只需考虑函数 Function ( ) 本身的行为和特性即可。而在面向对象程序中,不得不还要同时考虑它的基类函数 Base::Function( ) 和它的继承类函数 Derived::Function( )的行为和特性

面向对象测试模型

面向对象的开发模型突破了传统的瀑布模型,将开发分为

  • 面向对象分析(OOA)
  • 面向对象设计(OOD)
  • 面向对象编程(OOP)

面向对象分析(OOA)

OOA:将问题空间中实现的功能进行抽象,问题空间中的实例抽象为对象,用对象的结构反应问题空间的复杂关系,用属性和服务表示实例的特殊性和行为

OOA必须回答:

  • 为完成用户要求,系统应提供哪些功能
  • 系统应由哪些对象构成
  • 每个对象应由哪些属性和服务
  • 对象间应有怎样的联系

OOA阶段的测试划分为以下五个方面

  • 对类和对象范围的测试
  • 对结构范围的测试
  • 对主题的测试
  • 对定义的属性和实例关联的测试
  • 对定义的服务和消息关联的测试

面向对象设计(OOD)

OOD:结构化设计方法采用面向作业的设计方法,把系统分解为一组作业。面向对象设计采用“造型的观点”,是以OOA为基础归纳出类,建立类结构,实现分析结果对问题空间的抽象,设计类的服务。由此可见,OOD是OOA的进一步细化和抽象,其界限通常难以严格区分。OOD确定类和类结构不仅是满足当前需求分析的要求,更重要的是通过重新组合或加以适当的补充,实现功能的重用和扩增

OOD的测试从如下3方面考虑

  • 对认定的类的测试
  • 对构造的类层次结构的测试
  • 对类库的支持的测试

面向对象编程(OOP)

OOP:面向对象程序是把功能的实现分布在类中。能正确实现功能的类,通过消息传递来协同实现设计要求的功能。正是这种面向对象程序风格,将出现的错误能精确的确定在某一具体的类。因此,在面向对象编程(OOP)阶段,忽略类功能实现的细则,将测试的目先集中在类功能的实现和相应的面向对象程序风格。

主要体现为以下两个方面:

  • 数据成员是否满足数据封装的要求
  • 类是否实现了要求的功能

数据成员是否满足数据封装的要求
  • 就是检查其数据成员是否能被外界(数据成员所属的类或子类以外的调用)直接调用。更直观的说,当改变数据成员的结构时,看其是否影响了类的对外接口是否会导致相应外界必须改动。
  • 值得注意,有时强制的类型转换会破坏数据的封装特性。
类是否实现了要求的功能
  • 类的功能都是通过类的成员函数实现的。在测试类的功能实现时,应该首先保证类成员函数执行的正确性。单独地看类的成员函数,与过程性程序中的函数或过程没有本质的区别,几乎所有传统的单元测试中使用的方法,都可在面向对象的单元测试中使用


面向对象测试的层次及特点

面向对象软件的测试一般分为三个层次:

  • 面向对象单元测试是进行面向对象集成测试的基础
  • 面向对象集成测试主要对系统内部的相互服务进行测试
  • 面向对象系统测试是基于面向对象集成测试的最后阶段的测试

面向对象的单元测试


面向对象的单元测试的对象是软件设计的最小单位——类。

单元测试的依据是详细设计,单元测试应对类中所有重要的属性和方法设计测试用例,以发现类内部的错误。我们不在孤立 地测试单个操作,而是将操作作为类的一部分。单元测试多采用白盒测试技术,系统内多个类可以并行进行测试

在设计测试用例时,可基于以下两个假设

  • 如果操作(成员函数)对某一类输入中的一个数据正确执行,对同类中的其他输入也能正确执行
  • 如果操作(成员函数)对某一复杂度的输入能够正确执行,则对更高复杂度的输入也应能正确执行

面向对象编程的特性使得对成员函数的测试,又不完全等同于传统的函数或过程测试。尤其是继承特性和多态特性,Brian Marick提出了两点:


1、继承的成员函数是否都不需要测试
对父类中已经测试过的成员函数,两种情况需要在子类中重新测试

  • 继承的成员函数在子类中做了改动
  • 成员函数调用了改动过的成员函数

例如:

  • 假设父类Base有两个成员函数:Inherited()、Redefined()
  • 若子类Derived对 Redefined()做了改动,Derived::Redefined()必需重新测试。
  • 如果Derived::Inherited()包含有调用Redefined()语句(如: x =x / Redefined()),也需要重亲测试;反之,则不必重新测试

对父类的测试用例不能照搬到子类

  • 根据以上的假设,Base::Redefined()和Derived::Redefined()是不同的成员函数,它们有不同的说明和实现。应该对Derived::Redefined()重新设计测试用例。
  • 由于面向对象的继承性,使得两个函数还是有相似之处,故只需在 Base::Redefined(的测试用例基础上添加对Derived::Redfined()的新测试用例

面向对象的集成测试

当一组对象类通过组合行为提供一组服务时,则需将它们一起测试,这就是簇测试。此时不存在自底向上和自顶向下的集成
面向对象程序相互调用的功能是散布在程序的不同类中,类通过消息相互作用申请和提供服务。类的行为与它的状态密切相关,状态不仅仅是体现在类数据成员的值,也许还包括其他类中的状态信息
对象集成测试又称交互测试,目的是确保对象的消息传递能够正确进行

面向对象系统的集成测试有3种可用的方法:

  • 用例或基于场景的测试:用例或场景描述了对系统的使用模式,测试可以根据场景描述和对象簇来制定。这种测试着眼于系统结构,首先测试几乎不使用服务器类的独立类,再测试那些使用了独立类的下一层次的(依赖)类,这样一层一层地持续下去,直到整个系统构造完成
  • 基于线程的测试:它把为响应某一系统输入或事件所需的一组对象类组装在一起,每一条线程将分别测试和组装。因为面向对象系统通常是事件驱动的,因此这是一个特别合适的测试形式
  • 对象交互测试:这个方法提出了集成测试的中间层概念。中间层给出叫做“方法—消息”路径的对象交互序列。所谓“原子系统功能”就是指一些输入事件加上一条“方法—消息”路径,终止于一个输出事件

面向对象的集成测试可以分成两步进行:

先进行静态测试,再进行动态测试

  • 静态测试:静态测试主要针对程序的结构进行,检测程序结构是否符合设计要求。现在流行的一些测试软件都提供了程序理解的功能,即通过源程序得到类关系图和函数功能调用关系图。通过这种方法检测OOP是否达到了设计要求
  • 动态测试:在设计测试用例时,通常需要上述的功能调用结构图、类关系图或者实体关系图为参考,确定不需要被重复测试的部分,从而优化测试用例,减少测试工作量,使得进行的测试能够达到一定覆盖标准

具体设计测试用例,可参考下列步骤

  • 先选定检测的类;参考OOD分析结果,仔细列出类的状态和相应的行为、类或成员函数间传递的消息、输入或输出的界定等
  • 确定覆盖标准
  • 利用结构关系图确定待测试类的所有关联
  • 根据程序中类的对象构造测试用例,确认使用什么输入激发类的状态、使用类的服务和期望产生什么行为等

注意:设计测试用例时,不但要设计确认类功能能够成功执行的输入,还应该有意识的设计一些会导致异常的输入,确认类是否有不合法的行为产生,如发送与类状态不相适应的消息,要求不相适应的服务等。根据具体情况,动态的集成测试,有时也可以通过系统测试完成

面向对象的系统测试

通过单元测试和集成测试,仅能保证软件开发的功能得以实现。但不能确认在实际运行时,它是否满足用户的需要,是否大量存在实际使用条件下会被诱发产生错误的隐患。为此,对完成开发的软件必须经过规范的系统测试

系统测试应该尽量搭建与用户实际使用环境相同的测试平台,应该保证被测系统的完整性。对没有的统设备部件,应有相应的模拟手段

具体测试内容包括

  • 功能测试、强度测试、性能测试、安全测试、恢复测试、可用性测试、安装/卸载测试

基于UML的面向对象软件测试

UML提供了一套描述软件系统模型的概念和图形表示方法,以及语言的扩展机制和对象约束语言,软件开发人员可以使用UML对复杂的面向对象软件系统建立可视化的模型,并通过增量式的不断细化直接控制从设计、编码、测试到文档编制的整个软件开发过程


在不同的测试阶段,根据不同的测试目的,必须选择不同的UML图,以下分析几种常用的UML图形的特点及其对软件测试的影响

类图

  • 类图:类图展现了一组对象、接口、写作和它们之间的关系。类图给出了系统的静态设计视图以及静态进程图,可以帮助测试者全面掌握系统中的类结构,这对类的测试有很大的帮助

用例图

  • 用例图:用例图展现了一组用例、参与者以及它们之间的关系。它给出了系统的静态用例视图。用例图往往是在一个较高的抽象层次上描述系统的行为和各个组件之间的关系,所以能够帮助测试者全面把握系统的运行情况,是集成测试和系统测试的重要参考工具

状态图

  • 状态图:状态图展现了一共状态机,它由状态、转换、事件和活动组成,是专注于系统的动态视图。由于状态图强调对象行为的事件顺序,因而它对于接口、类和协作的测试都有很重要的作用

序列图

  • 序列图:序列图是一种强调消息的时间顺序的交互图,主要用来设计和描述算法。从测试的角度来看,序列图中可能存在一些错误,其中包括约定的冲突、不能创建正确的对象、图中没有关系的发送者和接收者之间的消息传递等


面向对象的其他测试

基于故障的测试

  • 为了推测出软件中可能有的错误,应该仔细研究分析模型和设计模型,而且在很大程度上要依靠测试人员的经验和直觉。如果推测得比较准确。则使用基于故障的测试方法能够用相当低的工作量发现大量错误;反之,如果推测不准,则这种方法的效果并不比随机测试技术的效果好

基于脚本的测试

  • 基于脚本的测试主要关注用户需要做什么,而不是产品能做什么。即从用户任务中找出用户要做什么。这种基于脚本的测试有助于在一个单元测试情况下检查多重系统。所以基于脚本的测试比基于故障的测试更实际、更复杂

面向对象类的随机测试

  • 如果一个类有多个操作(功能),这些操作(功能)序列有多种排列,而这种不变化的操作序列可随机产生,像这种可能排列的序列来检查不同类实例的生存史,就是随机测试

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com