软件测试方法研究分析_第1页
软件测试方法研究分析_第2页
软件测试方法研究分析_第3页
软件测试方法研究分析_第4页
软件测试方法研究分析_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、读书报告题目 有关 struts,spring,hibernate 框架在 oa开发中的应用体会摘要软件测试在整个软件项目开发过程小有着举足轻重的地位。它贯穿于梏个软件开发过 程,成为软件产品质量控制与质量管理的重要手段之一。测试技术的发展対于缩短测试周期、 降低成木、提高质量都冇着i分重要的意义。木文简要介绍了面向对彖中的类、继承、封装 等机制给软件测试带来的影响,介绍了而向软件测试的划分方法,最示分析了 uml状态图 的组成、标准事件和嵌套、并发的优点,给出了利用uml状态产纶测试用例的软件测试方 法。该方法可以把状态的复朵度控制在和状态属性和关的线性级別,可以尽早发现与状态相 关的错误。

2、关键词:软件测试;关键技术:面向对象;umlsoftware test was very important in the entire software project development process .it pass through the entire software project development process and has became one of most important means in software product control and quality management. the developing of test techniques

3、had very important meanings for shorting test cycle ,reducing cost and improving quality. this article introduce briefly that the mechanisms such as object-oriented species, inheritance, encapsulation and so, has impact on software test, and the division methods facing software test.finally,an examp

4、le is cited to account for an object-oriented software testing method based on uml,which constructs testing usc-casc according the state that the objects arc being and the transfer among object atates.the method can control the complexity of state within the linear scope related with state attribute

5、, and it can find the faults and mistakes related with state earlier.keywords: software test, key techniques, object-oriented, uml1引言软件测试是伴随着软件的产生而产生的。软件危机的频繁出现促使了软件测 试的地位得到了大幅提升。软件测试己经不仅仅是局限于软件开发过程中的一 个阶段,它已经开始贯穿于整个软件开发过程,成为软件产品质量控制与质量管 理的重要手段之一。软件测试技术作为软件工程学科的一个分支,是保证软件质量和可靠性的关 键,因此它也是软件开发过程中的一个重要

6、环节。它的核心思想是:对于输入域 的特定输入,观察软件的执行结果,验证该结果与期望结果是否一致,然后根据 结果作相应的纠错和调整。在测试过程屮,测试用例的选择决定测试的有效性, 这也就直接影响到成本,是软件测试的关键和难点。目前,软件测试技术的发展 还不是很成熟,测试人员在选择测试用例时通常根据直觉和经验进行,给测试带 来很大的盲目性,最终导致的后果是使软件后期维护的费用在成本屮居高不下。 科学生成测试用例对提高软件质量不仅重要而口必要。随着面向对象软件开发技术的广泛应用和软件测试自动化的要求,特别是基 于的软件开发技术的逐渐普及,基于模型的软件测试逐渐得到了软件开发人员和 软件测试人员的认可

7、和接受。它是一种新兴的测试用例生成技术。有优于以前的 测试技术的方而。其屮模型以其定义良好、功能强大、普遍适用的优点,为基于 模型的测试提供了非常好的契机。2面向对象特征对软件测试的影响面向对彖技术是一个全新的开发模式,具有以下特点:(1) 它要综合考虑软件开发过程所有阶段。(2) 在软件开发的整个生存周期中,每个阶段之间是连续的。(3) 开发过程分为面向对象分析(00a)、面向对象设计(ood)、面向对象编程 (oop)、而向对彖测试(00t)四个连续的部分。coad和yourdon给面向对彖的概念下了一个定义:面向对象二对象+类+继承+通信如果一个软件系统是使用这样4个概念设计和实现的,则

8、认为这个软件系 统是面向对象的。一个面向对象的程序的每一个组成部分都是对象,计算是通过 对象和对彖z间的通信来执行的。而向对象技术的本质是定义了类的抽彖,将变 量和与作用于它的操作封装到一块,然后用不同的类和方法组合成一个对彖系 统。面向对象软件将传统软件屮的一个过程或一个方法内的复杂性转移到对象之 间的交互中。面向对象语言一些本质特征形成了如下的一-些新的故障、错误风险。2. 1基本功能模块在而向对彖系统屮,系统的基本构造单元是封装了数据和方法的类和对彖, 而不再是一个个能完成特定功能的功能模型。毎个对象有自己的生存期,有自己 的状态。消息是对象之间相互请示或协作的途径,是外界使用对象方法及

