什么是代码审查?

代码审查是一个过程,即代码只有经过非作者本人评审后才能进入代码仓库。

代码审查的目的

但是大家为什么要做代码审查?不同团队的原因是各不相同的。笔者假设大家进行代码审查的目的是为了保证代码质量。如果继续问下去,为什么要保证代码质量?这是另一个问题,留给读者朋友思考。

这里还会有另一个问题:如果你写出来的代码质量高,那么,你是不是就不需要代码审查了?答案是肯定的。但是问题是你如何知道你写出来的代码质量是高的?

什么是代码质量

既然代码审查的目的是保证代码质量,那么,我们就必须回答什么是代码质量这个问题。

代码质量其实指的是软件系统的内在质量。那是软件系统最终用户看不到的,也不应该看到的。最终用户看得到的,称之为软件系统的外在质量。这在《代码大全》第二十章中有详细介绍。

该书中给出了代码质量的特性:

•可维护性(Mantinability)•灵活性(Flexibility)•可移植性(Portability)•可重用性(Reusability)•可读性(Readability)•可测试性(Testability)•可理解性(Understandability)

本文假设《代码大全》是正确的。

代码可读性与可理解性之间的区别

有读者注意到可读性与可理解性似乎是同一特性。其实不是。

可读性与可理解性之间的区别是可读性强调的是细节语句,而可理解性强调的是系统设计层面。这好像高中生在做阅读理解题时,你认识文中的每个词,却你无法理解全文。

为什么代码审查能保证代码质量

既然我们实践代码审查的目标是为了保证代码的质量,那么,我们为什么认为代码审查能保证我们的代码质量呢?

作为Linux的创始人Linus会这样回答:足够多的眼睛,就可让所有问题浮现(given enough eyeballs, all bugs are shallow)。

但是多少眼睛才算足够多呢?反过来问:如果所有的问题没有被浮现,代表的是我们的眼睛不够多?这是另一个问题了。Linus的回答不足以证明代码审查能保证代码质量。

笔者认为应该以代码的特性为起点,重新审视代码质量的特性。你会发现所有的特性都是从旁观者的角度来看待的。也就是说只能由旁观者评判代码质量。而代码审查就是以旁观者的角度对作者的代码进行审查,基于此,我们认为代码审查是能保证代码质量的。

以下是为什么我认为代码特性是从旁观者的角度看待的:

•代码可维护性是否好,由其他人向它增加一个功能的容易程度来证明;•代码是否灵活,当其他人为了某个特定的目的修改代码时,修改的难易程度才能证明;•代码是否具有可移植性,移植到其它环境的难易程度才能证明;•代码的可重用性如何,由其它系统使用它的难易程序证明;•代码可不可读,由代码评审人读懂该代码所花费的时间决定;•代码是否可测,这部分由测试覆盖率来决定;•代码的可理解性,由代码评审人理解代码所花费的时间决定;

但是,以上只是通过逻辑推理来证明代码审查能保证代码质量,并没有真正的证据证明。

代码审查能否真的保证代码质量,最终还是靠数据说话。所以,我们还必须想办法评估代码质量与代码审查之间的关系。

可理解性的重要性

在重新审视代码质量的特性时,我们注意到这些特性之间的关系。那就是代码的可理解性是其它特性的基础。如果你不理解你将要修改的代码,谈何维护、扩展、重用、移植、测试?就像演员不理解剧本,是无法表达电影中角色的情感的。

另外 ,从软件工程的成本角度来看。理解代码是我们工作的一部分,即理解代码是软件工程中一个必要成本。理解代码所花费时间越少,我们的成本越低。代码可理解性与软件工程的效率是正相关的。

基于这两个原因,我们认为代码的可理解性是非常重要的。也因此,我们在面临对代码质量的不同特性进行取舍时,代码可理解性应当作为权重最高的选项。

总结

代码质量有多种特性,这些特性都是基于旁观者视角的。而代码审查是旁观者评估这些代码特性的一个过程。我们希望通过代码审查这个手段来保证高质量的代码。这就是代码审查的本质。

然而,现实很骨感,同样的手段,用在不同的人,不同的组织上,效果却可能是千差万别。并不是你在团队中推广了代码审查,你们的代码质量就一定高的。就像过去,不少组织中推广“敏捷”,反而让团队更不敏捷一样。

