如何做好代码审查

在企业中,大多数项目是由团队协作完成的,人员流动,项目进度等诸多原因都可能对项目的质量构成影响,要保证代码的水平与质量,代码审查就非常重要了,为了帮忙大家认识和理解代码审查,结合我在不同项目与不同团队中的协作经历,总结如下,希望在提升代码质量的同事,也让大家再团队中树立良好的影响力。

技术层面/非技术层面 理解代码审查:
作为开发者/技术:
让代码顺利通过代码审查,提高自身代码质量

作为项目管理/非技术:
规范团队代码标准
保证项目代码水平
了解团队的技术水平

由浅入深的理解代码审查:
基础概念-实战操作-工具使用-全流程
what :什么是代码审查
why: 为什么要做代码审查
when: 什么时候要做代码审查

不用场景下需要不同的代码审查工具
正式的和轻量级的代码审查流程

代码审查的8个关注点:
编码风格
命名规范
功能性审查: 不一定是终端用户,是否符合开发者的预期
测试覆盖:
复杂度审查:
注释审查:
代码设计审查:不会影响功能,但增加了扩展与维护的成本
代码安全审查:

什么是代码审查(what):
对计算机源代码 系统化的审查,常用软件同行评审的方式进行,其目的是在找出及修正正在软件开发初期未发现的错误,提升软件质量以及开发者的技术:

为什么要做代码审查(why):
1 帮助提高代码质量
2 上下文共享,独自工作,其他模块,通常会交代改动对应的业务以及技术需求,然后对应具体的详细代码,增加团队对该需求的了解
3 帮助新人快速融入项目,针对具体的代码,不仅会了解业务上下文,还会对技术层面的具体讨论,让新人对技术规范也有了详细的了解
4 帮助开发人员成长 :相互讨论,基于项目代码,实时性非常强,以后当遇到相应问题,会有更合适以及更实时的方案
5 帮助影响力建设:给团队展示比较棒,比较优雅的代码。既可以起到引导的作用,又可以建立影响力,同时给与实时建议

代码审查的代价
1 专门的时间和精力 : 选择合适的代码审查方式,不必占用所有团队人员时间
2 可能引起团队成员间的不适: 特别是项目质量要求比较严格的场景下,会对代码要求比较严格,会提出一些比较苛刻的修改意见,有些成员人员会觉得比较针对自己,修改这个那个, 需要 沟通技巧,正向反馈,建议方式输出,要给与正向反馈,遇到好的情况

什么时候进行代码审查(when):
代码审查应该是及时的,不能说上个月的改动,这个月才开始审查,那这个月什么都有可能发生,or 作者去其他项目了, 有代码变更就可以进行代码审查
1 提交到远程仓库 (被别人使用 or 部署到环境中 )
2 未提交到远程仓库(比较大的改动,自己都拿不准,就会阻碍其他开发者的工作,特别是对一些会影响到 其他人的代码)

代码审查频率:
集中式 :审查者和代码作者,沟通高效,频率不要超过一天一次
异步式: 借助工具,建议审查者每天预留时间进行代码审查

常见的代码审查工具:对象是 改变的代码(增加,删除,修改)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码审查流程:
范根检查法:

在这里插入图片描述
载人飞船,动车调度程序,缺陷0容忍这种结构化审查,很有必要

轻量级的审查流程
1 结对编程
2 同步代码审查(在一定时效性呢,比较适合在同一地点进行办公的团队)
3 异步代码审查(异地办公的团队)
根据团队风格,选择多种审查流程,结合进行,常规编码异步审查, 重大改动使用结对编程,减少返工可能

代码审查的8个关注点:
编码风格:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拼音不能很好的区分 名词和动词
不明很好的区别单数还是复数

缩写不能很快理解含义 genID startAct 不规范 , 公用缩写是可以使用的,比如createTcpConnection()
在这里插入图片描述
在这里插入图片描述

禁止使用未定义的常量:
在这里插入图片描述
长整型赋值需要使用大写L后缀
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

编码风格审查都要势必躬亲嘛?
Plugins : javaIDE Alibaba
Gradle 插件处理审查
在这里插入图片描述

命名:
什么样的命名是可接受的呢 : 足够长以接示意图,但又不太长难以阅读

如何做好一个好的命名:
在这里插入图片描述
拼音不能很好的区分 名词和动词
不明很好的区别单数还是复数在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
功能性代码审查:这个不对其他的完全没有意义
代码是否符合用户意图
在这里插入图片描述
比如一个方法 saveInDb 但是没有做任何数据库操作,这种问题在后续维护,以及新特性扩展带来隐患
在这里插入图片描述

测试覆盖:
什么是软件测试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

复杂度需要关注什么:

在这里插入图片描述

代码复杂度高,势必要承担很多职责,所以模块内聚性低

在这里插入图片描述

一般一个方法在10以内
复杂度优化
在这里插入图片描述
注释: 不参与执行,但为什么要关注呢, 虽然不用,但也不用高要求的对待
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
站在模块和系统的角度去思考,不要站在某个方法上思考,去思考自己的设计会不会有些坏味道。

安全维度:
在这里插入图片描述
安全维度要审查什么:

在这里插入图片描述

在这里插入图片描述

自动化工具
在这里插入图片描述
和业务层 相关的场景 需要人工审查

如何让代码审查更加高效
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本书主要讲述了代码质量与其整洁度成正比的道理,并由此揭示代码整洁之道

向读者展示如何区分好的(和坏的)代码,如何阅读,应该注意什么,以及如何使用这些知识改进自己的代码。养成阅读高品质代码的习惯,可以提高编写代码的能力

本书清晰揭示了重构的过程,解释了重构的原理和最佳实践方式,并给出了何时以及何地应该开始挖掘代码以求改善

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值