代码审查完整指南来了!
代码审查并非战场,审查员与作者并非对手。他们的目标是共同的——解决产品问题并创建高质量的代码库。让我们从审查者的角度深入探讨如何进行代码审查。
时间不应被浪费在无谓的事情上。有些问题总是反复出现,比如在拉取请求中,或是来自不同作者的代码中。这些问题如出一辙,应当实现自动化处理。
关于代码风格,无需过多争论。早在几十年前,项目内的每个成员或整个社区就已经对代码风格达成共识。在代码检查工具和格式化工具中设定规则,如字符串长度、方法和类的命名,然后遵循即可。
测试是软件开发的重要一环。我们需要将所有测试——单元测试、集成测试、端到端测试及其启动、覆盖范围等实现自动化。设定可接受的阈值,例如在新拉取请求中,新代码的覆盖率不应低于90%。这样的设置能极大地简化工作。
在编程中,我们应遵循“不要自我重复”的原则(DRY)。将重复的内容集中一处,以便于进行更改或修复。识别应用中的代码重复率,并以统一的方式进行测试。
代码分析有助于收集更多数据和指标,它不仅检查代码本身,还考察代码如何融入现有生态系统。使用分析工具,根据历史数据获取可能存在的漏洞或安全热点报告。将代码分析与存储库集成,每次进行代码审查时都运行这些工具。
工程师应专注于解决问题,而非重复性工作。若能将上述事项至少基本自动化,代码审查的平均质量将显著提高,审查人员也能节省大量时间。以下情况需特别注意:测试未全部通过、测试覆盖率不足、代码重复率高、代码存在异味或意外的安全热点。
在进行代码审查时,尊重是重要的。礼貌对待每一位参与者,因为他们有共同的目标——改进代码。在理解问题所在之前,不要进行代码审查。确保获取关于问题的详细信息,如实际案例、条件、重现步骤及功能受众等。要求演示代码、召开代码评审会议或同步会议,以明确特定任务的细节。
当提出修改建议时,应解释原因,并提供背景、示例、细节和信息。分享相关资源的链接,说明为什么建议作者进行更新。记住,通常有多种解决方案可行,因此在建议更改前,尝试理解选择此方案的确切原因。利用提交历史和结构化提交可以提供理解的关键。
在审查流程中,有几个基本类别和问题值得关注,按照优先级排序如下:
首先是业务目标。深入研究代码背后的业务逻辑至关重要。任何代码都必须执行指定任务并实现既定目标。无论代码质量如何,如果不能达到业务目标,它就是无效的。编写代码是为了推动产品发展,而非仅仅为了编写代码本身。审查时不仅要考虑正常操作情况,还要考虑边缘情况及其处理方式。
接下来是实现方面的问题。关注数字、指标和报告,从不同角度对代码进行分析:
安全性:评估代码是否存在漏洞,以及在受到攻击时的稳定性;
错误处理:检查代码如何处理错误,是否会导致应用程序崩溃或向错误跟踪软件发送报告;
性能:评估新代码对性能的影响,是否存在内存泄漏,以及优化的程度;
集成:了解代码如何与其他模块和系统协同工作,是否提高了一致性并方便与其他实现或集成进行交换;
日志和跟踪:评估其是否有助于简化或复杂化调试和故障排除过程。
仔细研究并回答这些问题,可以帮助我们确定实施工具的正确选择。 可维护性的探索
面对的首要议题——“无作者的代码如何生存?”我们需要探讨代码的可读性。代码如同由字母构成的单词和句子,汇聚成一本特定的语言之书。这本书的每一页、每一个章节,都是用编程语言写就。可读性,便是要让这些代码如同叙述一个精彩故事,用恰当的字符(参数、变量等)构建情节(类、函数),并使之行动(调用其他函数、变化等)。
关注点:我们需审视代码是否易于理解?除了作者之外,其他开发者能否轻松维护?参数、变量、函数等的命名是否清晰明了?
再来说说文档。在软件开发过程中,文档堪称时间之河中的救命稻草,它能减少同步耗时,简化入职流程,成为项目知识库的坚实基石。
关注点:我们需审视代码文档是否详尽且清晰?阅读后是否存在疑虑?随着代码的更新迭代,相关的MD文件和外部文档是否同步更新?
谈及可重用性,若多个模块存在共通逻辑,何妨将其抽离出来,置于公共位置,如助手、实用程序等,避免重复造轮。
关注点:我们需审视代码的某些部分是否具有通用性?是否可在其他场合复用?若不能,其独特性是否合理?若可以,团队是否为了达成这一指标而过度设计?
关于设计,无需重新发明轮子。软件工程中常见的问题,已有诸多被认可的最佳实践和既定模式藏于社区之中。
关注点:我们的代码是否采纳了这些最佳实践和模式?是否在正确的时间点、正确的场合使用它们?
最后说说印象。优秀的代码应当激励每一位与之交集的开发者,使之追求卓越、质量至上,甚至超越自我。
关注点:当我们融入新的代码后,整个代码库是否因此变得更优秀?其他工程师是否对使用这段代码充满期待?
代码审查:磨砺技能的机会
代码审查并非易事,审核员在这里扮演着技术质量的守门人角色。在代码合并前,它是作者的独立作品;但一旦合并,责任便转嫁到整个团队。审查员需关注代码的稳定性、可靠性和无懈可击的执行力。代码审查不仅是一次对代码的检测,更是一次双方共同成长的机会。无论是审阅者还是作者,都能从中获得宝贵的经验和技能提升。
文章从网络整理,文章内容不代表本站观点,转账请注明【蓑衣网】