分析方案
在代码分析过程中,会根据所对应的方案配置信息,执行相应的代码分析。目前分为官方推荐方案、团队分析方案、项目分析方案。
官方体验方案:用户可以直接使用,无法变更该方案配置,使用官方公共资源,仅用于快速体验。
团队分析方案:仅具有该权限的用户可以创建/变更团队分析方案,且可以供团队内各个项目使用。
项目分析方案:仅具有该权限的用户可以创建/变更项目分析方案,仅可以供该项目内各个代码库使用。
分析方案也指分析策略,包含基础配置、规则配置、度量配置、质量门禁等
基础配置
方案名称
用于标示一个方案,每个方案名称都是唯一的。
分析语言
用于指明该方案是针对代码库何种语言进行分析。初次创建分析方案时会根据语言初始化分析方案相关配置。
节点池
用于将任务分配到指定的环境节点机器上执行代码分析,需考虑项目在对应环境的节点机器上能否正常执行。
环境变量
参见环境变量配置
环境变量配置
每行 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
)来指定该文件作为分析配置文件。
可用于指定 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
度量配置
圈复杂度
可以发现执行路径较多的方法,降低代码的圈复杂度,可测性更高
- 检测阈值:默认为 20,表示当一个方法的圈复杂度超过 20 时则认为该方法为超标方法,需要被关注修改。可以根据业务需要进行调整。
重复代码
可以发现重复的代码,避免重复代码可以让代码更简洁,更易维护
长度区间:是一个区间值,默认代码中一个单词(变量/操作符)长度为 1。
重复次数:是一个区间值,当一段代码重复次数达到指定区间才认为是有风险的。
上报限制:限制上报的重复代码块数,可以减少开发的压力,提高修复积极性。
代码统计
从目录和业务纬度统计代码行数,也可以获取提交记录便于代码 Review
质量门禁
根据团队对代码质量的要求设置门禁阈值,以此协助用户立即了解代码质量是否合格。
重要
当配置质量门禁后,可以进行相关配置,针对代码库的合并请求进行管控,参见管控合并请求!
启用质量门禁以后,可以根据团队或者个人需求添加门禁指标。可以单选或者多选。 填写相应的阈值以后,会自动更新生效。
管控合并请求
重要
- 仅使用 OAuth 凭证授权的代码库支持合流管控功能。
- 对于同一个目标分支,仅支持配置一个分析方案管控合并请求。
按照以下步骤配置,可以使用质量门禁管控代码合并请求,创建合并请求时会触发执行代码分析,合并到指定分支的所有合并请求必须通过质量门禁后才允许合并!
步骤1: 在分析方案中启用质量门禁功能,添加需要的门禁指标。
步骤2: 针对代码库进行分析配置-触发配置,选择目标分支和已配置质量门禁的分析方案,勾选代码合并触发。
步骤3: 针对代码库进行分析配置-基础配置,选择目标分支和已配置质量门禁的分析方案,勾选管控合并请求。
以上即完成管控合并请求相关配置。
提示
在合并请求列表页可以查看被阻塞的合并请求对应的分析任务,并支持强行取消阻塞。
数据统计
与分析方案维度相关的数据统计功能。
项目统计
统计使用该方案执行过的分析项目最新的概览数据,可用于观测指定分析方案下的项目数据。
规则统计
统计使用该方案配置的规则在应用过程中的概览数据,可用于观测指定分析方案下的规则统计数据,了解规则使用情况,灵活的调整方案规则配置。