面向对象测试方法在观测控制系统中的应用

2024-12-18 版权声明 我要投稿

面向对象测试方法在观测控制系统中的应用

面向对象测试方法在观测控制系统中的应用 篇1

面向对象测试方法在观测控制系统中的应用

介绍了面向对象测试方法在观测控制系统(OCS)中的应用.与OCS开发过程和模型相对应,介绍了迭代的面向对象的测试过程,在过程中相应于面向对象的基于组件的开发方法,应用面向对象的.测试方法,提出适合OCS的方法和内容以及OCS的测试重点,包括各开发模型的测试,与子系统的接口测试,应用组件的测试,体系结构的测试.

作 者:王坚 黄鲲 任间 朱利平姚仰光 刘光曹 袁海龙 金革 WANG Jian HUANG Kun REN Jian ZHU Li-ping Yao Yang-guang LIU Guang-cao YUAN Hai-long JIN Ge 作者单位:安徽省物理电子学重点实验室,中国科学技术大学,合肥,230026刊 名:核电子学与探测技术 ISTIC PKU英文刊名:NUCLEAR ELECTRONICS & DETECTION TECHNOLOGY年,卷(期):27(2)分类号:P111.2关键词:观测控制系统 面向对象的测试 测试过程 测试方法 模型 接口

面向对象测试方法在观测控制系统中的应用 篇2

1 面向对象的机械CAD的建模

1.1 建模思想

面向对象方法的核心思想是将一切客观实体都看成对象, 复杂的对象可由较简单的对象以某种方式组合而成。客观世界是由许许多多的对象所组成的, 每种对象都有其自身的状态和改变其状态的运动规律。面向对象利用“抽象数据类型”对客观世界进行拟合, 在对象 (模块) 中, 用数据来描述现实世界中对象的状态, 用处理过程 (操作) 来描述其状态的改变规律, 相似的对象抽象为类, 类由数据和操作组成, 对象由类来生成并自动拥有类所定义的特性。对象之间通过消息传递来实现相互作用与联系, 在某一时刻, 对象和对象间的联系构成了设计问题空间该时刻的既定状态。当对象与对象之间通过消息传递发生相互作用时, 即引起对象状态的变化, 状态的有序变化就使得问题空间从初始状态过渡到目标状态, 从而可以实现设计问题的求解。

1.2 建模分析

面向对象的机械C A D的建模分析, 是将面向对象技术应用于待开发的机械产品的建模领域, 从问题空间出发, 以对象作为基本概念, 通过对象的确定、分解和分类, 建立能用来进行面向对象系统分析的对象关系图。比如针对减速器设计, 通过对象间的组成关系分析, 可将复杂对象分解为较简单的对象, 得到图1所示的减速器结构分解图, 其中底层是不必再分的基本元素。

对各基本元素按对象的抽象程度不同, 确定类属关系, 例如, 齿轮类包括直齿圆柱齿轮、斜齿圆柱齿轮、圆锥齿轮等子类;从基本元素的特征分析入手, 通过数据结构抽象和行为抽象, 描述对象的静态属性和动态属性 (以齿轮类为例) , 如图2所示。这样便得到了减速器对象的类层次结构模型。

2 面向对象建模过程

建模的过程实际上就是一个分析的过程, 面向对象分析过程分为标识主题、标识对象、标识属性、标识结构、标识服务五个步骤, 完成五个步骤的工作便可确定组成机械系统的对象、系统的结构、系统中各成分对象之间的联系和相互作用以及系统与外界的联系等,

2.1 标识主题

根据系统的层次性, 为更好地揭示系统内各要素之间的联系和相互作用, 必须确定主题。

专业工程中对系统的“整体—部分”结构的划分是我们标识主题的基础。对减速器系统而言, 减速器成为最高层次抽象的主题, 而减速器又可看成是由联接部件、传动部件、轴系部件及其它附件组成, 这便可构成次一级层次的主题抽象。同样, 我们可以逐次往下, 不断增加细节, 形成较低层次的主题。

2.2 标识对象

对象是一组信息及其上面的操作的描述, 标识对象一般从问题空间、文字资料和图片资料入手。对减速器设计c a d系统而言, 首先从各种类型的减速器装配图入手, 由装配图明细表大致圈定有可能成为对象的名词, 然后根据设计手册和其它有关设计资料剔除类型相同的部分, 剩余的就是我们要标识的对象。这样, 我们可以标识出螺栓、螺母、垫片、键、销、齿轮、蜗轮、轴承、挡圈、套筒、毡圈、密封圈、箱体、轴承盖、套杯、视孔盖、油标、起吊螺钉、通气塞、油塞等对象。

2.3 标识属性

每一个对象不同于其它对象的独有的特征描述参数都有可能成为该对象的一个属性。比如螺纹联接件可分为螺栓、螺钉、螺母、垫片等几类, 其描述参数有国标号、直径、长度等, 通过分析可知, 其共有属性为国标号和直径, 而长度则为螺栓和螺钉的专有属性;再比如齿轮可分为圆柱齿轮和圆锥齿轮, 圆柱齿轮又可分为直齿圆柱齿轮和斜齿圆柱齿轮, 其共有的描述参数为齿数、模数、压力角、齿宽系数等, 而斜齿圆柱齿轮和圆锥齿轮还需要用当量齿数来描述, 依此法可逐步确定各级齿轮转动乃至整个减速器系统对象的属性。属性用以描述对象的状态, 刻画一个对象与其它对象的映射关系, 则通过实例连接。对减速器而言, 实例连接在轴的结构设计中表现得最为突出和明显。比如一根轴和一个齿轮之间的装配关系就可以定义成一个一对一的实例连接, 通过实例连接来保持轴的外径和齿轮轮毂孔内径大小的一致以及齿宽同与之配合轴段长度的一致等。

