CICD 基础
代码测试覆盖率
最近在负责相关插件的集成,今天第一次接触到“代码覆盖率”这个概念,那么,就做些简单的笔记吧。
好文
- 如何提高一个研发团队的“代码速度”?
- 代碼覆蓋率-wiki
- 如何测试代码覆盖率:coverage.py简介
- 浅谈代码覆盖率
- 代码覆盖率浅谈
- 实际软件工程中是否真的需要100%代码覆盖率(code coverage)?
- 用 Python 编写干净、可测试、高质量的代码
- 代码覆盖率工具 Istanbul 入门教程
nosetests
nosetests --with-coverage --cover-html --cover-erase --with-xunit --exe project_name\test\
代码质量好文
代码质量控制,常规三板斧:
- 静态检查
- 代码review
- 单元测试
静态检查工具
sonarqube
- Jenkins+SonarQube 代码质量检查自动化
- SonarQube 的安装、配置及 Maven 项目的使用
- [Jenkins + Maven + SonarQube 构建代码质量检测平台](Jenkins + Maven + SonarQube 构建代码质量检测平台)
代码质量平台
- 代码质量检测平台架构设计
- COMPREHENSIVE GUIDE TO CODE QUALITY: BEST PRACTICES AND TOOLS
- PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?
- codacy-平台官网
Python代码质量
pylint
coverage
python检查好文
Java代码质量
- Checkstyle
- FindBugs
- PMD
- Jtest
| Java静态分析工具 | 分析对象 | 应用技术 |
|---|---|---|
| Checkstyle | Java 源文件 | 缺陷模式匹配 |
| FindBugs | 字节码 | 缺陷模式匹配;数据流分析 |
| PMD | Java 源代码 | 缺陷模式匹配 |
| Jtest | Java 源代码 | 缺陷模式匹配;数据流分析 |
内置编程规范
Checkstyle:
- Javadoc 注释:检查类及方法的 Javadoc 注释
- 命名约定:检查命名是否符合命名规范
- 标题:检查文件是否以某些行开头
- Import 语句:检查 Import 语句是否符合定义规范
- 代码块大小,即检查类、方法等代码块的行数
- 空白:检查空白符,如 tab,回车符等
- 修饰符:修饰符号的检查,如修饰符的定义顺序
- 块:检查是否有空块或无效块
- 代码问题:检查重复代码,条件判断,魔数等问题
- 类设计:检查类的定义是否符合规范,如构造函数的定义等问题
FindBugs
- Bad practice 坏的实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配
- Correctness 可能导致错误的代码,如空指针引用等
- 国际化相关问题:如错误的字符串转换
- 可能受到的恶意攻击,如访问权限修饰符的定义等
- 多线程的正确性:如多线程编程时常见的同步,线程调度问题。
- 运行时性能问题:如由变量定义,方法调用导致的代码低效问题。
PMD:
- 可能的 Bugs:检查潜在代码错误,如空 try/catch/finally/switch 语句
- 未使用代码(Dead code):检查未使用的变量,参数,方法
- 复杂的表达式:检查不必要的 if 语句,可被 while 替代的 for 循环
- 重复的代码:检查重复的代码
- 循环体创建新对象:检查在循环体内实例化新对象
- 资源关闭:检查 Connect,Result,Statement 等资源使用之后是否被关闭掉
Jtest
- 可能的错误:如内存破坏、内存泄露、指针错误、库错误、逻辑错误和算法错误等
- 未使用代码:检查未使用的变量,参数,方法
- 初始化错误:内存分配错误、变量初始化错误、变量定义冲突
- 命名约定:检查命名是否符合命名规范
- Javadoc 注释:检查类及方法的 Javadoc 注释
- 线程和同步:检验多线程编程时常见的同步,线程调度问题
- 国际化问题:
- 垃圾回收:检查变量及 JDBC 资源是否存在内存泄露隐患
Java静态检查参考
Python代码圈复杂度检查
基础知识
radon
radon cc --total-average -s -o SCORE -j all\ > r.json
-s 显示复杂度
-a 显示平均值,受-n -m影响
-j 结果转换为json
-o --order
- SCORE: order by cyclomatic complexity (descending):
- LINES: order by line numbers;
-i 指定忽略文件夹
json2html
from json2html import *
import json
with open('r.json','r') as f:
array = json.load(f)
print(array)
randon_html=json2html.convert(array)
with open("index.html","wr") as f:
f.write(randon_html)
业界 CI
工具链
工具链好文
- 懒羊羊大哥-常用工具集 懒羊羊大哥
CICD 基础的更多相关文章
- CICD基础概念
windows下搭建jenkins:安装方法一:1.安装JDK,配置好环境变量2.下载安装最新版本Jenkins:登陆 http://mirrors.jenkins-ci.org/ 下载windows ...
- 如何保障Go语言基础代码质量?
为什么要谈这个topic? 实践中,质量保障体系的建设,主要针对两个目标: 一是不断提高目标业务测试覆盖率,保障面向客户的产品质量:二就是尽可能的提高人效,增强迭代效率.而构建全链路质量卡点就是整个体 ...
- [Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)
[Python+Java双语版自动化测试(接口测试+Web+App+性能+CICD)开学典礼](https://ke.qq.com/course/453802)**测试交流群:549376944**0 ...
- GitOps:Kubernetes多集群环境下的高效CICD实践
为了解决传统应用升级缓慢.架构臃肿.不能快速迭代.故障不能快速定位.问题无法快速解决等问题,云原生这一概念横空出世.云原生可以改进应用开发的效率,改变企业的组织结构,甚至会在文化层面上直接影响一个公司 ...
- CICD | Jenkins & Gitlab集成:WebHook触发构建
在上一篇博客中,我们学习了Jenkins的搭建和插件+流水线的基本使用方法,Jenkins极大地提升了部署效率. 最近想学习一下如何集成GitLab webhook,实现进一步解放双手,目标: 推送( ...
- 基于Jenkins+Maven+Gitea+Nexus从0到1搭建CICD环境
在传统的单体软件架构中,软件开发.测试.运维都是以单个进程为单位. 当拆分成微服务之后,单个应用可以被拆分成多个微服务,比如用户系统,可以拆分成基本信息管理.积分管理.订单管理.用户信息管理.合同管理 ...
- 9.Jenkins进阶之流水线pipeline基础使用实践(2)
目录一览: 0x01 基础实践 0x02 进阶实践 (1) Sonarqube 代码质量检测之 Pipeline Script from SCM (2) Gitlab 自动触发构建之 Pipeline ...
- 8.Jenkins进阶之流水线pipeline基础使用实践(1)
目录一览: 0x01 基础实践 (1) Maven 构建之 Pipeline Script (2) Maven 构建之 Pipeline Script from SCM (3) Jenkins pi ...
- 2022年字节跳动基础架构前端实习生凉经(4轮技术面+hr面)
技术一面 原文链接:https://juejin.cn/post/7120516854203809829 因为我之前的项目经验有开发小程序的,所以一开始就问了小程序的问题 1.小程序onload和on ...
随机推荐
- Hello py
https://www.cnblogs.com/AdaminXie/p/8339863.html https://www.cnblogs.com/-clq/p/8340515.html https:/ ...
- Python杨辉三角
杨辉三角,是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉1261年所著的<详解九章算法>一书中出现.在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个 ...
- 136. Single Number(位运算)
Given a non-empty array of integers, every element appears twice except for one. Find that single on ...
- C++的类型转换
一.类型转换名称和语法 1.C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a 2.C++风格的类型转换提供了4种类型转换操作符来应对 ...
- uva11990 动态逆序对
这题说的是给了一个数组,按照他给的顺序依次删除数,在删除之前输出此时的逆序对个数 我们用Fenwick树 维护这整个数列, C[i]是一个 treap的头, 管理了在树状数组中 能影响他的点,然后我们 ...
- 【转】基于Python的接口测试框架实例
下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...
- La Vie en rose (模拟)
#include<bits/stdc++.h> using namespace std; ; ; int T, n, m; char str1[maxm], str2[maxn]; int ...
- Python大神成长之路: 第二次学习记录
数据类型 数据操作 bytes 类型 "".encode() 编码-->二进制 "".decode() 解码 判断字符串里的字符是否全为 ...
- c# 类的知识
在英语中类(class)是分类(classification)的根词.设计类的过程就是对信息进行分类,将相关信息放到有意义的实体中. 封装的目的: 封装就是定义类的重要原则.中心思想是:使用类的程序不 ...
- create-react-app @observer装饰器报错
npm install --save-dev babel-plugin-transform-decorators-legacy 然后在node_modules/babel-preset-react-a ...