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

本文分享自华为云社区《公司新来了一个质量工程师,说团队要保证 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. F5 Http monitor

    The BIG-IP HTTP health monitor attempts to mabtch the configured Receive String against the HTTP res ...

  2. python 得到变量名的结果为名的变量的值locals()

    >>> a="1">>> b="a">>> print(a,b)1 a>>> print ...

  3. Java学习之注解篇

    Java学习之注解篇 0x00 前言 续上篇文章,这篇文章就来写一下注解的相关内容. 0x01 注解概述 Java注解(Annotation)又称Java标注,是JDK5.0约会的一种注释机制. 和J ...

  4. windows程序快速启动的方式:WIN键+R

    WIN键+R是windows快速启动程序的一种方式,一般能独立运行的程序都能以这种方式启动.如notepad.calc.explorer等程序. 在命令行方式下explorer加上不同的参数,会得到不 ...

  5. 解决 Github 打不开或打开很慢的问题

    解决 Github 打不开或打开很慢的问题 方法一 一.确定 github 网站的 ip 打开网址:http://github.com.ipaddress.com/ 192.30.253.112 gi ...

  6. Java中lombok @Builder注解使用详解(十八)

    Lombok大家都知道,在使用POJO过程中,它给我们带来了很多便利,省下大量写get.set方法.构造器.equal.toString方法的时间.除此之外,通过@Builder注解,lombok还可 ...

  7. fiddler抓取手机模拟器数据

    引自:https://blog.csdn.net/lengdaochuqiao/article/details/88170522 1.下载最新版fiddler ,强烈建议在官网下载:https://w ...

  8. odoo视图 “动作” 里添加菜单按钮:案例

    ####################################################################################odoo中常用方法,在动作里面添 ...

  9. Win10强制程序高DPI缩放设置

    起因 工作原因,需要在win10上安装数个古老vc版本(vc6,vc2008,vc2010),但是显示器是2K的,DPI缩放有问题 尝试 VC6比较好解决:右键,属性,兼容性,更改高DPI设置,勾选替 ...

  10. PhotoShop CC2015(64位)下载链接和破解教程

    photoshop如今有cc和cs两种版本,之前出了一个cs的破解教程和扣圆形图,有很多朋友说cc比cs好用的多,希望出个cc的下载链接和破解教程,故推出2015pscc版破解教程和下载链接. 百度云 ...