CodeReview的挑战

540b124768f815a513ef71b69be0eebd.png

保证CodeReview质量的前提条件

有良性的社交压力

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

设想一下,当你紧张地编写代码,而交付时间又步步逼近时,面对组织对单元测试的严格要求,你可能会考虑降低标准,甚至为了应付工具的覆盖率要求而编写一些不那么有用但能提高覆盖率的测试。然而,一想到你的代码即将接受同事们的严格审查,那种压力便会促使你避免选择那些短期收益高但长期损失大的“投机”行为。

CodeReview是对前面所有工作的检查

下面是我总结的CodeReview的关注点:

基础功能方面

修改范围:我在CR时第一关注点是修改范围与需求是否一致,如果修改范围扩大,会造成变更不可控,是极为危险的。

安全性:是否有严格的准入校验,检查是否有可能导致安全问题的地方,如SQL注入、跨站脚本(XSS)问题等。对于敏感数据,要确保其在使用、传输和存储过程中的安全性。

功能实现:代码是否满足功能需求或修复了相应的Bug,代码实现的逻辑是否正确?这个会通过在方案评审时就做好准备。设计方案评审需要3人以上有CR权限同学参加,最后CR人至少是这三人中的两个。

自我检查机制:比如与第三方交互前后要打日志,是否需要配套相关的数据一致性措施。当然,这些在设计阶段一般会定好。

错误和异常处理:检查是否有错误处理和异常处理机制,以防代码在遇到错误时崩溃。

可靠性方面

性能优化: 检查代码是否有可能影响性能的地方,如是否有不必要的循环,是否使用了正确的数据结构、算法时间复杂度和空间复杂度是否达标。

可维护性和可扩展性: 针对代码的结构和设计进行审查,代码是否易懂,接口设计是否良好,逻辑是否清晰,是否遵循遵循开放/封闭等设计原则,是否利于后续的扩展和维护。

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

可以发现这些关注点,需要在设计阶段就定义好,CodeReview是做兜底的。CodeReview发现的问题,问题可能不是在编码阶段才产生,需要去仔细辨别问题发生的环节,做深入剖析。

CodeReview中最突出的问题

真正的问题没有发现,纠结的问题与开发者无法达成共识

有的同学做CodeReview的时候,依赖的是差异对比工具,往往只看到改了什么,但没有对工程深刻的理解,也没有实际把代码放到IDE中追踪修改方法被调用的地方涉及到几处,可能修改范围被扩大了,没有发现。发现的只是一些可维护性方面的问题,通常是一些代码坏味道,常见的包括:

重复的代码、过长函数、过大类、过长参数列、发散式变化、霰弹式修改、依恋情结、数据泥团、基本型别偏执、冗赘类、夸夸其谈未来性、令人迷惑的暂时值域、过度耦合的消息链、狎昵关系、异曲同工的类、内幕交易。

这些问题都非常重要,但带着这些问题上线不一定会引起真正的线上问题。但是修改范围扩大造成的影响可能会产生预想不到的问题。也有很重要的一点:代码坏味道的问题,往往仁者见仁,就像zookeeper建议部署单数个节点一样,两个人不容易协商出共识。谁妥协得多了,都会造成影响力方面的损失。

所以这对CR同学的技术功底提出了很大的挑战,CR同学需要是把事情想明白的人。比如,提出下面的CR问题。

未使用最佳实践:例如,未使用Java 8及以上版本的特性(如Lambda表达式、Stream API等),或者未使用第三方库来简化代码。

这就面临着需要和开发者解释清楚:

未使用Java 8及以上版本的特性(如Lambda表达式、Stream API等)可能会造成以下问题:

  1. 代码可读性降低:Java 8引入的Lambda表达式和Stream API等特性可以极大地简化代码,提高代码的可读性。如果未使用这些特性,可能会导致代码冗长、复杂,从而降低可读性。

  2. 代码效率降低:Stream API等特性可以更加高效地处理集合数据,例如过滤、映射、归约等操作。如果未使用这些特性,可能会导致代码效率降低,尤其是在处理大量数据时。

  3. 难以维护:随着Java版本的更新,新的特性和工具不断出现,使用这些新特性可以更方便地维护和更新代码。如果未使用Java 8及以上版本的特性,可能会使代码难以维护,因为需要使用旧的、可能已经被淘汰的工具和方法。

但提出的这些观点能不能得到开发者的赞同,因为这并不意味着必须盲目追求使用Java 8及以上版本的特性。在实际开发中,应根据具体的需求和场景来选择合适的工具和技术。在一些简单的场景下,使用旧的特性可能更加简单和直观。因此,在选择是否使用Java 8及以上版本的特性时,需要权衡各种因素,做出最优的决策。

如果CR提出的问题不能有效的说服对方,会对个人影响力造成伤害,以至于对工作的开展起到不利影响。

CodeReview的这些挑战,对CR同学的能力提出了很高的要求,在工作中,需要不断去打磨这个能力。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值