当前位置: 首页 > news >正文

质量平台-方案设计

一、背景

1、目前测试团队的测试结构主要是业务测试,发现的问题偏黑盒,无法从代码层面找出问题,比如某种条件下触发的空指针、锁未释放等。

2、随着业务迭代越来越多,代码行数越来越多.可能会引入重复代码、代码复杂度高等问题。

3、codereview阶段更多的关注于业务逻辑的实现,可能会忽视编程规范。

二、目的

1、完善测试结构,对代码的质量做一定程度的保障

2、减轻codereview人员负担,更聚焦在业务逻辑的实现和设计的合理性

3、收集研发人员编程过程中的质量

三、做法

1、引入代码扫描工具,在个人提交和merge request到发布分支阶段实现质量评估

2、对merge request进行强制审核机制,确保未达标的代码不进入提测分支

3、只针对增量问题做检查

四、方案设计

auto-orient&e=1661850988&token=VXu2kld82Q4CEhnpUzweXRgby4RUyIfxr11qICVo:0EF3mGGVa2d0TrmUxG5iuupfkhw

五、SOP

1、git工程对发布分支做push保护,只能通过merge request做提交   ----颖超沟通接入

auto-orient&e=1661850988&token=VXu2kld82Q4CEhnpUzweXRgby4RUyIfxr11qICVo:TfrvR2atVzWDz7httwLyfI_MBWM

2、merge request通过前务必检查质量平台是否存在未审核的检查记录,否则部署测试环境阻断

六、关键数据

实现过程中的关键接口

gitlab的webhok调用接口:/sonar/gitCallBack

备注:需要配置token, 在header中 X-Gitlab-Token=123456

push事件回调参数示例: 

merge request:

        首次提交merge request,对应状态:merge_status : "preparing"

        merge request没有被审核通过执行前,提交的请求会自动加入这次merge request,此时产生的merge request event传参中的状态为merge_status : "unchecked"

        merge request被审核通过执行后,event传参中的状态为:merge_status : "can_be_merged"

       对应动作状态:

merge创建merge未通过之前又来了pushmerge通过merge关闭merge关闭后再次打开
merge_status : "preparing"merge_status : "unchecked"merge_status : "can_be_merged"merge_status : "can_be_merged"merge_status : "can_be_merged"
action : "open"action : "update"action : "merge"action : "close"action : "reopen"

如果为open,则进行一次检查

如果为merge, 相当于已经审核通过,merge完代码了,此时再次进行一次检查记录数据

如果为close,则放弃执行

state : "opened"state : "opened"state : "merged"state : "closed"state : "opened"

oldrev : "17bb4e9c2f564e34a32adcfd2971cf49e8a2517e"

会记录上一个提交点commit_id

sonar的webhok调用接口:/sonar/sonarCallBack

备注:需要在执行检查命令时增加-Dsonar.analysis.token=123456

回调参数示例:   qualityGate质量阀 对应的数据    taskId 本次检查的标识     project.key  sonar中项目唯一标识   project.name 项目名称

七、扫描规则

简单来说,规则(Rule)表示应该遵循的编码规范或最佳实践,如果代码没有满足(或者破坏)某一规则,就有可能产生问题(Issue),问题分为三类:

  • Bugs——可能出现逻辑错误的代码块,例如unused代码,bool表达式为定值
  • Vulnerability——安全问题
  • Code Smells——可维护性问题。引申出了一个技术债务(Debt)的概念,即修复这些可维护性问题需要的时间。

JAVA 当前规则 (目前629条)

其他语言的规则

为了方便对规则进行定制化,Sonarqube提供了对规则的组合机制——Quality Profile,每一个Profile是针对特定语言的规则集合。系统对每一种语言都提供(或者由扩展的插件提供)内置的Profile:

名为"Sonar Way"的Profile是只读的,可以作为一个自定义规则扩展的起点。一般来说,项目会默认使用语言所对应的”默认“Profile,但通常会针对一类项目(比如lib,service,script)定制不同的Profile,由项目自行选择:

auto-orient&e=1661850988&token=VXu2kld82Q4CEhnpUzweXRgby4RUyIfxr11qICVo:5S9wJpKpooNpGmb9bmEhFNJSNPc

八、度量指标与质量阈