9、获取对 象状态的唯一方式。对象的功能是在消息的触发下,出对象所属类中定义的方法 与相关对象的合作共同完成,并且对象在不同状态卜对消息的响应可能完全同。 工作过程屮,对象的状态可能被改变,产生新的状态,即发生状态的转移。对彖 中的数据和方法是一个有机的整体,在软件测试过程中,不能仅仅检查输入数拯 产生的输出结果是否与预期结果相吻合,还要考虑对象的状态变化。因此,除了 要对对象的状态与方法间的相互影响进行测试,还要进行状态测试。2. 2系统的功能实现在而向对彖系统屮,系统的功能体现在对象间的协作上,而不再是简单的过 程调用关系。面向对象程序的执行实际上是执行一个由消息连接起来的方法序 列,方法的实

10、现与所属对象木身的状态有关,各方法之间可能有相互作用。为实 现某一特定的功能,可能要激活调用属于不同对象类的多个成员函数,形成成员 函数的启用链。因此,基于功能分解的口顶向下或口底向上的集成测试策略不适 用于而向对彖软件系统的测试。2. 3封装对测试的影响封装是指在词法单位之屮或之间决定名字可见性的访问控制机制。它支持信 息的隐蔽和模块化,冇助于防止全局变量访问的问题。尽管封装不会直接促成错 谋的发生,它却给测试带來了障碍。封装使对象的内部状态隐蔽,如杲类中未提 供足够的存取函数来表明对彖的实现方式和内部状态,则类的信息隐蔽机制将给 测试帯来困难。2.4继承对测试的影响继承也是面向对象语言中的

11、一个本质特征。继承可用于一般与特殊关系,并 且方便编码,但继承削弱了封装性,产生了类似于非面向对象语言中全局数据的 错谋风险。由于继承的作用,一个函数可能被封装在具有继承关系的多个类中, 子类屮还可以对继承的特征进行覆盖或重定义。2.5多态对测试的影响多态性是指一个引用可以与多个对象绑定的能力。多态能减少代码的复杂性 和规模,同吋还可以实现动态绑定。但依赖于不规则的类层次的动态绑定可能产 生编程人员没有想到的结果。某些绑定能正确的工作但并不能保证所有的绑定都 能正确地运行。以后绑定的对象可能很容易将消息发送给错误的类,执行错误的 功能,还可能导致一些与消息序列和状态相关的错误。3面向对象软件测

12、试方法面向对象软件测试的测试工作过程与传统的测试一样,分为以卜几个阶段: 制定测试计划、产生测试用例、执行测试和评价。目前,而向对彖软件测试划分 方法是:方法测试、类测试、系统测试。3. 1方法测试方法测试主要考察封装在类中的一个方法对数据进行的操作,它与传统的单 元模块测试相对应,可以将传统成熟的单元测试方法。但是,方法与数据一起被 封装在类屮,并通过向所在对彖发送消息来驱动,它的执行与对彖状态冇关,也 有可能会改变对彖的状态。因此,设计测试用例时要考虑设置对象的初态,使它 收到消息吋执行指定的路径。3. 2类测试主要考察封装在一个类中的方法与数据z间的相互作用。一个对象有它门己 的状态和依

13、赖于状态的行为,对彖操作既与对彖状态冇关,又反过来可能改变对 象的状态。普遍认为这一级别的测试是必须的。类测试时要把对象与状态结合起 来,进行对象状态行为的测试。3.3系统测试系统测试是对所有类和主程序构成的整个系统进行整体测试,以验证软件系 统的正确性和性能指标等满足需求式样说明书和任务书所指定的要求。它与传统 的系统测试一样,包插功能测试、性能测试、余量测试等,可套用传统的系统测 试方法。4基于uml的面向对象的软件测试方法以往的基于对象状态的测试方法是采用扁平状态机和状态迁移图。扁平状态 机虽然能很好地提示出一些类中的错误,但不适用于面向对象的软件测试,原因 是测试过程屮,随着类的状态属

14、性的增加,对象状态的数口会迅速膨胀,大大增 加测试的复杂度。状态转移图用于刻画对象响应各种事件时状态发生转移的情 况,容易借助于口动机理论来选择测试时所用的事件序列和预测对象的状态变化 结果(序列),但是,它难丁描述继承的对象动态行为、并发的动态行为以及由数 据成员和成员函数构成的对彖状态和对彖状态转移。利用基于uml的状态图 可以弥补上述缺点,可以把状态的复杂度控制在和状态属性相关的线性级别,可 以尽早发现与状态相关的错谋。4. 1 uml状态图uml状态图中的状态是由状态名、状态变量和活动三部分组成。以自动售 货机类coinbox为例,图1是它的uml状态图,图屮1、2、3是售货机所处的

