我所了解Code Review得到认可并且保持更新

代码有这几种级别:1,可编译;2,可运行;3,可测试;4,可读;5,可维护;6,可重用。

通过自动化测试的代码只能达到第3层次,而通过code Review的代码可以上升到更高的层次。

如何进行Code Review?

我一直不认为programmer只是埋头Code,靠自己的大脑就能运行所有的Code,一个团队所有人都是这样的工作,那没有什么比这还要糟糕了。

多沟通,多交流,在一个团队是很必要的。

多问问题。 “这块儿是怎么工作的?” “这个问题,你这个怎么处理的?”

多当面讨论。 小组内的同事是坐在一起的,找个好的轻松时间,face to face的 code review是非常有效的。

区分重点,不要舍本逐末。 优先抓住 设计,可读性,健壮性等重点问题。

Code Review的意识

作为一个Developer , 不仅要Deliver working code, 还要Deliver maintainable code.

必要时进行重构,随着项目的迭代,在计划新增功能的同时,开发要主动计划重构的工作项。

开放的心态,虚心接受大家的Review Comments。

在Code Review中,检查清单是一个非常好的工具—它们保证了审查可以在你的团队中始终如一的进行。

Code Review清单

常规项

代码能够工作么?它有没有实现预期的功能,逻辑是否正确等。

所有的代码是否简单易懂?

代码符合你所遵循的编程规范么?这通常包括大括号的位置,变量名和函数名,行的长度,缩进,格式和注释。

是否存在多余的或是重复的代码?

代码是否尽可能的模块化了?

是否有可以被替换的全局变量?

是否有被注释掉的代码?

循环是否设置了长度和正确的终止条件?

是否有可以被库函数替代的代码?

是否有可以删除的日志或调试代码?

安全

所有的数据输入是否都进行了检查(检测正确的类型,长度,格式和范围)并且进行了编码?

在哪里使用了第三方工具,返回的错误是否被捕获?

输出的值是否进行了检查并且编码?

无效的参数值是否能够处理?

文档

是否有注释,并且描述了代码的意图?

所有的函数都有注释吗?

对非常规行为和边界情况处理是否有描述?

第三方库的使用和函数是否有文档?

数据结构和计量单位是否进行了解释?

是否有未完成的代码?如果是的话,是不是应该移除,或者用合适的标记进行标记比如‘TODO’?

测试

  • 代码是否可以测试?比如,不要添加太多的或是隐藏的依赖关系,不能够初始化对象,测试框架可以使用方法等。
  • 是否存在测试,它们是否可以被理解?比如,至少达到你满意的代码覆盖(code coverage)。
  • 单元测试是否真正的测试了代码是否可以完成预期的功能?
  • 是否检查了数组的“越界“错误?
  • 是否有可以被已经存在的API所替代的测试代码?
  • 你同样需要把特定语言中有可能引起错误的问题添加到清单中。
  • 这个清单故意没有详尽的列出所有可能会发生的错误。你不希望你的清单是这样的,太长了以至于从来没人会去用它。仅仅包含常见的问题会比较好。

优化你的清单

把使用清单作为你的起点,针对特定的使用案例,你需要对其进行优化。一个比较棒的方式就是让你的团队记录下那些在代码审查过程中临时发现的问题,有了这些数据,你就能够确定你的团队常犯的错误,然后你就可以量身定制一个审查清单。确保你删除了那些没有出现过的错误。

得到认可并且保持更新

要定期检查你的清单,以确保各条目仍然是有意义的。

  • 有了一个好的清单,可以提高你在代码审查过程中发现的缺陷个数。这可以帮助你提高代码标准,避免质量参差不齐的代码审查。

有参考:

程序员必备的代码审查(Code Review)清单(How code review)

http://blog.jobbole.com/83595/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏三丰SanFeng

Linux进程间通信(IPC)机制总览

Linux进程间通信 Ø 管道与消息队列 ü 匿名管道,命名管道 ü 消息队列 Ø 信号 ü 信号基础 ü 信号应用 Ø 锁与信号灯 ü 记录锁 ü 有名信号灯...

24810
来自专栏微信小程序开发

微信小程序开发常见问题(二)

知晓程序员,专注微信小程序开发的程序员! 今天再给大家分享几个微信小程序开发的常见问题,顺便吐槽一下,武汉的冬天太TM冷了,没有暖气的冬天真的很难过,写文章的心...

4885
来自专栏FreeBuf

逆向实践:批量验证微信号是否存在

一、前言 xposed是一款安卓平台下强大的hook框架,我们可以用他来开发很多强大的插件,以此来帮助我们更方便地解决某些实际的问题。本文将尝试利用xposed...

4045
来自专栏WeTest质量开放平台团队的专栏

内存是手游的硬伤——Unity游戏Mono内存管理与泄漏

内存是游戏的硬伤,如果没有做好内存的管理问题,游戏极有可能会出现卡顿,闪退等影响用户体验的现象。本文介绍了在腾讯游戏在Unity游戏开发过程中常见的Mono内存...

932
来自专栏做全栈攻城狮

程序员带你学习安卓开发,十天快速入门-基础知识(四)

我们就是通过测试项目进行学习安卓基本语法。展开之后,打开ExampleUnitTest类。

965
来自专栏哲学驱动设计

分享:使用 TypeScript 编写的 JavaScript 游戏代码

《上篇博客》我写出了我一直期望的 JavaScript 大型程序的开发模式,以及 TS(TypeScript) 的一些优势。博客完成之后,我又花了一天时间试用 ...

3225
来自专栏卡少编程之旅

REACT框架学习心得

3567
来自专栏Golang语言社区

nodejs php go语言了解

1、Nodejs 1) 简单的说 Node.js 就是运行在服务端的 JavaScript。 2) Node.js 是一个基于Chrome JavaScript...

55111
来自专栏点滴积累

geotrellis使用(十三)数据导入BUG解决方案说明

Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG说明...

3817
来自专栏架构师之路

计数系统架构实践一次搞定 | 架构师之路

提醒,本文较长,可提前收藏/转发。 一、需求缘起 很多业务都有“计数”需求,以微博为例: ? 微博首页的个人中心部分,有三个重要的计数: 关注了多少人的计数 粉...

5306

扫码关注云+社区

领取腾讯云代金券