代码三部曲,最全代码治理知识体系(下)

1.问题

  • 1、代码管理是什么,包含哪些内容?

  • 2、如何建设合适的代码仓库,如何规范治理代码仓库?

  • 3、如何应用版本控制工具,选择合适的分支策略,适应不同的开发模式?

  • 4、项目开源需要注意哪些环节?

  • 5、编码规范又有哪些通用的准则,如何使用工具提升效率?

  • 6、代码审查的意义是什么,如何进行有效的代码审查?

  • 7、代码审查需要检查哪些清单,有哪些步骤?

2.关键词

代码管理,编码规范,代码审查,源码,仓库,版本控制,修订,冲突,分支,合并,脚本,权限,提交规范,提交,工具,开源,编码准则,版权,命名,注释,规约,扫描工具,漏洞,流程,审查步骤

关注公众号《编程原理》,回复“代码”获取最全代码治理知识体系思维导图

3.全文概要

本文试图在代码领域里面建立一套完整的知识体系,涵盖了代码管理中的仓库建设与治理,版本控制的操作与原理,在夯实代码管理服务的基础上,谈谈如何编写出规范靠谱的代码,介绍一系列业界推崇的编码规范,然后再介绍代码评审的一套方法论。在代码管理,规范,评审三大环节形成闭环,解释了代码上下游的知识结构,从而对代码运营有进一步的理解。

## 6.代码审查

如果说代码管理硬件设施,编码规范是主动出击,那么代码审查则是软件质量的后一道防线。本节我们将从代码评审的定义、意义、方法、步骤、度量等方面来介绍。

4.1定义

代码审查是指对计算机源代码系统化地审查,以编码人员直接相互评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,评估代码质量,提升软件质量及开发者的技术,通常代码审查过程包括以下阶段:

  • 最佳实践,优化业务实现逻辑

  • 错误检测,查找代码逻辑错误

  • 漏洞扫描,识别常见的代码安全漏洞

  • 后门发现,检测可疑代码段以及集成到软件中的任何恶意代码

4.2意义

软件代码审查在软件质量中起着重要作用,代码审查可以由多个人在多个交付品的多个阶段进行。人员之间可以专注于特定的软件领域,也可以交叉审查提升自身编码能力。代码审查首先可以降低风险,因为即使是优秀的开发人员也会错过某些东西,因此多一层代码审查始终可以提升质量,也就是时间换质量。此外,在共同检查代码时,每个团队成员都可以提出更明智的解决方案,以提高项目的总体性能和代码质量。

4.2.1优势

团队代码审查有很多优点,整个团队的知识交叉学习,这将有助于及时沉淀知识库。同时关于代码可以发挥出多种观点看法,这将有助于提高代码和设计质量。团队审核的另一个重要优势是,初级员工有机会听取技术主管,经理或者架构师的意见,对于他们来说,这是一个很好的学习机会,可以了解他们的高年级同学的期望或者想法。
总之,代码审查是一个双向的学习过程。它有助于确保代码在整个系统中是对称的,并保持软件质量。
下面列出不同角色对于代码审查带来的作用:

  • 开发人员,将从编码角度进行研究,并将其与其他项目代码进行比较,借此来填补有开发人员的知识盲区。

  • 测试人员,把代码实现与测试用例进行比较,并确定开发人员是否实施了不属于测试用例的业务规则。

  • 架构人员,将从设计角度进行审查,并确保按照初始设计实施代码,检查最佳编码实践,设计原则以保护软件质量。

4.2.2劣势

当然,代码审查确实是一项耗时耗人力的工作,完全执行甚至占到项目开发的很大一部分时间,这对于紧急项目来说也是一项挑战。但这并不意味着我们可以忽略掉代码审查,相反这更加考验我们对项目的排期和对工具的使用还有流程的编排。后面会介绍到项目审查的核心步骤和提效的扫描工具。

4.3准则

代码审查大方向必须遵守一些准则,下面列出一些需要注意的方向:

  • 可维护性:

    代码发布后持续相当长的时间内,应用程序力求花最少的精力来维护,而且应该易于识别缺陷和修复

  • 可读性:

    代码应该做到不言自明,在阅读代码的同时,可以读懂业务。

    为变量,函数和类使用适当的命名。

    如果某段代码需要花很多时间来理解,则意味着有重构的必要,或者至少编写清晰明了的注释。

  • 可测试性:

    代码应易于测试,有助于更快发现代码缺陷。

  • 可调试性:

    代码需合理封装且易于执行调试,不需额外编写脚本来调试业务功能。

  • 可配置性:

    将可配置值保留在适当的文件,按环境分类以便在不同环境执行代码无需手动操作或者变更代码。

  • 可重用性:

    充分合理复用现有代码,同时评估如何降低代码耦合性。

  • 可靠性:

    代码需要确保包含异常处理和错误记录机制。

  • 可扩展性:

    只需对现有代码进行最小的更改即可轻松添加增强功能,或者说一个组件应易于替换为更好的组件。

  • 安全性:

    验证,授权,针对安全威胁的输入数据验证,敏感数据加密

4.4流程

讲完代码审查需要关注的点之后,我们讲继续学习正确进行代码审查的姿势。

4.4.1审查方式

