你们是怎么快速熟悉新项目的代码的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
pyengwoei
V2EX    程序员

你们是怎么快速熟悉新项目的代码的?

  •  
  •   pyengwoei 2015-12-23 17:19:27 +08:00 7559 次点击
    这是一个创建于 3594 天前的主题,其中的信息可能已经有所发展或是发生改变。
    你们是怎么快速熟悉新项目( 10 万行+)的代码的?
    55 条回复    2015-12-28 09:21:20 +08:00
    kaedea
        1
    kaedea  
       2015-12-23 17:23:27 +08:00
    大改乱改
    pyengwoei
        2
    pyengwoei  
    OP
       2015-12-23 17:23:57 +08:00
    技术主管走人了,现在他的一个项目丢给我,让我来维护,看了几周了 感觉还是没有一点头绪,也没有一个技术文档,只是把业务大概给我说了一下。。。。现在老大要求我 需要熟悉每一行每一个量。。。。。
    pyengwoei
        3
    pyengwoei  
    OP
       2015-12-23 17:24:30 +08:00
    @kaedea 然后拉。。。。/(ㄒoㄒ)/~~
    kaedea
        4
    kaedea  
       2015-12-23 17:28:15 +08:00
    把项目按业务或者功能分成小块,试着重构某些小块,很快就变成你是最熟悉的人了。
    wenmingvs
        5
    wenmingvs  
       2015-12-23 17:31:16 +08:00
    楼上的头像让人浮想联翩
    pyengwoei
        6
    pyengwoei  
    OP
       2015-12-23 17:31:19 +08:00
    @kaedea 确实,我也这样想过
    kaedea
        7
    kaedea  
       2015-12-23 18:01:32 +08:00   1
    一年下来我把公司项目大大小小模块都拆过了,最近更是把整个架构都改了。
    这么做有个坏处就是,每天都会有一堆人跑来问你“那个谁,这里要怎么处理才好……”
    naiyu
        8
    naiyu  
       2015-12-23 18:30:34 +08:00
    我是这样的,先熟悉业务,然后走一下流程,接着走到程序入口,然后一步步来看
    h1029306
        9
    h1029306  
       2015-12-23 18:44:21 +08:00
    先编译,再运行看看,然后加 log ,看 log 日志,哪里不会加哪里
    timothyye
        10
    timothyye  
       2015-12-23 19:03:08 +08:00 via Android
    一边看一边吐槽,然后就看懂了
    timothyye
        11
    timothyye  
       2015-12-23 19:03:54 +08:00 via Android
    @kaedea 够狠
    Felldeadbird
        12
    Felldeadbird  
       2015-12-23 21:24:13 +08:00 via iPhone
    有需求自然慢慢懂的了
    sfree2005
        13
    sfree2005  
       2015-12-23 21:27:15 +08:00
    1. 大概了解项目干什么的,知道最主要的几个 use case 是什么
    2. 修改些小 bug
    3. 增加些小功能
    4. 修改大一些的 bug
    5. 增加大功能

    之后就基本上了解了~~
    Valyrian
        14
    Valyrian  
       2015-12-23 21:31:40 +08:00
    主要靠 git grep
    loading
        15
    loading  
       2015-12-23 21:33:41 +08:00 via Android
    遇到有 bug 的地方就重构哪个地方。
    iMouseWu
        16
    iMouseWu  
       2015-12-23 21:52:31 +08:00
    一个人想一下子搞明白 10W 行代码。。。有点吃力呀。。。
    可以先画流程图理清业务,debug 一些核心模块,接下来就是修 bug 熟悉流程
    decaywood
        17
    decaywood  
       2015-12-23 22:38:58 +08:00   3
    1 、 UML 工具、思维导图先备好。
    2 、把包理一遍,尽量从包名获取足够的信息。
    3 、找到入口函数,分析里面的类,如果有超类,先从超类分析。
    4 、慢慢构建 UML 图和思维导图,不断回顾,总结。
    5 、试着运行代码,断点调试。
    6 、继承核心类,尝试修改逻辑。

    大概差不多了
    Light3
        18
    Light3  
       2015-12-23 23:59:03 +08:00
    不知道是什么语言。边改边吐槽这是真的。适当的记一下因为很多的时候看着看着就忘了。下次再找只是有模糊的印象。再其次没有文档自己慢慢把自己维护过的 总结下写一个。
    KentY
        19
    KentY  
       2015-12-24 05:33:16 +08:00
    如果最熟悉的人走了, 那就很难了.
    如果人家还在, 可以通过做小的 bugfixing and CR 开始.
    hqs123
        20
    hqs123  
       2015-12-24 08:06:53 +08:00
    有哪个需求变动就改哪一块,其它简单看看就行,以不变应万变。
    l1905
        21
    l1905  
       2015-12-24 08:07:54 +08:00 via Android
    写单元测试
    nellace
        22
    nellace  
       2015-12-24 08:29:27 +08:00
    无他 唯改代码时候会去熟悉
    ichanne
        23
    ichanne  
       2015-12-24 09:07:11 +08:00
    我最近正在接收一个 23w 行代码的 iOS 项目。。。赶紧收藏帖子
    mko0okmko0
        24
    mko0okmko0  
       2015-12-24 09:30:00 +08:00
    告诉老板功能太多吃不消.
    问老板那些功能是想留下的.
    然后直接做新的,旧的当参考.
    我只能说,能接手别人没留下技术说明与注解的万行代码,
    这种人我佩服,但绝对不想变这种人
    shakoon
        25
    shakoon  
       2015-12-24 09:36:23 +08:00   1
    如果是标准的 mvc 模式写的代码,那分功能模块一层一层看。
    如果是乱成一团的,那就先自己把它分段,按照你熟悉的方式做“段落整理”,然后再去看具体的代码。
    moe3000
        26
    moe3000  
       2015-12-24 09:38:31 +08:00
    业务 走流程 边走边看代码 代码再联系数据表
    spacewander
        27
    spacewander  
       2015-12-24 09:43:58 +08:00 via Android
    改 bug 的时候渐渐就熟悉了
    zhuangzhuang1988
        28
    zhuangzhuang1988  
       2015-12-24 09:50:21 +08:00
    使用最强 IDE, visual studio 或者 jetbrains 家族.
    然后下个断点, 调试
    thinkmore
        29
    thinkmore  
       2015-12-24 09:54:20 +08:00
    一个模块一个模块来,然后自己整理画类图
    binjoo
        30
    binjoo  
       2015-12-24 09:57:28 +08:00   1
    直接丢给我一个项目让我熟悉是不可能的。。

    除非丢给我 BUG ,让我去改,才能熟悉项目。
    cnbiglee
        31
    cnbiglee  
       2015-12-24 10:03:36 +08:00   1
    我认为只需要熟悉业务流程及代码的架构。然后需要修改的时候就可以大概知道上哪改就行了。不可能去熟悉每行代码的,没必要。
    songco
        32
    songco  
       2015-12-24 11:36:00 +08:00   1
    1. 按 usecase 的流程读代码, 花时序图 /流程图之类的(一定要有记录)
    2. 改 bug

    其实 2 效率比较高. 没有 bug 你可以考虑模拟在原有的业务上增加点功能.
    wizardoz
        33
    wizardoz  
       2015-12-24 12:00:12 +08:00   1
    熟悉每一行……这种要求也是醉了。
    这种略大的程序,还是搞清楚整体结构就行了,然后哪里出问题看哪里,或者需要调整哪里看哪里。毕竟生命是有限的。
    我不是说 10 万行代码看不完,只是过多的精力投入到细节上完全没必要,毕竟细节太多了。
    caixiexin
        34
    caixiexin  
       2015-12-24 12:06:33 +08:00 via Android
    帮忙修一个月 bug 。。。
    xiaoshenke
        35
    xiaoshenke  
       2015-12-24 13:04:32 +08:00   1
    从项目结构猜,从类名猜用途,运行打 log 。证实猜想是否正确。
    找关键结点 比如入口函数 跳转函数等。
    sumuu
        36
    sumuu  
       2015-12-24 13:32:37 +08:00   1
    分享下我熟悉一个上 10W 行(伪)代码的当时做法.
    1. 熟悉业务,分析业务,把关键业务入口找出来,然后跟踪代码执行流程.
    2. 整理外部依赖,把数据库连接,缓存系统,第三方请求等等记录下来.
    3. 非到必要时候,别瞎改代码,否则到处冒烟,不骗你.
    huijiewei
        37
    huijiewei  
       2015-12-24 16:59:54 +08:00   1
    1 、整理全局流程图,标注好注意点,打印出来
    2 、整理模块划分,打印出来
    3 、根据模块整理单独接口,打印出来
    4 、整理公共服务模块,把公共服务模块都独立出来

    做完这些对系统也了解的差不多了。
    oska874
        38
    oska874  
       2015-12-24 17:09:37 +08:00
    多加班。
    sun2920989
        39
    sun2920989  
       2015-12-24 17:11:09 +08:00
    边看边在心里骂,顺便做好记录和结构
    词穷的时候基本上就理解了
    ragnaroks
        40
    ragnaroks  
       2015-12-24 19:34:03 +08:00
    重构
    pyengwoei
        41
    pyengwoei  
    OP
       2015-12-25 10:58:57 +08:00
    @kaedea 这是好处吧 哈哈
    pyengwoei
        42
    pyengwoei  
    OP
       2015-12-25 10:59:20 +08:00
    @timothyye 哈哈
    pyengwoei
        43
    pyengwoei  
    OP
       2015-12-25 10:59:31 +08:00
    @timothyye 确实啊
    pyengwoei
        44
    pyengwoei  
    OP
       2015-12-25 11:00:03 +08:00
    @sfree2005 Mark
    pyengwoei
        45
    pyengwoei  
    OP
       2015-12-25 11:00:48 +08:00
    @iMouseWu 是啊 要按功能一个模块一个模块来
    pyengwoei
        46
    pyengwoei  
    OP
       2015-12-25 11:08:12 +08:00
    @KentY 已经走了,什么都没,只有一堆代码
    pyengwoei
        47
    pyengwoei  
    OP
       2015-12-25 11:14:30 +08:00
    @moe3000 是的,数据库也非常庞大,还有存储过程 还有 WINDOWS 服务 缓存机制 WCF 等
    pyengwoei
        48
    pyengwoei  
    OP
       2015-12-25 11:15:09 +08:00
    @ragnaroks 你说的重构 是试着重构吧
    dalang
        49
    dalang  
       2015-12-25 12:04:03 +08:00
    从 api 层入手,了解重要的几个 api 的 workflow
    pyengwoei
        50
    pyengwoei  
    OP
       2015-12-25 14:16:27 +08:00
    @mko0okmko0 为了 RMB
    kaka8wp
        51
    kaka8wp  
       2015-12-25 14:29:59 +08:00
    先找找资料,改改小的模块,看看流程
    pyengwoei
        52
    pyengwoei  
    OP
       2015-12-25 14:36:35 +08:00
    我准备这样做了,把功能都拆分出来,做成一个一个的小程序,一个程序实现一个功能,不知道这样怎么样
    cxbig
        53
    cxbig  
       2015-12-25 16:20:20 +08:00
    按功能拆分成小块,哪块要改就先搞清楚那一块。
    能落实到文档的就尽快落实,这样后面的人也容易上手。
    项目上了规模都不是轻而易举就能全通的。
    WendellSun
        54
    WendellSun  
       2015-12-27 01:59:11 +08:00
    改 bug 。
    pyengwoei
        55
    pyengwoei  
    OP
       2015-12-28 09:21:20 +08:00
    @cxbig 好的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2507 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 06:59 PVG 14:59 LAX 23:59 JFK 02:59
    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