代码审查完整指南来了!

敏捷开发
• 阅读 361

代码审查不是战场,审查员也不是作者的对手。他们的目标是一致的——解决产品问题并创建高质量的代码库。让我们深入探讨并了解如何从审查者的角度进行一次代码审查。

不要浪费时间

总有些问题时常重复出现。先是在一个拉取请求中,然后又在另一个拉取请求中;先是来自一个作者,然后又来自另一个作者。这些问题完全相同,这就是例行公事。事实上,如果某件事情可以自动化,那么它就必须自动化。

代码风格。没有必要为代码风格而争论不休,因为早在几十年前,项目中的每个人或整个社区就已经对代码风格进行了多次定义。在 linter(代码检查工具) 和 formatter(格式化工具) 中设置字符串的长度、方法和类的名称,然后忘掉它吧。

测试。要将所有测试(单元测试、集成测试、端到端测试)及其启动、覆盖范围等相关事项实现自动化。只需进行设置,并为指标设定一个可接受的阈值,例如,在 PR(拉取请求)中的新代码覆盖率不应低于 90%,这种简单的设置能让很多人的工作更轻松。

不要自我重复(DRY)。应该将常见的重复内容集中到一个地方,以便对其进行简单、集中的更改或修复。收集所有应用程序的代码重复百分比,并以相同的方式进行测试。

代码分析。代码分析有助于收集更多数据和指标。它不仅会检查审查中的代码,还会检查如何将其集成到现有生态系统中。一些分析工具会根据历史案例提供可能存在的漏洞或安全热点报告。将存储库与代码分析工具集成,并在每次代码审查时运行这些工具。

总结。工程师应该专注于解决问题,而不是重复常规。我可以保证的是,如果能将上述任何事件至少基本自动化,代码审查的平均质量就会大幅提高。这能为审查人员节省时间。如果出现以下情况,就需要检查代码:

  • 并非所有测试都通过
  • 测试覆盖率不足/低于公认的百分比
  • 代码重复率高于可接受水平
  • 代码有异味
  • 意外的安全热点
  • 通用规则

尊重。礼貌待人,尊重作者。请记住,代码审查的参与者是来互相帮助的,他们有着共同的目标。可以批评代码,但绝不能批评人。

任务。在完全理解问题所在之前,不要进行代码审查。获取有关问题所在、实际案例、条件、重现步骤、功能受众等信息。要求进行代码演示、代码评审会议,甚至只是同步会议,以明确特定任务的各个方面。

建议。当提出任何改变的建议时,解释原因。提供背景、示例、细节和信息,并分享有关资源的链接——为什么作者应该进行更新。一个词或一行话的评论有时真的很难理解。请记住,通常任务可能有多个解决方案,因此在建议更改之前,请尝试理解选择此解决方案的确切原因。使用提交历史,以及带有良好消息的结构化提交可以提供理解的关键。

审查流程

下面我收集了一些真正值得关注的基本类别和问题,按照优先级从最重要的开始排序。

业务目标

深入研究,不仅要研究代码,还要研究其背后的业务逻辑。首先,任何代码都必须执行指定的任务并达到指定的目标。不管代码有多好,不管它写得有多好,如果它不能实现它的目标,它就是无用的。代码不是为代码而写的。编写代码是为了添加新功能,开发和推动产品向前发展。不要将检查限制在快乐路径上,要考虑边缘情况以及如何处理它们。所有这些都可以概括为这个问题——它能解决问题吗?

实现

接下来,开始关注数字、指标和报告。从不同角度分析代码。

安全性。它带来了漏洞还是解决了漏洞?在受到攻击时它会有多稳定?被动还是主动?比如分布式拒绝服务攻击(DDoS)或者任何类型的注入(如 SQL 注入、跨站脚本等)?

错误处理。如何正确处理错误?应用程序会崩溃或向错误跟踪软件发送报告吗?它会向最终用户显示所有堆栈跟踪吗?它是可恢复的失败操作吗?数据会被损坏或碰撞吗?

性能。新更改后性能是否受到影响?该代码可能导致内存泄漏?优化有多好?是否做了所有的事情来使代码高效(缓存系统、资源池、数据压缩等)?

集成。它如何与其他模块和系统协同工作?是否能提高代码的一致性?能否方便地与其他实现或集成进行交换?代码与系统其他部分其他版本的兼容性如何(如新版本的向后兼容性)?

日志和跟踪。这可以简化调试和故障排除过程,也可以使其变得更加复杂。例如,记录集成的第三方服务的响应时间有助于识别停机时间。日志和跟踪是否足够?多还是少?

仔细研究并回答这些问题,就能确定实施工具的正确选择。

可维护性

这里的一个主要问题是——“没有作者的代码如何生存?”

可读性。代码如同构成单词或者句子的字母,所有的代码组成完成后,就如同在阅读一本书籍,不过这本“书籍”是用一种特定的语言写的:编程语言。所以可读性应该从字面上理解,代码应该用写得好的字符(如参数、变量等)构建一个故事(如类、函数),它们应该采取行动(调用其他函数、变异或不可变等)。

值得关注的问题:该代码的可读性如何?它可以由作者以外的人来维护吗?命名参数、变量、函数等的可理解性如何等等。

