分析方案
分析方案又称分析配置方案,分析项目启动分析时,会下发分析方案的配置内容执行分析。
提示
按类型划分,分析方案分为:代码库方案、制品库方案。
代码库方案:用于代码库、源码包分析。
制品库方案:用于制品库分析。
按层级划分,分析方案分为:平台方案、团队方案、项目方案。
平台方案:由平台提供的分析方案,用户无法变更该方案配置,使用平台公共节点资源执行分析。
团队方案:团队层级分析方案,可以供团队内各个仓库使用,仅具有该权限的用户可以创建/变更,使用团队节点资源执行分析。
项目方案:项目层级分析方案,可以供项目内各个仓库使用,仅具有该权限的用户可以创建/变更,使用团队后项目节点资源执行分析。
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 基础配置 | ✅ | ✅ |
| 规则配置 | ✅ | ❌ |
| 度量配置 | ✅ | ❌ |
| 组件分析配置 | ✅ | ✅ |
| 质量门禁 | ✅ | ❌ |
| 权限配置 | ✅ | ✅ |
| 关联项目 | ✅ | ✅ |
| 数据统计 | ✅ | ❌ |
| 操作记录 | ✅ | ✅ |
基础配置
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 基础配置 | ✅ | ✅ |
可配置分析方案名称、描述、节点池等配置,以及可以将方案废弃。
节点池:用于将任务分配到指定的环境节点机器上执行代码分析,需考虑项目在对应环境的节点机器上能否正常执行。
环境变量配置
提示
仅代码库方案适用。
每行 key-value 形式,非必填项。
可用于配置节点编译环境:假设执行节点具有多个 JDK 或者 gradle 环境,则可以通过设定相应环境变量指定项目编译所需的 JDK 或 gradle 版本。
可用于设置分析工具参数: 部分工具支持通过配置环境变量,设置工具部分运行参数。
Eslint:例如在前端项目中,用到 eslint 工具执行分析时,经常会遇到 js 内存溢出问题,则可以通过设定环境变量(如
ESLINT_MAX_OLD_SPACE_SIZE=4096)来调整 js 内存大小。Pylint:可以指定代码库中的文件作为分析配置文件。假设 xxx 为配置文件相对于代码库根目录的文件路径,例如配置文件 pylintrc 在 config 目录下,则可以通过设定环境变量(如
PYLINT_CONFIG_FILE=config/pylintrc)来指定该文件作为分析配置文件。Flake8:可以指定代码库中的文件作为分析配置文件。假设 xxx 为配置文件相对于代码库根目录的文件路径,则可以通过设定环境变量(如
FLAKE8_CONFIG_FILE=xxx)来指定该文件作为分析配置文件。homecheck: 可以通过环境变量
OHOS_SDK指定节点OpenHarmony SDK路径和环境变量HMS_SDK指定节点HarmonyOS SDK路径(比如DevEco Studio安装目录下的sdk/default/openharmony/ets,请使用绝对路径)。
可用于设置 Python 版本:如
PYTHON_VERSION=2指定为 python2 项目。提示
对 Python 项目的分析默认采用 Python3,如果需要分析 Python2 项目,请在环境变量中设置:
PYTHON_VERSION=2
规则配置
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 规则配置 | ✅ | ❌ |
腾讯云代码分析采用业界/自研的 80+ 款工具,配置代码检查项能够有效地发现代码中存在的异味代码。
规则包配置
规则包主要由官方规则包和自定义规则包构成。
官方规则包:是由腾讯云代码分析平台经过多年深耕,在业务中不断实践整理而出的规则集合包,平台有超过10000+的规则,有些规则并未放到官方规则包中,有些规则是由用户自定义的,业务团队需要根据实际需求目标挑选或调整官方规则包。
自定义规则包:可以根据业务需求到工具规则库中添加规则,或调整官方规则包内规则。
用户可根据项目语言、规则包类型筛选不同的规则包,并启用/关闭规则包,此外也可以在自定义规则包内新增/变更规则。
添加规则: 用户可以点击
添加规则或进入自定义规则包内点击添加规则等方式进行工具规则的阅览及添加。调整规则包规则: 用户可以点击进入对应的规则包内,查阅或调整规则。
重要
在官方规则包中对规则的任意操作,实质上是将对应规则的调整增加到自定义规则包中。
自定义规则包中的规则配置会覆盖其他官方包中相同规则的配置。
无论添加规则还是调整规则包规则,最终都是将规则添加到自定义规则包中。


编译配置
支持给编译类的工具或编译型项目配置相关命令。对于编译型语言,有些分析工具是可以通过分析编译产出的中间文件,更为准确地发现代码质量问题。
提示
由于对代码进行编译型分析会存在安全风险,需要用户自行接入专机节点执行分析。此外,编译环境和编译工具仅提供试用,请在专机节点上自行安装和维护项目所需编译环境和工具。更多请查阅 专机接入指引。

