内容


分析模型和模型矩阵

学习如何尽早识别模型问题并改善模型治理

Comments

Model Metric Analysis Plug-in 概述

IBM® Rational® 软件的 Model Metric Analysis Plug-in 能够让你快速 获得模型的略图,并查明模型中可能发现问题的区域。通过快速并将它们在报告视图和分配视图中展示,你可以在很短的时间内查出模型中有疑问的区域。图 1图解了这个矩阵信息显示的清晰内容。

图 1. Distribution 和 Details 视图
Distribution 和 Details 视图
Distribution 和 Details 视图

这些视图能够让任何人只需看一眼就可以明白潜在的问题区域。每个项目或者企业的全体职员都可以利用参数选择的显示屏来为任何一个矩阵的错误阈值提出警告,然后这些阈值就可以在小组成员中进行共享。

模拟分析法还会为绝大多数模型元素产生 Kiviat 图,如图 1 中所显示的那样。这样还允许模型构建者为这个元素查看搜集的所有矩阵,从而确定它仅仅是一个有问题的矩阵或者这个元素是否在几个方面得分都很不理想。

图 2. Kiviat 图
Kiviat 图
Kiviat 图

这个 Model Metric Analysis Plug-in 有助于自动发现尽可能多的问题。绝大多数提供的矩阵都已经钩入 IBM® Rational® Software Delivery Platform 确认框架。这意味着无论模型是否已经生效,都会对这个矩阵进行求值,同时为任何一个元素产生一个模型警告,并且超越特殊矩阵当前的警告水平。最后,这个 Model Metric Analysis Plug-in 可以产生一个脱机的 HTML 报告,它可以用在模型核查中,或者高级构架师用它核查以确保当前设计中没有任何问题。

插件程序的安装

直接安装 Model Metric Analysis Plug-in。

  1. 下载这篇文章中的可靠性,有效性以及适用性 (RAS) 文件(请看下载资源) 在你的硬件驱动上进行定位。
  2. Start Rational Software Modeler (或者 IBM® Rational® Software Architect 或者 IBM® Rational® Systems Developer),选择File > Import
  3. 选择RAS > RAS Asset,并点击Next
  4. 浏览下载的 RAS 文件并接受关于可配置插件程序的警告。
  5. 点击Next
  6. 选择这个特性,接受许可协议,然后点击Finish
  7. 当出现提示时,重新启动使这个插件程序生效。

现在切换到Modeling透视图,你应该看到这个 Model Metric Analysis 视图 (图 3)。如果它是不可见的,你可以从列表中选择Window > Show View > Other并选择Modeling > Model Metric Analysis从而打开它。

图 3. Model Analysis 视图
Model Analysis 视图
Model Analysis 视图

插件的使用

你可以利用 Model Analysis 视图对你的模型进行交互式分析。

交互式分析

Model Analysis 视图能够为你的每一个模型产生矩阵,然后要么在详细的报告中要么在分配图中对它们进行查看。这个视图还为观察模型中特殊元素的多种矩阵提供了 Kiviat 图。你还可以产生一个矩阵报告,报告中包括所有不同矩阵的页面,还包括所有适当元素的 Kiviat 图。

让我们浏览一下分析一个模型所需要的步骤。

  1. 第一步是产生一些矩阵。
    1. 确保你想要分析的模型已经打开,然后在 Model Analysis 视图顶部的下拉框中选择它。
    2. 你要么只选择你想要搜集的矩阵,要么在需要选择所有时右键点击这个矩阵列表然后选择Select All
    3. 按住这个搜集矩阵按扭Generate Metrics或者右键点击并选择Gather Metrics

你可以在每个矩阵的右侧看到更新的值,标志着矩阵的总数和平均数,如图 4所示。

图 4.分析一个模型
分析一个模型
分析一个模型
  1. 接下来,你需要分析这个矩阵。你可以从这三个视图中挑选:详细资料,一个分布曲线,以及一个 Kiviat 图。下面的小单位对他们单独进行了描述,附带有其它选项。

Distribution Graph 视图

