阅读更多

0顶
1踩

研发管理
理论我知道。代码审查(Code Review)有助于:
  • 抓bug
  • 保证代码的可读性,可维护性
  • 在团队中散播代码的知识
  • 让新人适应团队的工作方式
  • 让大家接触不同的思路

或者按另一种看法,代码审查就是极大的浪费时间。至少我对代码审查的最初感受就是这样。

当时我是新人,刚毕业,在伦敦一家软件公司开发插件。

随着时间推移,我得提交大量样子都差不多或干脆一样的代码。另一个可怜的家伙(“他是最好的。”我的经理告诉我。好在哪儿啊……)会来Review我的代码。而每次审查之后都会返回不一样的结果。看起来都是全无必要的挑剔又主观的结果。

更糟的是,审查过程的时间,哪怕没有几周,也得有好几天。等代码返回给我的时候,我几乎都记不得那是我写的。这不是那个家伙的错。他肯定也想要个更有经验的开发者,不过他分到了我。他厌倦了处理每个没经验的开发者搞出的那些低级问题,代码审查过程变成了他祛除沮丧情绪的方式。

再加上这些浪费的时间:不同分支的代码同步,上下文切换……我不是代码审查的粉儿,团队其他人也一样。

几年之后,我发现我很同意Jeff Atwood所发表的推特:

引用
“结对代码审查是你能改进代码质量的唯一要事。”


经过这几年的时间我开始赞同代码审查,是因为我发现了代码审查并不是坏事,代码审查执行不好才是坏事。伙计,我们就执行的很不好。

我付出了惨痛代价才意识到这一点。当然不是一夜之间的转变。反思之后,代码审查把我从尴尬的,足以破坏构建的代码修改中拯救出来不少回。而自从我在其他地方工作后,我积累了一些和以前不同的、更好的工作方式的经验。这给了我机会,让我能切身体会到我以前曾错过的代码审查的好处。所以现在我认为自己是一个皈依了的质疑者。

为了你能避免这些痛苦,看看我们的视频,读完这些建议,这样就能带给你更有效的代码审查过程。
一、写给所有人的:

1.只审查正确的东西,让工具干别的

你不需要在代码风格和格式问题上与人争论。有大量的工具可以持续地强调这些内容。确保代码正确、易于理解和可维护性强才是重要的。当然了,编码风格和格式也是这些的一部分,只是你更应该让工具去检查。

2.所有人都该做代码审查

一些人比另一些人更擅长审查。更有经验的人可以发现更多的bug,这很重要。不过更重要的是在总体上维持一个针对代码审查的积极态度,也就是说要避免任何“我们和他们”的对抗态度,或者是让代码审查成为某个人的负担。

3.审查所有的代码

没有代码是因为太短或者太简单而不值得审查。当你审查一切,就没有什么会漏掉。另外这样做会成为流程的一部分,成为一种习惯,而不总是事后诸葛。

4.态度积极

这一点对审查者和提交者都很重要。代码审查不是你要拿全A,发动代码神技的时候,也不是你需要摆出防御姿态的时候。带着对建设性批评的积极态度投入进去,你就可以在此过程中收获信任。
二、写给对审查者的:

5.代码审查应该短期高频

你的审查效率在一个小时后开始下降。所以推迟审查共走,然后在一个极限的周期内赶完对谁也没用。在你的一天中留出时间来定期处理,别打乱自己的工作节奏并养成习惯。你的同事会为此而感谢你。等待会让人沮丧。而且当代码还新鲜的保存在他们脑海里时,他们解决问题也会快一些。

6.It’s OK to say “It’s all good” |“都挺好”挺好

别太挑剔了,你不是一定要每次审查都发现问题。

7.使用一个清单

代码审查清单确保一致性——每个人都了解哪些是重要的,哪些是常见错误。
三、写给代码提交者的
8.保证代码简短

超过200行,审查效率就会显著下降。一旦你超过400行,那基本就没什么意义了。

9.提供上下文

要提供相关的单子,或者规格说明的链接。像Kiln这样的代码审查工具可以提供帮助。应提供简短而有用的提交信息,在代码中留下大量注释。这会帮助审查者,你得到的问题反馈也会少一些。
0
1
评论 共 4 条 请登录后发表评论
4 楼 zhunengfei 2015-02-19 15:27
jXee 写道
代码审查不但是浪费时间,而且是摧毁一个团队的最有力的途径。

如果代码审查能够发现问题,那单元测试,集成测试等就失去了存在的意义。
如果程序猿们每周只花半个小时进行代码审查,这代码审查只不过是走过场而已。
如果程序猿们每周要花几个小时进行代码审查,这这能说明这些程序猿们没活儿干了。


顶,实际开发中确实是这种情况
楼主说的太理想化了
3 楼 jXee 2015-02-16 06:28
代码审查不但是浪费时间,而且是摧毁一个团队的最有力的途径。