15、允许卖出状态、当前状态和初始状态;so、s1是能否出售的状态名,其冒号后 是其状态变量;addqtrs()> vend(). reset()等是投币、贩卖、重置等活动。状态 变量(屈性)是状态图所显示的这些类的屈性,冇时它述可以是临时变量,如计数 器等。活动部分列出在该状态时要执行的事件和动作。在活动区中可使用3个标 准事件:entry, exit和do<> entry事件用于指明进入该状态吋的特定动作;exit 事件用于指明退出该状态时的特定动作;do事件用于指明在该状态中时执行的 动作。图1类coinbox的uml状态】uml状态图中引起状态迁移的原因通常有两种,一种是在

16、状态图中相应的 迁移上未指明事件,这表示当位于迁移箭头源头的状态中的内部动作(包括 entry,exit,do以及用户定义的动作)全部执行完后,该状态迁移被自动触发;另一 种是,当出现某一事件吋会引起状态的迁移,在状态图屮把这种引起状态迁移的 事件标在该迁移的箭头上。状态迁移的形式化语法为:event_signsture guard condition/action_expression a send_clause其中事件特征event_signature是由事件名后用括号括起来的参数表组成,它 指岀触发迁移的事件以及与该事件相连接的附加数据。警戒条件guard.condition 是一个布尔

17、表达式,如果状态迁移屮既有事件又有警戒条件,则表示仅当这个事 件发生并且警戒条件为真时,触发状态迁移。动作表达式action_expression是一 个触发状态迁移时可执行的过程表达式,表达式中可引用该状态所拥有的对象中 的屈性,操作,或事件特征屮的参数。发送子句send_clause是动作的一种特殊 情况,用來说明在两个状态的迁移期间发送的消息。uml状态图主要的优点在于它支持嵌套和并发。一个uml状态图屮的状 态可以有嵌套的子状态;一个状态所拥有的子状态可以画成另一张状态图。子状 态可以是“或”关系的子状态或者是“并”关系的子状态。“或”子状态表示在 任一时刻这些子状态中只有一个子状态为

18、真;“并”子状态表示一个状态可以有 多个并发的了状态,并发了状态z间用虚线分隔,用虚线分隔的每个区域表示一 个并发的子状态,它冇一个名字(任选),并有一个内部的状态图。如在图1屮, 它把状态属性curqtrs和allowvend看成2个并发的子状态,从而可以把状态图 的复杂度控制在线性级别上。4. 2利用uml状态图产生测试用例卜血构造一棵测试树,根据uml状态图来自动产生测试用例。测试树的每个节点代表对彖的状态,边表示状态间的迁移,树的根节点代表 对彖的初状态。首先为测试树构造一个类testtree:class testtree char treenode;节点标识int nodelevel

19、 ;节点在测试树中的层数transitiont;从本节点出发的状态迁移testtree childtree;对应状态迁移t的目标状态其中transition是为状态迁移单独构造的类,它只是填充状态迁移的数据, 在这里不再给出其具体实现。构造uml状态图测试树步骤如下:步骤1:首先构造一个队列queue来存放测试树的各个节点。步骤2:定义根节点testtree root,同时把节点标识treenode置为对彖的初 始状态,nodelevel置为0, t和childtree置null,把root放入队列中。步骤3:取得队列头部的节点设为head,搜索从head节点所对应的状态 (head.tree

20、node)出发的状态迁移以及迁移至的h标状态,分别填充head.t和 head.childtree,即把迁移至的状态作为节点head的子节点;同时置好各个子节 点的属性值,其中nodelevel为hend.nodelevel+1,从root节点开始层次遍历测 试树(从第0层至head.nodelevel层),如果在head的子节点屮存在某个节点s, 其所对应的状态已在第0层至head.nodelevel层中出现过,则该节点s不再扩展, 即为叶了节点。把其它没有出现过的了节点加入到队列尾部。步骤4: head指向队列屮的下一个节点,重复第二步,直至队列为空。在步骤3中,如果某个迁移对应的目标状态

21、已经在测试树中岀现过,就不再 考虑这个状态,所有并不加入到队列尾部。这样就可以有效地避免了重复构造节 点,同时又不降低测试的覆盖率。通过上述步骤就可以构造出uml状态图对应 的测试树。测试树构造算法能很好地支持多个并发的子状态的情况,只是节点标识为并 发子状态的合集;如果某个事件触发其它事件从而引起一系列的状态迁移时,只 要把最终的状态作为节点加入到测试树屮。另外,木算法同样适用于除uml状 态图之外的其它状态图,如扁平状态机或d.kung的cosdo图2类coinbox的测试树?通过木算法构造出的coinbox类的测试树如图2所示。图2测试树中的非 黑体符号节点表示该节图2类coinbox的测试树点代表的状态已经在z前出现 过,所以不再扩展从而成为叶子节点。通过测试树可以很容易的构造出测试用例。 从根节点开始沿着各个分支往下直到叶子节点,每条这样从根节点开始到某个叶

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论