当你要在这个矩阵列表中选择一个单独的矩阵时,这个分布曲线将显示有一个特殊矩阵值元素的数量。你可以用这个曲线很快明了任何一个矩阵是否存在一定的问题。色彩标记的工具条是用来突出有警告或者错误水平值的,如图 5所示。

图 5. Distribution Graph 视图
Distribution Graph 视图
Distribution Graph 视图

Details 视图

此外,当你在这个矩阵列表中挑选一个单独的矩阵时,这个视图将为这个被选择的矩阵列出所有的元素以及它们的值。色彩标记的列表是用来突出警告和错误的。你可以通过点击标题来进行挑选,你还可以中通过右键点击并选择Open in Model Explorer(请看图 6)从列表导航到这个项目浏览器中的元素。

图 6. Details 视图
Details 视图
Details 视图

Kiviat 图视图

Kiviat 图为这个特殊的元素显示了很多矩阵。这是了解你所关注的这个特殊元素详细资料的最好方法。

  1. 首先,在这个矩阵列表中,你选择了你想看到的这个矩阵(你必须至少选择三个)。
  2. 然后,在 Kiviat 图视图 (图 7) 中,你要从这个下拉框列表中选择你所感兴趣的这个元素,这时 Kiviat 图也会被绘出。

如果这个矩阵中的任何一个出现了警告或者错误,Kiviat 图都会显示适当的颜色。

图 7. Kiviat Diagram 视图
Kiviat Diagram 视图
Kiviat Diagram 视图

Metric 参数

每个矩阵的阈值都是通过 Preferences 对话框来控制的。这样允许你跨越项目强制执行标准,并且快速确定一个模型是否与那些标准相符合。这个参数允许使用色彩配置来突出不同的水平,同时还能标明每个矩阵中警告或者错误的阈值。你可以在Window > Preferences > Modeling > Model Metric Preferences(图 8)中找到这些参数。

图 8. Metric 参数
Metric 参数
Metric 参数

确认规则

这样可以更容易地鉴定模型中的问题,矩阵和简名规则会构建在这个确认框架中。这意味着一旦模型没确认,任何超过警告阈值的矩阵都会被报告出来。你可以通过修改Window > Preferences > Modeling Validation > Constraints(图 9)中的确认参数对包含于这个确认中的矩阵进行控制。

图 9. 确认规则
确认规则
确认规则

报告

这个插件程序提供了一个报告机制,你可以在脱机时用它来分析结果或者将矩阵发表为 HTML 格式。根据这些步骤产生一个报告:

  1. 首先,为你所感兴趣的模型产生一个矩阵。
  2. Model Analysis视图的工具条上,点击 Reporting 按扭Reporting button (icon)
  3. 你将看到一个提供位置的提示,在短暂的延迟之后,这个报告将会打开,上面显示着每个矩阵的页面以及每个元素 Kiviat 图的单独页面 (图 10)。
图 10. 报告案例
Example of a report screen capture
Example of a report screen capture

扩展的插件程序

Model Metric Analysis Plug-in 利用 Eclipse 扩展点机制来提供每个矩阵。因此,如果你愿意可以很容易地添加你自己的模型。

扩展点计划和案例

列表 1. 扩展点计划
<element name="extension">
      <complexType>
         <sequence>
            <element ref="metric"/>
         </sequence>
         <attribute name="point" type="string" use="required">
            <annotation>
               <documentation>
                  
               </documentation>
            </annotation>
         </attribute>
         <attribute name="id" type="string">
            <annotation>
               <documentation>
                  
               </documentation>
            </annotation>
         </attribute>
         <attribute name="name" type="string">
            <annotation>
               <documentation>
                  
               </documentation>
            </annotation>
         </attribute>
      </complexType>
   </element>

   <element name="metric">
      <complexType>
         <attribute name="class" type="string" use="required">
            <annotation>
               <documentation>
                  
               </documentation>
               <appInfo>
                  <meta.attribute kind="java"
                   basedOn="com.rsxplugins.views.modelanalysis.core.IMetric"/>
               </appInfo>
            </annotation>
         </attribute>
      </complexType>
   </element>

列表 2 是一个探究这个插件程序文件的矩阵扩展点宣言的案例。