2.4 标识结构

每一个标识出的对象都可以抽象出一个抽象数据类型, 标识结构就是要标识出系统对象和各实例对象之间的共性结构, 从而求出整个系统的“数据结构”。确定结构对于系统各要素之间的联系和相互作用而发生的通信十分重要。结构可分为分类结构和组装结构, 对机械c a d系统而言, 标识对象的组装结构 (整体—部分结构) 的最佳策略是仔细分析机器的总图和各部分的总成图, 而标识分类结构 (一般—特殊结构) 则要依赖于行业知识。对减速器而言, 由总装图我们可以看出整个减速器是由螺栓、键、齿轮、轴、箱体等许许多多零件组成, 这就构成一个组装结构;而由机械方面的知识可知, 键可分为平键、半圆键、楔键等, 这便构成一个分类结构。依此类推, 可以标识出整个减速器的结构。

2.5 标识服务

服务是指对象收到一条消息后所执行的处理。定义服务也就是要定义对象的行为和对象之间的必要通信。定义服务可以先从属性入手, 完成标识对象状态、标识服务和标识消息连接等几个方面的工作。在减速器c a d系统中, 定义服务是一项非常繁琐的工作, 必须细致考虑对象的行为和对象同系统其它部分的处理相关性。以齿轮结构设计中与轴之间的一个消息连接为例, 在齿轮的结构设计过程中, 由于要确定齿轮和轴配合处孔径大小, 要向轴发出一个消息询问轴径大小, 轴再响应这条消息将轴径大小反馈给齿轮, 齿轮据此完成其结构设计;轴段长又需齿轮轮毂设计确定之后传给轴才得以确定。

3 面向对象机械CAD特性分析

3.1 抽象性和封装性

面向对象采用了数据抽象技术, 它限制程序对一个对象的数据访问, 只能通过其公共界面, 而不允许直接操作其数据, 这就意味着改变数据的内部表达而不影响使用该数据的程序。这主要是通过封装来实现的。比如减速器中滚动轴承的设计, 用户只需关心轴承的型号, 而轴承型号的选择可运用相应的规则通过推理来完成, 这便需要将有关轴承类型选择知识的产生式规则作为特殊的属性封装进轴承类中, 该规则由推理机来触发, 而推理机函数的具体实现用户不用关心, 用户只需了解其所提供的接口方式及如何向其发送消息即可。选择了型号, 便对应一系列的参数 (如内、外径, 宽度, 额定静载荷, 额定动载荷等) , 各参数与型号的对应关系通过操作函数来实现, 这些函数的实现细节都隐藏在系统内部, 用户也毋须关心。封装性保证了程序的安全可靠, 当系统不正常时, 只能是对象的操作函数出了问题, 使程序维护容易。由于模块对外接口关系简单明确, 减少了模块间的耦合度, 更易实现程序的模块化, 提高了模块的可组合性和可复用性。

3.2 继承性

继承性是父类和子类之间共享数据和方法的机制。在减速器设计中, 据其组成关系可划分为齿轮类、轴承类、轴类和箱体类等。圆锥齿轮类是齿轮类的一个子类, 它可继承齿轮类的属性和操作, 再针对自身的特征, 增添相应的属性和操作, 便得到圆锥齿轮类的定义, 如图3所示。也可对从齿轮类继承来的属性和操作进行修改和重置, 以适应自身的情况。当编号取某一具体值时, 齿轮类便实例化为一个具体的齿轮对象。通过对象间的相互作用, 使各对象的各个属性项都有确定的值, 或使不合适的值得以调整, 逐步逼近目标状态而使设计问题得以求解。

3.3 多态性

面向对象的多态性是指不同的对象收到同一消息时可产生完全不同的结果, 即同一消息可调用不同的方法, 而方法实现的细节是由接收消息的对象自行决定的。所以多态性又被称为“同一接口, 不同执行过程”。如减速器设计中, 不同齿轮对象 (如直齿轮、斜齿轮、圆锥齿轮等) 都有诸如分度圆直径、齿顶圆直径、齿根圆直径等几何尺寸的计算以及接触强度、弯曲强度计算等, 这些计算是类似的, 但具体的实现过程却不同。在传统的结构化设计中, 这些操作都被赋予不同的名称, 以便区分。这样对同一类操作就会有多种函数名, 易造成设计者的混乱。而利用面向对象的多态性, 将不同对象的强度计算均用同一个函数名, 而不管它属于哪一个对象, 只是各对象自身内部的计算过程不同而已。这对于提高系统的通用性及方便设计者的工作是大有益处的。另外, 多态性非常便于系统的扩充, 如若增加了圆弧齿轮类, 并不需要更改接口形式, 仍采用相同的函数名, 而只需在圆弧齿轮类内部实现其具体的计算过程即可。

4 结语

在机械设计过程中, 将大量复杂而繁琐的设计计算、图表查询等任务交给计算机去完成, 是机械C A D系统要完成的主要工作之一。过去, 这种C A D系统的开发均采用面向过程的建模方法, 用这种方法所得到的程序提供的一个面向工程的减速器设计计算程序, 不仅可读性差, 更致命的是条件稍作更改, 程序要作相当大的变动, 且可扩充性及可维护性差。面向对象技术应用于这类系统之上, 是机械C A D系统今后发展的方向之一。适应这一发展要求, 进行机械C A D系统面向对象建模方法研究具有重要的意义。

