V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
movq
V2EX  ›  程序员

如何高效阅读陌生项目的代码

  •  
  •   movq · 299 天前 · 2063 次点击
    这是一个创建于 299 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在阅读一个现有工程( Java )的代码,代码里面几乎没有任何注释,我想改某个小地方,得把很多地方的代码都从头到尾读几遍

    我采取的方式是看到不熟悉的类/方法/成员,就看一下它的 reference ,哪些地方用到了这些东西,这样就能大致理解整个项目的逻辑

    也想过画 UML 图之类的,来弄清楚各个类的继承关系

    针对这种阅读代码的问题,应该有专门的解决方法,但是我不知道,各位大佬有什么指教吗?

    没学过软件工程这门课,是不是应该去学学?或者有什么书或者什么书的某章是专门讲这个的?

    10 条回复    2023-07-10 13:50:33 +08:00
    t133
        1
    t133  
       299 天前 via iPhone
    直接打断点进去看 traceback
    foolishcrab
        2
    foolishcrab  
       299 天前 via iPhone   ❤️ 1
    业务项目不需要看那么仔细
    比如你改一个方法,看 reference 就很高效了。
    大部分时候是想改一个字段的取值逻辑啥的,可以用 idea data flow 功能,能快速看到数据流转,不确定的地方找产品确认逻辑就好了
    pengtdyd
        3
    pengtdyd  
       299 天前
    删字诀,只保留核心功能,最后你会发现其实也就那样
    Daybyedream
        4
    Daybyedream  
       298 天前
    gpt 或者 cop
    dayeye2006199
        5
    dayeye2006199  
       298 天前 via Android   ❤️ 2
    Mitchell hashimoto(hashicrop 的创始人,terraform, consul, vault 一堆项目的作者)有一篇文章讲他是怎么理解复杂的项目的

    https://mitchellh.com/writing/contributing-to-complex-projects
    encro
        6
    encro  
       298 天前
    一定是先跑起来,然后找人了解需求,他能做什么,有哪些问题,期望是什么?

    然后看目录结构,入口文件。
    然后找出系统是怎么实现主要需求的,了解原理,再去看细节。
    看的过程做好记录,画好思维导图。
    sadfQED2
        7
    sadfQED2  
       298 天前 via Android
    先把项目跑起来,跑起来以后直接在入口处加断点,然后一步一步跟着看,看一遍就搞明白怎么运行的了。

    怕的就是某些屎山项目,很多功能必须在特定环境下才能调试运行,自己本地根本跑不起来。然后再加上原来的人自创的半吊子设计模式,代码跳来跳去的,神仙来了都看不懂
    chesha1
        8
    chesha1  
       298 天前
    把整个文件丢给 chatgpt 看看,比人类读快多了
    qiuwj
        9
    qiuwj  
       298 天前
    1 、软件工程简单理解是把一个软件项目按工程的角度去井然有序地开发迭代发布。当你成为项目 owner 的时候这门课就显得非常重要,其次还可能涉及到项目管理之类的,学是要肯定的,也得结合工作需求去理解和实践 。先去看些什么网课视频了解下,后面就啃书理解了。
    2 、你接手是俗称的“祖传”项目,要不没文档,要不就是“口口相传”的。那只能如实跟上级反应,给你时间去阅读代码和理解核心模块需求、注意是核心的模块,比如主要的几个 controller 、定时任务和中间件 io 操作(如 MQ 生产消费)等。
    3 、让同事先协助你看代码。然后自己借助工具去阅读,比如 idea 可以看类继承关系、或者 AI 工具等。
    4 、实在是屎山代码,有能力有时间的话就自己来重构,不行就只能润了,不然你都维护不了,上面也不给你时间,那迟早要被叼死的了。
    blankmiss
        10
    blankmiss  
       298 天前
    我一般是从接口断点追踪到数据库
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1240 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:22 · PVG 01:22 · LAX 10:22 · JFK 13:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.