通常我们理解的代码审查就是一个程序员对另外一个程序员的代码进行阅读,进而探讨,得出改进建议或者缺陷修复清单。但是为了适应不同的团队和工作场景,我们先介绍几种不同的代码审查方式。

  • 电子邮件
    代码审查不一定实时在线讨论,对于全球化团队可能还有时差,所以首选的肯定是邮件方式,打破了时间的限制。一旦准备好代码审查,便会通过电子邮件将文件发送给指定的同事,这种方法比更传统的技术更灵活和更具适应性。

  • 结对编程
    作为极限编程的标志之一,这种编写软件的方法使开发人员并排在一起处理相同的代码,从而在彼此进行工作时检查彼此的工作,也相当于结对相互审查。对于高级开发人员来说,这是指导初级同事的好方法,并且将代码审查直接引入到编程过程中。但是,由于结对编程人员对业务的熟悉程度趋于相同,因此其他代码审查中可能会陷入重复陷阱。与其他方法相比,结对编程在时间和人员也将花费更多的资源。

  • 线下审查
    线下审查就是我们多数情况使用的一种方法,对于大多数开发人员而言,比结对编程更舒适,线下代码审查是最简单和直观的方法。一旦代码准备好了,就可以找到一个合适的同事在电脑面前检查代码,同时向他们解释为什么编写代码的缘由。但是如果缺少跟踪问题和记录审查纪要的机制的话,效果会打折扣。

  • 辅助工具
    没有比使用基于软件的代码检查工具更简单,更有效的方法来检查代码了,其中一些基于浏览器或无缝集成在各种标准IDE和SCM开发框架中。软件工具解决了上述方法的许多局限性,以清晰一致的顺序跟踪审查人员的评论和对缺陷的建议解决方案,从而使审阅可以异步和非本地方式进行,并且当有新评论进入时发出通知,将其指向初始编码员,并确保整个过程高效进行,无需开会,也无需离开办公桌。一些工具还允许审核和修订需求文档,生成关键指标的统计信息,输出代码审查报告。

当然随着软件行业的迅速发展,通常我们也会结合以上多种方式进行代码审查。

4.4.2审查流程

以下是代码审查中遵循的过程:

  • 开发人员将向整个团队介绍业务用例

  • 将回顾实现业务用例所遵循的设计

  • 审查小组将讨论和审查为实现业务用例而编写的代码

  • 将测试用例与业务逻辑中实现的业务规则进行比较

  • 在代码演练期间,相关人员都有机会了解所实现的逻辑

  • 数据脚本团队展示针对业务用例编写的测试用例

  • 数据库团队将审查数据库依赖性、表结构,初始数据脚本,升级脚本

  • 发布工程团队将讨论和审查对部署脚本的依赖性

4.4.3审查步骤
  • 长度:限制单次审查代码的行数,通常是少于400行代码
    具体可以根据团队千行代码bug率进行调整,如果审查200行代码时代码率超过平均水平,则需要重新评估代码审查是否符合准入标准。

  • 速度:通常审查代码速度应低于500L/h
    合理数量的代码审查,在有限的时间内以较慢的速度进行,是最有效的代码审查.

  • 时间:单次代码审查时间不要超过60分钟
    当人们在一段时间内从事任何需要集中精力的活动时,性能会在大约60分钟后开始下降。研究表明,在一段时间内休息一下可以大大提高工作质量。进行更频繁的审查应该减少进行此长度审查的需要。

  • 目标:设定目标并获取指标
    在代码审查之前,团队应决定如何衡量同行评审的有效性并提出一些切实的目标。比如检验率,缺陷率,在指标驱动的代码审查中,工具会自动收集数据,然后输出的代码审查报告来揭示代码审查过程发现的问题。

  • 注释:作者应该在代码审查之前进行必要的源代码注释
    注释应针对其他代码审查者,用以简化流程并提供更多的上下文信息,方便阅读者把精力投放在核心的业务逻辑上面。

  • 清单:代码审查前列出待审查的相关文件清单
    清单是消除常见错误和应对遗漏查找挑战的最有效方法,确保审核过程不漏掉文件或者脚本。

  • 修复:建立修复发现缺陷的过程
    确保缺陷已修复的最佳方法是使用协作代码审阅工具,该工具使审阅者可以记录错误,与作者讨论错误并批准代码更改。如果没有自动化工具,则在审查中发现的错误可能不会记录在团队的常规缺陷跟踪系统中。

  • 文化:建立积极的代码审查文化
    小组成员评审会给人际团队关系带来压力,通常也很难让每个工作都受到同伴的批评,也很难让管理层评估和衡量代码中的缺陷密度。因此,为了使对等代码审查成功,管理人员在对等审查中营造协作和学习的文化非常重要。

5.代码集成

好了,经历完代码管理,编码规范和代码审查三部曲后,基本我们已经把技术这座高楼的地基砂石捋了一遍,牢牢的把握如何管理代码的艺术。但是随着技术的日新月异发展,旧的开发流程也不断在变更,从传统的软件开发流程到敏捷开发,还有最近几年的DevOps,慢慢过渡到面向未来架构的GitOps。尽管生产力工具在不断的变革,但是关于代码的朴素哲学思想却是坚如磐石,那就是在高效和稳定中寻找平衡点。

推荐阅读

《代码三部曲,最全代码治理知识体系(上)》

《代码三部曲,最全代码治理知识体系(中)》

关注公众号《编程原理》,升级你的编程知识体系

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值