指南:体系结构发现、分析和控制
该指南描述了如何使用 RSA 建模环境执行项目的体系结构发现、分析和控制。
关系
相关元素
主要描述

介绍

在 RUP 的几个任务中,我们研究检验新出现的设计模型的必要性,就质量的各个方面作出判断,然后在必要的情况下重构模型。一旦系统进入实施阶段,能够维护系统的体系结构完整性也很重要,以确保不违犯体系结构和设计约束,并且实现的系统继续符合体系结构远景。在 RUP 中,这些主检查点出现在以下任务中:复审体系结构复审 GUI 设计复审代码

在体系结构和设计合成期间,出现一个不同但有关联的问题:在任务:体系结构分析 (请参阅开发体系结构概述调查可用资产)和合并现有设计元素,建议软件设计人员寻找机会来复用现有的设计和代码资产,并且在反向设计之后将它们并入设计模型(如有必要)。除非重复使用的资产带有某种质量认证,否则软件设计人员将希望像对新创建的设计和代码一样对它们进行同样仔细检查。

在两种情况下,软件设计人员的结果产生的需要对于此静态分析相同:

  • 获取一个编好代码的应用程序(或其中的片段),找出它的象征结构,并将此结构按理想情况用 UML 形式恢复成设计模型。恢复可浏览的文档工件在以下方面也有重要价值,即让软件设计人员可以在文档不存在或过期时查看代码实际是如何构造的
  • 要能够分析任何设计模型,请收集工件:评估计划中提出的质量度量值(如术语定义:耦合),并检查与工件:软件体系结构文档设计指南的一致性
  • 要留意重要的体系结构或设计变更,以便在必要时采取更正操作。对照软件设计人员设置的标准判断重要性

从理论上说,这些需要可通过检查完成;实际上,对于更大型、更复杂的系统,至少需要某种形式的自动辅助。以下各节详细说明了这些主题,并提供了工具支持的示例。

体系结构发现和恢复

背景

在 Greenfield 开发中,软件体系结构产生自需求、领域环境和惯例(包括模式和机制);补充规范工件在确定体系结构中扮演重要角色。这种组成软件体系结构的过程有时被称为发现,因为很少有直接、机械地从需求映射到体系结构的情况。但是,在此我们使用 发现有不同的意义,目的是描述帮助软件设计人员了解编码形式的现有应用程序或应用程序片段的流程。体系结构恢复目标更远大:通过恢复,软件设计人员不仅试图了解应用程序,而且在理想情况下以与设计模型兼容的抽象程度提取该应用程序的模型。然后有可能合并这些模型,接着通过术语定义:转换,可能为另一个术语定义:平台生成新的应用程序。

发现

在任务体系结构分析 (请参阅开发体系结构概述调查可用资产)和合并现有设计元素中,软件设计人员寻找机会来复用现有的设计和代码资产。例如,一个组织在它的资产库中可能有多个引用体系结构,并且在理想情况下,这些体系结构带有最新文档和模型。不过,通常只有源代码,即使存在体系结构文档,也不是最新的。

在许多情况下,软件设计人员无法将这样的代码视作黑匣(即使接口已明确定义),而需要了解它的结构。此流程在很大程度上受到自动生成可浏览的代码描述的功能的辅助。然后,软件设计人员可直观地“发现”代码中的模式和反模式。这种辅助的示例可在 Rational Software Architect 工具中找到,其中体系结构发现功能将自动填充 Java 应用程序的主题图,如包结构、类内部结构、继承树和协作。有关更多信息,请参阅“帮助手册”图标 Rational Software Architect 文档。

恢复和转换

当可复用资产包含模型时,有可能将那些模型与特定于项目的模型相结合,并使用转换技术继续进行特定于平台的实施。当只存在代码时,仍然有可能重复使用它,甚至使用基于转换的方法将转换生成的代码与旧代码集成在一起。

通过使用体系结构恢复,软件设计人员具有极大的能力和灵活性:恢复功能将生成语义丰富的应用程序模型,该模型可用于代码生成和浏览。在实践中,将代码反向设计回到直接而直观的表示法,通常是易处理的;将此类模型恢复成与术语定义:平台无关模型设计模型同样的抽象程度,则通常是很难完全自动实现的。

这本质上是从术语定义:平台相关模型术语定义:平台无关模型的转换(请参阅概念:模型驱动开发(MDD)和 Model Driven Architecture(MDA));然后使用模型合并(请参阅OMG03])类型的转换将恢复的 PIM(片段)与设计模型(本身是 PIM)结合。

分析体系结构

有可浏览的模型让软件设计人员可以通过检查验证体系结构质量。但是,这样做会冗长而耗时,并且按此方法检查标准和规则符合情况以及收集度量值是易出错的。软件设计人员应注意使该流程的执行尽量自动化,因而需花更多时间查找和应用补救方法;自动化可使软件设计人员进行试验、询问“假设分析”并快速检查结果。

可使什么自动化?

自动体系结构分析可以:

  • 发现体系结构中的模式和反模式(不合理结构)
  • 对各种结构执行评估,并报告度量值
  • 检查与软件设计人员所定约束的一致性(请参阅“体系结构控制”)

