Page tree

在当前页:

目标受众:

CAST管理员

介绍

确保正确发现事务是一个多步骤的过程,对于开箱即用的不受支持的应用程序来说,这可能是一个复杂且耗时的过程。CAST事务发现算法的核心是理解在目标应用程序的源代码分析过程中发现的对象之间的链接。

当源代码被传递并设置为当前版本时,CAST应用智能平台自动设置默认依赖关系规则:扫描源代码对象以查找对其他对象的引用,并在适当的情况下创建链接。不是所有以这种方式生成的链接都是有效的,因此需要由CAST应用智能管理员进行验证。

缺少链接是由于找不到对象之间的引用而导致的,也可能是由于缺少依赖项或存在不受环境配置文件开箱即用支持的框架。在这种情况下,可以通过定义新的依赖项、自定义关联规则(使用CAST参考图工具)和/或新的自定义环境配置文件来添加新的链接,这些配置文件是为扩展开箱即用的支持而专门开发的。

对于跨技术链接,外部链接将识别并记录两个对象之间的链接,而这些对象的有效性无法精确确定。这些链接被标记为“动态”。CAST应用智能管理员需要检查这些动态链接,以确定所讨论的链接是否合法(即有效),或者是否应忽略该链接并将其从分析服务中删除。

Why does it matter?

检查动态链接是强制性步骤。这是一个非常重要的步骤,因为它影响CAST Engineering Dashboard中的以下诊断结果:

  • 体系结构检查器规则(体系结构模型)
  • 高扇入工件(依赖项)
  • 高扇出工件(依赖项)
  • 未引用组件(死代码)
  • 其他体系结构规则

哪些技术受到影响?

  • JEE
  • .NET
  • C, C++
COBOL和Pro*C受影响较小,因为嵌入式SQL会生成纯链接。

如何手动检查动态链接

动态链接管理器(DLM)工具可从CAST Management Studio访问,必须首先用于查看动态链接。您可以从CAST Management Studio应用程序编辑器(执行选项卡)访问DLM:

链接状态

链接可以有三种状态:

  • 待审查:分析完成后打开动态链接管理器时,链接处于此状态。
  • 忽略:当您在检查后勾选链接时,链接就处于这种状态(它被证明是不正确或错误的)。默认情况下,被忽略的链接不会显示在GUI中 — 切换“隐藏已查看链接”按钮以查看它们。
  • 已验证:当您在检查后将链接标记为“已验证”时,链接将处于此状态(并且它被证明是正确的)。默认情况下,已验证的链接不会显示在GUI中 — 切换“隐藏已查看链接”按钮以查看它们。

无效链接 — 如何忽略它们

在检查创建链接的代码(通过勾选链接旁边的框)后,必须“忽略”无效链接:

  • 在以下情况下忽略动态链接:
    • 源代码使用记录器信息消息
    • 在消息框或框架中显示的基本文本

这些操作将在下一次重新分析中保持有效。

有效链接 — 如何验证它们

在查看创建链接的代码后,必须“验证”有效链接(通过右键单击链接并选择“验证”)。

  • 在以下情况下验证动态链接:
    • 代码使用对SQL查询的操作

    • 代码使用从业务层到数据库表或函数的直接调用

    • 代码链接应用程序的客户端部分和服务器部分

这些操作将在下一次重新分析中保持有效。

  • 如果有疑问,请忽略未通过参数化/筛选规则或手动选择自动解决的动态链接(见下文)。
  • 默认情况下,假设所有动态链接都经过验证,因此都包含在分析服务中。
  • 您可以在审查期间关闭动态链接管理器,更改将持续存在。

Warning

动态链接管理器显示了通过CAST Management Studio分析的所有应用程序的按分析项目(标准配置中每个分析单元有一个或多个)分组的动态链接。因此,显示的列表可能与您正在处理的应用程序无关。此外,无法筛选您正在使用的特定应用程序。

在开始查看动态链接之前,必须确保您正在使用正确的应用程序,方法是尝试将DLM工具中的分析作业名称与为当前版本定义的分析单元相匹配(请参见下图):

点击放大

自动动态链接检查

不鼓励手动查看动态链接(虽然是合法的方法),因为它不会首先解决触发检测的基本情况,而且可能非常耗时,特别是如果要查看大量动态链接。因此,CAST建议使用以下两个选项来自动化此过程。

请注意,任何自定义环境配置文件或动态链接规则文件都可以打包为自定义的CAST应用智能平台扩展,以便在更广泛的CAST用户社区中共享。