列表 2. 一个矩阵扩展点声明的例子
      <extension
         id="com.ibm.uk.views.metrics.NumberOfClassAttributes"
         name="com.ibm.uk.views.metrics.NumberOfClassOAttributes"
         point="com.ibm.uk.views.modelanalysis.MetricProvider">
         <metric
             class="com.ibm.uk.views.modelanalysis.metrics.ClassAttributesMetric">
         </metric>
      </extension>

IMetric 界面

显示在列表 3中的 IMetric 界面必须被执行并且在这个扩展点宣言中被引用。

列表 3. IMetric 界面
public interface IMetric {

	public String getName();
	public String getShortName();
	public String getHtmlReportName();
	
	public boolean isApplicable(NamedElement element);
	
	public MetricResult[] getMetrics(NamedElement element);
	
	// threshold methods
	public void setDefaultPreferences();
	public int getWarningThreshold();
	public int getErrorThreshold();
	public void setWarningThreshold(int value);
	public void setErrorThreshold(int value);
}
列表 4. 执行 Number of Class Attributes 矩阵的代码案例
public class ClassAttributesMetric extends AbstractMetricAndModelConstraint{

	public ClassAttributesMetric() {
		super();

	}

	public String getName() {
		return "Attributes per Class";
	}

	public boolean isApplicable(NamedElement element) {
		boolean ok = false;
		if ( element instanceof Class)
		{
			ok = true;
		}
		return ok;
	}

	public MetricResult[] getMetrics(NamedElement element) {
		ArrayList results = new ArrayList();
		if (isApplicable(element))
		{
			if (element instanceof Class)
			{
				Class theClass = (Class)element;
				int attrCount = theClass.getOwnedAttributes().size();
				results.add(new MetricIntResult(this,theClass,attrCount));
			}
		}
		return (MetricResult[]) results.toArray(new MetricResult[results.size()]);
	}
	
	
	//
	// Preferences API's
	//
	public void setDefaultPreferences()
	{
		IPreferenceStore prefs = ModelAnalysisPlugin.getDefault().getPreferenceStore();
		prefs.setDefault(MetricPreferences.CLASS_ATTRIBUTE_METRIC_WARNING_THRESHOLD,10);
		prefs.setDefault(MetricPreferences.CLASS_ATTRIBUTE_METRIC_ERROR_THRESHOLD,20);
	}
	public int getWarningThreshold()
	{
		IPreferenceStore prefs = ModelAnalysisPlugin.getDefault().getPreferenceStore();
		return prefs.getInt(MetricPreferences.CLASS_ATTRIBUTE_METRIC_WARNING_THRESHOLD);
	}
	public int getErrorThreshold()
	{
		IPreferenceStore prefs = ModelAnalysisPlugin.getDefault().getPreferenceStore();
		return prefs.getInt(MetricPreferences.CLASS_ATTRIBUTE_METRIC_ERROR_THRESHOLD);
	}
	public void setWarningThreshold(int value)
	{
		IPreferenceStore prefs = ModelAnalysisPlugin.getDefault().getPreferenceStore();
		prefs.setValue(MetricPreferences.CLASS_ATTRIBUTE_METRIC_WARNING_THRESHOLD,value);
	    
	}
	public void setErrorThreshold(int value)
	{
		IPreferenceStore prefs = ModelAnalysisPlugin.getDefault().getPreferenceStore();
		prefs.setValue(MetricPreferences.CLASS_ATTRIBUTE_METRIC_ERROR_THRESHOLD,value);
	}

	// validation methods
	public IStatus validate(IValidationContext context) {
		return super.validate(context);
	}

	public String getHtmlReportName() {
		return "AttributesPerClass.html";
	}

	public String getShortName() {
		return "APC";
	}
}

总结

Model Metric Analysis Plug-in 通过给你这些额外的性能帮助你维护和管理高质量模型:

  • 模型的交互式分析和问题的确认
  • 通过对模型确认框架额外添加40多个矩阵和规则可以自动发现存在的问题
  • 通过发表的模型矩阵报告可以脱机审核模型

下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Rational
ArticleID=280204
ArticleTitle=分析模型和模型矩阵
publish-date=01032008