uml在嵌入式软件开发中的研究与应用[专业:计算机应用技术]

uml在嵌入式软件开发中的研究与应用[专业:计算机应用技术]

ID:34004066

大小:2.43 MB

页数:77页

时间:2019-03-02

上传者:xinshengwencai
uml在嵌入式软件开发中的研究与应用[专业:计算机应用技术]_第1页
uml在嵌入式软件开发中的研究与应用[专业:计算机应用技术]_第2页
uml在嵌入式软件开发中的研究与应用[专业:计算机应用技术]_第3页
uml在嵌入式软件开发中的研究与应用[专业:计算机应用技术]_第4页
uml在嵌入式软件开发中的研究与应用[专业:计算机应用技术]_第5页
资源描述:

《uml在嵌入式软件开发中的研究与应用[专业:计算机应用技术]》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

知识水坝论文分类号UDC密缀研究生学位论文UML在嵌入式软件开发中的研究与应用研究生姓名.塞l苴苴指导教师姓名.魏握锢教授申请学位级别硬±专业名称让篡扭应罡撞苤论文答辩日期2盟§生§且29旦学位授予日期垒Q鳗生§且旦中国海洋大学 知识水坝论文UML在嵌入式软件开发中的研究与应用摘要伴随着计算机产业的发展与变革,嵌入式系统的研发已经成为目前的热门领域。从最仞的单片机结构到现在带有专门操作系统的嵌入式结构,嵌入式系统的需求复杂性日益提高,规模也在逐步扩大,因此如何设计复杂的嵌入式系统也就成了目前需要讨论的一个重要课题。然而,传统的嵌入式软件分析与设计方法没有统一的标准,开发过程中人为因素影响严重,使得开发出来的系统在效率、成本等方面存在不足。因此,研究一种新的嵌入式软件开发方法已经成为该领域的一个迫切需求。作为面向对象建模技术的标准,I.J34L适合于将复杂的系统设计问题简单化。它采用面向对象图形的方式对系统进行描述,支持从分析、设计到建模的全过程。同时,针对嵌入式系统的分析与设计,L'ML有着它独特的优势。本文通过研究现有的L.qvlL技术,结合嵌入式软件开发中所存在的问题,提出了一种基于L'ML的嵌入式软件开发方法,并将其应用到了一个系统实例的开发过程中。论文首先对UMI.理论进行了深入研究,分析了基于b3AL的软件建模的基本思想及过程,指出了使用U地设计嵌入式系统的优势,并提出了基于U札的嵌入式软件开发方法及支持环境,重点研究了如何使用UML对嵌入式软件进行描述与设计。同时,论文还从UML建模过程的各个阶段出发,以文中所提出的开发方法为指导,设计了一个嵌入式指纹门禁系统,给出了使用UML对该系统进行开发的全过程,并对建模过程中的关键技术进行了论述。此外,在对嵌入式系统的模型验证机制进行研究的基础上,运用可执行U札来完成该系统模型的验证。这种基于UML的嵌入式系统建模技术,能够很好地解决嵌入式软件开发过程中从分析、设计到验证、编码等一系列问题。与传统的方法相比,该方法有利于提高软件的开发效率和质量,降低研发成本和风险,增强软件的可维护性,并且使得系统的分析和设计模型在相似系统中的重用也成为可能。关键词:堋L;嵌入式软件;模型 ResearchAndlnTheAppIicationOfUnifiedModeIingLanguageDeveIopmentOfEmbeddedSoftwareAbstractWiththedevelopmentandchangesofcomputermdllstry,theresearchonembeddedsystemisbecomingapopularfieldnow.Frominitialsinglechipstructul℃tonowadaysembeddedstructure丽mspeoialoperatingsystem.thecomplexityandscaleofembeddedsystemisgrowingandextending.Consequently,howtodesignthecomplexembeddedsystemisbecominganimportanttaskthatneedstobedi∞ussednOW,However,thetraditionalanalysisanddesignwayofembeddedsystemhasnounifiedstandards.whichIll,aRcsthesystemunsatisfyingincostsandefficiency,SOitisurgenttoexploreanewwaytodevelopembeddedsoRware.Asthestandardofobjectorientedmodehgtechnique,UMLissuitableformakingthedesignofcomplexsystemsimplify.Itadoptsthewayofobjcctgraphicsorientedtodescribethesystem,anditsupportsthewholeprocessofanalysis、designandmodeling.Astotheanalysisanddesignforembeddedsystem,UMLhasitsspecialadvantages.ThroughtheresearchofthecurrenttechnologyofUML,combiningwiththeexistingproblemsinthedesignofembeddedsoftware,thisthesispresentsasolutionbasedonUMLtodeveloptheembeddedsystem,andappliesittoasysteminstance.ThethesisfirstintroducessomebasicknowledgeaboutUML,andthenanalyzesthemainthoughtandprocessofsoftwaremodelillgbased011UML.ItpointsouttheadvantagesofusingUMLinthedesignofembeddedsystem.MeanwhileitproposesthemethodandenvironmentthatbasedonUMLforthedevelopmentofembeddedsoftware.ThisthesisemphasizeshowtouseUMLtospecifyanddesignembeddedsystem。Simultaneously,accordingtoeveryphaseofmodelingprocessandwiththeguidanceofthemethodproposedinthispaper。Wedesignanembeddedfingerprintdoormonitorsystem.ThethesisgivesthewholeprocessofhowtouseUMLtodesignthissystem,anditdiscussesthekeytechniquesinthemodelingprocess.Inadditional,onthebasisoftheresearchonthemechanismfortheveilficationofembeddedsystem models,weuseexecutableUMLtocompletetheverificationofthesesystemmodeLs.ThemodelingtechnologybasedonUMLcallresolveaseriesofproblemsfromanalysisanddesigntoverificationandcodinginthedevelopmentof锄beddedsoftware.Comparedtotraditionalmethods,thismethodCallimprovetheefficiencyandqualityofthesothⅣaredevelopment,anditcallalsoreducethecostandriskoftheproject.Inaddition,itnotonlymakessoftwaremaintenanceeasierbutalsomakestheFCLISCofamlyticanddesignmodelsinthesimilarsystempossible.Keywords:UML.EmbeddedSoftware;Mode 独创声明本人声明所.呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含未获得(连!翅遗直墓丝霆要挂型直明丝:查拦互窒2或其他教育机构的学位或证书使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。学位论文作者签名:吾’j营移签字日期:删年箩月纠日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。本人授权学校可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。(保密的学位论文在解密后适用本授权书)学位论文作者签名:名’l侈为导师签字:獭勿习签字日期:孤,D6年5月乒f日签字日期:矿i年j月≯始学位论文作者毕业后去向:工作单位:通讯地址:电话:邮编: u虬在嵌入式软件开麓中的研究与戍用1绪论1.1引言‘在过去的十几年里,嵌入式系统的研发技术得到了很大的发展,尤其是嵌入式软件开发环境的发展,使一直“深埋”于系统的嵌入式应用软件变得开放而易于开发,从而促进了嵌入式技术的广泛应用。然而,伴随着嵌入式应用的不断增长,嵌入式系统的需求复杂性、不确定性也在不断地提高,系统规模越来越大,而产品的研发周期又在不停地缩短,这就给嵌入式软件的开发带来了新的挑战。而且嵌入式系统常常用于关键设备或过程的控制,因而必须具有高度的可靠性和健壮性。同时,嵌入式软件的开发者必须面对由于芯片性能的增长、嵌入式操作系统平台等技术方面的不断变化所带来的压力.根据近期的资料统计,在欧洲有34%的嵌入式软件项目在开发过程中被迫取消,72.7%的软件在产品开发完成时成本已超出预算的50%“1。因此,面对复杂的嵌入式系统,如何在开发过程中提高效率和质量,降低系统成本和风险,便成了嵌入式系统设计过程中的热点讨论问题,而传统的嵌入式软件开发方法则面临着严峻的挑战。目前,尽管有许多工具可用于嵌入式系统的开发,包括各种各样的嵌入式微处理器及其配套的板卡、许多不同的代码编译器、调试器、仿真器及综合的集成开发环境,但是在实际的研发实践中嵌入式系统的开发方法仍然没有太大的突破。主要的问题在于高层次的系统分析抽象阶段(包括需求分析、描述与设计)与目标环境中的开发编程阶段(包括代码的编写与测试)之间几乎没有中间步骤,这两者之问几乎是分离的,整个系统的开发往往是从很多具体的技术细节开始的,对系统根本没有一个全面而清晰的了解。此外,软件开发过程中没有一个统一的标准作为指导,使得系统研发过程中人为因素影响严重,开发出来的系统在效率、成本等方西存在不足。因此研究一种支持嵌入式系统从分析、设计、验证到编码这一整个开发过程的模型系统及建模方法就变得越来越重要了。面向对象的分析与设计方法由于内在地支持了对系统的分解、抽象、模块化和复用技术,能够有效地提高软件生产率,缩短开发时间,提高软件质量,很好地控制系统的复杂性⋯,因而已经被广泛地应用于各种应用系统的开发过程中,并取得了很大的成功。UML(UnifiedModelingLanguage统一建模语言)作为面 呲在嵌入式软件开发中的研究与应用向对象设计技术的代表在系统设计中已经获得了广泛的认可,在很多领域中也已经有了成功的应用。UML是一种可视化建模语言,它通过用例图、类图、合作图、状态图等一系列图形符号来描述特定的系统,支持不同层次的系统抽象,能够清晰而准确地描述特定系统的结构功能和行为。UML是一种语言,不是方法,它独立于任何一种开发过程,但支持过程。UML开发者提出的开发过程是用例驱动、以体系结构为中心、迭代递增的过程,这正是嵌入式系统开发的理想过程m。UML是作为元符号的标准而出现的,它被应用到软件世界去定义面向对象的软件系统的许多方面,在嵌入式软件领域也同样获得了极大的关注。因为它很可能作为一种方法去提高那些生产力能够被证明的领域的抽取水平,能够很容易识别错误并加以改正,能够提供更好的文件,并且嵌入式软件的设计者能够更有效地协作锄。UML采用可视化建模工具,通过对嵌入式系统需求、分析、设计、制作、测试和维护过程的结构特征和行为特征进行统一的工程化描述Ⅲ,从而能使开发者对所开发的系统有准确而全面的了解。正是因为这些特点,将UML分析建模的构建方法与相应的集成和测试策略相结合,可以使高质量的嵌入式系统的开发更为容易,从而在某种程度上解决了目前嵌入式软件开发所面临的问题和挑战。1.2嵌入式软件建模研究现状及意义1.2.1国内外研究现状UML定义良好、易于表达、功能强大,不仅支持面向对象的分析与设计,而且支持从需求分析开始的软件开发的全过程旧。但如何恰当地将这种可视化图形建模技术用于解决软件开发所面临的问题,如何研制和开发支持UML的建模方法及支持环境,仍是该领域的热点问题.目前,在使用L34L对嵌入式系统进行设计建模方面,国内外都进行了一些研究。在嵌入式系统建模方面所傲的研究,国外主要有Rational公司推出的RoseReaiTime和I—Logix公司的Rhapsody。RationalRose目前在面向对象分析、建模、设计工具市场起着主导作用。它支持L34L对象建模符号标准;支持构件化软件发展,允许使用者借助构件图清楚地表达构件皮其界面之间的关联;支持多种语言的软件开发,可从模型产生C++、Java、VB、Delphi、PB或Ada等的程序代码“1;支持正/逆向工程,可以将修2 u虬在嵌入式软件开发中的研究与应用改后的最新的程序代码状况迅速地反应到设计模型中,以保持对象设计模型与程序代码的一致性;强力支持团队开发,无论团队有10或100个成员,它均能有效地协调他们之间的工作。RoseRealTime是由0bjectT曲e和Rational公司合作开发的实时建模标准【7】。它合并了u订L?角色建模以及面向对象建模语言ROOM6P的概念,是一个新的、比较完善的可用于复杂实时系统建模的标准。它的出现使实时系统从分析到编码的整个开发过程的软件自动化更容易。I.I∞出的Rhapsody是一个基于眦的面向嵌入式实时应用开发的集成的可视化环境。它允许嵌入式软件工程师可视化地分折、设计、实施及测试基于UML的应用,并且提供了专门为实时和嵌入式应用设计的可执行的框架。它可以产生基于VxWorks、POS等多种操作系统的C、C++或Jaya语言的源程序。I-Logix公司刚刚发布TRhapsody的最新版本6.0,为嵌入式系统和软件技术带来了突破性的进展。ghapsody6.O是遵循UML2.O的模型驱动的软件开发平台,它能最大限度的让系统、硬件、软件和测试工程师以更加灵活和优化的方式协同开发和交流。它.的卓越特征表现在【81;支持1JⅦ2.0的增强功能;支持面向功能分解的结构化建模方式;模型/代码的相关性;可执行的模型;对C语言的专门优化;逆向工程;文档自动生成;需求管理;基于模型的测试;团队开发的广泛支持等等。现在,Rhapsody已经运用到许多嵌入式产品的开发项目中,根据Rhapsody公司的统计,即使第一次使用Rhapsody的用户也会缩短30%的开发周期。国外已经有许多使用UML进行嵌入式软件开发的成功的例子.曾经有一个有关IDESA(IntegratedDesignofDistributeEmbeddedSysteminIndustrialAutomation.工业自动化控制中分布式嵌入式系统的集成设计)的项目【91,该项目系统地介绍并成功地运用了U】蛆模型和代码生成系统去实践一个特定的嵌入式系统的软件发展.近几年,国内也有不少软件企业在学习并尝试使用UML来设计嵌入式系统,但从总体来看,这些企业对UML的使用还处于初级阶段,同时对LrML的了解相对而言还不够深入,跟西方发达国家相比存在一定的差距。1.2.2嵌入式软件建模的意义在计算机图形学中有一句名言,叫做“一幅图顶得上一千个字”.同样的,在软件开发过程中,模型的重要性也非常明显。模型是对事物的一种抽象,人{『】 uML在嵌入式软件开发中的研究与应用常常在正式建造实物之前,首先建立一个简化的模型,以便更透彻地了解它的本质,抓住问题的要害。在模型中,人们总是剔除那些与问题无关的、非本质的东西,从而使模型与真实的实体相比更加简单明了、易于把握。无论是对纯粹的软件系统的开发,还是对软硬件协同设计的嵌入式系统的开发,当系统复杂到一定程度,如果直接用编程语言去设计系统必定会增加出错甚至失败的可能性。因此,为了提高软件系统的开发效率和质量,系统设计的第一步应该是建立模型,即描述系统。开发者必须从多种不同的角度来抽象系统,使用准确的符号来构造模型,然后检查这些模型是否符合系统的需求,并逐步添加细节,从而将这些模型转化成实现方案。使用软件模型可以达到以下目的:(1)可以加强人员之间的沟通,使开发人员更好地理解问题,更准确地捕获用户的需求““。用户往往不是计算机专家,而开发者往往也不熟悉用户的领域,两者的沟通就有一定的难度。通过建立一个双方都能理解的模型有利于这种沟通,可以使项目投资者、分析人员、设计人员、程序员等达成一致,从而为建立正确的软件系统打下良好的基础。(2)通过对系统进行抽象,抓住主要方面,有助于我们理解复杂系统。(3)模型可以从多个角度来描述系统,从而能将实现细节和需求分开.并且通过模型可以设计出一些有用的实际产品如:类的声明或者初始的用户界面等,这些产品可以直接应用在后边的阶段中,为最后的代码生成提供依据。(4)在编写代码以前,使用模型可以帮助开发人员方便地研究软件的多种构架和设计方案,从中找出最适合的解决方案,简化实现过程。(5)使用模型可以更旱地发现错误或疏漏的地方,及时改正。这样既降低了人员消耗,也降低了系统风险。在嵌入式软件的开发中,模型的重要性更为显著.嵌入式系统不同于通常纯粹的软件系统或硬件系统,而是软硬件综合在一起的复杂系统。因此,在开发过程中所面临的挑战不仅涉及到软硬件,同时也会涉及到许多非计算机工程中的问题,如尺寸、功耗和成本等等。此外,嵌入式系统的软硬件协同设计过程需要不同技术背景的人共同开发m1,因此就带来了一个问题,即如何使这些具有不同技术背景和专长的人联合开发,协同设计。在诸多需求的限制下,模型就显得至关重要了。4 LtML在嵌入式软件开发中的研究与应用统一建模语言采用一种简单而直观的图形化方式来描述整个系统设计过程中的各个问题和细节,不同技术背景的人只要懂得简单的UML符号就可以轻松地与对方交流,共同设计。此外,使用u札对嵌入式系统建模,不仅可以使分析设计实现标准化,而且完全可以实现系统分析、设计和制作、测试分别由不同的项目成员在统一、一贯的方式下完成,也使得系统分析和设计模型在相似系统中的重用成为可能“”。正是基于这些原因,本文采用U札对所开发的嵌入式系统的结构和行为进行描述,将对系统的需求分析与设计转化为可视化的系统实现。1.3本文的内容组织近些年来,随着嵌入式应用的日益广泛,有关这方面的需求也越来越大,因此如何加快嵌入式软件的开发便成了人们研究的焦点。将眦面向对象的建模技术应用到嵌入式系统的开发中是软件工程发展的必然趋势。l、论文的研究目标本文针对目前嵌入式软件开发中的种种需求,引入建模技术旨在弥补传统的嵌入式软件开发方法所存在的不足之处。UML作为面向对象建模语言的标准,支持复杂系统的设计,尤其适合嵌入式软件的开发。因此,本文将UML分析模型的构建方法与相应的模型验证策略相结合,应用到嵌入式软件从分析、设计到验证、实现这一整个开发过程中,将嵌入式软件的开发核心从代码的编写转移到系统的建模及模型验证机制等方面的研究,并试图将这种基于UML的嵌入式软件开发技术引入一个崭新的应用领域,以摆脱传统的嵌入式软件开发方式的局限。2、论文的组织结构本文主要研究了UML建模过程中的一些关键技术,并将它应用到了一个嵌入式系统的开发中。论文主要内客及组织结构安排如下:第l章绪论。主要介绍了目前嵌入式软件开发及建模方面的研究现状和意义,并指出了本文的主要研究内容。第2章UML概述。主要介绍了UML的发展历史、内容概述、特点以及应用领域等。此外还对基于咧L的软件建模过程进行了研究。第3章基于UML的嵌入式软件开发技术研究。首先对嵌入式系统的概念及特点做了简要介绍,通过分析其开发过程中所存在的问题,指出了使用UML设计嵌入式软件的优势。在此基础上提出了基于U札的嵌入式软件开发方法及支持环 u札窿嵌入式软件开发中的研究与戍用境,对开发环境的组成和结构进行了研究。为了保证模型的正确性,紧接着我们介绍了基于LR,tL的嵌入式系统模型验证机制,并针对可执行模型的平台无关性讨论了在嵌入式软件开发中使用U札虚拟机的可能性。最后详细论述了如何使用文中所提出的这种基于uML的嵌入式软件开发方法来进行嵌入式系统的开发。第4章嵌入式指纹门禁系统中的UML应用。本章主要是以前文所提出的方法为指导,设计了一个指纹门禁系统实例,给出了使用文中所提出的方法对该系统进行开发的全过程。首先介绍了系统的开发背景及功能,在需求分析阶段,针对系统需求进行了用例描述,给出了系统用例图与类图。系统设计阶段,在静态和动态建模过程中,依据开发步骤设计了系统的顺序图、活动图等模型,并对用例、类等进行了详细描述,同时对嵌入式软件建模过程中所涉及的关键技术进行了相应的研究。完成了建模阶段的任务之后,依据可执行lIME的语义转换规则和本文所建立的模型框图,给出了系统的事件一状态矩阵,以此来完成模型的验证。最后,在实现阶段,给出了系统软硬件的总体设计与实现过程,并对代码编写部分的正向工程进行了简要的介绍。第5章总结与展望。对全文进行总结,并提出下一步的研究方向。论文从理论和实践两个方面展开,结合嵌入式软件开发所面临的问题,提出了一种适合于嵌入式软件的开发方法,并将其应用到一个嵌入式系统实例的开发过程中.通过分析开发过程的各个阶段,深入研究了u虬在这些阶段的作用和相关建模技术;并详细论述了如何使用该方法分析和构建系统模型,从而实现系统分析与设计的全过程。6 眦在嵌入式软件开发中的研究与戍用2统一建模语言UML概述2.1UML发展历史简介.自80年代以来,面向对象的方法与技术已受到越来越广泛的重视。基于实际的需要,国际上一些论述面向对象的分析与设计或建模与设计的专著相继问世。这些著作各自提出了较为完整的系统模型、表示法和实施策略,形成了许多不同的方法与技术,比较典型的有Boochl993、OOSE和OMT一2等“”。但各种面向对象的方法与技术在表示符号、模型及文档组织等方面存在一定的差异,到1994年尚未形成统一的标准及严格的定义,这使得用户在选择建模方法及工具时难以决策,也不利于彼此间的技术交流,因此统一建模语言便成为客观的需要。国际上,软件工程领域在1995至1997年取得了前所未有的进展,其中最重要的、具有划时代意义的成果之一就是统一建模语言u地的出现。它是由Rational公司的面向对象技术研究专家GrayBooch、IvarJacobson和J如Rumbaugh三入联合开发的。它采纳和扩展了Booch标记法、OMT(ObjectModelingTechnology对象建模技术)和面向用例的OOSE方法。并且吸收了其它学者和软件厂商的建议。1997年,UML被提交给OMG(ObjectManagementGroup对象管理组织),经过审批和修改,同年11月UMLI.1版本被OMG采纳,并成为大众所接受的标准建模语言。之后,对UML的改进工作由。黼的修订专业磐织RTF(RevisionTaskForce)接管,并产生了UMLl.2、1.3和1.4版本,其中UMLI.3是较为重要的修订版。2003年6月,OMG一致通过了uML2.0规范,从而使其得到了迸一步的发展和完善。图2-I给出了UlIL发展历程的简图。标准建模语言的出现是极其重要的成果.在美国,截止1996年10月,U】IlL获得了工业界、科技界和应用界的广泛支持,己有700多个公司表示支持采用u札作为建模语言。1996年底,UML已稳占面向对象技术市场的85%,成为可视化建模语言事实上的工业标准““。它代表了面向对象软件开发技术的发展方向,具有巨大的市场前景,也具有重大的经济价值和国防价值。2.2UML内容概述作为一种建模语言,cML的定义主要包括UML语义和UML表示法两部分。u札语义描述uML精确的元模型定义,即我们将用什么符号来表示要做的事情。元模型是IjML所有元素在语法上提供的一种标记方法,为我们建立模型提供7 u虬在嵌入式软件开发中的研究与应用了简单一致的通用方法。开发者能够在语义上取得一致,消除了因人而异的表达方法所造成的影响。如对于一个操作者,我们可以表示为一个圆或者一个小人。u忆给我们提供了一个标准:用一个小人来代表所有和系统发生关系但并不是系统的一部分的事物,即actor(操作者)。UML中的基本元模型有:操作者、用例、类、包、消息、关联、聚集、依赖、构件、结点、对象、状态、注释体等。U.两lL表示法定义了UML符号的表示法,为开发者或开发工具使用这些图形符号和文本语法为系统建模提供了标准。这些符号或文字表达是应用级的模型,在语义上是uML元模型的实例。2003年6月2003年3月2001年9月1999年6月工业化阶段标准化阶段统一阶段方法学大战阶段图2-1UML的发展历程在UML中,从任何一个角度对系统所作的抽象都可能需要几种模型图来描述,而这些来自不同角度的模型图最终组成了系统的完整图像。一般而言,我们可以从以下几种常用的视角来描述一个系统;(1)系统的使用实例:从系统外部的操作者的角度来描述系统的功能。(2)系统的逻辑结构:从内部描述如何设计实现系统功能。(3)系统的构成:描述系统由哪些程序构件组成。(4)系统的并发特性:强调并发系统中存在的各种通信和同步问题。(5)系统的配置:描述系统的软件和各种硬件设备之间的配置关系。可见,前两种视角对任何系统的开发都是必要的,而后三种对于大多数复杂系统,特别是分布式及并发系统而言,也是十分重要的。UML提供了以下九种基8芗≠声 u札在嵌入式软件开发中的研究与戍用本的模型图(其中包图不再看作一种独立的模型图),通过对这些图的综合运用来全面刻画整个系统的全貌㈣。图2—2给出了bn,lL可视化建模系统的体系结构“”。模型管理工具模型输入,输出工具文档生成,打印工具I可视化模型‘I建造子系统圆圆网嗣l墼茎堕l结构化图形编辑器生成工具图形支持库对象存取管理系统建模工具底层支持工具l语法正确性Il模型一致性ll模型完备性ll检查工具ll检查工具II检查工具l图2-2u札可视化建模系统的体系结构1.用例图用例图描述系统外部的执行者与系统提供的用例之间的某种联系。用例图分为用例和角色两部分.用例是对系统提供的功能(或者是系统的用途)的一种描述,角色(执行者)是那些可能使用这些用例的人或外部系统,而二者之闻的联系描述了“谁使用了哪个用例”。由此可见,用例图着重于从系统外部执行者的角度来描述系统需要提供哪些功能,并指明了这些功能的执行者是谁。2.类图所谓类是指一些具有相同属性和行为的对象。对象是人们对现实世界中的各种事物或概念的一种高度抽象。任何事物都可以看作是具有某些属性和动态行为的对象,而所有具有相同属性和行为的对象的集合构成了类。一个系统可以看成是一些不同类型的对象组成的,对象类之间的各种关系反映了系统内部各种成分之间的静态结构。类图主要用来描述系统中各种类之间的静态结构。类与类之间有着多种不同的联系,如关联、依赖、泛化和包含等等。所有这些联系以及类的属性和行为,都可以在类图中清晰地加以描述。9 UgL在嵌入式软件开发中的研究与应用3.对象图对象图是类图的一种变形。除了在对象名下面要加下划线以外,它所使用的符号与类图基本相同。二者的区别在于对象图显示的是类的多个对象实例,而不是实际的类。因此,对象图是对类图的一种实例化,即系统在某个时期或某个特定时刻可能存在的具体对象实例以及它们之间的具体关系。对象图并不像类图那样具有重要的地位,但是利用它通过具体的实例分析,有助于我们更具体地了解复杂系统的类图所表示的丰富内涵。对象图还常常被用作合作图的一部分,用以展示一组对象实例之间的动态协作关系。4.状态图状态图是对类的一种补充描述,它展示此类对象所具有的所有可能状态以及某些事件发生时其状态的转移情况。圆角矩形表示状态,箭头表示状态的转移,而转移旁标出的是所发生的事件。事件是指系统外界或系统内部的某个对象在某个特定的时刻发生的某种事情。5.顺序图顺序图由一组对象构成,每个对象分别带有一条竖线,称为对象的生命线,它代表时间轴,时问沿竖线向下延伸。顺序图描述了这些对象随着时间的推移相互之间交换消息的过程。消息用从一条垂直的对象生命线指向另一个对象的生命线的水平消息箭头表示。顺序图的重要特点在于它非常直观地展示了对象之间传递消息的时间顺序,反映了对象之间的一次特定的交互过程,即在系统执行过程中某个特定时刻所发生的事情。6.合作图与顺序图的作用相同,合作图也是用来描述系统中对象间的动态协作关系。人们通常会根据不同的应用场合和系统特点来选择使用这两种图。合作图侧重于描述各个对象问的消息收发关系,而不专门突出这些消息发送的时间顺序。合作图是对象图的另一种表达方式,它描述系统中的对象及其相互之间的通信关系。7.活动图活动图通常用来描述一个操作中所要进行的各项活动的执行流程。同时它也常被用来描述一个用例的处理流程,或者某种交互流程。活动图由一些活动组成,图中同时包括了对这些的说明。当一个活动执行完毕之后,控制将沿着转移箭头转向下一个活动。活动图中还可以描述控制转移的条件以及并行执行等要求。10 m儿在嵌入式软件开发中的研究与应用8.构件图构件图描述程序代码的组织结构。构件可以是源代码构件、二进制目标码构件、可执行构件或者文档型构件。构件图说明各种构件之间的依赖关系,从而便于人们分析和发现当修改某个构件时可能对哪些构件发生影响,以便对它们做出相应的修改或更新。9.配置图配置图描述系统中硬件和软件的物理配置情况和系统体系结构。在配置图中,用结点表示实际的物理设备如计算机等,并根据他们之间的连接关系,将相应的结点连接起来,并说明其连接方式。在结点里面,说明分配给该结点上运行的可执行构件或对象,从而说明哪些软件单元被分配在哪些结点上运行.UML的这些图为系统的分析、设计与建模提供了多种图形表达方式,可应用于开发的不同阶段,它们的有机结合就有可能分析与构造一个一致的系统。从应用的角度看,当采用bML设计系统时“”,首先是描述需求;其次根据需求建立系统的静态模型以构造系统的结构;第三步是描述系统的行为。在第一步与第二步中所建立的模型都是静态的,包括用例图、类图、对象图、构件图和配置图五个图形,它们是UML的静态建模机制。第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系,它包括状态图、活动图、顺序图和合作图四个图形,是uML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。2。3UML主要特点及应用现状2.3.1UML的主要特点U札可以说是一种定义良好、易于表达、功能强大且普遍适用的建模语言,它为用户建模提供了完整的符号表示和不同层次的原模型.它的作用域不仅支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。它的主要特点可归结为以下几点:(1)统一的标准嘲。UML统一了Booth、OMT和OOSE等方法中的基本概念,并被OMG接受为标准的建模语言,越来越多的开发人员和厂商开始支持并使用UML进行软件开发。(2)U札吸取了oo技术领域中其它流派的长处,包括一些非00方法的影响, ulIL在嵌入式软件开发中的研究与成用同时也溶入了软件工程领域的新思想、新方法和新技术,它是开发者依据最优秀的oo方法和丰富的计算机科学实践经验综合提炼而成的“”.(3)硼L在演变过程中提出了一些新的概念,如模板、扩展机制、线程、分布式、并发等,为分布式、并发以及实时系统等的开发提供了支持。(4)面向对象、可视化、表示能力强大。丰富的符号表示使得UML成为众多应用程序领域中有关获得系统文件、规格说明、捕获用户需求、定义初始软件体系结构的一种受欢迎的建模语言。(5)独立于过程。UML不依赖于特定的软件开发过程,这也是它被众多软件开发人员接受的一个原因。(6)概念明确,建模表示法简洁,图形结构清晰,容易掌握和使用。2.3.2UML的应用现状UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域瑚。最常用的是建立软件系统的模型,如企业信息系统、银行金融系统等。它同样可用于描述非软件领域的系统,如具有实时要求的工业系统或工业过程。u扎在系统开发的各个阶段都能得到应用。在分析阶段,用户的需求采用用例图来描述;在设计阶段,引入具体的类来处理用户接口、数据库存取、通信等问题;在实现阶段,用面向对象程序设计语言将来自设计阶段的类转换成实际的代码;在测试阶段,LⅥL模型作为生成测试用例的依据,如进行单元测试时使用类图,集成测试时使用合作图来验证系统的行为等。由于u地具有可扩展性和通用性,适合为各种多变的系统建模,因此国外各大公司纷纷引入UML对系统进行分析与设计。在美国,电信业的阿尔卡特、易特信,运输国防业的英国航空、洛克希德,制造业的富豪汽车、英特尔,软件业的Oracle、Borlnnd等,这些著名大公司都引入UML来提升企业内部软件歼发的标准与竞争力。一份2003年3月至2004年3月的调查报告显示“”,在接受调查的320个企业中,有171个企业使用uML来对系统建模,大部分项目都得到了成功。我国软件工程的研究和应用较落后于西方发达国家,加入WTO之后,软件开发面临着全球化的竞争,国内的软件公司也意识到使用UML进行系统分析与设计的重要性,目前不少企业正处丁刘此摸索学习阶段。总的来说,综合使用UML以及它的代码生成工具目前来讲仍然较受局限,但由于引入了可执行UML,所以 u札在嵌入式软件开发中的研究与应用人们预期对U札及其代码生成工具的使用将会增加。2.4UML的优缺点1.[JML的优点(1)从理论角度讲,哪L是三位很有影响的面向对象方法大师以及许多大公司共同努力的结果,它在定义模型元素语义的基础上定义建模语言,使UML在理论上比较健全,具有表达力强、清晰和一致的特点。(2)u札能有效消除开发过程中各参与方之间的隔阂,需求工程师、系统分析员、软件开发人员和测试者都可以使用同一种语言。它还有助于消除角色间的界限,使得在项目的不同阶段人员转换到被需要的角色更加容易。更重要的是,用户也能加入到整个开发过程中,与创建系统的不同人员进行交流咖1。(3)UIIL支持正向工程,只要提供足够的信息,运用适当的工具,就能生成大部分和全部系统所需的代码。使用建模语言代替编程语言,在正向工程中,一般说来可忽略掉一些令人不快的细节,比如分布式、代理和内存管理,并且让工具去生成它们的代码,这能有效减轻开发人员的负担。(4)u虬同时支持逆向工程。逆向工程将用户修改后的代码转化到模型上,从而保持模型与代码的一致性,使系统的扩充、增删和维护工作高效进行。(5)运用u札通过对系统建模可以有效模拟软件系统的正确与否,及早纠错改正,使系统按预定方式工作。换句话说,项目风险被极大地降低。同时,测试也能被更早和更频繁地进行,这样可花费更少的时间用于实现和测试阶段,更多的时间用于分析和设计阶段,最终有效减少整个开发周期和降低开发成本。到目前为止,u帆已成为软件工业中占支配地位的建模语言,并在许多领域的软件开发中得到成功应用。2.U眦的缺点。(1)U虬缺乏过程指导UML只是一种建模语言而非建模方法,它没有定义一个指导过程。正如仅靠一本词典和一本语法书并不能写出文学名著一样,仅有UML也不能开发出真正好的系统,要想保证软件的质量,过程的指导是必不可少的。(2)U札过于复杂L'ML在具有丰富的表达力的同时,其复杂性也相当惊人。虽然UML的开发者 u札在嵌入式软件开发中的研究与虚用声称只要LrML中20%的内容就可以表达实际应用中80%的系统,但b,*ML中并未给出哪些内容是必需的,哪些是可选的,这给用户使用带来了诸多麻烦。OMG也意识到了此复杂性,因此正对其进行着不断的修订。(3)L.mIL只是图形化描述语言,比较适用于面向对象的程序设计,对于精确的规格设计或非面向对象的设计来说就不尽如人意了乜11.(4)删L只是将语法和图的语义学标准化了,并未对功能的实现和软件中图的结构给出详细的语义。此外,UML设计模型的执行过程中经常出现缺陷和障碍,这通常会导致软件与它们的设计模型不一致,以至于这些描述往往是没有用处的。这其中有很多原因,有些是由于系统建模时所使用的方法论引起的,其它的是由开发过程中模型所扮演的角色引起的。因此基于这种符号的建模工具和方法论将是以后研究的主题。UML虽然包罗万象,但不可能将全部的好的建模技术包括在内。UML在形成规范的过程中不得不照顾多种方法的观点和多家公司的剩益,因而在语言体系结构、语义等方面仍存在理论缺陷,应客观认识到LrML存在的问题并设法解决,例如把不常用的内容放到定义良好的外围或扩展机制中,提供一个更精炼的核心,使之更简洁、更完善。尽管UML存在这些不足,但是我们相信,它演变成一个有用的、被完善定义的框架去实现嵌入式系统的描述、细化和实现是十分有可能的。例如,在UML2.0的范国内规格描述语言已经被重新定义了,因此它可以被认为是堋L的一个特定的轮廓,并且SDL(SpecificationandDescriptionLanguage特定描述语言)和UML的工具可以继续融合嘲。同时,UML在灵活性方面已经进行了扩展,使得它允许使用嘲L去创建特定的应用程序领域。因此从这种意义上讲,U乩不仅仅是一种统一语言,更是建造特定应用程序语言的基础。2.5基于UML的软件建模过程2.5.1UML建模机制复杂软件系统的开发是一项工程,必须按工程学的方法组织软件的生产与管理,必须经过分析、设计、实现、测试、维护等一系列的软件生命周期阶段。这是人们从软件危机中获得的最重要的敦益。这一认识促使了软件工程学的诞生,编程仍然是重要的,但更具有决定意义的是系统建模。只有在分析和设计阶段建14 IfI也在嵌入式软件开发中的研究与应用立了良好的系统模型,才有可能保证工程的正确实施。I..B,tL是一种通用的标准建模语言,它可以对任何具有静态结构和动态行为的系统建模。按照面向对象软件开发的理念,在具体开发一个应用项目时,b'ML的建模过程通常可以分为以下4个阶段僻1:(1)用例建模。需求分析阶段,首先要对系统基本功能需求进行描述,接着可以使用用例来捕获用户需求。用例建模阶段,首先找出系统的执行者,分析执行者要做什么;在此基础上,获取用例,确立好角色;然后依据系统功能来确立系统的用例模型,建立用例视图矧.(2)静态建模。在静态建模阶段,将从系统的内部结构和静态角度,分析和描述系统中的各类实体(对象和类)以及它们内部和彼此间的关系,确定实体功能范围的约束和限定,建立系统的粗略框架,再逐步细化其内部功能需求,最终建立系统的静态模型。静态建模的结果是建立逻辑视图,主要包括类图和对象图等。(3)动态建模。为实现用例,类之间需要协作,这可以用L'ML动态模型来描述。动态建模阶段的主要任务是在前两个阶段的基础上,分析系统中各种行为发生的时序状态和交互关系,各类实体的状态变化过程,从而动态描述系统行为,反映系统内部对象之间的动态关系.动态建模应建立并发视图,包括顺序图、合作图、状态图和活动图。通常可以根据需要只选取其中一到两种图来说明问题,而不必全部罗列出来。’(4)实现与测试。实现阶段是采用面向对象编程语言将来自设计阶段的类转换成实际的代码的过程。可以选择某种面向对象的编程语言(如C++、Java等)作为开发工具。UML模型还可作为测试阶段的依据。在完成系统编码后,需要进行测试以保证所开发的系统符合用户需求。测试通常包括单元测试、集成测试、系统测试和验收测试。不同的测试小组使用不同的LmIL,图作为测试依据:单元测试使用类图和类规格说明;集成测试使用构件图和合作图;系统测试使用用例图来验证系统的行为;验收测试由用户进行,以验证系统测试的结果是否满足在分析阶段确定的需求。由于UML所建立的图符不能直接执行,因此需要在过程模型环境的支持下转换成代码。过程模型环境的主要功能是:过程模型的分析与设计、模型语法正确性及一致性检测、可视化对象和行为代码生成,文档自动生成、动态分析执行结果、代码到模型的逆向工程等.为此,在实现阶段我们可以根据实际情况,选择 ullL在嵌入式软畔开发中的研究与戌用合适的代码生成工具,将模型映射为不同语言的代码框架阱1。用工具生成的代码。框架主要是将类的属性、方法、参数及类之间的关联映射为相应的代码,方法的实现需要手工编程完成。完成后的代码在过程环境支持下模拟执行,对当前过程执行状况进行监控,收集诸如资源使用情况,活动代理响应时间等方面的信息,并做出统计报告,根据以上信息改进所建立的模型。并依据新的模型再次指导代码的生成,直到产生完整正确的代码。总之,U!I{L的建模过程是非常灵活的,开发者可以使用其全部或部分静态图和动态图来描述和分析应用系统,并且该过程可以循环往复。2.5.2基于UML的软件建模过程的特点删L中虽然没有包含过程指导,但其设计的目的是为了支持大部分现存的面向对象开发过程。总的来说,基于乙札的建模过程主要有下列特点:(1)以体系结构为中心多年以来,软件设计人员一直强烈地感觉软件体系结构是一个非常重要的概念。因为它使得开发人员及用户能够更好地理解系统的逻辑结构、物理结构、系统功能及其工作机理,也使系统的修改及扩充更加容易。一个确定的体系结构对于软件开发是十分重要的,因此使用呲的建模过程也应当以体系结构为中心。在Rational统一过程中,采用如图2-3所示的4+iView模型,利用uML语言来描述软件的体系结构惰1。这5个视图都是从相应的模型中抽取出对系统的结构、功能、健壮性及其可扩充性有重要意义的元素构成,是各模型的精华与核心部分。图2—3U地中的“4+I”视图(2)用例驱动传统的面向对象开发方法因为缺乏贯穿整个开发过程的线索,因此很难清楚地阐述一个软件系统是如何实现其功能的。而在嘲L建模过程中,用例模型就是这样一个线索,它是整个软件开发过程的基础。项目往往是从分析系统需求开始的,UgL使用用例捕获系统的功能需求。用例模型是需求分析工作流的结果,它从用户的角度描述该系统应该实现的功能。然而。用例并不仅仅是一种定义系统16 U札在嵌入式软件开发中的研究与应用需求的工具,它还驱动系统的设计、实现和测试,即驱动整个系统开发过程㈨.用例可以作为分析与设计工作漉的输入,是实现分析与设计模型的基础。同样在测试工作流中,用例模型组成测试实例,用来有效地校验整个系统的正确性.另外,用例还是用户手册的基础、并驱动整个迭代开发过程的运作。这样,用例不仅启动了开发过程,而且与整个开发过程有效结合在一起。(3)增量和迭代增量迭代的基本思想是将大型系统的开发分解为多个顺序开发的部分,先确认一部分,再傲下一部分,当下一部分和上一部分有关联时,可对上一步的结果进一步验证、修改,通过多次反复迭代直至整个项目完成。开发一个系统往往持续几个月或者更长的时间,因此将此工作划分为几个小部分是很实际的。每个小部分能导致一个增量的一次迭代。迭代指的是工作流中的步骤,增量指的是产品的增长。为了高效开发,必须有选择有计划地实现迭代。开发人员根据两个因素选择在一次迭代中实现什么。首先,迭代与一组用例有关,这些用例共同扩展了到目前为止所开发产品的可用性;其次,迭代涉及最重要的风险,后续迭代是建立在先前迭代完成后的成果之上的。因此,从用例开始,必须经过分折、设计、过程执行和评价阶段。当然,增量并不一定具有添加性,在项目开发早期,开发人员可能会用一个更详尽或者更复杂的设计取代以往较简单的设计。通过迭代,项目开发的相关人员能够及时从迭代过程中得到反馈信息,并修改以前工作中的失误,有效地监控开发过程,并对迭代工作流进行校正,这对时间跨度较长的嵌入式系统的开发具有重要的意义.以用例驱动为核心的迭代过程瞌力如图2-4所示。图2—4以用例驱动为核心的迭代过程总之,以体系结构为中心、用例驱动、增量迭代为特点的U札建模过程能够使系统开发人员较容易地控制整个开发过程,管理其复杂性、维护其完整性。 u虹在嵌入式软件开发中的研究与戌用2.6支持UML的建模工具下面是一些值得考虑的UML建模工具:1.Visio:微软的VisioProfessional2003提供内建的U札支持,是一个功能强大的绘图工具。2.RationalRose:它是Rational公司开发的一种使用LML进行面向对象分析和设计的工具,目前有较高的市场占有率。有TRationalRose这样的工具,改进和维护设计、在平行协作环境中与他人共同进行建模工作就很方便了.3.MagicDrawu地:一个基于Java的廉价UML建模工具,支持Java、C++、C#等的正向工程和逆向工程。4.Together:它是用Java语言开发的功能非常强的删吐工具,与C/CH和Java联系密切,支持LML建模,最新版本是6.1。5.ObjecteeringUML:一个免费的个人删L产品。6.SystemArchitect:一个很受欢迎的高端u皿建模工具,支持双向工程。7.VisualLML:它是VisualObjectModelers公司开发的一个易用的且完全支持ullL的可视化对象建模工具,支持vB、c#、Java的双向工程和c++的代码生成。8.MicrosoftVisualModeler:它是由Rational公司为微软公司编制的基于UML的创建应用程序的建模工具,其最大特点就是与程序开发工具、数据库以及VisualStudi06.0中其它工具的结合很好,更好地发挥其建模和模型的作用。它从模型中可产生v13和vc++的代码,也可以从vB代码产生和更新模型汹1。9.ArgobML;它是用纯Java开发的,可用于几乎所有的平台上,支持所有的对象约束语言,并可依据对象约束语言表达式产生Java代码。lO.BridgePoint:它是ProjectTechnology公司开发的,特色是在建模的早期就可以执行模型,观察模型是否符合要求,并把模型编译为可执行代码。由于Rational公司提供了丰富的CaseI具支持统一开发过程,比如:可视化建模工具Rationa]Rose;需求管理工具RequisitePro;软件配置管理工具ClearCase;文档自动生成工具SoDa;测试工具SQA等,因此鉴于以上几种建模工具的特点及实际情况,在本文中我采用Rose2003绘制系统的各个模型,采用图形化方式刻画系统的需求和堤计,自动生成对应的软件框架.根据实际要求填写代码,以此来指导文中嵌入式软件实例的分析、设计、验证以及实现过程。 U札在嵌入式软件开发中的研究与应用2.7本章小结本章主要研究了U鼽的理论知识。首先介绍TLIqL的发展简史,紧接着简要介绍了U她的主要内容、模型框图、优缺点以及应用领域等,对其软件建模思想及过程也进行了研究,最后给出了几种常用的支持删L的建模工具。通过对本章内容的研究,对U札的理论知识有了较为深入的理解与掌握。19 u肛在嵌入式软件开发中的研究与戍用3基于OML的嵌入式软件开发技术研究3.1嵌入式系统概述3.1.1嵌入式系统的定义·嵌入式系统的诞生可以追溯到上个世纪70年代,随着Intel公司推出第一款商用的4位微处理器芯片4004以来,嵌入式计算机系统的概念就应运而生。所谓嵌入式系统实际上是“嵌入式计算机系统”的简称,它是相对于通用计算机系统而言的。嵌入式系统本身是一个外延极广的名词,很难给它下一个准确的定义,目前被国内人士普遍认可的定义是汹1:以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。可以从以下几个方面来理解嵌入式系统的定义:(1)嵌入式系统通常是面向特定应用的洲。嵌入式CPU与通用CPU最大的不同就是嵌入式CPU大多都工作在为特定的用户群所设计的系统中,通常具有低功耗、体积小、集成度高等特点.它能够将通用CPU中许多由扳卡完成的任务集成在芯片内部,从而有利于嵌入式系统的设计趋于小型化,移动能力大大增强,跟网络的耦合也越来越紧密。(2)嵌入式系统是将先进的计算机技术、半导体技术、电子技术和其它各个行业的具体应用相结合后的产物。这就决定了它必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。(3)嵌入式系统的软硬件都必须高效设计,量体裁衣,去除冗余,力争在同样的硅片面积上实现更高的性能。(4)嵌入式系统和具体应用有机地结合在一起,它的升级换代也是和具体产品同步进行,因此嵌入式系统产品一旦进入市场,具有较长的生命周期。(5)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。(6)嵌入式系统本身不具有自举开发能力。即使设计完成以后,用户也不能对其中的程序功能进行修改,必须有一套交叉开发工具和环境才能进行开发。综合起来讲,整个嵌入式系统在设计时要满足功能强大、可靠性高、成本低、体积小、功耗低等要求。20 u札在嵌入式赣件开发中的研究与戍用3.1.2嵌入式系统的特点嵌入式系统通常由硬件和软件两部分组成。它的软件部分主要是指操作系统软件和应用程序编程,而它的硬件部分则主要包括做处理器、存储器以及外设等等。嵌入式系统与通用计算机系统相比有五个明显的特征:(1)专用性:指嵌入式系统主要用于特定设备来完成特定的任务。(2)可封装性:指嵌入式系统隐藏于目标系统内部而不被操作者察觉。(3)外来性:指嵌入的计算机一般自成一个子系统,与目标系统的其它子系统保持一定的独立性。(4)实时性:指与实际事件的发生频率相比,嵌入式系统能够在可预知的极短时间内对事件或用户的干预做出响应。(5)可靠性:指嵌入式计算机隐藏在系统或设备中,用户很难直接接触控制,因此一旦工作就要求它可靠运行.3.2嵌入式软件开发面临的问题嵌入式系统的设计是一个软硬件协同设计的过程,它需要不同技术背景的人共同开发,因此就带来了一个问题,即如何使这些具有不同技术背景和专长的人联合开发,协同设计。综合起来,传统的嵌入式软件分析与设计方法存在的主要问题为:(1)分析与设计方法不一致,开发过程没有一个确定的统一的标准;(2)从分折、设计至临8作和编程没有一个始终一贯的工程化方法,使得产品形成的每一个过程人为因素影响十分严重;(3)分析设计的结果不能在开发类似项目或产品时重用。以上几个方西的问题成为多年来制约嵌入式系统发展的主要瓶颈,使得大部分从事嵌入式软件开发的组织和团体,基本上是采用小组甚至是作坊式的运作模式“”。这使得开发较复杂或大型系统的工作变得十分困难甚至无法进行,或因为系统需求的不断变化或小组成员的流动导致项目失败。3.3采用UML设计嵌入式软件的优势嵌入式软件开发过程中产生以上所述的问题,主要原因是没有一个对嵌入式系统需求、分析、设计、制作、测试和维护过程的结构特征和行为特征统一的工程化描述方法,不同阶段的工作人员按照各自的方法进行开发,以至于分析,设21 呲在嵌入式软件开发中的研究与应用计与实现等过程严重脱节。统一建模语言UML提供了可视化工具,使得开发人员对软件的分析建立在对真实世界抽象思维的基础上m1,能够在某种程度上解决上述嵌入式软件开发中所存在的难题。为此,在本文中我们将嘲L引入了嵌入式系·统的软硬件协同设计过程,提出了基于uML的嵌入式软件开发方法。将眦引入嵌入式软件的开发过程的主要原因及优势如下:(1)随着嵌入式系统的日趋复杂化,较多的系统都需要由一个团队共同完成,因此,团队成员之间的相互合作,软硬件之间的协同开发,乃至开发人员和客户之间的交流都需要有一个统一的标准作为基础,UML正是这样一种标准的系统建模语言。它采用一种简单而直观的图形化方式描述系统开发中的各个细节,统一的符号模型为开发人员提供了统一的开发标准。”,不同技术背景的设计师只要懂得简单的UML符号就可以轻而易举地与对方交流,共同设计,这就解决了文中3.2所述问题中的前两个方面。目前,UML已经成为一个得到包括IBM、Intel、Microsoft、Sun等众多知名大公司在内的广泛接受的标准,被OMG组织强烈推荐为面向对象的产品研发过程中标准的建模语言。(2)UML是面向对象的图形化的建模语言,可视化描述比较直观,“用例”等概念给系统的需求分析带来了便利。同时,它可以详细地描述系统的内容和工作方法,先进行系统建模再编写代码,在开始阶段就保证了系统结构的合理性。并且为系统建立了可视化的组织结构和行为结构,实现了用户需求的可视化表示,缩短了系统的开发周期,尤其是很好地适应了嵌入式软件开发中用户需求的复杂性和多变性。(3)UML模型系统包含了许多不同的框图,便于开发人员从不同的角度了解整个系统。其中的对象约束语言利用文字标记可以清晰准确地描述bML基于图例所无法说明的状态属性,这有利于对大型的复杂的嵌入式系统的准确了解。(4)UML并不是一种单一的语言,它是一些符号、语法、语义的集合,它允许针对特定的应用程序而生成语言体系。换句话说LⅥL是一种元语言,它支挣能够建模和合成的状态机语义;支持基于对象的体系结构的重组和优化∞1。其中的合作图、顺序图、活动图等概念给实时嵌入式软件的设计带来了便利m1。(5)在嵌入式系统的开发中,使用模型能够捕获设计过程中应用程序的服务质量需求、资源集合,例如不同的抽象水平层次的相互关系等等,尤其是资源的舰划调度和使用,这对于性能要求较高的嵌入式软件的设计来讲是十分重要的。 u虬在嵌入式软件开发中的研究与应用(6)u札可以用统一的形式表现软件和硬件,支持循环迭代并可多次修改软硬件方案直到满足要求,因此可以很好地支持大型的复杂的嵌入式软件开发中的迭代增量思想,并可实现嵌入式系统的软硬件协同设计。,(7)有利于项目的回溯与测试。在系统开发过程中所有的分析与设计模型都’被保存下来,以便在相似系统中重用或供下次开发使用。这一特点解决了上述3.2章节中所提出的第三个方面的问题。总之,使用嘲L对嵌入式系统建模,不仅可以使系统分析设计实现标准化,而且完全可以实现系统分析、设计和制作、测试分别由不同的项目成员在统一、一贯的方式下完成嘲。基于uML的嵌入式软件建模方法在某种程度上解决了嵌入式软件开发中所存在的问题,提高了软件开发效率,降低了系统开发成本.3.4基于UME.的嵌入式软件开发方法嵌入式软件典型的开发方式是“宿主机/目标机”方式:首先利用宿主机上丰富的资源和良好的开发环境开发和调试目标机上的软件,然后通过串行口或网络将交叉编译生成的目标代码传输并装载到目标机上,并用交叉调试器在监控程序或操作系统的支持下进行实时分析和调试,最后目标机在特定的环境下运行.在对嵌入式软件进行开发时,无论采用传统的那种顺序的开发方法,还是采用文中所提出的迭代增量式的柔性开发方法,其整个开发方式都是上述。宿主机/耳标机”方式,只是系统开发时所采用的指导过程不同而已。3.4.1传统的静态的开发方法传统的嵌入式软件的开发方法和一般软件的开发一样,必须经过分析、设计、编码、测试四个阶段。分析过程定义了软件要解决的问题,设计过程定义了问题的解决方法,编码是对设计部分的具体实现,测试过程可以验证系统是否满足需求,实现是否满足设计。图3一l给出了传统的嵌入式软件开发的一般过程“1.总的来看,这种传统的嵌入式软件开发方式最大的特点是以源程序的开发和测试为核心的。但是由于嵌入式产品的更新换代较快,因此就要求研发周期尽可能的短,同时在开发过程中能动态地调整需求。而在传统的这种静态的开发过程中,一般来讲需求工程师只负责系统分析,硬件工作人员负责硬件电路的部署与实现,而程序员则负责软件代码的编写,各阶段开发人员之间几乎没有交流和统一的开发标准,因此很容易造成系统需求分析和设计与具体的实现之间的脱节· u札在嵌入式软件开发中的研究与应用另外,这种开发方法对系统的需求和设计的验证是在开发过程的最后阶段进行的,这种软件完全实现后的验证往往会带来很大的风险和开支,甚至由于分析或设计的错误或缺陷而影响产品的实现。因此,传统的这种静态的开发方式已经不能适应嵌入式软件研发的要求。田争1传统的嵌入式软件井发过程3.4.2迭代增量式柔性开发方法如前所述,嵌入式软件不同于一般的中小型软件,其开发周期长,效率低,费用高,开发出来的系统质量难以保证,产品难以维护,因此使得其开发规模及复杂性远远超出人脑所能直接控制的程度,开发出来的系统大约有一半以上存在问题,要么不象预期的那样起作用,要么根本不能使用汹1.因此它的开发不能再沿袭早期的手工作坊式的开发方式,而必须立足于科学的理论基础上.而目前的软件开发方式主要归结为迭代增量式开发过程和柔性软件开发模式。图3-2迭代式软件开发方法迭代增量式软件开发过程如图3-2所示。该方法不是在项目结束时一次性提交软件,而是分块逐次开发和提交。每一次迭代都包含了软件生命周期的所有阶段,即分析、设计、实现和测试。一次迭代是一个完整的开发循环,产生一个可执行的产品版本,是最终产品的一个子集,它增量式地发展,从一个迭代过程到另一个迭代过程到成为最终的系统。由于迭代式软件开发方法能尽早发现项目的 呲在嵌入式软件开发中的研究与戍用风险,并对其进行有效的控制,它已得到广泛的肯定,几乎所有的面向对象的资料都认为应当采用这种开发方法。同时,该方法可以保留系统的整个设计过程,这对于促进开发团队之间的交流理解,增强开发效率具有很重要的作用。而柔性软件开发模式(见图3—3所示)是指在需求工程的牵引下,首先建立系统模型,对模型进行模拟、分析和调整,进行从需求到建模的。自顶向下建模,由底向上修改”∽。整个开发过程是这样的:首先明确用户要求,确定需求优先级;在此基础上为系统建立可执行的模型,通过对模型的模拟运行,分析模型是否满足用户需求和满足的程度。整个建模过程是自顶向下逐层细化的,而模拟修改则由底向上进行。然后在保证模型正确的基础上,进行代码的生成。同时考虑到对需求修改的灵活性和快速响应能力,可以采用“闭环开发”模式,即不仅支持从模型到代码的自动生成,还能支持从代码到模型的逆向变换,将修改后的代码转化成模型,进行再次分析、修改和调整,进行新一轮的开发,从而为增量式开发提供支持。同时,分阶段提交产品也提高了对用户需求变化的响应速度和应交能力。图3-3柔性软件开发模式在嵌入式系统的设计中,日益增长的软件优势需要我们对软件描述和分析的最新的方法进行仔细的调查研究。在实时领域中统一建模语言的发展和一系列扩展方法和提议使得新的设计流程发展起来。这种设计流程超越了静态的和传统的那种软硬件分离的方法。u札已经有能力为大多数和嵌入式实时系统有关的特征建模,例如性能(使用标记的属性或者对象约束语言)、资源(使用构件图或配置图)和时间(使用分类器或标记属性)。然而,由于UML只是一种建模语言,不是开发方法。在缺乏一个标准的和统一的建模方法的情况下,对于同一个嵌入式系统的描述与说明,可以采用不同的方式去建模。因此,如何使用UML为嵌入式系统建模已经成为最近一个比较活跃的研究领域。本文提出了一种新的开发方法能够更好地支持UML对嵌入式软件的开发。这种基于UML的嵌入式软件开发方法融合了上述两种软件开发模式,我们将其称之为迭代增量式柔性开发方法。即在整个系统开发过程中运用迭代增量的开发思 UML在嵌入式软件开发中的研究与应用想,而在每个软件版本的开发过程中采用柔性的软件开发模式。由于嵌入式软件的需求复杂性较高,难以一次性确定,因此在开发的初期,我们并不是将所有的需求都确定,这时可以对那些已确定的需求进行分析,设计系统的模型,通过模拟和修改来获得正确的模型,然后利用正向工程实现系统代码,最后通过测试结果来验证是否满足用户需求,通过该次柔性开发过程便生成了系统的一个最初版本。这部分工作结束时,又有新的需求了,我们可以按上述步骤进行,经过反复迭代,软件开发过程递增向前产生不同版本的软件,直至获得系统的最终版本。这种迭代增量式柔性开发方法能够充分利用呲建模机制的优点,统一的标准加强了人员之间的沟通与合作,很好地支持了软硬件的协同设计;迭代增量的思想能够更好地适应用户需求的变化并有利于系统设计的复用性:模型的模拟和修改可以较早得发现设计阶段的错误,降低了系统开发成本和风险;代码的生成提高了系统开发效率。总之该方法能克服传统的嵌入式软件开发方式所存在的不足,很好地适应目前嵌入式软件开发的需求。3.5基于UML的嵌入式软件开发环境要开发一个完整的系统,除了要提供开发方法之外,开发环境也是必不可少的。因此在使用前文所述的迭代增量式柔性歼发方法对嵌入式软件进行开发时必须有相应的支持环境。传统的嵌入式软件开发环境是一种软硬件协同设计的交叉编译环境,首先通过模块化对系统软硬件功能进行分工,然后利用宿主机和目标机分别实现软硬件功能,最后通过程序下载、调试、固化来集成软硬件功能。而本文前面提出了一种新的基于埘L的嵌入式软件开发方法,在使用这种迭代增量的方式进行嵌入式软件的开发时,如果采用传统的手工编码、基于源程序的测试手段,这势必影响迭代周期,因此我们考虑使用基于模型的调试。此外,为了支持柔性软件开发模式,基于UML的软件开发支持环境应集成UML可视化建模系统、uML模拟系统、UML代码生成系统、U札逆向变换系统等,且这些环境的创建均应是基于UML的定义,从而能够很好地支持系统建模、模拟和“闭环式开发”。综合传统的嵌入式软件开发环境的优缺点和UML软件开发支持环境的要求,我们对嵌入式软件的开发环境进行了改进,认为有效的嵌入式软件开发环境应该支持可税化的建模,支持基于模型的调试,支持迭代式开发方法㈨。基于以 U虬在嵌入式软件开发中的研究与应用上原因,一个基于UML的嵌入式软件开发环境至少应该包括可视化建模、可执行的模型、模型代码的相关性、实时框架四个部分,其模型如图3-4所示。图3-4基于UML的嵌入式软件开发环境的组成1.可视化建模前文所提出的开发方法是以模型为核心的,为了支持该方法,开发环境应提供可视化建模系统。建模是面向对象分析与设计的核心,也是分析和设计过程中最基本和最关键的活动之一,面向对象的分析和设计应该从建模开始。文中图2—2已经给出了UML可视化建模系统的体系结构,该系统支持从需求分析到系统设计的整个建模过程,提供u舭图形的编辑和美化工具,保证得到语法正确、语义完整的LIVlL模型图,并提供包括文档管理、图形打印等辅助支持m1。UML不仅适用于以面向对象描述的任何类型的系统,而且适用于系统开发的不同阶段。因此,在对嵌入式软件进行开发时,我们可以利用开发环境所提供的可视化建模系统,采用标准的u札为系统建模,根据开发过程中不同阶段的具体要求,通过类图、对象图和配置图等给出系统结构模型的静态描述,通过用例图、顺序图、合作图、状态图等给出系统行为特征的动态描述。2.可执行的模型基于模型的测试是迭代式开发方法的主要特点之一。通过模型级的调试、验证,可以尽早地发现系统设计中的错误和缺陷,从而较早地确定或降低项目的风险。这就要求系统所建立的模型是可执行的,开发环境应该支持模型的运行和调试。由于U】llL所建立的模型是不能直接执行的,因此为了得到可执行的模型并执行基于模型的调试,在后文中,我们对基于呲的嵌入式系统模型验证机制进行了研究,通过语义转换规则将采用u札可视化建模系统所建立的模型转化为可执行UML模型,并通过在这些模型中封装一些基于模型的调试手段如基于状态图的断点设置、捕捉不同对象之问的消息映射等来实现模型的执行、测试与验证。3.模型——代码的相关 UML在嵌入式软件开发中的研究与应用模型是对系统的整体抽象,而软件开发的最终形式必须生成程序代码。模型毕竟只是一些漂亮的蓝图,虽然对软件的设计起到了很大的作用,但用户的最终目的是希望得到可执行的程序。对于嵌入式实对系统来说,代码与系统的要求(如时间约束、资源限制等)是紧密联系的,因此,用最终形成的源程序来验证系统的模型会更加准确。u札虽然只是一种建模语言,不是编程语言,但是它与大多数面向对象语言存在紧密的映射关系。在咖L语言的代码生成机制方面,国际上一些大公司有一些有益的研究和开发工作,比较有代表性的有Rational公司和AdvancedSoftwareTechnologiesInc。因此,在开发过程中我们可以采用Rational公司的可视化开发工具Rose,利用其代码生成技术,根据模型自动产生具有产品质量的代码。这种代码既作为系统模型验证的代码,也是系统最终所提交的代码Ⅲ1。它是基于某个具体平台的,通过编译即可运行在该平台上。为了保证模型代码的一致性,开发环境还应该支持代码到模型的逆向工程。当我们对生成的代码进行修改后,逆向转换机制将修改信息转换到模型上,从而使模型更加符合系统需求。否则将造成模型和代码问的不一致,使得系统的扩充、增删和维护难以进行.4.实时框架实时框架是一个垂直框架,提供了一套为嵌入式和实时应用专门选择和优化的设计模板“”。嵌入式系统的软硬件是通过操作系统联系起来的,应用程序一般都运行在该嵌入式操作系统平台上,而实时框架就是一个在操作系统之上应用程序之下的中间件。在传统的嵌入式软件开发过程中,应用软件通过调用操作系统的API来运行,丽不同的操作系统所定义的API不同。因此,针对不同的平台,需要编写不同的代码来实现接口函数的调用。一旦操作系统换了,代码也需要重新更改,这就大大加重了代码的开发与维护负担。而在文中所提出的这种基于U札的嵌入式软件开发环境中,我们可以在应用软件和操作系统之间定义一个实时框架,在这个框架中我们针对不同的操作系统定义统一的接口,而应用程序的编写或自动产生都是基于这个有统一接口的实时框架的。通过调用不同的实时框架库便可使这些代码运行于不同的操作系统平台之上,这样就使应用软件的开发与具体的平台无关,解决了嵌入式软件的移植问题。此外,一般嵌入式应用中有60%-90%的代码用于内务处理(如状态机的实现、进程间的通信等),这些代码在设计新的系统时一般都可以重用,而这种重用一般都是通过实时框架来实现的。 IIlfL在嵌入式软件开发中的研究与戍用因而,运用开发环境所提供的实时框架可以很好地解决前文所提出的嵌入式软件开发中系统设计和代码重用的问题,从而提高嵌入式软件的开发效率。·以上我们对基于UML的嵌入式软件开发环境的组成进行了详细分析,紧接着我们需要确定每一个组成部分在该环境中是以何种结构组织在一起的,以支持嵌入式软件的开发。为此我们对该开发环境的结构进行了定义,其模型如图3—5所示。文中所提出的这种结构融合了乙ⅥL软件建模环境和嵌入式软件的交叉开发环境。该结构支持前文所述的迭代增量式柔性开发方法,其中虚框部分就是基于u虬的软件开发环境,它是由前面所提到的基于UML的嵌入式软件开发环境的组成部分所构成的。●⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯’:应用软件:;.1建摸‘jl(分析,设计)模型执行(测试)基于实时框架的代码(实现)编译环境、交叉调试环境仿真系统、网络系统、数据库管理系统,JAVA虚拟机等支持软件1操作系统嵌入式系统硬件设备(目标机)图3-5基于UML的嵌入式软件开发环境的结构提出该结构的大体思想是:首先使用U札对嵌入式系统进行分析与设计,建立相应的模型,并利用代码自动生成技术生成基于实时框架的代码。之后通过在代码中拆装一些用于支持模型调试的调试信息并依据可执行模型对系统进行测试。顶层这一部分是基于UML的软件开发环境,它集成了可视化建模、可执行的模型、模型代码相关性和实时框架4部分。而代码的编译、链接则采用目标机的操作系统中的开发环境来完成。最终代码的运行与源程序级的调试仍然采用一般的嵌入式软件调试环境来完成。这样,顶层应用软件、中间层操作系统和底层硬件系统陶成了典型的交叉编译环境,能够更好地适应嵌入式软件的开发。采用这种结构具有以下优点:(1)它是基于传统嵌入式软件开发环境之上的高层开发环境,基于模型的设 UllL在嵌入式软件开发中的研究与应用计与调试是它的重点,同时借助于传统的交叉调试环境可以实现基于模型的调试和基于源程序的调试同步进行.(2)模型的运行和调试是基于与最终产品的源程序相同或相近的程序来实现的,这种模型级的调试与模型仿真有着本质的不同“”。(3)程序的生成是基于实时框架的,在编译和链接时通过选择不同平台的实时框架库就可以使代码运行在不同的平台之上,这使得应用软件的开发与具体的软件平台无关,对于不同的操作系统平台只需维护不同的实时框架即可。随着嵌入式应用的迅速增长,传统的嵌入式软件开发方法及支持环境已不能适应日益增长的嵌入式产品研发中的需求。与之相比,文中所提出的这种以模型为核心的新的嵌入式软件开发环境可以有效地支持迭代式柔性软件开发方法,使软件的开发工作主要集中在高层次的建模和模型的测试及验证上,从而使嵌入式软件开发工作的焦点从编码转移到设计上来。3.6嵌入式系统模型验证机制研究本文所提出的这种基于UML的嵌入式软件开发方法及开发环境足以模型为核心的,我们通过使用L3tL对系统进行分析与设计,便能够由简到详描绘出系统的需求、结构、功能及相应的行为。在对系统有了较准确而全面的了解的基础上建立起系统的模型。但是,由于嵌入式系统在可靠性方面要求比较高,因此系统行为必须被严格的加以验证以保证功能的实现。为此,在完成了对整个嵌入式系统的相关建模以后,我们需要验证这些模型是否能够准确地描述用户的需求并实现系统的功能。然而。阻碍L'ML应用于嵌入式系统开发的最大问题是,I..IIIlIL只是一种符号化的语言系统,没有完全形式化,它所建立的模型是由一系列的图形符号构成,而这些符号并没有严格的形式化的定义嘲,因此无法通过模型的执行和仿真对系统的行为进行严格的验证,而这一点对于嵌入式系统的开发是非常重要的。同时,为了使系统详细说明阶段更容易更灵活,我们通常会使用UML提供的多种框图从各个方面、各个抽象层次对一个系统进行建模。尽管这些图会有一些共同的建模元素,但是它们的根本语义通常都是不相同的。因此,为了避免模型之间的矛盾,有必要遵循严格的漫计原则或者使用能够增强模型一致性的工具。3.6.1基于UML的嵌入式系统模型验证机制为了解决上述b3,1L模型的验证问题,推动面向对象的分析与设计技术在复杂 u札在嵌入式软件开发中的研究与应用嵌入式系统开发中的应用,各国学者做了大量的研究工作,提出了一系列的方法。其中最常见的方法是在嵌入式系统开发过程中综合使用两种建模语言,即在系统分析,设计阶段采用U札建立系统模型,当需要进行模型验证的时候,通过一系列预先定义的语义和语法映射规则,将UML模型转换为采用某种形式化建模语言描述的形式化模型,然后进行模型的行为仿真和验证。参考文献36中给出了将UML图中的一些非正式的符号与SDL中的正确语义结合起来的一种方法。该方法是由指向目标体系结构的一个从最初的描述阶段到配置层次的这么一个流程所组成的。1。高层次的系统描述可以使用用例图来完成,系统的构成以及相互之间的交互可以使用构件图和顺序图来相应地描述。这样整个模型的行为就可以使用SDL所提供的可执行和可仿真说明来指定。而William和HCCheng在他们的研究中选择VHDL(VeryhighspeedintegratedcircuitHardwareDescriptiveLanguage特高速集成电路软件描述语言)作为模型的形式化描述语言m1,通过分析UML中的类图和状态图得到嵌入式系统的VHDL描述,确定系统的结构和行为,并进行模型的验证.以上所提出的这些方法能够解决嘣L模型无法进行行为仿真和验证的问题,但也存在着明显的不足。由于在系统开发过程中采用了两种不同的建模语言,开发人员需要掌握两种语言的分析和使用技巧,加重了人员的负担和系统工作量。而且,开发人员必须预先定义一系列详尽和准确的语法语义转换规则用于模型的转换,以保证uIIL模型与另一种形式化语言描述的模型在结构和行为上的一致性,这也是一个复杂的任务。因此,本文运用了一种新的用于嵌入式系统UML模型验证的方法,其核心是可执行UML,它将UML模型经过语义分析转化为可执行UML模型,从而实现模型的验证“甜.该方法具有以下优点:(1)它采用与U肌相同的符号表示法,保持了模型在表示法上的一致性,可以方便地集成到现有的LⅥL建模支持环境中;(2)它集成了状态图所使用的形式化语义定义。采用可执行UML中的图形符号及其形式化语义能够提供模型验证所需的有关结构和行为方面的各种信息;(3)依据LⅥL中的类图、对象图、状态图等描述系统结构行为的一系列框图,可以容易地推导出系统的可执行UMI,模型;(4)它支持不同抽象层次上模型的仿真和验证。3l ulIL在嵌入式软件开发中的研究与戍用3.6.2可执行UML可执行UML的目的是生成可执行的应用程序模型进行行为仿真和验证,并且它包含了一套完整的针对嵌入式系统的开发方法论。它为基于类图和状态图的可执行模型生成了一个定义完善的平台。这种方法的核心是使用行为规范语言将它们生命周期中一些活跃对象的行为语义引入模型之中。同时,可执行堋L定义了一个开发过程,它将完整的代码生成与应用程序特定的UML模型合并在这个开发过程中㈤。它所依赖的翻译模块必须为应用程序的目标平台生成特定的100%正确的代码,这些潜在的模型是可执行的并且能够经过确定的验证.可执行UML只包含了最基本的建模元素,其核心是类图、状态图和活动集。类图用于声明在系统设计中抽象出来的概念实体,每个概念实体都有状态图与其对应来描述其特定的行为。当系统中的实体处于状态图中的某个状态时,该实体可以执行对应活动集中的活动,这些活动可以是相应的数据存取、计算、测试或是实体闻的信号发送和接收。这些建模元素定义了系统的基本结构和行为属性.依照这些建模元素定义的模型可以推导出UML中的其它模型图,如合作图、顺序图等。由于系统的开发是一个反复迭代、不断深入的过程,因此合作图、顺序图乃至用例图等可以用来帮助推导该模型,但都未被包含到可执行LrML中。图3-6可执行UML的元模趔32 u虬在嵌入式软件开发中的研究与戍用图3—6给出了可执行u札的元模型。在这个元模型中,问题域中的所有概念实体被抽象为类。每个概念实体在其生命周期内的所有活动用状态图来表示,概念实体在其生命周期内的每一阶段被抽象为状态,概念实体能够响应的事件放抽象为信号事件。当一个概念实体处在生命周期内的某个阶段时,某些事件的发生使实体从当前的状态迁移到另一个状态,这种迁移被抽象为变迁。变迁描述了实体在当前状态下可能发生的活动及其发生条件。系统中所有可能发生的状态迁移及其发生条件用状态一事件矩阵来表示。变迁和状态一事件矩阵可以被认为是用来描述系统行为的抽象概念,状态和变迁之间的关系代表了当信号事件触发后系统向新状态的过渡。此外,元模型还定义了建模元素之间的关系,通过这些关系的定义,在建模过程中可以方便地区分不同的实例并描述这些实例之间的关系。在可执行UML中,对信号事件的反应是分阶段进行的,在某一阶段一次变迁中产生的信号事件及活动直到下一阶段即系统到达下一个稳定状态时才生效。变迁被看作是一种应一次完成的实例行为,首先将正在等待其包含的活动执行完毕的变迁锁住,当其包含的所有活动都执行完毕后,系统到达下一个稳定状态,否则系统回滚到接收信号事件前的状态。状态图的很多特征也被集成在可执行u扎的定义中m1,正交性的概念被保留下来了.尽管正交性不是进行系统分解定义相应的子对象所必需的,但它的存在使得建模者能够以高度紧凑的形式描述复杂的逻辑。使用正交状态能够将复杂庞大的状态空间分解为相互独立或近似相互独立的部分,每部分的状态转换、变迁触发等过程可以同时进行,以完成复杂的事务处理,有利于系统的描述和仿真。此外,一系列在嵌入式系统开发中常用的控制活动,如超时、延迟等也被包含在可执行U地的定义中以便开发者建立模型。3.6.3在嵌入式系统中使用UML虚拟机然而,使用可执行模型同样也存在一些问题,可执行模型这一方法依赖于特定平台的代码生成机制。代码生成是一种众所周知的驱动模型到实现过程的方法。机器可以从模型直接得到可执行的程序代码。这可能会得出不同质量的代码,这种代码生成往往只生成代码的主要框架,这些纲要框架是一些不完整的片段,可以成为开发者对所生成的代码的一些补充。但是,只有从完整的代码生成所获得的系统才能与它的模型保持内在的一致性。由于我们希望这些模型与它所生成的代码是等价的,因此我们不希望对所生成的代码进行改变。这种改变同样可以 U虹在嵌入式软件开发中的研究与应用通过对模型的改变来实现,因此我们只允许对模型进行改变。从可获得的UML模型中我们可以获得对代码生成相当大的支持。例如,RationalXDE、MagicDraw、Together等都可以在某种程度上从UIjL模型中生成代码框架。然而,目前没有能够支持完整的基于模型的发展,尤其是没有对模型驱动体系结构这一层次的支持汹1。此外,特定的代码生成似乎会花费更多的时间和内存消耗,这在嵌入式系统领域是一个重要的值得考虑的方面。因此,为了保持实现过程与设计过程的同步,最显而易见、最直接的方法就是使用设计模型作为执行过程。对于UML而言,这就意味着在建模方法中使用虚拟机来获得可执行的UML。使用虚拟机根除了使用代码生成器将模型转换成一种不同的语言的这种需要。在能够提供必要的虚拟机的任何平台上模型都是直接可执行的,这就避免了每一次当一个新的目标平台出现或者在一个平台上运行该软件的一些改进的机制需要被合并时都要试图产生新的可执行代码的这种需要,我们可以通过虚拟机来进行更新而不需要修改模型。因此,和代码生成方法不同的是,该方法从模型的生成到在一个新的或者更强大的平台上的执行之间没有依赖性。此外,这些模型通常都是立即可执行的,这就减少了开发过程中迂回的时间。对于虚拟机而言,SUN公司的JAVA平台是当今虚拟机的一个最著名的例子.它执行。字节代码”来代表面向对象的程序。JAvA虚拟机已经在硬件中得到了实现,因此它证明在一个虚拟机中执行完全的面向对象的这种想法不仅适用于硬件也适用于软件。如前所述,在代码生成的过程中使用虚拟机有很多优点。当在嵌入式系统中考虑使用虚拟机时必须考虑到嵌入式系统的一些特定的属性。例如,虚拟机在系统内部必须是适合的,目的是满足更有限的内存的需求。此外,提供准确实时执行的机制必须考虑到,在执行模型中必须包含必要的时间信息。针对嵌入式系统的uML虚拟机,能够以某种方式通过执行状态图和顺序代码的混合体来使整个系统使用模型驱动体系结构进行完整的开发,这种模型驱动体系结构是使用一致的虚拟机模型作为平台特定模型的,因此系统的开发中心可能会集中在这些模型的构建上,所以这种方法可以使基于模型的开发变成可能,符合本文所提出的以模型为核心的嵌入式软件开发及调试方法。在前面我们讨论了使用代码生成和可执行模型去支持模型驱动体系结构的 u札在嵌入式软件开发中的研究与应用各个不同的方面,这两种方法都可以根除嵌入式系统开发中对于手工实现的需求。然而我们发现了许多使用虚拟机的优点,使得它比代码生成方法更可取。虚拟机的使用可以保持模型和实现过程内在的同步。此外,在与虚拟机兼容的系统中可以对运行时间环境等做出一些改进,因此这种设想有望在以后的嵌入式系统开发中得到使用。3.7基于UML的嵌入式软件开发过程本文在前面对支持嵌入式软件开发的建模语言、开发方法、开发环境以及模型验证机制进行了详细的研究,在具备了各种开发条件之后,我们形成了一种新的开发过程可以更好地指导嵌入式软件的开发。该过程利用前文所述的开发环境,采用迭代增量的柔性开发方法,使用U地建立系统模型,并使用可执行UML完成模型的验证,从而很好地支持了嵌入式软件的开发。其开发过程可归结为以下几个阶段:’(1)需求分析阶段该阶段要明确系统所要实现的功能以及所要达到的性能,这是整个系统开发的目标。它分为功能性需求和非功能性需求。功能性需求要明确系统应该提供什么功能,非功能性需求要明确系统的特定特性或者约束。分析阶段主要是精化和结构化需求,清楚地描述系统内部,这是设计阶段的基础“”。它分为两个步骤:系统架构分析和系统行为分析。系统架构分析是运用面向对象技术描述系统的静态结构,系统行为分析是从动态的角度描述对象间相互作用的特性。在对嵌入式系统进行需求分析对,我们采用用例图对其进行功能上的分析。基于用户需求,使用用例分析技术,确定系统角色并获得系统用例,从而得到系统的用例模型。在嵌入式软件的开发过程中,恰当地使用用例可以有效地控制交互式开发过程㈣。使用用例图观察系统能够将系统实现与系统目标分开,有助于开发人员了解最重要的部分,满足用户需求,而不会沉浸于实现细节。在获得用例模型后,我们需要迸一步分析系统所要解决的问题,主要涉及以下活动:发现对象;为对象分类;确定类之间的关系;定义类的属性和操作;确定对象之间的交互;分析对象的状态变化等等。(2)具体建模阶段在完成了系统的分析之后,我们可以将具体的建模过程分为静态结构建模和 uIlL在嵌入式软件开发中的研究与戍用动态行为建模两部分,并依据建模步骤及方法给出系统的用例图、类图和状态图、顺序图、合作图以及活动图等等。首先,我们可以以功能块的划分广泛地找出系统的主要对象,然后为这些对象分类,通过类图描述这些类的属性、操作以及相互之间的关系。接着使用合作图描述对象之间的消息连接关系并对系统的对象进行进一步的细化。最后,利用活动图对系统进行业务描述,即规范系统完成一定功能的主要流程,以便更详细地描述用例与角色之间的交互㈨。(3)系统设计阶段设计阶段是在对系统各方面有了解的基础上来确定特定的解决方案。在本文中我们利用UML中面向对象的概念将系统分成了相互关联却又较独立的模块,一方面便于系统开发时的迭代过程以及后期的维护,设计人员可根据不同的新需要对各个步骤中相应部分进行调整来实现改进,这样就可以减少重复分折或设计过程;另一方面,对象概念可以和嵌入式系统中的任务概念很好地映射起来。任务可看成是由一个或多个对象协作而成的,在分析、设计过程中确立对象的同时也就确定了系统的多个任务,为嵌入式系统的多任务特性提供了很好的支持。在对系统进行模块化时,我们需要依据嵌入式系统的软硬件协同设计原则,仔细分析系统的各个模块以及模块间的关系,从而确定哪些部分使用硬件完成,哪些部分使用软件实现嘲.这时可使用UML的构件图和配置图对系统的软、硬件分别进行设计。在此基础上,除了可以使用前文介绍过的各种UML静态模型图外,通常还需要使用状态图和顺序图来描述具体的系统流程细节。我们首先确定了各个模块所具有的状态,使用状态图描述它们之间的转换关系,然后使用顺序图显示每个特定对象进行特定操作时所遇到的流程。此外,在该阶段我们还可以对用例、类以及数据库等进行详细设计,以细化系统需求和设计部分,更好地满足用户需求,支持迭代开发。(4)模型执行与验证阶段正确的模型是系统代码实现的基础,因此在建立了各个模型图之后,我们可以联合使用所有的咖L框图认真分析每个构件的原理。针对每一个系统功能、每一个可能发生错误的过程进行完整而可靠的测试与验证。为了测试每个模型是否能正确地完成系统相应的需求,我们可以运用文中给出的可执行UML的语义转换原则,为嵌入式系统模型的验证提供支持“”。在得到可执行模型的基础上执行基于模型的调试,从而实现模型的验证与修改。’ 咖。在嵌入式软件开发中的研究与应用(5)系统实现t实现阶段主要是代码的编写。为了提高开发效率,我们所提出的这种开发过程可以采用满足UML规范的RationalRose2003等建模工具分析和设计系统模型,同时,实现阶段可利用其代码生成机制,直接利用正向工程根据模型生成程序代码框架。并对代码框架进行修改和补充以完成方法的具体实现,形成完整的系统代码。反之,修改后的代码也可以应用到逆向工程中修改系统的设计模型,直到得到正确的模型和代码。完成了代码的实现之后,我们需要对系统进行测试以保证所开发的系统符合用户需求。在测试阶段,我们可以运用前文2.5.1中所提到的基于U札模型图的测试策略来对系统进行测试。到此为止我们便得到了完整且正确的系统代码,最后,我们在嵌入式系统目标环境中对这些代码进行编译、链接、下载、固化等过程,从而实现整个嵌入式软件的完整开发。以上所述的这种基于呲的嵌入式软件开发过程,综合运用了文中所提出的迭代式柔性软件开发方法,u札建模技术及支持环境以及模型验证机制,它可以使嵌入式系统告别传统的“手工作坊”的开发方式,将系统开发的重心从代码的编写转移到建模当中来,使得系统分析设计与实现过程标准化,大大提高了嵌入式系统的开发速度和产品质量,增强了设计的可复用性,在某种程度上解决了前文所指出的嵌入式软件开发过程中所存在的问题。为了具体说明究竟如何使用这种开发过程来指导嵌入式软件的描述与设计,在文中第四章我设计了一个嵌入式指纹门禁系统作为实例,采用这种迭代式柔性软件开发方法,使用u札及Rose完成了对该系统的分析与建模,系统整个建模阶段的开发过程如图3—7所示。叫黼价P掣鬻卜型图3.7系统的建模步骤在接下来的一章中,依据上述建模步骤,我将给出这种基于U帆的嵌入式软件开发过程在嵌入式指纹门禁系统实例中的具体应用,并对开发过程中的每个步骤进行详细的论述,以说明如何使用该过程来完成嵌入式软件的开发。 ulIL在嵌入式软件开发中的研究与戍用3.8本章小结本章主要对基于UML的嵌入式软件开发技术进行了研究。首先对嵌入式系统的概念及特点做了简要介绍,紧接着分析了传统的嵌入式软件开发方法所存在的缺点,指出了引入13fL设计嵌入式软件的原因。在此基础上提出了基于UML的嵌入式软件开发方法,对支持该方法的开发环境的组成和结构进行了研究。为了保证开发环境所建立的模型的正确性,我们还对基于UML的嵌入式系统模型验证机制进行了研究,并针对可执行模型的平台无关性讨论了在嵌入式软件开发中使用UML虚拟机的可能性。最后,给出了文中所提出的这种基于UML的嵌入式软件开发方法的详细开发步骤。 t舭在嵌入式软件开发中的研究与应用4嵌入式指纹门禁系统中的UML应用4.1嵌入式指纹门禁系统开发背景所谓生物识别技术就是利用人体具有惟一的且终身不变的生物特征如:指纹、掌纹、声音甚至DNA等,结合计算机处理技术进行个人身份验证的技术。它是一种不需要记忆,不易损坏、不会丢失,不会被盗用、不会被替代的每个使用者唯一具有的身份识别方式。”。而指纹识别技术是所有这些技术中最成熟、最方便的一种,其应用正逐渐深入到社会生活的各个方面,如刑事侦破、证件防伪、门禁控制等等。当前在工厂、学校、办公室、金融系统、宾馆等多种场合,为了学习、工作、生活的安全与有效,需要进行封闭式管理。传统的方法是工作人员对出入人员进行登记放行,这种方法费事费力又容易出错。随着技术的进步,门禁系统逐渐由原来的钥匙开门,NIc卡管理,最后到现在的指纹门禁系统。由于IC卡门禁系统存在着卡损坏、卡丢失、卡盗用等问题,因此在方便性和安全性等方面都存在着一定的不足。而指纹是每个人特有的属性,存在着普遍性、唯一性和不变性呻1,且不会丢失不需要记住身份证号和密码,也无须随身携带像智能卡之类的东西。因此,将指纹识鄹技术应用到各种需要身份验证的系统或者嵌入到原有的大量保安系统,会大大提高系统的安全性和便捷性。因此,本文设计了一个嵌入式指纹门禁系统,它使用指纹识别技术来验证用户身份,并提供一套完整的软硬件来实现门禁系统的日鬻管理。主要包括:用户信息注册、删除、查询、指纹比对、门禁控制和监视以及日志管理等。这是一套现代化的功能齐全的门禁系统,具有严格和完善的管理机制,使用系统的人进行分级权限管理。该系统不仅可作为出入安全控制,还有助于使用者内部的有序化高效管理。统一建模语言UML是软件系统规约化、可视化构造和建模的有效工具,覆盖了从需求分析到系统测试,部署的整个过程,为软件开发提供了一套完美的解决方案。其提供的各类图形在面向对象开发的软件系统的建模过程中得到了广泛使用,设计人员借助于这些标准图形,直观、形象、准确地刻画系统模型,使软件开发易于实施”。丽针对妖入式指纹门禁系统的复杂性,为避免盲目开发,我们需要采用有效的软件设计方案来指导和管理整个开发过程。为此,在本系统的开发过 UlIL在嵌入式软件开发中的研究与戍用程中,按照删L规范,我们采用前文所述的基于UML的嵌入式软件开发方法,使用CASET具RationalRose2003来绘制各种模型图,从不同的层次和角度为系统的分析、设计、验证以及实现过程提供支持,详细讨论了如何使用U,VL辅助完成嵌入式系统的开发。4.2需求分析4.2.1系统需求该指纹门禁系统主要用于一些安全性要求较高,需要进行身份验证的门禁控制场合。系统外观设计和对应的硬件框图分别如图4—1、4—2所示。移曩盛:画画画匡虱画画画画画豳4-l系统外观设计豳l∞%n;口”J71I竺竺IFLASHlHARM-匾圜开发扳lSDRAM卜-圃J申源I..医厕图4.2系统硬件框图上方的液晶显示屏用于显示指纹库中的指纹信息、验证结果信息以及电池的电量等;数字键盘用于输入用户的ID号,方向按钮用来进行菜单选择,通过上下键来选择指定的数据,逐条浏览注册用户的信息,用左右键进行添加和删除数据;指纹传感器用于采集用户指纹;两个状态灯用于指示指纹匹配结果。系统工作原理如下:首先,系统设置一些合法的用户ID号及相应的权限,当用户向管理员申请注册时,管理员为每一个用户分配一个合法ID号。同时可将该40 u札在嵌入式软件开发中的研究与应用ID号、用户级别,指纹信息等经过处理之后存入指纹数据库。在数据库中,用户的ID号和指纹图像数据等是一一对应的。当用户需要通过被控门时,首先通过数字键输入自己的ID号,并按下“确认”按钮,同时在指纹传感器上按下指纹。由于FLASH中预先存放了合法用户的ID号及代表其特征的指纹数据,因此传感器提取用户的指纹,微处理器登陆指纹库中将具有相同ID号的指纹信息检索出来,与用户提供的指纹信息相比对。如果匹配成功则表示是合法用户,绿灯亮同时被控门打开。若匹配不成功则红灯报警被控门不开。无论验证是否通过,指纹匹配结果等提示信息都会通过液晶屏显示给用户,同时用户每次的出入记录等都会被存储在操作日志中作为历史记录以供查询。通过以上工作流程,系统主要实现如下功能模块:(1)指纹注册与验证。该模块包括一个半导体指纹传感器,一个ARM9处理器,一个动态随机存储器,闪存,可编程逻辑器件等部件。指纹传感器可提供一个串行外设接口与ARM9进行联系,在微处理器控制系统的参与下完成以下两个功能。指纹注册主要包括指纹采集、图像预处理、特征点提取、特征模板存储和输出显示;指纹验证的前三步与指纹注册相同,但在特征点提取后,是将生成的特征模板与存储在指纹库中的特征模板进行特征匹配,最后输出匹配结果。(2)电动门控:它是门禁控制系统的执行机构,门的开/关由指纹匹配结果决定。在通常情况下,门控输出信号处于低电平,匹配成功需要开门时置为高电平。(3)微处理器控制系统:它是该系统运行的核心,负责协调系统各项工作,完成指纹图像及特征的读写、指纹采集和比对命令的发送、门闸逻辑控制等,并根据指纹比对结果通过LcD和LED显示匹配信息。(4)信息管理:用户信息(包括指纹信息)、门控日志等的查询、删除。该功能由具备相应权限的系统管理员来完成。4.2.2用例描述需求通过对系统的需求分析,我们确定了该系统需要实现的功能。那么如何形象化地描述这些功能,以便使我们更好地与用户沟通,更准确地了解他们的需求呢?这就要使用L'ML的用例模型。在UML中,用例可以被描述为参与者与系统之间的一次交互作用。每一个用例都是一种不同的使用系统的方法,都会产生不同的结果。而角色是与系统交互的对象,它是使用该系统的人或者其它系统。用例图41 U札存嵌入式软件开发中的研究与应用列出了用户最想要的功能以及每个功能的描述嘲。1.角色识别获取用例模型的第一步是识别角色,通过角色的识别可以进一步识别用例。从而得到用例模型。我们可以通过让用户回答一些问题来识别角色,例如:谁是系统的使用者?谁来维护、管理使系统正常工作?系统需要哪些硬件?系统需要与哪些其他系统交互?等等。进行角色识别时我们关注的是那些与系统交互的对象,针对嵌入式系统来讲,系统本身可能会包括大量的传感器和硬件设备等。显然,这些硬件都要与系统进行交互,但是它们并不都被识别为角色,因为其中的很多都是系统的组成元素。如何确定一个硬件是不是系统的组成元素呢?一般没有统一的方法,但有一个原则,即如果需求描述中明确指出了关于该硬件的约束,则该硬件应当识别为角色。对于本系统,指纹传感器、LED、键盘以及指示灯都没有提出任何的约束,而电池的容量则要通过LCD显示.况且不使用电池也认为该系统是完整的,即电池并不是系统的必要组成部分。相反,如果没有指纹传感器等情形就不一样了.综上所述,得到该系统的两个角色用户和电池。其中用户是系统的使用者,他使用本系统所提供的功能,分为普通用户和管理员;电池是系统需要应付的外部设备,系统要探测电池的电量。2.用例说明(Z竺C[二一一惫二早/死一R\\\之虬c≥o¨胪℃芦:Q二二二∑Q身彳证久_一一二歹径个一.£一77,/7:。:“一一i。_i////7——、L—/开/关门图4_3系统用例图42辜 u札在嵌入式软件开发中的研究与戍用在获得角色的基础上,我们便可以确定系统的用例。用例的识别要比角色识别复杂得多,一方面要从系统的功能需求中抽象出用例,同时还要控制用例的数目。用例数目过多造成用例模型过大,同时引入设计因素的可能性加大;用例数目过少则不便于充分地分析系统功能。获取用例的具体做法是针对每一个角色考察它要求系统所提供的或者它使用系统的哪些功能等。系统需求阶段我们已经给出了系统所要提供的功能,通过用例分析技术,我们得到了该系统的用例图如图4-3所示.从图中我们可以明确地了解到系统的功能需求。该系统主要有两类用户:普通用户和管理员。“启动系统”用例表明系统初始化时要进行传感器和微处理器等的自检。进入正常工作状态以后,普通用户可以通过“身份验证”用例进行指纹验证。如果是未注册用户则在获得合法ID的前提条件下,通过“注册”用例注册自己的相关信息。系统提供的“开/关门”用例则主要是根据指纹匹配结果,通过信号线将控制信号传输给门的驱动电动机以此来控制门的开关。管理员主要负责系统维护,可以使用“注册”、“查找”和“删除”等用例进行信息管理操作.由于在该阶段我们对系统还没有充分理解,同时为了控制用例的数目,在这里我们只是给出了系统的总体用例模型,在随后的详细设计阶段我们可以对这些用例进行进一步的细化以精化系统的需求。在进行完以上工作后,系统的功能需求基本上确定下来了。按照前文提出的迭代增量的柔性软件开发过程,我们可以根据需要将得到的用例按优先级进行划分。首先要开发的用例应该是用户要求在短时间内实现的,或者是实现其它用例的基础;另外,风险大的用例一般要先开发。然后,我们可以根据用例的优先级制定出下一阶段的迭代计划。本文通过对用例的研究得到了以下几点参考意见:(1)用例只描述参与者和系统在交互过程中做些什么,并不具体描述怎么傲。(2)在建模过程中,不可能也不需要一次就找出所有的用例,随着认识的加深,用例图可以不断地自顶向下逐步精化和细化,抽象出不同层次的用例图。(3)在利用用例建模时,如果用例之间存在着重复应用,可以考虑关联或者包含关联,对特殊情况可以考虑泛化关联或者扩展关联。 U虬在嵌入式软件开发中的研究与应用4.3静态结构建模4.3.1定义子系统在静态建模阶段,按照模块化设计原则我们首先将一个完整的系统分为几个子系统,这样既可以简化复杂的设计工作,又可将各子系统的设计任务分配给不同的设计者,提高了开发效率,并有利于软件复用。在定义和设计子系统时,我们遵循下列设计原则:(1)子系统数目不宜太多(2)子系统中的类应该只和该子系统中的其它类协作(3)可以在予系统内部再次划分以降低复杂度经分析,该系统划可分为4个子系统,如图4—4所示。AILM9微处理及控制模块主要负责数据的处理及控制指令的发送。存储系统负责所有指纹信息及系统信息的存储。用户接口则包含了传感器、指示灯、键盘、门控电路等的设计。I⋯⋯....J图4-4子系统划分图4。3。2发现类和对象在面向对象的分析和设计中,寻找正确的类和对象是最基础的。对象是对现实世界中事物的抽象。首先,要去掉那些与系统无关的事物。其次,要在与系统有关的事物的特征中寻找与系统有关的特征。发现对象和类一般有以下几种方法懈1:(1)在OOSE中。将对象分为三种:边界类、实体类和控制类。其中,边界类用于建立系统与其参与者之间交互的模型;实体类用于对长期持久的信息建模;控制类代表协调、排序、事物处理以及对其他对象的控制,还可用来表示复杂的派生与演算。这为我们分析类和对象提供了一些启示。 u札在嵌入式软件开发中的研究与戍用(2)可以从人员、组织、设备、事件和外部系统等考虑各种能启发发现对象的因素,找出各种可能有用的侯选对象。通过这种方法可以发现一些实体类。(3)在uML中,由于我们采用用例来捕获系统需求,分析用例,从用例中寻找对象和类也是一种很好的方法。而且对照用例模型,查找用例中的哪些功能还没有对象来实现,以此也可以发现类。4.3.3建立类图建模过程首先应该从系统中的类开始,以上我们给出了发现类的一些方法,为了理解类的结构,我们需要对系统及其工作过程做一个总体陈述“”。该系统包含一个电动门、一个指纹传感器、一个微处理器、一个存储指纹库的存储系统、一个数字键盘、一个十字型按键、一个液晶显示屏以及两个状态灯。系统从指纹传感器中获取指纹数据,并在微处理器中进行预处理和特征提取,获取指纹的生物代码信息,并与指纹库中注册用户的指纹模板进行匹配算法的验证,并输出缉果,通过状态灯显示,同时根据匹配结果发送控制信号控制门的开关。通过对系统功能模块的划分我们得到了系统的三层逻辑结构模型图(见图}5)。对子系统及类做进一步分析可得到系统总的类图(见图4-6).通过这两幅图我们可以得知系统中所包含的基础类及其相互之间的关系,为后文动态模型的建立奠定了基础。图4-5指纹门禁程序的三层模型图45 眦在嵌入式软件开发中的研究与应用图4-6指纹门禁系统类图4.4动态行为建模动态建模应建立并发视图,包括顺序图、合作图、状态图和活动图。通常只选取其中一到两种图来说明问题,而不必全部罗列出来。4.4.1建立状态图嵌入式系统一般都是实时系统,从动态方面看,实时响应系统的整个活动过程可以看作是一个状态到另一个状态的转移。在每个状态中,系统单独或并发地执行一个或几个进程。当进程执行结束、满足一定的条件或者受某些外部信号的激励时,将终止或悬挂当前的进程而启动另外的进程,同时向外输出信号,这个过程就是系统的状态迁移呻1。对于实时系统的动态行为,一般可以用有限状态机来描述,但有限状态机在描述复杂的系统时常常由于状态数的剧增而使描述变得非常困难,对于系统中的不确定状态也无法描述。因此对于具有复杂状态或行为的系统,我们可以用状态图来反映对象的生命周期。状态图不仅可以通过XOR和AND机制将状态图中的状态数大大降低,还可以描述系统的不确定状态。此外,12ML提供的是层次状态图,这也有利于复杂的嵌入式系统的描述。从总体上讲,文中该系统处于工作状态(包括指纹注册、删除、查找以及验证等等)或者等待状态,它还可以处于停止状态(断电等异常情况下)。系统的整体状态变化图如图4-7所示。46 u札在嵌入式软件开发中的研究与应用身份验证●图}7系统状态图4.4.2建立交互图我们在描述系统用例时,是从用户角度出发的,没有涉及系统内部。在通过分析得到了满足系统需求的类之后,便可根据用例驱动的思想,通过这些类之间的交互来实现用例。嵌入式系统一般都要与硬件设备如传感器等进行交互,同时还有很强的时间和内存空间的约束。在面向对象的设计方法中,一切元素都和对象紧密相关,对象在其生命周期内要不断地与其他对象交互。交互图就是用来描述对象间的动态交互行为的,它一步步地显示了使用案例的流程。在U札中定义了两种交互框图:顺序图和合作图。这两种框图显示同一信息,但组织方式不同。顺序图按时间排序,依次显示对象间进行的操作;合作图则以数据流为中心,显示各个对象间的数据交换情况。由于顺序图能更好地说明对象问的交互顺序,有利于我们理解系统,所以本文以“指纹验证”用例的顺序图(见图4—8)为例来描述对象之间的交互过程。6碡在嵌入式系统的建模中,关键是如何处理好时间约束、线程切换、中断及如何设定线程的优先级等。在这里我们使用了一个高级U札概念——对象化,即将通常不代表类或者对象的事物作为类或者对象来处理,这样可以使模型的内容更丰富“”。被对象化的类可以和其他的类发生关联,可以拥有自己的属性,成为可以被操纵和存储的结构。对象化允许将优先级作为属性并且在交互图中使用线程。因此,在设计该系统的顺序图时,为了更好地表明对象(类)之间的协作关系,我们使用了线程。也即将ARM类的一般性维护、特征提取算法、匹配算法、状态输出等操作当成线程类(对象)来对待,将优先级作为属性,通过使用花括号括起的文字串来指明时闻约束,并通过“Running”、“Ready”等文字说明指明了对象在其生命周期内的状态变化情况,以此来描述线程切换和中断调用。系统中的每个用例都可能有多个流程,每个流程部可以对应一个顺序图,比如正常情况下、出错情况下等。本系统中,由于指纹验证是系统的核心内容,系 U虬在嵌入式软件开发中的研究与应用统大部分时间工作在验证状态,所以我们以该用例的顺序图为例来说明了系统的对象之间是如何进行交互的。其它用例都可以采用此种方法来详细说明,以便我们更清晰地了解系统每个功能(用例)的具体实现过程。已竺驾舶呻R蛳j芦⋯唰Ij竺苎苎竺!三竺!兰兰竺》:.L’特征舰结寰’h。!’一,-~i————1-。‘B。。,,机癫壹Lr——1—叫}采I态改变,Ⅱ配;2蓑打L.RutUl叼I,匹配算丧结毫f、k‘Bec■np’’I机矗馥壹7J卜状矗改壹.储墨-出R·岬、~-出螬柬I舟n岫I:竺垫}》IT状杏最壹、IIr——9口ttB*—”}I7叩岫:lI南H_y图4—8“指纹验证”用例的顺序图4,4.3建立活动图活动图是对系统的动态行为建模的4个图之一,它可用于描述系统的工作流程和并发行为。它既可以对系统的工作流程建模,也可以对具体的操作建模,用于描述计算过程的细节。它其实可以看作状态图的特殊形式,在活动图中一个活动结束后将立即进入下一个活动。图4—9是对该系统的整体工作流程的具体描述。 呲在嵌入式软件开发中的研究与应用图4_9系统总体活动图4.5系统设计需求分析完成以后,可以依据分析结果和所建立的模型图进一步指导系统的设计。系统设计主要包括了用例详细设计、类设计、数据模型设计和构件设计等。4.5.1用例详细设计详细设计阶段需要对系统需求中的每个用例进行详细的分析,并以一种通用的表示来文档化,以便使开发人员更清晰得了解每个用例的具体实现过程。本文以指纹验证用例为实例,表4_1给出了该用例的详细交互设计。对该用例进行更进一步的详细分析,它包含了指纹采集、预处理、图像增强、细化、二值化处理、特征码提取、比对、结果输出等过程,这些过程都可以通过该文档清晰地表示。表4-1指纹验证用例详细设计用例名称指纹验证用例目标验证用户指纹特征与预存指纹库中注册用户的指纹信息是否匹配,从而确定是否开门触发事件对比两个指纹特征信息的生物代码输入参数现场用户指纹输出参数匹配信息前置条件门禁系统正常工作,指纹采集成功成功条件得到匹配结果1)用户在门禁系统中输入D号并在指纹传感器上按下指纹2)系统接收到指纹验证申请,传感器采集用户指纹信息主要步骤3)处理器登陆指纹数据库检索该ID号所对应的指纹信息4)将提取到的指绞特征与检索到鲍合法用户指纹特征进行匹配5)输出匹配信息6)液晶显示屏显示匹配结果,并依据结累发送信号控制门开/关。需要说明的是,本文所提出的开发方法强调一种迭代增量式开发,每一个设计部分的完成并不代表这个过程结束,随着需求和设计的进一步细化,可以回复 【眦.在嵌入式软件开发中的研究与应用到前面的设计过程,修改相应的设计。因此,在开发过程中采用这种结构化的文档表示每个用例的处理流程,使得开发过程清晰化、标准化,便于后期的修改和维护。系统其它用例的详细分析与设计同样可以采用这种表示方式。4.5.2类设计u虬规范按照类职责不同将系统设计类分为边界类、实体类和控制类。在前文4.3.2中我们已经讲了这三个类的作用。其中实体类是系统运行的数据基础类,它是类设计的核心部分。按照RUP的思想。采用名词分析法对系统需求进行分析。便可以得到大部分的实体类。对于指纹门禁系统而言,指纹信息数据是系统的核心数据,同时,一些相关的管理信息也是实体类的组成部分,主要有用户信息、系统日志等等。在这里我们只对系统中两个主要类进行分析.<>Fingerlmage‰strFileName:stringOO、nregid:imeger‰imagefeature:CHARACTER*‰featurenum:integer‰height:integer‰integer◆.GetFileNameO:string◆Getm百d0:integer◆GetimagedataO:char◆Contructdata(strFileName:string):void◆.GetfeamrenumO:imeger◆.GetheightO:integer~GetwidthO:integer<>’Fingemattire‰.userid:integer‰n6嘲image:Fingerlmagedl●m_secondimage:Fingerlmage‰regfeature:CHARACTER*目-mmerfeanlm:CHARACTER*‰resultnum:integer◆Getus盯idO:integerbFcamrccompare《)%.ContmctdataO◆.Oetresulmum0◆.GetregfeatureO~3etuserfeatureO■0图4-10指纹图像实体类图4-11指纹特征实体类从图4-10和图4-11可以看出,实体类封装了指纹验证模块核心数据的处理过程,其中FingerImage类封装了指纹图像的特征提取过程,它包含了指纹图像的名称、宽度、高度、图片保存路径、对应的ID号等。对一幅现场指纹图像,调用ConstructData(strFileName:String)设置类成员变量m_strFileName的值,函数内部在对指纹图像进行预处理和特征提取时,可以初始化其他成员变量。对于Fingerfeature实体类,FingerImage类实例是它的成员变量,核心成员函数是FeatureComp0,可以得到两幅指纹图像特征的匹配结果。 眦在嵌入式软件开发中的研究与应用4.5.3数据库模型设计完成实体类的分析与设计之后,可建立其数据库模型。在实际的应用中,指纹门禁系统可以采用多种方式来管理数据,如果系统采用Pc机与嵌入式处理器之阊的通信这种方式来管理相应的数据的话,那么PC机上数据管理系统的数据库模型可以设计如下:如图4一12所示,数据库表组成包括注册用户管理、被鉴定人信息、指纹特征数据和日志管理所需的相关数据,数据库中表结构字段的描述与实体类成员变量的结构是相对应的。例如:注册用户管理由RegisterUsers表组织,设置的字段有:用户ID、姓名、用户级别等:指纹图像数据表Fingerimage设置的字段有:图像名称、图像保存路径、图像特征数、图像宽度、高度等;指纹特征数据表FingerFeature设置的字段有:ID、注册用户指纹特征、被鉴定人指纹特征、指纹特征数等,完全可以满足系统的需求。图中其他各表的详细数据项描述可根据实际的需要来进行设计,在此不作过多举例说明。各个表间的连线表示数据表约束。例如:RegisterUsers表和珥orkLog表之间的对应关系为~个注册用户可以对应多条日志记录。同时,RegisterUsers表的主键用户ID是表WorkLog的外键,图中其他依赖关系表示含义相同。fbg瞎te^Jse噶图4-12系统数据库表设计51 U札在嵌入式软件开发中的研究与戍用可以看出,UML不仅是一种很好的面向对象的设计规范,将其应用于数据库表结构的设计,同样能够取得很好的效果凹1。在本文中,由于我们的重点是研究如何使用眦设计嵌入式系统,因此给出该模型图是为了向大家介绍如何使用u儿来设计数据库模型,至于详细的数据项设计则需要通过类或者数据库设计来实现。在本文系统实例的设计中,我们采用开发板自带的存储器来存储这些数据信息以简化设计,因此我们将用户【D、级别、指纹特征信息、出入记录等数据作为一条记录以某种固定的指令格式存储于FLASH中,以方便数据记录的处理。4.5.4构件设计在详细设计阶段,依据系统的功能分析结果和硬件设计模块,我们得到了该系统的软件设计流程(见图4_13)。软件设计流程图从逻辑方面给出了系统的处理过程,而对于系统的物理结构方面的设计可采用构件图和配置图。构件是系统中遵从一组接口且提供其实现的物理的、可替换的部分,实际上它就是一个文件如dli文件或exe文件等。构件图显示的是一组构件以及它们之间的相互关系,包括编译、链接或执行时构件之间的依赖关系。它主要用于对源代码文件之间的相互关系或者可执行文件之间的相互关系建模。配置图则用来显示系统中计算节点的拓扑结构和通信路径与结点上运行的软件构件等。这两个图从软硬件两个不同的方面显示了系统的物理结构。本文以构件图(见图4—14)为例,从软件方面描述了系统的物理结构。Doorstate图4-14系统构件图 u札在嵌入式软件开发中的研究与应用图4一13指纹门禁系统工作流程图通过构件图和配置图,我们可以很清晰地知道系统硬件部分包括哪几个模块,每个模块上需要实现什么样的软件功能以及各模块问硬件的通信方式和软构件的调用关系等,依据这些分析结果我们便可以对系统软硬件进行协同设计,以实现系统的功能。在后期测试过程中,只需对发生错误的可执行文件构件模块进行修改和维护,这种软硬件模块化设计有利用系统维护和构件复用。 LOMl.在嵌入式软件开发中的研究与应用4.6模型验证与执行依据本文所提出的开发过程,我们将系统的建模工作流分为需求、分折、设计、验证、实现和测试六个基本过程,前三个阶段的工作我们已经完成,而模型验证过程是设计和实现阶段的桥梁,具有重要意义。由于前文3.6.2中所述的可执行UML拥有形式化的语义,能够对嵌入式系统的行为进行精确的描述,在不涉及到具体实现细节的前提下对系统模型进行验证,因此我们采用该方法将系统模型验证步骤分为以下三步:(1)将基于咧L定义的模型转换为基于可执行UML定义的模型;(2)对模型进行初始化;(3)模型的动态执行仿真。下面我们将详细讨论上述三个过程。1.模型的转换通过建模工作流的前三个阶段,我们对该系统已经有了深刻的了解和认识,并建立了用例图、类图、状态图、顺序图、活动图以及构件图等模型。这一阶段的任务就是将上述已建立起的基于UML的非形式化模型转换为基于可执行UML定义的形式化模型,为模型验证做好准备。模型转换过程的具体步骤可以归纳为以下若干项:(1)根据类图确定可执行UML模型中所包含的类,这两种模型所包含的类的种类和结构基本相同,一般可以看作是一一对应关系;(2)根据状态图初步确定可执行L'ML模型中各类应有的状态及在该类内部状态是如何变化的,据此可以进一步确定相应的变迁和信号事件;(3)根据用例图分辨出哪些类与外部环境发生关系,涉及到的类的状态及相应的信号事件和变迁;(4)根据合作图和顺序图描述的类与类之间的交互关系,我们可以确定涉及到多个类的变迁、信号事件及状态变换;(5)使用活动图帮助我们分析系统的构成和状态转换;根据前文所建立的各个模型以及上述模型转换步骤,我们确定了本系统中可执行UML模型中应包含的类、各类拥有的状态、引起状态变换的信号事件及执行状态变换的变迁等信息,在此基础上我们建立了该系统的事件一状态矩阵(为了方 t瓶。在嵌入式软件开发中的研究与戎用便理解我以表格形式显示了该矩阵中的内容,见表4—2).该矩阵对系统中类的行为做了形式化描述,通过它我们可以很清晰地了解到系统所具有的类以及在各种信号事件发生的情况下各类的状态迁移情况等。表412系统事件一状态迁移模型\\事弹始\正常运行按下数字键按下指纹图像处理指纹验证结果翰出数字接键就绪工作等待输出指纹传感器等待就绪采集指纹等待图像一般性维检索,存储调用指纹调用图像调用特征发送信号ARM护m号采集算法处理算法匹配算法输出指令查找相同输入图像输入比对存储操作指纹库就绪输入D号D的信及指纹信结果日志息提示请输显示输入的提示是否显示该LCD存在该m号的D号的显示匹配入D号Ⅲ号结果m号操作日志LED灯灭灯亮电控门关闭关闭/开其实,在系统的删L模型中已经包含了生成可执行UML模型所需的绝大部分信息,只是这些信息分散在不同的图中,彼此之间的关系没有明显的表达,而且这些信息没有形式化的定义.转换的工作就是从UML模型中通过信息提取、分类、组织、抽象等生成基于可执行UML定义的模型。因此,模型的转换过程也是对前面开发阶段成果的总结和深化,通过该过程有助于对系统的进一步深入了解。2.模型的初始化模型的初始化就是确定即将进行动态执行仿真的模型的起始状态和开始方式。初始化过程的主要工作包括以下几项:(1)确定模型中哪些类的实例首先被构造以及构造的数量;(2)设置这些首先被构造的实例的属性从而确定这些实例所处的状态:(3)设置这些对象实例间的相互关系。前文,我们已经通过系统类图显示了系统中各个类之间的相互关系,并给出了系统的整体状态图。从系统的事件一状态矩阵中,我们可以很轻松她得到系统初始化时每个类所处的初始状态。需要指出的是,这些工作是按照系统模型的抽象层次自顶向下进行的,它详细描述了系统中已经存在哪些对象实例,这些实例 u虬在嵌入式软件开发中的研究与应用之间的相互关系,它们分别处于什么状态、能够对哪些信号事件做出反映、能够触发何种变迁等。3.模型的动态执行仿真初始化完成之后,确定了系统的起始状态,便可以开始模型的动态仿真了。仿真执行的目的是验证模型功能和逻辑的正确性。模型的仿真是以事件驱动的方式进行的。首先,我们以模型初始化后的状态为起始状态,人为地触发一些信号事件作为系统的输入。随后,当系统收到这些信号事件后,依照系统的状态一事件矩阵及系统内各对象的状态图,系统内某些满足约束的对象实例将发生变迁,从当前状态向特定状态迁移,在此迁移过程中,又可能引发系统内其他对象实例发生变迁。直到最后,系统到达一种新的稳定状态,等待新的信号事件的触发,再开始新一轮的状态转换过程。通过动态执行仿真可以得到系统中对象实例在信号事件的驱动下会发生什么样的状态变迁,将其状态变迁后所达到的状态与系统事件一状态矩阵中类对象应该达到的稳定状态进行比对,以此来验证系统所建立的各对象的状态图模型是否正确。从上面的分折可以看出,模型的仿真过程就是观察系统状态变化的传播过程。在此传播过程中,我们需要关注系统在接收特定的信号事件后是否按设计预想的那样发生状态变化和触发特定的变迁,而不是偏离了指定的状态,从而验证系统功能和逻辑的正确性。此外,有些嵌入式系统除了对系统的功能和逻辑有要求之外,对系统的实时性也有要求。在这种情况下,仿真中必须加入时钟以记录事件触发的时间、变迁的开始及结束时间、每个状态的停留时间等,用来分析系统行为能否满足时间方面的约束。如果在模型验证过程中发现了问题,我们必须及早加以修改。首先在基于可执行堋L的模型中找出问题的所在并改正;经过重新验证确定正确后,再修改系统的呲模型中对应的部分。依照以上所述的模型验证步骤就可对系统分析和设计阶段所建立的模型进行仿真验证,最终得到符合系统和用户需求的正确模型。4.7系统实现通过反复迭代上述建模及模型验证过程,便可建立起整个系统的正确模型。建模工作流完成以后便是系统的实现阶段,此阶段主要进行下列工作:1.实现平台的选择 t删L在嵌入式软件开发中的研究与应用系统漫计方案总是针对某种实现环境的,因此需要考虑实现平台的选择。(1)硬件的设计与实现硬件平台是系统的物理基础,提供软件的运行平台和通信接口。在需求分析阶段,依据系统要实现的功能,我们已经给出了该系统的硬件设计框图。接下来便要对硬件框架中的每一部分进行详细地设计,确定选用何种开发工具来完成相应的功能。本系统的硬件平台可采用S&~tSUNG公司的S3C2410开发板设计实现,CPU采用$3C2410AARM920T,它集成有IIC总线控制器、SPI接口、USB接口、LcD控制器等,拥有64MSDRAM可用来存放被验证用户指纹特征,64MNandFlash可用于存放指纹特征提取与匹配算法、注册用户指纹特征码以及操作记录等。系统设计的目标是能够作为独立模块使用,用户指纹验证算法采用1:1的匹配方式,微控制器中实现了一个简单的嵌入式指纹数据库管理系统,提供添加、删除用户指纹,查询操作记录等操作。同时该开发板自带一个TFT输出接口,因此我们采用夏普3.5英寸的128X64点阵型LCD直接与开发板相连接,可实现ASCIF码、图像、汉字等信息的显示。在传感器上我们选用美国Yeridicom公司推出的第三代半导体指纹传感器FPS200,它可在1s以内扫描多幅指纹图像并自动选择最好的一幅,因此可以获得各种类型手指的高质量指纹图像,并能应用在各种气候条件下,甚至在高温或高湿度的环境下。该传感器采用1.28cmX1.50cm传感面积,输出256x300像素和500DPI(DotsPerInch每英寸像素)分辨率的图像,成像质量高且稳定,大大降低了误识率FAR和拒真率FRR。同时,该传感器提供三种接口方式:8位微机总线接口、集成USB全速接口和集成SPI接口。它内置的USB口可支持13帧/秒的指纹图像采集传输速度;微处理器单元接口MCU可使图像传输速度达到30帧/秒;串行外设接口SPI可使图像传输速度达10帧/秒,极大地满足了系统对指纹图像采集和比对的需要。本系统采用集成SPI接口.指纹采集的程序流程是:首先初始化FPS200的各个寄存器,主要是放电电流寄存器(DCR)、放电时间寄存器(DTR)和增益控制寄存器(PGC)的设置;然后查询等待,指纹被FPS200采集进入数据寄存器后,以DMA(DirectMemoryAccess,直接存储器存取)方式存入片内RAM。ARM对指纹图像数据进行处理后,生成指纹特征模板,在指纹注册模式下存入片外Flash中;在指纹验证模式下,与存储在Flash中的特征模板进行匹配,处理结果通过LCD和LED显示器输出显示。由于 I】-IL在嵌入式软件开发中的研究与戍用开发板提供了5个可编程的指示灯和1个可编程蜂鸣器,因此可根据需要选择其中两个可编程的指示灯与系统设计中的LED相连并使用蜂鸣器报警。(2)系统软件的设计与实现ARM应用软件的开发需要交叉编译环境等,而在Windows平台下常用的ARMSDT调试器提供了一个集成开发环境IDE,可以在一台Pc机上完成编辑,编译、链揍、下载和调试等工作。开发工具安装完成之后,可以用ARMProjectManager来生成一个自己的工程,并在ARMDebuggerforWindows下进行调试。因此,本系统的指纹图像处理及匹配算法可采用C语言在IDE中实现。在算法方面指纹特征的提取与匹配算法是系统实现的关键。目前的特征码提取算法有两种:全局特征点的提取算法和细节特征点提取算法。全局特征点是指指纹图象的奇异点,也即中心点和三角点;细节特征点提取算法为了减少计算量,仅仅提取脊线末梢(端点)与脊线分支点这两种关键点,通常在嵌入式应用场合利用这两种特征点可以很好的识别指纹。指纹特征码的匹配就是要计算这两种特征点的匹配程度。由于这些算法都已较为成熟,因此在此我们只给出了系统算法的设计方案,其流程设计如图4-15所示,具体的应用中可根据需要选择相应的算法来完成系统功能。撇麴母舀昏卧骶.黼捆指纹验证蚓图4-15指纹识别基本原理图在本系统中,成熟的指纹处理算法为系统的设计提供了良好的基础。图像的预处理主要是灰度的均衡化、使用简单的低通滤波消除噪声等。指纹图象增强算法可利用C-abor滤波器具有最佳时域和频域连接分辨率的特点和其良好的带通性,能够处理质量很差的指纹图象,使系统的拒识率很低;指纹图象的细化算法则可采用经典的Hildtch图象细化算法,该算法满足收敛性、连接性、拓扑性,保持性、细化性、中轴性、快速性的等要求;二值化处理算法采用基于方向图的动态阀值二值化算法,能够有效的减少伪特征点的产生和真实特征点的退化和丢失;全局特征点的计算方法采用一种改进的利用PoincareIndex值求取算法,该算法具有较好的抗干扰性;细节点的计算采用基于脊线跟踪的指纹图细节提取算法;指纹特征码匹配算法则采用基于动态全局特征的图元结构匹配算法”1。 u虬在嵌入式软件开发中的研究与应用2.软件编码开发过程中建模的最终目的是为了得到可执行的代码,因此在系统实现中很重要的一部分是软件编码。为此,在实现阶段,我们需要选择某种面向对象的编程语言来完成代码部分的实现。由于本文中系统采用满足UML规范的建模工具RationalRose2003,可以很好地支持正/逆向工程,通过对类和对象的详细设计中的规范说明信息,由代码生成器自动生成可执行的代码框架。代码的生成包括检查模型,创建组件,将类映射到组件,设置代码生成属性,选择类、组件和包以及生成代码这6个步骤。由于时间和精力有限,本文的重点是研究基于U札的嵌入式软件开发过程、支持环境、建模中的关键技术以及模型的验证机制,因此对系统代码的具体实现}没有进行深入研究,这部分工作主要由其它技术人员完成。为了便于大家了解代码生成机制,在这里我们仅以系统中某些模块的实现为例,来说明究竟如何利用正向工程由模型自动生成代码框架,以提高系统代码编写速度与质量。该系统的主要模块是用户指纹注册、指纹验证、通信模块等,其接口函数定义分别为:(1)指纹注册:F-Register(INHANDLEftContext,A输入传感器句柄{/INBYTEUserlevel,A输入用户权限AINintID,/}输入注册用户ID号掌/INintfeaturesNum,肛输入特征值的数量衫oUTBYTE*regFeatures,胁输出注册用户的指纹特征}/OUTBooLregResult)/木输出注册成功与否}/(2)指纹验证:F-Verify(INF—HANDLEftContext,/木输入传感器句柄}/INintID,A输入被验证用户ID号木/INoUTF-BYTE*regEeatures,/宰输入注册用户指纹特征}/OUTBYTE*userFeatures,/木输出被验证用户的指纹特征书/OUTintResultNum,A输出匹配的特征值的数量丰/oUTF—BooLmatchresult)序输出匹配结果丰/ 【f札在嵌入式软件开发中的研究与宠用(3)通信模块:在正常情况下,门控输出信号为低电平。指纹传感器首先要采集注册用户的指纹,并通过ARM将处理后的指纹特征存储在指纹库中。一旦当用户进行指纹验证时,该通信模块将被验证人的指纹信息输出并从预存的指纹库中提取注册用户的指纹特征进行比对,这两个过程中指纹传感器与ARM板的存储器之间的数据通信可采用典型的点对点通信方式,串口通信协议可采用RS232或者USB接口。该通信是基于一个数据包的传输,通过对该数据包中字节的操作,可以完成指纹特征值的录入、比对、查询、删除等。比对结束之后,根据比对结果来决定电平的高低从而输出门锁控制信号。前文中在类的详细设计部分,我们已经通过类图给出了两个实体类的详细定义,并且给出了顺序图、构件图等模型,为了获得代码框架,我们定义指纹finger作为实现统一接口的类,该数据源包含用户ID号、指纹图像及指纹特征等所有信息。依据ROSE所提供的代码生成的执行步骤,由这些模型图生成的部分c++代码如下:publicclassFingerimage0{publicvoidinsertFinger(Fingerfinger);publicvoiddeleteFinger(Fingerfinger);⋯⋯I对于Fingerimage类我们定义TinsertFinger和deleteFinger两个方法用于插入/删除一个用户指纹信息。操作指纹库时只须调用实体类的方法进行操作:FingerinmgeFI=newFingerimage0;FI.insertFinger(finger);//插入指纹信息到指纹数据库中FI.deleteFinger(finger)://从指纹数据库中删除指纹信息得到类的定义框架之后,我们以指纹图像和指纹特征检索这两个方法为例说明该通信模块的工作原理,其调用命令如下:(芏)GetFingerinmge(shortRegid,stringImageFileName)作用:根据ID号获取注册用户的指纹图像数据参数:ImageFileName:用来保存指纹图像数据的文件名(文件路径名称)返回值:True:获取指纹图像数据成功,False:获取指纹图像数据失败。 u甩在嵌入式软件开发中的研究与应用②GetDBRec(shortRegid,shortfeaturenum,VARIANT宰RegRec)作用:从指纹数据库中获得注册用户的指纹信息记录参数:Regid:为每个注册用户分配的唯一标识身份的ID号。RegRec:指向VARIANT数据结构的指针,用来保存获得的注册用户的指纹数据记录(TRegRecord)。返回值:True:指纹数据记录获取成功,False:指纹数据记录获取失败。根据前文设计部分所获得的各种UML模型图,我们都可以通过代码生成工具很容易地将这些模型映射成c++代码。由模型设计结果生成这些代码框架,无疑可以提高开发效率。但是,模型的生成结果只是一些代码的框架,我们需要根据实际情况编写这些方法的具体实现过程。以上我们给出了依据基于UML的数据表~设计模型瓤类图等模型图来获得接口函数以及类的代码框架的实例,接着我们将前文软件设计中所提供的算法添入代码框架中相应的方法的具体实现过程部分便可得到完整的系统代码。其它代码的实现过程与此相同。到此为止,依据基于u虬的嵌入式软件开发过程,我们实现了整个系统的所有设计部分。在系统实现之后,我们可以将基于模型的测试和嵌入式交叉开发环境中基于源程序的调试方法结合起来,通过测试结果指导系统设计部分的修改,直至获得完整的系统实现。,3.系统预期达到的性能在文中我们采用u札建模技术及迭代增量的柔性软件开发过程为指导,给出了该指纹门禁系统软硬件的总体设计与实现过程。该系统将成熟的指纹识别技术与门控系统紧密结合在一起,很好地解决了门闸系统中的身份认证问题,硬件设计简单,使得系统具有小型化、智能化,适用性强、可靠性高等特点。与传统的嵌入式软件开发方法相比,文中所提的方法可使系统的开发预期达到以下效果:(1)系统开发过程中充分运用软硬件协同设计的思想,各部分尽量采用模块化设计,便于人员合作,可提高软件复用性和开发效率,降低研发成本。(2)UML建模技术的运用很好地满足了嵌入式软件的开发需求,为系统建立了可视化的组织结构和行为结构,加强了人员的沟通与合作,实现了分析、设计与实现过程的规范化和统一化,使得系统的开发周期短、风险低,便于维护.(3)迭代增量思想的应用很好地满足了用户需求的变化,分阶段提交产品降6l u虬在嵌入式软件开发中的研究与应用低了系统开发风险.(3)在系统的设计中,算法的发展为指纹图像的特征提取和匹配提供了坚实的基础。系统指纹匹配速度较快,能达到实用化的程度。我们所选的ARM开发板自带存储器,算法及系统数据信息部存储在指纹库中,特征提取与比对都集中在微处理器上完成,节约了通信中的传输量。(4)对于指纹门禁系统,识别性能指标是系统的关键。在该系统中,指纹传感器类型的选择使得该系统运行性能稳定,可工作在一5℃~40℃,工作湿度RF90%:系统反映速度快,指纹识别时间小于2S;识别效果良好,拒真率小于0.1%,认假率小于0.001%。(5)为保证数据的安全性,可对指纹库中的数据采用加密方法保存,并且要对数据进行实时备份,确保数据完整。考虑到系统失灵时用户无法正常进入,可在电控门中设置一个暗口,由管理员在特殊的情况下人工开启。(6)由于系统设计的目标是脱离Pc机独立运行,因此所有的数据存储与处理都集中在了微处理器上,这在某种程度上加重了处理器的数据处理的复杂性,并且存储器的有限空间也不可能无止境地存储用户的指纹信息等,这势必会影响系统响应速度。因此,在实际的应用中,可以考虑使用嵌入式数据库,也可以使用Pc机来完成数据的存储、查询等方面的管理,将指纹的比对处理等过程集中在Pc机上完成,通过Pc机与处理器之间的通信来实现门禁控制,这便解决了数据存储与管理等问题,也提高了系统的响应速度和通用性。4.8本章小结本章主要是将前文提出的基于UML的嵌入式软件开发方法应用到了一个嵌入式指纹门禁系统实例的开发过程中,以便更详细地介绍该开发过程并定性地分析该开发方法的指导效果。本章首先介绍了系统的开发背景及功能,依据该开发方法,给出了系统在需求分析、设计以及建模阶段的详细开发过程,利用Rose建立了系统的各个模型图,同时对嵌入式软件建模过程中所涉及的关键技术进行了相应的研究。在模型验证阶段,运用可执行u眦来进行系统模型的仿真验证与执行。在实现阶段,给出了系统软硬件的总体设计与实现过程,并对代码生写部分的正向工程进行了简要的介绍。最后,通过该实例的开发,定性地说明了该方法的优点以及它对嵌入式软件开发所能起到的良好的指导作用。 u札在嵌入式软件开发中的研究与戍用5总结与展望UML在信息管理等软件建模领域已有了较广泛的应用,但很少有将其应用于嵌入式软件的研发中。针对LIIIL建模过程中抽象、模块化、迭代等思想的优点,以及它对嵌入式软件开发的适用性,本文设想引入uML,采用先建模后编码的方法,试图摆脱传统的静态开发方式的局限性,以更好地解决嵌入式软件开发过程中规模大、复杂性高、费用昂贵、效率低等问题。因此,基于目前的嵌入式软件开发方式所存在的缺点,本文研究了UML软件分析与建模技术在一个嵌入式系统开发中的应用,建立了该系统的模型,对基于UML的嵌入式软件开发方法进行了研究,完成了预期的目标。论文首先简要介绍了Lt札和嵌入式系统的理论知识;在对LIl4L建模技术和嵌入#式软件开发技术研究的基础上,提出了基于ulIL的嵌入式软件开发方法及支持环境;并详细阐述了使用该方法对嵌入式软件进行分析与建模的具体实施步骤。在模型验证阶段,深入研究了基于u札的嵌入式系统模型验证机制,并针对可执行模型的平台无关性讨论了在嵌入式系统的开发中使用UML虚拟机的可能性。最后,设计了一个嵌入式指纹门禁系统实例,给出了使用U札对该系统进行需求分析、设计、建模以及代码实现的全部过程,并详细阐述了如何使用呲模型对嵌入式系统中的时间、线程、中断机制等重要概念进行处理,以此对嵌入式软件的开发技术做了一些探索。通过本文的研究,对基于bl-IL的嵌入式软件开发技术有以下几点认识:(1)在L'ML建模实例的具体应用中,用例建模、静态结构建模和动态行为建模3个环节是相辅相成,不可分割的,所谓的阶段划分只是相对的.(2)UML为嵌入式软件的需求分析提供了强大而全面的支持,基于L毗的需求分析可以克服对系统功能无法精确把握、过早陷入复杂的数据流分析等缺点,降低修改或变动的风险,减少重复劳动,提高项耳开发的成功指数。(3)眦适合于将复杂的系统设计问题简单化。统一的开发标准有利于人员交流,支持软硬件协同设计。迭代增量的思想很好地适应了嵌入式软件开发中用户需求的复杂性和多变性。(4)删L从不同角度用图形符号表示系统中的对象和关系,各种模型框图能从不同的抽象层次为系统建立可视化的组织结构和行为结构,便于项目参与者对 In儿在嵌入式软件开发中的研究与应用大型的复杂的嵌入式系统的理解。开发分布式、实时系统时,顺序图能够以类似流程图的符号给出行为概要的层次说明,并对每个项目的通信行为给予详细描述而且描述的方式具有很高的灵活性。而状态图则具备可扩展性和紧凑性的优点。对行为分析极其有效。(5)对于复杂的、难度较高的嵌入式系统来讲,在建模工作完成之后,尽早进行模型验证,执行基于模型定义的仿真,有助于在系统开发周期的早期发现问题,及时修改模型,这样可以大大地减少由于设计问题造成的系统重新开发的工作量,从而降低项目的成本,加快项目的进度。16)代码框架的自动生成能提高开发效率。面向对象的模决化设计使得软件的维护变得更加容易,并且开发过程中系统分析与设计模型部被保存下来,有利于相似系统中的重用。(7)依据LML语言适于建模但较难于实施的特点,在面向对象程序的开发中,建议尝试使用UML进行需求分析,而使用SDL来完成系统设计,将UML和SDL结合使用,争取为用户提供更好的解决方案。本文的研究只是初步性探讨,加上能力和技术笨件的限制,还有许多需要改进的地方,主要有以下几个方面:(1)由于时间和精力有限,本文将重点放在了研究使用基于u札的嵌入式软件开发方法来完成嵌入式系统的分析、设计与建模等过程,对实现阶段的具体代码生成并未进行过多的研究。因此,下一阶段应该对正/逆向工程作进一步的研究,完成系统算法部分的实现,并运用文中所提及的基于u札模型的测试策略对系统进行测试,以得到完整的系统实现,从而在实践中定量地验证文中提出的这种开发方法的优良性。(2)由于UML过于庞大和复杂,不同建模工具对该语言的侧重方面也有所不同,本文是使用了RationalRose2003完成了模型的设计,因此,所建模型在抽象层次等方面还存在一定不足。在实际开发中可考虑使用多种建模工具对所建模型进行比较,以精化、细化模型,从中选择最优模型来改进系统设计方案。(3)文中所采用的可执行UML模型验证策略也存在一定的不足,因此在以后的开发实践中,开发环境可选择能够支持直接的可执行的模型生成,并且支持基于实时框架的代码生成,从而解决嵌入式软件的可移植性问题。(4)由于UML适合于面向对象的分析与设计,对于非面向对象的分析与设计则 tqdl.在嵌入式软件开发中的研究与应用不尽如人意了,而嵌入式系统的实现工具基本上都是非面向对象的。因此,在嵌入式软件的开发过程中,如何使面向对象的分析与设计与非面向对象的实现工具衔接起来,以形成一套完善的方法论更好地指导嵌入式软件的开发就成了一个值得探讨盼问题。总之,对于UML语言的研究和成功应用是一个逐步深入的过程,需要软件开发人员和软件工程研究人员的不断努力,不能仅仅停留于被动接受层次上,还应主动研究它、修改它、扩展它和完善它,并通过各种途径对UML未来的发展及应用施加影响。 L呲在嵌入式软件开发中的研究与应用参考文献【1】尚利宏,熊运鸿.一种基于UML的嵌入式实时应用软件开发环境【J】.电子质量,自动化与仪器仪表卷,2001(9):25—30【2】王少锋.面向对象技术LrML教程[M】.北京:清华大学出版社’2004:1.17[3】RongChert,MarcoSgroi,既at,EmbeddedSystemI)eslgnUsmgUMLUnpubhshedpaper,U.C.Berkeley,September,2001andPlatform[J].【4】OradyBooch等著.李虎等译.UML用户指南【M1.北京:北京航空航天大学出版自k,2001:20.53【5】刘丰,冷英男.基于UML的一个应用软件建模实例【J】.计算机与现代化’2∞4'(10):132.134【6】6WendyBoggs、MichaelBoggs著,邱仲潘等译.UML-与RationalRose2002从入门到精通【M】.北京:电子工业出版社,2002:2.23+·啊SelicB,GulleksonGWardP.Rcal-tlmcObJect-orientedModeling[J].JohnWileyandSons,NewYbflc,lediuon,April22。1994【8】基于模型驱动的嵌入式应用软件可视化开发套_fq---Rhapsody6.O[EB/OL].http:/1www.789w.cn/ncws/hardware/2005/08/23/0006.hunf9】GerdFnclgBarbaraSchnrrer,KlausD.M'uller-Glaser.DesigningtheSoRwereArchttecmreofanEmbeddedSystemwithUML2.0闭.IEEETram.Solar.Eng.26(2000):70-93【lo】段国兵.UML的研究及其在嵌入式系统建模中的应用【D】.四川:西南交通大学硕士论文2004:4-6【11】MassLmlllanoChmdo,eLal,“Hardware-sol,wareCodeslgnofEmbeddedSystems”,IEEEMicro,V01.14,No.4,laP.26-36,Aug.1994【12】朱成果,于淑玲.面向对象的嵌入式系统设计方法m,单片机与嵌入式系统应用.2004:9-ll【13】Haas-EnkEnkssonMagnusPenker著,余俊乎,余安萍,桧敏等译.UML工具箱[M】.北京:电子工业出版社2004:9.12[141标准建模语言UML在软件开发中的应用[EB/OL].t吨,:悔n^啊ch|】皑毗nlnet^IMI^I蛐YY/2004033l鹏0220.ht础【15】JamesRumbaugh,IvarJacobson,GradyBooch著,姚淑珍唐发根等译.UML参考手册【M】.北京:机械工业出版社。2001:4.16f161王云,刘又诚,剧伯生.UML可砚化建模系统的模型一致性检查机制[J】.计算机研究与发展.2000,37(1):1-766 u札在嵌入式软件开发中的研究与应用【17]JosephSchmuller著,李虎等译.UML基础、案例与应用嗍.北京:人民邮电出版社,2003【18】邵维忠,梅宏.统一建模语言评述[J】.计算机研究与发展,1999,36(4):385—394【19】UML软件工程组织.UML使用现状报生[EB/OL].http:llwww.uml.o强∞,[20】郭小荟,姜代红.面向对象的软件工程与UMl4J]澎城职业大学学报,2003。18(2):23-25【2l】黄承安.张跃.UML在嵌入式系统设计中的应用m.计算机应用,2003,(11):9.11【22】李思广等.基于UML的软件过程建模方法研究阴.计算机工程与应用,2003,(6):76-78【23】涂荣军。陶俊才,徐鹏飞.Rational统一过程中的UseCase业务建模【盯.计算机与现代化,2002.(6):41-42【24】DesmondFrancisD’SotmkAlanCameromwills著,王慧等译.UML对象、组件和框架一--Catalysts方法[M】.|E京:清华大学出版社,2004[25】PhdippeKruchten著,周伯生等译.Rauonal统一过程引论[M】.北京:北京希望电子出版社,2001:112.115[26】苏统华。张田文等.用例驱动开发过程的研究与应用【J】.微机发展,2003,(10)1107—109’“a[271罗晓东,王换招,和海莲.UML建模过程中获取用例的增量迭代方法啊.襄樊职业技术学院学报,2004.2。3(1):7-10【28】经致远,林良明,朱宏擎.可视化建模工具的应用闭.武汉交通科技大学学报,1999,23(6):655-657【29】马忠梅等.ARM&Linux嵌入式系统教程嗍.北京:北京航空航天大学出版社。2004:1-48‘。雪,[30]嵌入式系统的特点[ES/OL].http'.//www3.ccw.eom.en/club/essene≈陀00109/4430.htm【3l】王国宁,唐明浩.一种基于UML的嵌入式系统可视化开发方法[EB/OL].http://www.sawin.en/doc/SottMethod/UMl./blueska307.hun【32】唐英,李志蜀.使用UML分析设计嵌入式系统【J】.计算机应用研究,2002,(5):117-120【33】MarunGUMLforEmbeddedSystemsSpeclficaUonandDesign:MouvattonandOverview.Proceedingsofthe2002Design,AutomaUonandTestinEuropeConferenceandExl'ulauon,2002:773—775【34】刘小君,张立臣.基于UML的实时系统开发【J】.微机发展,2003,13(5):81-84【35】ChenSGQin)(.ZhangHC.AUML-baaedModelAnalysisMethodinHardware-softwareCodcslgn.JournalofSothvare,2003,14(1):103—109【36】GdcJong,AUML-BasedDesignMethodologyforReal-TimeandEmbeddedSystems,ProceedingofDATE0267 u乩在嵌入式软件开发中的研究与应用【37】张莉,葛科等.UML软件开发过程和支持环境研究【J】.北京航空航天大学学报,1998,24(4):柏7-410[3s1郭晓东,刘积仁等.嵌入式系统虚拟开发环境的设计与实现田,计算机研究与发展,2000,37(4):413-417[39】刘芳.UML语言及实际中建模的应用【D】.山东:Lb39科技大学硕士论文,2003.5}401B.Selic,CompleteH1曲一Ped'ormanceCodeGenerationfi-omUMLModels,ProceedingsofEmbeddedSystemConferen∞,SanFrenclsco。CA,USA,2002【41】基于UML的实时嵌入式应用软件开发套件一Rhapsody[EB/OL].hup://202.38.246.163:8080/RTOS/Lmu“200512/RTOs_20051214080812.htmlD2]B.Selic,J.P.embaugh,UsingUMLforModelmgComplexReal-TimeSystems,Whltep鸭Rauonal(ObjectTime),March1998【43】石柯等.基于UML的嵌入式系统模型验证机制的研究【J】.计算机工程与应用,2001。(23):11.1-114,【44】WilliamE.McUmberandBettyHCCheng.UML-B黜dAnalysisofEmbeddedSystemsUsingaMappingtoVHDL[EEEHighAssuranceSoihvareEngineering.1999.II[45】TimSchattkowsky.Model-basedDevelopmentofEmbeddcdSystems:ExecutableModelsvs.CodeGenerauon,InGSebastzen(eds。),Proc.WorkshopModelDrivenArdutecRaein也eSpccl丘canon'lmplementatmnandValldattonofObject-onentcdEmbeddedSystems(SIVOES-MDA),ImemmmsalConferenceontheUmfiedModetmgLanguage眦2003,October2003∞ProjectTechnology,inc.:ExecmableandTranslatableUML-Summary[EB/OL].http://uk.buflder.com/wlmepapers/O,39026692,60093992p-3900102Sq,00.hun【47】黄贤英.UML建模过程及在需求分析中的应用【J】.计算机工程,200l,2“11):184-186[481何克清等.角色UseCase:UML的一个更加完全的分析方法田.计算机研究与发展,2∞l。(9):H05—1107D9】bny.用例陷阱:在实际项且中使用用例的前10个问题[J】.TOOLSUSA'99,IEEE,1999[50】RaLt'Nmnann.Hardware/SotkwareCo-DesignforDataFlowDominatedEmbeddedSystems【M】.Boston:KluwerAcademicPubhshers,1998【51】Mellor,S.,Balcer,M.,Balcer,M.J.'Mellor,S.J.:ExecutableUML:AFoundauonforModelDrivenArcbatectme.Addison-Wesley,2002【52】骆峰等.网络化指纹门禁系统设计[J】.微计算机应用,2003,24(1):23—26【53】张薇.指纹识别技术在门禁系统的应用川.应用技术,1999。(3):13.166窟 u札在嵌入式软件开发中的研究与应用【54】李楠.UML语言的研究与应用p】.四川:成都理工大学硕士论文,2004:18-40【55】陈晓锋等.基于UML的嵌入式指纹识别系统软件建模【J】.计算机工程,2004,30(14):130—133【56】程国达,彭澄廉.嵌入式系统描述与验证环境的实现们.计算机辅助设计与图形学学报,2004,16(1):109—111【57】钟冰,马利庄,聂栋栋.UML在IFIS智能指纹鉴别系统开发中的应用【J】.计算机应用,2005,25(1):226—229【58】简敬元,龙占超.用MotorolaDSP56311和MCS一51组建嵌入式指纹自动识别系统[EB/OL】.http://www.chmaecnet.com/xsj04/xsj053611.asp UWL在嵌入式软件开发中的研究与戍用致谢本论文是在导师魏振钢教授的悉心指导下完成的。在三年研究生学习期间,魏老师在学习、生活、工作上给了我很大的支持和帮助,在此致以深深的感谢。魏老师严谨的治学态度,求实的工作作风,平易近人的处世风范,教给了我正确的处世方法,使我能够正确地对待生活和学习中遇到的困难和挫折,对我的人生观产生了深远的影响。在三年的研究生学习期间,给我的学习上的帮助和精神上的鼓励,使我的毕业设计和论文顺利完成,在此致以深深的感谢。感谢我校计算机系的各位老师对我的培养和学业上的指导,感谢本实验室的师兄、师姐、师弟、师妹在学习上给予我的帮助,尤其要感谢我的舍友魏诺和张晓洁,在这三年中她们给了我学习上的帮助和生活上的关心,给了我前进的动力,使我在学习过程中知难而进,以坚强的态度面对生活,最终取得学业上的进步。感谢养育我多年的父母和一直关心和支持我的亲人和朋友,尤其要感谢我的朋友,谢谢这6年来他给予我的呵护和理解,陪我走过风风雨雨,经历点点滴滴,一起承受磨练与痛苦,一起分享欢乐与泪水。最后,尤其要感谢我最爱的父母,在我成长的这二十多年里,他们为我付出了太多太多的关爱和理解,而我给予他们的却太少太少,这份恩情将成为我克服困难、不断进步的精神支柱,它将鞭策并鼓励我,使我以勇往直前的精神动力去经营好生命中的每一天。在此对父母致以我最崇高的敬礼和谢意。 UM[.在嵌入式软件开技中的研究与应用玫读硕士期间论文发表情况:1.魏振钢、刘苗苗。《基于决策支持的CRM在呼叫中心中的研究与应用》,发表于计算机应用研究,已发表。2.张磊、刘苗苗、魏振钢。《利用决策支持改善呼叫中心服务质量》,发表于计算机应用研究,已发表。3.魏诺、刘苗苗、张晓洁。I《WEBN务器在动态电子商务中的研究与应用》,发表于计算机应用研究,已录用。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
大家都在看
近期热门
关闭