阅读更多

0顶
0踩

研发管理

原创新闻 同行代码审查实战分析

2015-01-27 08:58 by 副主编 mengyidan1988 评论(2) 有5546人浏览
【编者按】代码审查(Code Review)是软件开发中常用的手段,和QA测试相比,它更容易发现较难发现的问题,还可以帮助团队成员提高编程技能,统一编程风格等。本文作者从实际出发,详细分析了开发者在代码审查过程中会遇到的问题及解决方法。

以下为译文:

数百万年前,人类祖先人猿学会直立行走——解放双手——最终进化到人;而代码审查在开发过程中有着异曲同工之妙——区别出野蛮开发和先进开发。



然而,在实际工作中,以下声音总不绝于耳:

  • “代码审查在项目中简直就是浪费时间!”
  • “我根本没有时间去做复查。”
  • “由于我那个谨慎的拍档还没做好复查,进度只能延后了。”
  • “你确定,我的同事要求我修改代码吗?请向他们解释一下,任何轻微地改动都会让我的代码失去原有的优雅。”

那么问题来了,我们为什么需要做代码复查?

作为专业的软件开发人员,持续提高代码质量是工作生涯不断追求的目标之一。无论我们有多么优秀,都离不开团队;而代码复查是个人与团队的润滑剂:

  • 当局者迷,旁观者清。代码复查如同为我们安装了后视镜;
  • 使我们的代码多了至少一个知音人;
  • 能帮助新员工在这个过程中学习和领悟到前辈的代码精髓;
  • 有助开展知识共享,众“智”成城。

要做就要做到最好

如果想要达成上述种种美好结果,是离不开时间和工作的科学安排的。仅仅做好代码缩进、变量命名规范等基本工作,还不能算得上完美。而如果曾经尝试过结对编程,或许你会发现其所花的时间往往都比代码复查要多。

我的建议是用开长总时长的四分之一时间来进行代码复查。举例来说,如果开发总用时为两天,那么应该花上大约四个小时来进行复查。

当然,如果能把事情做对,可不必拘泥于时间的多少。进一步说,我们必须能看明白将要复查的代码。这不仅代表要掌握基本的语言语法,更关键的是要掌握整个代码的架构,所用组件或库等细节。如果不能做到对每一行代码所做的事情都了然于胸,这样的复查工作是没有多少价值的。所以要做好这点是不能一味讲求速度的,必须花一番功夫来从头到尾对代码进行梳理分析。

此外还有两件事是务必要做到的:

  • 复查工作中包含所有必须的测试工作;
  • 做好设计文档的编写工作。

避免拖延症

今天的工作今天完成是最完美的工作状态,否则一旦拖延症出现,再多再好的复查都只会成为开发过程中的绊脚石。好的复查需要紧密而持久的努力,不是搞搞突击就能做好的。

因此,开发者应当尽力做到日清日结。把复查作为每天工作的开端是个不错的主意;理清旧的思路将有助于开展新的编码任务。也或许有的人喜欢在午休或下班前进行,无论在什么时候进行,以下几点是应该避免的:

  • 让积压工作越积越多;
  • 由于复查没有做好而导致进度延后;
  • 由于代码更新频率快就放弃做复查;
  • 往往在最后一刻才去做复查。

编写出可复查的代码

不应该把所有复查工作都推给复查员。如果我的同事花了一周时间添加了看起来比较乱的代码,这对复查工作无疑是重大打击,也很难让人摸清其思路和结构。

所以我们在编程时,要有意识地把代码划分为可操作单元。我们使用的方法是scrum,它为我们的开发工作做了很明晰的指导,同时使得整个开发过程有迹可循,便于进行追溯和回顾。

其次,在与复查员进行讨论前要搞好关系。这样将有助于双方对彼此有所了解,从而减少讨论时矛盾发生的机率。

再者,项目结构应当在设计文档中描述得清楚具体。这对于项目新成员的成长是大有裨益的,同时能帮助复查员提高工作效率。

最后也是最重要的一点是在自我复查过程中做好注释。换言之要先自行对代码过一遍,把需要做出说明的地方标示出来并解释清楚。有研究表明,开发者在对自己的进行复查和注释时,经常会找出不少瑕疵。

