介绍

代码评审(Code Review)是保证代码内在质量的一种重要手段,也是软件外部质量非常重要的保证措施。它是通过由其他团队成员或同行对编写的代码进行仔细审查和讨论,以发现潜在问题、提供反馈和改进建议的过程。

其次评审的内容包括代码的设计、功能、复杂度、命名、风格、测试等方面。评审的标准包括代码设计是否合理和精良、代码是否高效和安全、代码复杂度是否高、代码中的命名和风格是否符合团队的要求、代码是否有足够和合理的测试等。

然后代码评审可以根据评审方式分为人工评审和自动评审。人工评审可以根据不同场景分为结对编程中的一对一代码评审、分布式团队中的在线远程专人代码评审,以及基于整个团队的团队代码评审。其中评审人员可以是特定的高级程序员和技术负责人,也可以是同一个团队中的其他程序员。

为什么要代码评审?

代码编写是一项容易产生错误的工作,即使是经验丰富的程序员也不能保证第一次编写的代码是完全正确且没有问题的。随着软件规模的扩大,软件系统的开发者数量也大幅增加,他们的能力层次不齐,导致开发的软件系统问题数量也大量增加。然而,通过代码评审,可以尽早发现很多问题,从而大大减少修复的周期和成本,减少技术债的引入,提高软件的质量。

根据卡珀斯·琼斯(Capers Jones)的两篇文章 :

他分析了超过12,000个软件开发项目。在使用正式代码评审的项目中,潜在缺陷发现率约为60-65%。如果是非正式的代码评审,则潜在缺陷发现率不到50%。对于大多数测试,潜在缺陷发现率会在30%左右。而代码评审的目的主要涵盖以下几个方面:
1.发现潜在问题: 代码评审的首要目标是发现代码中可能存在的问题和错误。这包括逻辑错误、安全漏洞、性能问题、潜在的异常情况等。通过多个人的视角审查代码,可以帮助尽早发现并纠正这些问题,减少后期修复成本。
2.质量和规范性: 代码评审要关注代码的质量和符合性。评审人员会检查代码是否符合团队制定的编码规范和最佳实践,以确保代码的一致性和可读性。
3.性能和优化: 评审人员可以关注代码的性能,是否存在效率低下或资源浪费的情况。他们可以提出优化建议,以改进系统的性能。
4.可维护性: 代码评审还要关注代码的可维护性。评审人员会考虑代码的结构是否清晰、模块化程度是否足够、是否有足够的注释等,以确保代码在未来的维护中更容易理解和修改。
5.安全性: 安全是软件开发中至关重要的方面。代码评审要关注潜在的安全漏洞和风险,并提出相应的改进建议,以保护系统免受潜在的攻击。
6.团队协作和知识共享: 代码评审是一个团队协作和知识共享的过程。通过评审,团队成员可以相互学习和分享经验,提高整个团队的技术水平和代码质量。
7.尊重和建设性反馈: 在代码评审过程中,评审人员应该尊重代码作者的努力,并提供建设性的反馈。评审不应该是指责或挑剔,而是帮助共同提高代码质量的过程。

思考

代码评审虽然是一种非常重要的内在质量和外在质量的保障实践,但是很多团队却很难实施成功,主要是很多团队不了解代码评审的一些前提条件,管理人员也不给团队足够的资源和时间,并且很多团队还对代码评审存在很多误解。

首先,如果项目已经成功地实施了结对编程,是不是团队代码审查可以不必进行?
结对编程中的代码评审是一对一的快速、持续的代码评审。而团队代码评审更重要的作用是让整个团队的开发人员共享代码,因此它们的主要作用不同。因此,即使结对编程得到了很好的实施,如果想让整个团队的开发人员都有能力维护整个软件系统,也需要进行团队代码评审。

其次,代码评审只能由人工进行?
目前,常规的代码评审大多通过人工进行。然而,现在已经有大量的代码静态扫描软件可以对代码进行自动化评审。但由于相关技术的限制,自动化代码评审只能发现一些通用问题,例如内存,逻辑,安全、性能、复杂度等问题,而对于业务功能、架构设计等问题则很难进行评审。因此,好的代码评审是由人工和自动化相辅相成,共同实施的。

然后,每天都进行一次代码评审是不是过于频繁?
有些团队认为一周或更长的时间做一次代码评审可以节约时间。其实,代码评审应该像持续集成一样频繁进行,以便及时发现问题并修复。随着时间推移,问题会越来越难以发现和修复,成本也会越来越高。建议每天进行团队级别的代码评审,以便及时发现问题并及时修复,预防缺陷进入测试阶段,节约成本。

标签: none