前页 | 后页 |
状态分析仪
状态分析器是一项功能,可以分析,检测和记录类实例的状态。该功能通过组合状态定义(在类上定义为约束)和称为状态点的标记而起作用。它适用于Execution Analyzer支持的任何语言,包括Microsoft.NET,Mono,Java和本机C ++。
我们首先选择一个类并组成我们的状态定义。
通过将Class放置在图表上并链接到Class注释,这些注释本身链接到特定的状态定义约束,我们可以获取所定义的所有状态定义的图片。我们将在后面的部分中说明如何执行此操作。
通过在相关源代码中放置一个或多个标记来设置状态点。
使用状态分析器控件运行要分析的程序。当执行分析器遇到任何状态点时,将分析该类的当前实例。在实例的值域与状态定义匹配的情况下,记录状态。每次实例变化时,都会检测到新状态。控件列出发现的每个状态。在每个状态下,控件列出由类的实例进行的到其他状态的离散转换集。
该信息可用于创建StateMachine。
使用相同的信息,我们可以轻松生成热图。此示例显示了“火车”类,其“公告”状态定义(作为链接注释)及其产生的热图。地图中的数字是百分比。从地图上我们可以看到,列车有46%的时间处于“在途”状态。
这是对产生我们的热图的“公告”状态定义的分析。
访问
色带 |
执行>工具>记录器>打开记录器>状态分析器 设计>元素>编辑器>约束 |
状态定义
状态定义由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元素,并将其链接到该类。 |
将注释链接到状态定义 |
选择注释与类之间的链接,并使用其上下文菜单选择“将注释链接到元素特征”选项。 |
选择要显示在注释上的定义 |
在元素对话框中,从下拉组合中选择“约束”。将列出所有已定义的状态定义供您选择。 |
重复 |
对类上的其他任何状态定义重复该过程。 |