首页 > 其他分享 >如何快速看懂复杂代码

如何快速看懂复杂代码

时间:2023-05-17 21:04:40浏览次数:48  
标签:功能 调用 复杂 可以 阅读 链路 快速 代码

由于各种原因,程序员都可能接手一个全新的系统,或者一个模块,或者是一段代码功能。由于增量或者存量的业务问题,不得已要在已有的代码上做增删改查。

大部分存量的代码可能只需要简单的阅读就可以根据需求加以修改,但是如果面对的是一个沉淀了几年功能的系统,或者是非常复杂的模块,那如何能做到快速上手呢?

一、了解业务

第一个建议,就是先了解业务,不要马上就一头扎到代码里不能自拔,这也是很多入门程序员员犯的最大错误,很多程序员的视角是”代码及文档“,因此认为通过代码就可以直接复现代码功能的所有现象。虽然不能说是错的,但是在实际中会碰到很多问题,甚至自负的改动代码引起线上故障。

由于前任程序员的水平和历史背景问题,功能实现方式、历史背景、代码注释等都存在一定的不确定性。
因此通过代码直接复现业务功能是非常有难度的。

要先梳理代码要实现的业务功能是什么,有很多途径可以代码所支持的业功能到底是什么。需要评估出业务的几个特点:

  1. 系统有没有文档、教程、分享文章等
  2. 代码的主要业务功能是什么
  3. 业务功能使用的角色是哪些,数量是多少,种类是多少
  4. 业务功能的运营、产品、技术负责人是谁

更好的方式,是找到运营、产品或者原来的技术负责人,简单了解业务的上下文背景,这里可以快速熟悉当时代码实现的原因和背景。毕竟代码写的时候的上下文环境和当前的环境可能是完全不同的,因此要回顾到当时的历史背景,才能更好的理解代码。

对于有条件自己走一遍产品功能的,则再好不过了,走查方式一般有以下几个方式:

  1. 通过客户的角度去体验一遍功能,特别是一些TOC的产品
  2. 通过测试账号去体验一遍功能,在系统上线的时候,一般需要自测,因此可以找到当时的账号进行验证。比如一些TOB的场景,无法通过客户的角度去体验的,就可以通过内部测试账号去体验

对于实在链路过长,无法全链路体验的,可以通过局部构造集成测试用例的方式去验证。

二、阅读代码

了解到核心、大致的业务背景后,就可以开始阅读代码,阅读代码也要分层次,首次阅读的一定是代码的骨架,即阅读和了解代码的核心流程,此时要摒弃一些代码细节的研究,可以忽略一些内部晦涩难懂的细节实现,仅仅关注主要的模块、类和方法。此时阅读要关注的重点一般是

  1. 入口类
  2. 核心接口
  3. 核心对象
  4. 核心持久化能力

完成骨架代码的阅读,就大致可以了解业务的工作流、类图、ER图,此时就可以做到对代码有个大致的框架,即知道入口在哪里、哪几个模块实现了什么功能、数据存储到哪里等。这里可以沉淀出时序图、流程图、ER图等关键的技术表现对象。

如何快速看懂复杂代码_链路

业务流程图

如何快速看懂复杂代码_快捷键_02

E-R图

当然,阅读代码,要善用IDE工具,诸如JAVA的IDEA,有很多快捷方式,比如可以查看方法的调用依赖快捷键、查看方法接口快捷键等等。俗话说的好,工欲善其事必先利其器,找到好的工具、好的工具使用方法,分析阅读代码就快人一步。

三、分析调用

如果说代码是了解系统的设计态,那么分析调用链路就是分析运行态。即我们分析完一个系统看起来是什么样的,下一步就分析系统动起来是什么样的,毕竟不运行的代码,是没有任何意义的代码。

因此分析系统调用关系,可以帮助快速了解系统的实际运行走向,分析出系统的主干链路、耗时、上下文入参、返回值等等。

这里推荐一个非常好用的开源工具:https://arthas.aliyun.com/en-us/,可以快速的分析线上调用情况。

如何快速看懂复杂代码_程序员_03

理论上,一步步调试DEBUG代码,是可以最清晰直观的分析出代码的调用,实际上线上系统大部分无法在日常调试环境里复现调用流程,大部分的系统甚至都无法在本地启动起来。因此正常情况是结合线上&预发利用日志、在线调试等工具。

这里比较推荐用arthas来分析线上的调用情况,可以直接采集线上调用来分析代码的运行情况。

如何快速看懂复杂代码_程序员_04

arthas可以捕获指定方法的调用链路,也可以分析指定方法的入参出参(具体参考文档)。通过上面的trace就可以快速了解到一次实际的请求经过了哪些链路,然后结合代码可以了解每个方法实际完成了什么功能。

四、深入阅读