参数化

当使用方法的参数创建链接时,可以利用方法参数化自动忽略或验证链接。参数化规则允许您在重新运行分析时自动排除动态链接。此外,参数化规则可以在未来的分析中重用(通过环境概要文件),从而支持分析过程的自动化。CAST提供了一些默认的参数化规则,您也可以创建自己的参数化规则。

方法在自定义环境配置文件中定义,可以在动态链接管理器中选择这些自定义配置文件:

动态链接规则

动态链接管理器规则文件使您能够创建基于XML的筛选规则,这些规则可以通过命令行进行测试,然后在应用程序、分析单元技术级别的CAST Management StudioGUI中应用:每次运行分析时,都将应用筛选规则,根据需要验证或忽略链接。

实例规则

以下面的示例规则文件及其中定义的筛选器为例:

<?xml version="1.0" encoding="utf-8"?>
<dynamicLinksRules xmlns="http://www.castsoftware.com/DlmRulesModel.xsd" >
<rule name="Rule1" action="validate" >
	<scope>
		<application name="app1"/>
		<application name="app2">
			<analysisUnit name="au21"/>
		</application>
		<application name="app2">
			<technology name="J2EE"/>
		</application>
	</scope>
	<calleeName regexp="a2"/>
	<calleeType names="A_Metamodel_Type"/>
	<callerFullName regexp="a4"/>
</rule>

<rule name="Rule2" action="ignore">
	<calleeFullName regexp="a4"/>
</rule>
</dynamicLinksRules>

什么时候使用此规则:

  • 首先处理规则1(这有一个验证操作)
  • 将考虑分析服务中可用的整套未审查动态链接。

  • 然后按以下顺序执行以下操作:

    • 选择包含所有链接作为范围:

      • 应用程序app1

      • 位于应用程序 app2中的分析单元au21

      • 应用程序app2中的所有J2EE 链接

    • 按被调用者名称= a2筛选
    • 按被调用者类型 = A_元模型_类型筛选
    • 按调用者全名= a4筛选
    • 将结果标记为“验证”
  • 然后处理规则2
  • 将考虑分析服务中可用的整套未审查动态链接(根本没有指定范围),但已由规则1处理的链接除外。
  • 然后按以下顺序执行以下操作:
    • 按被调用者全名= a4筛选
    • 将结果标记为“忽略”

启用规则

在CAST Management StudioGUI中关联规则文件,请执行以下操作。

应用程序
要在应用程序级别应用筛选规则(即运用于应用程序中存在的所有分析单元和技术),请使用:
  • 应用程序编辑器 > 生成选项卡 >通用选项卡>动态链接规则


技术
要在技术级别应用筛选规则(即运用于应用程序中存在的所有选定技术),请使用:
  • 应用程序编辑器 > 生成选项卡 > [技术_类型] 选项卡> 动态链接规则:


分析单元
要在分析单元级别应用筛选规则(即仅运用于分析单元),请使用:
  • 分析单元编辑器 > 生成选项卡 > 动态链接规则:


技术说明

C/C++中DLM源代码查看器的局限性

查看源代码

C++链接可能有几个不同的相关代码片段(在各种文件中)。当一个服务器对象在同一调用程序的多个文件中被引用时,CAST的动态链接管理器将只显示在一个文件中找到的引用。

例如:

<pre>file f1.h :
....
void f(const CString&amp; s = CString(&quot; T1&quot; ) );
...
file f2.cpp
...
void f( const CString&amp; s )
{
//...
LPSTR c = &quot;T1&quot;;
//...
}
...</pre>

在本例中,T1是一个服务器对象,函数f引用T1。引用分布在两个文件f1.h和f2.cpp之间。

尽管有多个文件包含对T1的引用,动态链接管理器将只显示一个文件(f1.h或f2.cpp),并突出显示其中的所有引用。因此,不会显示其他文件中的所有引用。在本例中,如果动态链接管理器显示的文件是f2.cpp,则只突出显示一个引用,尽管f1.h中有另一个引用。因此,很难确定到T1的链接是有效的还是应该被忽略。

为了解决这个问题,你可以使用CAST Enlighten中的代码查看器。它显示所有书签。这允许基于完整信息评估动态链接。

宏命令

动态链接将基于宏中定义的源代码创建到宏。但是,在动态链接管理器中检查这些动态链接时,链接似乎源自宏并仅基于宏中定义的字符串调用任何相应的对象。这是分析器的功能限制。为了检查这些链接的有效性,需要手动打开定义宏的相应文件。

  • No labels