大神们进来交流一下如何快速的理解现有的代码

日知己所无 2014-07-16 01:51:28
加精
现在的系统都很庞大、修改一处代码总要瞻前顾后的考虑一下对整个系统的影响
而对于庞大的系统而言,自己修改过、完全理解的部分如沧海一粟
大家在工作中如何快速的理解别人做的代码、修改代码时如何考虑对整个系统的影响
一起交流一下吧

先抛砖引玉一下:
最原始的方法莫过于grep,但grep也有很多弊端,比如检索用的关键字得凭借经验来决定,有时不够客观;工作量非常大,一层一层网上找,有时根本没个头儿;找呀找呀又找回来了,像在迷宫中散步似的

比较简洁的办法是在现有的系统中进行一下测试,如果有比较完善的log的话,通过一些工具(有可能得自制),生成出sequence图,可以比较直观的看到系统之间各个模块的调用关系;通过对比正常情况下和特殊情况下的log还能迅速找到产生差别的分歧点;这种方法的困难点在于:事前需要项目组统一好log的输出方式,否则铺天盖地的log也让人无从下手
还有一个问题就是:毕竟测试仅能部分展现代码的运行过程,具体的逻辑还得仔细研究代码才行

当某天,领导给你一份几十万行甚至上百万行的代码时,如何厘清这里面的脉络,是一个程序员必须面对的问题

除了灌水的,尽可能给每位发言的人都分配一些回帖奖励分数
大约在这个月底左右结贴,希望大家踊跃发言,不吝赐教
...全文
3764 62 打赏 收藏 转发到动态 举报
写回复
用AI写文章
62 条回复
切换为时间正序
请发表友善的回复…
发表回复
corywind 2014-08-13
  • 打赏
  • 举报
回复
理想的状态是有完整清晰的式样书和流程图,但是实际上,目前没遇到过这么轻松的工作,大部分都是残缺不全,无法对照和干脆就是一堆代码。 基本上就是靠经验从一个模块开始一点点扩展,如果只是单纯改bug,那由于时间的限制,只能通过关键字来解决对应的问题,其他的内容逻辑全部无视。 至于工具,还是一句话,时间是个大问题,如果有时间什么都好说。
日知己所无 2014-08-03
  • 打赏
  • 举报
回复
引用 60 楼 fishing999 的回复:
新手问个小白的问题: 楼主说的grep是什么,怎么用的?
http://baike.baidu.com/view/1057278.htm?fr=aladdin grep最早是Unix下面的一个命令,用来在文本文件中查找匹配的文字 很多Windows下的IDE和文本编辑软件也都带这种功能
fishing999 2014-07-31
  • 打赏
  • 举报
回复
新手问个小白的问题: 楼主说的grep是什么,怎么用的?
zgszlhtao 2014-07-25
  • 打赏
  • 举报
回复
引用 51 楼 caspnet2012 的回复:
1. 首先业务熟悉 2. 整体框架设计 3. 采用了哪些方面的技术,例如多线程,socket协议等等 4. 调试看功能点 5. 最后,想要熟悉整个系统,只能在以后再看。
这个总结得不错
日知己所无 2014-07-25
  • 打赏
  • 举报
回复
引用 58 楼 qgbcs 的回复:
我也有过与楼主类似的困惑。 对于java等面向对象的语言,可以用visual paradigm for uml等工具 把源码逆向生成uml图,可是uml图是静态的。当代码量很大时,不能清楚的反映类,方法之间的关系。 我想可不可以设计一个源码图形化工具,当你点击一个类或一个方法时,该工具便动态的把所有相关元素(类,方法,变量)动态显示出来?
一般Java大型一些的项目,都应该有通过日志(log)生成时序图(sequence图)的工具 我以前用Excel自己做过几个,现在做的这个项目,log不是特别全,有点儿小郁闷
WuBill 2014-07-25
  • 打赏
  • 举报
回复
我一般都是通过文档工具整理一份类关系图,然后按debug跑几次,打印出主要类方法调用顺序,再慢慢理解 多人改过的代码,文档一般都不可靠,经常被过时的文档误导
油头小兄妹 2014-07-25
  • 打赏
  • 举报
回复
看代码之前先看文档,然后对应文档去框架,代码
qgbcs 2014-07-25
  • 打赏
  • 举报
回复
我也有过与楼主类似的困惑。 对于java等面向对象的语言,可以用visual paradigm for uml等工具 把源码逆向生成uml图,可是uml图是静态的。当代码量很大时,不能清楚的反映类,方法之间的关系。 我想可不可以设计一个源码图形化工具,当你点击一个类或一个方法时,该工具便动态的把所有相关元素(类,方法,变量)动态显示出来?
zgszlhtao 2014-07-24
  • 打赏
  • 举报
回复
我是来围观大神的
luoyefeiwu1 2014-07-24
  • 打赏
  • 举报
回复
我现在就遇到这问题了,一个超大的软件,没有文档需求什么的,只有代码,几年前做的东西,要我新来的做维护,完全没有方向感,求赐教,该怎么上手?
Lelouch_Lamperouge 2014-07-24
  • 打赏
  • 举报
回复
我觉得从弄清楚整个程序的大体功能和模块划分,这是从大到小。再一个个功能模块的研究,从小再到大,就差不多了。当然有文档更好,每文档就debug吧,没办法,光看代码很快就晕了。。
caspnet2012 2014-07-24
  • 打赏
  • 举报
回复
1. 首先业务熟悉 2. 整体框架设计 3. 采用了哪些方面的技术,例如多线程,socket协议等等 4. 调试看功能点 5. 最后,想要熟悉整个系统,只能在以后再看。
a137655624 2014-07-23
  • 打赏
  • 举报
回复
项目----->模块----->包-------->类-------->方法
丨落叶 2014-07-23
  • 打赏
  • 举报
回复
1,根据文档和运行的项目了解功能,知道开发的目的。 2,根据类的名字,有时候也能看出点问题 3,个别不懂dug一下
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
熟悉业务,再跟代码走一遍。
1028405943 2014-07-23
  • 打赏
  • 举报
回复
先看流程和页面 还有研究数据库文档、、、、接着熟悉框架、、、最后在整体框架下一小部分一小部分再根据更详细的流程啃掉、、、、
日知己所无 2014-07-23
  • 打赏
  • 举报
回复
多谢大家的回复,每个回复都认真看过了 下周末结贴,有啥好想法请继续回复,加油!
GW786228836 2014-07-22
  • 打赏
  • 举报
回复
Coder-Life 2014-07-22
  • 打赏
  • 举报
回复
一个良好的程序员,耦合性是很低的。从单独的模块入口看起,一般都是能理清楚的,主要这都是业务逻辑比较simple,看框架可能就要结合这接口的声明来看了
加载更多回复(42)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