面向对象的软件测试

2024-09-25

面向对象的软件测试(精选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]蔺茹.软件工程中面向对象方法的优势分析[J].电子技术与软件工程,(24):54-55.

面向对象的软件开发方法分析 篇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

关键词:UML,测试用例,类测试,面向对象,状态图

1 引言

面向对象软件测试的主要目标与传统软件测试目标相同,既是用最小的工作量发现最多的错误。由于面向对象所独有的多态、继承、封装等新的特点,使面向对象测试的策略和技术与传统测试有所不同,测试的视角扩大到包括复审分析和设计模型,测试焦点从模块转向类。类是构成面向对象程序的基本成分,类的测试无疑成为面向对象测试的重要环节。基于对象状态的测试是根据被测试的类的对象所处的状态以及状态之间的转移来构造测试用例,它侧重于对象的动态行为,这种动态行为依赖于对象状态。测试对象动态行为能检测出对象成员函数之间通过对象状态进行交互式产生的错误。

2 基于对象状态的测试方法的发展

现在面向对象测试中基于对象状态的测试方法一般是采用扁平状态机和状态迁移图。扁平状态机能很好的提示出一些类中的错误,但是随着类的状态属性的增加,对象状态的数目会迅速膨胀,大大增加测试的复杂度。状态转移图用于刻画对象响应各种事件时状态发生转移的情况,容易借助于自动机理论来选择测试时所用的时间序列和预测对象的状态变化结果序列,但是,它难于描述继承的对象动态行为、并发的动态行为以及由数据成员和成员函数构成的对象状态和对象状态转移。基于UML的状态图可以很好的描述对象动态行为、并发的动态行为,可以把状态的复杂度控制在和状态属性相关的线性级别,下面我们主要介绍利用UML状态图如何描述对象动态行为、并发的动态行为,以及如何产生测试用例。

3 UML状态图

UML状态图(State Diagram)是UML中对系统的动态行为进行建模的表示方法,它包括对反应型对象的行为建模。它展现了对象生命周期内可能处于的状态以及在这些状态间转换的激发条件。UML状态图中引起状态迁移的原因通常有两种,一种是在状态图中相应的迁移上未指明事件,这表示当位于迁移箭头源头的状态中的内部动作全部执行完后,该状态迁移被自动触发;另一种是,当出现某一事件时会引起状态的迁移,在状态图中把这种一起状态迁移的事件标在改前一的箭头上,如图1。

状态迁移的形式化语法为:

event_signsture[guard_condition]/action_expression^send_clause

其中事件特征event_signsture是由事件名后括号括起来的参数表组成,它指出触发迁移的事件以及与该事件相连接的附加数据。guard_condition警戒条件是一个布尔表达式,如果状态迁移中既有事件又有警戒条件,则表示仅当这个事件发生并且警戒条件为真时,触发状态迁移。动作表达式action_expression是一个触发状态迁移时可执行的过程表达式,表达式中可引用该状态所拥有的对象中的属性、操作或事件特征中的参数。发送子句send_clause是动作的一种特殊情况,用来说明在两个状态的迁移期间发送的消息。

UML状态图的优点在于它支持嵌套和并发。UML状态图中包含基本状态(basic state)和复合状态(composite state),复合状态分为或状态(or-state)和与状态(and-state)。或状态的子状态之间是相互排斥的或关系,表示在任一时刻这些子状态中只有一个子状态为真;与状态的子状态之间是并发的非相互排斥关系,与状态表示一个状态可以有多个并发的子状态,并发子状态之间用虚线分隔,用虚线分隔的每个区域表示一个并发的子状态。把状态属性看成并发的子状态,从而可以把状态图的复杂度控制在线性级别上。并发状态图中一个事件可能引起多个子状态的状态迁移。如图2中的CVM就是一个或状态,它的子状态OFF和ON之间是相互排斥的关系,ON状态就是一个与状态,当处于ON状态时,就意味着同时处于COFFEE和MONEY两个子状态。

