面向对象的单元测试

2024-06-10

面向对象的单元测试(精选7篇)

面向对象的单元测试 篇1

0 引言

随着现代软件工程的不断发展, 人们对软件质量和生产力的要求越来越高。软件测试技术和框架复用技术作为提高软件质量和生产力的有效手段, 近年来倍受人们的重视。

传统的“黑盒”、“白盒”测试技术主要应用于面向过程的程序设计中。随着面向对象技术的发展, 这种技术已不能满足软件测试的需要。自动化单元测试框架应用于面向对象单元测试中, 通过它来实现单元测试自动化。

单元测试是对软件进行正确性检验的测试工作, 是软件设计的最小单位。单元测试的目的主要是发现每个程序模块内部可能存在的错误。程序员的基本职责是单元测试, 单元测试能力是程序员基本能力的体现, 程序员必须对自己所编写的代码认真负责, 软件的质量与程序员的工作效率直接受程序员单元测试能力高低的影响。

单元测试是一项很重要而且必要的工作。在实际工作中, 许多程序员并不愿意对自己编写的代码进行测试。软件开发的工作压力大, 大多数程序员们因为没有时间测试自己的代码, 使程序的代码质量得不到保证, 有些代码还需重新编写, 程序员根本没有时间对代码进行测试。自动化单元测试框架能够从根本上解决这个问题, 它可以使测试工作变得简单, 这样更有助于程序员进行代码开发工作。

1 自动化单元测试框架设计目标

自动化单元测试框架的设计应达到以下目标:首先, 框架简单, 可以使测试程序的编写更简化。框架使用常见的工具设计, 测试工作操作简单;其次, 测试框架应能够使除作者以外的其他程序员进行代码测试, 并能解释其结果, 即将不同程序员的测试结合起来, 且不发生相互冲突。最后, 测试用例可以复用, 可以以现有的测试为起点形成新的测试。

本文将以这些目标为指导, 讨论如何用以Kent Beck和Ralph Johnson提出的“模式产生体系结构”的方式来设计框架系统。自动化单元测试框架的设计思想是从0开始根据设计问题应用设计模式, 一个接一个逐步设计, 直至获得最终合适的系统架构。其中实现部分采用Java语言来实现, 并会使用UML图来表示各种类及类间关系。

2 面向对象自动化单元测试分析

自动化测试定义为:管理与实施各种测试活动, 包括开发测试脚本、执行测试脚本, 这样使验证测试需求更加方便, 通过这些脚本实现了自动测试, 可以把它称为自动测量工具。使用这种自动测试工具对增量软件集成测试提供了巨大的方便, 增加了巨大的价值。每一个新的构件可以重用先前开发的测试脚本, 即使需求和软件有变更, 作为一个重要的控制机制, 自动测试也能够确保每一次重新构建的稳定性与准确性。

3 面向对象自动化单元测试框架

自动化测试框架实质是一种自动测试工具, 单元测试的核心问题是实现测试自动化。一个完整的自动化测试过程通常包括5个测试活动, 分别是测试标识、测试设计、测试实现、测试执行与评估。测试用例针对被测试系统的各项功能准确地开发与设计, 而且每一个测试用例都要按顺序执行这5个测试开发活动, 测试开发活动如图1所示。

测试标识与测试设计这两个测试活动主要为智力活动, 分别标识测试条件和设计测试用例。测试执行与测试比较这两个活动属于比较机械的活动, 它们的功能分别为:执行测试用例、将测试输出结果并与期望输出结果值相比较。前两个活动决定了测试用例的质量, 后两个活动适合自动化。在单元测试中, 测试执行和测试比较这两个活动要重复多次, 测试标识与测试设计通常只执行一次。因此, 在单元测试过程中, 重复性的活动特别需要自动化执行。

4 自动化单元测试设计与实现

首先构建对象来表达基本概念:Test Case (测试用例) , 然后将对象发送到测试框架, 再由测试框架执行, 最后报告测试结果。