如何做好代码审查,让代码审查真正发挥作用,是我们的另一个课题。

代码审查(Code Review)的本质相关推荐

  1. 谈谈对代码审查Code Review的简单认识

    谈谈对代码审查Code Review的简单认识 Code Review(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题.包括像Google.微软这些公司, ...

  2. 代码审查(Code Review)

    1. 代码审查概述 1.1 什么是代码审查 ​ 对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术 1.2 为什么要做代 ...

  3. 作为开发人员,这四类Code Review方法你都知道吗?

    本文翻译自:https://dzone.com/articles/4-types-of-code-reviews-any-professional-developer 转载请注明出处:葡萄城官网,葡萄 ...

  4. 什么是Code Review 代码审查

    Code Review 是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节. 本文通过对Code Review的一些概念和经验的探讨,就如何进 ...

  5. Eclipse Code Review(代码审查)工具介绍

    http://soartju.iteye.com/blog/564690 最近组内一直在做代码改进,既然是代码级别的改进,我想比较直接有效的办法就是Code Review. 虽然以前开发部也做过代码评 ...

  6. Google是如何做Code Review的?| CSDN原力计划

    作者 | 帅昕 xindoo 编辑 | 屠敏 出品 | CSDN 博客 我和几个小伙伴一起翻译了Google前一段时间放出来的Google's Engineering Practices docume ...

  7. Google 是如何做 Code Review 的?| 原力计划

    作者 | 帅昕 xindoo 责编 | 屠敏 出品 | CSDN 博客 我和几个小伙伴一起翻译了Google前一段时间放出来的Google's Engineering Practices docume ...

  8. Google是如何做Code Review的

    我和几个小伙伴一起翻译了Google前一段时间放出来的Google's Engineering Practices documentation,翻译后的github仓库https://github.c ...

  9. 前端代码规范(1)谈code review

    前端谈code review 一.review代码的认知 1.code review目的 保证代码可读性,一致性 代码层面减少bug,最基本缺少控制判断.异常处理 传播知识+设计讨论. 相信很多人第一 ...

  10. 如何在团队中做好Code Review

    一.Code Review的好处 想要做好Code Review,必须让参与的工程师充分认识到Code Review的好处 1.互相学习,彼此成就 无论是高手云集的架构师团队,还是以CURD为主的业务 ...

最新文章

  1. php播放音乐视频,html5停止(暂停)当前播放的音频或视频的方法pause()
  2. python底层代码里面的参数_梯度下降算法讲解及python底层实现
  3. python交互界面的退出
  4. 用户 NT AUTHORITY\NETWORK SERVICE 登录失败解决方法
  5. 整理了90个Pandas案例,强烈建议收藏!
  6. Preload custom controller defined in runtime framework
  7. 【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
  8. ftp服务器文件名存在,有什么办法根据已知文件名来检测FTP服务器上是否存在该文件? 急...
  9. Mysql 分组后组内排序按字段取最大或最小的数据
  10. ActiveMQ 依赖JDK版本
  11. 两种方式打开jar文件
  12. JMeter入门教程
  13. 基于PHP+Web+Mysql的在线问卷调查系统
  14. pytorch的变量variable
  15. matlab解方java_在matlab中求解欠定方程组
  16. NOD32杀毒软件升级ID
  17. Android下操作FrameBuffer
  18. WIN10输入法改为WIN7习惯,默认输入英文,程序员专用
  19. Redis数据库(二)
  20. MFC对话框的透明化---续

热门文章

  1. [英语阅读]经济低迷期 糖果抚人心
  2. 文档搜索软件测试,Quest 搜索测试工具
  3. 超级计算机看未来天气,【气象科普知识】想知道未来天气,有时候也可以看看云...
  4. In-Sprint自动化回归测试-UI自动化解决方案
  5. 真的,我发誓,永远都不会在代码中使用“User”这个单词! - Js中文网
  6. 2017 开源中国评比的前100个优秀开源项目
  7. pythonget函数统计次数_python | 统计频次
  8. Android单元测试-对Activity的测试
  9. 对口集成电路专业----微电子科学与工程
  10. Type assertions and type switches in GO