由于UML状态图支持嵌套和并发,这就使得它比以往的状态转移图能更好的描述继承的对象动态行为、并发的动态行为以及由数据成员和成员函数构成的对象状态和对象状态转移。UML状态图中可以包含复合状态这就使得它可以把状态的复杂度控制在和状态属性相关的线性级别。下面我们讨论如何从UML状态图构造一棵复合状态测试树。

4 构造复合状态测试树

与以往的测试树不同的是复合状态测试树的每个节点代表对象的复合状态既对象的各个属性的集合,边表示状态间的迁移,根节点代表对象的初始属性集合。

构造一个队列queue来存放复合状态测试树的各个节点。

1)把UML状态图的起点读入队列queue。

2)以UML状态图的起点定义根节点Test Tree root,同时把节点标识tree Node置为对象的初始状态,nodelevel置为0,t和child Tree置为NULL,把root放入队列中。

3)取队列头部的节点设为head,搜索从head节点所对应的状态(head.tree Node)发出的状态前移以及前移置的目标状态,分别填充head.t和head.child Tree,即把迁移至的状态作为head的子节点;同时置好各个子节点的属性值,node Level=head.node Level+1,从root节点开始层次遍历测试树(从第0层至head.node Level层),如果在head的子节点中存在某个节点n,其所对应的状态已经在第0层至head.node Level层中出现过,则该节点n不再扩展,即为叶子节点。把其他没有出现过的子节点加入到队列的尾部。

4)head指向队列中的下一个节点,重复第二步,直至队列为空。

在3)中,如果某个迁移对应的目标状态已经在测试树中出现过,就不再考虑这个状态,不加入到队列尾部。这样有效地避免了重复构造节点,同时又不降低测试的覆盖率。通过上述步骤就可以构造出UML状态图对应的测试树。

复合状态树构造算法能很好的支持多个并发的子状态的情况,只是节点表示为并发子状态的合集;如果某个事件触发其他事件从而引起一系列的状态迁移时,只要把最终的状态作为节点加入到测试树中。比以往的插入桩模块更容易实现。

通过测试树可以很容易的构造出测试用例。从根节点开始沿着各个分支往下知道叶子节点,每条这样从根节点开始到某个叶子节点结束的路径上的事件按顺序组合在一起,就成为基于对象状态测试的一个测试用例。如果增加对象属性可以很容易的在复合状态测试树中增加,增加属性后可以把状态的复杂度控制在和状态属性相关的线性级别,测试时不仅可以单独的对对象的每一个属性和所有属行进行测试,也可以对对象的所有属性任意选择组合进行测试。大大增加了测试的灵活性。

5 结束语

UML的状态图支持潜逃和并发,把状态的复杂度控制在和状态属性相关的线性级别;其次UML状态参数图是在面向对象软件开发的生命周期中的早期设计阶段确定的,是对对象状态的完整的描述,并不依赖于源代码,既保证了状态描述的完整性,又可以在开发早期进行测试,尽早发现与状态相关的错误,避免将错误带入到后面的开发阶段。因此可以用UML的状态图来产生有效的测试用例,这大大提高了测试的灵活性和有效性。

参考文献

[1]张克东,庄燕滨.软件工程与软件测试自动化教程[M].北京:电子工业出版社,2002.

[2]刘金艳,蔺娟茹,尹治本.面向对象软件测试的探讨[C]//2002年全国软件与应用学术会议(NASAC)论文集.北京:机械工业出版社,2002:262-266.

[3]杨小平.面向对象软件测试探讨[J].计算机工程与应用,2000,36(1):44-46.

[4]姬莹,罗钧昊,钟联炯.面向对象软件测试主要问题的探讨[J].西安工业学院学报,2001(1).

[5]Fewster M,Graham D.软件测试自动化技术与实例详解[M].舒智勇,译.北京:电子工业出版社,2000.

[6]叶仁召,郑玉墙,鲁汉榕.面向对象软件测试及度量的研究[J].计算机工程与设计.2001,22(4):21-24.

面向不同对象的双语教学探索 篇5

摘 要: 文章结合电磁场与电磁波双语课程,论述了专业课程双语教学,在面向普通高等院校学生与中外合作项目学生时,其目标、性质、教学模式区别,以及在实施过程中遇到的问题和解决办法。

