Page tree
Skip to end of metadata
Go to start of metadata

CAST AIP提供扩展默认情况下标准测量集的可能性。可以使用名为XXXCastMetrics.xml的XML文件定义“开箱即用”配置的这个插件。对于要在其上定义自定义测量标准的每种技术,必须创建一个对应的文件。

自定义指标可以为:

自定义度量是基于grep的度量,使用正则表达式生成所需的数据。不是基于技术的语法——如果存在。

请注意:

  • 存储在CAST安装文件夹中的旧版CastMetrics.xml文件在分析/快照生成期间不再使用。如果以前已经自定义这个文件,那么内容必须被移动到一个或多个XXXCastMetrics.xml文件中。强烈建议为每种自定义语言提供一个文件,或者为标准语言提供一个自定义指标文件。
  • 不需要在CAST服务管理器中使用来自硬盘的Load元模型选项——只要在运行分析/生成快照时出现XXXCastMetrics.xml文件,那么就会生效。

文件命名约定

XML文件名称中的XXX表示,只要文件名的末尾保留CastMetrics.xml,可以自由选择如何命名文件。CAST建议使用技术名称作为CastMetrics.xml的前缀,但这不是必需的。此外不限于三个字符。例如可以使用一个名为CASTXSLCastMetrics.xml的文件。

确保考虑到XXXCastMetrics.xml文件   

步骤 1——文件位置

必须手动将XXXCastMetrics.xml文件复制到以下位置,以便在分析过程中生效:

%PROGRAMDATA%\CAST\CAST\<version>\Configuration\Languages\<technology folder name>\XXXCastMetrics.xml

插件自定义UA语言包分析的技术指标时

  • 当插件由自定义UA语言包分析的技术指标时,<technology folder name>文件夹将已经存在。它与用于存储语言包中使用的XXXMetaModel.xml文件和XXXLanguagePattern.xml文件的文件夹相同。
  • 此外该文件夹中可能已经存在XXXCastMetrics.xml文件——如果是这种情况,CAST建议创建一个附加的XXXCastMetrics.xml文件来配置自定义的指标,以避免修改为语言包配置的XXXCastMetrics.xml文件。以这个PHP语言包为例——已经有一个PHPCastMetrics.xml文件,并且为自定义的度量标准创建了一个附加的PHPCustomCastMetrics.xml文件:

当插件由标准CAST AIP分析器分析的技术指标时

  • 当为Cobol、VB或标准CAST AIP分析器支持的其它技术扩展指标时,需要创建<technology folder name>文件夹。可以通过使用与AIP中相同的文件夹名称找到要使用的名称——跳转到以下位置,查看核心AIP技术名称列表:
<CAST_AIP_installation_folder>\Configuration\Languages\
  • 以扩展Cobol技术为例——CobolCastMetrics.xml文件应该位于一个名为Cobol的文件夹中:

步骤2——使用CAST 服务管理器安装<all users dir>插件

现在需要运行CAST Server Manager > Manage Extensions来安装<all users dir>插件。这将确保自定义的XXXCastMetrics.xml被正确安装。

在为自定义的UA语言包和核心AIP技术创建自定义度量时,必须完成此步骤。

XML 文件编码

语言包中使用的XXXCASTMetrics.xml文件必须使用UTF-8编码,如下所示:

  • XML声明(文件的第一行)必须包含UTF-8编码属性:
<?xml version="1.0" encoding="utf-8" ?>
  • XML文件必须以UTF-8格式保存。

结构

文件XXXCastMetrics.xml的通用结构    

下面是一个示例XXXCastMetrics.xml文件:

<METRIC_LIST>
   <METRIC Name="<Name of the metric>" TYPE="<INF SUB TYP>">
      <LANGUAGE NAME="AAA-LANGUAGE">
         <!-- description of the metric -->
      </LANGUAGE>
   </METRIC>
   <METRIC Name="<Name of the another metric>" TYPE="<INF SUB TYP>">
      <LANGUAGE NAME="AAA-LANGUAGE">
         <!-- Description of the metric -->
      </LANGUAGE>
   </METRIC>
</METRIC_LIST>

每个<METRIC>标记定义要创建的指标的名称和类型。类型是指标的ID,在CAST分析服务中也称为InfSubTyp。

该指标的名称和ID对于CAST分析服务中的所有指标必须唯一(有关ID的更多信息,请参见位于CAST安装文件夹中的Configuration\ metrics \Configuration\MetricsName.xml)。

希望使其可用的每种技术声明必须为每个度量。在下面的示例中,度量"Use of printf in a do/while"的ID为3000000,可用于c++。

   <METRIC Name="Use of printf in a do/while" TYPE=3000000>
      <LANGUAGE Name="C-LANGUAGE">
         <!-- Description of the metric for  C/C++ -->
      </LANGUAGE>
</METRIC>

注意用户指标的ID必须高于2000000。

语言名称

每个指标必须包含<LANGUAGE NAME>标记。例如:

<LANGUAGE NAME="C-LANGUAGE">