8.1 度量指标

Sonarqube主要从7个维度度量代码质量:

  • 可靠性——指标包括:Bug数量、可靠性等级(A-E打分)、修复工作时间
  • 安全性——指标包括:Vulnerabilities数量、安全性等级(A-E打分)、修复工作时间
  • 可维护性——指标包括:Code Smells数量、技术债务、修复工作时间
  • 测试覆盖率——覆盖行数、覆盖率、分支覆盖率等
  • 重复——重复行数、重复块、重复文件、重复密度
  • 大小——代码行数、注释行数、类数量、文件数量、方法数等等
  • 复杂度
    • 圈复杂度——基于代码的分支计算出来的复杂度,即圈复杂度。当一个方法的控制流多了一个分支,它的复杂度就会增加1。每个方法的最小复杂度为1。
    • 认知复杂度——理解代码的控制流的难易程度。

SonarQube 指标定义

8.2 质量阈(Quality Gates)

有了度量指标,就可以用它们来衡量一个项目是否达到了交付所应该满足的质量条件。Sonarqube的质量阈值定义如下:

auto-orient&e=1661850988&token=VXu2kld82Q4CEhnpUzweXRgby4RUyIfxr11qICVo:IsPNw75L5tWuAokgOmw_eaChYgk

一旦出现上述指标条件,Quality Gate就会变成Red(错误状态),表示不满足交付所要求的的质量条件。一个例子如下:

auto-orient&e=1661850988&token=VXu2kld82Q4CEhnpUzweXRgby4RUyIfxr11qICVo:B___4lNgi2VgO_LhObkRCFETbvs
auto-orient&e=1661850988&token=VXu2kld82Q4CEhnpUzweXRgby4RUyIfxr11qICVo:j62BQ9X4DFwwGsGiwbiAMX-0FwM

上图所示的项目中:

  • 新增代码覆盖率为0,<80%
  • 可靠率为C,劣于A
  • 安全率为E,劣于A

所以质量阈显示为红色(错误)

九、规则指标

使用sonarqube自带规则

相关文章:

  • 含有NHS酯基团的化学交联剂 1426827-79-3,BCN-Osu,endo-BCN-NHS ester
  • 什么是GCC 基础概念版
  • 【云原生 | Kubernetes 系列】----使用Prometheus监控K8s集群
  • python基础(四、循环语句)
  • 视觉slam14讲 ——ch2实践部分
  • Android几种定时任务实现方式汇总
  • 【数据结构】哈夫曼编码与最优二叉树(哈夫曼树)
  • C++获取系统毫秒级时间(自1970年1月1日至今的毫秒数)
  • redis的详解和项目应用之PHP操作总结
  • 阿里、滴滴、华为等一线互联网分布式消息中间件:RocketMQ核心笔记
  • PostgreSQL的学习心得和知识总结(六十四)|关于PostgreSQL数据库 图式搜索(graph search)及递归查询 的场景说明
  • AI智能安防监控视频播放卡顿的原因排查与分析
  • 荧光染料Cy7 酰肼,Cy7 hydrazide,Cy7 HZ参数及结构式解析
  • OSPF——DR和BDR讲解
  • es的安装
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • __proto__ 和 prototype的关系
  • 【剑指offer】让抽象问题具体化
  • Docker容器管理
  • ES6系统学习----从Apollo Client看解构赋值
  • IDEA常用插件整理
  • mongodb--安装和初步使用教程
  • Otto开发初探——微服务依赖管理新利器
  • tweak 支持第三方库
  • vue:响应原理
  • 免费小说阅读小程序
  • 前端性能优化——回流与重绘
  • 实战|智能家居行业移动应用性能分析
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 赢得Docker挑战最佳实践
  • AI算硅基生命吗,为什么?
  • 整理一些计算机基础知识!
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​用户画像从0到100的构建思路
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (poj1.3.2)1791(构造法模拟)
  • (待修改)PyG安装步骤
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (七)理解angular中的module和injector,即依赖注入
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (四)JPA - JQPL 实现增删改查
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (一)WLAN定义和基本架构转
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net CoreRabbitMQ消息存储可靠机制
  • .net 流——流的类型体系简单介绍
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NetCore实践篇:分布式监控Zipkin持久化之殇