关键词: 双语教学 普通高等院校学生 中外合作 教学模式

引言

国家为了推动高等教育与国际接轨,鼓励高校开展双语课程教学历来已久。全国开设双语课程教学的高校非常多,研究双语课程教学模式的学者也很多。高校中双语课程实施的对象可分为两类,一类是普通高等院校学生,包括本科生与研究生;另一类为中外合作办学学生。面向这两类学生,在实施双语课程教学时,教学的性质、目标、教学方法都有所不同。

“电磁场与电磁波”是电子信息类专业和通信工程类专业一门重要的专业基础课程,也是“微波技术”和“光纤通信”等课程的基础。其内容在移动通信、微波通信、光纤通信、射频电路、高速集成电路等相关领域有着广泛而深入的应用。本文以“电磁场与电磁波”双语课程教学为例,分析普通双语课教学与中外合作中双语课程教学的区别。

1.普通班级专业双语课程教学

高校中普通专业双语教学的目标是在各专业领域培养既有较高的英文水平,又熟悉专业的人才。面向此类学生,多数高校采用的教学方法是汉语与外语混合授课模式,考虑到多数学生的外语口语和听力能力较弱,为了帮助学生掌握专业知识,往往先外语后汉语翻译。因为在制定该课程教学目标时把对专业知识的掌握放在首要位置,而外语能力的提高则放在其次。大多数学生在国内完成学业,双语课程仅仅使得学生在一定程度上提升了英语水平、扩大了英语词汇。因此,中外合作办学的双语课程与普通双语课程的性质是不一样的。

目前我们学校的“电磁场与电磁波”课程还没有在普通本科班级开设,但本课题组成员已经在积极准备中,对多个高等院校的双语教学进行了调研。对本校的通信工程专业本科生进行了“电磁场与电磁波”双语课程教学意愿调查,其中有调查项:92%的学生愿意实施双语教学;85%的学生认为自己的英语能力会妨碍对专业知识的理解,学生普遍认为自己的听力能力、口语能力较弱,专业词汇量较少。课题组成员针对这些问题提出了措施:听力能力与口语能力的提高是日积月累的事情,重在坚持锻炼。在初始阶段,教师的授课方式主要以混合模式为主,并录制相应教学视频,让学生能够课后进行相应复习,同时教师要制定合理的考核机制起到监督作用。其次,在教学过程中,对课程每一段落讲解结束后,把章节总结任务交给学生,鼓励学生积极参与并分组讨论,每组学生用英文提炼章节的重点和难点,再总结结论,从而提高学生口语能力;针对专业词汇量问题,课题组成员已经制定了专业词汇手册,按专业知识点类型分类,并非以往的按字母分类。在专业词汇教与学过程中,可将传统的大学公共英语教学手段与专业双语课程教学方法相结合。

2.中外合作项目中专业双语教学

目前国内高校的中外合作项目多数采用的是“3+1”或“2+2”模式,即前两年或三年在国内完成一定量的课程学习,成绩合格者可申请到国外完成剩余的学业。出国学习后,他们要面对的是纯外语的生活和学习环境,国内的双语课程教学可以使学生提前体验国外的语言环境、教学环境和教学模式,因此,在中外合作办学中,双语课程起到了过渡、引导的作用,同时为学生出国留学打下了坚实的基础。此时,专业双语课程授课目标应该是把专业知识的掌握与外语能力的提高放在同等位置。因为中外合作的学生多数已经进行过雅思培训或其他类出国外语培训,所以他们的外语能力相对普通学生较强,此时授课模式可由混合模式逐步向全外语模式过渡。