摘要:面向对象技术具有信息隐蔽、数据抽象、动态约束和继承性等特点, 在处理复杂问题方面具有很强的能力。面向对象中“类”的概念, 反映了人类认识事物从特殊到一般的归纳抽象, 而继承性则实现了从一般到特殊的演绎过程, 这近于人类的一般思维活动。面向对象的程序设计方法是开发软件系统行之有效的方法, 将其方法用于CAD系统的设计, 可提高软件的可重用性、可扩展性和可维护性。

关键词:面向对象,机械CAD,建模,特性分析

参考文献

[1]陈举华.机械零部件计算机辅助设计[M].北京:机械工业出版社, 1996.

面向对象测试方法在观测控制系统中的应用 篇3

1.简述面向对象软件测试和传统软件测试的不同。

答:面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同于传统软件测试的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因为:

a)测试的对象不同:传统软件测试的对象是面向过程的软件,一般用结构化方法构建;面向对象测试的对象是面向对象软件,采用面向对象的概念和原则,用面向对象的方法构建。

b)测试的基本单位不同:前者是模块;面向对象测试的基本单元是类和对象。c)测试的方法和策略不同:传统软件测试采用白盒测试,黑盒测试,路径覆盖等方法;面向对象测试不仅吸纳了传统测试方法,也采用各种类测试等方法,而且集成测试和系统测试的方法和策略也很不相同。

2.简述面向对象软件测试的策略。

答:(1)分片测试:分片测试测试某种规约片,测试所有状态、所有事件或者所有动作的规约的测试方法。这种测试策略因为其控制行为的状态机的结构不直接相关,所以只能偶然地发现行为的错误,但是测试代价比较少。(2)所有转换测试:所有转换测试就是在一个面向对象的系统的交互过程中,对状态、事件,以及状态转换约束条件,三者构成的一个笛卡儿集合<状态,事件,约束>中的每个元素都进行测试,即测试所有的转换。在测试过程中,没有执行顺序的要求。(3)所有往返路径测试 往返路径指的是程序从某一个状态开始,经过一系列的转换回到开始的状态,所有的转换的序列构成了一个往返路径。最短的往返路径只需要经过一个转换回到原来的状态,即该状态是闭包的。往返路径的长度决定于状态机的结构。对所有往返路径的测试,将测试每个状态的所有往返路径,于是就得到一个往返路径覆盖。(4)状态标识测试:在一个不透明的系统中,无法直接观察到程序的状态。虽然可以检测事件和动作的错误,但当一个错误的状态产生时往往很难检测出来,因为从控制的角度来看,当错误的状态多于系统正确的状态时,一个错误的状态很容易隐藏起来。状态标识就是用来确定被测软件的当前状态的。一个状态标记是由输出动作的序列组成。通过对被测软件的状态进行规约,可以选择能够产生标记的事件序列来标识一个状态。判断系统是否处于一个正确的状态,就可以通过事件序列来判断,看这一过程中是否产生了期望的标记。(5)N+测试:测试基于展平的状态(正则表达式)设计模型,每个状态有一个转换。N+的测试把被测软件从初态带到一个叶子状态,达到路径覆盖。N+测试会发现更多的错误状态和不正确转换。3.简述面向对象的集成测试中由继承导出数据流的方法。

答:考虑定义了数据项值的继承树,在这种树中,考虑定义了值的数据地点开始,到树“尾”结束的链。这种链将是一种替代数据地点序列,并退化方法执行路径,方法执行路径在链中实现面向对象语言的继承机制。这时描述继承的EMDPN仅由数据地点和方法执行路径组成。

4.简述面向对象软件的系统测试中基于UML的测试方法。答:将表示设计的协作图作为测试模型,并从中提取相关信息生成用于测试所描述的行为的集成测试用例。首先通过遍历每条消息的直接后继识别协作图中的表示用例实现的所有可能的场景路径,然后在遍历每条场景路径的过程中获取相应协作执行的路径条件、参数变量和预期方法调用序列,最后使用范畴-划分方法确定场景路径上的输入、输出、环境条件的合理组合作为覆盖该场景路径的测试用例,用于测试一个协作场景路径上的交互行为。

面向对象测试方法在观测控制系统中的应用 篇4

虽然软件复用的定义很模糊,但是至少包含了两种含义,一是软件模块的复用,二是软件的可修改性,它们也可以概括为软件的复用。软件模块的复用可以使得编写的逻辑模块在实现一次的情况下,到处可用,逐渐发展为组件化编程;软件可修改性使得原有的程序和代码可以不因用户需求的改变而重写。

从面向对象方法的思想和作用的角度,再加之参考语言角度分类,层层递进,面向对象的方法可以分为3类。抽象和封装,它包含抽象和接口、接口与实现的分离两层意思,两层意思都是基于封装的。前者描述和表达了概念,后者实现了描述现实逻辑和描述概念逻辑的分离。继承和功能的覆盖机制,它是继承和多态最基本的描述。另外还有消息驱动的作用,外部消息来驱动面向对象中的对象,因为这是个被动的概念。

2 设计模式

在软件开发中,一般有3个类型的模式:代码模式、设计模式和系统模式。代码模式指的是编程过程中各种编程技巧;设计模式协助完成系统的模式,主要实现系统功能;系统模式是设计整个系统结构。

