我们在持续集成过程中,会拿到相关性的数据,有些数据可以通过持续集成平台的插件来收集,有部分的数据则通过sonar来收集(sonar也是集成了许多插件), 通过对持续集成过程中的数据进行收集,进行数据分析和数据挖掘,给用户对于项目、产品中的质量显性化。
持续集成整个过程划分为以下几个部分,编译、 部署、 构建;每个过程中都会产生不同数据,并且会存放于不同数据源,而我们需要收集数据就是来之于持续集成过程中产生各种数据,并根据我们需要进行数据清洗并放入我们仓库里,以便于后续质量评估分析、质量趋势分析、质量可回溯分析等。
这里简要介绍一下几种模型:
一、svn:
当持续集成到设置的频率触发时(设置方式不同,则触发模式不同,这里只讨论只有新增才会触发模式),会check svn提供的钩子检查是否有更新,并拿到所需要的svn数据。
指标 | 指标说明 | 构建阶段 | 数据源 |
---|---|---|---|
svn url | 当前构建svn分支 | scm checkout or update | jenkins |
svn modifier | 当前构建版本代码提交人(需要根据提交人得到真正提交的名字) | scm checkout or update | jenkiins |
svn version | 当前构建的版本 | scm checkout or update | jenkins |
svn item | 当前触发构建变化文件 | scm checkout or update | jenkins |
svn update date | 当前触发构建变化文件提交时间 | scm checkout or update | jenkins |
svn message | 当前触发构建变化文件的说明 | scm checkout or update | jenkins |
svn mod_type | 当前触发构建变化文件的变更类型,分为增、删、修改 | scm checkout or update | jenkins |
二、testCase
指标 | 指标说明 | 构建阶段 | 数据源 |
---|---|---|---|
package name | testcase包名 | 构建 | jenkins |
class_name | testCase类名 | 构建 | jenkins |
method_name | testCase名称 | 构建 | jenkins |
build_duration | testCase构建时间 | 构建 | jenkins |
case_status | testCase构建状态 | 构建 | jenkins |
case_error_mgs | testCase错误堆栈信息 | 构建 | jenkins |
case_count | testCase运行总数 | 构建 | jenkins |
case_type | testCase类型 | 构建 | jenkins |
case成功数 | test成功数 | 计算 | 平台 |
case失败数 | test失败数 | 计算 | 平台 |
三、代码变化
指标 | 指标说明 | 构建阶段 | 数据源 |
---|---|---|---|
code_count | 代码总行 | sonar | sonar |
code_change_line | 代码变更行数 | sonar | sonar |
code_change_link | 代码变更详细内容--待定 | ||
包数/类/等是否需要 | |||
四、代码重复度:(所有的详细内容都需要有链接去看详细的信息)
指标 | 指标说明 | 构建阶段 | 数据源 |
---|---|---|---|
duplicated_blocks | 重复的代码块数 | sonar | sonar |
duplicated_blocks_link | 重复代码块数详细链接 | -- | -- |
duplicated_files | 涉及到重复代码的文件数目 | sonar | sonar |
duplicated_lines | 涉及到重复代码文件数 | sonar | sonar----- |
duplicated_lines_density | 重复行占代码总代码行数百分比=Duplicated lines / Lines * 100 |
五、违反规则(根据sonar本身定义的规则来执行,包括findbugs等)
指标 | 指标说明 | 构建阶段 | 数据源 |
---|---|---|---|
违规总数 | 违反规则总数 | sonar | sonar |
新违规数 | 新增加违反规则总数 | sonar | sonar |
不同级别违规数 | 不同级别违规的数目,分为阻碍、严重、主要、次要、建议 | sonar | sonar |
新增的不同基本违规数 | 新增不同级别违规的数目,分为阻碍、严重、主要、次要、建议 | sonar | sonar |
每个不同的违规都要增加出现违规的代码地方链接以及相关规则说明 |
六、覆盖率:
指标 | 指标说明 | 构建阶段 | 数据源 |
---|---|---|---|
coverage | 覆盖率=(条件为true的分支+条件为flase的分支+覆盖代码行数)/(2*B+EL) B:分支的总行数 EL:可执行的代码总行数 | sonar/构建 | sonar/jenkins |
new_coverage | 新的或者更新代码的覆盖率 | ||
new_uncovered_lines | 新增代码未覆盖的行数 | ||
uncovered_lines | 单元测试未覆盖的行数 |
七:圈复杂度
指标 | 指标说明 | 构建阶段 | 数据源 |
---|---|---|---|
圈复杂度 | if、for、while、case、catch、throw return、&& || ?等圈复杂度+1.具体说明请看wiki | sonar | sonar |
类平均复杂度 | 类的平均圈复杂度 | sonar | sonar |
文件平均复杂度 | 文件平均复杂度 | sonar | sonar |
方法平均复杂度 | 方法平均复杂度 | sonar | sonar |
八、设计:
指标 | 指标说明 | 构建阶段 | 数据源 |
---|---|---|---|
继承深度数 | DIT | DIT度量为每个类提供一个从对象层次结构开始的继承等级度量, 在java中,所有的类继承于object,所以DIT最小值为1 | sonar |
NOC | 子类的数目,度量类的直接以及间接子类个数 | sonar | sonar |
RFC | 类的响应集合 | sonar | sonar |
CA | 类的传入耦合:有多少其他类使用到了这个类 | sonar | sonar |
CE | 类的传出耦合 | sonar | sonar |
LCOM4 | 衡量类中的聚合组件(一组方法和字段的集合) | sonar | sonar |
PC | 包循环依赖数量 | sonar | sonar |
PT | 可以去掉文件依赖数据 | sonar | sonar |
PFE | 可以去掉的包依赖数量 | sonar | sonar |
PEW | 包之间的文件依赖总数 | sonar | sonar |
PTI | 包复杂等级,最好的值为0% | sonar | sonar |
FC | 文件循环依赖。 | sonar | sonar |
FT | 可以去掉的文件依赖数量 | sonar | sonar |
FEW | 包之间的文件依赖总数 | sonar | sonar |
FTI | 2 * (FT / FEW) * 100文件依赖的循环总数 | sonar | sonar |