V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jokechen
V2EX  ›  职场话题

你们都是怎么阅读同事遗留的屎山代码的?

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

    这周进了一个新项目,接受了以前同事遗留的代码。我所接手的代码都是一些简单的业务操作,比如账单的生成、合同的签订等。这些代码包含但不限于以下特征,让我读起来非常挠头:

    • 一个方法 1000 多行
    • if else 套了不下 7 层
    • 前辈致力于在一个方法里写下所有业务逻辑
    • 有部分错误注释

    。。。

    是你的话该如何读这些代码呢?

    我曾经试着让 chatgpt 帮我阅读梳理,可能我的 prompt 写的有问题,他也很难帮我将整体逻辑梳理清楚。

    请问您有什么好的建议或者 prompt ?

    第 1 条附言  ·  193 天前
    屎山代码不可避免,接到手上了也是没有办法的。
    本帖还是希望各位朋友提供一些可以快速梳理代码整体逻辑的方法。
    最好有借助 ai 的方法。
    39 条回复    2023-11-21 22:06:40 +08:00
    swuzjb
        1
    swuzjb  
       193 天前
    能不读就不读。
    chuck1in
        2
    chuck1in  
       193 天前   ❤️ 3
    听起来像是一份年薪百万的工作
    enchilada2020
        3
    enchilada2020  
       193 天前 via Android
    我目前的感受就是没办法 六字真言贴显示器旁边 然后硬着头皮一点点 debug 一点点看 尤其是祖传 Java 屎山表达能力差得一比 写了十来行只干了一件事 大部分 if 都在判断空指针 但凡用一下 optional 和 stream 也不至于那么恶心的 就是没有 就硬 for each+if
    wwlzz
        4
    wwlzz  
       193 天前
    不用全部理解,按需求/bug 来,加断点调试,添加日志,测试用例等
    jokechen
        5
    jokechen  
    OP
       193 天前   ❤️ 2
    还有一个问题,有些接口的入参能有 100 多个
    enchilada2020
        6
    enchilada2020  
       193 天前 via Android
    @jokechen 真猛 突然觉得我手头的屎山靓丽了许多
    zzNucker
        7
    zzNucker  
       193 天前
    100 多个入参也太离谱了
    Kirscheis
        8
    Kirscheis  
       193 天前
    我这有一堆前辈留下的无文档 LabView 程序,目前谁都看不懂,所以我选择整个封装当盲盒用,新需求另建山头。。。
    zjp
        9
    zjp  
       193 天前
    看正文感觉还好啊,硬看就是了
    看到#5 ,对不起,超出能力范围了
    sadfQED2
        10
    sadfQED2  
       193 天前 via Android
    断点调试,一行一行的跟一遍就懂了。
    darkengine
        11
    darkengine  
       193 天前
    不要读懂他, 要改的时候各种绕路, 例如在上边包一层, 这样就能得到一个更大的屎山了.
    NothingExist
        12
    NothingExist  
       193 天前
    删库重写:)
    jonty
        13
    jonty  
       193 天前
    @zzNucker #7 这不是屎山,这已经是特色了
    enchilada2020
        14
    enchilada2020  
       193 天前 via Android
    @sadfQED2 调用栈太深的断点调试其实也不理想 复杂点的只过一遍肯定不够 正手来一个 step over 可能一下子跳了一大段逻辑 反手 step into 个几次回来都找不到北
    dddd1919
        15
    dddd1919  
       193 天前
    @jokechen 人类早期训练 AIGC ?
    HUZHUANGZHUANG
        16
    HUZHUANGZHUANG  
       193 天前   ❤️ 1
    有时候只能本人读懂的原因是存在一些不再需求文档上的代码
    v2eb
        17
    v2eb  
       193 天前
    先理解业务吧, 有流程图啥的就好了。
    x86
        18
    x86  
       193 天前
    这种写法叫人工混淆加密,一般公司顶梁柱才写的出,优点是别人难以看懂接盘顶替自己...
    enchilada2020
        19
    enchilada2020  
       193 天前 via Android
    @x86 有没有另外的可能 比如他自己都维护不下去 只好先甩手跑路了…
    zhangjuanzi
        20
    zhangjuanzi  
       192 天前
    不会仔细读,大概了解一下,碰到需求再定位到要改的地方改了就完事了,也不会想着去优化。而且我也挺喜欢这种代码的,在这种代码上做需求一般会给的时间多点,自己快速做完剩下的时间就做别的。
    8355
        21
    8355  
       192 天前   ❤️ 1
    用常规运行结果反推,不要读全部,以最小的改动代价完成本次需求,能不动就不动。
    ytmsdy
        22
    ytmsdy  
       192 天前
    不看!反正看了也看不懂,就算看懂了也不敢去改。
    把业务了解清楚就好了,如果出现 bug ,直接 debug 进入调试模式。针对 bug 的场景用 if 特殊处理,其他部分不动!
    处理屎山项目的原则就是,能不动就不动,就算要动也只加,不删除。
    ma836323493
        23
    ma836323493  
       192 天前
    抽丝剥茧慢慢来, 前人为了省事打了各种补丁, 我视情况而定, 要有工匠精神
    COOOOOOde
        24
    COOOOOOde  
       192 天前
    不读, 当成黑盒。
    nenseso
        25
    nenseso  
       192 天前
    我觉得要有能力改屎山代码,首先要对业务非常熟悉。
    xxiaowangwang
        26
    xxiaowangwang  
       192 天前
    只要钱到位,屎壳郎就是我。
    haitaoli
        27
    haitaoli  
       192 天前 via iPhone
    我也一样 虽然没你手里这么屎 不过我太菜了 也是几个同事断断续续的写了好几年 一行注释都没有 而且之前写这个的人已经离职的差不多了 一点都不想看 摆烂了
    ZGame
        28
    ZGame  
       192 天前
    厌恶屎山,接受屎山,理解屎山,成为屎山
    haitaoli
        29
    haitaoli  
       192 天前 via iPhone
    @haitaoli 而且交给我活的时候 也没有需求 之前这一块是和另一个功能耦合在一块的 现在让我从里面解出来 差不多就是重写一遍吧 现在直接卡在读代码这一步 读不懂代码 就不知道需求 不知道需求 就没法写
    zw1one
        30
    zw1one  
       192 天前
    告诉领导和产品,这玩意儿看不了,一改全是坑,挖坑的人全跑了,重写吧。
    woshihgs
        31
    woshihgs  
       192 天前
    @ZGame #28 超越屎山
    bfdh
        32
    bfdh  
       192 天前
    目前没有这个烦恼,因为我就是那个写屎山代码,然后交给同事的人。

    回到楼主问题,我的做法一般是先问清楚业务,从业务反推代码。
    jokechen
        33
    jokechen  
    OP
       192 天前
    @bfdh 比较麻烦的就是懂业务的人也全跑了,也就是说我们这边好多产品经理都是新接手的。昨天产品经理有一个需求不太明白,找到我说“兄弟,你从代码里帮我看下,这部分需求实现过没?”
    ---
    今天我已经有些佛性了,因为开始慢慢的有测试找我提一些问题了。
    这样我能跟着测试的逻辑一起熟悉代码。。。。
    beisilu
        34
    beisilu  
       192 天前
    理论上跑起来加断点慢慢来是可以熟悉的。
    但是实际情况是跑都跑不起来
    iOCZ
        35
    iOCZ  
       192 天前
    @jokechen 提交表单是字段比较多的一种可能,但是要填 100 多个字段也是没有用户体验了。假如说要上报设备信息,字段很多,那完全可以一个 JSON 字段搞定。
    sankooc
        36
    sankooc  
       192 天前
    我以前接手过一个 callback 地狱的项目 那一个酸爽
    imqiyue
        37
    imqiyue  
       192 天前
    边骂边看…
    abelmakihara
        38
    abelmakihara  
       190 天前
    之前接过的无非就是东拆西拆让它的可读性变强 可以复用
    动里面逻辑那是万万不敢的 最多就是继续加 ifelse
    unregister
        39
    unregister  
       158 天前
    我的工资就是我的精神损失费
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   887 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 20:29 · PVG 04:29 · LAX 13:29 · JFK 16:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.