大型代码重构

有时候如果需要进行代码重构,这势必会影响到很多组件,特别是较大型的应用。在这种情况下,最好的解决方案是逐步推进重构工作。先对要做的变更进行划分,然后根据修改意图进行分段式重构。当这部分变更完成并做好复查后,再执行第二部分的重构,重复该步骤直至完成全部工作。这或许增加了重构用时,但会带来更高质量的代码同时可以减轻复查员的工作量。

如果实际情况真的不允许进行逐步重构,可以试试结对编程。

解决矛盾

在一个技术团队中,各人有各自的观点,如何达成共识是成败的关键。作为开发者,应该保持开明的心态并虚心接受不同的意见。避免固步自封,避免对自我复查工作的不屑一顾。如果有人提议把我们一些重复的代码做成一个可复用函数,这并不代表我们之前的工作是毫无价值的。

而作为复查员,要懂得人情世故。在给出修改意见前,先考虑清楚这真的会更好抑或仅仅是风格上的不同看法。提议说法可以是:“如果尝试另一种方法,或许会更好”或“有同事建议这样做”,而要避免的是:“就连我家宠物都能写出比这好的算法!”

如果真的一时僵持不下,争议双方不妨请教第三个开发人员,从他的角度来再次审度各自的观点,直到形成共识,三人行,必有我师焉。

英文来自:Medium
  • 大小: 20.3 KB
来自: CSDN
0
0
评论 共 2 条 请登录后发表评论
2 楼 fm395728572 2015-01-28 10:51
代码审查看似简单,但是推荐工作或许会很困难,牵扯到团队的协作,以及互相的信任,审查人员的水平如何,沟通的方式是否正确,如果发生矛盾,是否领导者能及时的进行协调等等,理想很丰满,现实很骨感
1 楼 zhunengfei 2015-01-28 08:39
随便一个人来审查代码简直扯淡
直到形成共识,三人行,必有我师焉???  想法很好,但是现实开发中 哪来这么多时间啊,身边的水平都差不多, 要检查必须要来一个权威的,有的上司又不懂代码,所以实施起来有点困难

发表评论

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