术语定义:模式由项目和组织标准规定,而使用它们的理由则记录在软件体系结构文档(如果在体系结构上具有重要意义)或设计指南中。通过自动分析,软件设计人员可快速检查模式用法,验证是否符合软件体系结构文档和设计指南的意图。反模式是不合理的体系结构和设计结构,在某些方面会削弱体系结构,例如,使其健壮性下降、更加复杂或更难维护。

要执行的评估列于“工作产品:评估计划”中(部分建议度量值可在指南:度量值中找到)。评估计划也描述如何使用度量值,例如,值越高越好还是越低越好或者发展趋势是否重要,因此度量值分析也可用于确定热点 - 体系结构中的位置,在此变更将在收集的度量值中产生重要改进。毫不意外,这些将通常与结构中的不合理性关联。然后,软件设计人员拥有改进的目标基础,可以做出变更或委派完成后即可测试的后续操作。

分析目标是什么?

分析目标在生命周期过程中可根据选择的开发方法而有所变化。当项目使用转换(生成)方法时,目标将通常是设计模型,前提是生成的应用程序始终与设计同步。当创建并单独维护工件:实施模型时,或重复使用代码时,侧重点转移到代码,以确保当针对软件体系结构文件和设计指南评估时保持体系结构的完整性。

这种分析(在实施模型上)可能不从代码实际恢复明确的设计模型(用于分析目的);不过仍关注体系结构和设计问题(当问题出现在代码中时),而不是编码标准。

这些概念和功能的示例

Rational Software Architect 工具,除了通过体系结构发现恢复 Java 应用程序文档的功能,还可以确定和报告可表明体系结构中的潜在故障点的一组预定义的模式。这些模式包括(还有其他的):

  • 蝶型对象
  • 易分对象
  • 中心对象
  • 对象缠结
蝶型对象

蝶型对象是一个元素(如类),它与其他依附元素具有很多关系,如果蝶型对象有变更,这些元素会受到影响。如果关系是直接的,则这些元素被称为本地蝶型对象。Rational Software Architect 也可跟踪这些关系(当它们分级通过应用程序时),并确定某个元素的变更是否会不仅影响直接被依附对象,而且依次影响它们的被依附对象,并因此牵连到整个应用程序。这样一个具有很多间接相关性的元素被称为全局蝶型对象。本地蝶型对象的说明如下所示。该图也显示了不同于 UML 依赖关系的关系:例如,当某个元素实现另一个元素时有依赖关系;指定元素的变更将影响实现该元素的元素。

具有四个依附对象的类,两个具有使用依赖关系,一个具有泛化关系,还有一个具有实现关系

本地蝶型对象

易分对象

易分对象是具有多种依赖关系的元素;即它具有多种依赖另一个元素的关系。对这些其他元素中的任何一个的变更将影响易分对象。对于蝶型对象,如果关系是直接的,则这些元素称为本地易分对象,如果有很多间接关系影响元素,则称为 全局易分对象。全局易分对象在应用程序的很多部分发生变更时容易受到影响,由此表明缺乏模块性。本地易分对象的说明如下所示。

具有四个依附对象的类,两个具有使用依赖关系,一个具有泛化关系,还有一个具有实现关系。

本地易分对象

中心对象

中心对象是一个元素,结合了蝶型对象和易分对象的特征。它也具有本地全局形式。全局中心对象的出现表明分区状况拙劣,导致软件对于变更极端敏感 - 这些变更倾向于影响整个应用程序。

对象缠结

对象缠结是一大组元素,它们的关系纠缠得很厉害,以至于任何一个元素的变更都会影响其他所有元素。这样的结构是主要不稳定性的根源。

软件设计人员使用 Rational Software Architect 工具可快速发现这些热点并使用设计器纠正问题。有关更多信息,请参阅“帮助手册”图标 Rational Software Architect 文档。

计时

作为体系结构和设计质量的目标和可量化根据,或者当在更新设计模型的组织(在“任务:合并现有设计元素”中)中存在重大体系结构变更时,这些分析的结果在任何复审里程碑处都有价值。

体系结构控制

软件体系结构文档中描述了软件设计工程师的远景,而设计人员的实践指导可在设计指南中找到。即使远景是所有人员共享的,有时也会由于项目工作日复一日的紧急而变得模糊。为在截止期限内完成,可能会走捷径,并且软件设计人员通常无法参与每项决策。因此会出现控制问题:正如项目经理必须设置阈值和限制并进行监视(请参阅任务:监视项目状态),对于新出现的软件设计和实施,软件设计人员具有类似任务。

体系结构控制为软件设计人员提供了创建规则来强加体系结构约束的能力。 例如,软件设计人员可定义规则,在每次实现特定接口时出现警告。没有工具支持的此规则的简单表示需要或多或少的持续复审来捕获违规。使用自动化技术,可对规则编码,以便在体系结构分析期间能够捕获规则集的违例。这仍发生在事后,高级控制环境将规则编成设计和代码生产流程,防止它们首先被破坏;即使这样,它也大大改进了手动复审流程。

Rational Software Architect 工具包括用于 Java 应用程序的以下功能:软件设计人员可设置规则并运行分析来验证一致性。有关更多信息,请参阅“帮助手册”图标 Rational Software Architect 文档。