摘要:静态代码检查又称为静态程序分析,是指在不运行计算机程序的条件下,进行程序分析的方法。

本文分享自华为云社区《公司新来了一个质量工程师,说团队要保证 0 error,0 warning》,作者:敏捷的小智 。

公司新来了一个质量工程师,说要进行过程改善、提高质量、降本增效……因此一系列的分析、报告和新增的质量活动陆续上线,其中被大家吐槽最多的是:check清零。什么意思呢?就是质量工程师会监督静态代码检查的修复结果,团队要保证 0 error,0 warning 

图1 check清零

小伙伴可能会奇怪:修复静态代码检查结果这事,对于每个程序员来说不是天经地义吗?为啥要吐槽呢?我们先来了解下什么是静态代码检查。

什么是静态代码检查

图 2 静态代码扫描

根据维基百科,静态代码检查又称为静态程序分析,是指在不运行计算机程序的条件下,进行程序分析的方法。静态代码检查工具会从词法、语法、语义等多维度去对工程代码扫描分析,发现可能存在的问题,比如变量未定义、类型不匹配、变量作用域问题、数组下标越界、内存泄露等问题。工具会按照自己的规则进行问题的严重等级划分,给出不同的标识和提示。

通常情况下,静态代码检查之后大家都会去将错误清零,但是有些警告不影响程序功能就忽略不去修改了。同时修改这类问题需要投入的时间比较多,增加了团队的工作量。而且对于新人来说,如果不熟悉代码框架的情况,修改静态检查问题的时候还有可能导致出现新的bug出现。有时工具还存在误报的情况等等,所以就出现了文章开头中团队的吐槽点:check清零。既然如此,为什么要进行静态代码检查呢?

为什么要进行静态代码检查

回答这个问题,我们要追溯到团队存在的意义是什么,是为了尽早交付给客户可工作的软件,为了创造价值。可工作的软件必然是不存在缺陷,尽早交付必然要尽早发现问题,而静态代码检查就是能够尽早发现问题的一个必要环节。

同时,从缺陷修复成本上看,戴明曾提出“缺陷发现得越早,修复的成本越低”。有数据指 85% 的缺陷都是在代码编码阶段引入的,然而大部分的缺陷并不是在编码的时候发现的,而是在之后的测试阶段发现的,甚至是已经上线后。而且随着越往后发现缺陷,修复的成本也越高。

在 STICKYMINDS 网站上的一篇名为 《 The Shift-Left Approach to Software Testing 》 的文章中提到,假如在编码阶段发现的缺陷只需要 1 分钟就能解决,那么单元测试阶段需要 4 分钟,功能测试阶段需要 10 分钟,系统测试阶段需要 40 分钟,而到了发布之后可能就需要 640 分钟来修复 。

图 3 来源《 Applied Software Measurement:Global Analysis of Productivity and Quality》

静态代码检查也叫静态测试,是质量内建举措中的测试左移实践之一,在静态代码检查阶段发现代码的问题修复成本是很低的。

图 4 缺陷修复成本

由此可见,静态代码检查在项目中是必不可少的一个环节。

如何进行静态代码检查

不同的语言都有自己对应的一款或者几款代码检查工具,许多静态代码检查工具也可以支持两种或者多种语言。比如 Coverity 可以支持 C/C++,C#,JAVA , Checkstyle、FindBugs和PMD支持Java,rats支持C/C++,Python,Perl,PHP,工具很多就不一一列举。

随着云原生和DevOps的普及,云端开发和流水线的推广,云上的静态代码检查功能也应运而生,这里以 华为云DevCloud 的 Code Check 为例,一起来看一下如何在云端轻松实现对多编程语言的检查。

使用起来很简单,三步走就可以完成:新建任务 -> 执行任务 -> 查看报告。

1.新建代码检查任务

在 华为云DevCloud 首页工具栏选择“服务 > 代码检查”进入,或者点击 Code Check 进入。单击“代码检查”首页的“新建任务”创建代码检查任务。

图 5-1 Code Check新建任务