如果代码审查能够发现问题,那单元测试,集成测试等就失去了存在的意义。
如果程序猿们每周只花半个小时进行代码审查,这代码审查只不过是走过场而已。
如果程序猿们每周要花几个小时进行代码审查,这这能说明这些程序猿们没活儿干了。
2 楼 white_crucifix 2015-02-16 01:04
可以尝试使用jetbrains出品的Upsource来帮助代码审查
1 楼 paladin1988 2015-02-15 19:42
很实用,谢谢

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • jQuery实现基本淡入淡出效果的方法详解

    本文实例讲述了jQuery实现基本淡入淡出效果的方法。分享给大家供大家参考,具体如下: jQuery fadeIn()方法:用于淡入已隐藏的元素 jQuery fadeOut()方法:用于淡出可见的元素 <!DOCTYPE html> <html> &lt...

  • jquery中click事件传参

    <!DOCTYPE html> <html> <head> ...meta charset="UTF-8">...jquery中click事件传参</title> <link rel="stylesheet" type="text/css" href="inputAndDiv.css"> &...

  • jquery移除click事件

    1、第一种定义click时间的方法是在标签内部加上onclick的属性如下 <input id = "demoId" type="button" onclick="demoFunction();" value="单击事件"/> ...

  • JQuery 的click失效,无法触发

    前不久用js写评论的时候遇到的问题,当时就觉得很奇怪,自己写的代码没有报错,编译正常 浏览器控制台调试,点击了Click也不反应,上网查询了很久也不见得有人提起过(可能是我不会搜索吧),多次搜索引擎查阅后无果,...

  • Jquery 滑入滑出效果实现代码

    CSS 代码如下: <style type=”text/css”> #divD{ width:300px;... Jquery代码 代码如下: [removed][removed] [removed] $(document).ready(function(){ $(“#btnFadein”).bind(“click”,Fadein); //为b

  • jQuery实现获取table中鼠标click点击位置行号与列号的方法

    本文实例讲述了jQuery实现获取table中鼠标click点击位置行号与列号的方法。分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: <!DOCTYPE html> <html> <head lang=en> <meta...

  • jQuery隐藏和显示效果实现

    jQuery hide() 简单的jQuery hide()方法演示。 jQuery hide() 另一个hide()实例。演示如何隐藏文本。 jQuery hide() 和 show() 通过 jQuery,您可以使用 hide() 和 show() 方法来隐藏和显示 HTML 元素: 实例 $("#...

  • JQuery实现的按钮倒计时效果

    本文实例讲述了JQuery实现的按钮倒计时效果。分享给大家供大家参考,具体如下: 一个实现了在按钮上显示倒计时,倒计时完毕自动将按钮设置为不可用的效果,具体代码如下: <html> <head> <title>...

  • jquery实现弹出层效果实例

    本文实例讲述了jquery实现弹出层效果的方法。分享给大家供大家参考。具体实现方法如下: <head runat=server> <title>jQuery弹出层</title> [removed][removed] [removed] $(function() { $(#...

  • jquery实现的Accordion折叠面板效果代码

    主要介绍了jquery实现的Accordion折叠面板效果代码,通过jquery鼠标click事件操作页面元素样式动态变换实现手风琴折叠效果,具有一定参考借鉴价值,需要的朋友可以参考下

  • jQuery使用fadeout实现元素渐隐效果的方法

    本文实例讲述了jQuery使用fadeout实现元素渐隐效果的方法。分享给大家供大家参考。具体分析如下: 下面的JS代码演示了jQuery控制色块元素逐渐隐藏的效果,可以控制隐藏速度 <!DOCTYPE html> <html> <...

  • jQuery实现动态效果

    写在前面 使用jQuery简直不要太舒服啊,有人说jQuery过时了,没必要学。...主要是让元素实现显示隐藏、上拉下拉、淡入淡出的这些动态效果,反正都是一些jQuery对象方法的使用,很好用的。先来梳理知识点吧。 j...

  • jQuery动画效果animate和scrollTop结合使用实例

    CSS属性值是逐渐改变的,这样就可以创建动画效果。只有数字值可创建动画(比如 “margin:30px”)...结合scrollTop实用示例: 代码如下:jQuery(document).ready(function($){ $(‘#shang’).click(function(){ $(‘ht

  • jquery实现初次打开有动画效果的网页TAB切换代码

    主要介绍了jquery实现初次打开有动画效果的网页TAB切换代码,涉及jquery通过鼠标click事件控制页面元素属性的动态变换实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下

  • jQuery点击(click)事件覆盖

    jQuery中,事件的绑定是叠加式,而不是很多人想象的覆盖式。如: $('button').click(function(){ alert("first"); }); $('button').click(function(){ alert("second"); }); 点击button之后,会先弹出first弹出...

  • 简单实现jQuery轮播效果

    本文实例为大家分享了jQuery轮播效果展示的具体代码,供大家参考,具体内容如下 jQ代码: 在写jQuery代码之前一定要先导库,此处我用的是3.0的库 [removed][removed] [removed] var timer; $(function() { //...

  • jquery实现未经美化的简洁TAB菜单效果

    主要介绍了jquery实现未经美化的简洁TAB菜单效果,涉及jquery鼠标click事件实现页面元素样式动态变换的功能,需要的朋友可以参考下

  • jquery实现简单手风琴菜单效果实例

    本文实例讲述了jquery实现简单手风琴菜单效果的方法。分享给大家供大家参考。具体实现方法如下: (function($) { var allPanels = $('.accordion > dd').hide(); $('.accordion > dt > a').click(function() { ...

  • jquery实现的点击翻书效果代码

    本文实例讲述了jquery实现的点击翻书效果代码。...这是自写一个翻书的Js效果,基于jquery-1.4.2.min.js插件实现,还正在完善中,希望大家能喜欢,我觉得不错。 运行效果截图如下: 在线演示地址如下: ...

  • JQuery触发click和input赋值的几种方式

    需求需要触发平台页面上某个按钮的click事件。 1.直接触发 //点击事件 $(this).click() //input赋值 $('input').val("123") 当使用第一种方式触发触发不了的情况下,使用了第二种方式 2.createEvent() ...

Global site tag (gtag.js) - Google Analytics