采用Command命令模式将一个请求封装成一个对象, Command模式可以为每一个操作生成一个与之对应的对象, 同时能够给出一个对应的执行方法。这样可以对多个用户请求进行排队, 也可以将多个请求记录到日志, 并使用不同的请求对客户进行参数化。具体实现方法如下:

其中的run () 方法为模式中的执行方法, 可以通过继承来重用该类, 为了便于在测试失败时能够识别出失败的测试, 每一个Test Case在创建时都要给出与之对应的名称, 这样即可判断出失败的测试。

图1展示了测试框架组成部分的快照, 也展示了应用于TestCase中的标记。

5 单元测试用例执行流程

在实际测试过程中, 构造参数或资源、测试、释放资源为测试的业务逻辑过程。例如, 在测试数据库的插入、更新、删除、查询等操作时, 首先要对数据库进行连接, 然后测试, 最后释放连接。这样, 在一个Test Case中有多个测试, 需要反复书写代码, 这增加了测试人员的工作量, 不符合设计目标。

建立测试支架即为所有的测试建立一个共同的结构, 可以解决以上问题, 初始化代码、测试代码和释放资源的代码均放在测试支架上, 每次运行测试代码之前, 首先都运行初始化代码, 最后运行释放资源代码。这样, 每一个测试都会和与之对应的支架一起运行, 而且测试结果互不影响, 每一个结果都不会影响其它的测试结果。这样便实现了代码的复用, 大大提高了软件单元测试的工作效率。

以上通过模板方法实现, 模板方法的Template Method静态结构如图3所示。

Template Method实现如下:

其中, setUp方法初始化测试信息, 如数据库的连接, cleanUp方法的功能是测试结束后释放资源。runTest方法的功能是进行测试业务逻辑。TestCase的方法的功能为进行测试逻辑框架的设计, run为模板方法。在这里, setUp和cleanUp可以被用来重写, 由框架来进行调用。

6 测试结果收集

创建对象TestResult来收集运行的测试结果, 实现代码如下:

UTF使软件开发者们更愿意接受测试代码的工作。有种种好处:UIT使测试用例的实现简单、一致且模块化;测试实现与执行的特性支持迭代、增量开发;重新运行测试包的便利使高频率的回归测试成为可能;同时它还能保证单元测试的持久性。此外, 单元测试框架UTF也是可扩展的, 例如, 利用Decorator模式, 可以不断向UTF添加新的功能;TestResult类也是框架的一个扩展点。客户能够自定义它们的TestResult类, 例如, HTMLT-estResult可将结果上报为一个HTML文档等。

摘要:以面向对象自动化单元测试的设计目标为指导, 结合面向对象自动化单元测试理论分析, 采用Kent Beck和Ralph Johnson提出的模式产生体系结构方式架构框架系统。运用模式设计体系结构的思想, 设计了一个用于面向对象软件单元测试的自动化测试框架。该测试框架易学好用, 能方便程序员开发测试用例, 保证测试用例的持久性和可复用性, 适合迭代开发单元测试。

关键词:软件工程,软件质量,单元测试,测试框架,面向对向程序

参考文献

[1] (美) 普雷斯曼.软件工程:实践者的研究方法[M].北京:机械工业出版社, 2011.

[2] (美) 麦格雷戈.面向对象的软件测试[M].北京:机械工业出版社, 2002.

[3]刘中兵Java研究室.Java Web核心框架[M].北京:电子工业出版社, 2009.

[4]刘伟.设计模式的艺术——软件开发人员内功修炼之道[M].北京:清华大学出版社, 2013.

面向对象的软件测试 篇2

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

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

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

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

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

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

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.

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

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

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

面向对象的单元测试 篇6

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

面向对象的单元测试 篇7