设计模式是在特定背景下,描述解决一个设计问题的多个类及类与类之间的通信的对象的描述。一个设计结构的主要方面是由模式抽象和命名来确定的,这些设计结构是可复用的,可能在面向对象设计中得以应用。Alexander给出过模式的经典定义,每个模式都是对一个在某种环境下不断出现的问题和解决这个问题的方案核心的描述。有了这些模式,就可以省略许多重复的工作,高效利用现有方案。

设计模式的目的是对归类整理获得的知识和技能,利用以往多年软件工程实践为基础,成为了软件工程界发展较快的领域之一。

设计模式有很多优点,首先它展示的是一些解决重复出现的问题的经典方案,这些方案是在实践中检测过的。因为每一个设计模式都被系统命名,精确解释和客观评价,解决的也是实际中出现较多的问题,所以设计模式就可以被简单方便地拿来复用。

设计模式最大的作用发挥在分析模型转化为一个实现模型的时候。面向对象的分析向设计转化并不是非常容易的。一个好的可复用的设计会包含一些分析中不存在的对象,再加之使用的编程语言和不同的类库也会产生影响。这样,设计的复用就没有那么简单可以实现,多需要重新设计分析的模型。一个经典的好的设计方法除了包含设计模式外,还可以有用户界面设计模式、分析模式等其他类型的模式,然而,设计模式依旧是设计中最主要、最不可忽略的一个部分。

设计模式可以实现重构的目标。如果不使用设计模式,开发可复用软件时,就要重构软件系统。设计模式的作用在于不仅可以重新组织一个设计,还能减少以后重构工作。很多重构产生的设计结构都有设计模式记录,可以防止以后不必要的重构。在系统建成后,设计模式依然可以发挥作用,它可以修改已建成的系统,为以后的重构起到了目标和榜样的作用。

3 应用

在面向对象系统中应用设计模式时,是对面向对象的设计思想进行了扩展。

(1)封装的变化。对于新的需求在原有需求上发生变化的预见性是对大限度复用的关键,这样可以使得在需求发生变化时可以方便改进系统设计。重新设计的代价是非常大的,而一个不考虑系统需求变化的设计就有可能面对重新设计。为了把系统的影响尽可能降低,把那些可能变化的部分封装,当需求真的变化时,只需修改封装的部分即可。

(2)不对实现编程而是对接口编程。让变量遵守抽象类所定义的接口,而不是将它声明为某类的具体实例对象。客户不用知道所使用对象的特定类型,操纵对象时只是根据抽象类中定义的接口,只要对象有客户需要的接口即可。客户只要知道是哪个抽象类定义了接口,不用关心对象是用什么来具体实现的。这样,就可以大大地减少了各个子系统之间的相互依赖的关系。

(3)优先使用的不是类继承,而是对象组合。类继承无法在运行时改变父类继承来的实现,因为它是在编译时定义的。另外,它破坏了封装性,因为继承后子类就可以知道父类的实现细节。父类实现中的任何变化肯定会导致子类产生变化,因为子类的实现与父类有着非常紧密的关系,子类依赖父类,父类一般会定义部分子类的具体的表示。这样,当子类被复用时,如果由父类继承的东西不能够解决新产生的问题,那么只有将父类更换为另外一个合适的类,或者重写父类。因此,使得复用性被这种依赖关系限制,而且同时还限制了灵活性。相反,对象组合就不同了,它是在运行时候通过获得对其他对象的引用而动态定义的,这样的设计很灵活,也使得封装性良好,因为对象之间是通过接口来访问的。下面以单例模式来说明设计模式在面向对象软件设计中的应用。

单例模式是负责向整个系统提供对实例的访问,并在此之前自行实例化,以确保这个类在系统中只有一个实例存在。

单例模式的实现是通过覆盖InstanceNew和InstanceFree得到的。为了保证只是增加了对实例的引用而不是创建了新的实例,代码中还用到了对象接口的引用计数的机制来管理单例对象的实例。如果用户使用create创建一个新的实例,则InstanceNew就会扫描count_ref的值,若此值大于0,则表示实例已经被创建,只需要增加计数值即可,不需要创建实例。如果用户释放对象时,同样检查计数器的值,若该值不等于0,则说明还有对这个实例的引用,不能将其释放。

单例模式解决了资源竞争的矛盾,把资源变为串行访问代替并行访问。如果实现中资源容易产生冲突或者资源比较紧张,则单例模式是非常适合使用的。实际上,对于数据库管理系统来说,可以提供的链接数都比较有限,多个链接访问数据库,不仅会引起资源的竞争冲突,而且会使得系统负荷增加,有限资源利用率下降。再加之团队设计软件时,数据库访问量的增大,因此,在类似系统的设计过程中,单例模式是个非常好的选择。

有了单例模式,管理数据库链接就高效多了。可以在程序中建立一个链接对象,由它来提供数据库链接,并将其定义为单例类。因为链接类是单例类,只有一个实例可以用来被访问利用,这样就可以保证只有一个数据库链接被创建和占用,而其他模块是通过单例模式对象共享这个数据库链接。

4 结语

在面向对象系统中引入设计模式以后,系统各个模块间的相互依赖性大大降低了。这就意味着,可以修改或者替换任何一个对象,不必担心影响其他。这样改善了以往系统中高度耦合带来的修改不便,只要模块间的协作方式和组合关系不变,整个系统的运行就不会被影响。不必担心扩展会破坏系统原有完整性,就可以将系统方便地进行扩展,只要接口一致,就可以将已有模块方便地复用到下一个系统中,即便进行修改也是少量修改即可。在面向对象系统中引入设计模式,使得面向对象程序设计有了新的进展,也大大减轻了开发和维护人员的工作负担。

