代码Verify简介
序
对于开发者而言,编译代码和提交代码是必不可少的流程,同一个需求反复提交的情况也时常出现,那么怎么避免这种情况,且保证代码的质量,这就是Verify CI的目标。Verify表示认证验证的意思,结合到我们软件开发者的身上就是对代码的认证。何谓对代码的认证,可以理解为对代码的功能,可维护性,复杂度等质量指标的验证,如果不达标就得不到认证。那么怎么将Verify集合到实际的开发流程中呢?
对于一般的开发模式,如敏捷开发模式下,对实际的开发在来说,大概的流程是:接收需求,开发需求,需求自验证,提交代码。从实际的开发流程不能看出,只要保证了代码提交环节,就可以保证共享代码的质量,所以在代码提交环节做Verify,从而达到高质量的保证。
结合一些开源的工具,我们可以实现如下流程,在代码提交的时候,触发认证流程,认证通过以后,代码入库。代码一般保存在git仓库中,开源代码管理工具gitlab就可以实现,触发认证的流程可以使用开源工具Jenkins,然后由Jenkins触发各种质量认证流程,综合得出一个结论,返回给gitlab,最后gitlab根据结果决定是否入库。
代码质量Verify的流程
代码质量认证的维度很多,如编译,静态检查,单元测试,复杂度,冒烟测试,集成测试等环节,本文主要关注的维度如下图所示:

- 代码编译:代码能不能正常编译成功,这是代码能不能入库的基本条件
- 复杂度检查:复杂度的一种度量方式是圈复杂度,简单的理解就是一个函数中有多少个if语句,函数的圈复杂度就是多少,圈复杂度越高说明代码的逻辑越复杂,可维护性就越低,质量越差。
- 静态检查:静态检查一般要借助专业的检查工具,检查的规则一般是由专家编辑,难度非常大。静态检查的主要目标是,在代码基本功能正常的前提下,找出代码中容易出问题的地方,提前暴露问题。如:数组越界,拷贝越界,资源泄漏,死循环等。几种代码静态检查工具:klocwork、coverity等。
- 单元测试:对于实际物理验证环境非常复杂的代码,单元测试将是一个神奇。它可以让你直接在代码的编辑环境中,模拟真实的物理环境运行代码,快速的对代码进行调试。
- 覆盖率:代码的覆盖率一般是在单元测试后进行检查,因为覆盖率的计算需要依赖单元测试的可以执行文件的运行结果。覆盖率 = 单元测试运行的代码行数 / 总的代码行数。代码覆盖率达不到一定指标,就算覆盖率检查不通过。
体会
在实际的开发过程中,搭建Verify的环境非常容易,难的是坚持入库的标准不动摇。一般情况下,代码就算Verify不过,也可以强制入库,导致破窗。唯一的方法就是坚持底线不突破,大家一起维护。
代码Verify简介的更多相关文章
- 最大开源代码sourceforge 简介 及视音频方面常用的开源代码
所有的音视频凯源代码在这里:http://sourceforge.net/directory/audio-video/os:windows/,你可以下载分析,视频不懂请发邮件给我,帮你分析. 0.视频 ...
- 机器学习&恶意代码检测简介
Malware detection 目录 可执行文件简介 检测方法概述 资源及参考文献 可执行文件简介 ELF(Executable Linkable Format) linux下的可执行文件格式,按 ...
- 微信小程序开发---各代码文件简介
根据上一文,已建立QuickStart 项目,该项目系本人毕设部分内容,所以记录以便以后查阅 开发小程序就必须了解小程序项目目录结构和文件作用,接下来就根据我现在自学得到的知识把这些记录下来. 一.目 ...
- ACE Editor在线代码编辑器简介及使用引导
转自博客:https://www.cnblogs.com/cz-xjw/p/6476179.html ACE 是一个开源的.独立的.基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScrip ...
- Oracle数据库代码指令简介
重大提醒!!!oracle里面的查询,一定要把查询名大写!!!就算你创建的时候是小写字母,查询的时候也一定要大写!!! 这是oracle的课后作业,弄懂这些也差不多了吧,不懂的可以去看我的SQL se ...
- 巡风代码架构简介以及Flask的项目文件结构简介
一.巡风: 巡风是一款什么东西,想必安全同行都不陌生吧.用它作为内网漏洞扫描管理架构是一种很好的选择,扫描快,开源,还可自己编写符合规则的POC直接放入相应目录来扩展.今天下午趁着有点时间捋了一下巡风 ...
- Python 控制流代码混淆简介,加大别人分析你代码逻辑和流程难度
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- SQL Server数据库代码指令简介
这些是比较常用的命令操作,事先声明,这些命令是不区分大小写的,我按照我的课本来总结用法和知识点,无用的章节自动省略. 没有一点数据库知识基础的可以等我录制视频,不然可能看不懂,视频链接:http:// ...
- Linux 命令 "cp" 代码实现简介
本blog主要是模仿Linux的cp命令的功能,未实现参数,只是基础功能部分. 本文的主要目的在于练习 文件流 和 目录流 中的函数的使用. 主要功能包括两种: 源文件属性为文件,拷贝到其它文件(内容 ...
随机推荐
- weblogic之高级进阶JMS的应用
不仅Activemq提供的jms服务,Weblogic也提供了jms服务,很多项目是部署在Weblogic中,使用其提供的jms服务也是很多企业的选择,一直没亲手试过,今天试了下,遇到的小问题还挺多, ...
- Java | 内部类(Inner Class)
前言 本文内容主要来自 Java 官方教程中的<嵌套类>章节. 本文提供的是 JDK 14 的示例代码. 定义 内部类(Inner Class),是 Java 中对类的一种定义方式,是嵌套 ...
- 并发04--JAVA中的锁
1.Lock接口 Lock与Synchronized实现效果一致,通过获得锁.释放锁等操作来控制多个线程访问共享资源,但是Synchronized将获取锁固话,必须先获得锁,再执行,因此两者对比来说, ...
- Spring WebFlux 01 (原理及使用场景)
一.什么是 Spring WebFlux 好多人以为Spring WebFlux就是Spring MVC的升级版,其实不然,那到底什么是Spring WebFlux呢,首先就要搞清楚Spring We ...
- ref和out的使用及区别
1. ref的使用:使用ref进行参数的传递时,该参数在创建时,必须设置其初始值,且ref侧重于修改: 2. out的使用: 采用out参数传递时,该参数在创建时,可以不设置初始值,但是在方法中必须 ...
- C program Language 'EOF' and 'getchar()'
#include <stdio.h> void main() { int c; c=getchar(); while(c!=EOF) { putchar(c); c=getchar(); ...
- yml配置基本使用
1.yml 基本知识 1.1 常识 基本结构 k: v 的结构 注意:冒号和v之间必须有空格,否则会出现问题: 大小写敏感 1.2 v 多种写法 看一下下面的这个例子: # rabbitmq 初始化配 ...
- (二)LVS介绍
LVS分3种模式 (a)NAT(网络地址映射):通过网络地址转换的方法来实现调度 优点:支持所有操作系统及私有网络,且只需一个公网 IP 地址 缺点:用户请求和响应报文都必须 ...
- Linux下对拍(A+B问题)
对拍代码 #include<bits/stdc++.h> using namespace std; int main(){ for(int i=1;;i++){ system(" ...
- 最大的位或 HDU - 5969 简单思维题
题目描述 B君和G君聊天的时候想到了如下的问题. 给定自然数l和r ,选取2个整数x,y满足l <= x <= y <= r ,使得x|y最大. 其中|表示按位或,即C. C++. ...