代码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命令的功能,未实现参数,只是基础功能部分. 本文的主要目的在于练习 文件流 和 目录流 中的函数的使用. 主要功能包括两种: 源文件属性为文件,拷贝到其它文件(内容 ...
随机推荐
- Java WebService(实战) 简单实例
一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService ...
- JavaWeb网上图书商城完整项目--day02-12.激活功能各层实现
1.我们来看程序的代码 数据库层: 1.通过激活码查找到对应的用户 2.设置用户的激活状态 2.业务层 1.通过数据库接口通过验证码得到对应的用户 2.判断当用户是否为空,如果没有通过激活码查找到对应 ...
- 微信小程序 wx:if 多条件判断
<view wx:if="{{a}}">单个条件</view> <view wx:if="{{a || b}}">多个或条件 ...
- DNS篇(详解DNS)
*文章来源:https://blog.egsec.cn/archives/601 *本文将主要说明:本文主要叙述什么是DNS.域名的层级.DNS 解析过程.DNS的缓存时间.DNS 的记录类型.DNS ...
- Python 简明教程 --- 16,Python 高阶函数
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 对于那些快速算法,我们总是可以拿一些速度差不多但是更容易理解的算法来替代它们. -- Douglas ...
- C# 从1到Core--委托与事件
委托与事件在C#1.0的时候就有了,随着C#版本的不断更新,有些写法和功能也在不断改变.本文温故一下这些改变,以及在NET Core中关于事件的一点改变. 一.C#1.0 从委托开始 1. 基本方式 ...
- JavaScript基础Curry化(021)
时候我们希望函数可以分步接受参数,并在所有参数都到位后得到执行结果.为了实现这种机制,我们先了解函数在Javascript中的应用过程: 1. 函数的“应用”(Function Application ...
- redis 链接数满了
服务器上可以设置timeout参数,这样可以将限制的连接自动释放掉.
- 自定义PHPstorm快捷键
这篇随笔介绍一下PHPstorm自定义快捷键的步骤: 1.点击主菜单 File 下的 setting : 2.在弹出框中点击 Keymap : 3.之后会出现如下图所示的界面(图中所有的菜单都折叠了) ...
- 学习 Java 网站推荐给你
推荐几个非常不错的 Java 学习网站 LearnJava 在线 这是一个非常不错的学习 Java 的在线网站,纯免费.这是一个个人项目,旨在通过简单有效的在浏览器中进行练习让你快速掌握 Java 编 ...