参考文献

[1]Erich Gamma,Richard Helm,John V1issides,等.设计模式—可复用面向对象软件的基础.机械工业出版社,2000.

[2]Bruce Eckel.JAVA编程思想.机械工业出版社,1999.

[3]James W.Cooper.JAVA设计模式.中国电力出版社,2003.

[4]王晓庆,曾文英.设计模式中的面向对象原则及其子模式[J].计算机工程,2003,29(9):192-193.

[5]孟祥文,邵维忠.设计模式特化和模式库组织[J].计算机工程,2002,28(5):36-37.

[6]刘艺.Delphi模式编程,北京:机械工业出版社,2004.

[7]张友生.软件体系结构.北京:清华大学出版社,2004.

面向对象测试方法在观测控制系统中的应用 篇5

面向对象软件的封装性、继承性、多态性和动态绑定等特性提高了软件的可重用性,使软件开发质量更高,而且软件易于维护,通过组装可复用子系统而产生更大的系统。但是面向对象软件的这些特性对软件测试产生了深刻的影响。集成测试的一个主要目标是确保某个类或组件对象的消息以正确的顺序发送和接收并确保接收消息的外部对象的状态获得预期影响。即便单独测试通过的类,其对象在参与协作时依然可能产生若干错误,如接口错误、功能冲突、功能遗漏等。只有对协作类的直接与间接交互进行测试才能尽可能地避免类集成给软件带来的错误[1,2]。

基于UML开发的模型图包含大量的软件分析设计信息,这些信息不仅是软件实现的依据,也是软件测试的重要依据。本文在UML类图信息的基础上,添加新的有助于测试的重要信息,然后将类图信息和添加信息存储到数据库中,最后对类的关键信息进行遍历,生成集成测试的测试序列。

UML的可视模型总共有九种图。例如,用例图从用户角度描述系统功能并指出各功能的操作者,包括活动者、用例和关系,类图属于静态视图部分,包括了类、接口及其之间的联系和关系[3,4]。其余的图有对象图,协作图,顺序图,状态图等。类图是面向对象设计中最重要的描述,其中包含的丰富的信息,为软件集成级测试提供了强有力的依据。为了解决测试场景中的问题,提出如下假定:

(1)类图描述的信息与UML中其余几种图中的相关信息描述的规约是一致的。

(2)系统中的所有模型中的信息内容均可以从UML文件中利用其接口获取。

(3)假定UML类图已经通过了一致性检查并且关于类图的一切均是正确的。

1 UML类图度量

一个好的类结构应该符合软件工程的定义,也就是要求类间的耦合度尽量小,类的内聚度尽可能大。这样才有助于系统的开发、测试、维护工作。

1.1 类内聚度计算

类的内聚度反映了一个类的内部各成分联系的紧密程度[5]。在UML类图中,类由类名、属性和方法三部分组成。属性又可以分为公有属性、私有属性和受保护属性。同样的,方法也可以分为公有方法、私有方法和受保护方法。

定义1:UML中的一个类可以用一个三元组表示,类=,其中:C_ID表示类的编号,C_NA表示类的名称,C_Co表示类的内聚度,用数字表示,本文中类的内聚度是属性内聚度和方法内聚度的综合,同时,计算的类的内聚度还可以为类级测试的次序提供线索,类的内聚度越高,越应该优先重点测试。

定义2:类的属性内聚度=类的私有属性的个数+类的保护属性的个数(包括从所有父类继承到的属性,但不包括类类型的属性)/所有属性的个数。值越大表明类的属性内聚度越好。

定义3:类的方法内聚度=类的私有方法的个数+类的保护方法的个数(包括从所有父类继承到的方法,但不包括返回为类类型方法)/所有方法的个数。值越大类的方法内聚度越好。

定义4:类内聚度=方法内聚度+属性内聚度。

1.2 类间耦合度计算

类间耦合度对类的可理解性、可测试性、可维护性、可靠性有强烈的影响,是影响类复杂程度的一个重要因素。类间的联系方式、类间交互信息的作用、类间关系和信息的数量三个因素共同影响了类间耦合度的大小。UML中类间的关系根据类间联系的紧密程度的强弱,由弱到强可划分为如下六种:依赖关系C_DE,关联关系C_AS,实现关系C_AC,继承关系C_IN,聚合关系C_SA,组合关系C_CO。

定义5:类的访问度C_Access=类访问其它类的次数+该类被访问的次数的。C_Access越大类间的耦合就越强。

定义6:类的耦合度(C_Coup)=C_Acess+∑R×W(R表示类间关系,W表示关系的权重),耦合度越大则该类在测试序列中的位置应该靠前。

本文把从UML类图得到的类间关系用一个十元组表示,,其中C_ID表示S_Class的ID号码,S_Class表示存在关系的类中的起始类,E_Class表示关系的结束类,C_Coup表示类间的耦合度,用数字表示。如果起始类和结束类之间存在某种关系则在数据库中写入关系的数量,否则写入零。

2 集成测试测试序列生成算法

2.1 UML类图信息的获取和添加

首先,从类图中读取出每个类图的信息,然后依照定义计算每个类的内聚度并将全部信息存储到数据库。同时再此过程中,将每个类的私有,公有,保护类型的属性和方法,以及类类型的属性和返回类型为类类型的方法均写入数据库,内容包括:类ID、类属性1、类属性2.....。方法库表的主要字段有:类ID、类方法1、类方法2....。读取出每个类图的信息的同时,提取出类间的信息并把需要的信息写入数据库中。字段有C_ID、S_Class、E_Class、C_Coup、C_DE、C_AS、C_AC、C_IN、C_SA、C_CO[4]。

