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

本文分享自华为云社区《公司新来了一个质量工程师,说团队要保证 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首页工具栏选择“服务 > 代码检查”进入,或者点击 CodeCheck进入。或者点击 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. (转)我在北京工作这几年 – 一个软件工程师的反省

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

  2. 5G为何采纳华为力挺的Polar码?一个通信工程师的大实话

    Polar码被采纳为5G eMBB场景的控制信道编码,这两天连续被这条消息刷屏,连吃瓜群众都直呼好爽. 然而,随着媒体报道的持续发酵,真相在口口相传中变了形,不乏夸大不实之嫌,小编终于坐不住了,也想吐 ...

  3. [转][业界动态] 5G为何采纳华为力挺的Polar码?一个通信工程师的大实话

    本文转自:http://xinsheng.huawei.com/cn/index.php?app=forum&mod=Detail&act=index&id=3264791 P ...

  4. 一个Java工程师的入门级Linux命令集

    0.前言    网上介绍linux的命令的文章一大堆,但是大部分都是流于命令介绍,把命令的所有参数都介绍一遍,但是其实在真正的工作中,很多参数都不会用到.本文总结了我自己常用的一些命令,这些命令都比较 ...

  5. 为什么每一个爬虫工程师都应该学习 Kafka

    这篇文章不会涉及到Kafka 的具体操作,而是告诉你 Kafka 是什么,以及它能在爬虫开发中扮演什么重要角色. 一个简单的需求 假设我们需要写一个微博爬虫,老板给的需求如下: 开发爬虫对你来说非常简 ...

  6. Cloudera公司主要提供Apache Hadoop开发工程师认证

    Cloudera Cloudera公司主要提供Apache Hadoop开发工程师认证(Cloudera CertifiedDeveloper for Apache Hadoop ,CCDH)和Apa ...

  7. Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结

    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结 1.1. Java的编年史2 ...

  8. [团队项目]SCRUM项目6.0 7.0 (新)

    6.0----------------------------------------------------- sprint演示 1.坚持所有的sprint都结束于演示. 团队的成果得到认可,会感觉 ...

  9. webpack 4.0.0-beta.0 新特性介绍

    webpack 可以看做是模块打包机.它做的事情是:分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等),并将其打包为合适的格式 ...

随机推荐

  1. Maven | 把jar包安装到本地仓库

    使用的场景 自己写的工具类想安装到本地 从Maven仓库中下载不下来的jar 使用的步骤 首先要保证自己的Maven配置全局环境变量,如果没有配置过maven全局变量,可以按照下面的步骤配置一下: 先 ...

  2. CF1225E题解 Rock Is Push

    在打CF的时候没想到www这个dp真的蛮巧妙的 这是一道dp题(废话 假设我们走到了\((i,j)\)位置,因为我们只能下移/右移,那么我们所有上方与左方的石块(即\(\{ (i,j)|i<n ...

  3. maven手动添加库文件

    项目应用到了ojdbc,dubbo等私有库,maven无法直接下载,需要手动下载后添加到maven本地库里面. 以下以ojdbc为例: 1.下载jar后,cmd添加到本地库: mvn install: ...

  4. 【保姆级】利用Github搭建自己的个人博客,看完就会

    大家好,我是辰哥~ 作为一名喜欢技术的爱好者,平时喜欢把自己学习技术的心得或者一些踩坑.易错的过程记录下来,首选的是技术平台(博客),今天辰哥来教大家如何利用Github来搭建一个自己的个人博客平台. ...

  5. PAT乙级:1082 射击比赛 (20分)

    PAT乙级:1082 射击比赛 (20分) 题干 本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找 ...

  6. 如何掌握C#的核心技术

    如何掌握C#的核心技术 感谢网友毛大神制作的图. 引子 前不久看到一个段子,某年宁波交警引进人脸识别技术抓拍行人闯红灯,结果一天下来被发现闯红灯次数最多的是珠海女子董小姐,日闯红灯3000多次.宁波交 ...

  7. 前端基础div(六)

    实例 文档中的一个部分会显示为绿色: <div style="color:#00FF00"> <h3>This is a header</h3> ...

  8. Java规范的三种注释方式:

    1.单行注释 // //单行注释 2.多行注释 /* */ /* 多行 注释 */ 3.文档注释[java特有的] /** */ ◆注释内容可以被JDK提供的工具javadoc所解析,生成一套以网页文 ...

  9. 如何写好技术文档——来自Google十多年的文档经验

    本文大部分内容翻译总结自<Software Engineering at Google> 第10章节 Documentation. 另外,该书电子版近日已经可以免费下载了 https:// ...

  10. nacos Failed to obtain JDBC Connection 连接异常

    在conf/目录下,将application.properties.example 改名为bootstrap.properties 将连接数据库信息添加到末尾 # db mysql spring.da ...