284.软件体系结构集成开发环境的作用

  软件体系结构集成开发环境基于体系结构形式化描述从系统框架的角度关注软件开发。体系结构开发工具是体系结构研究和分析的工具,给软件系统提供了形式化和可视化的描述。它不但提供了图形用户界面、文本编辑器、图形编辑器等可视化工具,还集成了编译器、解析器、校验器、仿真器等工具;不但可以针对每个系统元素,还支持从较高的构件层次分析和设计系统,这样可以有效地支持构件重用。具体来说,软件体系结构集成开发环境的功能可以分为以下5类。

  1.辅助体系结构建模

  建立体系结构模型是体系结构集成开发环境最重要的功能之一。集成开发环境的出现增加了软件体系结构描述方法的多样性,摒弃了描述能力低的非形式化方法,摆脱了拥有繁杂语法和语义规则的形式化方法。开发者只需要经过简单的操作就可以完成以前需耗费大量时间和精力的工作。形式化时期建模是将软件系统分解为相应的组成成分,如构件、连接件等,用形式化方法严格地描述这些组成成分及它们之间的关系,然后通过推理验证结果是否符合需求,最后提供量化的分析结果。

  而集成开发环境提供了一套支持自动建模的机制完成体系结构模型分析、设计、建立、验证等过程。用户根据不同的实际需求、应用领域和体系结构风格等因素选择不同的开发工具。

  2.支持层次结构的描述

  随着软件系统规模越来越大、越来越复杂,只使用简单结构无法表达,这时就需要层次结构的支持,因此开发工具也需要提供层次机制。图10-1描述了一个简单的具有层次结构的客户端/服务器系统。

图10-1  层次构件

  系统由客户端和服务器两个构件组成,客户端可以向服务器传输信息。服务器是一个包含了3个构件的复杂元素,内部构件之间相互关联形成了一个具有独立功能的子系统,子系统通过接口与外界交互。体系结构集成开发环境提供了子类型和子体系结构等机制来实现层次结构。用户还可以根据需要自定义类型,只需将这种类型实例化为具体的子系统即可。类似构件、连接件也可以通过定义新类型表达更复杂的信息。

  3.提供自动验证机制

  几乎所有的体系结构集成开发环境都提供了体系结构验证的功能。体系结构描述语言解析器和编译器是集成开发环境中必不可少的模块。除此之外,不同的集成开发环境根据不同的要求会支持特定的检验机制。

  Wright提供模型检测器来测试构件和连接件死锁等属性,它通过一组静态检查来判断系统结构规格说明的一致性和完整性,同时还支持针对某一特定体系结构风格的检查;C2通过约束构件和连接件的结构和组织方式来检查一致性和完整性; SADL利用体系结构求精模式概念保证使用求精模式的实例的每一步求精过程都正确,采用这种方式能够有效地减少体系结构设计的错误;ArchStudio中的Archlight不但支持系统的一致性和完整性检查,还支持软件产品线的检测。

  集成开发环境的校验方式可分为主动型和被动型两种。主动型是指在错误出现之前采取预防措施,是保证系统不出现错误状态的动态策略。它根据系统当前的状态选择恰当的设计决策保证系统正常运行。例如,在开发过程中阻止开发者选择接口不匹配的构件;集成开发环境不允许不完整的体系结构调用分析工具。被动型是指允许错误暂时存在,但最终要保证系统的正确性。被动型有两种执行方式,一种允许预先保留提示错误稍后再作修改,另一种必须强制改正错误后系统才能继续运行。例如,在MetaH的图形编辑器中,启动“应用”按钮之前必须保证系统是正确的。

  4.提供图形和文本操作环境

  体系结构集成开发环境是开发者研究体系结构的可视化工具和展示平台,它具有友好的图形用户界面和便捷的操作环境。体现在以下4个方面:

  (1) 集成开发环境提供了包含多种界面元素的图形用户界面,例如工具栏、菜单栏、导航器视图、大纲视图等。工具栏显示了常用命令和操作;视图以列表或者树状结构的形式对信息进行显示和管理。

  (2) 集成开发环境提供了图形化的编辑器,它用形象的图形符号代表含义丰富的系统元素,用户只需选择需要的图形符号,设置元素的属性和行为并建立元素之间的关联就可以描绘系统了。例如,Darwin系统提供基本图元代表体系结构的基本元素,用空心矩形表示构件,直线表示关联,圆圈表示接口;每个图元都有自己的属性页,通过编辑构件、关联和接口的属性页来设置体系结构的属性值。

  (3) 集成开发环境利用文本编辑器帮助开发者记录和更新体系结构配置和规格说明。通常,集成开发环境会根据模型描述的系统结构自动生成配置文档。当模型被修改时,它的文本描述也会发生相应的变化,这种同步机制保证了系统的一致性和完整性。

  (4) 集成开发环境还支持系统运行状态和系统检测信息的实时记录,这些信息对分析、改进和维护系统都很有价值。

  5.支持多视图

  多视图作为一种描述软件体系结构的重要途径,是近年来软件体系结构研究领域的重要方向之一。随着软件系统规模不断增大,多视图变得更为重要。每个视图都反映了系统内相关人员关注的特定方面。多视图体现了关注点分离的思想,把体系结构描述语言和多视图结合起来描述系统的体系结构,能使系统更易于理解,方便系统相关人员之间相互交流,还有利于系统的一致性检测以及系统质量属性的评估。 

  图形视图和文本视图是两种常见的视图。图形视图是指用图形图像的形式将系统的某个侧面表达出来。它是一个抽象概念,不是指具体的哪一种视图。逻辑视图、物理视图、开发视图等都属于图形视图。同样,文本视图是指用文字形式记录系统信息的视图。此外,还存在很多特殊的体系结构集成开发环境特有的视图,例如Darwin系统中的分层系统视图、ArchStudio的文件管理视图、Aesop支持特定风格形象化的视图等。

     10.2  体系结构IDE原型

  现在出现了越来越多的体系结构集成开发环境来满足种类繁多的体系结构和灵活多变的需求。尽管这些集成开发环境针对不同的应用领域,适用不同体系结构,但是它们都依赖相似的核心框架和实现机制。把这些本质的东西抽象出来可以总结出一个体系结构集成开发环境原型。该原型只是一个通用的框架,并不能执行任何实际的操作,但它可以帮助开发人员深入理解开发工具的结构和工作原理。下面结合XArch(eXtensible Architecture Research System)系统来介绍原型。

  从集成开发环境的工作机制看,原型是三层结构的系统。最上层是用户界面层,它是系统和外界交互的接口。中间层是模型层,它是系统的核心部分,系统重要的功能都被封装在该层。这层通过接口向用户界面层传输数据,用户界面层要依赖这一层提供的服务才能正常运行。底层是基础层,它覆盖了系统运行所必需的基本条件和环境,是系统正常运行的基础保障。此外,模型层和用户界面层的正常运行还需要映射模块的有效支持,映射文件将指导和约束这两层的行为(如图10-2所示)。

图10-2  原型框架

10.2.1  用户界面层

  用户界面层是用户和系统交互的唯一渠道,用户需要的操作都被集成到这一层。这些操作可以通过编辑器和视图来实现。编辑器是开发环境中的可视构件,它通常用于编辑或浏览资源,允许用户打开、编辑、保存处理对象,类似其他的文件系统应用工具,如Microsoft Word,执行的操作遵循“打开—保存—关闭”这一生命周期模型。 

  同一时刻工作台窗口允许一个编辑器类型的多个实例存在。视图也是开发环境中的可视构件,它通常用来浏览分层信息、打开编辑器或显示当前活动编辑器的属性。与编辑器不同的是,同一时刻只允许特定视图类型的一个实例在工作台存在。编辑器和视图可以是活动的或者不活动的,但任何时刻只允许一个视图或编辑器是活动的。

  XArch系统的工作台是一个独立的应用窗口,包含了一系列视图和编辑器。工作台基于富客户端平台(Rich Client Platform),它最大的特点是支持用户建立和扩展自己的客户应用程序。如果现有的编辑器不能满足需求,用户可以灵活地在接口上扩展新的功能。

  图10-3显示了XArch系统的部分编辑器和视图。左侧的资源管理器视图将系统所有的信息以树状结构显示出来;右边的属性视图显示了考察对象的属性和属性值;下面是记录系统重要状态的日志视图。占据工作台最大区域的是中间的编辑器,是主要的操作场所。为了满足相关人员不同的需求,系统支持多视图。系统用标签对多个视图进行区分和管理,用户可通过选择标签在不同视图间转换。

图10-3  XArch系统

10.2.2  模型层

  模型层是系统的核心层,系统的大部分功能都在这一层定义和实现,它主要的任务是辅助体系结构集成开发环境建立体系结构模型。

  体系结构描述语言文档是系统的输入源。有的体系结构集成开发环境对描述语言的语法有限制或约束,这就需要修改语言的语法与其兼容。输入的体系结构文档是否合法有效,是由专门的工具来检验的。此处的编译器不同于往常的把高级程序设计语言转化为低级语言(汇编语言或机器语言)的编译器,它是一个将体系结构描述转化为体系结构模型的工具。为实现此功能,编译器一般要完成下列操作:词法分析、解析、语义分析、映射、模型构造。

  词法分析是遵循语言的词法规则,扫描源文件的字符串,识别每一个单词,并将其表示成所谓的机内token形式,即构成一个token序列;解析过程也叫语法分析,是指根据语法规则,将token序列分解成各类语法短语,确定整个输入串是否构成一个语法上正确的程序,它是一个检查源文件是否符合语法规范的过程;语义分析过程将语义信息附加给语法分析的结果,并根据规则执行语义检查;映射是根据特定的规则,如映射文档,将体系结构描述语言符号转换成对应的模型元素的过程;模型构造紧跟着映射过程,它把映射得到的构件、连接件、接口等模型元素按语义和配置说明构造成一个有机整体。

  在编译器工作的过程中会有一些隐式约束的限制,例如类型信息、构件属性、模块间的关系等。校验器是系统最主要的检查测试工具,采用显示检验机制检查语法语义、类型不一致性、系统描述二义性、死锁等错误,以保证程序正常运行;模式是一组约束文档结构和数据结构的规则,它是判断文档、数据是否有效的标准;映射模块是抽象了体系结构描述语言元素和属性的一组规则,这组规则在模型层和用户界面层担任了不同的角色。在模型层,它根据映射规则和辅助信息,将开发环境无法识别的体系结构描述语言符号映射成可以被工具识别的另一种形式的抽象元素。在用户界面层支持模型显示,它详细定义了描述语言符号如何在模型中表示,如何描绘模型元素以及它们之间的关系。

  建立体系结构模型是这层的最终目标,模型层用树或图结构抽象出系统,形象地描述了系统的各构件及它们之间的关系。通常,一个系统用一个体系结构模型表示。对于一个规模庞大、关系复杂的模型,不同的系统相关人员只需侧重了解他们关注的局部信息,而这些信息之间具有很强的内聚性,可以相对独立地存在。针对某一观察角度和分析目的,提取一系列相互关联且与其他内容相对独立的信息,就可以构成软件体系结构视图。一个模型可以构造成多种视图,通过不同的视角细致全面地研究系统。

  XArch系统只处理基于XML的可扩展的体系结构描述语言,即FEAL兼容的体系结构描述语言,如果不符合这一要求,则可以适当调整语法结构来满足FEAL的规范。软件体系结构描述不仅是XML结构良好的,还必须是符合模式规定的有效的文档。该系统不但支持对系统的分析、验证和序列化等操作,还支持视图和模型之间的相互转化。

  XArch系统不仅仅是一个体系结构开发环境,还是一个扩展工具的平台。它的扩展性主要体现在两个方面:

  (1) 可以灵活地创建和增加一种新的软件体系结构描述语言或语言的新特性,以满足新功能和新需求。如图10-4所示,系统通过引入一个中间介质FEAL,使模型脱离与体系结构描述语言的直接联系,从而拓展了体系结构描述语言符号到模型元素固定的对应关系。体系结构描述语言的元素首先根据映射规则被映射为FEAL元素(FEC)的形式,FEC再对应到相应的模型的构件。因此,只要体系结构描述语言符号到FEC的映射是有效的,那么无论哪种体系结构描述语言都可以构造对应的体系结构模型。当新的体系结构描述语言或新的语言特性出现时,只需修改映射规则就能有效地支持。

  (2)  Arch系统提供了一系列可扩展的可视化编辑接口,支持定义新界面元素。

图10-4  ADL、FEAL和MODEL的关系

10.2.3  基础层

  基础层是系统的基本保障,涵盖了系统运行所需的软/硬件支撑环境,它还对系统运行时所用的资源进行管理和调度。通常,普通的简单配置就可以满足系统运行需求,但是有的体系结构集成开发环境需要更多的支持环境。例如,ArchStudio 4 作为Eclipse的插件,必须在Java和Eclipse环境下运行。

10.2.4  体系结构集成开发环境设计策略

  目前,集成开发环境都很注重体系结构的可视化和分析,有的也在体系结构求精、实现和动态性上具有强大的功能。体系结构开发环境原型提供了一个可供参考的概念框架,它的设计和实现需要开发人员的集体努力。下面是体系结构集成开发环境设计的3条策略。

  (1) 体系结构集成开发环境的设计必须以目标为向导。

  集成开发环境的开发遵循软件开发的生命周期,需求分析是必需且非常重要的阶段。开发者只有明确了实际需求,才能准确无误地设计。无论是软件本身还是最终用户都有很多因素需要确认。例如,集成开发环境可以执行什么操作?怎么执行?它的结构怎样?哪一种体系结构描述语言和体系结构风格最适合它?哪些用户适合使用该系统?怎样解决系统的改进和升级?这些问题给设计者提供了指导和方向。

  (2) 为了设计一个支持高度扩展的体系结构集成开发环境,必须区分通用和专用的系统模块。

  通用模块部分是所有集成开发环境都必备的基础设施,例如支撑环境、用户界面等。但是不同的体系结构集成开发环境针对不同的领域需要解决千差万别的问题,因此每种体系结构集成开发环境都有自己的特点。例如,Rapide的开发环境建立一个可执行的仿真系统并提供检查和过滤事件的功能,以此来允许体系结构执行行为的可视化;SADL的支持工具支持多层次抽象和具有可组合性的体系结构的求精。

  它要求在抽象和具体的体系结构之间建立名字映射和风格映射,两种映射通过严格的验证后,才能保证两个体系结构在求精意义上的正确性。这样可以有效地减少体系结构设计的错误,并且能够广泛、系统地实现对设计和正确性证明的重用。

  (3) 合理使用体系结构集成开发环境原型。

  原型框架为可扩展性开发工具的设计提供了良好的接口。例如XArch系统可以通过添加语言符号或定义FEAL兼容的体系结构描述语言来扩展现有的功能。这样,体系结构专用的功能就可以作为动态插件应用到集成开发环境中,增强开发工具的功能,扩大它的使用范围。

   10.3  基于软件体系结构的开发

      环境ArchStudio 4