针对如图1所示的一个网络购书系统,把购物者分为了如下四个类:Buyer、Member、honoured_guest、layfolk四种,Buyer类是其他三个类的父类,派生方式分别为公有派生,保护派生,私有派生。此外还有Book类。具体实现情况是用户购买书本,然后根据会员的级别给与不同的折扣进行付费。

对每个类进行类的内聚度计算,内聚度计算结果如下:

类间耦合度计算结果如下:

2.2 集成测试序列生成算法

对UML类图信息提取分析后,把需要的信息写入数据库,接下来进一步的工作便是从数据库中搜索信息,生成需要的集成测试的测试序列。算法描述如下所示:

1)提取类图信息计算类内聚度和类间耦合度,并存储类内聚度以及起始类和其关联的类的类间耦合度。并在数据库中存储类图的相关详细信息。

2)从类间耦合度最大的类开始搜索。耦合度大的类被优先搜索到。

3)依旧从最大耦合度的类开始搜索,直到与其相关的类全部遍历完毕。

4)将耦合度最大的类标志置为USED,以表示从类集合中去除。

5)重复步骤三到步骤四,直到所有的类均已经被访问。

7)比较获取的序列。如果一个序列是另一个序列的字串,或者一样,那么删除,最后存储并输出测试序列。针对于图1所示的类图,生成的测试序列如下:

1)Buyer->Member

2)Buyer->Honoured_guest

3)Buyer->Layfolk

4)Book->Buyer

3 结论和展望

本文根据面向对象软件分析中的UML模型图,充分利用了UML的类图信息,提出的测试序列的生成算法简单有效,不仅为集成测试的渐增集成次序提供依据,而且类的内聚度也是类级测试中定义优先级的一个重要指标。为更进一步完善文中提出的方法,下一步的工作的重点是对类内聚度和类间耦合度的计算更为科学化,测试序列的生成算法的进一步优化。

摘要:集成测试是面向对象软件测试中的重要环节。UML不仅在软件分析领域具有重要作用,同时是软件测试的有力依据。在本文中,提出了一种以UML类图为基础的面向对象软件集成测试的测试序列生成方法。从UML类图中提取类的所有信息。然后依据提取的信息计算每个类的内聚度和类间耦合度,将计算结果存入数据库中。最后根据计算的类间耦合度与类的内聚度从高到低对类进行遍历。最后生成集成测试时的类测试序列。经证明该方法对于软件有较好效果。

关键词:UML类图,测试序列,面向对象软件测试

参考文献

[1]Perry,D and Kaiser.Adequate testing and object-oriented programming journal of Object-Oriented Programming,1990,2[5],13-19

[2]李强,曾一.一种基于UML的集成测试线索的生成方法[J].计算机工程与科学,2009,03

[3]李自强.基于ARM的移动图书导航系统[J].软件,2011,33(9):26-30.

[4]宋建华,谭瑛.基于场景和UML图的CBSD软件集成测试方法研究[J].太原科技大学学报,2009:04.

面向对象测试方法在观测控制系统中的应用 篇6

关键词:面向对象,设计模式,模块化,映射

在手机开发平台中,从硬件到软件,采用了分层架构设计,整个系统分成Hardware、BIOS、OS、GUI和APP等层结构,并进行了合理地封装。每一层构成了功能完备的子系统,并为上层提供服务。层与层之间采用消息的方式进行通信,很好地保证了子系统之间的信息隔离。同时,按照功能的需求对子系统又可以进行进一步划分。在模块划分过程中,按照粒度粗细可以将整个系统分成三个级别的模块:子系统(粗粒度)、模块(中粒度)和组件(细粒度),每个子系统可以划分为各个模块,在模块内部又可细分为各个组件。在不同级别模块的划分上,存在不同的特点与难点。针对上述手机平台功能性需求比较复杂,数据量相对少而简单,但对系统的实时性和效率要求较高的情况,可以把面向对象的分析和设计方式引用到手机开发平台设计中,利用模块化的设计思想提供良好设计公共接口,进行接口与实现的分离,从而实现手机软件开发的模块化,并且有利于后期整个系统的扩展和维护。

C语言是一种面向过程的程序设计语言[1],在C语言的基础上建立的C++语言是一种面向对象的程序设计语言。如果在开发C语言程序的同时,使用面向对象分析方法,这样开发的程序将会具有面向地对象程序的设计优点[2]。C语言运用比较灵活,执行效率高,与汇编语言联系紧密,可以开发出非常精巧的软件系统,但C语言没有名字空间和类的概念,缺少封装机制和访问级别,数据和操作各自分离,给模块化工作和维护带来较大难题,为此本文使用一个映射机制将对象的分析模型转换到过程设计模型,即对象映射到组件,从而实现模块化编程。

1面向对象分析设计思想