文档。在开发过程中,文档可以节省大量时间,减少同步时间,简化入职流程,总之是项目知识库的良好存储。

值得关注的问题:代码文档的质量如何?阅读后是否会留下疑问?所有需要的 MD 文件和外部文档是否会根据变更进行添加/更新?

可重用性。为防止代码重复,如果多个模块的逻辑是共通的,就可将其移至助手、实用程序等共享位置。

值得关注的问题:代码的某些部分能否在其他地方重复使用?如果不能,其独特性是否合理?如果是,是否为达到这一指标而进行了过度设计?

设计。代码不应该重新发明轮子。在社区中已经有许多被认可的最佳实践和定义好的设计模式,它们是软件工程中常见问题的解决方案。

值得关注的问题:代码是否采用了最佳实践和模式?是否以正确的方式使用?

印象。代码应当激励以某种方式与它现在或未来产生交集的任何人,努力做到同样出色和高质量,甚至更好。

值得关注的问题:在合并之后,代码库是否变得更好?其他工程师会对使用这段代码感到兴奋吗?

代码审查:成长的机会

做好代码审查是一项艰巨的工作。审核员是第一道技术质量关。在合并之前,代码归作者所有并由其管理,但合并之后,责任将移交给整个团队。这就是为什么审查员应该关注代码的稳定、可靠和无懈可击。代码审查是一次成长的机会。对审阅者和作者来说都是成长。

点赞
收藏
评论区
推荐文章
代码审查机制
代码审查机制TOC什么是代码审查CodeReview已经是很多公司的常规实践,初看上去好像是浪费时间,降低工作效率,其实反之,好处大家有目共睹。它能检查代码的正确性,合理性,安全性,发现隐秘的bugs,让系统更可靠的运行。它能保证代码能有两个或以上的人熟悉,促进知识共享。它能让团队成员互为备份,互相支持,不会有SPOF。它能威慑埋雷的任何想法,杜绝邪
雷厉风行 雷厉风行
1年前
mac软件-Understand for Mac(优秀的源代码审查工具) 完美激活版
UnderstandforMac(优秀的源代码审查工具),这是一款空前强大的代码编程审阅软件,尤其是对于从事大型多个MSLOC项目的人员来说,Understand已经是他们不可或缺的工具之一,它可以帮助程序员快速理解,衡量,维护和记录他们的源代码。
Souleigh ✨ Souleigh ✨
3年前
请纠正这5个PHP编码小陋习
在做过大量的代码审查后,我经常看到一些重复的错误,以下是纠正这些错误的方法。在循环之前测试数组是否为空$items;//...if(count($items)0){foreach($itemsas$item){//processon$item...
Wesley13 Wesley13
3年前
5分钟带你领略写出优美代码的核心要素(内含 感恩节彩蛋)
【导语】马丁(RobertC.Martin)撰写的《代码整洁之道》(CleanCode)一书中提出了代码质量与其整洁度成正比,干净的代码,既在质量上较为可靠,也为后期维护、升级奠定了良好基础,并由此揭示代码整洁之道。文中讲述了:当你在做CodeReview时,从审查者的言辞平静或是激烈的词语中,可以领略到你写的代码是BadCode还
Stella981 Stella981
3年前
SonarQube 8.4.2.36762 最新版在 Ubuntu 下的安装配置
       SonarQube是一个开源工具,可以进行自动代码审查,可帮助进行代码质量分析和报告。它会扫描您的源代码以查找潜在的错误,漏洞和可维护性问题,然后将结果显示在报告中,该报告将使您能够识别应用程序中的潜在问题。       一、下载最新版本的安装包  一般都直接上官网下载,打开官网链接  https://www.son
Stella981 Stella981
3年前
Git用户手册
6.1GitHub账户的创建和配置GitHub是最大的Git版本库托管商,是成千上万的开发者和项目能够合作进行的中心。大部分Git版本库都托管在GitHub,很多开源项目使用GitHub实现Git托管、问题追踪、代码审查以及其它事情。所以,尽管这不是Git开源项目的直接部分,
Stella981 Stella981
3年前
Code Review最佳实践
  我一直认为CodeReview(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。包括像Google、微软这些公司,CodeReview都是基本要求,代码合并之前必须要有人审查通过才行。  然而对于我观察到的大部分软件开发团队来说,认真做CodeReview的很少,有的流于形式,有的可能根本就没有Co
京东云开发者 京东云开发者
8个月前
代码质量与技术债系列分享之一 - 如何做好 Code Review
TL;DR参考资料名词解释CR:CodeReviewCR:代码审查CL:Standsfor"changelist",whichmeansoneselfcontainedchangethathasbeensubmittedtoversioncontrolor
京东云开发者 京东云开发者
4个月前
Code Review:提升代码质量与团队能力的利器
1.引言CodeReview(下文简称CR),即代码审查,是一种通过评审代码以发现并修正错误的实践。它不是一个新概念,但在软件开发中,它的重要性毋庸置疑。首先,它可以显著降低软件中的缺陷比例;其次,它促进了知识共享,通过评审的过程,团队成员可以相互学习,增
敏捷开发
敏捷开发
Lv1
女 · 产品经理
公众号:敏捷开发 网址:www.minjiekaifa.com
文章
44
粉丝
2
获赞
0