请使用下列其中一种:

  • ASP-LANGUAGE
  • ASPX-LANGUAGE
  • ABAP-LANGUAGE
  • ANSISQL-LANGUAGE
  • ASETSQL-LANGUAGE
  • BO-LANGUAGE
  • C-LANGUAGE
  • COBOL-LANGUAGE
  • C-SHARP-LANGUAGE
  • DB2-LANGUAGE
  • DB2ZOS-LANGUAGE
  • PROPFORMS-LANGUAGE
  • FORMS-LANGUAGE
  • HTML-LANGUAGE
  • IMS-LANGUAGE
  • JSP-LANGUAGE
  • JAVA-LANGUAGE
  • JCL-LANGUAGE
  • JAVA-SCRIPT-LANGUAGE
  • MSTSQL-LANGUAGE
  • PB-LANGUAGE
  • VB-LANGUAGE
  • VB-SCRIPT-LANGUAGE
  • VB-DOTNET-LANGUAGE
  • UNIVERSAL-LANGUAGE

配置搜索模式

 为了优化代码搜索,可以激活如下标签:

  • 对于源代码中的搜索,使用标签:<SEARCH_IN_CODE>
  • 对于注释中的搜索,使用标签 <SEARCH_IN_COMMENT>
  • 对于字符串中的搜索,使用标签<SEARCH_IN_STRING>
  • 对于嵌入式SQL中的搜索,使用标签<SEARCH_IN_EMBEDDEDSQL>
  • 对于区分大小写的搜索,使用标签<SEARCH_CASE_SENSITIVE>
  • 如果只需要匹配整个字,那么使用标记 <MATCH_WHOLE_WORD_ONLY>

搜索部分和正则表达式

有两种方法可以用来搜索代码:

  • 简单搜索
  • 嵌套搜索

标签<INIT>提供了模式匹配指标初始化值的可能性。例如,如果度规包含:

< INIT > 3 < / INIT >

这意味着值3将被添加到推入CAST分析服务度量的每个值中。对于不匹配的对象,不存在指标的初始化。

简单搜索

简单搜索基于一个或多个正则表达式(RegExp)。如果一个或多个正则表达式匹配,则搜索成功。

嵌套搜索

建议使用以下模式进行搜索:

BEGIN
  CONTENT
END

示例:

...
   <EMBEDDED>
      <BEGIN>
         <REGEXP> RegExp for the begining of the Pattern </REGEXP>
      </BEGIN>
      <VALUE>
         <REGEXP> RegExp for the content of the pattern</REGEXP>
      </VALUE>
      <END>
         <REGEXP> RegExp for the END of the Pattern </REGEXP>
      </END>
   </EMBEDDED>
...
附加的选项
<THRESHOLD>

<THRESHOLD>选项为给定对象提供匹配数量定义阈值的可能性。如果该值低于阈值,则忽略该值。如果不是这种情况,则在CAST分析服务中为该指标设置值“1”。

例如,考虑以下指标:

...
   <EMBEDDED>
      <THRESHOLD>5</THRESHOLD>
      <BEGIN>
         <REGEXP>do</REGEXP>
      </BEGIN>
      <VALUE>
         <REGEXP>printf</REGEXP>
      </VALUE>
      <END>
         <REGEXP>while</REGEXP>
      </END>
   </EMBEDDED>
...

关于以下c++源代码:TestThreshold.cpp       

void testThreshold()
{
  printf("Out of the loop");
  do
  {
     printf("Hello World!");
     printf("Hello World!");
     printf("Hello World!");
     printf("Hello World!");
  }
  while(true);
}

度量将匹配四次(do/while中出现的每个printf匹配一次)。但是由于阈值设置为5,所以CAST分析服务中不会保存任何值。如果阈值被设置为更低的4,值1将被保存。

<ADD>

<ADD>标签提供了一种强制指标来计算匹配模式嵌套级别的可能性。这里定义的值将被添加到每个嵌套的BEGIN/END语句的度量值中。

示例1:考虑以下指标:

...
   <EMBEDDED>
      <ADD>2</ADD>
      <BEGIN>
         <REGEXP>do</REGEXP>
      </BEGIN>
      <VALUE>
         <REGEXP>printf</REGEXP>
      </VALUE>
      <END>
         <REGEXP>while</REGEXP>
      </END>
   </EMBEDDED>
...

下面的C++源代码:TestAdd.cpp

void testAdd()
{
  printf("Out of the loop");
  do
  {
    do
    {
      do
      {
        printf("Hello World!");
      }
      while(true);
    }
    while(true);
  }
  while(true);
}

对于上面的示例,该指标将为BEGIN/CONTENT/END找到一个匹配项,为三个do/while嵌套循环找到六个匹配项。因此值7将保存在CAST分析服务中。

示例2:考虑用(简化语法)定义的度量A:

INIT=5
ADD=2
BEGIN=AAA
VALUE=ZZZ
END=BBB

度量B有:


INIT=5
ADD=0
BEGIN=AAA
VALUE=ZZZ
END=BBB

那么对于以下代码:

AAA
   ZZZ
BBB


  • metric A will be valued 5 + 2 + 1 = 8 (i.e. INIT + ADD + Number of MATCHES)
  • metric B will be valued 5 + 1 = 6 (i.e. INIT + Number of MATCHES)

而对于以下代码:

AAA
   AAA
      ZZZ
   BBB
BBB
  • metric A will have 5 + 2 + 2 + 1 = 10 (i.e. INIT + 2 x ADD + Number of MATCHES)
  • metric B will have 5 + 1 = 6 (i.e. INIT + 2 x ADD + Number of MATCHES)
  • No labels