在我校的中外合作项目中,电磁场与电磁波双语课程已开设三届。该课程采用国外的原版教材,用外语完成作业,教学过程中采用外文课件,考核采用外文试卷,教学模式在一个学期中由混合模式逐步向全外语模式过渡。学生在潜移默化中习惯用外语思维组织语言、表达想法。这部分学出国后无论在专业知识方面还是语言能力方面,都受到外方的一致好评。但在该课程实施过程中,也存在一系列问题:(1)教学模式过渡到纯外语模式时,部分学生跟不上老师的节奏,甚至完全听不懂,再加上“电磁场与电磁波”课程是一门理论性抽象性非常强的专业课,学生就失去了学习兴趣。针对这一问题,在纯外语过程中可以将一些知识点的关键字进行反复强调,并在黑板上列出来;督促学生进行预习,提前了解老师讲解内容,有助于课堂上理解。(2)虽然大多数学生英语词汇量还可以,但因为没有接受过专业词汇的学习,所以在专业课程学习中,因专业词汇陌生或理解不准确而无法顺利掌握专业知识点。针对这一现象,在课堂教学中我们及时调整教学内容安排,花费一定的时间对专业词汇进行讲解。不论是面向院校普通学生还是中外合作学生,专业词汇的教与学都应该是基础,但在教学内容时间安排比例上应有相应区别。

结语

针对不同的授课对象,专业课程双语教学在教学目标、教学模式上都应该有所区别。目前随着教改课题的深入研究,结合近几年中外合作中“电磁场与电磁波”双语课程的实践,对教学模式探索,发现问题并提出相关措施,从而完善了双语教学,提高了教学质量。面向普通班级学生的该课程双语教学,课题组成员在积极准备探索中,明确授课对象的不同,在制定教学目标、采用教学方法都要因材施教。

参考文献:

[1]支绛.专业课程双语教学的思考与探讨[J].中国高等医学教育,2016,2:26-27.

[2]丁琪,张权.提高高校双语教学质量的对策[J].江苏高教[J].2013,5:90-91.

[3]许冬瑞,范东生.中外合作办学双语课堂教学模式的探究[J].教育艺术,2016,11:293-294.

[4]李强.卓越工程师培养背景下土木工程专业课程双语教学的实践与探索强[J].教育教学论坛,2016,6(25):169-170.

[5]王俊.探究式学习:改善高校双语教学实效的一个新思路[J].江苏高教,2013,2:68-69.

[6]蔡毓.关于高等学校通信电子及计算机工程类双语教学的思考[J].外语教学,2016,05:190.

面向对象软件测试简述 篇6

当今软件开发的主流技术还是面向对象的软件开发技术,面向对象技术所独有的多态,继承,封装等新特点,产生了传统语言设计所不存在的错误可能性。比如类的封装机制就给软件测试带来了困难,它把数据和操作数据的方法封装在一起,限制对象属性对外的可见性和外界对它的操作权限,从而有效地避免了类中有关实现细节的信息被错误地使用,而这样的细节性信息正是软件测试所不可忽略的。

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).

面向对象的软件类测试技术的研究 篇7

随着面向对象技术的广泛应用和发展,软件测试技术也在逐步成熟。在传统软件测试中,软件测试工作仅是对简单计算机代码进行“调试”工作。而随着面向对象技术的提出和应用,传统的软件测试技术已经无法满足面向对象技术中关于多态、继承、封装等特点的要求,从而提出了面向对象软件测试技术。

在面向对象技术中,最重要的概念就是类。我们以往所使用的传统测试方法,是一种面向过程的测试方法,只完成对方法的测试,并不适用于面向对象技术中类的整体测试。因此,在面向软件测试技术中,提出了类测试的概念。本文将从类的特点出发,对面向对象的类测试技术作进一步的研究。

2 类测试技术

类测试是针对面向对象技术中类的概念而提出的,其目的是为了保证一个定义的类能够完成其定义以内的功能,确保类中方法的实现,将类的使用风险降到最低。

类测试按测试的顺序可分为以下三个部分:

1)基于服务的测试:测试类中的每一个服务;

2)基于状态的测试:考察类的实例在其生命周期各个状态下的情况;

3)基于响应状态的测试:从类和对象的责任出发,以外界向对象发送特定的消息序列的方法来测试对象的各个响应状态。如图1所示。

3 面向对象的软件类测试技术

类测试有很多种方法,如:等价划分测试、基于层次增量、基于服务、基于状态、基于流程、基于数据流的类测试。这里详细介绍基于服务的和基于状态的类测试,通过对这两种类测试的介绍,了解类测试的思想和方法。

