如何阅读别人的代码
如何阅读别人的代码
如何阅读别人的代码一、收集所有可能收集的材料
阅读代码要做的第一件事情是收集所有和项目相关的资料。比如你要做一个项目的售后服务,那么你首先要搞明白项目做什么用的,那么调研文档、概要设计文档、详细设计文档、测试文档、使用手册都是你要最先搞到手的。如果你是为了学习那么尽量收集和你的学习有关的资料,比如你想学习linux的文件系统的代码,那最好要找到linux的使用手册、以及文件系统设计的方法、数据结构的说明
如果有文档,请先阅读设计文档。程序=代码+文档。这么说,不是没有道理的,设计文档是前人设计思路和折衷的提炼,你能快速了解为什么要这么设计,当时还考虑了其他那些设计,其他设计方案为什么被否决了。可能的话,和模块设计者聊聊,会更加事半功倍。
二、看有没有单元测试
有单元测试的,那么就可以执行单元测试。看看结果,看看测了哪些东西。
三、留备份,构造可运行的环境
代码拿到手之后的第一件事情是先做备份,最好是刻在一个光盘上,在代码阅读的时候一点不动代码是很困难的一件事情,特别是你要做一些修改性或增强性维护的时候。而一旦做修改就可能发生问题,到时候要恢复是经常发生的事情,如果你不能很好的使用版本控制软件那么先留一个备份是一个最起码的要求了。
在做完备份之后最好给自己构造一个可运行的环境,当然可能会很麻烦,但可运行代码和不可运行的代码阅读起来难度会差很多的。所以多用一点时间搭建一个环境是很值得的,而且我们阅读代码主要是为了修改其中的问题或做移植操作。不能运行的代码除了可以学到一些技术以外,用处有限。
四、阅读模块的接口,对外提供了什么能力
1、往往从入参和出参,再加上函数名,就猜出了一大半。
2、再往细读,阅读的模块的初始化,了解用到哪些类,这些类提供了什么能力。为什么这么设计。
3、看模块函数的调用关系。好的工具这时候用场就太大了,通过设断点,看调用堆栈,就一目了然。
五、写注解
写注解是在阅读代码中最重要的一个步骤,在我们阅读的源代码一般来说是我们不熟悉的系统
阅读别人的代码一般会有几个问题
1、搞明白别人的编程思想不 是一件很容易的事情,即使你知道这段程序的思路的时候也是一样。
2、阅读代码的时候代码量一般会比较大,如果不及时写注解往往会造成读明白了后边忘了前边的 现象。
3、阅读代码的时候难免会出现理解错误,如果没有及时的写注解很难及时的发现这些错误。4不写注解有时候你发生你很难确定一个函数你时候阅读过,它的功能是什么,经常会发生重复阅读、理解的现象。
一些写注解的基本方法
1、猜测的去写,刚开始阅读一个代码的时候,你很难一下子就确定所有的函数的功能,不妨采用采用猜测的方法去写注解,根据函数的名字、位置写一个大致的注解,当然一般会有错误,但你的注解实际是不但调整的,直到最后你理解了全部代码
2、按功能去写,别把注解写成语法说明书。
3、在写注解的使用另外要注意的一个问题是分清楚系统自动生成的代码和用户自己开发的代码,一般来说没有必要写系统自动生成的代码。
4、在主要代码段要写较为详细的注解。有一些函数或类在程 序中起关键的作用,那么要写比较详细的注解。这样对你理解代码有很大的帮助。
5、对你理解起来比较困难的地方要写详细的注解,在这些地方往往会有一些编程的技巧。不理解这些编程技巧对你以后的理解或移植会有问题。
6、写中文注解。如果你的英文足够的好,不用看这条了,但很多的人英文实在不怎么样,那就写中文注解吧,我们写注解是为了加快自己的理解速度,中文在大多数的时候比英文更适应中国人,与其写一些谁也看不懂的英文注解还不如不写。
六、运行并修改代码
如果你的代码是可运行的,那么先让它运行起来,用单步跟踪的方法来阅读代码,会提高你的代码速度。代码通过看中间变量了解代码的含义,而且对 以后的修改会提供很大的帮助
用自己的代码代替原有代码,看效果,但在之前要保留源代码
七、重复阅读
一次就可以将所有的代码都阅读明白的人是没有的。至少我还没有遇到过。反复的去阅读同一段代码有助于得代码的理解。一般来说,在第一次阅读代码的时候 你可以跳过很多一时不明白的代码段,只写一些简单的注解,在以后的重复阅读过程用,你对代码的理解会比上一次理解的更深刻,这样你可以修改那些注解错误的 地方和上一次没有理解的对方。一般来说,对代码阅读3,4次基本可以理解代码的含义和作用。
热门推荐
- dedecms中的有些功能如何修改(解析dedecms空间迁移步骤详解)
- python创建hbase命名空间(python使用phoenixdb操作hbase的方法示例)
- js页面跳转的几种代码
- php编写程序使用方法(php xhprof使用实例详解)
- vue router用法(如何在Vue 3中扩展Vue Router链接详解)
- tomcat与eclipse配置运行(Tomcat配置及如何在Eclipse中启动)
- 阿里云的自带mysql怎么开启(阿里云云服务器mysql密码找回的方法)
- php运用redis实现抢购实例(PHP+redis实现微博的拉模型案例详解)
- SQL Server 各个版本支持的功能
- html怎么设置地图(HTML5获取当前地理位置并在百度地图上展示的实例)