编译所需环境说明(重要)
由于代码分析是在客户端节点上执行,如果配置了编译命令,则该节点需要内置所需的编译环境,否则执行分析会出现没有编译环境的错误。即需要用户在专机上提供编译环境(针对私有化版,客户可根据业务情况选择在公共节点机、用户专机、本地节点机提供编译环境即可)。
如以下一些编译环境:
JDK 环境及版本
gradle 环境
cmake & make 环境
visual studio 环境
...
提示
- 如果机器有多个 JDK 或者 gradle 环境,项目编译需指定 JDK 或 gradle 版本,可以在分析方案的基础配置中设定相应环境变量。
- 咨询该代码库所属项目的开发,先确保先在本地工程根目录调试通过!
编译配置字段说明
前置命令
通常是项目编译前需要执行的命令,或用于清理之前编译过程的命令,如:
make clean,xcodebuild clean [-optionName]。如无需要,可以不填。编译命令
项目的编译命令,具体可以咨询该代码库所属项目的开发。能够使项目编译成功的编译命令,可以填写多行或用 && 连接命令。
提示
前置命令与编译命令是隔离的,即在前置命令中的操作不会对编译命令产生影响。 如在前置命令中 cd src && export TEST=src,在执行编译命令时并不会跳到src目录和获取TEST环境变量。
JAVA 项目示例
编译命令:
请先确保先在本地工程根目录调试通过!!!
android-studio 项目编译命令示例
gradle compileDebugSources --no-daemon -Dorg.gradle.jvmargs=
ant 项目编译命令示例
ant build
Object-C 项目示例
编译命令:
请先确保先在本地工程根目录调试通过!!!
xcodebuild 编译命令示例
xcodebuild -target dailybuildipa -configuration DailyBuild -sdk iphonesimulator
环境变量:
# 分析方案-基础属性中配置
XCODE_VERISON=10.1
C/C++ 项目示例
编译命令:
请先确保先在本地工程根目录调试通过!!!
VS 项目编译命令示例
devenv.com demo.sln /Build "Debug|Win32"
# 或
msbuild demo.sln /t:Build /p:Configuration=DebugCopy
make 项目编译命令示例
make all
C# 项目示例
编译命令:
请先确保先在本地工程根目录调试通过!!!
VS 项目编译命令示例
devenv.com demo.sln /Build "Debug|Win32"
# 或
msbuild demo.sln /t:Build /p:Configuration=Debug
度量配置
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 度量配置 | ✅ | ❌ |
圈复杂度:可以发现执行路径较多的方法,降低代码的圈复杂度,可测性更高。
支持语言:目前仅支持 C、C++、C#、Java、JavaScript、Objective-C、Go、Python、PHP、Swift、Ruby、Scala、Lua 共 13 种语言。
检测阈值:默认为 20,表示当一个方法的圈复杂度超过 20 时则认为该方法为超标方法,需要被关注修改。可以根据业务需要进行调整。
重复代码:可以发现重复的代码,避免重复代码可以让代码更简洁,更易维护。
支持语言:目前仅支持 C、C++、C#、Java、JavaScript、Objective-C、Go、Python、PHP、Swift、Ruby、Scala、Lua、Kotlin 共 14 种语言。
长度区间:是一个区间值,默认代码中一个单词(变量/操作符)长度为 1。
重复次数:是一个区间值,当一段代码重复次数达到指定区间才认为是有风险的。
上报限制:限制上报的重复代码块数,可以减少开发的压力,提高修复积极性。
代码统计:从目录和业务纬度统计代码行数,也可以获取提交记录便于代码 Review。
组件分析配置
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 组件分析配置 | ✅ | ✅ |
质量门禁
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 质量门禁 | ✅ | ❌ |
质量门禁通常搭配 CICD 流水线或代码库的合并请求事件来进行使用:
在 CICD 流水线中使用:将代码分析置于流水线中,当执行代码分析后会输出门禁结果数据,根据门禁结果数据通过/拦截流水线。
在代码库合并请求中使用:在代码库发起合并请求时,触发执行代码分析,并根据门禁结果数据通过/拦截代码库合并。参考管控合并请求。
提示
结合团队业务需求目标配置门禁指标。例如通常建议严重、错误问题数 <=0

管控合并请求
重要
- 仅使用 OAuth 凭证授权的代码库支持合流管控功能。
- 对于同一个目标分支,仅支持配置一个分析方案管控合并请求。
按照以下步骤配置,完成合流门禁管控:代码库创建合并请求时会触发执行代码分析,业务研发在发起代码库合并请求(MR/PR)时,触发执行代码分析,通过分析合并请求的源分支代码,并对比目标分支代码,分析出增量代码存在的问题,只有增量代码符合质量标准(问题清零)后,才允许合入目标分支。
步骤1: 在分析方案中启用质量门禁功能,添加需要的门禁指标。
步骤2: 针对代码库进行分析配置-触发配置,选择目标分支和已配置质量门禁的分析方案,配置
合并请求触发、管控合并请求即可。
提示
在合并请求列表页可以查看被阻塞的合并请求对应的分析任务,并支持强行取消阻塞。
权限配置
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 权限配置 | ✅ | ✅ |
可以额外配置方案的权限以及可见范围。
关联项目
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 关联项目 | ✅ | ✅ |
可以查看当前分析方案关联的分析项目列表。
数据统计
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 数据统计 | ✅ | ❌ |
与分析方案维度相关的数据统计功能。
项目统计
统计使用该方案执行过的分析项目最新的概览数据,可用于观测指定分析方案下的项目数据。


规则统计
统计使用该方案配置的规则在应用过程中的概览数据,可用于观测指定分析方案下的规则统计数据,了解规则使用情况,灵活的调整方案规则配置。


操作记录
| 功能模块 | 代码库方案 | 制品库方案 |
|---|---|---|
| 操作记录 | ✅ | ✅ |
可以查看分析方案的操作日志。