10.3.1  ArchStudio 4的作用

  ArchStudio 4 是美国加州大学欧文分校的软件研究院开发的面向体系结构的基于xADL2.0的开源集成开发环境。它除了具备普通体系结构建模功能外,还提供了对系统运行时刻和设计时刻的元素的建模支持,类似版本、选项和变量等更高级的配置管理观念,以及对软件产品线体系结构的建模支持。

  ArchStudio 4在前一版的基础上添加了新的特性和功能,在可扩展性、系统实施和工程性上有新的发展。ArchStudio 4的作用主要体现在基本功能和扩展功能两方面。它不但实现了建模、可视化、检测和系统实施等基本功能,还良好地支持这些功能的扩展。

  (1) 建模。作为软件体系结构开发辅助工具,ArchStudio 4最主要的功能就是帮助用户用文档或者图形方式表达设计思想。模型像建筑蓝图一样从较高的角度把系统抽象成一个框架,抽象的结果将以XML的形式存储和操作。用户可以利用系统多个视角对该模型进行考察和研究。此外,ArchStudio 4还支持体系结构分层建模、软件产品线建模,而且可以时刻监视变化的体系结构。

  (2) 可视化。ArchStudio 4提供了多种可视化的构件,例如视图和编辑器。视图和编辑器用文本或图形方式形象化体系结构描述,例如Archipelago、ArchEdit、Type Wright等工具,同时也给系统涉众提供了交互和理解的平台。

  (3) 检测。ArchStudio 4集成了功能强大的体系结构分析和测试工具Schematron。它通过运行一系列预定的或用户定义的测试来检查系统。Archlight根据标准来自动测试体系结构描述的正确性、一致性和完整性等。检查出来的错误会显示出来,同时帮助用户定位出错的地方并提供修改途径和方法。

  (4) 实施。它帮助将体系结构运用到实施的系统中。ArchStudio使用自己的体系结构设计思想和方法来实现自身。ArchStudio本身的体系结构是用xADL2.0详细描述的,这些文件都是实施的一部分。一旦ArchStudio在机器上运行,它的体系结构描述将被解析,这些信息将被实例化并连接到预定的构件和连接件上。

  除此以外,ArchStudio 4对上述的功能提供了良好的扩展机制。它基于xADL2.0,而xADL2.0是模块化的,不是一个独立的整体。它没有将所有词法和语法一起定义,而是采用根据XML模式分解模块的方式。如图10-5所示,每个模块相互分裂,侧重实现系统的某一功能,4个模块都与中间的模块交互,5个模块共同组成了一个有机的系统。例如,可将构件和连接件分解为多个相互关联的模块。 

  目前,模块技术已经能处理构件和连接件等低层次的构件,还能处理软件产品线、实施映射、体系结构状态。ArchStudio 4根据模式自动生成一个数据绑定库以便为别的工具提供共享功能。这样,用户就可以扩展xADL语言的新特性并自动生成支持新特性交互的库。总之,ArchStudio在xADL2.0的支持下允许开发者定义新的语义和规则去获取更多的数据信息来满足新的需求(如图10-6所示)。 

图10-5  xADL2.0结构

图10-6  ArchStudio 4的工具

  (5) 可扩展的建模。开发ArchStudio 4的目标就是要实现体系结构建模的可扩展性。它基于可扩展的体系结构描述语言xADL2.0,利用添加新的XML模式来支持模型扩展。

  (6) 可扩展的可视化。可视化编辑器利用可扩展的插件机制添加对新体系结构描述语言元素编辑的功能。

  (7) 可扩展的检测。用户可以在Schematron中设计新的测试,也可以集成新的分析引擎来满足高要求的检验。在ArchStudio 4中,所有的检测工具都作为Archlight插件使用,因此用户可以通过添加插件完成新的测试。 Archlight集成了功能强大的Schematron XML分析引擎,别的测试引擎也可以无缝地集成到Archlight中(如图10-7所示)。

图10-7  可扩展的检测工具

  (8) 可扩展的实施。用户可以灵活地把体系结构与Myx框架绑定起来。Myx是在ArchStudio 4建立的体系结构风格。此风格适合开发高性能的、灵活的集成开发环境。Myx-whitepaper定义了一套构件和连接件的构建规则, 提供了定义构件同步和异步交互的模式,同时还规定了哪些构件可以相互约束,确定了构件间直接的或者分层的关系。在Myx风格的约束下,构件之间的相对独立有利于构件重用,构件只能通过显示接口与外界传递消息,因此不需对构件重新编码就可以在不同配置的构件间建立联系。此外,动态代理和事件处理机制支持在运行时刻控制连接状态。

10.3.2  安装ArchStudio 4

  1.硬件配置需求

  硬件配置取决于具体的实际应用需求,例如程序规模、程序预期的运行时间等。对于ArchStudio 4来说,使用x86体系结构兼容的计算机,Pentiun Ⅲ处理器,128 MB内存以上的配置即可。

  2.软件配置需求

  ArchStudio 4是开源开发工具Eclipse的插件。 它可以在任何支持Eclipse的系统上运行。不过,必须有JRE1.5或者更高版本和Eclipse3.2.1或者更高版本的支持。

  3.安装ArchStudio 4

  安装过程只需按照安装向导进行即可,具体的步骤如下:

  (1) 在“Eclipse”菜单栏上单击“Help”按钮,在菜单列表中选择“Software Updates”→“Find and Install”命令。

  (2) 在弹出的“Install/Updates”窗口中选择“Search for new features to install”选项,单击“Next”按钮。

  (3) 在弹出的“Install”对话框中单击“New Remote Site”按钮;分别在“Name”文本框中输入一个名字标识,在URL文本框中填写“http://www.isr.uci.edu/projects/archstudioupdate”,确认这些信息后单击“Finish”按钮。

  (4) 在弹出的“Updates”窗口中,选择需要安装的属性,这里把所有的属性都选中。然后在许可确认对话框中,单击“同意”按钮继续后面的安装。

  等待Eclipse下载ArchStudio 4和相关工具,下载完成后在弹出的确认下载对话框中确认信息完成安装。重新启动Eclipse后,在Eclipse的菜单栏上单击“Windows”按钮,选择

“Open perspective”→“other”→“ArchStudio”命令,确认后就可以开始使用ArchStudio 4了。ArchStudio 4的界面如图10-8所示。

图10-8  ArchStudio 4界面

10.3.3  ArchStudio 4概述

  根据分工不同,把ArchStudio 4分为两部分:项目、文件夹、文件等资源管理器和完成绝大部分操作的工作台。

  1.资源管理器

  工作台的资源有3种基本类型:项目、文件夹和文件。文件与文件系统中的文件类似。文件夹与文件系统中的目录类似,文件夹包含在项目或其他文件夹中,文件夹也可包含文件和其他文件夹;项目包含文件夹和文件。与文件夹相似,项目映射为文件系统中的目录。创建项目时,系统会为项目在文件系统中指定一个存放位置。安装了Eclipse之后,在安装目录下会创建一个workspace文件夹,每当Eclipse新生成一个项目时,默认情况下会在workspace中产生和项目同名的文件夹,该文件夹将存放该项目所用到的全部文件。可以使用Windows资源管理器直接访问或维护这些文件。

  2.ArchStudio 4的工作台

  ArchStudio 4的工作台通过创建、管理和导航资源来支持无缝的工具集成,它可以被划分为3个模块:视图、编辑器、菜单和工具条。

  1) 视图

  打开ArchStudio 4的工作窗口发现有4个主要窗格,它们拥有特定的属性,代表了不同的视图。主要的视图有:导航器视图、大纲视图和ArchStudio 4视图。

  (1) 导航器视图如图10-9所示。导航器视图是系统资源的导航,以层次结构形象地显示了工程、文件夹、文件以及它们之间的关系。用户可以选择某个文档对其进行查看、编辑或管理等操作,同时也可以选择多个对象进行集合操作。

  (2) 大纲视图如图10-10所示。大纲视图以树状结构显示了在导航器视图中被选择的系统的内容。该视图按体系结构实例、类型、架构、测试等内容对系统信息进行分类和管理。

图10-9  导航器视图 

 图10-10  大纲视图 

  (3)  rchStudio 4视图如图10-11所示。深色背景的窗格显示的是ArchStudio 4视图。标签栏和显示区域将窗格分为两部分。标签栏将6种ArchStudio 4视图有效地集合在一起:ArchStudio 4 Laucher、File Tracker View、Archlight Issues、Archlight Notices、Tasks和File Manager View。显示区域将活动视图的具体内容和信息展示出来。

图10-11  ArchStudio 4视图

  (4)  rchStudio 4 Launcher。此视图的主要任务是提供打开文档并激活相应的工具。它不执行任何编辑、运行或者检查工作,只是帮助文件导航到需要的操作环境中。任何对文档的操作都委托给编辑器。在窗口的右上角有3个快捷按钮,给用户操作提供了便利。第一个按钮上面有文档图标,用于创建一个新的体系结构描述文档;第二个按钮是链接ISR网站的快捷方式;第三个按钮是访问ArchStudio 4网站的快捷方式。左边ArchStudio 4图标下面排列了一组编辑器:ArchEdit、Archipelago、Archlight、Selector和Type Wrangler。有两种方式选用编辑器处理文档:用户可以将被处理的文档从导航器视图拖到相应的编辑器上,也可以先单击编辑器再选择要处理的文档。

  (5)  rchlight Issuses。ArchStudio 4使用Schematron作为体系结构分析测试工具,测试的结果和相关信息将在Archlight Issuses视图中显示。如图10-12所示,该视图的第一列是错误图标。第二列简要叙述了检测出的语法错误、语义错误、不一致等错误信息。若用户希望更详细地了解和追踪错误可以右击提示信息,在弹出的信息窗口中有更详细的描述。ArchStudio 4提供了4种处理错误的方式:selector dialog box、type wrangler dialog box、ArchEdit view和Archipelago view。第三列显示了检查工具的名称。Schematron支持定义XML格式的xADL文档的约束管理,运行时它将按其列筛选出错误。

图10-12  Archlight Issuses

  (6)  rchlight Notices。该视图(如图10-13所示)记录了Schematron启动后的活动情况。每次启动系统时,Schematron都会初始化,每执行一次校验也会有相应的信息被记录。

  (7)  asks。任务视图(如图10-14所示)标记了系统生成的错误、警告和问题,当ArchStudio 4发生错误时会自动添加到任务视图中。通过任务视图,可以查看与特定文件及特定文件中的相关联的任务。用户可以新增任务并设置它们的优先级。视图将要执行的任务、所用的资源、路径和位置等信息简要地描述出来,它是管理系统任务简捷的方式。

图10-13  Archlight Notices

图10-14  Tasks

  2) 编辑器

  (1) ArchEdit。ArchEdit是语法驱动的编辑器,将体系结构用树状结构非代码的方式描述出来。系统遵循xADL模式并提供了建模框架。这些现成的建模元素被封装在模块中,对开发人员隐藏了具体的实现细节。虽然有固定的框架,但同时它也能灵活地支持新元素。ArchEdit不关心元素的语义,只是按照XML模式建立行为和接口。因此当新模式加入或原有模式改变时它不须改变,即自动支持新模式。

  (2)  rchipelago。Archipelago是语义驱动的编辑器,像Rational Rose一样可以用方框和箭头将信息描绘出来。与之不同的是,Archipelago中的每一个图形元素都赋予了丰富的含义,元素和元素间的关系必须满足一些规范和约束,所有元素有机地组合形成一个整体。

  Archipelago编辑器提供了即点即到的操作方式,双击大纲视图中树状结构的节点,在右边的编辑器中就会以图形方式显示该元素。右击编辑器的空白处可以创建新的图形元素,也可以对选中的元素进行属性编辑和修改。 

  窗格中的图形可以通过滚动条进行缩放。Archipelago还可以与ArchEdit或其他编辑器结合使用。例如,用Archipelago描绘的体系结构可以用ArchEdit对其求精;ArchEdit可以对某些Archipelago不能直接支持的模式元素进行操作;在ArchEdit中创建的元素都会在Archipelago编辑器中用图形形象地表示出来,其中的每个细微的修改都能马上在ArchEdit中反映出来。

  (3)  rchlight。Archlight是ArchStudio 4的分析工具框架,提供了一个统一的用户界面,使用户可以选择测试体系结构的各种属性。所有的测试将以树状结构在大纲视图中显示出来,树的每个节点都代表了一个测试。由于体系结构和体系结构风格的多样性以及开发阶段的不同,有时并不需要对整个系统的所有细节进行检测。Archlight提供了一种可供选择的局部测试机制,用户可以根据具体需要定制测试方案并限制范围。为支持这种机制的运行,系统提供了3种测试状态,用户只需选择不同的状态就可以方便地更改测试方案,如图10-15所示。

图10-15  Archlight

  ●  应用/可使用的测试:这种测试是可使用的,当测试应用到文档中时,用户希望文档通过测试。当所有的测试运行时,这种测试将对文档进行检测。

  ●  应用/不可使用的测试:这种测试是不可使用的,当测试应用到文档中时,用户也希望文档通过测试。但与第一种不同的是,只有该文档没有其他测试运行时,这种测试才会运行,而检测出来的问题直到测试被重新使能后才会报告。

  ●  不可应用的测试:这种测试不允许被应用到文档中。意味着用户不希望文档通过此测试,就算当别的测试都运行,这种测试也不会起作用。

  测试是否有效取决于测试的工具和测试的状态,文档属于哪一种测试状态直接决定了测试的效果。每种测试工具都希望执行一个或多个测试,每个文档都存储了一系列应用和不可使用的测试。系统为每个测试分配了一个唯一的字符串标识符,用UID表示。由测试开发人员创建和管理的标识符对Archlight用户是不可见的。测试由标识符唯一标记,即使测试的名称、目的或者位置在树状结构中发生变化,标识符也不会改变。每个文档都存储了每次测试的标识符和测试的状态,如果出现了无效的测试、没有工具支持的测试或者标识符无法识别的测试,那么这些测试将被列入到未知测试中,并且不被执行。但是未知测试仍然与文档保持关联,除非把它们的测试状态改为不可应用的状态。

  (4)  elector。选择器的全称是软件产品线选择器,首先介绍一下软件产品线的概念。软件产品线是一族相关的软件产品,它们的体系结构中有很多的部分是共享的,但各自又有特定的变异点。一个产品线中的各个产品可能是为不同地区定制化的,或者是因市场原因实现不同的特征集。而利用Sclector可以在需要时把某个产品线体系结构简化成另一个小型产品线,或者从整个体系结构中抽取出一部分形成某具体产品的体系结构。

  选择器提供了3种选择方式:Select、Prune和Version Prune,如图10-16所示。用户根据实际需求选择其中一种或多种方式执行。

