对于开发者而言,编译代码和提交代码是必不可少的流程,同一个需求反复提交的情况也时常出现,那么怎么避免这种情况,且保证代码的质量,这就是Verify CI的目标。Verify表示认证验证的意思,结合到我们软件开发者的身上就是对代码的认证。何谓对代码的认证,可以理解为对代码的功能,可维护性,复杂度等质量指标的验证,如果不达标就得不到认证。那么怎么将Verify集合到实际的开发流程中呢?

  对于一般的开发模式,如敏捷开发模式下,对实际的开发在来说,大概的流程是:接收需求,开发需求,需求自验证,提交代码。从实际的开发流程不能看出,只要保证了代码提交环节,就可以保证共享代码的质量,所以在代码提交环节做Verify,从而达到高质量的保证。

  结合一些开源的工具,我们可以实现如下流程,在代码提交的时候,触发认证流程,认证通过以后,代码入库。代码一般保存在git仓库中,开源代码管理工具gitlab就可以实现,触发认证的流程可以使用开源工具Jenkins,然后由Jenkins触发各种质量认证流程,综合得出一个结论,返回给gitlab,最后gitlab根据结果决定是否入库。

代码质量Verify的流程

  代码质量认证的维度很多,如编译,静态检查,单元测试,复杂度,冒烟测试,集成测试等环节,本文主要关注的维度如下图所示:

  • 代码编译:代码能不能正常编译成功,这是代码能不能入库的基本条件
  • 复杂度检查:复杂度的一种度量方式是圈复杂度,简单的理解就是一个函数中有多少个if语句,函数的圈复杂度就是多少,圈复杂度越高说明代码的逻辑越复杂,可维护性就越低,质量越差。
  • 静态检查:静态检查一般要借助专业的检查工具,检查的规则一般是由专家编辑,难度非常大。静态检查的主要目标是,在代码基本功能正常的前提下,找出代码中容易出问题的地方,提前暴露问题。如:数组越界,拷贝越界,资源泄漏,死循环等。几种代码静态检查工具:klocwork、coverity等。
  • 单元测试:对于实际物理验证环境非常复杂的代码,单元测试将是一个神奇。它可以让你直接在代码的编辑环境中,模拟真实的物理环境运行代码,快速的对代码进行调试。
  • 覆盖率:代码的覆盖率一般是在单元测试后进行检查,因为覆盖率的计算需要依赖单元测试的可以执行文件的运行结果。覆盖率 = 单元测试运行的代码行数 / 总的代码行数。代码覆盖率达不到一定指标,就算覆盖率检查不通过。

体会

  在实际的开发过程中,搭建Verify的环境非常容易,难的是坚持入库的标准不动摇。一般情况下,代码就算Verify不过,也可以强制入库,导致破窗。唯一的方法就是坚持底线不突破,大家一起维护。