利用面向对象的方式进行思考[3],既可以提高软件开发的模块化,又符合人类思维的特点,它是人类认识世界的方式。对象包括数据和对数据进行操作的行为。对象在收到请求或消息后,执行相应的操作。请求或消息是使对象执行操作的唯一方法,操作又是对象改变内部数据的唯一方法。由于这些限制,对象的内部状态是被封装的,它不能被直接访问,它的表示对于对象外界是不可见的,外界只能通过其公开的接口(操作)访问对象的数据以及相关的操作。将面向对象的分析设计方式引用到手机软件开发中,可以提高手机软件开发的模块化,增加可理解性和可维护性。在手机运行环境中,存在大量的功能性需求。在进行模块的划分工作后,每个组件对应一个对象,而每个功能性需求对应对象的一个具体行为。由于在手机运行环境中,功能要求复杂,数据结构相对简单;同时,数据内容具有不断更新的特点。为了避免对象创建和销毁时不必要的开销,保证数据传输的实时性,提高运行效率,可以采用SINGLETON的设计模式[4]。在这种模式下,每个对象只需保证一个实例,而且可以严格控制客户怎样、以及何时访问它,提高运行效率,满足手机运行时所需要的功能性需求。因此,可以为对象提供一个全局变量,供对象的所有操作进行访问,而这些操作可以由组件中的函数实现。如图1所示,介绍了不同阶段从建模到实现的关系。

将对象的数据和操作映射为组件的数据和函数后,需要提供组件的封装和访问机制。对于每一个组件,针对三个级别的模块划分,相应需要提供三种级别的封装和访问机制[5]:public、internal 和private,参见表1。public 提供了模块外访问的接口,可以被其他模块使用,在子系统设计时划分模块的过程中就已经确定;internal 提供了模块内部访问的接口,是模块内其他组件通信的桥梁,由模块的设计者提供并实现;而private 是组件内部使用的一些私有接口,提供了进行内部操作的辅助行为。

这些机制为对象的封装和访问提供了良好的方法,充分保留了模块设计和实现时的信息,降低了不同人员交流的难度,增加了模块的可理解性与可维护性。

2结构化开发环境的编码实现

在结构化开发环境中,由于实现方法是非面向对象的,需要使用一个映射把面向对象的分析模型转换到过程设计模型,即需要将对象映射到组件(每个源代码文件)。在每个组件中,对象的数据封装到一个structure 结构中。由于考虑手机开发的特点并采用SINGLETON 设计模式,每个对象只需保证一个数据备份,因此可使用一个全局变量记录这个结构的数据,以便在对象的操作中共享这一个全局变量,为提高对象的模块化,其访问级别应该设为private。同时,使用public 访问机制向模块外公开其访问接口或使用internal 访问机制向模块内公开其访问接口,其中,对数据的访问采用公开的Set 和Get 方法进行。

利用C语言[6]开发环境的特点,可以在组件中将对象的封装与访问通过三个文件File.i、File.h和File.c 实现,这三个文件的关系见图2。隐藏或暴露一个接口的方式只需将这个接口的声明从一个文件移动到另外一个文件中。将模块中的所有组件组织成一个包后,可以定义一个统一的模块接口文件module.i,其内容包含了该模块中所有的File.i 文件。模块接口文件在所属的子系统中定义,由模块中的组件实现,并供其他模块使用,整个子系统中各模块间的关系如图3所示,图3中的虚线显示了各模块和各组件间的依赖关系。

从图3中可见,在子系统设计中进行了模块的划分,将模块组织为包,声明了模块的接口module.i,并指出了各模块间的依赖关系。在模块设计中,进一步划分了各个组件,将module.i中的接口分布在各个File.i 中得以实现,模块的可理解性[7]和可维护性都得到了提高。

3源代码开发示例

以“用户来电”这一场景进行分析,“用户来电”的时序图如图4所示,从时序图片断中可以看出各模块间的交互关系,这些交互关系定义了每个模块对其他模块的外部接口。其中CallLog 模块的外部接口有:接口1——存储来电记录(StoreCallLog ToQueue),接口2——查看来电记录(Display CurrentCallLog),接口3——显示号码(Display PhoneNumber)等。

这些接口可大致分为两类:接口1 与Data 直接相关;接口2 和接口3 与UI 直接相关,而后者又与Data 间接相关,即需要访问Data 的某些接口。因此在Call Log 子模块——allLogData中,接口被分为三个层次,如图5所示。图中符号“+”代表该接口可被外部模块访问,“#”代表该接口可被模块内部其他子模块访问,“-”代表仅能在该子模块内部访问,其中包含相关的数据信息。

从图5可知:CallLogData 子模块中必须被维护的外部接口为StoreCallLogToQueue 函数,该函数被Call 模块所调用;-CALLLOGITEM 数据结构被局限于CallLog 模块内部访问,可以被CallLogUI 子模块引用;而_CALLLOGQUEUE 数据结构被局限于CallLogData 子模块内部访问,不能被其他任何文件引用等。这些信息在分析与设计阶段已经被充分考虑,此处以源代码的形式在实现阶段保留下来,分别被不同的开发人员所理解和维护。

4结束语

本文通过前述三种封装和访问机制,保证了架构中各个模块接口的实现和模块的独立性[8],应用面向对象思想和三级封装和访问机制之后,模块与模块之间的依赖通过.i文件进行,内部依赖通过.h文件进行操作,相互依赖性减少,模块的独立性增加;系统设计信息和模块设计信息分离,分级暴露数据结构和全局变量的定义;另外模块接口不变,内部接口的修改对其他模块没有影响,修改代码也少。总之,在结构化编程语言中采用面向对象思想进行设计,一方面需要有面向对象分析的思想,另一方面需要提供恰当的封装和访问机制,这样才能更好地实现模块化,提高手机开发平台的可扩展性和可维护性。

参考文献

[1]黄锡伟,胡建彰.一种基于面向对象思想和结构化技术的软件开发方法.小型微型计算机系统,1996;17(4):17—24

[2] Erich G,Helm R,Ralph J,et al.设计模式—可复用面向对象软件的基础.李英军,马晓星,蔡敏,等译.北京:机械工业出版社;2000

