谷歌的一个典型的代码评审流程包括以下步骤:
1、作者在自己的工作区编写代码变更。然后,作者创建一个变更快照,包括一个补丁和响应的描述,并上传到代码评审工具中。此变更生成与代码库的差异,用于评估哪些代码发生了变更。
2、作者可以对这个初始补丁进行自动化评审,或者自我评审。当作者对变更的差异感到满意时,会将变更邮件给一个或多个评审人员。
3、评审者在代码评审工具中打开变更,并在差异处发表评论。有些评论要求明确解决,有些只是提供建议。
4、作者根据反馈意见修改并上传新的快照,并回复给评审人员。步骤3和步骤4可以重复多次。
5、评审人员对变更的最新状态感到满意时,他们同意该变更。6、作者将变更提交到代码库。
代码评审有三个方面需要批准:
1、来自另一个工程师的正确性和理解性检查,以确保代码是适当的,并且代码的表现跟作者的描述是一样的。
2、来自代码所有者之一批准,确保代码适合于代码库的这一特定部分,并且可以签入到特定的目录中。代码所有者充当特定目录的看门人。他要问:这个代码维护起来简单还是困难、它是否增加了我的技术债、我们团队是否有专业知识来维护它。
3、来自具有语言可读性认证的人的批准,确保代码符合语言的风格和最佳实践,并检查代码是否以我们期望的方式编写。
如果你是一个项目的所有者,并且具有代码语言可读性认证,那么你只需另一位工程师的批准,就可提交代码。
设计良好的代码评审流程和认真对待代码评审的文化提供了以下好处:
1、检查代码正确性,早期发现的缺陷会减少以后修复的时间。代码评审的投入,节省了测试的时间。在代码评审中检查缺陷是左移策略的重要组成部分。
2、确保代码变更能够被其他工程师理解,读代码的次数比写代码的次数多得多,可理解是至关重要的。
3、增强整个代码库的一致性,许多人需要阅读你的代码,理解你做的东西。
4、心理上促进团队的责任感、代码不是你的我的他的,而是我们集体的。代码评审能为作者的进步提供积极反馈。代码评审也促使作者工作更加认真仔细。
5、知识共享、评审过程中允许评审者向作者传授领域知识,提供建议、新技术和咨询信息。
6、提供代码评审本身的历史记录。
代码评审的最佳实践包括:
1、礼貌而专业。信任和尊重的文化深入到代码评审中。
2、小的变更。保持代码评审流程灵活最重要的实践是保持小的变更。小的变更易于理解,只关注单个问题。小的变更可以减少评审等待时间,确定缺陷来源也容易。
3、清晰的变更描述。变更描述应在第一行以摘要的形式说明其变更类型。第一行是黄金区域,第一行很重要。
4、评审者数量最小化。评审者过多会导致收益递减。
5、尽可能自动化。自动化的重要方面是自动化静态分析。
代码评审类型有:
1、绿地代码评审。即全新代码。为了确保代码的可持续性,绿地评审应确保API与商定的设计相匹配,并经过充分测试。所有API端点都有某种形式的单元测试。
2、行为变更改进和优化。即代码库中对现有代码的修改。优化类的修改应不影响现有测试。
3、缺陷修复和回滚。缺陷修复应避免解决其他问题。任何可能导致潜在回滚的变更尽可能小和原子化,以便回滚不会导致其他难以解开的依赖项进一步中断。
4、重构和大规模变更。
代码评审充当工程师之间的纽带。