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

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

  •  1
     
  •   jokechen · 2023-10-17 20:16:16 +08:00 · 2931 次点击
    这是一个创建于 437 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    。。。

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

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

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

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

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