图10-16  Product-Line Selector

  ArchStudio支持对体系结构版本的记录和选择。体系结构模型的各个版本都可以在ArchStudio中打开并编辑,也可以通过提供WebDAV统一资源定位器给ArchStudio来实例化。体系结构模型在ArchStudio中由xADL2.0文件描述和记录。它的最新版本将被记录在树干目录中,旧版本被标记后存放到树枝目录中。同一时刻,工作台只允许一个体系结构的目录组织显示出来,而实际上,Subversion的存储库可以为不同的系统保存多个体系结构。

  (5)  ype Wrangler。Type Wrangler如图10-17所示。Type Wrangler为考察体系结构类型提供了帮助和支持,方便用户分析体系结构中的所有类型。可利用它添加或移除接口和签名,并判断构件和连接件是否符合类型一致性要求。

图10-17  Type Wrangler

  3) 菜单栏和工具栏

  除了视图和编辑器外,菜单栏、工具栏和其他快捷工具也给用户提供了操作便利。类似视图和编辑器,工作台的菜单栏和工具栏也会根据当前窗口的属性和任务发生变化。

  

  菜单栏包含了集成开发环境中几乎所有的命令,它为用户提供了文档操作、安装脚本程序的编译、调试、窗口操作等一系列的功能。菜单栏位于工作台的顶部、标题的下面。用户可以单击菜单或子菜单完成大部分操作。在菜单下是工具栏,由于工具栏比菜单操作更为便捷,故常常将一些常用菜单命令也同时安排在工具栏上。除了工作台的菜单栏和工具栏,某些视图和编辑器也有它们专用的菜单。菜单栏和工具栏为用户提供了一个方便且迅速的操作方法。

10.3.4  ArchStudio 4的使用

  本小节将介绍在开发过程中怎样有效地使用ArchStudio 4。通过对一个简单的电视机启动应用程序(体系结构如图10-18所示)的分析和建模来讲解整个过程。首先必须明确系统的用户需求,然后分析系统体系结构,接着绘出系统构件和拓扑结构为系统建立模型,最后对模型进行校验。如果用户需要还可以对某些功能和属性进行扩展。

图10-18  电视机驱动应用系统的体系结构

  电视机驱动系统的基本需求如下:

  ●  系统有两个调谐器程序:TV调谐器和画中画调谐器,它们都有通信接口,经此传输所有信息和数据。

  ●  系统有一个驱动红外接收探测器的驱动子系统,来拾取遥控器发出的信号。

  ●  上面3个子系统之间的交互需要一个中间媒介,通过它可以使红外接收探测器同时给两个调谐器发送信号。

  清楚了实际需求之后,开始分析系统的体系结构。选择适当的体系结构风格成为最重要的任务之一。由于该系统只涉及简单信息的发送和接收,用C2风格比较合适。C2风格对系统元素的组建方式和行为有明确的限制和约束。 此系统包括TV调谐器、画中画调谐器、红外接收器3个构件实例和一个TV连接器实例。按照C2风格的系统组织规则,每个构件和连接件都有一个限制交互方式的顶端和底端。构件的顶端应连接到某连接器的底端,构件的底端则应连接到某连接器的顶端,而构件与构件之间不允许直接连接;一个连接器可以和任意数目的构件和连接件连接。

   选择了体系结构风格后就可以利用ArchStudio 4为系统建模了。首先要创建一个新的ArchStudio工程,然后按照向导添加一个体系结构描述文档。下面是该过程的详细步骤:

  (1) 单击“File”→“New”命令,或者右击导航器视图,在弹出的快捷菜单中选择“Project”命令。

  (2) 在“New Project”对话框中选择“a general project”选项并为它命名,然后单击“Finish”按钮。

  (3) 单击“File”→“New”→“Other”命令,或者右击导航器视图,在弹出的快捷菜单中选择“ArchStudio Architecture Description”命令。

  (4) 在“New Architecture Description”对话框中选择相应的工程并给新文档命名,最后单击“Finish”按钮。

  现在可以开始为系统体系结构建模了。用ArchEdit打开创建的新文件,发现大纲视图中有一个名为“XArch”的空文件夹。右击该文件夹可以看见系统提供了一些符合XML模式的建模符号。 用户可以根据需要利用这些符号来描绘系统。设计ArchTypes时要考虑构件、连接件和接口三种类型。每种体系结构类型都有一个唯一的标识符、文字描述和一组签名。签名是定义的接口,两个相同类型的构件或连接件应该有相同的接口;构件和连接件的接口应该用相同的接口类型作为签名。

  此电视机系统中,三个构件实例分为两种类型:调谐器类型和红外接收器类型;将TV连接器定义为连接件类型;由于每个构件和连接件都有顶端和底端,所以必须将接口类型的顶端与底端区分开。设计ArchStructures时需要从多个角度来考察。Structure & TYPES和Instance各有自己的XML模式,它们支持如下特性:

  ●  构件:每个构件都有唯一的标识符和简单的文字叙述,构件有自己的构件类型和接口,不同的构件可以共享同一种类型。

  ●  连接件:每个连接件也有唯一的标识符、文字描述、接口和自己的类型。

  ●  接口:在这两种模式中,接口有唯一的标识符、文字描述和特定的方向。

  ●  连接:在体系结构符号中,连接表示接口之间的关联,每个连接都有两个端点用于绑定接口。

  ●  子体系结构:构件和连接件都可以集成为一个复杂的整体,构件和连接件构建了内部联系并封装功能后成为一个功能独立的单元体。

  ●  通用集合:一组相似的体系结构描述元素的集合。在这两种模式中,一个集合没有任何语义,可以用扩展的模式来描述特定含义的集合。

  用TV调谐器构件来说明如何设计ArchStructures。构件建模需要考虑标识符、描述、接口、类型等属性。TV调谐器属于调谐器类型;它的接口是底端接口;接口的签名必须与它的构件类型的签名一致。类型实例化是个极容易被忽视的步骤,只需将元素所属的类型绑定到具体的类型上即可。由于定义了构件和连接器类型,当类型的属性发生变化时,该类型的所有实例都会自动更新。 其余的体系结构元素都可以按照TV调谐器构件的设计方式操作。利用ArchStudio 4使复杂的设计变得简单,用户只需将设计思想利用ArchStudio 4提供的框架实现即可。 

  具体的实现可以依据下面的步骤完成:

  (1) 用ArchEdit打开文档,在大纲视图中,给根节点XArch添加第一层子节点,至少必须添加ArchTypes和ArchStructures两类属性。

  (2) 按照前面的分析,分别对ArchStructure和ArchTypes进行设计。在ArchStructure中设计TV调谐器、画中画调谐器、红外接收器、TV连接器、TV调谐器与TV连接器的连接、画中画调谐器与TV连接器的连接、红外接收器与TV连接器的连接。在ArchTypes进行类型设计,系统包括两种构件类型——调谐器与红外接收器类型,一种连接件类型——TV连接器类型和一种接口类型——信道类型。

  (3) 为上面的元素添加必要的属性并设置元素之间的连接。连接只能关联方向兼容的接口,如输入和输出,不能是输入和输入或输出和输出。一旦用户确定了系统的拓扑结构,一个名为RendingHints3的文件夹就会自动生成,里面包含了所有有关联的元素的信息。

  最后一个不可忽视的步骤是校验模型。该体系结构模型是否满足完整性、类型的一致性、接口的连接是否正确、两个元素是否有相同的标识等问题都需要校验。ArchStudio 4提供了一个有效的校验工具Archlight。用Archlight打开文档,选择校验类型,完成任务后系统会给用户提供报告。用户根据报告中的信息可以快速定位和改正错误。此外,它还支持体系结构实时修改和动态载入。假设在电视机驱动系统中,Archlight检测出来的错误如图10-19所示,应该如何修改呢?

图10-19  Archlight校验图

  首先,用户需要获取一份更详尽的错误报告,右击系统提示的错误信息,弹出的信息提示窗口对错误有更详细的描述。该错误在信息提示窗口中提示为:the interface type of Interface TV Tuner Component on Component TV ArchStructure must be the same as the interface type of its signature。由于此问题牵涉到构件和接口,可以选择接口或者构件为切入点进一步追溯问题。这两条解决途径都提供了4种方式:selector dialog box、type wrangler dialog box、ArchEdit view和Archipelago view,用户可以选择最佳方式。例如,如果选择Type Wrangler,系统将用红叉标记出错的地方(如图10-20所示)。

图10-20  Type Wrangler校验图

  如果选择ArchEdit,用户将会被系统智能地导航到出错的元素;如果采用Archipelago,系统将动态地将有错误的元素显示出来并用红色标记(如图10-21所示)。这样,用户可以直观便捷地定位错误。

图10-21  Archipelago校验图

  一旦用户运行了校验程序,系统就会自动添加一个ArchAnalysis文件夹,其中的文档详细记录了所有校验信息和细节。模型通过校验后,用户就可以通过视图和编辑器研究它了。例如,利用Archipelago将系统以图形的形式显示出来;利用Type Wrangler对所有类型进行分析;利用Selector选择体系结构的任何子集,甚至是最简单的构件和连接件。如果用户需要,还可以对该系统进行功能扩展。

  10.4  Acme工具和AcmeStudio环境

  Acme工具是由卡耐基梅隆大学计算机科学学院(School of Computer Science,Carnegie Mellon University)的ABLE

