在此页:
目标用户:
CAST 管理员
CAST AIP有哪些模块
应用和模块
CAST应用智能平台(AIP)报告系统中声明的每个应用的等级和指标。将能够交付应用源代码的增量版本,分析每个版本,并为该版本的CAST评估模型的每个度量获取一个值。这就是所谓的应用快照。
为了获得粒度更细的等级和指标,可以在每个应用中定义模块。很简单,模块是应用的子集,即应用的各个部分。除了默认的应用级计算之外,AIP还将计算应用中每个现有模块的等级和指标。
AIP很少对模块的配置方式施加约束。它们可以重叠,不需要覆盖整个应用。本节的其余部分将解释模块的配置如何与AIP中的其它特性进行交互。
模块和应用边界
在AIP中模块定义了所谓的应用边界。也就是说,所有模块的并集将被视为应用中要测量的周长。应用中不属于所有模块的部分将不被考虑作为应用级别度量
- 对于质量测量,对超出边界对象的违规不包括在等级和度量中。实际上没有考虑对象本身,有关如何计算成绩的详细信息请参见此页。
- 对于AFP测量,位于边界之外的对象将不被视为入口点、数据实体或端点集合的一部分。但是它们仍然可以被视为事务图的一部分。有关AFP计算的详细信息请参见此页。
- 对于AEP测量,边界之外的对象将不会被视为扩展调用图的一部分,因此对这些对象的更改不会视为增强工作。有关AEP计算的详细信息请参见此页。
请注意可以强制应用边界与完整的应用匹配,这样就不会错误的排除任何对象。这将在下一节详细介绍。
模块和等级
由于AIP 8.1在使用默认分析参数时,各个模块的等级与完整应用所报的等级没有关系。每个都是独立计算的,如此页所述。
AIP还支持其它的等级计算模式,其中应用等级计算为模块的等级平均值。这些模式可以在CAST管理器中启用:
请注意在AIP 8.0之前,这些模式(模块的平均值)是所有应用的默认使用模式,并且可以为从这些版本升级的应用保留模式。但请注意改变计算方式会对等级产生较大影响,请慎重考虑。
AIP仪表盘中模块的可见性
CAST AIP仪表盘利用每个应用模块的分离来提供更好的分析和深入挖掘代码质量的功能。
健康仪表盘(HD)有一个专用的“Modules treemap”屏幕,其中显示每个模块,根据健康因子之一(TQI、安全性、健壮性……)着色,并根据主要的大小测量之一(代码行、功能点……)调整大小。用于着色和大小调整的指标可以随意更改。
健康仪表盘还支持在应用概览页面中使用treemap模块的微型版本作为图块:
在工程仪表盘(ED)中,当风险调查视图中分析为应用报告的质量规则违规时,可以将当前视图限制为应用的给定模块:
工程仪表盘还支持每个应用主页上的特定图块,显示违规质量规则最多的模块:
模块和后台事实
CAST AIP支持所谓的“后台事实”。像其它等级和测量一样的度量标准,但并不是由AIP计算。相反可以手动将正确的值注入到应用的每个快照中。可以用于外部度量,如开发成本、人员数量或缺陷数量。它们将显示在AIP仪表盘为正常的等级,这样更容易的解释。
有关详情,请参见此页。
如何配置模块
本节将描述如何使用Cast 管理器中可用的选项来配置模块。有关更多细节和界面 截图,请参见CMS帮助“定义用户定义的模块”。
简单模块选项
如上所述,默认的分析配置将完整的应用视为单个模块,称为“完整的应用模块”。请注意即使定义了细粒度模块,也可以保持这个“完整应用模块”的创建。这是强制应用边界与完整应用匹配的一种方法。
AIP还可以为应用的每个分析单元自动创建模块。这是获得接近项目组织模块组织的好方法,因为分析单元基于源代码、模式或构建配置的结构。然而这将使模块定义不稳定,因为它依赖于底层源代码的更改。在大型项目中,还会产生大量的模块。
基于过滤器的自定义模块定义
过滤器选项
自定义模块的配置基于对象过滤器。过滤器是一组定义要包含在自定义模块中主要对象的条件。应用模型中任何匹配这些条件的对象都将被视为主要对象。
可以将多个对象过滤器关联到给定的模块;将包括匹配任何过滤器的对象(对象过滤器使用逻辑OR应用)。
对象过滤器支持以下标准:
- 技术:所选对象必须匹配的技术列表
- 分析单元:所选对象必须属于的分析单元的列表。注意如果删除了分析单元(例如,DMT根据项目配置创建的分析单元,在新版本中会消失),过滤器配置将自动更新。
- 对象类型:选定对象的强制对象类型列表。
- 对象名称:在对象短名称、全名或路径(存储在分析服务模式中)上进行过滤的可能性。可以使用三种模式进行过滤:精确匹配,如(SQL操作符)或使用正则表达式。可以定义几个过滤模式。将选择匹配任何命名模式的对象(使用逻辑OR应用名称模式)。
- 特别是对象路径上的regexp模式匹配是基于代码存储库结构定义模块最安全的方法。
对于给定的对象过滤器,可以单独启用每个过滤条件。当启用多个条件(例如,技术和名称,或者分析单元和对象类型)时,只有匹配所有条件的对象才会包含在对象过滤器的结果中(条件使用逻辑AND)。
注意当使用基于对象路径的对象名称过滤器时(如存储在分析服务模式中的那样),一些对象(特别是Java包)不会与路径一起保存,因此这些对象不会包含在模块中。
基于过滤器模块的最终内容
对象过滤器不确定完整的模块内容,只确定主要对象。应用对象模型中包含在一个主要对象中的所有对象,也包括在模块中(这些是次要对象)。例如,如果.NET名称空间匹配过滤器,则模块中包含在该名称空间中定义的所有类和功能。如果一个Java类匹配一个过滤器,那么它包含的所有变量和方法也都包括在内。
可以使用“Module content overview”选项预览模块过滤器的结果(主对象和次对象,因此是最终的模块内容):
要使评审工作正常,必须至少分析应用一次,并且预览将基于该分析生成的应用对象模型。
未分配对象模块选项
定义自定义模块时,可以将AIP配置为自动创建“Unassigned Object Module”,该模块将包含与其它模块的过滤条件不匹配的所有对象。强制应用边界匹配完整应用的一种方法是:
明确内容模块
如果对象过滤器提供的可能性与需求不匹配,可以基于显式内容定义自定义模块。需要在CAST AIP分析服务模式上提供一个SQL查询,该模式返回必须包含在模块中的对象。注意对于Explict content模块,主/辅助对象的概念并不适用。模块中只包含查询返回的对象。
需要插入此对话框的SQL查询,必须使用CAST预定义格式。基本格式如下,已插入查询字段:
Delete From CI_OBJECTS_SET Where SET_NAME = '$(ModuleName)' Insert Into CI_OBJECTS_SET(SET_NAME, OBJECT_ID, ERROR_ID) Select '$(ModuleName)', o.OBJECT_ID, 0 From §CDT_OBJECTS o Where /*fill where clause here*/
这个查询的基本功能如下:
- 清空CAST分析服务中的CI_OBJECTS_SET表,与正在处理的当前用户定义模块相关的任何现有条目(这是由$(ModuleName)宏自动确定的)。
- 将新数据插入CI_OBJECTS_SET表中,该表根据以下信息确定必须包含哪些特定对象:
- CAST分析服务中的CDT_OBJECTS表(这个表列出了由于成功完成分析而保存到CAST分析服务中的所有对象)
- WHERE子句,允许从CDT_OBJECTS表中提取特定的项
示例
要指定CAST分析服务中的所有对象都是“SQL Tables”,请在WHERE子句中添加红色文本,修改标准模块内容模板:
Delete From CI_OBJECTS_SET Where SET_NAME = '$(ModuleName)' Insert Into CI_OBJECTS_SET(SET_NAME, OBJECT_ID, ERROR_ID) Select '$(ModuleName)', o.OBJECT_ID, 0 From §CDT_OBJECTS o Where o.OBJECT_TYPE_STR = 'SQL Table'
示例
有关在应用中定义模块的一些典型示例,请参见以下页面。