CodeReview的挑战 - 编程一生

CodeReview的挑战 - 编程一生

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

代码评审需要良性社交压力,重点关注修改范围、安全、功能、异常处理、性能、可维护性与可测试性。其最大挑战在于难以发现真问题、容易纠结代码坏味道且难以达成共识。若评审意见无法说服开发者,会损害个人影响力,因此对技术功底和沟通能力要求很高,需持续打磨。

🔎

延伸解读

良性社交压力:CodeReview质量的前提

文章指出,保证CodeReview质量的前提是建立良性、有效的社交压力机制。这种机制从招聘开始,需要吸引具备基础专业素养、能承受并积极响应评审压力的开发者。当开发者面临交付压力时,想到代码将被同事严格审查,会促使他们避免为短期收益而采取长期有害的“投机”行为,例如编写只为提高覆盖率却无实际用处的测试。

评审关注点需在设计阶段定义

CodeReview的关注点涵盖修改范围、安全性、功能实现、错误处理、性能、可维护性、可扩展性和可测试性等。文章强调,这些关注点应在设计阶段就定义好,CodeReview只是做兜底。设计方案评审需要3人以上有CR权限的同学参加,最终CR人至少是其中两人。此外,可测试性通常通过CI/CD保证,如达到85%行级单测覆盖率等,但需人工Review确保测试案例真正有效。

最突出的问题:真问题难发现,共识难达成

文章指出CodeReview中最突出的问题是真正的问题没有发现,以及纠结的问题与开发者无法达成共识。有些同学依赖差异对比工具,只看到改了什么,缺乏对工程的深刻理解,可能忽略修改范围扩大等风险,只发现可维护性方面的代码坏味道。而代码坏味道往往仁者见仁,难以协商共识,谁妥协多了都会造成影响力损失。

说服力不足会损害个人影响力

文章以“未使用Java 8及以上特性”为例,说明CR同学需要向开发者解释清楚可能造成的问题,如代码可读性降低、效率降低、难以维护等。但同时也指出,这并不意味着必须盲目追求新特性,而应根据具体需求和场景权衡。如果CR提出的问题不能有效说服对方,会对个人影响力造成伤害,甚至不利于工作开展。因此,CR对技术功底和沟通能力要求很高,需持续打磨。

Q&A

CodeReview质量的前提条件是什么?

保证CodeReview质量的前提条件是建立一个良性、有效的社交压力机制。这种机制始于招聘过程,需要吸引那些拥有基础专业素养的开发者,其中包括能够承受并积极响应CodeReview中社交压力的能力。

CodeReview主要关注哪些方面?

CodeReview的关注点包括:基础功能方面(修改范围、安全性、功能实现、自我检查机制、错误和异常处理)和可靠性方面(性能优化、可维护性和可扩展性、可测试性)。

CodeReview中最突出的问题是什么?

CodeReview中最突出的问题是:真正的问题没有发现,纠结的问题与开发者无法达成共识。

为什么CodeReview中难以达成共识?

因为代码坏味道的问题往往仁者见仁,就像zookeeper建议部署单数个节点一样,两个人不容易协商出共识。谁妥协得多了,都会造成影响力方面的损失。

CodeReview对CR同学的能力有哪些要求?

CodeReview对CR同学的技术功底提出了很大的挑战,CR同学需要是把事情想明白的人。同时,如果CR提出的问题不能有效的说服对方,会对个人影响力造成伤害,因此还需要很强的沟通能力。

如何保证代码的可测试性?

可测试性一般会通过CI/CD来保证,通常有一个整体性的要求,比如要达到85%的行级单测覆盖率、80%的分支覆盖率、100%的单测成功率。但需要人工Review来保证这些测试案例是真正有效的案例。

🏷️

标签

➡️

继续阅读