(Architecture Based Languages and Environments)项目组开发的。该项目的主要内容包括开发描述和利用体系结构风格的方法,为软件体系结构实践提供工具,为软件体系结构和体系结构风格的定义与分析创建形式化的基础。本书第4章介绍过的体系结构描述语言ACME和Wright都是由该项目组创建的。

  我们已经在前面介绍过ACME体系结构描述语言。下面,我们将介绍Acme工具的特点和使用。可以通过ABLE项目的网站(http://www.cs.cmu.edu/~acme/)免费下载这些工具。

10.4.1  Acme工具开发人员库(Acme Tool Developer’s Library)

  Acme工具开发人员库(简称为AcmeLib)是一个可重用的类库,用于表示和操作Acme的设计。AcmeLib包括Java AcmeLib和C++ AcmeLib两种具体实现。

  1.AcmeLib概述

  首先介绍AcmeLib提供的基本功能以及它所面向的应用。

AcmeLib可以读、写、操作用Acme体系结构描述语言定义的软件体系结构设计。AcmeLib框架是为支持两类应用程序的快速开发而设计的。

  (1) 在ADL之间进行转换的工具(比如Rapide、Wright、UniCon和Aesop)。

  Acme体系结构描述语言的最初目的是把用一种ADL(如Aesop)描述的体系结构转换成用另一种不同的ADL(如UniCon)描述的体系结构。AcmeLib框架可被用作开发这类在Acme和其他静态体系结构描述语言之间进行转换的工具的基础。

  (2) 以Acme为基础的体系结构设计和分析工具。

  除了开发转换工具,使用Acme框架还可以快速创建具有体系结构分析、操作和可视化等功能的应用程序。这些工具直接以Acme体系结构描述语言为目标,并能针对特定的应用或特定的体系结构风格进行定制。

  AcmeLib工具包中提供一套可重用的构件,它能够帮助软件体系结构工具开发人员降低开发难度,在付出尽可能少的代价的情况下开发定制基于Acme的工具。AcmeLib工具包具有如下基本功能和特点:

  ●  为Acme体系结构描述提供了一个通用的、可扩展的、面向对象的二进制表示框架。这一框架包括一个编程接口工具,可以通过它来完成对Acme设计的操作。

  ●  提供了一个Acme语法分析器。该分析器把文本化的Acme描述转换成AcmeLib的二进制对象表示。可以方便地扩展该分析器,使它能够支持对目标ADL定义的语义丰富的Acme属性类型的分析。

  ●  提供了一个反语法分析器(导出器),用于把AcmeLib的二进制对象表示转换成文本化的Acme描述。

  ●  提供了一个转换辅助程序。

  2.开发定制的基于Acme的应用

  典型的基于AcmeLib的应用程序是这样的:对一个基于AcmeLib的应用程序来说,所设想的标准操作模式是调用语法分析器处理文本形式的Acme描述,对分析器返回的体系结构设计的二进制对象表示进行一系列的操作。操作结果的输出有两种方式,即向调用工具返回结果,或使用AcmeLib的反语法分析器输出修改后的文本形式的Acme描述。

  工具开发人员创建自己定制的基于AcmeLib的应用时可以选择使用两种方法:使用AcmeLib提供的通用API,或使用自定义的接口类集合。

  如果只是使用AcmeLib的通用API,开发人员在创建新的体系结构工具(或与现有工具相链接)时需要按照以下步骤进行:

  (1) 决定该工具将要操作的特定应用程序的Acme类型集合,为这些类型编写Acme规格说明。

  (2) 使用通用的AcmeLib API构造对Acme表述进行操作的体系结构设计工具。

  (3) 把任何所需的用户语法分析器链接起来,用来解析属性或外部体系结构描述语言。

  (4) 把开发人员的新工具和AcmeLib相链接。

  如果要使用自定义的接口类集合创建基于AcmeLib的应用程序,需要完成以下步骤:

  (1) 决定所要开发的工具要操作的特定应用程序的类型集合,为这些类型编写Acme规格说明。

  (2) 通过子类化AcmeLib的体系结构元素类型(构件、连接件等)为特定应用程序的Acme类型创建接口,这些接口类将为直接在特定应用程序Acme类型提供的属性和结构上进行操作提供方法。

  

  (3) 使用这些接口类和其余的AcmeLib提供的通用API创建所要的体系结构设计工具。

  (4) 把任何所需的用户语法分析器链接起来,用来解析属性或外部体系结构描述语言。

  (5) 把开发人员的新工具和AcmeLib相链接。

  3.Acme设计结构

  这里我们概要介绍用于描述体系结构设计的Acme类,这些类为基于Acme模型操作体系结构设计定义了通用的API,并对表示体系结构设计的结构进行了总结,概述了重要的设计对象类及其关联。

  一个Acme设计的对象模型和用文本化的Acme语言描述的设计结构很相近。一个AcmeDesign包括一个全局体系结构元素类型集合、存储在全局类型空间AcmeTypeSpace中的属性类型定义(AcmeElementType和AcmePropertyType类的实例)。它还包括一个AcmeFamily类的实例的集合,其中的每一个与一个Family定义相关。Family定义是一组类型定义,是最终的模板定义。最后,一个AcmeDesign还包括一组AcmeSystem对象,它们描述了最高层的设计拓扑结构。

  一个AcmeDesign还含有一个AcmeTypeManager。 类型管理器实例以元素类型和属性类型为基础,提供一个用来进行查找、实例化和检查元素实例及属性的类型的接口。一个AcmeTypeManager对象并不是设计的一部分,而是为对体系结构设计进行操作提供了一个接口。

  一个AcmeSystem包括一个由构件、连接件、端口和角色实例(即AcmeComponents、AcmeConnectors、AcmePorts、AcmeRoles)构成的集合,它们分别与Acme体系结构描述语言中的构件、连接件、端口和角色相对应。AcmeComponent包含AcmePort,而AcmeConnector包含AcmeRole。一个AcmeSystem还包括一组连接(AcmeAttachment),用于表示端口和角色之间的接口关系。

  每个AcmeSystem实例可以包括一个到AcmeFamily对象集合的参照表,这些对象是在系统中定义的全局对象。AcmeFamily对象定义了一个类型集合,以及所有系统都需要的缺省结构。

10.4.2  AcmeStudio环境

  AcmeStudio是一个图形化用户界面的软件体系结构开发环境。它既提供了Linux平台下的版本,也提供了Windows平台下的版本。

  尽管使用AcmeStudio开发环境和编辑器相当简单,但在设计具体应用时,使用者应当熟悉软件体系结构的建模方法,并熟悉Acme体系结构描述语言。

  AcmeStudio以Acme通用体系结构描述语言为基础。它可以打开任何用Acme描述的体系结构设计。通常,这些Acme描述被存储在扩展名为 .acme的文件中。

  可以从http://www.cs.cmu.edu/~acme网站得到AcmeStudio和其他Acme工具的最新版本,还能得到关于Acme和AcmeStudio的详细信息。但同时需要指出的是,AcmeStudio是一个研究用的原型系统而非商用产品,因此网站所提供的资源很有限。

  1.用户界面概述

  下面我们简单介绍AcmeStudio用户界面的组织。AcmeStudio的图形用户界面采用的是Windows风格的多文档界面(MDI)模型,如图10-22所示。

图10-22  AcmeStudio环境

  1) 设计浏览器窗口

  使用AcmeStudio的第一步是打开一个现存的设计或创建一个新的设计。在AcmeStudio中打开的每个设计都会显示在单独的浏览器窗口中。浏览器窗口由多个不同的编辑视图组成,它们中的每个都显示在单独的、可调整大小的面板上。这些视图是同步的,即在一个视图上所做的更改会马上在其他相关视图中显示出来。

  2)  esign Navigator

  Design Navigator窗口用树形结构显示了整个设计的层次体系。它包括体系结构描述中定义的所有类型和族,以及设计及其子结构中表示的所有系统。这个窗口的内容直接与文本形式的Acme描述的结构相关。

  通过选择此窗口中的树的不同条目,使用者可以访问设计中的不同元素。一旦选择了某个或某些元素,它们就会在Diagram View窗口或Element Workshop窗口显示出来。 

  界面的操作有点类似于Windows操作系统中常用的文件浏览器:选择一个“构件”对象,Diagram View窗口将显示这一构件以及包含这一构件的系统。然后,可以通过Diagram View窗口和Element Workshop窗口进行查看和编辑。

  某些编辑操作还可以通过在树中选择元素并操作右键弹出菜单来完成。对于当前选中的元素,操作主菜单中的相关菜单项也能实现同样的功能。

  可以对Design Navigator窗口中显示的元素进行选择:单击“Look in”按钮,或者在应用程序菜单中选择“View”→“Browser Options…”菜单项,所弹出的对话框窗口中提供了许多对树形显示结构的过滤选项。

  在树形显示上面,有一个组合框,它反映了当前所浏览的环境(当前显示元素的父元素和祖父元素)。这一组合框类似于Windows操作系统中的典型文件对话框中的下拉组合框。操作者通过选择父元素就可以向上层浏览。

  在树形显示和组合框的上面,是一个缩略图,它描述了当前Diagram View所显示元素的父系统。如果当前Diagram View窗口显示的是元素类型,缩略图描述的是该类型。实际上,这一视图显示的就是上下文环境,可以通过双击缩略图转入上层系统。

  3)  iagram View

  Diagram View显示一个简单的图形编辑器,可以用通常的方式对构件、连接件、端口和角色进行选中、调整大小、移动等操作。但是,不同于大多数图形工具,Diagram View在显示系统图形时,使用的显示规范是在当前选择的图形风格(Diagram Style)中定义的,通过在图形风格列表中进行选择就可以用新的风格查看系统。每个元素的显示方式是以该元素的类型和属性为基础的。通过视觉外观我们就可以知道所选择元素的一些信息。

  使用菜单项“View”→“Diagram”→“Diagram Styles…”可以创建新的图形风格,或编辑现有的风格。

  Element Workshop能够显示更多的当前选中对象的详细信息。我们将在下面介绍。

  4)  ype Platte

  Type Platte显示体系结构元素类型的集合。这些类型构成的词汇表能用于编辑在Diagram View窗口中所选择的系统的设计。它不仅包括系统具有的各种族的类型,而且包括所有的全局类型的定义。在编辑一个系统时,Platte窗口显示4个列表:构件类型列表、连接件类型列表、端口类型列表和角色类型列表。在编辑一个构件类型时,Platte只显示端口类型。类似地,在编辑一个连接件类型时,只显示角色类型。

  通过选择一个类型并把它拖入Diagram View窗口,可以向系统中加入新的构件和连接件。同时,要向构件或连接件中拖入端口类型或角色类型来添加新的端口或角色。要注意的是,通过选择适当的菜单项,也可以向系统添加新的结构。

  5)  lement Workshop

  Element Workshop显示当前选中对象的细节信息, 包括对象的子结构以及元素的各种属性和表述。对于系统,子结构包括系统中的构件和连接件;对于构件,列出与此构件相关联的端口;对于连接件,列出与此连接件相关联的角色。

双击一个元素或表述将导航到该条目上,并在Diagram View窗口中显示它。双击一个属性将显示属性编辑器,使用者可以用它来编辑属性值。

  2.执行基本任务

  下面我们介绍怎样在AcmeStudio中执行一些基本任务。与大多数应用程序类似,往往可以使用多种操作完成同一个任务。例如,可以使用右键弹出菜单执行一个命令,也可以通过应用程序的主菜单完成相应的任务,或通过拖拽操作完成该任务。

  1) 与设计有关的任务

  类似于大多数Windows应用程序,可以通过“File”菜单完成打开和保存操作。

  如果要创建新的设计,则按以下步骤进行:

  (1) 从菜单中选取“File”→“New Design…”。

  (2) 选择族,新的设计中的顶层系统将在所选的族中创建。在对话框中将显示AcmeStudio\Families目录下所有的族。通过把新的包含族描述的*.acme文件拷贝到该目录中,就可以向库中加入新的族。

  如果要打开现存的设计,则选择“File”→“Open Design…”,然后选择打开一个Acme描述文件。这样就可以对设计进行编辑了,比如向系统中加入新的构件或连接件,修改这些元素的结构。

  如果要添加新的构件或连接件,则按以下步骤进行:

  (1) 通过单击构件/连接件类型并把它拖拽到图形中,在Type Palette中选择类型。

  (2) 在设计上释放鼠标。这样,就在该系统中创建了一个该类型的构件或连接件的新的实例。缺省情况下,系统会根据类型名自动为该实例分配一个名称。

  或者,也可以按以下步骤进行:

  (1) 从应用程序菜单中选择“Insert”→“New Component…”或者“Insert”→“New Connector…”,然后,系统会提示对新元素的其他信息进行选择。

  (2) 为新元素提供一个名称,并为其选择一个类型。

  通过类似的操作,还可以为构件添加新的端口,或为连接件添加新的角色。

  如果要编辑一个元素的属性,则按以下步骤进行:

  (1) 在图形中选择一个元素。

  (2) 双击Element Workshop窗口中想要编辑的属性。

  如果要创建一个新的属性,则按以下步骤进行:

  (1) 在图形中选择一个元素。

  (2) 单击鼠标右键并从弹出菜单中选择“New Property…”菜单项,或者从主菜单中选择“Elements”→“New Property…”。

还可以添加或编辑与元素相关的Acme表述。Acme表述可被用于描述元素的详细分解信息,或描述系统及元素的其他视图。

  2) 与表述有关的任务

  在Acme中,系统、构件、连接件、端口或角色都可以有一个表述(Acme Representation)。在当前版本中,可以查看并编辑系统、构件和连接件的表述,也可以打开包含端口表述和角色表述的系统设计,但不能通过编辑环境访问它们。

  如果要为构件或连接件添加一个新的表述,则按以下步骤进行:

  (1) 在系统视图中选择一个构件或连接件。

  (2) 在主菜单中选择“Insert”→“New Representation…”。

  或者,也可以使用右键菜单中的“New Representation”完成同样的操作。

  如果要导航到一个现有的表述并在系统视图中把它显示出来,则按以下步骤进行:

  (1) 在系统视图中选择一个构件或连接件。

  (2) 从主菜单中选择“View”→“Open Representation”,或从元素的右键弹出菜单中选择“Open Representation”。

  3) 使用剪贴板进行复制、剪切和粘贴操作

  可以对系统结构(即一些构件和连接件及其关联构成的集合)进行各种剪贴板操作。在当前版本中,能够在Diagram View窗口中对构件和连接件的图形表示(以及它们所包含的端口和角色)进行剪切和粘贴操作。预计在将来的版本中会提供更为丰富的功能。

  如果要剪切/复制构件或连接件的集合,则按以下步骤进行:

  (1) 在图中选择想要剪切或复制的构件和连接件组成的子图。

  (2) 选择“Edit”→“Copy”或“Edit”→“Cut”菜单项。

  如果要粘贴元素集合,则按以下步骤进行:

  (1) 导航到要把子图粘贴到的那个系统。

  (2) 选择“Edit”→“Paste”菜单项。

  这非常简单,与一般的编辑器中的操作基本是相同的。但需要注意,也可以用文本的形式把元素粘贴到设计中去。这里要使用“Edit”→“Paste Acme Text”菜单项。这些文本应当包括对构件、连接件或系统的Acme描述。例如,可以在其他文本编辑器中输入如下文本:

  System s={

  Component c;

      Component d;

          };

  然后,把这些文本复制下来,返回到AcmeStudio中。这时,选择“Edit”→“Paste Acme Text”,就会在当前系统中加入两个名称分别为“c”和“d”的构件。

  4) 与族和类型有关的任务

  通过在主菜单中选择“Type”→“Families…”或通过Design Browse窗口访问族和类型的目录,可以执行与族和类型有关的操作。

  在Acme中,一个体系结构设计描述包括一组族,可在设计中使用它们。在设计中为了定义一个属于某个特定族的系统,必须先要把这个族添加到设计中。可以采用两种操作方式:从头开始创建一个新的族,或者导入一个现有的族。

  如果要向设计中加入新的族,则按以下步骤进行:

  (1) 在“Type”菜单中选择“Families…”。这将打开一个对话框,其中列出了与当前设计有关的所有的族,而不是只有当前被编辑的系统所指定的族。

  (2) 单击“New…”按钮,打开另一个对话框,在这里为新建的族命名。

如果要向设计中导入一个族,则单击“Import…”按钮,然后选择一个Acme描述文件。

  如果要指定一个系统的族,则可以从“Families”对话框中选择当前系统的族。这样做就把当前系统和这个族关联了起来。另一种办法是,在Design Browser窗口中或在Diagram View窗口中使用右键菜单,选择“Assign Families…”菜单项。

  如果要为族添加一个新的类型,则在AcmeStudio中可以这样创建一个新的元素类型:首先在设计中创建一个构件、连接件、端口或角色,然后使用“Type…”→“Create type from prototype…”把它转换成一个类型。使用“Create type in current family”选项,可以在与当前编辑的系统相关的族中创建一个新的类型;使用“Create type in global type space”选项,可以在一个设计的全局类型那个空间中创建一个新的类型。

  需要注意的是,当前的AcmeStudio版本提供的类型编辑功能还很有限。例如,如果需要创建一个新的属性类型,则必须直接编辑文本形式的Acme描述。

  如果要编辑一个类型的描述,则在Browser View窗口选中它,然后就可以通过Diagram和Workshop窗口对它进行编辑。

  5) 与图形风格(Diagram Style)有关的任务

  通过选择主菜单中的“View”→“Diagram”→“Diagram Styles…”,可以对图形风格进行编辑,并添加新的风格。一般情况下,可以为所要使用的每个族定义一种图形风格。在每种图形风格中,定义了该族中各类型的视觉效果。

  如果要为当前系统选择一种图形风格,则通过在图形风格工具条的下拉框中进行选择。另一种方法是使用主菜单的“View”→“Diagram Styles…”选项,然后单击“Assign Style to Current System”按钮。

  如果要创建新的图形风格,则在“View”→“Diagram Styles…”所打开的对话框中单击“New…”按钮即可。

  如果要为一个图形风格添加新的视觉效果,则按以下步骤进行:

  (1) 从主菜单中选择“View”→“Diagram”→“Diagram Styles…”菜单项,并使用图形风格对话框选择所要编辑的图形风格;或者选择“View”→“Diagram”→“Edit Current Diagram Style…”菜单项,编辑当前系统所使用的图形风格。

  (2) 单击“New…”按钮,选择是否创建新的构件、连接件、端口或角色的视觉效果。

      10.5  本 章 小 结

  本章详细介绍了软件体系结构开发过程的辅助工具——体系结构集成开发环境,它在系统设计思想和系统实现之间搭起了一座桥梁。在体系结构集成开发环境出现以前,开发人员只能利用非形式化或形式化方法描述软件的体系结构,缺乏有效的体系结构分析、设计、仿真、验证等支持工具。同时,这些方式表达的结果也不够形象和灵活。体系结构集成开发环境的出现解决了这一系列问题。它提高了软件体系结构的生产效率,降低了开发和维护成本。

  本章首先从5个方面介绍软件体系结构集成开发环境的作用,然后介绍了体系结构集成开发环境的原型,以帮助用户深入理解开发工具的结构和工作机理。原型是三层结构的系统:最上层是用户界面层,中间层是模型层,底层是基础层。

  最后以两个较为著名的软件体系结构集成开发环境为例来介绍其具体功能。其中:

  (1)  rchStudio 4采用基于XML的体系结构描述语言xADL2.0为基础,支持C2体系结构风格。它除了具备普通体系结构建模功能外,还提供了对系统运行时刻和设计时刻元素的建模支持,以及对软件产品线体系结构的建模支持。

  (2)  cme工具以Acme体系结构描述语言为基础,提供了Acme工具开发人员库(简称为AcmeLib),用于表示和操作Acme的设计,并提供了一个图形化用户界面的软件体系结构开发环境AcmeStudio。

        习    题

  1.下载本章介绍的两种软件工具,浏览其文档,对工具所附带的例子进行简单操作。

  2.通过文献检索或互联网搜索,了解2~3个其他的体系结构支持工具。它们都提供了什么功能?具有哪些特点?

 

 10.1  软件体系结构集成开发环境的作用

  软件体系结构集成开发环境基于体系结构形式化描述从系统框架的角度关注软件开发。体系结构开发工具是体系结构研究和分析的工具,给软件系统提供了形式化和可视化的描述。它不但提供了图形用户界面、文本编辑器、图形编辑器等可视化工具,还集成了编译器、解析器、校验器、仿真器等工具;不但可以针对每个系统元素,还支持从较高的构件层次分析和设计系统,这样可以有效地支持构件重用。具体来说,软件体系结构集成开发环境的功能可以分为以下5类。

  1.辅助体系结构建模
  建立体系结构模型是体系结构集成开发环境最重要的功能之一。集成开发环境的出现增加了软件体系结构描述方法的多样性,摒弃了描述能力低的非形式化方法,摆脱了拥有繁杂语法和语义规则的形式化方法。开发者只需要经过简单的操作就可以完成以前需耗费大量时间和精力的工作。形式化时期建模是将软件系统分解为相应的组成成分,如构件、连接件等,用形式化方法严格地描述这些组成成分及它们之间的关系,然后通过推理验证结果是否符合需求,最后提供量化的分析结果。

  而集成开发环境提供了一套支持自动建模的机制完成体系结构模型分析、设计、建立、验证等过程。用户根据不同的实际需求、应用领域和体系结构风格等因素选择不同的开发工具。

  2.支持层次结构的描述
  随着软件系统规模越来越大、越来越复杂,只使用简单结构无法表达,这时就需要层次结构的支持,因此开发工具也需要提供层次机制。图10-1描述了一个简单的具有层次结构的客户端/服务器系统。

 

