2.2.2 系统设计的形式化方法
1.UML简介
在嵌入式通信系统的开发过程中,在不同的设计阶段将按照不同层次的抽象完成许多不同的设计任务。但在实际工作中,随着设计过程的延伸,很可能会出现这样的情况,即每到一个新的抽象层次可能会对系统重新设计考虑。这种情况的发生主要是人们没有在设计过程的开始就为系统建立一个合适的模型而引起的。人们希望的设计过程是一种逐步求精的过程,即随着设计过程的延伸逐渐在设计过程中加入新的细节而不是推翻原来的设计。因此,系统设计中就需要用到一种统一的建模语言,以帮助人们不会偏离设计的主线。
统一建模语言(Unified Modeling Language,UML)是面向对象软件的标准化建模语言。UML因其简单、统一的特点,而且能表达软件设计中的动态和静态信息,目前已成为可视化建模语言的工业标准。在嵌入式通信系统的开发过程中,统一建模语言可以在整个设计周期中使用,帮助设计者缩短设计时间,减少改进的成本,使软硬件分割最优。
面向对象的规格说明可以看成互补的两个方面:
①面向对象的规格说明允许用精确地模拟真实世界的对象和它们之间的交互方式来描述系统。
②面向对象的规格说明提供一个基本的原语集,可以用特殊属性来描述系统,而不管系统构件和真实世界对象的关系如何。
UML是一种大型语言,本小节只介绍一小部分的基本概念。
(1)UML基本元素
UML最基本的元素是对象和类,对象是类的实例。另外,对象和类之间可能存在着各种不同的关系。类具有属性和行为,活跃类是能实现独立控制线程的类。对象可能有被赋予特定的值的属性;匿名对象属于某一个类但没有标识名。程序包是系统的组织单元,可能包括类定义、对象等。状态在状态图中描述行为;物理处理器是硬件部件;构件是实现一组接口的系统的物理组成部分。我们常常发现,在一个对象或类中会多次用到一些元素的特定组合,可以对这些组合命名,这样的一个定义在UML中称为模板。
(2)主要内容
UML是在Booch、OMT、OOSE等面向对象的方法及其他许多方法与资料的基础上发展起来的。UML表示法集中了不同的图形表示方法,剔除了其中容易引起的混淆、冗余或者很少使用的符号,同时添加了一些新的符号。其中的概念来自于面向对象技术领域中众多专家的思想。
UML从考虑系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、部署图等9种图。这些图从不同的侧面对系统进行描述。系统模型将这些不同的侧面综合成一致的整体,便于系统的分析和构造。尽管UML和其他开发工具还会设计出许多派生的视图,但上述这些图和其他辅助性的文档是软件开发人员所见的最基本的构造。其中:
①UML用例图与OOSE中的用例图类似。
②UML的类图综合了OMT、Booch等面向对象方法中的类图。
③UML状态图是对David Harel所提出状态图的改进。
④UML活动图的基本语义和状态图大致相同,它类似于许多方法(包括面向对象技术之前的一些方法)中的工作流图。
⑤UML的协作图是通过对Booch方法的对象图、Fusion方法的对象交互图以及其他一些方法中的相关图表改造而成的。
⑥UML的构建图和部署图是在Booch方法中的模块和进程图(处理关系图、处理器图)的基础上发展起来的。
UML简化了建模方法,它扬弃了Booch、OMT或OOSE等方法中的糟粕,而代之以其他方法中的精华。UML一般不引入新的概念和符号,只有在没有现有的解决方法可以借鉴时,UML的开发者才考虑加入新的概念。UML的开发者们是在设计一种语言(尽管只是一种图形化语言),因此必须在简明(所有元素一律用方框和文字表示)和烦琐(为每个元素设计单独的符号)之间权衡。尽管如此,UML中还是增添了衍型和扩展机制等一些新的元素,因为这些元素在其他建模语言的实践中已经被证明是非常有用的。
用例图主要用来描述用户、需求、系统功能单元之间的关系。它展示了一个外部用户能够观察到的系统功能模型图。
类图显示了一组类、接口、协作以及他们之间的关系。在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统。类加上他们之间的关系就构成了类图,类图中还可以包含接口、包等元素,也可以包括对象、链等实例。
对象图(Object Diagram)显示了一组对象和他们之间的关系。使用对象图来说明数据结构,类图中的类或组件等的实例的静态快照。对象图和类图一样反映系统的静态过程,但它是从实际的或原型化的情景来表达的。
对象图显示某时刻对象和对象之间的关系。一个对象图可看成一个类图的特殊用例,实例和类可在其中显示。对象也和合作图相联系,合作图显示处于语境中的对象原型(类元角色)。
对象图是类图的实例,几乎使用与类图完全相同的标识。他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。
2.UML特点
①UML统一了各种方法对不同类型的系统、不同开发阶段以及不同内部概念的不同观点,从而有效地消除了各种建模语言之间不必要的差异。它实际上是一种通用的建模语言,可以为许多面向对象建模方法的用户广泛使用。
②UML建模能力比其他面向对象建模方法更强。它不仅适合于一般系统的开发,而且对并行、分布式系统的建模尤为适宜。
③UML是一种建模语言,而不是一个开发过程。
3.UML的应用领域
UML的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、具有实时要求的工业系统或工业过程等。总之,UML是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。
此外,UML适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。在需求分析阶段,可以用用例来捕获用户需求。通过用例建模,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求。分析阶段主要关心问题域中的主要概念(如抽象、类和对象等)和机制,需要识别这些类以及它们相互间的关系,并用UML类图来描述。为实现用例,类之间需要协作,这可以用UML动态模型来描述。在分析阶段,只对问题域的对象(现实世界的概念)建模,而不考虑定义软件系统中技术细节的类(如处理用户接口、数据库、通信和并行性等问题的类)。这些技术细节将在设计阶段引入,因此设计阶段为构造阶段提供更详细的规格说明。
编程(构造)是一个独立的阶段,其任务是用面向对象编程语言将来自设计阶段的类转换成实际的代码。在用UML建立分析和设计模型时,应尽量避免考虑把模型转换成某种特定的编程语言。因为在早期阶段,模型仅仅是理解和分析系统结构的工具,过早考虑编码问题十分不利于建立简单正确的模型。
UML模型还可作为测试阶段的依据。系统通常需要经过单元测试、集成测试、系统测试和验收测试。不同的测试小组使用不同的UML图作为测试依据:单元测试使用类图和类规格说明;集成测试使用部件图和合作图;系统测试使用用例图来验证系统的行为;验收测试由用户进行,以验证系统测试的结果是否满足在分析阶段确定的需求。
总之,标准建模语言UML适用于以面向对象技术来描述任何类型的系统,而且适用于系统开发的不同阶段,从需求规格描述直至系统完成后的测试和维护。