代码质量测试会评估应用程序代码的质量。 它是仅代码质量管道的核心目标,在所有非生产和生产管道中立即执行构建步骤。
请参阅配置CI-CD管道以进一步了解不同类型的管道。
在“代码质量测试”中,将扫描源代码,确保它满足某些质量标准。 目前,这是通过SonarQube和使用OakPAL的内容包级别检查的组合来实现的。 有100多个规则,这些规则结合了通用Java规则和AEM特定规则。 某些AEM特定规则是根据AEM工程部门的最佳实践创建的,称为自定义代码质量规则。
您可以在此处](/docs/experience-manager-cloud-service/implementing/cloud-manager/assets/CodeQuality-rules-latest-CS.xlsx?lang=zh-Hans)下载规则[的完整列表。
三层门
此代码质量测试步骤中有三层结构,用于解决已发现的问题:
关键:这些问题由门确定,导致管道立即失效。
重要说明:这些是由门标识的问题,导致管道进入暂停状态。部署经理、项目经理或业务所有者可以改写问题,在这种情况下,管道将继续,或者他们可以接受问题,在这种情况下,管道会因故障而停止。
信息:这些问题由网关确定,它们仅用于提供信息,对管道执行没有影响
此步骤的结果以Ratings的形式提供。
下表总结了每个“严重”、“重要”和“信息”类别的等级和故障阈值:
名称 | 定义 | 类别 | 失败阈值 |
---|---|---|---|
安全等级 | A = 0漏洞 B =至少1个次要漏洞 C =至少1个主要漏洞 D =至少1个关键漏洞 E =至少1个阻止程序漏洞 |
关键 | < B |
可靠性等级 | A = 0错误 B =至少1个次要错误 C =至少1个主要错误 D =至少1个关键错误E =至少1个阻止程序错误 |
重要信息 | < C |
可维护性等级 | 代码气味的未平仓修复成本为:
|
重要信息 | < A |
范围 | 单位测试线覆盖和条件覆盖的混合使用以下公式:Coverage = (CT + CF + LC)/(2*B + EL) 其中:CT =运行单元测试时已至少一次评估为“true”的条件,运行单元测试时,CF =已至少一次评估为“false”的条件,运行单元测试时,LC =覆盖行= linestocover —— 未覆盖行 B =条件总数 EL =可执行行总数(linestocover) |
重要信息 | < 50% |
跳过的单元测试 | 跳过的单元测试数。 | 信息 | > 1 |
未解决问题 | 总体问题类型——漏洞、错误和代码气味 | 信息 | > 0 |
复制行 | 重复块中涉及的行数。 对于要视为重复的代码块:
在检测重复时,会忽略缩进和字符串文本中的差异。 |
信息 | > 1% |
Cloud Service兼容性 | 已识别的Cloud Service兼容性问题数。 | 信息 | > 0 |
有关更详细的定义,请参阅度量定义。
要进一步了解由云管理器执行的自定义代码质量规则,请参阅自定义代码质量规则。
质量扫描过程并不完美,有时会错误地识别实际上没有问题的问题。 这称为假阳性。
在这些情况下,可以使用标准Java @SuppressWarnings
注释对源代码进行注释,该注释将规则ID指定为注释属性。 例如,一个常见问题是,用于检测硬编码密码的SonarQube规则在如何识别硬编码密码方面可能具有攻击性。
要查看特定示例,此代码在AEM项目中很常见,该项目具有连接到某些外部服务的代码:
@Property(label = "Service Password")
private static final String PROP_SERVICE_PASSWORD = "password";
然后,SonarQube将引发阻止程序漏洞。 查看代码后,您会发现这不是漏洞,并可以使用相应的规则ID对此进行注释。
@SuppressWarnings("squid:S2068")
@Property(label = "Service Password")
private static final String PROP_SERVICE_PASSWORD = "password";
但是,另一方面,如果代码是:
@Property(label = "Service Password", value = "mysecretpassword")
private static final String PROP_SERVICE_PASSWORD = "password";
然后,正确的解决方案是删除硬编码密码。
尽管最好尽可能使@SuppressWarnings
注释具体,即仅注释导致问题的特定语句或块,但也可以在类级别添加注释。
虽然没有明确的安全测试步骤,但在代码质量步骤中仍会评估与安全相关的代码质量规则。 请参阅AEM的安全概述(作为Cloud Service),进一步了解Cloud Service中的安全性。