面向对象软件测试(共11篇)
面向对象软件测试 篇1
面向对象的方法在现在的软件开发的运用中是越来越广泛, 但是相应的测试方法并没有做出相应的改变, 仍然有很多使用的还是传统软件使用的测试方法, 出现这样的结果不是单方面的原因, 既有在采用面向对象方法开发软件的时候在设计和分析阶段保留的文档不够全面或者并没有按照面向对象的方法进行保存, 造成了在设计测试的时候不能够找到原始文档。还有可能就是现在并没有有效的方法是针对面向对象方法的。这样就会使得工作变得更加的复杂, 就会增加工作量。但是测试的结果也可能并不理想, 使得最后得到的软件并不能够达到用户的期望。因此, 如何使用面向对象的方法来测试软件是非常必要的。
1 面向对象测试与传统测试技术的异同
首先, 这两种技术的测试过程是相同的。都要对整个测试进行计划, 设计出测试用例, 运行测试用例, 根据结果进行测试分析, 最后是用户验收。其次, 这两种技术的测试目标也是相同的。测试的目的都是为了使得设计出来的软件能够达到期望的功能。再次, 测试也是为了用尽可能少的工作量测试出软件尽可能多的错误, 虽然在这三个方面这两种技术都是相同的, 但是在测试计划和设计测试用例的时候是有很大的区别的, 这主要是归结于面向对象软件和传统的软件的设计思路不同。传统的软件是由各个功能模块组成的, 那么在测试计划和设计测试用例的时候就要注意的就是这些功能模块之间的关系。他们之间的关系, 它们之间是调用的关系。而面向对象的软件, 它更加注重的是对象之间的相互交流。它们是通过对象来传递它们之间的消息。这也是在测试计划和设计测试用例的时候需要考虑的, 怎样的测试用例才能够更好使得软件的功能的优缺点体现出来。
2 面向对象测试的意义与现状
类是面向对象软件中最重要的概念, 也是面向对象程序的最基本的组成要素。传统的软件是面向过程的, 软件的推进必须是一个过程完结的输出作为下一个过程的输入, 必须这样按部就班的进行下去。计算机的功能就是模拟人的行为的。这样的一种软件的方法是不能达到前面讲的效果的。人是一种群体动物, 必须是在一个团体下才能够使得事情向更好的方向发展。也就是在团体的作用之下才能使资源更优, 而面向对象方法的出现就是应了这样的需求。类就是实现这种需求的最好方法, 它既可以是对象又可以是事件, 通过类之间的相互作用也达到了这种消息之间的传递。这是因为这种软件方法的改变也就造就了软件测试的改变, 传统的软件测试方法完全不能达到用小的工作量来测试软件的错误。针对软件方法面向对象的软件测试也就应运而生了。而面向对象测试是势在必然的。
3 面向对象测试
3.1 面向对象的测试模型
大家比较熟悉的软件开发模型就是瀑布模型, 它包括了需求分析, 设计, 实现和测试。面向对象的开发模型变为了面向对象分析 (OOA) 、面向对象设计 (OOD) 和面向对象编程 (OOP) 3个阶段。面向对象分析阶段需要做的就是将整个问题总结出来, 转换成计算机能够识别的语言, 那么在这个阶段就需要选择使用什么样的编程语言。在面向对象设计阶段则需要的是选择什么样的类结构, 也就是需要些什么类, 这些类能够完成些什么工作。最后的面向对象编程阶段, 用选定的编程语言来实现设计出来的类结构。这种方法有个很大的优点就是在用户需求发生变化的时候, 能够不改变原有程序。测试模型如图1所示:
从上面的图中可以看出, 对面向对象开发模型的各个阶段都进行了测试的, 对面向对象分析的测试和面向对象设计的测试是非常必要的。如果把软件的前期工作做好了, 那么后续的工作进行的才有意义, 进行完了面向对象编程测试以后, 还有三个非常重要的测试, 就是面向对象单元测试, 面向对象集成测试和面向对象系统测试。其中面向对象单元测试和面向对象集成测试是两个工作量比较大的地方。而最后的面向对象系统测试就是要参考前面两个阶段测试结果了, 主要是以用户的需求为主的。六个阶段的测试是相辅相成的, 但是在每个阶段又有不同, 它们采用的方法也会不尽相同。下面就分别介绍单元测试, 集成测试和系统测试。
3.2 面向对象的单元测试
3.2.1 基础类测试
什么是基础类, 就是我们在面向对象设计时, 设计的类, 这些类可能是些对象, 也可能是些事件, 这里并不包括那些需要继承的类, 就是一些独立的类, 没有任何的消息传递。软件的测试就是要构造测试用例, 构造的这些测试用例必须满足两个条件:前置条件和后置条件。所谓前置条件就是发生这些测试用例要满足什么样的条件, 后置条件就是使用了这些测试用例会产生什么样的后果。测试用例既要满足前置条件又要满足后置条件。在设计测试用例的时候需要根据状态转换图, 因为状态转换图中的节点代表的是状态, 而节点与节点之间的连线则表示的是一个动作, 而测试用例就是需要了解如何促使这些动作发生。满足这些动作的发生应该是在一定的范围进行的, 那么对于临界值的设计是至关重要的, 在选择测试用例的时候临界值是非常好的一个标志。设计好了测试用例需要的是怎样来使它运行, 那么就还需要一个测试用例驱动程序。测试用例驱动程序主要的工作就是运行测试用例和得到运行结果。目前用的最多的测试驱动程序是Tester类。Tester类是抽象的概念, 使用这个类的最大好处就是能够为所有的测试人员提供默认的实现。测试人员可能会有如下的操作:运行其他所有类的测试驱动程序的公共函数, 记录下这些测试用例的结果, 必须运行所有要测试的类的测试用例, 检查所有类的所有常量。具体的Tester类主要负责实现测试用例的方法, 并将它们作为测试系列不可缺少的一部分来运行。
3.2.2 交互对象测试
面向对象的程序顾名思义就是由很多的对象构成的, 这些对象相互作用来解决某类问题的。程序中的这些对象有条不紊的相互工作这是这个程序成功的关键。完成了上面提到的单元类的测试, 那么交互对象测试则是为了这些单元类之间的消息传递能够正常的进行。交互测试有两种方法:一种是把设计的测试用例嵌入到程序的交互对象中去, 另一种方法则是用上面提到的Tester类提供的测试环境, 在这个环境下使得对象之间相互作用。这种测试的前提条件就是发送对象能不能够满足接受对象的要求。单位类测试的时候采用了临界值的方法, 这里是一些动作的发发生, 临界值的方法不并不适用。如果采用穷举的方法, 那么工作量将会变得很大, 也有可能出现无穷的情况, 交互对象的测试采用的是正交阵列的方法, 这种方法就是从影响交互对象的所有因素中选出那些对所有交互对象都有影响的子集中来确定测试用例。
如何选出这个子集是正交阵列提供的一种特殊方法, 该方法首先要设计出交互对象配对的方法, 选择的组合方式必须要限制组合数量的急剧递增。正交阵列就如下表1所示是一个数值矩阵。表中的每一行都是一个变量, 这个变量在测试的软件中就是表示的那些具有相同特性的类群。变量则会有一定的取值, 每一个取值则代表了某一个特定的类。把每个变量的所有取值都列举出来就成为了一个矩阵, 也列举出了所有可能的情况。
3.2.3 层次结构类测试
面向对象程序有一个很重要的特征就是继承, 继承的好处可以减少工作量, 不会使得工作变得冗余, 大大的提高程序的性能, 这是因为这些特点也使得继承具有一定的缺点, 那就是错误的传播率提高。继承是面向对象软件新出的概念, 那么在测试的时候对这一部分怎样设计测试用例是新的问题。如果对某个类的父类已经做了完整的测试, 那么对它的子类如何进行测试呢, 为了达到测试的目标就是用尽可能少的工作量来完成测试, 那么就需要复制对父类的某些测试部分, 又因为子类不仅仅继承了父类还有自己一些新的动作或者规范, 因此除去复制的部分再添加一些对新的动作或规范起作用的测试部分即可。这样就会大大的提供工作效率。
3.3 面向对象的集成测试
面向对象的集成测试即涉及到面向对象的结构集成又涉及到面向对象的功能集成。要实现结构和功能的集成则会有类之间的关联、聚合、多态、继承。那么在测试的时候可以分成以下几种情况:
1) 关联和聚合关系的测试:将所有具有关联和聚合关系的类放到一起, 这里不需要涉及新的测试用例, 只需要找到这些类中哪个类是最开始发出动作的, 最先发出动作类的测试用例作为这种关系的测试用例, 应用驱动程序来运行这个测试用例, 观察类之间的消息传递情况。
2) 继承关系的测试:在前面的层次结构类中提到了继承关系的测试, 参照前面的方法即可。
3) 多态/动态绑定的测试:面向对象中的多态增加了程序的运行路径的多样性, 那么在设计测试用例的时候就要考虑到这个因素, 由于运行的轨迹不同那么测试用例的设计可能就会出现变化。那么测试用例的数量就会发生变化, 应该包括所有的执行路径。
3.4 面向对象的系统测试
面向对象的系统测试和传统的系统测试是一样的, 都是为了验证设计出来的软件有没有达到用户的需求, 在满足了用户需求的前提下再考虑软件的性能是不是满足了最开始面向对象分析时提出的要求。系统测试的时候可以采用传统的系统测试的方法, 但是在设计测试用例的时候还是会有不同的, 测试用例的设计还是需要考虑从对象入手。
4 总结
通过对面向对象测试过程方法的分析, 根据本文中的图1就可以了解到测试并不是和开发过程分开的, 它们之间是密不可分的。在整个开发过程要随时都做到随时测试, 这样做的好处就是能够尽早的发现问题, 这样就会及时作出修改。该文中提到了很多解决不同阶段的测试方法, 但是这些都是在理论层次的探讨, 在实施的过程中仍然会遇到这样或那样的问题, 因此后面的研究就着重在如何使理论和实际达到高度的统一。
摘要:软件的测试时软件开发的重要部分, 是保证软件质量提高软件性能的关键。面向对象的软件测试具有它自己的特点, 需要与传统的软件测试相区别, 因此面向对象的软件测试则被分成不同的阶段, 本文将面向对象软件测试层次划分为六个个层次, 主要介绍了面向对象软件测试的以下三个层次:类测试、集成测试和系统测试。
关键词:面向对象,单元测试,集成测试,系统测试
参考文献
[1]武海丽.面向对象的软件测试[J].中国高新技术企业, 2008 (12) .
[2]李伟龙.面向对象的软件测试[J].科技资讯, 2008 (26) .
[3]刘维光.面向对象软件测试的方法研究[J].电脑知识与技术, 2006 (29) .
[4]刘颖, 姜永涛.面向对象软件测试技术与方法的管理[J].信息技术, 2005 (6) .
面向对象软件测试 篇2
面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。面向对象方法学具有下述4个要点。
(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象由比较简单的对象组合而成。
(2)把所有对象都划分成类(class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。
(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。
(4)对象彼此间仅能通过发送消息互相联系。
也就是说,对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是通常所说的封装性。
2. 面向对象方法学的优点是:(1)与人类习惯的思维方法一致(2)稳定性好(3)可重用性好
(4)较易开发大型软件产品(5)可维护性好
3. 对象的概念,对象的特点?
对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以惟一地标识它的名字,而且向外界提供一组服务(即公有的操作)。特点:
① 以数据为中心。不设置与数据无关的操作;
② Object主动处理而不被动地等待被处理,外部只能通过message请求操作;
③ 实现了数据封装。具有黑盒性:外部操作时,无须知道该object内部的数据结构及算法; ④ 具有并行性:不同object各自独立地处理自身数据,彼此间仅通过传递message完成通信;
⑤ 模块独立性好:内聚强(①)、耦合松(③ ④)
4. 类、实例、消息、方法、属性、封装、继承、多态性、重载的定义。
类:是对具有相同数据和相同操作的一组相似对象的定义。
实例:是由某个特定的类所描述的一个具体的对象。
消息:是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。
方法:是对象所能执行的操作,也就是类中所定义的服务。
属性:是类中所定义的数据。
5. 模型的概念,面向对象建模的概念。要建立哪些模型?
所谓模型,就是为了理解事物而对事物做出的一种抽象,是对事物一种无歧义的书面描述。建立三种模型:
① 描述系统数据结构的对象模型(object model).② 描述系统控制结构的动态模型(dynamic model).③ 描述系统功能的功能模型(function model).6. 对象模型是表示静态的、结构化的系统的数据性质。类图是描述类及类与类之间的静态关系。包括定义类、定义属性、定义服务。7. 表示关系的符号:类与类之间通常有关联(Association)、泛化(Generalization)、聚合(Aggregation)、组合(Composition)、依赖(Dependency)等关系。
8. 动态模型表示瞬时的、行为化的系统的“控制”性质,它规定了对象模型中的对象的合法变化序列
关联 泛化 聚合 组合 依赖
9.Association
Generalization
Aggregation
Composition
Dependency
动态模型三要素:
① 事件(event):引发 object 状态改变的控制信息(瞬时)。② 状态(status):即 object 的 attributes 所处的情形(可持续)。③ 行为(action): Object 要达到某种 status 所做的操作(耗时)。10.功能模型表示变化的系统的“功能”性质,它指明了系统应该“做什么”,因此更直接地反映了用户对目标系统的需求。功能模型由一组数据流图组成。
在面向对象方法学中,数据流图远不如在结构分析、设计方法中那样重要。11.UML提供的用例图也是进行需求分析和建立功能模型的强有力工具。在UML中把用用例图建立起来的系统模型称为用例模型。
面向对象的软件开发方法分析 篇3
【关键词】面向对象 软件开发方法 问题 分析
相比传统的软件开发方法,面向对象的软件开发方法(OMT)实现了质的飞跃,采用了一种自底向上的归纳、自顶向下的分解方法,通过对对象建模的建立,彻底解决了软件开发在需求分析、可维护性以及可靠性三大环节上的问题,同时也大大提高和改善了系统的可维护性。可见,面向对象的软件开发方法,作为一种归纳和演绎思想的综合体现,其对软件设计、软件开发所起的促进作用是毋庸置疑的。
一、传统软件开发方法存在的问题
(一)软件复用性差
在软件开发工程所追求的目标当中,软件复用性是重点之一,同时也是节约人力和提升软件生产率的重要渠道。虽然近年来软件当中的结构化分析、结构化设计和结构化程序开发给软件产业带来了巨大的进步,但是还不足以从根源上解决软件重复使用的问题。
(二)软件可维护性差
传统的软件开发方法过于侧重一致、完整的文件合成最终的产品,以致在整个开发过程中,软件的可测试性、可读性和可修改性成了衡量一个软件产品优劣的重要标准。事实上,在软件的实际应用中,我们可以发现这类产品的维护性差,且所消耗的成本相当高。
(三)开发出的软件不能满足用户需要
传统的结构化方法所涉及的知识领域比较广泛,以致使用它开发大型软件时,一旦遇到系統需求模糊或者系统发生动态变化,就会影响开发效率,导致最终开发出来的软件脱离用户实际需求。
(四)软件质量难以保证
传统的软件开发方法所开发出来的复杂型大型软件,或者是需求模糊的系统,绝大多数都是难以成功投入市场使用的。归其原因,主要有以下两大因素:第一,软件开发人员对用户的实际需求理解不够透彻,以致最后开发出来的软件和用户的期待不相符;第二,所开发出来的软件灵活性低,无法适应用户需求的经常性变化,再加上部分用户有时会在软件的一些使用性能方面提出部分要求,倘若系统的设计和开发是基于过程中,那么软件系统的可扩充性和稳定性就会无法适应变化,而这种变化也会对软件系统自身的机构造成影响,设计、开发的成本也会随之提高。
二、面向对象的软件开发方法
现阶段,面向对象的软件开发方法的研究已经日趋成熟,市场上也不断有新产品涌现。面向对象的软件开发方法有Coad方法、Booch方法和OMT方法等。
(一)Booch方法
Booch方法的最突出特点就是它能够反映出系统的各个方面是如何相互联系和作用的。在一系列的面向对象的软件开发方法中,Booch方法是最早描述当中的基础问题的,其首先提出面向对象是区别于传统软件开发的一种方法。Booch方法认为面向对象的软件分解更接近人们对客观事物的认知,它并没有对各个开发阶段进行明确的周期划分,把主要的工作都集中在软件设计阶段。
(二)Coad方法
Coad方法是通过多年来大型系统开发的经验与面向对象概念的有机结合,该方法在对象、结构、属性和操作的认定方面,提出了一套系统化的原则,并完成了从客户需求角度进一步进行类和类层次结构的认定。Coad方法把软件系统的开发划分为分析和设计两个阶段,虽然说Coad方法没有引入类和类层次结构的术语,但事实上它已经在分类结构、消息关联等概念中呈现了类和类层次结构的特征。从某种程度上来说,Coad方法的概念虽然简单易懂,但是它对各个面向对象和行为的描述不够全面,对象模型的语言表达能力也不突出。
(三)OMT方法
OMT方法是一种跟随OOP向OOD和OOA发展而形成的面向对象的软件开发方法,它的方法涵盖了软件分析、软件设计以及软件实现三大步骤,贯穿于软件开发的全程。OMT还建立了对象模型、动态模型和功能模型三个模型,这三个模型在一定程度上完善了软件,使软件开发更加清晰,也更易于维护。可以说,作为一种以真实世界为对象建模而进行的独立语言设计,OMT方法彻底实现了传统软件开发方法没有完全实现的目标,为绝大多数领域的应用软件提供了一种实际的、高效的、可操作的保证。
(四)UML语言
UML语言是一种建模语言,它是软件工程领域的重要成果之一,在未来,UML语言将会成为面向对象技术领域内的标准建模语言。UML不仅结合了Booch方法、OMT方法、OOSE方法的优势,而且还对其做了进一步的发展,汲取了面向对象技术领域中的其他流派优秀的开发思想,融入了软件工程领域的新思想、新方法、新技术。总而言之,UML是一种通用的标准建模语言,适用于以面向对象技术为基础的任何类型的软件系统,而且还能够在系统开发的不同阶段使用,从需求规格描述直至系统完成后的测试和维护。
综上所述,由于面向对象的软件开发方法所具备的诸多优点,相信面向对象的软件开发方法在未来会有更广阔的前景。可见,开展面向对象的软件开发方法的研究工作,也有着十分重要的现实意义。
【参考文献】
[1]唐黎黎.面向对象的软件工程应用研究[J].现代商贸工业,2010(22).
面向对象软件测试简述 篇4
当今软件开发的主流技术还是面向对象的软件开发技术,面向对象技术所独有的多态,继承,封装等新特点,产生了传统语言设计所不存在的错误可能性。比如类的封装机制就给软件测试带来了困难,它把数据和操作数据的方法封装在一起,限制对象属性对外的可见性和外界对它的操作权限,从而有效地避免了类中有关实现细节的信息被错误地使用,而这样的细节性信息正是软件测试所不可忽略的。
2 测试必要性
由于面向对象的软件系统在运行时由一组协调工作的对象组成,对象具有一定的状态,所以对而向对象的程序测试来说,对象的状态是必须考虑的因素,对象的状态可能被修改,产生新的状态。面向对象软件测试的基本工作就是创建对象(包括初始化)、向对象发送一系列消息,然后检杳结果对象的状态,看其是否处于正确的状态。但是,对象的状态往往是隐蔽的,若类中未提供足够的存取函数来表明对象的实现方式和内部状态,则测试者必须增加这样的函数。继承性是面向对象程序的最重要的特点,很好的实现了代码重用,子类不仅一可以继承父类中的数据和方法,还可以对继承的东西进行重定义;然而,这也给软件测试带来了改变,因为即使是彻底复用的,对每个新的使用语境也需要重新测试。比如我们在子类中重定义了某一继承的方法,即使两个函数完成相同的功能,对重定义的方法也要重新测试,所以,继承不仅不能简化测试问题,反而使测试更加复杂。多态性和动态绑定是面向对象方法的关键特性之一,多态就是同一消息可以根据发送消息对象的不同而采用多种不同的行为方式,如依据引用的对象类型来决定使用哪一个方法,但这种灵活性给测试带来了新的问题,比如静态分析的难度就增大了很多。
所以有必要对面向对象软件测试进行研究,面向对象软件测试的整体目标和传统软件测试的目标是一致的,其动态测试过程也与传统软件的测试一样,但是由于面向对象测试本身所具有的封装性、继承性、多态性,要充分地测试面向对象系统就必须扩大测试的视角,从面向对象分析和面向对象设计的模型开始测试,而且传统的单元和集成测试策略必须有很大的改变。面向对象测试模型(Object-Orient Test Model)如图1所示。
面向对象软件的开发是从分析和设计模型的创建开始的。模型从对系统需求相对作正式的表示开始,逐步演化为详细的类模型、类连结和关系、系统设计和分配以及对象设计在每个阶段测试模型,以尽早地发现错误和防止错误的传播,面向对象分析和设计模型的复审是非常有用的。面向对象分析的测试(OOA Test)包括对认定的对象的测试,对认定的结构的测试,对认定的主题的测试,对定义的属性和实例关联的测试,对定义的服务和消息关联的测试等内容,面向对象设计的测试(OOD Test)测试的内容包括对认定的类的测试,对构造的类层次结构的测试,对类库的支持的测试对认定的类的测试。面向对象编程的测试(OOP Test)主要是类测试,测试主要是测试数据成员是否满足数据封装的要求还有类是否实现了要求的功能。
3 测试内容
传统的软件测试分为单元测试、集成测试和系统测试三个阶段,对于面向对象的软件测试,一般分为3个级别:
3.1 类测试(面向对象的单元测试)
面向对象软件从宏观上看是类与类之间的相互作用。在面向对象系统中,系统的基本构造模块是封装了的数据和方法的类和对象,而不再是一个个能完成特定功能的功能模块,面向对象软件的类测试与传统软件的单元测试相对应,但和传统的单元测试不一样,类测试实际测试类成员函数。一些传统的测试方法在面向对象的单元测试中都可以使用。如等价类划分法,因果图法,边值分析法,逻辑覆盖法,路径分析法,程序插装法等等,但类测试时不能孤立地测试单个函数,同时要把对象与其状态结合起来,进行对象行为的测试,类的测试按顺序分为基于服务的测试,测试类中的每一个方法,基于状态测试,考察类的实例再起生命周期各个状态下的悄况。还有基于响应状态的测试。从类和对象的责任出发,以外界向对象发送特定的消息序列的方法,来测试对象各个相应状态。
3.2 簇测试(面向对象的集成测试)
传统的集成测试,是由底向上通过集成完成的功能模块进行测试,一般可以在部分程序编译完成的情况下进行。而对于面向对象程序,相互调用的功能是散布在程序的不同类中,类通过消息相互作用中请和提供服务。类的行为与它的状态密切相关,状态不仅仅是体现在类数据成员的值,也许还包括其他类中的状态信息。由此可见,类相互依赖极其紧密,根本无法在编译不完全的程序上对类进行测试。所以,而向对象的集成测试通常需要在整个程序编译完成后进行。对面向对象软件的集成测试有两种不同策略,一种是基于线程的测试,继承与组相互协作,以对某事件做出回应的类测试,每个线程被集成并分别测试,应用回归测试以保证没有产生副作用。另一种是基于使用的测试通过测试那些不使用服务器类的类级独立类,而后开始构造系统,在独立类测试完成后,下一层使用独立类的类级依赖于类测试,依赖于类层的测试序列一直持续到构造完整个系统.具体生成测试用例的参考步骤如下:
1)先选定检测的类,参考OOD分析结果,列出类的状态和相应的行为,类或成员函数问传递的消息,输人或输出的界定等。
2)确定覆盖标准。
3)利用结构关系图确定待测类的所有关联。
4)根据程序中类的对象构造测试用例,确认使用什么输人激发类的状态、使用类的服务和期望产生什么行为等。
值得注意,设计测试用例时,不但要设计确认类功能满足的输人,还应该有意识的设计一些被禁止的例子,确认类是否有不合法的行为产生,如发送与类状态不相适应的消息,要求不相适应的服务等。根据具体情况,动态的集成测试,有时也可以通过系统测试完成。
3.3 面向对象的系统测试
通过单元测试和集成测试,仅能保证软件开发的功能得以实现,但不能确认在实际运行时,它是否满足用户的需要,是否大量存在实际使用条件下会被诱发产生错误的隐患。为此,对完成开发的软件必须经过规范的系统测试。系统测试时,对所有类和主程序构成的整个个系统进行的整体测试,验证软件系统的正确性和性能指标等,满足需求规格和任务的要求,它与传统的软件测试一样,包括功能测试、性能测试、余量测试等,系统测试不仅是检测软件的整体行为表现,从另一个侧面看,也是对软件开发设计的再确认。这里说的系统测试,是对测试步骤的抽象描述。
4 结束语
目前面向对象软件开发已经成为主流的软件开发技术,本文浅谈了面向对象软件测试的必要性,内容及方法。软件测试是软件开发过程中的一项重要的内容。
摘要:软件测试是软件开发的一个重要过程,保证了软件的质量;提高了软件产品可靠性。阐述了面向对象软件开发过程中,面向对象软件测试的必要性。介绍了面向对象软件测试的内容及方法。
关键词:软件,面向对象,软件测试
参考文献
[1]McGregor J D,Sykes D A.面向对象的软件测试[M].北京:机械工业出版社,2003.
[2]宋雪芬,王冠军,宋雪玲.面向对象软件测试方法研究[J].治金自动化,2004,28(z1).
浅谈面向对象编程思想 篇5
关键词:面向对象;继承;封装;多态
中图分类号:TP311.56文献标识码:A文章编号:1007-9599 (2011) 07-0000-01
Thought of Object-oriented Programming
Liu Jian,Sun Zheng,Hu Guoyu
(Nanjing University of Posts and Telecommunications,Nanjing210046,China)
Abstract:The class is an abstract thing with the same attribute,the object is a specific class of things,it has real property values.Object-oriented principle is the starting point and basic human habits as analog way of thinking,so it is easy to understand,logically,be accepted and recognized by the majority of IT practitioners.
Keywords:Object-oriented;Inheritance;Package;Polymorphism
说到面向对象就不得不提到面向过程。它出现在面向对象之前,是一种以过程为中心的编程思想。就是分析出解决问题所需要的步骤,然后采用分支循环用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。首先必须承认面向过程可以解决所有的编程问题,但是也存在着重用性差、可维护性差、开发过程复杂等缺点。面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是软件开发方法的主流。下文这种对面向对象的编程模式进行探讨。
一、首先介绍面向对象的基本概念
(一)对象。对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
(二)对象的状态和行为。对象具有状态,一个对象用数据值来描述它的状态。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中。
(三)类。具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
(四)消息和方法。对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时,消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。
二、其次看看面向对象的特点
(一)封装。封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
(二)继承。面向对象编程(OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。继承概念的实现方式有三类:实现继承、接口继承和可视继承。
(三)多态。多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
实现多态,有二种方式,覆盖,重载。
覆盖,是指子类重新定义父类的虚函数的做法。
重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。
现在看看如何用面向对象的方法来解决这个问题。
建立学生实体类StudentTo其中包括如下属性
//姓名、年龄、性别、身高、学号
private String name;
private int age;
private String sex;
private String height;
private String studentID;
并提供get、set方法,有参、无参构造
在录入方法中实例化学生类对象为student,将姓名、年龄、性别、身高、学号等的属性值赋值给student,并将student传递给老师
StudentTo student=new StudentTo();
student.setName("李辉");
student.setAge(18);
student.setHeight("1.8m");
student.setSex("男");
student.setStudentID("NO.009");
老师接到传递过来的student后将学号改正后提交政教处保存
public void check(StudentTo student){
student.setStudentID("NO.010");}
政教处对学生接受到正确的学生对象后,可以从学生对象中取出姓名、年龄、性别、身高和学号备份留档。这样完整的面向对象解决问题的过程就结束了,从整个流程可以看到我们操作的一直是个实例化的对象,符合逻辑思维,减少了传递的参数,减小了出错的可能性,提升了编程的效率。
综上可以看出,面向对象操作符合人们思维习惯,它对类归纳总结,将类的成员放入对象中,大大减少了参数的传递和出错的可能。面向对象的继承、封装、多态特性也符合思维逻辑,在编程理解方面优势明显。随着时间的推移,近年来人们提出了更为先进的面向服务的概念,但是即使是面向服务也有大量面向对象的思想和影子。可以说面向对象思想直接影响了MVC编程模式,影响了人们的编程逻辑,对计算机语言的贡献无可替代。
参考文献:
[1]马光毅.面向对象方法研究[J].华南师范大学学报
面向对象测试技术研究 篇6
“程序测试是为了发现错误而执行程序的过程”[1]。软件测试是使用人工或自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别[2]。随着开发技术的进步,相对于传统的面向过程的软件开发技术,面向对象技术使得软件产品具有高质量、稳定性好、可重用行好和可维护性好等优点。然而,由于面向对象技术的多态、继承、封装等特性,不再是传统的功能模块结构,原有集成测试方法已成为不可能,使得传统的软件测试方法不能适应具有新特性的面向对象软件的测试。同时,面向对象技术开发的软件的代码重用率高,需要更加严格的软件测试来避免错误的繁衍。由此看来,面向对象的程序设计并没有降低软件测试的难度,相反使软件的测试变得更加复杂。面向对象开发使用的不是传统的开发模式,每个开发阶段有不同的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因此,传统的测试模型对面向对象软件已经不再适用,应对面向对象的开发技术,需要提出新的测试策略和方法来支持面向对象的软件测试。
1 面向对象测试
面向对象测试的整体目标和传统软件测试的目标是一致的——以最小的工作量发现最多的错误。但是面向对象测试的策略和战术有很大不同,由于面向对象的特点是封装、继承和多态,测试的视角扩大到包括复审分析和设计模型,测试的焦点从过程构件转向了类。
1.1 面向对象测试模型
面向对象的开发模型突破了传统的瀑布模型,将开发分为面向对象分析(OOA),面向对象设计(OOD)和面向对象编程(OOP)三个阶段。针对这种开发模型,面向对象的软件测试可分为:面向对象分析的测试,面向对象设计的测试,面向对象编程的测试,面向对象单元测试,面向对象集成测试,面向对象系统测试[3]。
1.2 面向对象分析的测试
面向对象分析(OOA)是“把E-R图和语义网络模型,即信息造型中的概念,与面向对象程序设计语言中的重要概念结合在一起而形成的分析方法”,最后通常是得到问题空间的图表的形式描述。
OOA直接映射问题空间,全面地将问题空间中实现功能的现实抽象化,测试重点在其完整性和冗余性,OOA的结果是为后面阶段类的选定和实现,类层次结构的组织和实现提供平台。因此,对OOA的测试,应从以下方面考虑:
(1)对认定的对象的测试
(2)对认定的结构的测试
(3)对认定的主题的测试
(4)对定义的属性和实例关联的测试
(5)对定义的服务和消息关联的测试
1.3 面向对象设计的测试
面向对象设计(OOD)采用“造型的观点”,以OOA为基础归纳出类,并建立类结构或进一步构造成类库,实现分析结果对问题空间的抽象。OOD是OOA的进一步细化和更高层的抽象。OOD确定类和类结构不仅是满足当前需求分析的要求,更重要的是通过重新组合或加以适当的补充,能方便实现功能的重用和扩增,以不断适应用户的要求。因此,对OOD的测试,应从如下三方面考虑:
(1)对认定的类的测试
(2)对构造的类层次结构的测试
(3)对类库的支持的测试
1.4 面向对象编程的测试
面向对象程序具有继承、封装和多态的新特性,这使得传统的测试策略必须改变。封装是对数据的隐藏,外界只能通过被提供的操作来访问或修改数据,这样降低了数据被任意修改和读写的可能性,降低了传统程序中对数据非法操作的测试。继承是面向对象程序的重要特点,继承使得代码的重用率提高,同时也使错误传播的概率提高。多态使得面向对象程序对外呈现出强大的处理能力,但同时却使得程序内“同一”函数的行为复杂化,测试时不得不考虑不同类型具体执行的代码和产生的行为。
2 面向对象测试实现
面向对象软件的最小的可测试单位是封装的类或对象,类包含一组不同的操作,并且某特殊操作可能作为一组不同类的一部分存在。面向对象的软件测试分为包括方法级测试、类级测试、类簇级测试和系统级测试。其中,类级测试是测试面向对象软件的关键。
2.1 示例
如图2所示类的层次结构中,基类是一个抽象类Shape,Line和Quadrangle是从Shape派生而来,并使用Point来定义其定点。其中,Quadrangle还派生了三个类:Square、Rectangle和Other。类的设计如图2所示。
Point:表示二维平面上的一个点(x,y坐标)。
Shape:表示二维平面上的基本形状,是一个抽象类,作为其余各类的基类,Point除外,并提供平面上计算长度和面积的抽象方法,提供实现不同形状的对象之间转换的方法ChangeTo()和RollBack()。
Line:表示线段,从Shape类派生而来,通过两个Point对象来定义,表示线段的两个顶点,并具体实现了所有抽象方法。
Quadrangle:表示四边形,从Shape派生而来,通过四个Point对象来定义其四个顶点,并实现了所有抽象方法。
Square:表示正方形,从Quadrangle派生而来。
Rectangle:表示长方形,从Quadrangle派生而来。
2.2 测试用例的设计
给定平面上的四个点p1(1,1), p2(3,0), p3(4,4), p4(4,1),通过Line(p1,p2), Line(p2,p3), Line(p3,p4), Line(p1,p4),由输入的四个点可以输出一个四边形:
(1)由RollBack(p2,p3)将去掉点p2,p3,四边形转换为由点p1和p4组成的线段。
(2)重置p2,p3的坐标为p2(8,1),p3(8,4),由ChangeTo(p2,p3)将p2,p3加入,正确输出是由p1,p2,p3,p4组成的长方形;若p2(4,1),p3(4,4),则由ChangeTo(p2,p3)将输出由p1,p2,p3,p4组成的正方形。
(3)置p2.x=2,p2.y=2,p1,p2,p3三点将变为特殊的共线关系,p2位于线段p1p3的线段上,四点无法组成四边形。
(4)置p2.x=1.5,四点无法组成凸四边形。
全面的测试用例设计可以采用以下策略[4]:
第一,根据方法特性将被测类的方法划分为构造函数、功能函数和接口函数。
第二,对于构造函数,列出所有前置条件和后置条件的组合,根据不同的组合设计测试用例。
第三,对于功能函数而言,对所有公有方法列出前置条件和后置条件,根据各种有意义的组合设计测试用例;对所有受保护的方法,严格区分有访问权限和无访问权限的前置条件和后置条件设计测试用例;对所有私有方法,根据实际情况选用合适的策略进行测试。
第四,对于接口函数,应绘制类的状态转换图,根据该图设计测试用例,覆盖到每种类的状态和状态的转换。
实际测试中,以上的情况都应结合多种基本的测试方法来选择测试数据。
3 结束语
面对面向对象技术开发出来的程序具有更好的结构更规范的编程风格,极大地优化了数据使用的安全性,提高了代码的重用率。同时,也影响了软件测试的方法和内容,增加了传统软件设计技术所不存在的错误,增加了软件测试的难度。面向对象测试技术能解决传统测试方法的不足,同时,更高效、快速、全面的测试技术以及自动化测试是面向对象测试技术所需解决的,以适应要求更高、功能更强大的软件系统。
参考文献
[1]Myers Glenford J,Badgett Tom,Thomas Todd M,et al.The Art ofSoftware Testing[Z].John Wiley&Sons Inc.2005.
[2]路晓丽,葛玮,龚晓庆,等.软件测试技术[M].北京:机械工业出版社,2007.
[3]柳纯录.软件评测师教程[M].北京:清华大学出版社,2005.
面向对象的软件测试方法研究 篇7
信息技术的飞速发展,使软件产品应用到各个领域,其质量优劣问题成为开发者和使用者共同关注的焦点。质量不佳的软件不仅会导致后期高昂的维护费用,还可能造成灾难性后果。要实现高质量、高可靠的软件,特别是保证安全关键系统(如银行结算系统、自动飞行控制软件、军事防御和核电站安全控制系统等)的正常运行,一方面依赖于软件开发技术与过程的改进,另一方面则需要全面的程序分析、代码检查和充分的测试等途径去主动地发现潜伏在软件中的缺陷。正如任何生产过程都离不开产品检验一样,软件测试工作是软件开发中必不可少的一步,在软件的整个开发过程中占有非常重要的地位,是保证软件质量、提高软件可靠性的关键[1]。大量的统计资料表明,软件测试阶段投入的成本和工作量往往要占软件开发总成本和总工作量的30%~50%甚至更多。软件测试是对软件功能、设计和实现的最终审定,是发现软件故障、保证软件质量、提高软件可靠性的主要手段。通过对软件进行测试能在一定程度上保证其在应用环境中正常运行。
传统的测试计算机软件的策略是从单元测试开始,然后逐步进入集成测试,最后是有效性和系统测试。近年来,随着新的软件开发技术如面向对象技术、软件重用技术的不断普及,以及网络和Internet的广泛发展,软件测试技术遇到了新的挑战。目前,针对新软件开发技术开展的软件测试技术研究已成为软件测试技术领域内的研究热点。例如近年来,随着面向对象范型在研究界和工业界的广泛应用,面向对象的软件测试技术越来越受到人们的重视。面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成测试所要求的逐步将开发的模块搭建在一起进行测试的方法已不可能。而且,面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同以往的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因此,传统的测试模型对面向对象软件已经不再适用。
1 传统的软件测试
软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
1.1 软件测试方法的分类
结构化分析设计方法是最早形成的软件系统化开发方法,被称之为传统软件开发方法。其侧重于功能分解、自顶向下逐步细化、模块化的设计。相应的对于传统的软件的测试方法亦侧重于功能测试,模块测试。从是否需要执行被测软件的角度软件测试可分为静态测试和动态测试;从是否针对系统的内部结构和具体实现算法的角度动态测试又分为黑盒测试和白盒测试。
1.1.1 静态测试
静态测试的基本特征是在对软件进行分析、检查和测试时不实际运行被测试的程序。它可以用于对各种软件文档进行测试,是软件开发中十分有效的质量控制方法之一[2]。静态测试在主机上完成,不需目标系统支持,测试的主要内容有编程标准验证、数据流分析技术、质量度量信息、代码结构可视化显示、测试外壳的创建。经验表明,使用这种方法能够有效地发现30%~70%的逻辑设计和编码错误。
1.1.2 动态测试
动态测试是使被测代码在相对真实环境下运行,从多角度观察程序运行时能体现的功能、逻辑、行为、
结构等行为,以发现其中的错误现象。在测试过程中,根据产生测试数据的来源,动态测试可分成以下2种测试方法:
1.1.2.1 黑盒测试
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能情况下,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息并且保持外部信息(如:数据库或文件)的完整性。黑盒法着眼于程序外部结构,不考虑内部逻辑结构,只针对软件界面和软件功能进行测试,它主要用于软件验收测试。黑盒法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。测试情况实际上有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。
1.1.2.2 白盒测试
白盒测试也称结构测试或逻辑驱动测试,它是一种按照程序内部的逻辑结构和编码结构设计并执行,测试用例的测试方法。测试人员对软件的逻辑路径进行测试,将程序视为一个透明的箱子,即需要了解程序的内部构造和处理过程,并且根据其内部构造设计测试用例。这时测试人员可以完全不顾程序的功能,通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作。
1.1.2.3 两种测试比较
这两类动态测试方法是从完全不同的起点出发,并且是两个完全对立的出发点,可以说反映了事物的两个极端。两类方法各有侧重,在测试的实践中都是有效和实用的。一般地说,在进行单元测试时大都采用白盒测试,因为外部特性本身有问题或规格说明的规定有误,用黑盒测试方法是发现不了的;而在确认测试或系统测试中大都采用黑盒测试,因为白盒测试无法发现程序逻辑中的错误和遗漏。黑盒测试与白盒测试各有自己的优缺点,构成互补关系,在规划测试时需要把黑盒测试和白盒测试结合起来。
1.2 软件测试策略
软件测试策略把软件测试用例的设计方法集成到一系列经周密计划的步骤中去,从而使软件的测试得以成功地完成。回顾软件的开发过程,最初,通过系统工程确定待开发软件的总体要求和范围,以及与之相关的硬件、支持软件的要求。然后,经需求分析,确定待开发软件的功能、性能数据、界面等要求,再经设计和编码得到待开发软件的程序代码。所得到的程序代码必须经过严格的测试才能交付使用。一种测试策略就是将测试过程按4个步骤进行,即单元测试、集成测试、确认测试和系统测试,过程如图1所示。
单元测试是针对程序中的模块或构件,主要揭露编码阶段产生的错误。经单元测试的模块或构件需集成为软件系统,集成测试针对集成的软件系统,主要揭露设计阶段产生的错误。而确认测试是根据软件需求规约对集成的软件进行确认,主要揭露不符合需求规范的错误,对于纯软件的系统,经确认测试后的软件就可交付使用。对于基于计算机系统中的软件,还需要将它集成到基于计算机的系统中,并进行系统测试,以揭露不符合系统工程中对软件要求的错误。
2 面向对象的软件特点及其测试策略
面向对象是一种依赖于几个基本原则的思维方法。对象是类的实例,类是具有相同属性和操作的一类对象集。继承是面向对象中的一个重要方面,对象继承了所属类的属性和操作,类同样也可以继承其他类的属性和操作。多态性是另一个重要的方面,它是指不同的类中可以有相同名字的操作,并且这个操作在每个类中都能以各自不同的方式执行。对象对其他对象和外部世界隐藏了其操作的执行过程。每个对象都要提供一个让其他对象(和人)用来执行该对象中操作的接口。面向对象的程序是通过一系列对象协同工作来解决问题的,这一协作是通过对象之间互相传送消息来完成的。
2.1 面向对象软件的特殊性
从程序的组织结构方面来讲,传统测试技术不完全适用于面向对象软件的测试。传统程序的测试过程是选定一组数据,交给待测程序处理,通过比较实际执行结果和预期执行结果,判断程序是否含有错误。因此,传统软件测试技术与过程式程序中数据和操作分离的特点相适应。而面向对象软件不是把程序看成是工作在数据上的一系列过程或函数的集合,而是把程序看作是相互协作而又彼此独立的对象的集合,在面向对象程序中,对象是一组属性以及这组属性上的专用操作的封装体,每个对象就像一个传统意义上的小程序,有自己的数据、操作、功能和目的[3]。
而在面向对象的系统中,系统的功能体现在对象间的协作上,相同的功能可能驻留在不同的对象中,操作序列是由对象间的消息传递决定的。不同对象有自己的不同状态,而且同一对象在不同的状态下对消息的响应可能完全不同。
为实现某一特定的功能,有可能要激活调用属于不同对象类的多个方法(C++中的成员函数),形成方法的启用链。显然,基于功能分解的自顶向下或自底向上的集成测试策略并不适用于以面向对象方法构造的软件。
编程语言的改变对测试有影响,开发过程的变化以及分析和设计重点的改变也会对测试产生影响。许多面向对象的软件测试活动都可以在传统的过程中找到对应的活动。我们仍旧使用单元测试,尽管在这里“单元”的意义己发生了改变:我们仍将做集成测试以确保各个子系统能够一致正常地工作;我们仍将作回归测试以确保对软件最后一轮的修改不会对软件以前的功能造成负面影响。
面向对象软件语言特有的一些概念和机制,如数据抽象、继承、多态、动态绑定和消息传递都对测试有着深刻的影响。其中有的因素使测试复杂化,导致测试工作量加大,有的因素有助于测试过程中重用已有的测试资源,从而有利于减少测试的工作量,有的因素两方面兼而有之。但总的来讲,在这些因素的共同作用下,测试面向对象比测试传统软件更加困难。
2.2 面向对象测试模型
面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成测试所要求的逐步将开发的模块搭建在一起进行测试的方法已成为不可能。而且,面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同以往的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因此,传统的测试模型对面向对象软件已经不再适用。针对面向对象软件的开发特点,应该有一种新的测试模型。
面向对象的开发模型突破了传统的瀑布模型,将开发分为OOA(面向对象分析),OOD(面向对象设计),和OOP(面向对象编程)三个阶段[4]。针对这种开发模型,结合传统的测试步骤的划分,我们把面向对象的软件测试分为:面向对象分析的测试,面向对象设计的测试,面向对象编程的测试。
2.2.1 面向对象分析的测试
传统的面向过程分析是一个功能分解的过程,是把一个系统看成可以分解的功能的集合。这种传统的功能分解分析法的着眼点在于一个系统需要什么样的信息处理方法和过程,以过程的抽象来对待系统的需要。OOA是“把E-R图和语义网络模型,即信息造型中的概念,与面向对象程序设计语言中的重要概念结合在一起而形成的分析方法”,最后通常是得到问题空间的图表的形式描述。OOA直接映射问题空间,全面的将问题空间中实现功能的现实抽象化。将问题空间中的实例抽象为对象,用对象的结构反映问题空间的复杂实例和复杂关系,用属性和操作表示实例的特性和行为。对一个系统而言,与传统分析方法产生的结果相反,行为是相对稳定的,结构是相对不稳定的,这更充分反映了现实的特性。OOA的结果是为后面阶段类的选定和实现,类层次结构的组织和实现提供平台。因此,面向对象分析对问题空间分析抽象的不完整,最终会影响软件的功能实现,导致软件开发后期大量可避免的修补工作;而一些冗余的对象或结构会影响类的选定、程序的整体结构或增加程序员不必要的工作量。尽管面向对象分析的测试是一个不可分割的系统过程,为实现的方便我们将面向对象分析阶段的测试划分为五个方面:对认定的对象的测试,对认定的结构的测试,对认定的主题的测试,对定义的属性和实例关联的测试,对定义的服务和消息关联的测试。
2.2.2 面向对象设计的测试
通常的结构化的设计方法,用的“是面向作业的设计方法,它把系统分解以后,提出一组作业,这些作业是以过程实现系统的基础构造,把问题域的分析转化为求解域的设计,分析的结果是设计阶段的输入”。OOD采用“造型的观点”,以OOA为基础归纳出类,并建立类结构或进一步构造成类库,实现分析结果对问题空间的抽象。由此可见,OOD不是在OOA上的另一思维方式的大动干戈,而是OOA的进一步细化和更高层的抽象。所以,OOD与OOA 的界限通常是难以严格区分的。OOD确定类和类结构不仅是满足当前需求分析的要求,更重要的是通过重新组合或加以适当的补充,能方便实现功能的重用和扩增,以不断适应用户的要求。因此,对OOD的测试,应从如下三方面考虑:对认定的类的测试,对构造的类层次结构的测试,对类库的支持的测试。
2.2.3 面向对象编程的测试
典型的面向对象程序具有继承、封装和多态的新特性,这使得传统的测试策略必须有所改变。封装是对数据的隐藏,外界只能通过被提供的操作来访问或修改数据,这样降低了数据被任意修改和读写的可能性,降低了传统程序中对数据非法操作的测试。继承是面向对象程序的重要特点,继承使得代码的重用率提高,同时也使错误传播的概率提高。继承使得传统测试遇见了这样一个难题:对继承的代码究竟应该怎样测试。多态使得面向对象程序对外呈现出强大的处理能力,但同时却使得程序内同一函数的行为复杂化,测试时不得不考虑不同类型具体执行的代码和产生的行为。
面向对象程序是把功能的实现分布在类中。能正确实现功能的类,通过消息传递来协同实现设计要求的功能。正是这种面向对象程序风格,将出现的错误能精确的确定在某一具体的类。因此,在面向对象编程阶段,忽略类功能实现的细则,将测试的目光集中在类功能的实现和相应的面向对象程序风格,主要体现为以下两个方面:数据成员是否满足数据封装的要求,类是否实现了要求的功能。
2.3 面向对象软件的测试策略
针对面向对象软件的开发特点,同时与传统的面向过程的测试相对应,面向对象软件测试的层次划分如图2。
2.3.1 面向对象的单元测试
面向对象程序的基本单位是类。类测试是由那些与验证类的实现是否和该类的说明完全一致的相关联的活动组成。类测试与传统测试过程中的单元测试大体相似,而且它们还有许多相同的问题必须说明。对于类的测试,可以通过代码检查或执行测试用例来进行。在某些情况下,用代码检查代替基于执行的测试方法是可行的,但代码检查有两个不利之处:易受人为错误的影响、在回归测试方面明显需要更多的工作量。基于执行的测试方法克服了这些缺点,但确定测试用例和开发测试驱动程序也需要很大的工作量。在某些情况下,为某个类构造一个测试驱动程序所需要的工作量可能比开发这个类所需要的工作量多好几个数量级。但假如一个类是某个类库不可缺少的部分,那么即使测试驱动程序的开发成本可能很高,对它进行充分的类测试也是值得的。
在类测试过程中,不能仅仅检查输入数据产生的结果是否与预期的吻合,还要考虑对象的状态,整个过程应涉及对象的初态、输入参数、输出参数以及对象的终态。
2.3.2 面向对象的集成测试
面向对象的类簇测试把一组相互有影响的类看作一个整体称为类簇。类簇测试主要根据系统中相关类的层次关系,检查类之间的相互作用的正确性,即检查各相关类之间消息连接的合法性、子类的继承性与父类的一致性、动态绑定执行的正确性、类簇协同完成系统功能的正确性等等。类簇测试有两种不同策略:基于类间协作关系的横向测试和基于类间继承关系的纵向测试。
面向对象的集成测试能够检测出相对独立的单元测试无法检测出的那些类相互作用时才会产生的错误。基于单元测试对成员函数行为正确性的保证,集成测试只关注于系统的结构和内部的相互作用。
面向对象的程序是由若干对象组成的,这些对象互相协作以解决某些问题。对象的协作方式决定了程序能做什么,从而决定了这个程序执行的正确性。例如,可信任的原始类,它的实例可能不包含任何错误,但是如果那个实例的服务不被其它程序组件正确使用的话,那么这个程序也就包含了错误。因此,一个程序中对象的正确协作,即交互对程序的正确性是非常关键的。
类中的方法大多数能和其它类的实例进行交互。这种被测试的交互发生在运行期的各个对象之间。交互包含单向或双向的消息传送。交互测试的重点是确保对象(这些对象的类以已被单独测试过)的消息传送能够正确进行。交互测试的执行可以使用到应用程序中的交互对象,或者在独立的测试工具(例如一个Tester类)提供的环境中,交互测试通过使得该环境中的对象相互交互而执行。
2.3.3 面向对象的系统测试
通过单元测试和集成测试,仅能保证软件开发的功能得以实现。但不能确认在实际运行时,它是否满足用户的需要,是否大量存在实际使用条件下会被诱发产生错误的隐患。为此,对完成开发的软件必须经过规范的系统测试,测试它与系统其他部分配套运行的表现,以保证在系统各部分协调工作的环境下也能正常工作。
系统测试是对所有程序和外部成员构成的整个系统进行整体测试,检验软件和其他系统成员配合工作是否正确。另外,还包括了确认测试内容,以验证软件系统的正确性和性能指标等是否满足需求规格说明书所制定的要求。在整个面向对象的软件测试过程中,集成测试可与单元测试同时进行,以减少单元集成时出现的错误。对已经测试通过的单元,在集成测试或系统测试中,可能发现独立测试没有发现的错误。
系统测试应该尽量搭建与用户实际使用环境相同的测试平台。系统测试时,应该参考面向对象分析的结果,对应描述的对象、属性和各种服务,检测软件是否能够完全“再现”问题空间。系统测试不仅是检测软件的整体行为表现,从另一个侧面看,也是对软件开发设计的再确认。这里说的系统测试是对测试步骤的抽象描述。它体现的具体测试内容包括以下几个方面:
2.3.3.1 功能测试
测试是否满足开发要求,是否能够提供设计所描述的功能,是否用户的需求都得到满足。功能测试是系统测试最常用和必须的测试,通常还会以正式的软件说明书为测试标准。
2.3.3.2 强度测试
测试系统的能力最高实际限度,即软件在一些超负荷的情况,功能实现情况。如要求软件某一行为的大量重复、输入大量的数据或大数值数据、对数据库大量复杂的查询等。
2.3.3.3 性能测试
测试软件的运行性能。这种测试常常与强度测试结合进行,需要事先对被测软件提出性能指标,如传输连接的最长时限、传输的错误率、计算的精度、记录的精度、响应的时限和恢复时限等。
2.3.3.4 安全测试
验证安装在系统内的保护机构确实能够对系统进行保护,使之不受各种非常的干扰。安全测试时需要设计一些测试用例试图突破系统的安全保密措施,检验系统是否有安全保密的漏洞。
2.3.3.5 恢复测试
采用人工的干扰使软件出错,中断使用,检测系统的恢复能力,特别是通讯系统。恢复测试时,应该参考性能测试的相关测试指标。
2.3.3.6 可用性测试
测试用户是否能够满意使用。具体体现为操作是否方便,用户界面是否友好等;安装/卸载测试等等。系统测试需要对被测的软件结合需求分析做仔细的测试分析,建立测试用例。
3 结束语
面向对象技术是一种新兴的软件开发技术,正逐渐代替被广泛使用的面向过程开发技术。虽然面向对象技术的基本思想保证了软件应该有更高的质量,但编程人员的错误仍是不可避免的。软件测试并没有因面向对象技术的兴起而失去其重要性。对面向对象软件的测试,其测试策略或测试方法都需要出现相应的变革或更新。我们必须结合面向对象技术的特点,研究新的面向对象软件的测试理论、方法来与之适应。在软件工程领域,面向对象软件测试是一个重要的研究方向,在这方面的深入研究将对软件测试的理论与实践产生积极的意义。
参考文献
[1]叶仁召,郑玉墙,鲁汉榕.面向对象软件测试及度量的研究[J].计算机工程与设计,2001,22(4):21-24.
[2]张克东,庄燕滨.软件工程与软件测试自动化教程[M].北京:电子工业出版社,2002.
[3]王静.面向对象软件测试技术的研究[D].天津:天津大学,2006.
面向对象的软件开发过程 篇8
随着计算机应用领域的不断扩大, 软件的规模和复杂性也在不断增加, 我们需要按照更科学、有效的方法组织软件的生产与管理。面向对象技术首先在编程领域兴起, 并逐渐发展成熟, 并随着面向对象的测试、集成等技术的出现而发展为一套贯穿整个软件生命周期的方法体系。
面向对象技术首先在编程领域兴起, 并逐渐发展成熟, 并随着面向对象的测试、集成等技术的出现而发展为一套贯穿整个软件生命周期的方法体系。面向对象方法的基本思想是:从客观存在的事物 (即对象) 出发来构造软件系统, 并在系统构造中尽可能运用人类的自然思维方式。
具体地讲, 面向对象技术是从问题域中客观存在的事物出发构造软件系统, 用对象作为这些事物的抽象表示, 并以此作为系统的基本构成单位。每个对象都有其属性和方法, 属性表示事物的静态特征, 方法表示事物的动态特征。对象的属性和方法结合为一体, 对外屏蔽其内部细节, 称作封装。把具有相同属性和相同方法的对象归为一类, 类是对象的抽象描述, 每个对象是它所属类的一个实例。通过在不同程度上运用抽象的原则, 可以得到基类和子类, 子类继承基类的属性和方法。
面向对象的三个基本特征:
封装———是把客观事物封装成抽象的类, 可以隐藏实现细节, 使得代码模块化;
继承———使用现有类的所有功能, 并在无需重写原来类的情况下对这些功能进行扩展;
多态———指同一消息作用于不同的对象时, 具有不同的处理方案和处理结果, 即所谓的“同一接口, 多种方法”, 增强了程序的灵活性。
2 面向对象的分析与设计实现
面向对象的程序设计以解决的问题中所涉及的各种对象为主要矛盾, 力图从实际问题中抽象出封装了数据和操作的对象, 通过定义属性和操作来表述他们的特征和功能, 定义接口来描述他们的地位及与其他对象的关系, 最终形成一个可理解、可扩充、可维护的动态对象模型。面向对象的软件开发过程可以大体划分为面向对象的分析, 面向对象的设计, 面向对象的实现三个阶段。
2.1 面向对象的分析
面向对象的分析主要作用是明确用户的需求, 并用标准化的面向对象的模型规范来表述这一需求, 最后形成面向对象的分析模型。图1展示的是面向对象系统分析示意图。
面向对象的分析分为如下几步:
2.1.1 确定需求
明确用户的需求, 包括对用户需求的全面理解和分析;明确所要开发的软件系统的职责界限;进行可行性研究和制订方案, 交给用户确认。
2.1.2 进行分析
对问题域进行分析和理解, 对其中的事物和它们之间的关系产生正确的认识, 找出描述问题域所需的类及对象, 定义这些类和对象的属性与服务, 以及它们之间形成的结构、静态联系和动态联系。
2.2 面向对象的设计
面向对象的设计的主要工作是确定如何做。面向对象的设计将在对象类模型的基础上引入界面管理、任务管理和数据管理, 进一步确定模型。界面管理:负责整个系统的人机界面的设计。任务管理:负责处理并进行操作之类的系统资源管理功能的工作。数据管理:负责设计系统与数据库的接口。
2.3 面向对象的实现
面向对象的实现就是具体的编码阶段。选择合适的面向对象的编程语言, 用选定的语言编码实现的对设计阶段所得的各对象类的详尽描述。将编好的各个类代码模块根据类的相互关系集成, 测试检验各个模块和整个软件系统。
3 总结
面向对象的技术相对于之前的程序设计方法, 能够更好地适应当今软件开发在规模、质量、效率、复杂性和可靠性上的种种需求。
3.1 可重用性
可重用性是面向对象软件开发的一个核心思路, 类能够抓住事物的实质特征, 具有普遍适应性, 类的另外一大特点是继承, 通过继承大幅减少冗余的代码, 并可以方便地扩展现有代码, 提高编码效率, 这就是一种可重用性的体现。
3.2 可扩展性
可扩展性即要求应用软件能够很方便地进行扩充和修改。对于面向过程的程序设计来说, 往往添加一个功能, 整个程序都要重新考虑, 对于大型程序来说, 这样付出的代价是很大的。面向对象的程序设计则可以有效地避免这一缺点, 降低软件维护的难度。
3.3 可管理性
面向对象的开发方法采用类作为构建系统的部件, 使整个项目的组织更加合理、方便。数据抽象可以在保持外部接口不变的情况下改变内部实现, 从而减少对外界的干扰, 提高程序的可靠性。
3.4 可直接操作性
允许将问题域中的对象直接映射到程序中, 减少软件开发过程的中间环节的转换过程, 优化整个程序设计结构, 提高软件质量。
面向对象技术出现和广泛应用是计算机软件技术发展中的重要成果和趋势之一, 在许多应用领域的软件开发中都极具前途。相信随着经验的积累, 面向对象的软件开发技术会在当今的软件开发中占据主流的位置, 并将日趋成熟。
参考文献
[1]王维江.面向对象方法的程序设计简述[J].航空计算技术, 2004, 6.
[2]郭领艳, 常淑凤.面向对象编程思想的理解及案例分析[J].资源建设:技术与应用, 2007, 5.
[3]宋晓军, 李卓玲.Oracle系统中面向对象技术的应用[J].信息技术, 2002, 5.
面向对象软件测试 篇9
关键词:UML类图,有向赋权图,面向对象软件集成测试,ODDWG
集成测试的目的是通过测试来发现和接口有关的错误,即把通过了单元测试的模块组装起来测试。类间存在的多种关系是测试顺序的一个重要依据。选择不同的测试顺序将决定着测试的结果,如何寻找使得测试最为有效的测试顺序是面向对象软件集成测试的一个重要问题[1,2]。
本文将类图中的类内信息,类间信息提取出来,并计算每个类的内聚度,以及类间耦合度,同时把每个类看作有向图的结点,类的内聚度作为结点的权值,类间耦合度作为关系的权值,并根据动态绑定存在的条件,添加可能的类间动态线索。最后利用深度与广度结合的遍历算法遍历该有向图生成集成测试的测试序列。
1 扩展有向图模型的定义
一个有向图G是一个三重组<V(G), E(G),Φ(G)>其中V(G)是一个非空的结点集合;E(G)是边的集合,此处为序偶的集合;Φ(G)是从边集E到结点偶对集合上的函数。对于此图进行扩展,使得图G变为一个四重组<V(G), V_W (G),E(G),E_W (G)>,其中V_W={v_w1, v_w2,…, v_wk}是结点权值的有限集;E_W={ e_w1, e_w2,…, e_wm}是边的权值,扩展后的图成为了一个有向的赋权图DWG(Directed Weight Graph)[3]。
上述DWG图只是考虑了类之间的静态依赖关系,而没有考虑类之间的动态依赖关系。在DWG的基础上,依据动态绑定的特点,给出类之间完整关系图 ODDWG (Object Dynamic Directed Weight Graph)。图中的结点权值由类的内聚度和类间耦合度计算,边由出度个数和关系的强弱共同决定。
2 ODDWG的定义和实现
2.1 类的内聚度计算
类的内聚度反映了一个类的内部各成分联系的紧密程度[4]。在UML类图中,类由类名、属性和方法3部分组成。属性又可以分为公有属性、私有属性和受保护属性。同样的,方法也可以分为公有方法、私有方法和受保护方法[5,6]。
定义1:UML中的一个类=<类名,属性,方法>,其中属性由私有、公有、保护类型的属性3个集合构成,方法由私有、公有、保护类型的方法3个集合构成。
定义2:内部边集表示属性或方法间存在着引用性访问或定义性访问的关系,有方法对属性的使用和方法对其他方法的调用。
定义3:类的属性内聚度=类的私有属性的个数/所有属性的个数(值越大,类的属性内聚度越好)。
定义4:类的方法内聚度=类的私有方法的个数/所有方法的个数(值越大,类的方法内聚度越好)。
定义5:类的内聚度(C_coh)=方法内聚度×M_P+属性内聚度×A_P +内部边集×E_P。其中M_P表示方法内聚度的权值;A_P表示属性内聚度的权值;E_P表示内部边集的权值。
最后将计算出的类的内聚度作为ODDWG中结点的权值。
2.2 类间访问耦合度计算
类间耦合度是影响类复杂程度的一个重要因素。类间耦合度受3个因素影响:联系方式,即类间通过什么方式联系;来往信息的作用,即类间来往信息作什么用;数量,即类间来往信息的多少。在面向对象的系统中根据类间联系紧密程度的强弱,由弱到强可划分为如下6 种:依赖关系(C_DE)、关联关系(C_AS)、实现关系(C_AC)、聚合关系(C_SA)、组合关系(C_CO)、继承关系(C_IN)。
定义6:类的访问度(C_Access)=访问出度(CA_OUT)+访问入度(CA_IN)。
定义7:类的耦合度(C_COu)可定义类与其他类的关系度量及其访问度函数,即:
式中:PD表示依赖关系的权重;PA表示关联关系的权重;PC表示实现关系的权重;PI表示继承关系的权重;PS表示聚合关系的权重;PO表示组合关系的权重;PIN表示访问入度的权重;POUT表示访问初度的权重。
如何获得类,以及类间的信息,本文利用RationalRose提供的接口,读取出每个类图的信息,包括属性和方法的信息,把读取出的类的信息用7元组表示[7]<类名,私有属性集合,保护属性集合,公有属性集合,私有方法集合,保护方法集合,公有方法集合>,同时提取出类间的信息。把从UML类图中得到的类间关系用一个5元组表示<类ID,起始类,结束类,类间耦合出度,类间耦合入度>。同时要将具体详细的类间关系提取出来存储到数据库中,以方便计算耦合出度和耦合入度。
3 ODDWG的实现及测试序列生成算法
3.1 ODDWG的获取
存在如下的一个类图。具体内容如表1所示:
类间存在的关系为:类A是类B与类C的父类,公有派生;类B是类H的父类,公有派生;类A和类D之间为双向关联关系;类D依赖于类G;类D与类E之间为单向关联,从D指向E;类D类F之间为单向关联,从D指向F;类E与类I之间为单向关联,从E指向I;类I单向关联类C,从I指向C。
对每个类计算类的内聚度,结果为A_C_coh> F_C_coh > D_C_coh> E_C_coh> B_C_coh >C_C_coh>G_C_coh> I_C_coh >H_C_coh。进行类间耦合度计算,按照降序排列D_C_COu>A_C_COu> H_C_Cou> B_C_COu>C_C_COu>I_C_Cou> E_C_COu>F_C_COu >G_C_COu;根据计算的类间耦合度,类内聚度和类的耦合出度,生成如图1所示的ODDWG图。
图中A_W,B_W,C_W,D_W,E_W,F_W, G_W,H_W,I_W分别代表节点的权值,等于每个类的内聚度与类耦合度的综合。结点之间边的权值由每个类的访问出度获得。例如AD表示从A到D的边的权值,图中的虚线表示可能存在的动态绑定关系。
3.2 生成算法及测试序列输出
从图中根据遍历算法,从每一个结点开始遍历,生成测试序列[8,9]的描述如下:
(1) 从UML类图中提取每个类的信息计算类的内聚度。
(2) 从UML类图中提取类间关系,并计算每个边的类间耦合度,并用三元组记录每个类的内聚度和类间耦合度<类名,类内聚度,类间耦合度>进行存储。对类间耦合度和类内聚度进行加权平均计算,计算结果作为ODDWG图的每个结点的权值。
(3) 在计算类间耦合度的同时记录每个类的耦合出度,作为结点的边的权值。
(4) 如果类间存在继承关系,并且为公有继承,那么从父类到子类用虚线标示,如果存在类和顶层父类之间存在关联关系,则也有可能存在动态绑定的可能性。如图1中D_AB,D_DA,D_BH,D_AC。
(5) 从每个结点出发(首先从权值最大的结点出发)进行遍历,如果两条边的权值一样,则参考结点,选择结点中权值大的结点为下一个遍历结点。直到不存在下一条边结束。
(6) 然后重复第五步,直到和该结点相关的路径全部已经被遍历过。
(7) 从类的集合中去除该类,然后重复步骤(5)、步骤(6),直到每个结点至少被遍历1次。
(8) 对所得测试线索进行排除,去除掉重复的线索,如果某个线索是另一个线索的子串,去除该子线索。
(9) 最后输出,存储集成测试测试序列。
针对图1进行遍历,生成测试序列如下:
①A→D→E→I→C;②D→A→B→H
③D→A→C;④D→E→I→C→A
⑤A→D→F;⑥A→D→G
4 结 语
本文针对UML类图中提取的信息,计算与类相关的信息,获得对象动态加权有向图,然后从有向图中进行遍历,生成集成测试测试序列。该算法不需要去除图中的环,生成方法简单有效,在实际需要中得到了验证,但随着类图的增加,测试序列数量会加大,导致序列的生成速度有所影响。因此下一步的工作是研究如何进行更有效的遍历,同时在下一步工作中进一步研究类间耦合度和类内聚度,使得图中每个结点的权值获取和边的权值获取更加的科学。
参考文献
[1]JORGENSEN P C,ERICKSON C.Object-oriented integra-tion testing[J].CACM,1994,37(9):30-38.
[2]吴静莉,韩松峰.基于UML集成测试模型的生成方法[J].微电子学与计算机,2008(7):9-13.
[3]陈树峰.面向对象软件的依赖性分析与回归测试[J].计算机应用,2009(6):29-32,54.
[4]林红昌,胡觉亮.基于Petri网的软件测试用例的产生和分析[J].计算机工程与应用,2009(10):30-33.
[5]FOWLERM.UML精粹-标准对象建模语言简明指南[M].徐家福,译.北京:清华大学出版社,2005.
[6]AI K C,DANIELS F J.Interclass test order for object-oriented Software[J].Journal of Object-Oriented Program-ming,1999,12(4):18-25.
[7]LE T Y,JERON T,JEZEQUEL J M,et al.Efficient ob-ject oriented integration and regression testing[J].IEEETrans on Reliabilitu,2000,49(1):12-25.
[8]WU Ye,CHEN Mei-hua,OFFUTT Jeff.UML-based inte-gration testing for component-based software lecture notesin computer science[C]//Proceedings of the Second Inter-national Conference on COTS-Based Software Systems.London,UK:Springer-Verlay,2003:251-260.
面向对象的几种关键技术研究 篇10
关键词 面向对象 视图实现 模式转换
中图分类号:G71 文献标识码:A
当今世界之中科学技术不断地得到了发展,与此同时计算机技术也得到了高速发展。随着人民生活水平的提高,人们对计算机的硬件和软件的要求都变得越来越高。为了适应社会发展的潮流也为了满足人们的需求,计算机软件行业的人士迫切的需要研发出新的技术和理念,所以面向对象的方法也就应运而生了,面向对象的方法是一种全新的分析设计和思维方法,它的出现目的是为了让操作更能满足和更好地实现大家的需求,现在面向对象的思想在软件设计时早已深入人心。
1简单地分析面向对象的关键技术、核心要素
面向对象思想总的来说有三个核心的要素,这三个要素主要是封装、继承和多态,这三个要素在面向对象研究时特别重要,是进行程序设计时主要的思想基础。封装性是将一些客观存在的数据与操作联系在一起,从而给用戶提供一些具体的和实用的功能,这样做可以在一定程度上简化编码也能提高它的安全性,其好处在于用户不用知道细节却可以便捷地进行操作,当然了,我们所指的对内进行封装是根据用户的实际情况来设计一些相关的访问权限,不是简单的完全包裹。继承是一种重要的机制,它的作用主要体现于在设计的过程中实现代码的重用,众所周知,任何一种类都是可以被继承的,继承在设计时的使用可以有利于我们在设计过程中对不同的应用要求的适应。最后的一个特点要素是多态,当然了,多态的应用作用也是能够更好地满足大家的需求,多态能够把客观的世界描绘得栩栩如生,它对使代码的重用率的提高起着重要的作用。
2以面向对象的数据库为例,分析其关键技术
面向对象数据库不同于前两代的数据库,它具备很多的优点,例如可以存储海量的数据也能够满足极为复杂的数据结构。下面我将对其中的三项关键技术进行简要的分析。
2.1分析说明关键技术之一的数据库转换技术
数据库转换技术主要是实现模式和操作之间的转换,一般来说转换的途径有两种,一种是从关系DB转换到面向对象DB,而另外一种就是把面向对象DB转换为关系DB。而转换又分为数据模式转换和数据操作转换两种,数据模式转换的基本思路可以概括为将父类的属性扩展到子类之中,而在数据模式转换之中转换的重点是方法转换,方法又可以大致分为定义和调用。我们知道数据查询、输入、删除和修改时数据库之中一些最为常用的操作,但是这些操作都是离不开一些限制条件的,限制条件转换可以分为类限制条件和关系限制条件两种,这两种的机制是不同的,后者比前者多出了集合操作数及运算符和路径表达式操作数机制这两个机制。数据查询转换就是把对象查询转换为关系查询,数据修改转换同样就是把对象修改转变为关系修改,而其他的几种操作转换例如数据插入转换和数据删除转换也是与此相似的。
2.2关键技术之模式演进技术
我们都知道,在模式演进之中保持模式的一致性是极为重要的,我们在这里可以通过模式一致性约束来对它进行描述,这其中包括我们所熟知的唯一性约束、子类型约束、存在性约束等。一般来说,实现模式演化的途径可以分为两种,第一种就是我们在转换的时候尽量地考虑现有的应用程序,而另外一种即使需要我们去自主设计和开发一些新的高级的数据库编程语言,在现在的应用当中,常用的演化方法主要就是等价模式演化和透明模式演化两种。
2.3常见的关键技术之视图类实现技术
现在,我将主要说明面向对象数据库视图实现技术,我们知道,统计、连接查询等很多面向对象数据库之中的操作都是能够自由访问数据库之中的数据的,我们在采用了这些操作之后可以有效地提高效率,但是会对对象的封装性造成一些破坏,为了减少破坏,我们在设计之中加入了一组接口,这样的设计能很好地减少破坏,并且将接口实行标准化之后可以减弱对象的复杂性和设计难度。
3结束语
现如今,面向对象的研究变得越来越重要,可是我们在这一方面的研究还不成熟,我们必须对面向对象的关键技术进行深入地研究,只有这样才能更好地将面向对象思想运用到软件设计和开发之中。在本文中关于面向对象数据库的分析,我们能大体的知道其关键技术和原理,也从中得出了一些实用的结论,我们只有在明确的了解了面向对象的主要思想之后,才能对面向对象进行更加深入地分析,我们应该对技术不断地进行探索和研究,只有这样才能推动计算机行业的不断发展。
参考文献
[1] 王甫.面向对象技术的理解与分析[J].时代报告(学术版),2012.(7).
[2] 梁向.浅论面向对象技术的特征及其发展方向[J].投资与合作,2013.(1).
[3] 吴含前,吉逸,《面向对象技术&UML》教学改革与实践[J].计算机工程与科学,2011.33(z1) .
编程型面向对象游戏实验软件实现 篇11
关键词:Net,OpenGL,编程型游戏,实验软件
1 问题的提出
传统的面向对象实验教学处于理论课程的从属地位。实验内容较为基础, 多为一些演示、验证型实验, 实验结果一般采用打印输出的方式。对于学生而言, 抽象、繁琐的设计算法更是难以掌握, 也很少在实验课程中进行实际应用, 在一定程度上降低了学生实验的积极性。学生将较多的时间花费在理论课程的学习当中, 而忽视了实验技术的练习和积累。因此针对上述问题, 本文提出将编程型游戏融入到面向对象实验教学当中, 利用3D游戏丰富的表现形式和竞争元素, 激发学生实验的兴趣;通过让学生编写游戏逻辑程序, 提高学生的实践和创新能力。
2 背景分析
2.1 编程型游戏背景。
教育游戏[3]正成为国内外游戏与教育界研究的热点, 作为学生获取知识的一种手段和一种工具, 通过生动有趣、直观的表达方式来认识抽象复杂的东西, 精美的画面和交互性能力激发学生学习的兴趣。编程型游戏作为一类特殊的教育游戏, 打破了传统游戏将键盘、鼠标或手柄作为游戏逻辑的控制, 由游戏玩家通过编写游戏逻辑控制脚本, 自行设计游戏的逻辑控制。玩家不仅仅作为游戏的执行者去玩游戏, 同时还作为一个游戏开发者, 可以在不了解游戏开发过程的前提下, 避开了未知领域的相关技术, 很容易的参与到游戏开发当中去。既在游戏中获得了快乐, 又通过开发游戏获得了满足和成就感, 也是对程序设计技能和实践经验的一次积累。当今已经存在的编程型游戏包括robocode、AI-TANK、AI-RCJ[4]等。特别是AI-RCJ, 作为一款以“智能足球”为主题、以虚拟足球机器人为控制对象进行程序设计和比赛的游戏, 已经参与到了全国中小学网上虚拟机器人足球竞赛和“全国中小学信息技术与实践创新活动”智能机器人—虚拟足球机器人竞赛等项目中, 具有重要的现实意义。
2.2 技术背景。
2.2.1 Net平台。
Microsoft.NET框架是Microsoft公司推出的新一代软件开发平台, 其核心包括公共语言运行时 (CLR) 、.NET框架类库 (FCL) 及编程语言。CLR是.NET框架的基础, 提供内存管理、线程管理和远程处理等核心服务, 并且强制实施严格的类型安全以及可提高安全性和可靠性的其他形式的代码准确性。
2.2.2 Open GL三维图形开发类库。
Open GL是图形硬件的一种软件接口。从本质上说, 它是一个3D图形和模型库, 具有高度的可移植性, 并且具有非常快的渲染速度。Open GL并不是一种编程语言, 而是更像一个C运行时函数库。它提供了一些预包装的功能, 帮助开发人员编写功能强大的三维图形应用程序。如今, Open GL广泛流行于游戏、医学影像、地理信息、气象模拟等领域, 是高性能图形和交互性场景处理的工业标准。
3 实验软件设计
3.1 特点分析。
编程型面向对象游戏实验软件是将游戏作为实验内容, 致力于提高学生的实验兴趣和实践创新能力的培养, 因此它应具有的功能特点如下:1) 可扩展性。编程型面向对象游戏实验软件应具有良好的扩展能力, 提供可扩展的接口, 可以让教师添加新的游戏实验内容, 这包括游戏实验的规则、要求和游戏元素等。2) 竞争性。实验软件提供人人对战模式和排行榜机制, 学生间可以通过实验软件进行各自游戏逻辑算法的比拼, 更新自己在排行榜中的位置。通过学生间的竞争、比赛和交流, 吸引学生参与到实验当中去, 使学生自发的修改和完善自己的游戏逻辑程序。3) 即插即用。由于游戏实验的定制和游戏逻辑程序都独立于实验软件平台, 而为了满足游戏加载效率和对战模型的要求, 实验软件实现了类似于“插头—插座”式的即插即用功能, 使游戏实验和游戏逻辑程序可以动态加载到软件平台中。
3.2 设计与核心实现。
如图1包含了本实验软件的全部设计信息, 整个软件的开发都是根据该构架图进行的。从图中可以清晰的看出业务构件和系统构件分别封装了各自领域模型的业务逻辑, 在.Net框架之上, 由实验软件控制器进行集成, 最终实现了编程型面向对象游戏实验软件。其中系统构件主要包括配置服务和反馈机制等, 业务构件包括利用Open GL类库定制的游戏实验构件和学生编写的游戏逻辑构件组成。以下为实验软件的核心实现分析:
3.2.1 配置服务的实现。
配置服务主要包括系统环境的配置及游戏实验的临时文件配置, 主要针对XML文件进行操作。为了便于扩展和业务逻辑变更时客户端代码改动达到最小, 利用抽象工厂模式思想, 采用统一的接口Experience Factory为客户端代码提供服务。
3.2.2 游戏实验的定制。
Game Logic类是学生编写的游戏逻辑, 它实现了游戏实验提供的游戏逻辑接口, 通过动态加载C++程序集的方式, 将其加载到游戏实验中;Game类是游戏呈现类, 可以作为一个独立的游戏进行显示;Game Experience类通过实现平台的游戏实验接口, 对Game Minority类进行了接口适配, 将游戏实验加载到平台中。Data Service类是数据服务。具体设计如下:为了扩展新的游戏实验, 满足构件间“插头—插座”式的即插即用功能, 软件平台采用.Net程序集技术实现了构件间的动态加载。首先学生端将实现的游戏逻辑类在程序集调用入口中进行实例化。
3.2.3 实验软件平台实现。
实验软件的平台利用MFC进行搭建, 通过Game Choice类选择游戏实验的内容, Main Frame类完成了对实验的控制, 包括游戏的基本控制、游戏实验的管理、编译文件和游戏对战等。Open Experiment View类进行了对Open GL环境的配置工作, 并且加载游戏实验的DLL, 显示游戏内容。
3.3 难点分析。
3.3.1 崩溃检测。
由于实验软件采用学生实验程序以源文件形式提交, 首先由软件本身对源程序进行编译, 生成动态链接库, 然后进行游戏逻辑的正确性验证操作。这样就可能会出现程序编译通过, 但执行操作时由于各种原因导致的程序崩溃的情况, 因此需要对验证程序进行崩溃检测。其解决方法是要求验证程序在刚开始执行时建立一个临时文件, 如果程序未出现崩溃性错误, 顺利完成验证工作, 则在程序关闭时自动删除临时文件。软件会对临时文件进行存在性检查, 一旦发现文件存在则可以认定验证程序属非正常关闭。
3.3.2 死循环或长时间不响应检测。
同样出现在验证程序验证游戏逻辑的过程中, 验证程序可能会遇到游戏逻辑死循环或长时间不响应等情况, 从而导致软件出现不响应问题。为了避免这个问题, 软件在首先创建一个独立的进程, 然后通过这个进程打开验证程序, 同时对这个进程进行计时。一旦进程超过一定时间仍未结束, 软件将自动停止并关闭这个进程。
4 排行榜机制测试评估
实验软件中排行榜的目的是表现出学生间游戏逻辑算法的差异, 激励学生不断修改和完善算法程序, 取得好的游戏排名, 因此为了验证算法的差异, 确实能影响排行中的排名, 我选取了随机算法和一种智能算法进行了测试。
利用了智能算法的程序获胜的几率远大于简单的随机算法, 同时由于游戏的不可预见性, 随机算法同样会有胜利的可能, 确实反映了逻辑算法的差异会体现在排行榜中。
5 总结及展望
【面向对象软件测试】推荐阅读:
面向对象测试08-02
面向对象的软件测试09-25
面向对象的单元测试06-10
面向对象的软件维护论文10-12
面向对象的类测试技术11-17
面向对象的软件开发方法分析论文09-09
面向对象与面向过程06-01
面向对象11-10
面向对象分割07-18
面向对象仿真10-16