空中交通管制的业务主要包括了空中交通管制业务、飞行情报和告警业务, 作用是对在空中活动的航空器进行相应的管理和控制。主要任务是:防止航空器的相撞, 防止航空器跟附近空域中的同障碍物相撞, 同时对空中的交通秩序进行维护, 进而保障空中交通的畅通, 从而能够保证飞行的安全以及提高飞行的效率。空中交通管制的方法主要是程序管制和雷达管制两类, 程序管制主要是根据飞行员对飞行的位置和状态进行及时的报告, 管制员依据报告进行简单的分析和预测飞行中可能出现的冲突, 同时通过管制指令给飞行员下达指令, 起到空中交通安全维护和空中交通流量加速的作用。雷达管制主要是对雷达进行二次监视来确定飞行的位置、高度、速度和航向等信息, 管制员对其进行分析和决策之后发出调度的指令, 从而对航空器安全有序的运行有着引导作用。程序管制是雷达管制的基础, 雷达管制相比程序管制显得更高效。由于空中交通管制系统本身具有的复杂性, 传统的面向过程开发方法已不能够满足空中交通管制系统开发时的需求, 因此, 面向对象技术的选用显得很重要。

2 面向对象的测试技术

2.1 空管系统的类测试

在以往的单元测试中, 由于每个程序块都可以完成一定的功能, 因此只需测试它的相关函数和过程就可以。根据单元测试这个理念, 在进行相关测试时其实际上是测试的类成员函数。而以往的测试方法则更多的是针对面向对象而进行的, 例如可以采用逻辑覆盖法、边值分析法以及因果图法等。如果程序是面向对象的, 那么这个程序一般都不是很大, 而且其功能也比较简单, 但是在不断调用这些函数时, 就难免会出现一些无法估计的错误, 比如在语句if (-1==write (fid, buffer, amount) ) error_out () ;中, 可以看出, 在对write子函数进行检查时, 发现其没有具体的返回值, 这就会导致这样的问题———数据是否写入。

面向对象的开发模型突破了传统的瀑布模型, 将开发分为面向对象分析 (OOA) , 面向对象设计 (OOD) , 和面向对象编程 (OOP) 三个阶段。针对这种开发模型, 结合传统的测试步骤的划分, 我们把面向对象的软件测试分为:面向对象分析的测试, 面向对象设计的测试, 面向对象编程的测试, 面向对象单元测试, 面向对象集成测试, 面向对象系统测试。在传统的面向过程程序中, 对于函数y=Function (x) ;只需要考虑一个函数 (Function () ) 的行为特点, 在面向对象程序中, 你不得不同时考虑基类函数 (Base::Function () ) 的行为和继承类函数 (Derived::Function () ) 的行为。

面向对象程序的结构不再是传统的功能模块结构, 作为一个整体, 原有集成测试所要求的逐步将开发的模块搭建在一起进行测试的方法已不可能。面向对象软件测试是根据面向对象的软件开发过程结合面向对象的特点提出的。它包括分析与设计模型测试技术、类测试技术、对象交互测试技术、类层次结构测试技术、面向对象系统测试技术5大部分。OOA中认定的对象是对问题空间中的结构, 其他系统, 设备, 被记忆的事件, 系统涉及的人员等实际实例的抽象。对它的测试可以从如下方面考虑:

(1) 抽象的对象是否全面, 是否问题空间中所有涉及到的实例都反映在认定的抽象对象中。

(2) 认定的对象是否具有多个属性。只有一个属性的对象通常应看成其他对象的属性, 而不是抽象为独立的对象。对认定为同一对象的实例是否有共同的, 区别于其他实例的共同属性。

(3) 对认定为同一对象的实例是否提供或需要相同的服务, 如果服务随着不同的实例而变化, 认定的对象就需要分解或利用继承性来分类表示。