3.1 基于服务的类测试技术

基于服务的类测试主要考察封装在类中的一个方法对数据进行的操作。类测试若采用传统的白盒测试,很可能会带来测试用例选取的盲目性。测试人员的个人喜好和倾向性,也会使得选取的测试用例存在一定的局限性。块分支图,作为一种基于服务的类测试模型,能够比较好的克服测试中的盲目性和局限性,保证软件测试的质量。

3.1.1 类的服务的测试模型

由Kung等人提出的块分支图(Block Branch Diagram,简称BBD)是一种性能比较好的基于服务的类测试模型,如图2所示。

服务f的BBD是一个5元组。BBD f=(Du,Dd,P,Fe,G)

其中:Du={di|di是f引用全局数据或类数据};Dd={di|di是f修改了的全局数据或类数据};P=X1θ1,X2θ2,…,Xnθn;Xn+1θn+1分别是f的参数表和函数返回值,θi为↓(表示输入)、↑(表示输出)或↓↑(表示输入/输出)。若Xn+1缺省,则无返回值;Fe={fi|fi是被f调用的其它服务}

G是一个有向图,叫做块体。它是按照控制流图的思想,修改f的程序流程图而来,表示了f的控制结构。f中的复合条件判断被分解,每个判断框只有单个的条件。

BBD通常有两种获取途径。一是采用逆向工程的方法,由源程序画出流程图构造出BBD。但这并不是最好的方法,当源程序不正确时构造出来的BBD是错误的。另一种途径是在软件的分析设计阶段构造出相应的BBD,能根本解决问题,正确指导类的服务的测试。

3.1.2 类的服务的测试策略

根据BBD模型,可对服务进行结构测试和功能测试两种测试。

1)结构测试:主要进行基本路径测试,根据软件过程性描述中的控制流程确定复杂性度量,然后用此度量定义基本路径集合,导出一组测试用例。

2)功能测试:等价类划分和边界值分析是两种很有效的功能测试方法。但这两种方法只针对数据集中的孤立数据进行测试,为考虑多组数据组合的情况,我们以判定表或判定树为工具,列出输入数据的各种组合情况和程序相应动作(以及可能的输出结果)之间的对应关系,为判定的每一列至少设计一个测试用例。

3.2 基于状态的类测试

同传统的控制流和数据流测试相比,对象状态测试侧重于对象的动态行为,这是一种依赖于对象的状态。当对象成员函数之间通过对象状态进行交互时可能会产生一些错误,测试对象的动态行为就可以检测出这些错误,基于状态的类测试就是这样一种通过测试对象的动态行为检测错误的测试方法。

下面举例使用状态转移图建立对象的动态行为模型,用以刻画对象响应各种事件时状态发生转移的情况。如图3所示,图中每个结点表示对象的某个可能状态,结点之间的有向边通常用“事件/动作”标出。当对象处于状态A时,若接收到考察事件e则执行相应的操作a同时转移到状态B。如此,对象的状态就随各种外来事件发生了变化,这是对象行为的一个重要方面。

基于状态的测试是检查对象的状态在执行某个方法后是否会达到预期的一种测试技术。对象状态的变化是通过对象的数据成员值体现出来的,实现对象数据成员值的跟踪监视,即完成了对象状态的检测。要检测对象多个数据成员的状态需要对对象的状态空间进行划分,这类似于黑盒测试中划分等价类的方法,并在对象的数据成员的取值域中找到特殊值和一般性区间,分别对其进行测试。进行基于状态的测试时,首先要对受测试的类进行扩充定义,增加一些用于设置和检查对象状态的方法。另一项重要工作是编写主控的测试驱动程序,如被测对象在执行某个方法时还要调用其他对象的方法,则需编写程序代替其他对象的方法。

4 结束语

面向对象软件类测试技术的研究是面向对象开发的重要一环。从目前对面向对象测试的研究现状来看,现有的类测试方法还存在一些问题。深入研究类测试技术,解决现有问题,对面向对象软件测试技术具有十分重大的指导意义。

参考文献

