`

高效代码审查的十个经验【转】

 
阅读更多

代码审查(Code Review)是软件开发中常用的手段,和QA测试相比,它更容易发现和架构以及时序相关等较难发现的问题,还可以帮助团队成员提高编程技能,统一编程风格等。

1. 代码审查要求团队有良好的文化

团队需要认识到代码审查是为了提高整个团队的能力,而不是针对个体设置的检查“关卡”。

“A的代码有个bug被B发现,所以A能力不行,B能力更好”,这一类的陷阱很容易被扩散从而影响团队内部的协作,因此需要避免。

另外,代码审查本身可以提高开发者的能力,让其从自身犯过的错误中学习,从他人的思路中学习。如果开发者对这个流程有抵触或者反感,这个目的就达不到。

2. 谨慎的使用审查中问题的发现率作为考评标准

高效代码审查的十个经验

在代码审查中如果发现问题,对于问题的发现者来说这是好事,应该予以鼓励。但对于被发现者,我们不主张使用这个方式予以惩罚。软件开发中bug在所难免,过度苛求本身有悖常理。更糟的是,如果造成参与者怕承担责任,不愿意在审查中指出问题,代码审查就没有任何的价值和意义。

3. 控制每次审查的代码数量

根据smartbear在思科所作的调查,每次审查200行-400行的代码效果最好。每次试图审查的代码过多,发现问题的能力就会下降,具体的比例关系如下图所示:

高效代码审查的十个经验

我们在实践中发现,随着开发平台和开发语言的不同,最优的代码审查量有所不同。但是限制每次审查的数量确实非常必要,因为这个过程是高强度的脑力密集型活动。时间一长,代码在审查者眼里只是字母,无任何逻辑联系,自然不会有太多的产出。

4. 带着问题去进行审查

我们在每次代码审查中,要求审查者利用自身的经验先思考可能会碰到的问题,然后通过审查工作验证这些问题是否已经解决。一个窍门是,从用户可见的功能出发,假设一个比较复杂的使用场景,在代码阅读中验证这个使用场景是否能够正确工作。

使用这个技巧,可以让审查者有代入感,真正的沉浸入代码中,提高效率。大家都知道看武侠小说不容易瞌睡,而看专业书容易瞌睡,原因就是武侠小说更容易产生代入感。

有的研究建议每次树立目标,控制单位时间内审核的代码数量。这个方法在我们的实践中显得很机械和流程化,不如上面的方法效果好。

5. 所有的问题和修改,必须由原作者进行确认

如果在审查中发现问题,务必由原作者进行确认。

这样做有两个目的:

(1)确认问题确实存在,保证问题被解决

(2)让原作者了解问题和不足,帮助其成长

有些时候为了追求效率,有经验的审查者更倾向于直接修改代码乃至重构所有代码,但这样不利于提高团队效率,并且会增加因为重构引入新bug的几率,通常情况下我们不予鼓励。

6.利用代码审查激活个体“能动性"

即使项目进度比较紧张,无法完全的进行代码审查,至少也要进行部分代码的审查,此时随即抽取一些关键部分是个不错的办法。

背后的逻辑是,软件开发是非常有创造性的工作,开发者都有强烈的自我驱动性和自我实现的要求。让开发者知道他写的任何代码都可能被其他人阅读和审察,可以促使开发者集中注意力,尤其是避免将质量糟糕,乃至有低级错误的代码提交给同伴审查。开源软件也很好的利用了这种心态来提高代码质量。

7.在非正式,轻松的环境下进行代码审查

如前所述,代码审查是一个脑力密集型的工作。参与者需要在比较轻松的环境下进行该工作。因此,我们认为像某些实践中建议的那样,以会议的形式进行代码审查效果并不好,不仅因为长时间的会议容易让效率低下,更因为会议上可能出现的争议和思考不利于进行如此复杂的工作。

8.提交代码前自我审查,添加对代码的说明

所有团队成员在提交代码给其他成员审查前,必须先进行一次审查。这次自我修正形式的审查除了检查代码的正确性以外,还可以完成如下的工作:

(1)对代码添加注释,说明本次修改背后的原因,方便其他人进行审查。

(2)修正编码风格,尤其是一些关键数据结构和方法的命名,提高代码的可读性。

(3)从全局审视设计,是否完整的考虑了所有情景。在实现之前做的设计如果存在考虑不周的情况,这个阶段可以很好的进行补救。

我们在实践中发现,即使只有原作者进行代码审查,仍然可以很好的提高代码质量。

9.实现中记录笔记可以很好的提高问题发现率

成员在编码的时候应做随手记录,包括在代码中用注释的方式表示,或者记录简单的个人文档,这样做有几个好处:

(1)避免遗漏。在编码时将考虑到的任何问题都记录下来,在审查阶段再次检查这些问题都确认解决。

(2)根据研究,每个人都习惯犯一些重复性的错误。这类问题在编码是记录下来,可以在审查的时候用作检查的依据。

(3)在反复记录笔记并在审查中发现类似的问题后,该类问题出现率会显著下降

10. 使用好的工具进行轻量级的代码审查

“工欲善其事,必先利其器”。我们使用的是bitbucket提供的代码托管服务。

每个团队成员独立开发功能,然后利用Pull Request的形式将代码提交给审查者。复审者可以很方便在网页上阅读代码,添加评论等,然后原作者会自动收到邮件提醒,对审阅的意见进行讨论。

即使团队成员分布在天南海北,利用bitbucket提供的工具也能很好的进行代码审查。

分享到:
评论

相关推荐

    Delphi源码实现C++代码转delphi代码..rar

    本资源“Delphi源码实现C++代码转Delphi代码”提供了一种方法来解决这个问题,它可能包含了一个工具或者一个库,用于帮助程序员将C++编写的代码转换为等效的Delphi源码。 Delphi,由Embarcadero Technologies开发,...

    Python标准库源代码.zip

    Python标准库是Python编程语言的核心组成...这不仅对提升个人编程技能有帮助,也对团队协作和代码审查具有指导意义。所以,无论你是初学者还是经验丰富的开发者,Python标准库源代码都是一个值得深入研究的学习资源。

    (转)keil mdk 汉化补丁与keil 自动格式化代码

    Keil MDK虽然提供了强大的编辑器功能,但默认情况下并没有内置代码格式化工具,这在团队协作或代码审查时可能会带来不便。自动格式化代码工具能够按照预设的编码规范(如缩进风格、空格数量等)对源代码进行整理,...

    编程精粹---Microsoft编写优质无错C程序秘诀

    9. **代码审查**:定期进行代码审查是发现潜在问题和分享良好实践的有效方式。Microsoft推荐使用代码审查工具,并鼓励团队成员互相学习、交流。 10. **持续学习与更新**:C语言的发展和最佳实践不断演进,Microsoft...

    阿里巴巴Java开发手册(最新泰山版)只需1积分!

    12. **代码审查**:介绍了代码审查的重要性,提供了审查的标准和流程,以确保代码质量。 通过深入学习和应用《阿里巴巴Java开发手册》,开发者不仅可以提升个人技术水平,还能促进整个团队的代码质量和开发效率。...

    编程精粹 - Microsoft编写优质无错C程序秘诀

    9. **代码审查**:微软鼓励团队进行代码审查,以发现潜在问题和改进点。代码审查是保证代码质量的重要环节,可以发现隐藏的错误,提高团队成员之间的知识共享。 10. **性能优化**:对于性能敏感的代码,了解C语言的...

    C语言良好习惯之规范共2页.pdf.zip

    15. **代码审查**:定期进行代码审查,提高团队间的代码质量。 这些规范不仅适用于初学者,也是经验丰富的C程序员应该持续关注的。通过遵循这些良好的编程习惯,可以提升代码的质量,降低维护成本,同时也能提升...

    张甲磊-DevCloud+on+DevCloud每日10次发布效率提升实践

    - **代码托管与管理**:利用CodeHub进行轻量级特性分支管理和基于分支比较的代码审查。 - **自动化构建与测试**:构建过程中加入静态代码检查、架构检查等环节,以及自动化单元测试、接口测试等,确保代码质量。 - *...

    《x86汇编语言:从实模式到保护模式》第13章代码补丁

    该书的作者在编写示例代码时可能由于疏忽出现了一个小BUG,而你提供的"《x86汇编语言:从实模式到保护模式》第13章代码补丁"正是针对这个问题的修复。 首先,`c13_core.patch`很可能是一个补丁文件,通常使用Git或...

    c++编码规范(华为).rar

    十、代码审查 1. 实施代码审查,提高代码质量。 2. 鼓励团队成员互相学习,共同成长。 总结,华为的C++编码规范强调了代码的可读性、可维护性和团队协作。遵循这些规范,不仅能提升个人编程技能,还能有效减少因...

    JAVA技术61条面向对象设计的经验原则.txt

    - **应用**:定期审查代码,发现并解决潜在问题。 #### 原则五十二:明确类的责任 - **描述**:每个类都应有明确的责任范围。 - **应用**:避免在一个类中混杂多种职责。 #### 原则五十三:选择合适的继承 - **...

    最新可持续的项目架构十项原则.pdf

    这可能包括使用自动化测试工具、代码审查和持续集成实践。 以上十项原则为构建可持续的项目架构提供了基础框架,旨在确保项目能够高效、有序、高质量地完成,同时适应不断变化的业务环境和市场需求。通过遵循这些...

    C++编程规范_101条规则、准则与最佳实践

    18. **代码审查**:团队开发中应实行代码审查,发现并修正潜在问题,提升整体代码质量。 19. **版本控制**:使用Git等版本控制系统,便于代码管理、协同开发和历史追踪。 20. **持续集成**:配置持续集成系统,...

    C++编程规范 Google 中文版 C++编程规范 自建笔记

    12. **代码审查**:定期进行代码审查,以发现潜在问题,提高团队协作效率。 以上知识点只是《C++编程规范》的一部分,实际规范涵盖了更多的细节,包括格式规范、编程风格、性能优化等方面。通过学习和实践这些规范...

    Visual Assist X 2435 for vs2019

    与Git、SVN等版本控制系统无缝集成,方便进行代码审查和协同开发,确保团队间的代码一致性。 9. **性能优化**: 为了适应大型项目和高性能的需求,Visual Assist X进行了性能优化,减少卡顿,提高代码加载和编译...

    google编程风格

    谷歌提倡代码审查,通过团队成员相互审查代码,提高代码质量,发现潜在问题。 学习并遵循谷歌编程风格指南,不仅可以提升个人编程技能,还能提高团队协作的效率,使项目更易于维护。通过深入理解和实践《Google C++...

    C语言编程规范.rar

    13. **代码审查**:定期进行代码审查,确保遵循规范并找出潜在的问题。 这些规范旨在帮助开发者编写出高效、易读、易维护的C语言代码。遵循这些规范,可以提升个人编程技能,也有助于团队合作和项目长期的可持续...

    c-30-源码.rar

    12. **软件工程**:版本控制(如Git),代码审查,测试策略,模块化设计,以及文档编写。 在深入研究"C-30-源码"之前,确保你有合适的开发环境,如安装了GCC编译器和文本编辑器,同时熟悉基本的命令行操作。阅读源...

    编写无错 C 程序秘诀

    8. **代码审查**:定期进行代码审查,通过他人的眼睛发现潜在问题。这不仅可以找出错误,还能提高团队协作和代码质量。 9. **单元测试**:编写测试用例以验证函数的功能,确保代码的正确性。使用断言来检查程序内部...

Global site tag (gtag.js) - Google Analytics