毕业设计(论文)-基于UML的软件系统测试用例生成方法及实现.doc_第1页
毕业设计(论文)-基于UML的软件系统测试用例生成方法及实现.doc_第2页
毕业设计(论文)-基于UML的软件系统测试用例生成方法及实现.doc_第3页
毕业设计(论文)-基于UML的软件系统测试用例生成方法及实现.doc_第4页
毕业设计(论文)-基于UML的软件系统测试用例生成方法及实现.doc_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

全套设计加扣 3012250582存档日期: 存档编号: 本 科 生 毕 业 设 计题 目: 基于UML的软件系统测试用例生成方法及实现 学 号: 姓 名: 联 系 电 话: : 电 子 邮 箱: 学 院: 计算机科学与技术学院 专 业: 物联网技术 年 级 、 班 级: 11计81 指 导 教 师: 江苏师范大学教务处印制 江苏师范大学计算机学院学士学位毕业设计原创性声明本人郑重声明:所呈交的毕业设计说明书 基于UML的软件系统测试用例生成方法及实现 是本人在导师指导下,在江苏师范大学计算机学院学习期间,进行毕业设计时取得的成果。本人知道,除文中已经标明引用的内容外,本毕业设计说明书不包含任何其他个人或集体已经发表或撰写过的研究成果。对本文的研究做出贡献的个人或集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。班级: 11计81 学号: 学生签名: 2015 年 5 月 16 日基于UML的软件系统测试用例生成方法及实现摘 要:随着IT时代的日益发展,在一款软件开发的过程中,更多地将软件质量优先于其功能与性能考虑。要想获得高质量的软件,反复的测试必不可少,而传统软件测试技术功能的欠缺给开发人员增添了许多的不便,加之现金软件的开发愈加依赖UML技术,基于UML模型的软件测试用例生成系统应运而生。本系统的研究中,我们参考了传统的软件测试技术,取其精华,去其糟粕,并结合白盒测试技术,对每一条可行的路径进行测试。系统的设计采用Java编程语言,在前台设计一个与用户交互的界面系统,由用户自主选择图的类型和设计图,后台则动态读取相关数据,自动生成符合条件的测试用例。从最终结果来看,系统自动生成的测试用例完全符合所需的测试要求。最后,经由软件开发工作人员的试用,本系统确实可以减少开发过程中大量繁琐的工作,既节省时间又能提高效率,而且测试结果也令人满意,可以说,本系统对推动软件测试技术的进一步发展有重大意义。关键词: UML;软件测试;自动生成;测试用例 Method and Implementation of Test case generation for Software system Based on UMLAbstract: With the increasing development of the IT era, in the process of software development, more software quality prior to its function and performance. In order to obtain high quality software, essential for repeated tests, and the lack of the function of the traditional software testing technology for the developers to add a lot of inconvenience, coupled with cash software increasingly dependent on UML technology, and application system software test case generation based on UML model. The research of this system, we refer to the traditional software testing technology, its essence, to its dregs, and combined with the white box testing, test each of a feasible path. The system uses Java programming language, a system interface design and user interaction in the foreground, choose the type of plan and design by the user, the background is dynamic read the relevant data, the automatic generation of test cases meet the conditions. In the end, the system automatically generate the test case meets the required test requirements. Finally, through the trial software development staff, the system can reduce a lot of work in the development process, saving time and efficiency can be improved, and the test results are satisfactory, it can be said that this system is of great significance to promote the further development of software testing technology.Keywords: UML;Software testing;Automatic generation;Test caseII目 录第1章 绪论11.1 课题背景11.2 系统设计的目的与意义11.2.1 系统设计的目的11.2.2 系统设计的意义11.3 UML技术国内外研究情况11.4 本文章节结构及主要研究内容1第2章 系统环境分析32.1 开发工具及简介32.1.1 开发环境:Eclipse32.1.2 开发语言:Java32.2 系统可行性研究32.2.1 技术可行性32.2.2 经济可行性32.2.3 操作可行性32.3 本章小结3第3章 功能需求43.1 系统结构组成43.1.1 前台子系统43.1.2 后台子系统43.2 系统功能结构图43.2.1 前台子系统功能结构图53.2.2 后台子系统功能结构图53.3 系统数据流图63.4 系统数据集73.5 本章小结7第4章 系统功能详细设计84.1 总体设计理念84.1.1 初步设计想法84.1.2 设计遵循原则84.2 系统结构设计84.2.1 前台子系统94.2.2 后台子系统94.2.3 系统整体结构94.3 子系统详细设计94.3.1 子系统具体功能描述104.3.2 子系统实体E-R图104.4 本章小结11第5章 子系统功能编码实现及测试125.1 前台子系统编码125.1.1 主界面125.1.2 状态图155.1.3 序列图185.1.4 协作图215.1.5 活动图285.2 后台子系统编码315.2.1 语句覆盖335.2.2 判定条件覆盖375.2.3 条件组合覆盖405.2.4 路径覆盖435.3 本章小结47第6章 总结与展望486.1 总结486.2 展望48毕业设计体会49致谢50参考文献51英文翻译资料52IV第1章 绪论1.1 课题背景生活在电子信息时代,我们的生活以经与各式各样的电子产品紧密联系在一起,而这些电子产品也在时时刻刻推陈出新,最终目的只有一个:更加方便人们的生活。同样地,在软件开发工作中,也需要一项技术来改进现在的软件测试技术。其中,UML由于强大的功能,加之其独特的“图形语言”表达简洁明了,正在受到软件开发人员的青睐。融合了软件开发领域的专业技术和思想方法,UML技术渐渐地应用于软件开发的整个过程,自然而然地成为了软件测试用例生成的有效数据源。基于UML的软件系统测试技术作为一项新兴技术正在冉冉升起。由于UML技术的日渐成熟和当今软件开发过程中存在的不足,在此基础上,本系统的设计思想渐渐开始萌芽。另外,本系统设计的基础主要为UML中常用的四种图:状态图、序列图、协作图、活动图。1.2 系统设计的目的与意义1.2.1 系统设计的目的本系统的设计旨在减少软件开发过程中特指软件测试阶段的成本、资源和时间,以有效提高整体工作效率,给软件开发的过程提供快捷、便利。1.2.2 系统设计的意义基于UML模型图的软件测试用例生成系统充分体现了UML技术表达简洁明了、易懂的特点,省略了测试过程中大量对数据源繁琐的操作。同时,本系统针对传统的测试用例生成方法判定表法和场景法加以吸收和改进,使用的模型更为形象,也更加适合对系统进行详细地的描述。本系统从数据的输入到输出过程,简单、易懂、方便操作,用例的生成过程趋于规范化,也保证了测试用例与数据的完整性。1.3 UML技术国内外研究情况UML语言可以说是面向对象设计技术中一个重要的里程碑,自1997年以来,美国前后近700多家公司开始涉猎UML技术领域,采用UML进行软件开发,覆盖了面向对象研究的大部分技术领域,可以确定的是,UML会是现今计算机技术研究未来几年甚至十几年都会采用的技术。最为较为先进的一项技术,UML也经历了逐步完善。然而,并非UML符合所有人的喜好,虽然模型图简单明了,但是也不可能完全符合现实情况,并且,看似简单的模型图,做到真正能懂,完全熟悉还是有一点难度的。因此,要让UML技术得到全面的应用,还有很长一段路要走。1.4 本文章节结构及主要研究内容本文主要分为6个章节,详细地介绍了基于UML的软件系统测试用例生成方法及实现的开发过程。第1章 绪论:本章节主要说明本系统的研究背景、目的与意义以及UML技术在国内外的研究情况,对基于UML模型的软件系统测试用例生成方法和工具研究系统做一个初步的介绍和了解。第2章 系统环境分析:本章节重点说明系统设计过程中需要使用的开发工具和开发语言,同时,对系统进行可行性分析,确定在现有的经济和技术支持下,系统是否能得以实现。第3章 功能需求:该阶段已经正式进入系统设计工作,对系统进行详细分析,有利于了解系统的结构,使其明朗化。通过对功能结构图和数据流图的分析,清晰地知道系统的功能需求,明确了系统该做什么。第4章 系统功能详细设计:该阶段从系统整体出发,说明整体的设计理念,剖析系统的结构,详细分析子系统的功能。总体设计中涉及设计思想与遵循的原则,是系统设计的初衷。对系统结构的剖析多采用图文结合,层次图、E-R图不经简洁而且结构阐述十分清晰,能够更好地去了解系统框架。而后,在这些基础上,工作重点转向对子系统功能的分析设计。第5章 子系统功能编码实现及测试:该阶段负责使用代码实现系统所需求的各项功能,工作步骤分为编程、纠错、模块实现、数据测试、完善几个部分。编码说明给出各子模块关键部分的代码,说明系统模块是如何实现的。相关设计完成后,对系统进行数据测试,提供数据测试的截图并加以说明。第6章 总结与展望:该阶段对系统的整个设计过程进行总结,阐述系统已经解决的问题,还存在哪些问题、这些问题该怎样完善以及未来的提升空间。第2章 系统环境分析2.1 开发工具及简介2.1.1 开发环境:EclipseEclipse是跨平台开源集成开发环境,是一个基于Java的可扩展平台。开发语言主要采用Java语言但不仅限于Java,也可以使用相关插件将其作为其他语言的开发工具。就Eclipse本身而言,只是一个框架和一组服务,通过众多插件的支持去符合多种开发语言,使Eclipse具有良好的灵活性。2.1.2 开发语言:JavaJava由Sun MicroSystem公司发布,是Java面向对象程序设计语言与Java平台的总称。Java有着许多优秀的语言特性:简单、健壮、面向对象、分布性、安全性、体系结构中立、可移植、高性能、解释型、多线程、动态性,即使跨平台使用也毫不逊色。2.2 系统可行性研究所谓可行性研究,其实是在详细地调查基础之上,通过对市场、技术、经济等多方面的分析,对系统的一项综合评价。目的是确定提出的问题是否能够解决、该怎样解决、是否值得解决,既是对系统的一次具象结构研究和设计,也是在现实情况中对系统的一次抽象描述。对于本系统,主要探讨技术可行性、经济可行性和操作可行性。2.2.1 技术可行性UML在Booch、OMT、OOSE等面向对象的方法和其他方法资料信息的基础上发展而来,取其精华,去其糟粕,逐步形成一个统一的标准化建模语言。作为日渐成熟和强大的一项技术,已经被用于大多数计算机科学的研究,而且,相关技术也在日趋完善。同时,系统采用的Java语言又拥有优秀的语言特性,可以实现与UML之间的相互转换,而且Eclipse平台也可以轻松实现UML图的操作。2.2.2 经济可行性在经济层面,一项技术是否值得发展和深入研究,要从成本和收益两个角度权衡。Eclipse是一款完全免费的开发平台,可以随时随地进行开发。从成本角度来看,根本不成问题,是完全可行的。2.2.3 操作可行性由于Eclipse是一个源码开放,基于Java语言且主要采用Java语言的跨平台开发环境,可以利用不同的插件使其适应多种其他编程语言,综合Java语言的种种有点,由此编写的代码可以在多种系统中运行,操作完全可行。综上所述,基于UML模型的软件测试用例生成系统在技术可行性、经济可行性、操作可行性方面并没有太大的难点且符合现代计算机科学的发展方向,对其进行深入研究和开发是完全可行的。2.3 本章小结本章节主要介绍系统开发的环境,为系统设计的起步奠定基石,同时,对系统的可行性进行分析,确定了系统设计的可能性,为系统设计工作的开展打下基础,提高了工作的积极性,也对工作是否值得去做给出了答案。第3章 功能需求需求分析是软件开发过程的起步也是至关重要的一个环节,在此阶段,一切的决定将直接关乎软件研发的方向以及最终的成果展示。因此,想要开发出令人满意的软件,必须站在用户的角度设想,明确用户需要什么,做为软件定义中的一环,需求分析的基本任务要对“系统是干什么的?”做出明确地回答。3.1 系统结构组成基于UML模型的软件测试用例生成系统的功能实现有两部分组成:前台子系统和后台子系统。3.1.1 前台子系统包含以下几个子模块:(1)状态图:包含初始状态、终止状态、添加状态、添加注释、判定和状态之间的转换。(2)序列图:包含序列图中的对象、生命线、创建注释、消息传递和返回消息。(3)协作图:包含类的实例、协作图中的对象、创建注释、链接信息方向和对象之间的链接。(4)活动图:包含初始状态、终止状态、添加活动、判定、添加注释、泳道和状态之间的转换。前台子系统设计为用户交互界面,主要根据用户自定义的UML图类型,存储相关的信息,以便后台系统做进一步操作。3.1.2 后台子系统包含以下几个子模块:(1)路径覆盖:从初始状态到终止状态的每一条可能的路径执行一次。最强的覆盖执行。(2)语句覆盖:选择一条可行路径执行一次,如果有判定分支,选择其中一支执行后续语句。最弱的覆盖执行。(3)判定条件覆盖:在语句覆盖的基础上,对每一分支至少执行一次。(4)条件组合覆盖:在判定条件覆盖的基础上,枚举判定语句中所有的组合可能,对每一种可能至少执行一次。后台子系统主要负责读取存储的信息,并根据不同的执行需求自动生成用例数据反馈给用户。3.2 系统功能结构图系统功能结构图是对系统进行剖解,表述系统的层次结构及从属关系的图表。用最简单的图形,以黑盒的形式描绘出每一个系统部件和数据在这些部件之间的转换情况。系统整体结构如图3.1所示:图3.1 整体功能结构图3.2.1 前台子系统功能结构图前台子系统功能结构如图3.2所示:图3.2 前台子系统功能结构图3.2.2 后台子系统功能结构图后台子系统功能结构如图3.3所示:图3.3 后台子系统功能结构图3.3 系统数据流图系统的数据流图展现了系统运行过程中数据在各个模块之间的转换过程,通过数据流图,可以清晰地了解数据是怎样流动,怎样受到逻辑处理的。如若测试期间出现故障,亦可分析数据流图找出问题所在。系统整体的数据流动如图3.4所示:图3.4 系统整体结构数据流图各个子系统模块数据流动如图3.5所示:图3.5 各个子系统模块数据流图3.4 系统数据集分析了数据流图之后,系统内部这些流动的数据该如何存储和调用是接下来需要考虑的问题。系统数据集就是这样一个集合,它可以将系统内需要的数据清晰的表述出来,即对数据流图中涉及的相关数据信息进行定义。前台子系统与后台子系统相关数据定义如表3.1和表3.2所示:表3.1 前台子系统数据定义名称长度类型所属类用途getnode50NodeMain存储节点信息getedge50EdgeMain存储边信息表3.2 后台子系统数据定义名称长度类型所属类用途eventpath50StringString存储路径信息group1024StringString存储条件组合s不定classSwant存储前台数据3.5 本章小结通过本章对系统功能需求的分析及具体设计方案的初步计划,系统的框架已经浮出水面。对各模块图表的进一步分析,了解了数据该怎样存储,存什么样的数据,已经得到了“系统该做什么?”的答案,为后续的工作做好了铺垫。第4章 系统功能详细设计本章节开始,将开始对系统进行详细地设计,从总体设计理念,系统结构设计,子系统详细设计等多方面出发加以说明,并通过系统的层次图,由整体到分支详细地设计子功能,再由分支到整体协调各子功能之间的关联,使系统趋于完善、统一。4.1 总体设计理念对系统的总体设计是在需求分析的基础上进行,区别于需求分析的框架定义,在本阶段,更多地是要深入系统内部的每部分组成做具体的设计。如上所述,需求分析要解决的问题是“系统是做什么的?”,那么总体设计给出的回答的就是“系统该怎么做,用什么做”。总体设计阶段要敲定系统的结构部署,因此需要使用层次图和E-R图加以辅助。层次图用来分析系统各单元模块的从属关系,说明系统运行时数据在各层次之间的传输;E-R图用来描述与每个子模块相关的属性,使整个系统得到丰富。确定了结构层次,接下来就需要针对每项功能进行设计了。4.1.1 初步设计想法(1)系统基于UML基础,涉及四种图形,那么至少需要完成各图形子模块的功能设计,保证系统功能的完整性。(2)系统整体分为两个部分:前台使用用户交互界面,后台自动生成数据反馈。据此,前台数据怎样输入后台,后台的输出信息怎样反馈给前台,即前、后台两大子系统之间的链接、功能协调值得商榷。(3)前、后台子系统下层还有相互独立的子系统,这些模块之间的关联怎样、数据储存是否有冲突需要考虑,要对系统整体运行的流畅性负责。4.1.2 设计遵循原则现今的软件的开发设计更多地将其质量置于首位作考虑,然而,欲获得最优的软件质量,除了有赖于良好的开发团队和技术支持外,还需要遵循一些最基本的设计原则:(1)鲁棒性:软件需要具备基本的纠错能力,可以自行判断数据是否符合系统需要,并且有一定的自修复能力。(2)可靠性:软件功能日渐丰富,随之而来的是编码数量的增多,软件不能因为代码繁多而时不时产生故障,该怎样在运行过程中尽量避免故障产生的几率,可靠性原则至关重要。(3)可修改:“罗马不是一天建成的”,世上没有任何事物生来就是十全十美地。软件的受众范围是在一步一步完善的基础上扩展的,因此,开发代码不能完全封闭,以便对软件进行后续的更新。(4)易懂性:必须明确的是,并非所有人都熟知计算机科学方面的专业知识,代码的通俗易懂是软件可靠性和可修改的前提。(5)安全性:安全性决定了软件的生命周期,也决定了软件是否会遭到第三方数据的破环,是开发过程从始至终都需要留意且综合考虑的问题。4.2 系统结构设计俗话说:“种瓜得瓜,种豆得豆。”软件的结构设计就是一颗种子,这个架构直接决定了软件最终的表示形式。为符合用户的多种需求,兼得普遍适应和性能稳定,本系统分别设计了两大子系统。4.2.1 前台子系统包含以下几个子模块:(1)状态图:包含初始状态、终止状态、添加状态、添加注释、判定和状态之间的转换。(2)序列图:包含序列图中的对象、生命线、创建注释、消息传递和返回消息。(3)协作图:包含类的实例、协作图中的对象、创建注释、链接信息方向和对象之间的链接。(4)活动图:包含初始状态、终止状态、添加活动、判定、添加注释、泳道和状态之间的转换。4.2.2 后台子系统包含以下几个子模块:(1)路径覆盖:从初始状态到终止状态的每一条可能的路径执行一次。最强的覆盖执行。(2)语句覆盖:选择一条可行路径执行一次,如果有判定分支,选择其中一支执行后续语句。最弱的覆盖执行。(3)判定条件覆盖:在语句覆盖的基础上,对每一分支至少执行一次。(4)条件组合覆盖:在判定条件覆盖的基础上,枚举判定语句中所有的组合可能,对每一种可能至少执行一次。4.2.3 系统整体结构系统的整体结构如图4.1所示:图4.1 系统结构层次图4.3 子系统详细设计详细设计阶段的工作重点是对系统功能的具体实现,然而,这种实现不是简简单单编写大量代码就算完成任务的。代码的编写基于系统的设计蓝图,因此,详细设计阶段更多地是剖析每一部分的组成并使用图形模型将其表述出来。4.3.1 子系统具体功能描述1、前台子系统该子系统主要的任务是完成图形的绘制,子模块中包含了UML状态图、序列图、协作图和活动图基本的组成元素,采用Java自身封装的绘图技术,完成四种图形的制作。2、后台子系统后台子系统负责功能的实现,下面针对每项功能做简要介绍:(1)语句覆盖该功能的实现使用贪心算法和回溯算法,只要是可行的路径都有可能被执行。无关整体,做出当前情况的最佳选择,也可以说,是某种意义上的局部最优解。(2)判定条件覆盖该功能基于语句覆盖的最优路径处理和选择结构的分支路径选择处理,将两者结合以达到判定条件覆盖功能的实现。(3)条件组合覆盖该功能基于语句覆盖的最优路径处理和组合条件的处理,对给出组合条件的每种可能进行执行。(4)路径覆盖该功能将综合以上所有的功能模块,使用穷举法路径处理,覆盖从开始状态到终止状态的每一条可行的路径。4.3.2 子系统实体E-R图状态图E-R图如图4.2所示:图4.2 状态图E-R图序列图E-R图如图4.3所示:图4.3 序列图E-R图协作图E-R图如图4.4所示:图4.4 协作图E-R图活动图E-R图如图4.5所示:图4.5 活动图E-R图 4.4 本章小结本章节从整体分析到详细设计对系统进行了设计,将系统解剖,功能细化,并通过图形模型阐述。经由这些工作,自己对系统结构及功能详情有了清晰地了解,同时,正如之前所说,这是系统的蓝图设计,为接下来功能的编码实现奠定了良好的基础,大大减少了后续工作量和开发难度。第5章 子系统功能编码实现及测试代码是一款软件的灵魂所在,计算机操作系统上的任何软件的运行都赖于编码的基础。本章节给出系统各个模块的代码说明,并以状态图子模块为代表给出测试数据。5.1 前台子系统编码前台子系统使用Java自身封装的绘图技术实现绘图系统,具备一般画图系统的基本功能,实现UML图的简单绘制。5.1.1 主界面主界面代码:public class Mainpublic static Node getnode=new Node50; /存储节点信息public static Edge getedge=new Edge50; /存储边信息public static int nodecount=0;/存储节点的个数public static int edgecount=0;/存储边的个数 public static void main(String args) EditorFrame frame = new EditorFrame(Main.class);/创建主界面 frame.addGraphType(状态图, StateDiagramGraph.class);/添加画状态图的菜单 frame.addGraphType(序列图, SequenceDiagramGraph.class);/添加画序列图的菜单 frame.addGraphType(协作图, CollaborationDiagram.class);/添加画协作图的菜单 frame.addGraphType(活动图, ActivityDiagram.class);/添加画活动图的菜单 frame.setVisible(true); 界面详细菜单代码:public EditorFrame(Class appClass) String appClassName = appClass.getName(); /获得添加的类的名称 appResources = appClassName ; appFactory = new ResourceFactory(); versionResources = appClassName + Version; ResourceFactory factory = new ResourceFactory(); preferences = PreferencesService.getInstance(appClass); String laf = preferences.get(laf, null); / if (laf != null) changeLookAndFeel(laf); recentFiles = new ArrayList(); File lastDir = new File(.); if (!preferences.isWebStart() String recent = preferences.get(recent, ); if (recent.length() 0) recentFiles.addAll(Arrays.asList(recent.split(|); if (recentFiles.size() 0) lastDir = new File(String) recentFiles.get(0).getParentFile(); fileService = FileService.getInstance(lastDir); setTitle(基于UML模型的用例测试); /设置标题 Dimension screenSize= Toolkit.getDefaultToolkit().getScreenSize(); int screenWidth = (int)screenSize.getWidth(); int screenHeight = (int)screenSize.getHeight(); setBounds(screenWidth / 16, screenHeight / 16, screenWidth * 7 / 8, screenHeight * 7 / 8); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent event) exit(); ); desktop = new JDesktopPane(); setContentPane(desktop); defaultExtension = .violet; violetFilter = new ExtensionFilter( Violet Files, new String defaultExtension ); exportFilter = new ExtensionFilter( Image Files, .png|.jpg|.jpeg); JMenuBar menuBar = new JMenuBar();/定义菜单 setJMenuBar(menuBar); JMenu fileMenu = factory.createMenu(文件); menuBar.add(fileMenu);/添加菜单 newMenu1 = factory.createMenu(新建图); fileMenu.add(newMenu1); fileMenu.add(factory.createMenuItem( 退出, this, 退出); JMenu a = factory.createMenu(用例测试); menuBar.add(a); newMenu2 = new JMenu(状态图); newMenu2.addActionListener(this); a.add(newMenu2); newMenu6 = new JMenuItem(路径覆盖); newMenu6.addActionListener(this); newMenu2.add(newMenu6); newMenu7 = new JMenuItem(语句覆盖); newMenu7.addActionListener(this); newMenu2.add(newMenu7); newMenu12 = new JMenuItem(判定条件覆盖); newMenu12.addActionListener(this); newMenu2.add(newMenu12); newMenu14 = new JMenuItem(条件组合覆盖); newMenu14.addActionListener(this); newMenu2.add(newMenu14); newMenu3 = new JMenu(序列图); newMenu3.addActionListener(this); a.add(newMenu3); newMenu8 = new JMenuItem(测试用例生成); newMenu8.addActionListener(this); newMenu3.add(newMenu8); newMenu4 = new JMenu(协作图); newMenu4.addActionListener(this); a.add(newMenu4); newMenu9 = new JMenuItem(测试用例生成); newMenu9.addActionListener(this); newMenu4.add(newMenu9); newMenu5 = new JMenu(活动图); newMenu5.addActionListener(this); a.add(newMenu5); newMenu10 = new JMenuItem(路径覆盖); newMenu10.addActionListener(this); newMenu5.add(newMenu10); newMenu11 = new JMenuItem(语句覆盖); newMenu11.addActionListener(this); newMenu5.add(newMenu11); newMenu13 = new JMenuItem(判定条件覆盖); newMenu13.addActionListener(this); newMenu5.add(newMenu13); newMenu15 = new JMenuItem(条件组合覆盖); newMenu15.addActionListener(this); newMenu5.add(newMenu15); 主界面示意图如图5.1所示:图5.1 主界面及部分子菜单内容示意图5.1.2 状态图状态图类代码:public class StateDiagramGraph extends Graph public Node getNodePrototypes() /获得节点 return NODE_PROTOTYPES; public Edge getEdgePrototypes() /获得边 return EDGE_PROTOTYPES; static final Node NODE_PROTOTYPES = new Node5; /定义节点数组 private static final Edge EDGE_PROTOTYPES = new Edge2; /定义边数组 static NODE_PROTOTYPES0 = new StateNode(); NODE_PROTOTYPES1 = new CircularStateNode(); CircularStateNode finalState = new CircularStateNode(); finalState.setFinal(true); NODE_PROTOTYPES2 = finalState; NODE_PROTOTYPES3 = new SelectNode(); NODE_PROTOTYPES4 = new NoteNode(); / NODE_PROTOTYPES5 = new HSNode(); / NODE_PROTOTYPES6 = new VSNode(); EDGE_PROTOTYPES0 = new StateTransitionEdge(); EDGE_PROTOTYPES1 = new NoteEdge(); ClassRelationshipEdge generalization = new ClassRelationshipEdge(); generalization.setBentStyle(BentStyle.STRAIGHT); generalization.setLineStyle(LineStyle.SOLID); generalization.setEndArrowHead(ArrowHead.V); 状态图节点代码:public class StateNode extends RectangularNode public StateNode() /初始化函数 name = new MultiLineString(); setBounds(new Rectangle2D.Double(0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT); public void draw(Graphics2D g2) /图形实现 super.draw(g2); g2.draw(getShape(); name.draw(g2, getBounds(); public Shape getShape() /图形定义 return new RoundRectangle2D.Double(getBounds().getX(), getBounds().getY(), getBounds().getWidth(), getBounds().getHeight(), ARC_SIZE, ARC_SIZE); public void layout(Graph g, Graphics2D g2, Grid grid) Rectangle2D b = name.getBounds(g2); b = new Rectangle2D.Double(getBounds().getX(), getBounds().getY(), Math.max(b.getWidth(), DEFAULT_WIDTH), Math.max(b.getHeight(), DEFAULT_HEIGHT); grid.snap(b); setBounds(b); public void setName(MultiLineString newValue) /设置名称 name = newValue; public Mult

温馨提示

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

评论

0/150

提交评论