[1]赵荣利,崔志明,陈建民.面向对象软件测试的技术研究[J].苏州大学学报:工科版,2007,21(1):35-38.

[2]Grady Booch.面向对象分析与设计[M].冯博琴,冯岚译.北京:机械工业出版社,2003.

[3]朱少民.软件测试方法和技术[M].北京:清华大学出版社,2005.

[4]钱乐秋,赵文耘.软件工程[M].北京:清华大学出版社,2007.

面向对象的软件测试 篇8

关键词: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.

面向对象测试技术研究 篇9

“程序测试是为了发现错误而执行程序的过程”[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.

浅谈面向对象编程思想 篇10

关键词:面向对象;继承;封装;多态

中图分类号: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].华南师范大学学报

面向对象设计的软件工程开发分析 篇11

面向对象设计是一种软件工程方法学的发展主流方向之一, 当前被广泛应用, 其有效性在实际应用中也得到了证实。对于面向对象的方法, 以对象为基础, 在其中事物都是由对象构成的。对象有内部特征和运动规律并且分别与不同的对象彼此互动。在面向对象的方法中, 对象主要具有两方面的特征属性, 其中包括数据和操作, 分别对应于对象的内部属性特征以及其外部运动的规律。面向对象的方法使软件的开发以及其相关的维护工作更便利, 增强了软件的可重用性, 并且同时其生产率大大提高。

一、面向对象的设计与分析简要介绍

面向对象的分析过程中的主要的阶段包括:一是提取和抽象概括用户需求;二是模型的建立。而设计是将用户的要求转换成可实现的最优方案的过程。从分析到设计的过程是一个逐步扩充和完善在分析阶段中所建立的模型的过程, 二者虽然是两个不同的阶段, 但却是相辅相成互相制约和影响的。只有分析的准确, 才能建立适合的模型并很好地解决用户所提出的需求和问题。在一般情况下, 分析的结果会在一定程度上反映设计的结果, 而设计的阶段中又会反复理解分析的结果, 进而完善分析过程中的结果。

二、面向对象的软件开发方法

现在, 随着面向对象的技术的飞速发展, 当前出现了很多的软件开发方法。其中, 在面向对象的软件工程开发中, 比较常见且广泛应用的有OMT和Booch等方法。它们根据各自不同的特点被应用在不同的领域中。虽然UML方法在该领域的方法中占有重要作用, 但是这些面向对象的方法对于研究者仍然具有很关键的指导作用, 在实际应用和开发过程中, 综合考虑这几种方法在分析建模过程中具有重要的意义。

(一) Booch方法。

Booch方法是Grady Booch从20世纪80年代开始研究, 后来这个方法在实际的应用中得到了逐步的完善和改进。Booch方法可被分为两个主要的过程。面向对象分为微观和宏观两个不同的过程, 微观的过程通常包含:一是将类和对象抽象化, 从问题中挖掘类和对象, 确定实现对象功能的行为。二是建立抽象出来的类的状态和行为。利用类图建立识别对象和类的关系, 确定类对象的边界以及辨别出相互协同作用的类对象。三是找出设计最优的算法和数据结构来实现对象类与对象。在宏观软件工程的开发过程中, 为了方便进行风险评估和方便快速的修改, 在该过程中确定一些相应的成果和活动。宏观过程更注重风险和结构, 因此, 结构以及完整性等在该过程中显得尤为重要。其中包括:概念化和需求的建立。概念化过程中要求具有较强的创造性, 没有固定的模式, 该过程主要是建立核心的需求。在分析过程中需要提供软件开发所需要的模型, 在该过程中注重系统的行为, 以此来区分系统的功能特点。设计的过程中, 体统结构的实现很重要。

Booch方法是UML技术方法的基础起源。其中的概念有:类、对象、操作和继承等。其主要的模型分为逻辑的和物理的, 两类中都包含各自的静态和动态视图。Booch的主要优势有很强的表达能力, 并且其设计的迭代和增量的思想对很多软件工程开发的设计阶段的建模提供了重要的指导。

(二) OMT方法。

