改善既有代码的设计之重构步骤!

清晰的重构目标

明确重构的目的和目标,需要改进的区域。

确保团队成员理解本次重构的价值。

  • 比如是因为线上老出问题,还是业务支撑复杂等。

逐步重构

梳理清晰

  • 在进行逐步重构的过程中,深入理解现有代码的功能和设计是前提。
  • 这不仅包括对代码逻辑的把握,还要理解代码背后的业务逻辑和设计初衷
  • 只有全面理解了现有系统,我们才能确保重构的方向和步骤是正确的,同时避免对现有功能造成意外的影响。

逐步重构的精髓

  • 重构并不意味着要一次性进行大规模的改动。
  • 相反,它是一个持续的、逐步的过程,通过细小且有序的改进来优化程序的结构。
  • 正确的做法是在完全理解现有代码的基础上,有条不紊地进行改进
    • 每一次改动后都要通过严格且可靠的测试来确保这些改动没有引入新的错误。
    • 这种方法既可以提高代码质量,又能最大限度地减少对项目进度的影响。

大模型AI辅助重构

  • 在这个过程中,充分利用大模型AI技术,可以为重构提供有力的支持。
  • AI可以帮助我们快速理解复杂代码、发现潜在的重构机会,甚至直接提供重构建议。
  • 然而,需要注意的是,AI提供的建议并非总是完全准确。
  • 因此,使用AI技术辅助重构时,应将其视为一种参考和辅助工具。
    • 我们需要结合自己对项目的深入理解,对AI的建议进行评估和筛选
      • 以确保最终的重构方案既符合项目需求,又能有效提升代码质量。

测试和比对

在进行代码重构时,需要遵循一个不变的初始步骤:

确保待修改代码具备一套可靠的测试

因为虽然遵循精心设计的重构策略能够规避大多数引入错误的风险,但作为工程师,出错的可能性始终存在。

  • 随着程序规模的扩大,不经意间破坏其他代码部分的风险也随之增加。

编写测试:

  • 确保有充分的测试覆盖,涵盖单元测试、集成测试和系统测试。
  • 这些测试在整个重构过程中,是保障功能稳定不受影响的关键。

持续集成与自动化测试:

  • 通过自动化测试和持续集成,可以确保在重构过程中能够及时发现并修正错误,从而降低引入新错误的可能性。

R2引流测试比对重构的测试本质上是一种比对过程

由于每个系统的业务属性不尽相同,对于读操作,通过引流比对来验证功能是比较方便的方法。

如果涉及到写操作,如订单保存等,则需要对数据的各个关键环节进行比对。

回归测试

完成上述步骤后,进行回归测试以确保所有现有功能仍然如预期般正常工作。

通过这样一套全面的测试和验证流程,能够确保重构不仅提升了代码的可维护性和清晰度

  • 同时也保持了系统的稳定性和可靠性。

  • 这种方法在追求更好代码结构的同时,也最大限度地减少了对现有系统功能的影响。

切量验证

在进行重构后的切量验证时,我们可以依据不同的维度来进行灵活的验证,例如用户标识(pin)、订单的百分比、仓库等。

这样的切量验证确保了全链路的一致性和稳定性

为了更加谨慎地进行切量,我们建议采用渐进式的计划,从较小的比例和较长的时间开始,逐步增加

具体的切量步骤可以是:

  • 首先从1个或100个开始,然后按照1%、5%、10%、30%、50%、80%直至100%的顺序逐步扩大覆盖范围。
  • 这种方法可以帮助我们在每一步骤中细致地观察和评估变更的影响,从而确保重构的稳定性和效果。

如果在切量过程中遇到任何问题,我们可以利用DUCC开关快速切换回旧有功能。

这种快速回退机制为我们的重构提供了一个安全网,确保了在任何不确定性出现时

  • 我们能够迅速恢复服务的稳定性和可靠性,最大限度地减少对用户体验的影响。

通过这样细致且灵活的切量验证策略,我们不仅能够确保重构的质量和稳定性

  • 还能够在发现问题时快速响应,确保服务的持续可用性。

重构后评估

在完成重构工作后,对重构成果进行全面评估是确保目标达成的关键一步。

这不仅涉及到验证重构是否满足了预定目标,还包括了对系统性能、代码可维护性和可读性的综合评估。

性能评估:

  • 首先,我们需要对系统的性能进行再评估。

  • 这是为了确保重构工作没有导致任何性能上的退步。

  • 重构的目的往往是为了优化和改进,因此,验证性能是否至少保持不变(如果不是有所提升的话)是至关重要的。

维护性评估:

  • 接下来,我们要评估重构是否有效提高了代码的可维护性和可读性。
  • 代码的可维护性是软件质量的关键指标之一,优化代码结构、减少复杂度和增强代码的可读性都是重构的常见目标。
  • 通过评估这些方面的改进,我们可以确定重构是否达到了预期的效果。

通过遵循这些评估步骤,重构可以以一种有序和系统化的方式进行,

  • 这不仅最小化了引入新问题的风险,还有助于提升软件的整体质量。

最终,这将使得软件更加健壮、易于维护,并且能够更好地适应未来的变化和需求。