通过上面的方法,已经有了全局的系统背景、骨架、调用链路,现在可以开始深入阅读了。根据代码的复杂度,有的部分简单有的部分会比较复杂,因此可以针对复杂的部分逐行的阅读分析和调试代码,精准的对代码块就行分析,上下文入参是什么,实现方式是什么,返回值是什么,是否持久化,是否幂等,代码能否进一步抽象,此处代码设计的是好还是不好原因是什么,能否找原先的代码编写同学讨论一下,代码是否不符合当前的需要,性能能否优化等。

这里就可以根据需求,比如是增加业务功能还是性能优化还是重构,就有不同的视角出发点对代码进行评估分析。

如何快速看懂复杂代码_持久化_05

标签:功能,调用,复杂,可以,阅读,链路,快速,代码
From: https://blog.51cto.com/u_15990596/6293676

相关文章

  • 《Typora+PicGo +Github + jsDelivr + TinyPNG打造稳定快速、高效免费图床》的体验
    《Typora+PicGo+Github+jsDelivr+TinyPNG打造稳定快速、高效免费图床》前言我目前已完成Typora+PicGo图床配置以及PicGo上传失败的解决办法。不过看了EvanXu的这个图床后,发现还可以改进。原先我用的typora+PicGo+Gitter打造图床,而EvanXu的方法是用GItHub做仓库,用jsDelivr做C......
  • 无感带载启动,高频注入和DQ位置估算完整代码,有原理
    无感带载启动,高频注入和DQ位置估算完整代码,有原理图。全开源代码,不是库。可用于压缩机,水泵,风扇,空调,洗衣机等场合。可编译。ID:213900636564495410......
  • 无刷电机FOC控制量产方案,原理图,PCB,源代码,元器件BOM。
    无刷电机FOC控制量产方案,原理图,PCB,源代码,元器件BOM。可用于电动三轮,电动车等代步工具上,代码基于C语言,功能丰富,具有刹车功能、助力功能、欠压检测、巡航功能、防盗、自学习、故障显示等功能,可移植到家用电子,工业控制等领域。YID:618674459643030......
  • 三相光伏并网逆变器设计,原理图,PCB,以及源代码。
    三相光伏并网逆变器设计,原理图,PCB,以及源代码。主要包括以下板卡:1)主控DSP板,负责逆变器的逆变及保护控制。原理图为pdf.pcb为AD文件。2)接口板,负责信号采集、处理,以及信号等的连接。3)电源板:为整个系统提供24V以及±15V。4)功率板:实现驱动及功率逆变。5)总控板:MPPT控制、RS485modbus......
  • 15kw充电桩模块设计,源代码,原理图,pcb 1. 某达15kw充电桩模块
    15kw充电桩模块设计,源代码,原理图,pcb1.某达15kw充电桩模块,提供AD设计的电路图和pcb,源代码,并包括三相PFC程序参数变量的计算书。2.某默生15kw充电桩模块,PFC+DCDC双DSP控制,原理图(主板原理图为AD设计,其他为pdf格式),以及附有上位机软件,can通讯协议,产品规格书,无pcb源文件。YID:1315676......
  • 软件系统的复杂性(译)
    软件的复杂性:必要的、意外的和偶然的随着我们工程领域的发展,软件的复杂性似乎变得越来越难以控制了。为了正确理解如何处理不断增加的复杂性,重要的是要分辨出软件复杂性的三种基本类型:基本的、偶然的和附带的复杂性。基本的复杂性这种类型的软件复杂性与我们试图建模的领域的复杂......
  • 无感FOC电机控制代码,算法采用滑膜观测器,SVPWM控制,启动采用Vf,全开源代码,很有参考价值
    无感FOC电机控制代码,算法采用滑膜观测器,SVPWM控制,启动采用Vf,全开源代码,很有参考价值。带原理图,SMO推导,附有相关的文档资料,matlab模型,电机控制资料。ID:858679491419183......
  • 快速入门:使用Azure 数据 Studio进行连接和查询 Azure SQL 数据仓库中的数据
    本快速入门演示如何使用Azure数据Studio连接到AzureSQL数据仓库,然后使用TRANSACT-SQL语句来创建、插入和选择数据。必要條件若要完成本快速入门教程,需要Azure数据Studio,和AzureSQL数据仓库。安装Azure数据Studio。如果还没有SQL数据仓库,请参阅创建SQL数据仓库......
  • 快速入门:使用Azure 数据 Studio进行连接和查询 Azure SQL 数据库
    在此快速入门中,您将使用Azure数据Studio连接到AzureSQL数据库服务器。然后,将运行TRANSACT-SQL(T-SQL)语句来创建和查询中其他使用的TutorialDB数据库Azure数据Studio教程。先决条件若要完成本快速入门教程,需要Azure数据Studio,和AzureSQL数据库服务器。安装Azure......
  • 基于stm32F103C8的集尘风机电源设计 包含原理图和PCB及代码单片
    基于stm32F103C8的集尘风机电源设计包含原理图和PCB及代码单片机需要在检测到过零点后再进行PWM控制。1.提供PADS和allegro板工程文件。2.提供关键元器件手册。4.支持1000W到3000W大功率。ID:77169615872431469......