OMT (Object Modeling Technique) 方法是由Loomis, Shan和Rumbaugh最先提出的, 该方法目前在数据库的关系设计中得到了应用。随着不断的发展, 后来该方法应用于面向对象的分析和设计领域中。有了之前的实体和关系模型, 在这个方法中又进一步扩展了类、行为以及继承等。OMT方法主要有三种模型:一是对象的模型:表述对象的静态的结构 (e.g.类、属性) 以及它们之间的相互作用关系 (e.g.操作和继承等) 。二是动态的模型:描述系统动态的变化特点, 例如:随时间的变化等。其主要的概念包括:状态和活动等。三是功能的模型:不同数据值之间在系统内的转换, 包括处理, 数据存储, 数据流和控制流的概念。OMT方法目前已得到广泛应用, 并且该方法在分析数据密集型的信息系统中占有重要的地位。

(三) UML方法。

目前, UML这种建模的语言其特点是有一个清晰、易于表达且功能强大, 在该领域包括了新的思路, 新方法和新技术。UML的模型包括静态, 动态, 系统环境模型等。此外, 交互式可视化建模工具所提供的代码等将模型转换成一种编程语言。例如:XMLDTD代码和JAVA代码等。还可以利用相应的工具和方法将这些代码逆向转换为UML。UML支持大部分面向对象开发过程, 它融合了之前建模技术的经验以及目前优秀的标准建模方法的特点。基于UML的建模可以分为静态和动态两种, 其中基于例图和对象图以及类图等创建的模型为静态的模型。然而, 基于状态图, 活动图等创建的模型为动态的模型。在大多数情况下, 一般采用这些对象模型的组合。由于类之间的关系为静态的模型, 对象之间的相互作用关系为动态的模型, 分别可以用类图和顺序图来描述这些状态以及它们之间的相互联系等。可视化建模是用直观的方式将模型描述出来的过程, 其中利用的基本信息是标准的图形元素。其中的一个重要的问题是选择合适的图形标注方法。比较常用的方法包括Booch, OMT以及UML。对象建模技术 (OMT) 图注方法则使用比Booch方法更简单的图形描述系统。UML方法融合吸收了之前建模技术的各种的经验和特点、方法和思想等。目前, UML是当今公认一种标准的建模语言, 并且近年来, UML技术不断发展完善, 融合了基于Web系统、数据的模型等新的思想。

三、面向对象设计的软件工程开发分析方法的优势

该方法的主要特点包括:对象是基本元素, 简单的对象组成复杂的软件对象, 对象又构成了系统;划分对象类, 不同的对象类对应各自的一组数据和方法;根据子类和父类来设定层次结构;对象之间可以相互联系。

面向对象的方法的优点有:更贴近人类的思维方式;具有较高的稳定性;可复用性强;易于大型产品的开发;方便维护。

四、结语

目前, 随着计算机硬件, 计算机应用的迅速发展, 计算机性能得到改善。然而, 在计算机的软件工程开发领域还面临重大的挑战。面向对象的软件工程方法, 由于它的先进性, 已被广泛应用于计算机技术领域且占据主流。用户的需求分析与设计阶段在这个过程中比较重要。面向对象的方法中非常重要的目标是合适地解决分析与设计过程中的复杂性同时提高其可重用性。因此, 当前软件工程开发分析领域面临的一个重点和难点是面向对象的分析与设计, 开发和研究应用性强, 可实现性以及复现性强的面向对象软件工程方法是一个重要的研究课题和方向。

摘要:随着计算机软件的规模以及它的复杂性不断迅速增长, 面向对象的软件工程方法成为当今软件技术的主要研究方向。本文主要针对这一问题, 首先简要概述了面向对象设计与分析, 然后探讨了主要的几种面向对象的软件开发方法, 最后针对其优点进行了进一步的概述和讨论。

关键词:面向对象设计,面向对象分析,软件工程开发

参考文献

[1] .胡家芬.思维导图在《C语言程序设计》语法教学中的应用研究[J].电脑编程技巧与维护, 2012

[2] .魏艳红.简单案例在C语言教学中的应用[J].现代电子技术, 2012

上一篇:阴道及宫颈管内下一篇:股票投资所得