10-1  层次构件

  系统由客户端和服务器两个构件组成,客户端可以向服务器传输信息。服务器是一个包含了3个构件的复杂元素,内部构件之间相互关联形成了一个具有独立功能的子系统,子系统通过接口与外界交互。体系结构集成开发环境提供了子类型和子体系结构等机制来实现层次结构。用户还可以根据需要自定义类型,只需将这种类型实例化为具体的子系统即可。类似构件、连接件也可以通过定义新类型表达更复杂的信息。

  3.提供自动验证机制
  几乎所有的体系结构集成开发环境都提供了体系结构验证的功能。体系结构描述语言解析器和编译器是集成开发环境中必不可少的模块。除此之外,不同的集成开发环境根据不同的要求会支持特定的检验机制。

  Wright提供模型检测器来测试构件和连接件死锁等属性,它通过一组静态检查来判断系统结构规格说明的一致性和完整性,同时还支持针对某一特定体系结构风格的检查;C2通过约束构件和连接件的结构和组织方式来检查一致性和完整性;SADL利用体系结构求精模式概念保证使用求精模式的实例的每一步求精过程都正确,采用这种方式能够有效地减少体系结构设计的错误;ArchStudio中的Archlight不但支持系统的一致性和完整性检查,还支持软件产品线的检测。

  集成开发环境的校验方式可分为主动型和被动型两种。主动型是指在错误出现之前采取预防措施,是保证系统不出现错误状态的动态策略。它根据系统当前的状态选择恰当的设计决策保证系统正常运行。例如,在开发过程中阻止开发者选择接口不匹配的构件;集成开发环境不允许不完整的体系结构调用分析工具。被动型是指允许错误暂时存在,但最终要保证系统的正确性。被动型有两种执行方式,一种允许预先保留提示错误稍后再作修改,另一种必须强制改正错误后系统才能继续运行。例如,在MetaH的图形编辑器中,启动“应用”按钮之前必须保证系统是正确的。

  4.提供图形和文本操作环境
  体系结构集成开发环境是开发者研究体系结构的可视化工具和展示平台,它具有友好的图形用户界面和便捷的操作环境。体现在以下4个方面:
  (1) 集成开发环境提供了包含多种界面元素的图形用户界面,例如工具栏、菜单栏、导航器视图、大纲视图等。工具栏显示了常用命令和操作;视图以列表或者树状结构的形式对信息进行显示和管理。

  (2) 集成开发环境提供了图形化的编辑器,它用形象的图形符号代表含义丰富的系统元素,用户只需选择需要的图形符号,设置元素的属性和行为并建立元素之间的关联就可以描绘系统了。例如,Darwin系统提供基本图元代表体系结构的基本元素,用空心矩形表示构件,直线表示关联,圆圈表示接口;每个图元都有自己的属性页,通过编辑构件、关联和接口的属性页来设置体系结构的属性值。

  (3) 集成开发环境利用文本编辑器帮助开发者记录和更新体系结构配置和规格说明。通常,集成开发环境会根据模型描述的系统结构自动生成配置文档。当模型被修改时,它的文本描述也会发生相应的变化,这种同步机制保证了系统的一致性和完整性。
  (4) 集成开发环境还支持系统运行状态和系统检测信息的实时记录,这些信息对分析、改进和维护系统都很有价值。

  5.支持多视图
  多视图作为一种描述软件体系结构的重要途径,是近年来软件体系结构研究领域的重要方向之一。随着软件系统规模不断增大,多视图变得更为重要。每个视图都反映了系统内相关人员关注的特定方面。多视图体现了关注点分离的思想,把体系结构描述语言和多视图结合起来描述系统的体系结构,能使系统更易于理解,方便系统相关人员之间相互交流,还有利于系统的一致性检测以及系统质量属性的评估。

  图形视图和文本视图是两种常见的视图。图形视图是指用图形图像的形式将系统的某个侧面表达出来。它是一个抽象概念,不是指具体的哪一种视图。逻辑视图、物理视图、开发视图等都属于图形视图。同样,文本视图是指用文字形式记录系统信息的视图。此外,还存在很多特殊的体系结构集成开发环境特有的视图,例如Darwin系统中的分层系统视图、ArchStudio的文件管理视图、Aesop支持特定风格形象化的视图等。

     10.2  体系结构IDE原型

  现在出现了越来越多的体系结构集成开发环境来满足种类繁多的体系结构和灵活多变的需求。尽管这些集成开发环境针对不同的应用领域,适用不同体系结构,但是它们都依赖相似的核心框架和实现机制。把这些本质的东西抽象出来可以总结出一个体系结构集成开发环境原型。该原型只是一个通用的框架,并不能执行任何实际的操作,但它可以帮助开发人员深入理解开发工具的结构和工作原理。下面结合XArch(eXtensible Architecture Research System)系统来介绍原型。

  从集成开发环境的工作机制看,原型是三层结构的系统。最上层是用户界面层,它是系统和外界交互的接口。中间层是模型层,它是系统的核心部分,系统重要的功能都被封装在该层。这层通过接口向用户界面层传输数据,用户界面层要依赖这一层提供的服务才能正常运行。底层是基础层,它覆盖了系统运行所必需的基本条件和环境,是系统正常运行的基础保障。此外,模型层和用户界面层的正常运行还需要映射模块的有效支持,映射文件将指导和约束这两层的行为(如图10-2所示)

 

10-2  原型框架

10.2.1  用户界面层
  用户界面层是用户和系统交互的唯一渠道,用户需要的操作都被集成到这一层。这些操作可以通过编辑器和视图来实现。编辑器是开发环境中的可视构件,它通常用于编辑或浏览资源,允许用户打开、编辑、保存处理对象,类似其他的文件系统应用工具,如Microsoft Word,执行的操作遵循“打开保存关闭”这一生命周期模型。

  同一时刻工作台窗口允许一个编辑器类型的多个实例存在。视图也是开发环境中的可视构件,它通常用来浏览分层信息、打开编辑器或显示当前活动编辑器的属性。与编辑器不同的是,同一时刻只允许特定视图类型的一个实例在工作台存在。编辑器和视图可以是活动的或者不活动的,但任何时刻只允许一个视图或编辑器是活动的。

  XArch系统的工作台是一个独立的应用窗口,包含了一系列视图和编辑器。工作台基于富客户端平台(Rich Client Platform),它最大的特点是支持用户建立和扩展自己的客户应用程序。如果现有的编辑器不能满足需求,用户可以灵活地在接口上扩展新的功能。

  图10-3显示了XArch系统的部分编辑器和视图。左侧的资源管理器视图将系统所有的信息以树状结构显示出来;右边的属性视图显示了考察对象的属性和属性值;下面是记录系统重要状态的日志视图。占据工作台最大区域的是中间的编辑器,是主要的操作场所。为了满足相关人员不同的需求,系统支持多视图。系统用标签对多个视图进行区分和管理,用户可通过选择标签在不同视图间转换。

 

10-3  XArch系统

10.2.2  模型层
  模型层是系统的核心层,系统的大部分功能都在这一层定义和实现,它主要的任务是辅助体系结构集成开发环境建立体系结构模型。
  体系结构描述语言文档是系统的输入源。有的体系结构集成开发环境对描述语言的语法有限制或约束,这就需要修改语言的语法与其兼容。输入的体系结构文档是否合法有效,是由专门的工具来检验的。此处的编译器不同于往常的把高级程序设计语言转化为低级语言(汇编语言或机器语言)的编译器,它是一个将体系结构描述转化为体系结构模型的工具。为实现此功能,编译器一般要完成下列操作:词法分析、解析、语义分析、映射、模型构造。

  词法分析是遵循语言的词法规则,扫描源文件的字符串,识别每一个单词,并将其表示成所谓的机内token形式,即构成一个token序列;解析过程也叫语法分析,是指根据语法规则,将token序列分解成各类语法短语,确定整个输入串是否构成一个语法上正确的程序,它是一个检查源文件是否符合语法规范的过程;语义分析过程将语义信息附加给语法分析的结果,并根据规则执行语义检查;映射是根据特定的规则,如映射文档,将体系结构描述语言符号转换成对应的模型元素的过程;模型构造紧跟着映射过程,它把映射得到的构件、连接件、接口等模型元素按语义和配置说明构造成一个有机整体。

  在编译器工作的过程中会有一些隐式约束的限制,例如类型信息、构件属性、模块间的关系等。校验器是系统最主要的检查测试工具,采用显示检验机制检查语法语义、类型不一致性、系统描述二义性、死锁等错误,以保证程序正常运行;模式是一组约束文档结构和数据结构的规则,它是判断文档、数据是否有效的标准;映射模块是抽象了体系结构描述语言元素和属性的一组规则,这组规则在模型层和用户界面层担任了不同的角色。在模型层,它根据映射规则和辅助信息,将开发环境无法识别的体系结构描述语言符号映射成可以被工具识别的另一种形式的抽象元素。在用户界面层支持模型显示,它详细定义了描述语言符号如何在模型中表示,如何描绘模型元素以及它们之间的关系。

  建立体系结构模型是这层的最终目标,模型层用树或图结构抽象出系统,形象地描述了系统的各构件及它们之间的关系。通常,一个系统用一个体系结构模型表示。对于一个规模庞大、关系复杂的模型,不同的系统相关人员只需侧重了解他们关注的局部信息,而这些信息之间具有很强的内聚性,可以相对独立地存在。针对某一观察角度和分析目的,提取一系列相互关联且与其他内容相对独立的信息,就可以构成软件体系结构视图。一个模型可以构造成多种视图,通过不同的视角细致全面地研究系统。

  XArch系统只处理基于XML的可扩展的体系结构描述语言,即FEAL兼容的体系结构描述语言,如果不符合这一要求,则可以适当调整语法结构来满足FEAL的规范。软件体系结构描述不仅是XML结构良好的,还必须是符合模式规定的有效的文档。该系统不但支持对系统的分析、验证和序列化等操作,还支持视图和模型之间的相互转化。
  XArch系统不仅仅是一个体系结构开发环境,还是一个扩展工具的平台。它的扩展性主要体现在两个方面:

  (1) 可以灵活地创建和增加一种新的软件体系结构描述语言或语言的新特性,以满足新功能和新需求。如图10-4所示,系统通过引入一个中间介质FEAL,使模型脱离与体系结构描述语言的直接联系,从而拓展了体系结构描述语言符号到模型元素固定的对应关系。体系结构描述语言的元素首先根据映射规则被映射为FEAL元素(FEC)的形式,FEC再对应到相应的模型的构件。因此,只要体系结构描述语言符号到FEC的映射是有效的,那么无论哪种体系结构描述语言都可以构造对应的体系结构模型。当新的体系结构描述语言或新的语言特性出现时,只需修改映射规则就能有效地支持。
  (2)  Arch系统提供了一系列可扩展的可视化编辑接口,支持定义新界面元素。

 

10-4  ADLFEALMODEL的关系

10.2.3  基础层
  基础层是系统的基本保障,涵盖了系统运行所需的软/硬件支撑环境,它还对系统运行时所用的资源进行管理和调度。通常,普通的简单配置就可以满足系统运行需求,但是有的体系结构集成开发环境需要更多的支持环境。例如,ArchStudio 4 作为Eclipse的插件,必须在JavaEclipse环境下运行。

10.2.4  体系结构集成开发环境设计策略
  目前,集成开发环境都很注重体系结构的可视化和分析,有的也在体系结构求精、实现和动态性上具有强大的功能。体系结构开发环境原型提供了一个可供参考的概念框架,它的设计和实现需要开发人员的集体努力。下面是体系结构集成开发环境设计的3条策略。

  (1) 体系结构集成开发环境的设计必须以目标为向导。
  集成开发环境的开发遵循软件开发的生命周期,需求分析是必需且非常重要的阶段。开发者只有明确了实际需求,才能准确无误地设计。无论是软件本身还是最终用户都有很多因素需要确认。例如,集成开发环境可以执行什么操作?怎么执行?它的结构怎样?哪一种体系结构描述语言和体系结构风格最适合它?哪些用户适合使用该系统?怎样解决系统的改进和升级?这些问题给设计者提供了指导和方向。

  (2) 为了设计一个支持高度扩展的体系结构集成开发环境,必须区分通用和专用的系统模块。
  通用模块部分是所有集成开发环境都必备的基础设施,例如支撑环境、用户界面等。但是不同的体系结构集成开发环境针对不同的领域需要解决千差万别的问题,因此每种体系结构集成开发环境都有自己的特点。例如,Rapide的开发环境建立一个可执行的仿真系统并提供检查和过滤事件的功能,以此来允许体系结构执行行为的可视化;SADL的支持工具支持多层次抽象和具有可组合性的体系结构的求精。

  它要求在抽象和具体的体系结构之间建立名字映射和风格映射,两种映射通过严格的验证后,才能保证两个体系结构在求精意义上的正确性。这样可以有效地减少体系结构设计的错误,并且能够广泛、系统地实现对设计和正确性证明的重用。

  (3) 合理使用体系结构集成开发环境原型。
  原型框架为可扩展性开发工具的设计提供了良好的接口。例如XArch系统可以通过添加语言符号或定义FEAL兼容的体系结构描述语言来扩展现有的功能。这样,体系结构专用的功能就可以作为动态插件应用到集成开发环境中,增强开发工具的功能,扩大它的使用范围。

   10.3  基于软件体系结构的开发
      环境ArchStudio 4

