前页 后页

状态分析仪

状态分析器是一项功能,可以分析,检测和记录类实例的状态。该功能通过组合状态定义(在类上定义为约束)和称为状态点的标记而起作用。它适用于Execution Analyzer支持的任何语言,包括Microsoft.NET,Mono,Java和本机C ++。

我们首先选择一个类并组成我们的状态定义。

The image shows a State defintion that can be used to perform runtime state analysis of a running program

通过将Class放置在图表上并链接到Class注释,这些注释本身链接到特定的状态定义约束,我们可以获取所定义的所有状态定义的图片。我们将在后面的部分中说明如何执行此操作。

This diagram shows a class with three State Defintions, that can be used to detect Busy and Idle States in a running process

通过在相关源代码中放置一个或多个标记来设置状态点。

The image shows a Statepoint marker placed in a function to trigger State Analysis

使用状态分析器控件运行要分析的程序。当执行分析器遇到任何状态点时,将分析该类的当前实例。在实例的值域与状态定义匹配的情况下,记录状态。每次实例变化时,都会检测到新状态。控件列出发现的每个状态。在每个状态下,控件列出由类的实例进行的到其他状态的离散转换集。

The image shows a live view of state transitions detected in a running process using Enterprise Architect State Definitions

该信息可用于创建StateMachine。

使用相同的信息,我们可以轻松生成热图。此示例显示了“火车”类,其“公告”状态定义(作为链接注释)及其产生的热图。地图中的数字是百分比。从地图上我们可以看到,列车有46%的时间处于“在途”状态。

The image below shows one of the assets, a heatmap, that can be produced from State Analysis of a running process in Enterprise Architect

这是对产生我们的热图的“公告”状态定义的分析。

访问

色带

执行>工具>记录器>打开记录器>状态分析器

设计>元素>编辑器>约束

状态定义

状态定义由Class元素的Constraints属性组成。约束类型应命名为StateDefinition.name ,其中“名称”是您定义的标题的选择。只要选择了一个类,这些标题就会列在状态分析器的组合框中。您在运行程序之前从此组合框中选择一个定义。在我们的示例中,状态定义名为“ StateDefinition.Location”。它根据CTrain类实例的位置来定义状态。

状态定义由一个或多个规范组成。每个状态规范都以关键字“ statedef”开头,然后是一个或多个语句。语句定义描述状态的约束,还可以选择定义其值可用于命名状态的变量。语句用大括号括起来,并以半冒号终止,如下所示:

statedef {

位置= 0;

Departing.Name;

}

使用变量命名状态

在此示例中,“位置”是一个常量,而“ Departing.name”是一个变量。约束后附加了一条语句,并从变量值中指示要分配的国家名称。这是带有命名指令的定义。

statedef {

位置= 0;

Departing.Name;

}

name = Departing.Name;

使用文字命名状态

在此示例中,状态定义仅包含常量,并且状态使用文字来命名。

statedef {

位置= 100;

}

name ='Central';

定义多个州规范的单个州定义。

statedef {

乘客> 100;

}

name =忙;

statedef {

乘客> = 50;

}

名称=安静;

statedef {

乘客<50;

}

name =非常安静;

statedef {

乘客= 0;

}

名称=空闲;

默认状态

状态定义可以指定默认的“全部捕获”状态,该状态将在没有其他状态成立时描述实例的状态。您可以使用类似于以下内容的语句为定义定义默认状态:

statedef {

位置= 0;

Departing.Name;

}

name = Departing.Name;

默认=移动

在此示例中,在执行过程中,检测到的任何具有非零“位置”属性的实例都将被记录为处于“移动”状态。

您可以通过禁用状态分析器工具栏的下拉菜单上的“包括默认状态”选项来选择排除默认状态的记录。这将排除转换为记录的任何“默认”状态。

在显示状态定义的Class元素上创建注释

本节描述如何创建显示为该类定义的所有状态定义的类图。

动作

显示类图

打开一个现有的类图或创建一个新的类图。

创建指向Class元素的链接

将感兴趣的类作为链接拖到图上。

创建一个笔记元素

在图上创建一个note元素,并将其链接到该类。

将注释链接到状态定义

选择注释与类之间的链接,并使用其上下文菜单选择“将注释链接到元素特征”选项。

选择要显示在注释上的定义

在元素对话框中,从下拉组合中选择“约束”。将列出所有已定义的状态定义供您选择。

重复

对类上的其他任何状态定义重复该过程。