相关推荐

  • 同行代码审查之我见

    最近,我在CSDN上阅读了一篇叫做《同行代码审查实战分析》文章(http://www.csdn.net/article/2015-01-26/2823698-practical-lessons-in-peer-code-review)。这是一篇译文,作者认为作为专业的软件开发人员,持续提高...

  • 同行代码审查(Peer Code Review)实战经验

    同行代码审查(Peer Code Review)实战经验 我有时候会听到我们的团队成员这样议论: "项目的Code review 只是浪费时间。" "我没有时间做Code review。" "我的发布时间延迟了,因为我的同事还没有完成我代码的Code ...

  • 如何做好代码审查

    在企业中,大多数项目是由团队协作完成的,人员流动,项目进度等诸多原因都可能对项目的质量构成影响,要保证代码的水平与质量,代码审查就非常重要了,为了帮忙大家认识和理解代码审查,结合我在不同项目与不同团队...

  • 代码同行评审不可或缺的东西

    同行代码审查实战分析 发表于2015-01-26 15:09| 3015次阅读| 来源CSDN| 9 条评论| 作者伍昆 代码审查软件开发 摘要:作为专业的软件开发人员,持续提高代码质量是工作生涯不断追求的目标之一。...

  • 《ClickHouse入门、实战与进阶》的创作之路

    这本书对于那些想要深入学习ClickHouse以及数据分析的朋友们来说,是一个非常不错的选择。我相信通过阅读这本书,您会对ClickHouse有更深入的了解,并且掌握更多实用的技巧。如果您有任何问题,欢迎随时与我交流,...

  • 看一看Facebook工程师是怎么评价《第一行代码》的

    大家好,我是一名Facebook的工程师,同时也是《第一行代码——Android》的忠实读者。 虽然我最近几年是在国外读书和工作的,但是和很多人一样,我也非常喜欢郭霖的博客以及他写的《第一行代码——Android》。 事实...

  • Go 语言实战: 编写可维护 Go 语言代码建议

    Go 语言实战: 编写可维护 Go 语言代码建议 目录 1. 指导原则 1.1 简单性 1.2 可读性 1.3 生产力 2. 标识符 2.1 选择标识是为了清晰, 而不是简洁 2.2 标识符长度 2.3 不要用变量类型命名变量 2.4 使用一致的...

  • Go语言实战: 编写可维护Go语言代码建议

    大家好, 我在接下来的两个会议中的目标是向大家提供有关编写Go代码最佳实践的建议。 这是一个研讨会形式的演讲,不会有幻灯片,而是直接从文档开始。 贴士: 在这里有最新的文章链接 ...

  • [网络安全提高篇] 一一二.DataCon Coremail邮件安全竞赛之钓鱼邮件识别及分类

    这是作者2020年参加清华大学、Coremail、奇安信DataCon举办的比赛,主要是关于钓鱼和异常邮件识别研究。非常感谢举办方让我们学到了新知识,DataCon也是我比较喜欢和推荐的大数据安全比赛,这篇...感恩同行,不负青春。

  • git-学习git,这一篇就足够了(初学者视角实战教程)

    如果没冲突,push即可 手动修改冲突文件 git add 冲突的文件 git commit git push 在公司一般会用pull request,并设置审查人员,也能够看到是否有冲突 常见问题 .gitignore失效问题 如果某文件已在远程仓库中,想...

  • ICLR 2020关键亮点与发展趋势总结(附python实战分析PyTorch vs Tensorflow使用情况)|文末送书...

    以下是我在案例研究中遵循的步骤: 设置系统 从适用于ICLR 2020的OpenReview API获取代码链接 从GitHub下载代码 根据requirements.txt,找到所有使用的工具并创建一个数据文件 使用数据分析以查找工具使用情况 步骤1...

  • idea2020shezhi代码检查级别_「测试」 - 代码 & 代码静态测试 - 未完成

    人工静态方法本质上属于流程上的实践,实际能够发现问题...自动静态方法,可以通过自动化的手段,以很低的成本发现并报告各种潜在的代码质量问题,目前已经被很多企业和项目广泛采用,并且已经集成到CI/CD流水线了。...

  • 2021 CCF大数据与计算智能大赛!

    体验真正的数据科学实战,成为高手指日可待! 5、真诚靠谱的赛事激励 奖金池上百万元,入围决赛团队即可获得招聘绿色通道、政府及知名投资机构的融资及孵化扶持,还有各合作单位提供的项目成果应用与试点机会,以及...

  • [译]Go语言最佳实战[一]

    Go 语言实战: 编写可维护 Go 语言代码建议 目录 指导原则 1.1 简单性 1.2 可读性 1.3 生产力 标识符 2.1 选择标识是为了清晰, 而不是简洁 2.2 标识符长度 2.3 不要用变量类型命名变量 2.4 使用一致的命名风格 ...

  • 容器: 让“基础设施即代码”更容易

    容器在“基础设施即代码(Infrastructure as Code)”中有什么意义?一句话概括的话,容器意味着一切。为什么这么说呢?当你在比较单体应用和微服务时,一定会有一些权衡和取舍。一方面,从单体模型转移到微服务模型...

  • 企业网站被攻击了如何快速分析网站漏洞存在的原因

    有好多安全行业同行(涉及商业网站安全防护产品),喜欢汇报GetShell之前的好多“外界扫描、攻击方式检测和尝试行为”,并青睐有加“态势感知”,告知企业有黑客正在“试图攻击方式入侵测试”。在笔者看来,实战...

  • 基于freeRTOS和STM32F103x的手机远程控制浴室温度系统设计源码

    该项目是一款基于freeRTOS操作系统和STM32F103x微控制器的手机远程控制浴室温度系统设计源码,共包含1087个文件,包括580个C语言源文件、269个头文件、45个汇编源文件、36个数据文件、36个目标文件、35个编译规则文件、28个包含文件、27个文本文件、6个源文件、3个归档文件。此系统通过手机远程实现对浴室温度的有效控制,适用于智能浴室环境管理。

Global site tag (gtag.js) - Google Analytics