创建任务时通过关联项目下代码仓库拉取代码。源代码有4个来源可选,不同的选择要填写对应的参数值,同时选择代码工程的语言类型。

图 5-2 Code Check 选择源码源

创建任务后,可以在设置中进行规则集选择。Code Check会识别到代码中包含的语言,然后在对应的语言规则集中选择中选择对应的规则即可。CodeCheck 可以 支持 Java、JavaScript、CSS、HTML、PHP、C#、Android等常见 10 种开发语言,还可以多种语混合检查;可以提供近2000条华为典型检查规则,支持web检查、安全检查、架构检查、编码问题检查等场景。

图 5-3 Code Check 规则集

2.执行代码检查任务

代码检查任务新建成功后,单击任务的开始检查按钮进行执行。

图 6-1 Code Check 执行任务

检查后会根据问题级别进行分类显示,并提供详细的缺陷影响说明、正确示例、错误示例、修改建议。

图 6- 2 Code Check 缺陷展示

3.查看代码检查报告

检查后可以提供多维度报表,单击检查任务名称链接,进入代码检查任务详情页面,可以查看“概览”、“ 代码 问题”、 “代码质量”、 “圈复杂度”、“代码重复率” 等信息 。

图 7 Code Check检查报告

更多的 Code Check 内容可以访问 Code Check 介绍 。

写在最后

讲了这么多,质量工程师要求的“check清零”对不对,到底要不要做?这其实就是代码检查中质量门禁的作用。静态代码扫描出来的问题项按照致命、严重、一般和提示进行分类。从交付的角度,首先是保证可工作的代码,因此致命和严重的问题是不应该存在的,所以门禁开关打开,阈值为0。剩下的一般问题和提示问题如果不影响代码功能,可以考虑在当前迭代不予处理,但是要分析是否应对,以及确定完成的日期,可以以技术债的形式存在待办列表项中,在某一个缓冲迭代中进行统一处理。简单来说,就是团队要根据业务交付的实际情况,共同决定质量门禁如何设置,而不是简单的一刀切。

图 8 质量门禁

关于工具,不同的静态代码检查工具使用起来是不相同,可以通过工具的官方网站或者其他网页分享找到对应的使用方法。重点是要理解为什么要做静态代码检查这件事,这样才能真正用心的把这件事做好,而不是走过场。在任何时候,让团队成员知道为什么做永远都比告诉怎么做要重要。为了做好测试左移,实现质量内建,将错误扼杀在萌芽种,降低缺陷修复成本,尽早交付给客户可工作的软件,创造有价值的产品,让我们一起做好静态代码检查吧。

点击关注,第一时间了解华为云新鲜技术~

