sqliang/sqliang.github.io

Code Review 好文章

Opened this issue · 0 comments

写在前面

这里先给出程序员写代码相关的汇总
#45

code-review

知乎专栏

  • 基础性材料: https://zhuanlan.zhihu.com/p/31581735一个好的代码评审者,不仅需要找出代码中的 bug,还需要提供认真负责的反馈来让团队伙伴得到能力上的提升

    • 在一轮 review 中提出的问题越多,代码作者感到的压力会越大。一般情况下,一轮 review 提出的问题限制在 20-50 个之内
    • 在早期的 review 中先关注一些高层次的问题:重新设计的接口,分解复杂函数等,这些问题解决后在关注低层次的问题
    • review 代码提建议的时候可多写示例代码,通过写一些示例代码减轻作者的负担。 示例不仅局限于单行代码,也可以创建自己的分支,向作者展示大量的概念,如:拆解一个大的函数,或者添加单元测试来覆盖额外的边界情况
    • 使用请求的语气,而不是命令
    • 评论应该基于原则,而不是观点。当你写下一条评论,要记得同时写下要做什么以及为什么要做。软件开发既是一门艺术,也是一门科学。有些时候,即使有了既定的原则,你也不能清楚地证明一段代码是错误,因为有时代码只是丑陋或不直观而已。在这些情况下,请详细解释一下为什么,并保持客观。
  • 进阶式材料:https://zhuanlan.zhihu.com/p/31786640, 介绍一些技巧,避免 review 过程中的不愉快。

    • 旨在把代码改进一到两个级别,不要追求完美

    • 对于相同的问题,有限度的反馈。对于同样的问题,只需重复注明2-3次即可。让作者修复类似的问题就好了,而不是去注明每一个问题

    • 遵循 review 的范围。如果变更列表没有涉及到这一行,那它就是超出 review 的范围。(除非新的修改影响了周围的代码)

    • 尝试切分体积很大的 review。你应该鼓励作者把它切分到更小的块。超过的越多,你就越应该打回这个变更列表

    • 真诚的表扬

    • 当剩下的问题都是小问题时,直接批准。

    • 主动处理僵持状态,说出来 -> 考虑涉及阶段的审查 -> 让步或者升级。如果问题一直没有得到解决,那么你最好选择让步,或者把问题升级

    • 脱离僵局之后,与你的上级讨论这种情况;休息一下;学会解决冲突

    • 重新思考 code review

      • 我做错了什么?
      • 我应该在最开始的时候给出一些高层次的评论,让作者不会因为大量的评论而感到挫折
      • 我应该给出更多的代码示例,以及在作者的变更列表中给出更多的积极因素
      • 我应该在所有的评论上都保持一个客观的态度
      • 我让这个僵局持续太久了,当出现没有意义的进展,我应该主动做出改变,来解决深层次的冲突,或者把它升级到我们的上级那里
      • Bob 第一步把 review 切换的做法非常有效。变成了一个一个更小的,更好管理的变更列表
      • Bob 没有尝试在 review 的过程中把代码改造成完美无缺的。对于某些特殊情况的处理,让他可以在长时间内帮助 Mallory 提升质量
      • 如果你觉得代码质量很难提升到符合你的标准,应该思考 review 的那些过程阻碍了你,以及如何解决它们