10.3.1  ArchStudio 4的作用
  ArchStudio 4 是美国加州大学欧文分校的软件研究院开发的面向体系结构的基于xADL2.0的开源集成开发环境。它除了具备普通体系结构建模功能外,还提供了对系统运行时刻和设计时刻的元素的建模支持,类似版本、选项和变量等更高级的配置管理观念,以及对软件产品线体系结构的建模支持。

  ArchStudio 4在前一版的基础上添加了新的特性和功能,在可扩展性、系统实施和工程性上有新的发展。ArchStudio 4的作用主要体现在基本功能和扩展功能两方面。它不但实现了建模、可视化、检测和系统实施等基本功能,还良好地支持这些功能的扩展。

  (1) 建模。作为软件体系结构开发辅助工具,ArchStudio 4最主要的功能就是帮助用户用文档或者图形方式表达设计思想。模型像建筑蓝图一样从较高的角度把系统抽象成一个框架,抽象的结果将以XML的形式存储和操作。用户可以利用系统多个视角对该模型进行考察和研究。此外,ArchStudio 4还支持体系结构分层建模、软件产品线建模,而且可以时刻监视变化的体系结构。

  (2) 可视化。ArchStudio 4提供了多种可视化的构件,例如视图和编辑器。视图和编辑器用文本或图形方式形象化体系结构描述,例如ArchipelagoArchEditType Wright等工具,同时也给系统涉众提供了交互和理解的平台。
  (3) 检测。ArchStudio 4集成了功能强大的体系结构分析和测试工具Schematron。它通过运行一系列预定的或用户定义的测试来检查系统。Archlight根据标准来自动测试体系结构描述的正确性、一致性和完整性等。检查出来的错误会显示出来,同时帮助用户定位出错的地方并提供修改途径和方法。

  (4) 实施。它帮助将体系结构运用到实施的系统中。ArchStudio使用自己的体系结构设计思想和方法来实现自身。ArchStudio本身的体系结构是用xADL2.0详细描述的,这些文件都是实施的一部分。一旦ArchStudio在机器上运行,它的体系结构描述将被解析,这些信息将被实例化并连接到预定的构件和连接件上。

  除此以外,ArchStudio 4对上述的功能提供了良好的扩展机制。它基于xADL2.0,而xADL2.0是模块化的,不是一个独立的整体。它没有将所有词法和语法一起定义,而是采用根据XML模式分解模块的方式。如图10-5所示,每个模块相互分裂,侧重实现系统的某一功能,4个模块都与中间的模块交互,5个模块共同组成了一个有机的系统。例如,可将构件和连接件分解为多个相互关联的模块。

  目前,模块技术已经能处理构件和连接件等低层次的构件,还能处理软件产品线、实施映射、体系结构状态。ArchStudio 4根据模式自动生成一个数据绑定库以便为别的工具提供共享功能。这样,用户就可以扩展xADL语言的新特性并自动生成支持新特性交互的库。总之,ArchStudioxADL2.0的支持下允许开发者定义新的语义和规则去获取更多的数据信息来满足新的需求(如图10-6所示)

 

10-5  xADL2.0结构

 

10-6  ArchStudio 4的工具

  (5) 可扩展的建模。开发ArchStudio 4的目标就是要实现体系结构建模的可扩展性。它基于可扩展的体系结构描述语言xADL2.0,利用添加新的XML模式来支持模型扩展。
  (6) 可扩展的可视化。可视化编辑器利用可扩展的插件机制添加对新体系结构描述语言元素编辑的功能。
  (7) 可扩展的检测。用户可以在Schematron中设计新的测试,也可以集成新的分析引擎来满足高要求的检验。在ArchStudio 4中,所有的检测工具都作为Archlight插件使用,因此用户可以通过添加插件完成新的测试。Archlight集成了功能强大的Schematron XML分析引擎,别的测试引擎也可以无缝地集成到Archlight(如图10-7所示)

 

10-7  可扩展的检测工具

  (8) 可扩展的实施。用户可以灵活地把体系结构与Myx框架绑定起来。Myx是在ArchStudio 4建立的体系结构风格。此风格适合开发高性能的、灵活的集成开发环境。Myx-whitepaper定义了一套构件和连接件的构建规则, 提供了定义构件同步和异步交互的模式,同时还规定了哪些构件可以相互约束,确定了构件间直接的或者分层的关系。在Myx风格的约束下,构件之间的相对独立有利于构件重用,构件只能通过显示接口与外界传递消息,因此不需对构件重新编码就可以在不同配置的构件间建立联系。此外,动态代理和事件处理机制支持在运行时刻控制连接状态。

10.3.2  安装ArchStudio 4
  1.硬件配置需求
  硬件配置取决于具体的实际应用需求,例如程序规模、程序预期的运行时间等。对于ArchStudio 4来说,使用x86体系结构兼容的计算机,Pentiun Ⅲ处理器,128 MB内存以上的配置即可。
  2.软件配置需求
  ArchStudio 4是开源开发工具Eclipse的插件。 它可以在任何支持Eclipse的系统上运行。不过,必须有JRE1.5或者更高版本和Eclipse3.2.1或者更高版本的支持。

  3.安装ArchStudio 4
  安装过程只需按照安装向导进行即可,具体的步骤如下:
  (1) Eclipse”菜单栏上单击Help”按钮,在菜单列表中选择Software Updates”→“Find and Install”命令。
  (2) 在弹出的Install/Updates”窗口中选择Search for new features to install”选项,单击Next”按钮。
  (3) 在弹出的Install”对话框中单击New Remote Site”按钮;分别在Name”文本框中输入一个名字标识,在URL文本框中填写http://www.isr.uci.edu/projects/archstudioupdate”,确认这些信息后单击Finish”按钮。

  (4) 在弹出的Updates”窗口中,选择需要安装的属性,这里把所有的属性都选中。然后在许可确认对话框中,单击“同意”按钮继续后面的安装。
  等待Eclipse下载ArchStudio 4和相关工具,下载完成后在弹出的确认下载对话框中确认信息完成安装。重新启动Eclipse后,在Eclipse的菜单栏上单击Windows”按钮,选择
Open perspective”→“other”→“ArchStudio”命令,确认后就可以开始使用ArchStudio 4了。ArchStudio 4的界面如图10-8所示。

 

10-8  ArchStudio 4界面

10.3.3  ArchStudio 4概述
  根据分工不同,把ArchStudio 4分为两部分:项目、文件夹、文件等资源管理器和完成绝大部分操作的工作台。

  1.资源管理器
  工作台的资源有3种基本类型:项目、文件夹和文件。文件与文件系统中的文件类似。文件夹与文件系统中的目录类似,文件夹包含在项目或其他文件夹中,文件夹也可包含文件和其他文件夹;项目包含文件夹和文件。与文件夹相似,项目映射为文件系统中的目录。创建项目时,系统会为项目在文件系统中指定一个存放位置。安装了Eclipse之后,在安装目录下会创建一个workspace文件夹,每当Eclipse新生成一个项目时,默认情况下会在workspace中产生和项目同名的文件夹,该文件夹将存放该项目所用到的全部文件。可以使用Windows资源管理器直接访问或维护这些文件。

  2ArchStudio 4的工作台
  ArchStudio 4的工作台通过创建、管理和导航资源来支持无缝的工具集成,它可以被划分为3个模块:视图、编辑器、菜单和工具条。

  1) 视图
  打开ArchStudio 4的工作窗口发现有4个主要窗格,它们拥有特定的属性,代表了不同的视图。主要的视图有:导航器视图、大纲视图和ArchStudio 4视图。
  (1) 导航器视图如图10-9所示。导航器视图是系统资源的导航,以层次结构形象地显示了工程、文件夹、文件以及它们之间的关系。用户可以选择某个文档对其进行查看、编辑或管理等操作,同时也可以选择多个对象进行集合操作。
  (2) 大纲视图如图10-10所示。大纲视图以树状结构显示了在导航器视图中被选择的系统的内容。该视图按体系结构实例、类型、架构、测试等内容对系统信息进行分类和管理。

 

10-9  导航器视图

 

 10-10  大纲视图

  (3)  rchStudio 4视图如图10-11所示。深色背景的窗格显示的是ArchStudio 4视图。标签栏和显示区域将窗格分为两部分。标签栏将6ArchStudio 4视图有效地集合在一起:ArchStudio 4 LaucherFile Tracker ViewArchlight IssuesArchlight NoticesTasksFile Manager View。显示区域将活动视图的具体内容和信息展示出来。

 

10-11  ArchStudio 4视图

  (4)  rchStudio 4 Launcher。此视图的主要任务是提供打开文档并激活相应的工具。它不执行任何编辑、运行或者检查工作,只是帮助文件导航到需要的操作环境中。任何对文档的操作都委托给编辑器。在窗口的右上角有3个快捷按钮,给用户操作提供了便利。第一个按钮上面有文档图标,用于创建一个新的体系结构描述文档;第二个按钮是链接ISR网站的快捷方式;第三个按钮是访问ArchStudio 4网站的快捷方式。左边ArchStudio 4图标下面排列了一组编辑器:ArchEditArchipelagoArchlightSelectorType Wrangler。有两种方式选用编辑器处理文档:用户可以将被处理的文档从导航器视图拖到相应的编辑器上,也可以先单击编辑器再选择要处理的文档。

  (5)  rchlight IssusesArchStudio 4使用Schematron作为体系结构分析测试工具,测试的结果和相关信息将在Archlight Issuses视图中显示。如图10-12所示,该视图的第一列是错误图标。第二列简要叙述了检测出的语法错误、语义错误、不一致等错误信息。若用户希望更详细地了解和追踪错误可以右击提示信息,在弹出的信息窗口中有更详细的描述。ArchStudio 4提供了4种处理错误的方式:selector dialog boxtype wrangler dialog boxArchEdit viewArchipelago view。第三列显示了检查工具的名称。Schematron支持定义XML格式的xADL文档的约束管理,运行时它将按其列筛选出错误。

 

10-12  Archlight Issuses

  (6)  rchlight Notices。该视图(如图10-13所示)记录了Schematron启动后的活动情况。每次启动系统时,Schematron都会初始化,每执行一次校验也会有相应的信息被记录。
  (7)  asks。任务视图(如图10-14所示)标记了系统生成的错误、警告和问题,当ArchStudio 4发生错误时会自动添加到任务视图中。通过任务视图,可以查看与特定文件及特定文件中的相关联的任务。用户可以新增任务并设置它们的优先级。视图将要执行的任务、所用的资源、路径和位置等信息简要地描述出来,它是管理系统任务简捷的方式。

 

10-13  Archlight Notices

 

10-14  Tasks

  2) 编辑器
  (1) ArchEditArchEdit是语法驱动的编辑器,将体系结构用树状结构非代码的方式描述出来。系统遵循xADL模式并提供了建模框架。这些现成的建模元素被封装在模块中,对开发人员隐藏了具体的实现细节。虽然有固定的框架,但同时它也能灵活地支持新元素。ArchEdit不关心元素的语义,只是按照XML模式建立行为和接口。因此当新模式加入或原有模式改变时它不须改变,即自动支持新模式。

  (2)  rchipelagoArchipelago是语义驱动的编辑器,像Rational Rose一样可以用方框和箭头将信息描绘出来。与之不同的是,Archipelago中的每一个图形元素都赋予了丰富的含义,元素和元素间的关系必须满足一些规范和约束,所有元素有机地组合形成一个整体。
  Archipelago编辑器提供了即点即到的操作方式,双击大纲视图中树状结构的节点,在右边的编辑器中就会以图形方式显示该元素。右击编辑器的空白处可以创建新的图形元素,也可以对选中的元素进行属性编辑和修改。

  窗格中的图形可以通过滚动条进行缩放。Archipelago还可以与ArchEdit或其他编辑器结合使用。例如,用Archipelago描绘的体系结构可以用ArchEdit对其求精;ArchEdit可以对某些Archipelago不能直接支持的模式元素进行操作;在ArchEdit中创建的元素都会在Archipelago编辑器中用图形形象地表示出来,其中的每个细微的修改都能马上在ArchEdit中反映出来。

  (3)  rchlightArchlightArchStudio 4的分析工具框架,提供了一个统一的用户界面,使用户可以选择测试体系结构的各种属性。所有的测试将以树状结构在大纲视图中显示出来,树的每个节点都代表了一个测试。由于体系结构和体系结构风格的多样性以及开发阶段的不同,有时并不需要对整个系统的所有细节进行检测。Archlight提供了一种可供选择的局部测试机制,用户可以根据具体需要定制测试方案并限制范围。为支持这种机制的运行,系统提供了3种测试状态,用户只需选择不同的状态就可以方便地更改测试方案,如图10-15所示。

 

10-15  Archlight

  ●  应用/可使用的测试:这种测试是可使用的,当测试应用到文档中时,用户希望文档通过测试。当所有的测试运行时,这种测试将对文档进行检测。
  ●  应用/不可使用的测试:这种测试是不可使用的,当测试应用到文档中时,用户也希望文档通过测试。但与第一种不同的是,只有该文档没有其他测试运行时,这种测试才会运行,而检测出来的问题直到测试被重新使能后才会报告。
  ●  不可应用的测试:这种测试不允许被应用到文档中。意味着用户不希望文档通过此测试,就算当别的测试都运行,这种测试也不会起作用。

  测试是否有效取决于测试的工具和测试的状态,文档属于哪一种测试状态直接决定了测试的效果。每种测试工具都希望执行一个或多个测试,每个文档都存储了一系列应用和不可使用的测试。系统为每个测试分配了一个唯一的字符串标识符,用UID表示。由测试开发人员创建和管理的标识符对Archlight用户是不可见的。测试由标识符唯一标记,即使测试的名称、目的或者位置在树状结构中发生变化,标识符也不会改变。每个文档都存储了每次测试的标识符和测试的状态,如果出现了无效的测试、没有工具支持的测试或者标识符无法识别的测试,那么这些测试将被列入到未知测试中,并且不被执行。但是未知测试仍然与文档保持关联,除非把它们的测试状态改为不可应用的状态。

  (4)  elector。选择器的全称是软件产品线选择器,首先介绍一下软件产品线的概念。软件产品线是一族相关的软件产品,它们的体系结构中有很多的部分是共享的,但各自又有特定的变异点。一个产品线中的各个产品可能是为不同地区定制化的,或者是因市场原因实现不同的特征集。而利用Sclector可以在需要时把某个产品线体系结构简化成另一个小型产品线,或者从整个体系结构中抽取出一部分形成某具体产品的体系结构。
  选择器提供了3种选择方式:SelectPruneVersion Prune,如图10-16所示。用户根据实际需求选择其中一种或多种方式执行。

 