公司新来了一个质量工程师,说团队要保证 0 error,0 warning相关推荐

  1. 新公司新入手的一个新项目的心路历程

    刚来公司报道不久,接到我们老大派来的一个新项目,接到活的心情是矛盾的,既兴奋又紧张,兴奋的是来公司一段时间,没有活干,闲着是让我感觉最难受的一件事情,宁愿忙成狗,也不愿意闲得慌,终于有活干了,想着能让 ...

  2. 公司新招了一个00后软件测试工程师,上来一顿操作给我看呆了...

    前段时间公司新来了个同事,听说大学是学的广告专业,因为喜欢IT行业就找了个培训班,后来在一家小公司干了三年,现在跳槽来我们公司.来了之后把现有项目的性能优化了一遍,服务器缩减一半,性能反而提升4倍!给 ...

  3. 公司新来了个00后测试工程师,一副毛头小子的样儿,哪想到是新一代卷王...

    内卷,是现在热度非常高的一个词汇,随着热度不断攀升,隐隐到了"万物皆可卷"的程度. 在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是.技术不好的同事,我们可以帮他 ...

  4. 第一天来到新公司的volg (ETL开发工程师)

    第一天来到新公司的volg (ETL开发工程师) 新的改变 首先自我介绍一下,我是一名刚刚大学毕业的程序猿,在大学完了两年,到最后大三一年才开始认真的去学习编程的各种知识,开源框架,看视频代码.现在是 ...

  5. 公司新来一个以前在腾讯拿37K的测试,真是麻雀啄牛腚——雀食牛逼

    一进公司,看见门外有几个带着行李在外面等待的人,应该就是来入职的,果不其然,在进公司后,召开了新人见面会,让他们做了自我介绍和职业规划以及部门,令我印象最深刻的就是一个刚刚从腾讯离职出来的,薪资已经达 ...

  6. 公司新来一个以前在阿里拿37K的测试,真是麻雀啄牛腚——雀食牛逼

    一进公司,看见门外有几个带着行李在外面等待的人,应该就是来入职的,果不其然,在进公司后,召开了新人见面会,让他们做了自我介绍和职业规划以及部门,令我印象最深刻的就是一个刚刚从阿里离职出来的,薪资已经达 ...

  7. 我在北京工作这几年 – 一个软件工程师的反省

    我于2007年来到北京,在北京工作这些年,先后在NEC.风行.百度几家公司担任软件工程师的职务.NEC是一家具有百年历史的传统日企,在知春路的分公司叫日电电子,我们部门主要从事机顶盒.数字电视上嵌入式 ...

  8. 工程师如何对待开源 | 一个老工程师的肺腑之言

    https://my.oschina.net/u/3742410/blog/5526206 本文是笔者作为一个在知名科技企业内从事开源相关工作超过20年的工程师,亲身经历或者亲眼目睹很多工程师对待开源 ...

  9. 工程师如何对待开源——一个老工程师的肺腑之言

    |作者:谭中意 |编辑:李佳阳 |设计:苏子馨 |责编:王玥敏  工程师如何对待开源  本文是笔者作为一个在知名科技企业内从事开源相关工作超过 20 年的工程师,亲身经历或者亲眼目睹很多工程师对待开源 ...

最新文章

  1. Java编写胖老鼠的交易_猫和胖老鼠
  2. canvas学习笔记(下篇) -- canvas入门教程--保存状态/变形/旋转/缩放/矩阵变换/综合案例(星空/时钟/小球)...
  3. 阿森纳如果小组第二出线
  4. 《移动应用开发》实验报告——仿饿了么商家页面
  5. ffplay.c学习-2-数据读取线程
  6. CentOS图形界面下如何安装Eclipse和使用maven
  7. java模拟病人就诊过程_new 患者在医院看病过程:先排队等候 联合开发网 - pudn.com...
  8. Excel导入SQL(VB.NET版)
  9. Photoshop插件-删除中间调通道蒙板-脚本开发-PS插件
  10. qemu运行linux内核很慢,bugfix: Qemu 运行 ARM Linux 5.0 必现启动死机
  11. 线性代数——线性方程组和矩阵(Linear and Matrices)
  12. 基于beautifulSoup进行电影网站排名的获取与格式化输出
  13. C#正则验证车牌、新能源车牌
  14. php微信公众号样式模板下载,PHP微信公众平台自定义菜单
  15. 8月20日 网工学习 二层交换机功能 MAC地址 交换机的寻址 总结二层交换机,根据源MAC地址进行MAC地址表学习,根据目的MAC地址转发
  16. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
  17. android oboe 混音_Android之AppBarLayout实现悬停吸附伸缩效果
  18. hhuoj:1398 红与黑
  19. AI在医疗影像设备全流程应用
  20. Mac系统快速上手教学

热门文章

  1. 大话 | 大话程序猿眼里最全的高并发,快收藏!
  2. 属性 元素的内容 创建,插入和删除节点 虚拟节点
  3. Bootstrap3 下拉菜单及其调用方式
  4. CSS3 图像边框 border-image属性
  5. es6 模块的语法严格模式
  6. php判断手机浏览器,php 获取 手机浏览器的信息 | 学步园
  7. Android编译自定义sdk,java – 使用自定义android.bluetooth.而不是在android studio中默认的sdk android.jar中存在一个...
  8. php xml getattribute,PHP XMLReader getAttribute()用法及代码示例
  9. Docker学习のDocker初识
  10. python 的多线程执行速度