如何高效阅读陌生项目的代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
movq
V2EX    程序员

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

  •  
  •   movq 2023-07-09 23:20:14 +08:00 2851 次点击
    这是一个创建于 903 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    https://mitchellh.com/writing/contributing-to-complex-projects
    encro
        6
    encro  
       2023-07-10 11:45:12 +08:00
    一定是先跑起来,然后找人了解需求,他能做什么,有哪些问题,期望是什么?

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

    怕的就是某些屎山项目,很多功能必须在特定环境下才能调试运行,自己本地根本跑不起来。然后再加上原来的人自创的半吊子设计模式,代码跳来跳去的,神仙来了都看不懂
    FlashEcho
        8
    FlashEcho  
       2023-07-10 13:05:57 +08:00
    把整个文件丢给 chatgpt 看看,比人类读快多了
    qiuwj
        9
    qiuwj  
       2023-07-10 13:37:01 +08:00
    1 、软件工程简单理解是把一个软件项目按工程的角度去井然有序地开发迭代发布。当你成为项目 owner 的时候这门课就显得非常重要,其次还可能涉及到项目管理之类的,学是要肯定的,也得结合工作需求去理解和实践 。先去看些什么网课视频了解下,后面就啃书理解了。
    2 、你接手是俗称的“祖传”项目,要不没文档,要不就是“口口相传”的。那只能如实跟上级反应,给你时间去阅读代码和理解核心模块需求、注意是核心的模块,比如主要的几个 controller 、定时任务和中间件 io 操作(如 MQ 生产消费)等。
    3 、让同事先协助你看代码。然后自己借助工具去阅读,比如 idea 可以看类继承关系、或者 AI 工具等。
    4 、实在是屎山代码,有能力有时间的话就自己来重构,不行就只能润了,不然你都维护不了,上面也不给你时间,那迟早要被叼死的了。
    blankmiss
        10
    blankmiss  
       2023-07-10 13:50:33 +08:00
    我一般是从接口断点追踪到数据库
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5585 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 06:40 PVG 14:40 LAX 22:40 JFK 01:40
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86