[3]车万方,张凤鸣,宋志平.基于UML的C3I系统体系结构的面向对象分析和设计方法.系统工程理论与实践,2003;23(7):88—94

[4]赵慧.面向对象技术模式之Singleton及其应用.南通职业大学学报,2004;18(2):43—46

[5]龙鹏飞,张芳.面向对象方法在嵌入式应用软件开发中的应用.计算机应用与软件,2007;24(8):53—56

[6]谭浩强.C程序设计(第四版).北京:清华大学出版社,2010

[7]何昭.基于面向对象框架的软件开发方法.计算机工程,2002;28(4):5—6

面向对象测试方法在观测控制系统中的应用 篇7

面向对象概念的教学在任何一种面向对象程序设计语言的教学中都是重点和难点。学生如果不能很好的理解面向对象的概念, 那么掌握这一种面向对象程序设计语言, 也就无从谈起了。因此讲授面向对象程序设计语言课程的老师, 都免不了要在面向对象概念的讲解方法上面多做研究。

项目驱动教学法是近几年的教学改革中出现的新的教学方法。所谓项目驱动教学法是指在教学过程中以一个项目为主线来展开, 把相关的知识点融入到项目的各个环节中去, 层层推进。通过对问题的深化或功能扩充, 来拓宽知识的广度和深度, 直至得到一个完整的项目解决方案, 从而达到学习知识、培养能力的目的。

2 面向对象概念教学的现状

目前在各个高校的计算机相关专业的教学中, 面向对象程序设计语言都是必不可少的。常见的面向对象程序设计语言有Java、C++、C#等编程语言课程, 这些课程对计算机、软件专业的学生来说是非常重要的。是否能学好这门课, 决定了是否能为后续课程打下良好的基础。而在这些课程的教学中, 面向对象的概念又是极其重要的。

面向对象的概念包括类、类的成员、重载、继承、重写成员等等。如果按照传统的教学方法, 在讲解这些概念时, 一般先提出定义描述, 再使用程序代码说明这个概念的特性。每个概念至少举出一个代码实例, 但是这些代码之间没有什么直接的联系, 也没有明确的用途。在这样的情况下, 很难引起学生的学习兴趣, 教学效果也很大程度地受到了限制。

3 使用项目驱动法讲解面向对象概念

3.1 确定教学项目

确定教学项目是项目驱动教学法最为关键的一步, 选择的项目的好坏、难易、是否能突出所学知识等几个问题是项目驱动教学法的关键。经过教学过程中的实践, 现总结出了选择教学项目时需要考虑的几个方面:

3.1.1 教学对象的情况

在课程开始之前必须充分的了解学生已经掌握的知识以及所具有能力水平, 这样有助于选择适合他们的工程项目。如果不充分了解学生的实际情况, 那么所选择的项目可能会太难或太容易, 项目太难会打消他们继续学习的积极性, 太容易又会使学生很快完成, 而达不到引起学生思考的目的。

3.1.2 项目教学的目的

教学目的, 即在该教学活动之后, 要求学生必须掌握的知识和能力。因此, 在使用项目驱动教学法之前, 必须根据授课内容来确定项目的种类。目的是通过此项目, 使学生能够深入理解课程的重点与难点, 积累经验, 提高实际应用能力。

在这里, 我选择“银行账户管理”这一较为简单的项目作为项目驱动教学的内容。在.NET平台上, 使用C#语言作为教学语言。项目界面如图1所示。

3.2 实现教学项目

实现该项目的目的, 是希望学生通过该项目了解类及类的特性, 因此在完成界面设

计之后, 第一件事就是定义一个类。表示账户的类, 可取名Account, 类中包含客户ID、客户名、账号、密码、开户时间、账户类型、货币种类、余额等成员, 除此以外, 还定义了构造函数, 方法等。

完成类的定义之后, 当要使用基类或派生类是, 只需进行声明就可以了, 此处不再赘述。

3.3 学生完成项目

当教师向学生展示项目的开发过程时, 教师的示范作用是相当重要的。从最初的创建窗体界面, 到最后的调试运行, 教师都应该亲自示范, 甚至是每一个小的步骤都要让学生感受到它的实现过程。

示范过程完成之后, 学生就会对该项目的开发过程有一个具体的, 真实的感受。接下来, 就是他们发挥主观能动性的时候了, 他们可以先按照教师的方法一步一步地完成, 也可以加入很多自己想法。这时, 他们就不会再觉得学习这些概念是一件枯燥、乏味的事情了, 他们的学习兴趣在很大程度上得到了提高。

结束语

使用有实用意义的项目, 作为教学过程中的载体, 立刻使学生的学习有了方向感。它突破了传统的教学模式, 充分调动了学生的求知欲, 发展了学生个性和创造精神。为技能型应用人才的培养提供了新思路和好方法。作为近年来教学改革的一个热点问题, 项目驱动教学法还将会在更多的领域, 更多的学科教学中起到显著的作用。

参考文献

[1]王荻, 项目驱动教学探索[J].中国职业技术教育, 2007 (36) .[1]王荻, 项目驱动教学探索[J].中国职业技术教育, 2007 (36) .

[2]郑锐东, 杨培新, 应用项目驱动教学法对高职课程进行改革[J].河南教育 (高校版) , 2009 (6) [2]郑锐东, 杨培新, 应用项目驱动教学法对高职课程进行改革[J].河南教育 (高校版) , 2009 (6)

上一篇:在全县乡镇党委书记座谈会上的发言提纲下一篇:特种经济动物养殖技术