10-16  Product-Line Selector

  ArchStudio支持对体系结构版本的记录和选择。体系结构模型的各个版本都可以在ArchStudio中打开并编辑,也可以通过提供WebDAV统一资源定位器给ArchStudio来实例化。体系结构模型在ArchStudio中由xADL2.0文件描述和记录。它的最新版本将被记录在树干目录中,旧版本被标记后存放到树枝目录中。同一时刻,工作台只允许一个体系结构的目录组织显示出来,而实际上,Subversion的存储库可以为不同的系统保存多个体系结构。

  (5)  ype WranglerType Wrangler如图10-17所示。Type Wrangler为考察体系结构类型提供了帮助和支持,方便用户分析体系结构中的所有类型。可利用它添加或移除接口和签名,并判断构件和连接件是否符合类型一致性要求。

 

10-17  Type Wrangler

  3) 菜单栏和工具栏
  除了视图和编辑器外,菜单栏、工具栏和其他快捷工具也给用户提供了操作便利。类似视图和编辑器,工作台的菜单栏和工具栏也会根据当前窗口的属性和任务发生变化。
  

  菜单栏包含了集成开发环境中几乎所有的命令,它为用户提供了文档操作、安装脚本程序的编译、调试、窗口操作等一系列的功能。菜单栏位于工作台的顶部、标题的下面。用户可以单击菜单或子菜单完成大部分操作。在菜单下是工具栏,由于工具栏比菜单操作更为便捷,故常常将一些常用菜单命令也同时安排在工具栏上。除了工作台的菜单栏和工具栏,某些视图和编辑器也有它们专用的菜单。菜单栏和工具栏为用户提供了一个方便且迅速的操作方法。

10.3.4  ArchStudio 4的使用
  本小节将介绍在开发过程中怎样有效地使用ArchStudio 4。通过对一个简单的电视机启动应用程序(体系结构如图10-18所示)的分析和建模来讲解整个过程。首先必须明确系统的用户需求,然后分析系统体系结构,接着绘出系统构件和拓扑结构为系统建立模型,最后对模型进行校验。如果用户需要还可以对某些功能和属性进行扩展。

 

10-18  电视机驱动应用系统的体系结构

  电视机驱动系统的基本需求如下:
  ●  系统有两个调谐器程序:TV调谐器和画中画调谐器,它们都有通信接口,经此传输所有信息和数据。
  ●  系统有一个驱动红外接收探测器的驱动子系统,来拾取遥控器发出的信号。
  ●  上面3个子系统之间的交互需要一个中间媒介,通过它可以使红外接收探测器同时给两个调谐器发送信号。

  清楚了实际需求之后,开始分析系统的体系结构。选择适当的体系结构风格成为最重要的任务之一。由于该系统只涉及简单信息的发送和接收,用C2风格比较合适。C2风格对系统元素的组建方式和行为有明确的限制和约束。 此系统包括TV调谐器、画中画调谐器、红外接收器3个构件实例和一个TV连接器实例。按照C2风格的系统组织规则,每个构件和连接件都有一个限制交互方式的顶端和底端。构件的顶端应连接到某连接器的底端,构件的底端则应连接到某连接器的顶端,而构件与构件之间不允许直接连接;一个连接器可以和任意数目的构件和连接件连接。

  选择了体系结构风格后就可以利用ArchStudio 4为系统建模了。首先要创建一个新的ArchStudio工程,然后按照向导添加一个体系结构描述文档。下面是该过程的详细步骤:
  (1) 单击File”→“New”命令,或者右击导航器视图,在弹出的快捷菜单中选择Project”命令。
  (2) New Project”对话框中选择a general project”选项并为它命名,然后单击Finish”按钮。

  (3) 单击File”→“New”→“Other”命令,或者右击导航器视图,在弹出的快捷菜单中选择ArchStudio Architecture Description”命令。
  (4) New Architecture Description”对话框中选择相应的工程并给新文档命名,最后单击Finish”按钮。

  现在可以开始为系统体系结构建模了。用ArchEdit打开创建的新文件,发现大纲视图中有一个名为XArch”的空文件夹。右击该文件夹可以看见系统提供了一些符合XML模式的建模符号。 用户可以根据需要利用这些符号来描绘系统。设计ArchTypes时要考虑构件、连接件和接口三种类型。每种体系结构类型都有一个唯一的标识符、文字描述和一组签名。签名是定义的接口,两个相同类型的构件或连接件应该有相同的接口;构件和连接件的接口应该用相同的接口类型作为签名。

  此电视机系统中,三个构件实例分为两种类型:调谐器类型和红外接收器类型;将TV连接器定义为连接件类型;由于每个构件和连接件都有顶端和底端,所以必须将接口类型的顶端与底端区分开。设计ArchStructures时需要从多个角度来考察。Structure & TYPESInstance各有自己的XML模式,它们支持如下特性:
  ●  构件:每个构件都有唯一的标识符和简单的文字叙述,构件有自己的构件类型和接口,不同的构件可以共享同一种类型。
  ●  连接件:每个连接件也有唯一的标识符、文字描述、接口和自己的类型。

  ●  接口:在这两种模式中,接口有唯一的标识符、文字描述和特定的方向。
  ●  连接:在体系结构符号中,连接表示接口之间的关联,每个连接都有两个端点用于绑定接口。
  ●  子体系结构:构件和连接件都可以集成为一个复杂的整体,构件和连接件构建了内部联系并封装功能后成为一个功能独立的单元体。
  ●  通用集合:一组相似的体系结构描述元素的集合。在这两种模式中,一个集合没有任何语义,可以用扩展的模式来描述特定含义的集合。

  用TV调谐器构件来说明如何设计ArchStructures。构件建模需要考虑标识符、描述、接口、类型等属性。TV调谐器属于调谐器类型;它的接口是底端接口;接口的签名必须与它的构件类型的签名一致。类型实例化是个极容易被忽视的步骤,只需将元素所属的类型绑定到具体的类型上即可。由于定义了构件和连接器类型,当类型的属性发生变化时,该类型的所有实例都会自动更新。 其余的体系结构元素都可以按照TV调谐器构件的设计方式操作。利用ArchStudio 4使复杂的设计变得简单,用户只需将设计思想利用ArchStudio 4提供的框架实现即可。

  具体的实现可以依据下面的步骤完成:
  (1) ArchEdit打开文档,在大纲视图中,给根节点XArch添加第一层子节点,至少必须添加ArchTypesArchStructures两类属性。
  (2) 按照前面的分析,分别对ArchStructureArchTypes进行设计。在ArchStructure中设计TV调谐器、画中画调谐器、红外接收器、TV连接器、TV调谐器与TV连接器的连接、画中画调谐器与TV连接器的连接、红外接收器与TV连接器的连接。在ArchTypes进行类型设计,系统包括两种构件类型——调谐器与红外接收器类型,一种连接件类型——TV连接器类型和一种接口类型——信道类型。

  (3) 为上面的元素添加必要的属性并设置元素之间的连接。连接只能关联方向兼容的接口,如输入和输出,不能是输入和输入或输出和输出。一旦用户确定了系统的拓扑结构,一个名为RendingHints3的文件夹就会自动生成,里面包含了所有有关联的元素的信息。

  最后一个不可忽视的步骤是校验模型。该体系结构模型是否满足完整性、类型的一致性、接口的连接是否正确、两个元素是否有相同的标识等问题都需要校验。ArchStudio 4提供了一个有效的校验工具Archlight。用Archlight打开文档,选择校验类型,完成任务后系统会给用户提供报告。用户根据报告中的信息可以快速定位和改正错误。此外,它还支持体系结构实时修改和动态载入。假设在电视机驱动系统中,Archlight检测出来的错误如图10-19所示,应该如何修改呢?

 

10-19  Archlight校验图

  首先,用户需要获取一份更详尽的错误报告,右击系统提示的错误信息,弹出的信息提示窗口对错误有更详细的描述。该错误在信息提示窗口中提示为:the interface type of Interface TV Tuner Component on Component TV ArchStructure must be the same as the interface type of its signature。由于此问题牵涉到构件和接口,可以选择接口或者构件为切入点进一步追溯问题。这两条解决途径都提供了4种方式:selector dialog boxtype wrangler dialog boxArchEdit viewArchipelago view,用户可以选择最佳方式。例如,如果选择Type Wrangler,系统将用红叉标记出错的地方(如图10-20所示)

 

10-20  Type Wrangler校验图

  如果选择ArchEdit,用户将会被系统智能地导航到出错的元素;如果采用Archipelago,系统将动态地将有错误的元素显示出来并用红色标记(如图10-21所示)。这样,用户可以直观便捷地定位错误。

 

10-21  Archipelago校验图

  一旦用户运行了校验程序,系统就会自动添加一个ArchAnalysis文件夹,其中的文档详细记录了所有校验信息和细节。模型通过校验后,用户就可以通过视图和编辑器研究它了。例如,利用Archipelago将系统以图形的形式显示出来;利用Type Wrangler对所有类型进行分析;利用Selector选择体系结构的任何子集,甚至是最简单的构件和连接件。如果用户需要,还可以对该系统进行功能扩展。

  10.4  Acme工具和AcmeStudio环境

  Acme工具是由卡耐基梅隆大学计算机科学学院(School of Computer ScienceCarnegie Mellon University)ABLE