代码Verify简介的更多相关文章

  1. 最大开源代码sourceforge 简介 及视音频方面常用的开源代码

    所有的音视频凯源代码在这里:http://sourceforge.net/directory/audio-video/os:windows/,你可以下载分析,视频不懂请发邮件给我,帮你分析. 0.视频 ...

  2. 机器学习&恶意代码检测简介

    Malware detection 目录 可执行文件简介 检测方法概述 资源及参考文献 可执行文件简介 ELF(Executable Linkable Format) linux下的可执行文件格式,按 ...

  3. 微信小程序开发---各代码文件简介

    根据上一文,已建立QuickStart 项目,该项目系本人毕设部分内容,所以记录以便以后查阅 开发小程序就必须了解小程序项目目录结构和文件作用,接下来就根据我现在自学得到的知识把这些记录下来. 一.目 ...

  4. ACE Editor在线代码编辑器简介及使用引导

    转自博客:https://www.cnblogs.com/cz-xjw/p/6476179.html ACE 是一个开源的.独立的.基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScrip ...

  5. Oracle数据库代码指令简介

    重大提醒!!!oracle里面的查询,一定要把查询名大写!!!就算你创建的时候是小写字母,查询的时候也一定要大写!!! 这是oracle的课后作业,弄懂这些也差不多了吧,不懂的可以去看我的SQL se ...

  6. 巡风代码架构简介以及Flask的项目文件结构简介

    一.巡风: 巡风是一款什么东西,想必安全同行都不陌生吧.用它作为内网漏洞扫描管理架构是一种很好的选择,扫描快,开源,还可自己编写符合规则的POC直接放入相应目录来扩展.今天下午趁着有点时间捋了一下巡风 ...

  7. Python 控制流代码混淆简介,加大别人分析你代码逻辑和流程难度

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 王平 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  8. SQL Server数据库代码指令简介

    这些是比较常用的命令操作,事先声明,这些命令是不区分大小写的,我按照我的课本来总结用法和知识点,无用的章节自动省略. 没有一点数据库知识基础的可以等我录制视频,不然可能看不懂,视频链接:http:// ...

  9. Linux 命令 "cp" 代码实现简介

    本blog主要是模仿Linux的cp命令的功能,未实现参数,只是基础功能部分. 本文的主要目的在于练习 文件流 和 目录流 中的函数的使用. 主要功能包括两种: 源文件属性为文件,拷贝到其它文件(内容 ...

随机推荐

  1. opencv C++矩阵操作

    int main(){ cv::Mat src1=(cv::Mat_<float>(2,3)<<1,2,3,4,5,6); cv::Mat src2=(cv::Mat_< ...

  2. v-model指令的学习(双向绑定)

    v-bind 只能实现数据的单项绑定,从data到view,无法实现双向绑定 v-model可以实现表单元素和model中数据的双向绑定 注意:model只能运用到表单元素中 如:input sele ...

  3. ECSHOP 2.5.1 二次开发文档【文件结构说明和数据库表分析】

    ecshop文件架构说明 /* ECShop 2.5.1 的结构图及各文件相应功能介绍 ECShop2.5.1_Beta upload 的目录 ┣ activity.php 活动列表 ┣ affich ...

  4. caffe的python接口学习(1)生成配置文件

    ---恢复内容开始--- 看了denny的博客,写下自己觉得简短有用的部分 想用caffe训练数据首先要学会编写配置文件: (即便是用别人训练好的模型也要进行微调的,所以此关不可跨越) 代码就不粘贴了 ...

  5. dart快速入门教程 (2)

    2.变量和数据类型 2.1.变量和常量 变量通俗的说就是可以变化的量,作用就是用来存储数据,你可以把一个变量看作是一个水果篮,里面可以装苹果.梨.香蕉等,常量就是一个固定的值,和变量是相对的,变量可以 ...

  6. SpringBoot2.x的依赖管理

    前提 这篇文章是<SpringBoot2.x入门>专辑的第1篇文章,使用的SpringBoot版本为2.3.1.RELEASE,JDK版本为1.8. 主要梳理一下SpringBoot2.x ...

  7. Python-发送邮件验证码

    前言 ​ 关于 Python 这个栏目,咕了几个月了,今天讲讲如何发送验证码并验证. ​ 因为部分原因,写这篇文章的时候心情是不太好的,播放首歌吧. 代码 导入 导入yagmail,random和ti ...

  8. python中lambda匿名函数与函数之间的关系

  9. CSS粘性定位

    粘性定位(position:sticky) 1.定义 粘性定位可以被认为是相对定位和固定定位的混合.元素在跨越特定阈值前为相对定位,之后为固定定位.(MDN传送门) 这个特定阈值指的是 top, ri ...

  10. js修改函数内部的this指向(bind,call,apply)

    js修改函数内部的this指向 在调用函数的时候偶尔在函数内部会使用到this,在使用this的时候发现并不是我们想要指向的对象.可以通过bind,call,apply来修改函数内部的this指向. ...