(4) 认定的对象的名称应该尽量准确, 适用。结构表示问题空间的复杂程度。标识结构的目的在于管理问题域模型。在OOA中, 结构是指泛化-特化结构 (is a) 和整体-部分结构 (has a) 两部分的总和。对于结构中的一种对象, 尤其是处于高层的对象, 是否在问题空间中含有不同于下一层对象的特殊性可能, 即是否能派生出下一层对象。对于结构中的一种对象, 尤其是处于同一低层的对象, 是否能抽象出现实中有有意义的更一般的上层对象对所有认定的对象, 是否能在问题空间内向上层抽象出在现实中有意义的对象;高层的对象的特性是否完全体现下层的共性;低层的对象是否有高层特性基础上的特殊性;主题是一种知道研究和处理大型复杂模型的机制。有助于分解系统, 区分结构, 避免过多的信息量同时出现所带来的麻烦。主题的确定可以帮助人们从一个更高的层次上观察和表达系统的总体模型。主题如同文章对个部分内容的概要。属性是用来描述对象或结构所反映的实例的特性。而实例关联是反映实例集合间的映射关系。

2.2 空管系统的类簇测试

静态测试, 主要对程序的结构进行检测, 考察程序的结构是否满足设计的要求。现有的一些测试软件都可以提供一种称为“可逆性工程”的检测功能, 即通过原程序所得到的类关系图和函数功能来调用关系图。

动态测试, 对用例进行设计测试时, 一般是需要上述的功能来调用结构图、类关系图或者实体关系图, 将这些关系图作为参考, 进而确定不需要被重复测试的部分, 从而达到优化测试用例的作用, 同时减少测试的工作量, 使测试能够达到一定的覆盖标准。

2.3 空管系统的系统测试

系统测试的测试平台应该尽量与用户实际的使用环境想接近, 同时要保证被测系统具有完整性, 暂时缺少的系统设备部件, 也应该有相应的模拟手段。对空管系统进行最后的系统测试阶段, 应该从不同的方面来对空管系统进行测试。然而, 系统测试的正确性关键在于测试平台的模拟环境是否与实际的使用环境具有一致性。

空管系统的模拟测试环境与实际环境的相近是很关键的, 主要体现在以下两个方面:一方面, 首先对雷达数据进行模拟信号的产生, 该模拟的雷达数据主要是通过通讯数据转换卡进行获取的, 通讯数据来自本地与异地雷达的信息交换, 然后对雷达目标的信息进行实时探测, 多雷达进行数据获取同时进行融合产生飞行器的航迹;另一方面, 对飞行情报的数据进行模拟信号的产生, 该模拟数据主要是通过飞行情报网 (FIN) 获得的, 利用航行信息数据库来进行翻译各种报文, 根据报文信息对飞行计划进行及时的处理和调整, 最终完成动态飞行航迹的关联系统测试, 将处理的结果进行分析并生成飞行器的轨迹信息以及飞行的一些统计数据, 管制员同时还将制定的飞行信息发送到对应的管制中心。

3 结束语

随着我国经济的快速稳定发展, 民航运输事业的不断发展, 本文通过对空中交通管制系统的介绍和分析, 对空中交通管理系统中的面向对象测试技术进行分析。由于空中交通管制系统本身具有的复杂性, 传统的面向过程开发方法已不能够满足空中交通管制系统开发时的需求。空中交通管制系统的发展, 依赖于众多的工程技术和学科的进一步研究和发展。目前, 面向对象的技术是比较适合空中交通管制系统的软件工程方法。

摘要:随着我国经济的快速稳定发展, 民航运输事业的不断发展, 空中交通管制系统在航空部门的空中交通控制和管理系统中也得到了广泛的应用, 主要用于管理飞行事务, 防止发生飞行交通事故。通过对空中交通管制系统的介绍和分析, 对空中交通管理系统中的面向对象测试技术进行研究。

关键词:空中交通管制,面向对象,技术,研究

参考文献

[1]施凤鸣.基于UML状态图的类测试用例自动生成方法, 2003.[1]施凤鸣.基于UML状态图的类测试用例自动生成方法, 2003.

上一篇:读后作业下一篇:半导体制冷技术应用