(Architecture Based Languages and Environments)项目组开发的。该项目的主要内容包括开发描述和利用体系结构风格的方法,为软件体系结构实践提供工具,为软件体系结构和体系结构风格的定义与分析创建形式化的基础。本书第4章介绍过的体系结构描述语言ACMEWright都是由该项目组创建的。

  我们已经在前面介绍过ACME体系结构描述语言。下面,我们将介绍Acme工具的特点和使用。可以通过ABLE项目的网站(http://www.cs.cmu.edu/~acme/)免费下载这些工具。
10.4.1  Acme工具开发人员库(Acme Tool Developer’s Library)
  Acme工具开发人员库(简称为AcmeLib)是一个可重用的类库,用于表示和操作Acme的设计。AcmeLib包括Java AcmeLibC++ AcmeLib两种具体实现。

  1AcmeLib概述
  首先介绍AcmeLib提供的基本功能以及它所面向的应用。
AcmeLib可以读、写、操作用Acme体系结构描述语言定义的软件体系结构设计。AcmeLib框架是为支持两类应用程序的快速开发而设计的。
  (1) ADL之间进行转换的工具(比如RapideWrightUniConAesop)
  Acme体系结构描述语言的最初目的是把用一种ADL(Aesop)描述的体系结构转换成用另一种不同的ADL(UniCon)描述的体系结构。AcmeLib框架可被用作开发这类在Acme和其他静态体系结构描述语言之间进行转换的工具的基础。

  (2) Acme为基础的体系结构设计和分析工具。
  除了开发转换工具,使用Acme框架还可以快速创建具有体系结构分析、操作和可视化等功能的应用程序。这些工具直接以Acme体系结构描述语言为目标,并能针对特定的应用或特定的体系结构风格进行定制。

  AcmeLib工具包中提供一套可重用的构件,它能够帮助软件体系结构工具开发人员降低开发难度,在付出尽可能少的代价的情况下开发定制基于Acme的工具。AcmeLib工具包具有如下基本功能和特点:
  ●  为Acme体系结构描述提供了一个通用的、可扩展的、面向对象的二进制表示框架。这一框架包括一个编程接口工具,可以通过它来完成对Acme设计的操作。

  ●  提供了一个Acme语法分析器。该分析器把文本化的Acme描述转换成AcmeLib的二进制对象表示。可以方便地扩展该分析器,使它能够支持对目标ADL定义的语义丰富的Acme属性类型的分析。
  ●  提供了一个反语法分析器(导出器),用于把AcmeLib的二进制对象表示转换成文本化的Acme描述。
  ●  提供了一个转换辅助程序。

  2.开发定制的基于Acme的应用
  典型的基于AcmeLib的应用程序是这样的:对一个基于AcmeLib的应用程序来说,所设想的标准操作模式是调用语法分析器处理文本形式的Acme描述,对分析器返回的体系结构设计的二进制对象表示进行一系列的操作。操作结果的输出有两种方式,即向调用工具返回结果,或使用AcmeLib的反语法分析器输出修改后的文本形式的Acme描述。
  工具开发人员创建自己定制的基于AcmeLib的应用时可以选择使用两种方法:使用AcmeLib提供的通用API,或使用自定义的接口类集合。

  如果只是使用AcmeLib的通用API,开发人员在创建新的体系结构工具(或与现有工具相链接)时需要按照以下步骤进行:
  (1) 决定该工具将要操作的特定应用程序的Acme类型集合,为这些类型编写Acme规格说明。
  (2) 使用通用的AcmeLib API构造对Acme表述进行操作的体系结构设计工具。
  (3) 把任何所需的用户语法分析器链接起来,用来解析属性或外部体系结构描述语言。
  (4) 把开发人员的新工具和AcmeLib相链接。

  如果要使用自定义的接口类集合创建基于AcmeLib的应用程序,需要完成以下步骤:
  (1) 决定所要开发的工具要操作的特定应用程序的类型集合,为这些类型编写Acme规格说明。
  (2) 通过子类化AcmeLib的体系结构元素类型(构件、连接件等)为特定应用程序的Acme类型创建接口,这些接口类将为直接在特定应用程序Acme类型提供的属性和结构上进行操作提供方法。
  

  (3) 使用这些接口类和其余的AcmeLib提供的通用API创建所要的体系结构设计工具。
  (4) 把任何所需的用户语法分析器链接起来,用来解析属性或外部体系结构描述语言。
  (5) 把开发人员的新工具和AcmeLib相链接。

  3Acme设计结构
  这里我们概要介绍用于描述体系结构设计的Acme类,这些类为基于Acme模型操作体系结构设计定义了通用的API,并对表示体系结构设计的结构进行了总结,概述了重要的设计对象类及其关联。

  一个Acme设计的对象模型和用文本化的Acme语言描述的设计结构很相近。一个AcmeDesign包括一个全局体系结构元素类型集合、存储在全局类型空间AcmeTypeSpace中的属性类型定义(AcmeElementTypeAcmePropertyType类的实例)。它还包括一个AcmeFamily类的实例的集合,其中的每一个与一个Family定义相关。Family定义是一组类型定义,是最终的模板定义。最后,一个AcmeDesign还包括一组AcmeSystem对象,它们描述了最高层的设计拓扑结构。

  一个AcmeDesign还含有一个AcmeTypeManager 类型管理器实例以元素类型和属性类型为基础,提供一个用来进行查找、实例化和检查元素实例及属性的类型的接口。一个AcmeTypeManager对象并不是设计的一部分,而是为对体系结构设计进行操作提供了一个接口。

  一个AcmeSystem包括一个由构件、连接件、端口和角色实例(AcmeComponentsAcmeConnectorsAcmePortsAcmeRoles)构成的集合,它们分别与Acme体系结构描述语言中的构件、连接件、端口和角色相对应。AcmeComponent包含AcmePort,而AcmeConnector包含AcmeRole。一个AcmeSystem还包括一组连接(AcmeAttachment),用于表示端口和角色之间的接口关系。
  每个AcmeSystem实例可以包括一个到AcmeFamily对象集合的参照表,这些对象是在系统中定义的全局对象。AcmeFamily对象定义了一个类型集合,以及所有系统都需要的缺省结构。

10.4.2  AcmeStudio环境
  AcmeStudio是一个图形化用户界面的软件体系结构开发环境。它既提供了Linux平台下的版本,也提供了Windows平台下的版本。
  尽管使用AcmeStudio开发环境和编辑器相当简单,但在设计具体应用时,使用者应当熟悉软件体系结构的建模方法,并熟悉Acme体系结构描述语言。
  AcmeStudioAcme通用体系结构描述语言为基础。它可以打开任何用Acme描述的体系结构设计。通常,这些Acme描述被存储在扩展名为.acme的文件中。

  可以从http://www.cs.cmu.edu/~acme网站得到AcmeStudio和其他Acme工具的最新版本,还能得到关于AcmeAcmeStudio的详细信息。但同时需要指出的是,AcmeStudio是一个研究用的原型系统而非商用产品,因此网站所提供的资源很有限。

  1.用户界面概述
  下面我们简单介绍AcmeStudio用户界面的组织。AcmeStudio的图形用户界面采用的是Windows风格的多文档界面(MDI)模型,如图10-22所示。

 

10-22  AcmeStudio环境

  1) 设计浏览器窗口
  使用AcmeStudio的第一步是打开一个现存的设计或创建一个新的设计。在AcmeStudio中打开的每个设计都会显示在单独的浏览器窗口中。浏览器窗口由多个不同的编辑视图组成,它们中的每个都显示在单独的、可调整大小的面板上。这些视图是同步的,即在一个视图上所做的更改会马上在其他相关视图中显示出来。

  2)  esign Navigator
  Design Navigator窗口用树形结构显示了整个设计的层次体系。它包括体系结构描述中定义的所有类型和族,以及设计及其子结构中表示的所有系统。这个窗口的内容直接与文本形式的Acme描述的结构相关。
  通过选择此窗口中的树的不同条目,使用者可以访问设计中的不同元素。一旦选择了某个或某些元素,它们就会在Diagram View窗口或Element Workshop窗口显示出来。

  界面的操作有点类似于Windows操作系统中常用的文件浏览器:选择一个“构件”对象,Diagram View窗口将显示这一构件以及包含这一构件的系统。然后,可以通过Diagram View窗口和Element Workshop窗口进行查看和编辑。
  某些编辑操作还可以通过在树中选择元素并操作右键弹出菜单来完成。对于当前选中的元素,操作主菜单中的相关菜单项也能实现同样的功能。
  可以对Design Navigator窗口中显示的元素进行选择:单击Look in”按钮,或者在应用程序菜单中选择View”→“Browser Options…”菜单项,所弹出的对话框窗口中提供了许多对树形显示结构的过滤选项。

  在树形显示上面,有一个组合框,它反映了当前所浏览的环境(当前显示元素的父元素和祖父元素)。这一组合框类似于Windows操作系统中的典型文件对话框中的下拉组合框。操作者通过选择父元素就可以向上层浏览。
  在树形显示和组合框的上面,是一个缩略图,它描述了当前Diagram View所显示元素的父系统。如果当前Diagram View窗口显示的是元素类型,缩略图描述的是该类型。实际上,这一视图显示的就是上下文环境,可以通过双击缩略图转入上层系统。

  3)  iagram View
  Diagram View显示一个简单的图形编辑器,可以用通常的方式对构件、连接件、端口和角色进行选中、调整大小、移动等操作。但是,不同于大多数图形工具,Diagram View在显示系统图形时,使用的显示规范是在当前选择的图形风格(Diagram Style)中定义的,通过在图形风格列表中进行选择就可以用新的风格查看系统。每个元素的显示方式是以该元素的类型和属性为基础的。通过视觉外观我们就可以知道所选择元素的一些信息。

  使用菜单项View”→“Diagram”→“Diagram Styles…”可以创建新的图形风格,或编辑现有的风格。
  Element Workshop能够显示更多的当前选中对象的详细信息。我们将在下面介绍。

  4)  ype Platte
  Type Platte显示体系结构元素类型的集合。这些类型构成的词汇表能用于编辑在Diagram View窗口中所选择的系统的设计。它不仅包括系统具有的各种族的类型,而且包括所有的全局类型的定义。在编辑一个系统时,Platte窗口显示4个列表:构件类型列表、连接件类型列表、端口类型列表和角色类型列表。在编辑一个构件类型时,Platte只显示端口类型。类似地,在编辑一个连接件类型时,只显示角色类型。

  通过选择一个类型并把它拖入Diagram View窗口,可以向系统中加入新的构件和连接件。同时,要向构件或连接件中拖入端口类型或角色类型来添加新的端口或角色。要注意的是,通过选择适当的菜单项,也可以向系统添加新的结构。

  5)  lement Workshop
  Element Workshop显示当前选中对象的细节信息, 包括对象的子结构以及元素的各种属性和表述。对于系统,子结构包括系统中的构件和连接件;对于构件,列出与此构件相关联的端口;对于连接件,列出与此连接件相关联的角色。
双击一个元素或表述将导航到该条目上,并在Diagram View窗口中显示它。双击一个属性将显示属性编辑器,使用者可以用它来编辑属性值。

  2.执行基本任务
  下面我们介绍怎样在AcmeStudio中执行一些基本任务。与大多数应用程序类似,往往可以使用多种操作完成同一个任务。例如,可以使用右键弹出菜单执行一个命令,也可以通过应用程序的主菜单完成相应的任务,或通过拖拽操作完成该任务。

  1) 与设计有关的任务
  类似于大多数Windows应用程序,可以通过File”菜单完成打开和保存操作。
  如果要创建新的设计,则按以下步骤进行:
  (1) 从菜单中选取File”→“New Design…”
  (2) 选择族,新的设计中的顶层系统将在所选的族中创建。在对话框中将显示AcmeStudio\Families目录下所有的族。通过把新的包含族描述的*.acme文件拷贝到该目录中,就可以向库中加入新的族。

  如果要打开现存的设计,则选择File”→“Open Design…”,然后选择打开一个Acme描述文件。这样就可以对设计进行编辑了,比如向系统中加入新的构件或连接件,修改这些元素的结构。

  如果要添加新的构件或连接件,则按以下步骤进行:
  (1) 通过单击构件/连接件类型并把它拖拽到图形中,在Type Palette中选择类型。
  (2) 在设计上释放鼠标。这样,就在该系统中创建了一个该类型的构件或连接件的新的实例。缺省情况下,系统会根据类型名自动为该实例分配一个名称。
  或者,也可以按以下步骤进行:
  (1) 从应用程序菜单中选择Insert”→“New Component…”或者Insert”→“New Connector…”,然后,系统会提示对新元素的其他信息进行选择。
  (2) 为新元素提供一个名称,并为其选择一个类型。

  通过类似的操作,还可以为构件添加新的端口,或为连接件添加新的角色。
  如果要编辑一个元素的属性,则按以下步骤进行:
  (1) 在图形中选择一个元素。
  (2) 双击Element Workshop窗口中想要编辑的属性。

  如果要创建一个新的属性,则按以下步骤进行:
  (1) 在图形中选择一个元素。
  (2) 单击鼠标右键并从弹出菜单中选择New Property…”菜单项,或者从主菜单中选择Elements”→“New Property…”
还可以添加或编辑与元素相关的Acme表述。Acme表述可被用于描述元素的详细分解信息,或描述系统及元素的其他视图。

  2) 与表述有关的任务
  在Acme中,系统、构件、连接件、端口或角色都可以有一个表述(Acme Representation)。在当前版本中,可以查看并编辑系统、构件和连接件的表述,也可以打开包含端口表述和角色表述的系统设计,但不能通过编辑环境访问它们。
  如果要为构件或连接件添加一个新的表述,则按以下步骤进行:
  (1) 在系统视图中选择一个构件或连接件。
  (2) 在主菜单中选择Insert”→“New Representation…”

  或者,也可以使用右键菜单中的New Representation”完成同样的操作。
  如果要导航到一个现有的表述并在系统视图中把它显示出来,则按以下步骤进行:
  (1) 在系统视图中选择一个构件或连接件。
  (2) 从主菜单中选择View”→“Open Representation”,或从元素的右键弹出菜单中选择Open Representation”

  3) 使用剪贴板进行复制、剪切和粘贴操作
  可以对系统结构(即一些构件和连接件及其关联构成的集合)进行各种剪贴板操作。在当前版本中,能够在Diagram View窗口中对构件和连接件的图形表示(以及它们所包含的端口和角色)进行剪切和粘贴操作。预计在将来的版本中会提供更为丰富的功能。
  如果要剪切/复制构件或连接件的集合,则按以下步骤进行:
  (1) 在图中选择想要剪切或复制的构件和连接件组成的子图。
  (2) 选择Edit”→“Copy”Edit”→“Cut”菜单项。

  如果要粘贴元素集合,则按以下步骤进行:
  (1) 导航到要把子图粘贴到的那个系统。
  (2) 选择Edit”→“Paste”菜单项。
  这非常简单,与一般的编辑器中的操作基本是相同的。但需要注意,也可以用文本的形式把元素粘贴到设计中去。这里要使用Edit”→“Paste Acme Text”菜单项。这些文本应当包括对构件、连接件或系统的Acme描述。例如,可以在其他文本编辑器中输入如下文本:

  System s={
  Component c;
      Component d;
          };
  然后,把这些文本复制下来,返回到AcmeStudio中。这时,选择Edit”→“Paste Acme Text”,就会在当前系统中加入两个名称分别为c”d”的构件。

  4) 与族和类型有关的任务
  通过在主菜单中选择Type”→“Families…”或通过Design Browse窗口访问族和类型的目录,可以执行与族和类型有关的操作。
  在Acme中,一个体系结构设计描述包括一组族,可在设计中使用它们。在设计中为了定义一个属于某个特定族的系统,必须先要把这个族添加到设计中。可以采用两种操作方式:从头开始创建一个新的族,或者导入一个现有的族。

  如果要向设计中加入新的族,则按以下步骤进行:
  (1) Type”菜单中选择Families…”。这将打开一个对话框,其中列出了与当前设计有关的所有的族,而不是只有当前被编辑的系统所指定的族。
  (2) 单击New…”按钮,打开另一个对话框,在这里为新建的族命名。
如果要向设计中导入一个族,则单击Import…”按钮,然后选择一个Acme描述文件。
  如果要指定一个系统的族,则可以从Families”对话框中选择当前系统的族。这样做就把当前系统和这个族关联了起来。另一种办法是,在Design Browser窗口中或在Diagram View窗口中使用右键菜单,选择Assign Families…”菜单项。

  如果要为族添加一个新的类型,则在AcmeStudio中可以这样创建一个新的元素类型:首先在设计中创建一个构件、连接件、端口或角色,然后使用Type…”→“Create type from prototype…”把它转换成一个类型。使用Create type in current family”选项,可以在与当前编辑的系统相关的族中创建一个新的类型;使用Create type in global type space”选项,可以在一个设计的全局类型那个空间中创建一个新的类型。

  需要注意的是,当前的AcmeStudio版本提供的类型编辑功能还很有限。例如,如果需要创建一个新的属性类型,则必须直接编辑文本形式的Acme描述。
  如果要编辑一个类型的描述,则在Browser View窗口选中它,然后就可以通过DiagramWorkshop窗口对它进行编辑。

  5) 与图形风格(Diagram Style)有关的任务
  通过选择主菜单中的View”→“Diagram”→“Diagram Styles…”,可以对图形风格进行编辑,并添加新的风格。一般情况下,可以为所要使用的每个族定义一种图形风格。在每种图形风格中,定义了该族中各类型的视觉效果。
  如果要为当前系统选择一种图形风格,则通过在图形风格工具条的下拉框中进行选择。另一种方法是使用主菜单的View”→“Diagram Styles…”选项,然后单击Assign Style to Current System”按钮。

  如果要创建新的图形风格,则在View”→“Diagram Styles…”所打开的对话框中单击New…”按钮即可。
  如果要为一个图形风格添加新的视觉效果,则按以下步骤进行:
  (1) 从主菜单中选择View”→“Diagram”→“Diagram Styles…”菜单项,并使用图形风格对话框选择所要编辑的图形风格;或者选择View”→“Diagram”→“Edit Current Diagram Style…”菜单项,编辑当前系统所使用的图形风格。
  (2) 单击New…”按钮,选择是否创建新的构件、连接件、端口或角色的视觉效果。

      10.5  

  本章详细介绍了软件体系结构开发过程的辅助工具——体系结构集成开发环境,它在系统设计思想和系统实现之间搭起了一座桥梁。在体系结构集成开发环境出现以前,开发人员只能利用非形式化或形式化方法描述软件的体系结构,缺乏有效的体系结构分析、设计、仿真、验证等支持工具。同时,这些方式表达的结果也不够形象和灵活。体系结构集成开发环境的出现解决了这一系列问题。它提高了软件体系结构的生产效率,降低了开发和维护成本。

  本章首先从5个方面介绍软件体系结构集成开发环境的作用,然后介绍了体系结构集成开发环境的原型,以帮助用户深入理解开发工具的结构和工作机理。原型是三层结构的系统:最上层是用户界面层,中间层是模型层,底层是基础层。

  最后以两个较为著名的软件体系结构集成开发环境为例来介绍其具体功能。其中:
  (1)  rchStudio 4采用基于XML的体系结构描述语言xADL2.0为基础,支持C2体系结构风格。它除了具备普通体系结构建模功能外,还提供了对系统运行时刻和设计时刻元素的建模支持,以及对软件产品线体系结构的建模支持。
  (2)  cme工具以Acme体系结构描述语言为基础,提供了Acme工具开发人员库(简称为AcmeLib),用于表示和操作Acme的设计,并提供了一个图形化用户界面的软件体系结构开发环境AcmeStudio

        习    

  1.下载本章介绍的两种软件工具,浏览其文档,对工具所附带的例子进行简单操作。
  2.通过文献检索或互联网搜索,了解23个其他的体系结构支持工具。它们都提供了什么功能?具有哪些特点?

猜你喜欢

转载自www.cnblogs.com/ZanderZhao/p/11511983.html