如何阅读源码(1)——整理

标签: 源码阅读
20人阅读 评论(0) 收藏 举报
分类:

阅读别人的代码作为开发人员是一件经常要做的事情。一个是学习新的编程语言的时候通过阅读别人的代码是一个最好的学习方法,另外是积累编程经验。如果你有机会阅读一些操作系统的代码会帮助你理解一些基本的原理。还有就是在你作为一个质量保证人员或一个小领导的时候如果你要做白盒测试的时候没有阅读代码的能力是不能完成相应的任务。最后一个就是如果你中途接手一个项目的时候或给一个项目做售后服务的时候是要有阅读代码的能力的。

  知识准备

  了解基础知识,不要上来就阅读代码,打好基础可以做到事半功倍的效果

  留备份,构造可运行的环境

  代码拿到手之后的第一件事情是先做备份,最好是刻在一个光盘上,在代码阅读的时候一点不动代码是很困难的一件事情,特别是你要做一些修改性或增强性维护的时候。而一旦做修改就可能发生问题,到时候要恢复是经常发生的事情,如果你不能很好的使用版本控制软件那么先留一个备份是一个最起码的要求了。

  在做完备份之后最好给自己构造一个可运行的环境,当然可能会很麻烦,但可运行代码和不可运行的代码阅读起来难度会差很多的。所以多用一点时间搭建一个环境是很值得的,而且我们阅读代码主要是为了修改其中的问题或做移植操作。不能运行的代码除了可以学到一些技术以外,用处有限。

  找开始的地方

  做什么事情都要知道从那里开始,读程序也不例外。在c语言里,首先要找到main()函数,然后逐层去阅读,其他的程序无论是vb、delphi都要首先找到程序头,否则你是很难分析清楚程序的层次关系。

  分层次阅读

  在阅读代码的时候不要一头就扎下去,这样往往容易只见树木不见森林,阅读代码比较好的方法有一点象二叉树的广度优先的遍历。在程序主体一般会比较简 单,调用的函数会比较少,根据函数的名字以及层次关系一般可以确定每一个函数的大致用途,将你的理解作为注解写在这些函数的边上。当然很难一次就将全部注 解都写正确,有时候甚至可能是你猜测的结果,不过没有关系这些注解在阅读过程是不断修正的,直到你全部理解了代码为止。一般来说采用逐层阅读的方法可以是 你系统的理解保持在一个正确的方向上。避免一下子扎入到细节的问题上。在分层次阅读的时候要注意一个问题,就是将系统的函数和开发人员编写代码区分开。在 c, c++,java ,delphi中都有自己的系统函数,不要去阅读这些系统函数,除非你要学习他们的编程方法,否则只会浪费你的时间。将系统函数表示出来,注明它们的作用 即可,区分系统函数和自编函数有几个方法,一个是系统函数的编程风格一般会比较好,而自编的函数的编程风格一般比较会比较差。从变量名、行之间的缩进、注 解等方面一般可以分辨出来,另外一个是象ms c6++会在你编程的时候给你生成一大堆文件出来,其中有很多文件是你用不到了,可以根据文件名来区分一下时候是系统函数,最后如果你实在确定不了,那就 用开发系统的帮助系统去查一下函数名,对一下参数等来确定即可。

  写注解

    写注解是在阅读代码中最重要的一个步骤,在我们阅读的源代码一般来说是我们不熟悉的系统,阅读别人的代码一般会有几个问题,1搞明白别人的编程思想不 是一件很容易的事情,即使你知道这段程序的思路的时候也是一样。2阅读代码的时候代码量一般会比较大,如果不及时写注解往往会造成读明白了后边忘了前边的 现象。3阅读代码的时候难免会出现理解错误,如果没有及时的写注解很难及时的发现这些错误。4不写注解有时候你发生你很难确定一个函数你时候阅读过,它的功能是什么,经常会发生重复阅读、理解的现象。

  好了,说一些写注解的基本方法:

1.猜测的去写,刚开始阅读一个代码的时候,你很难一下子就确定所有的函数的功能,不妨采用采用猜测的方法去写注解,根 据函数的名字、位置写一个大致的注解,当然一般会有错误,但你的注解实际是不但调整的,直到最后你理解了全部代码。

2.按功能去写,别把注解写成语法说明 书,千万别看到fopen就写打开文件,看到fread就写读数据,这样的注解一点用处都没有,而应该写在此处开发参数配置文件(****。dat)读出 系统初始化参数。。。。。,这样才是有用的注解。

3.在写注解的使用另外要注意的一个问题是分清楚系统自动生成的代码和用户自 己开发的代码,一般来说没有必要写系统自动生成的代码。象delphi的代码,我们往往要自己编写一些自己的代码段,还要对一些系统自动生成的代码段进行 修改,这些代码在阅读过程是要写注解的,但有一些没有修改过的自动生成的代码就没有必要写注解了。

4.在主要代码段要写较为详细的注解。有一些函数或类在程序中起关键的作用,那么要写比较详细的注解。这样对你理解代码有很大的帮助。

5.对你理解起来比较困难的地方要写详细的注解,在这些地方往往会有一些编程的技巧。不理解这些编程技巧对你以后的理解或移植会有问题。

6.写中文注解。如果你的英文足够的好,不用看这条了,但很多的人英文实在不怎么样,那就写中文注解吧,我们写注解是为了加快自己的理解速度。中文在大多数的时候比英文更适应中国人。与其写一些谁也看不懂的英文注解还不如不写。

  重复阅读

  一次就可以将所有的代码都阅读明白的人是没有的。至少我还没有遇到过。反复的去阅读同一段代码有助于得代码的理解。一般来说,在第一次阅读代码的时候 你可以跳过很多一时不明白的代码段,只写一些简单的注解,在以后的重复阅读过程用,你对代码的理解会比上一次理解的更深刻,这样你可以修改那些注解错误的 地方和上一次没有理解的对方。一般来说,对代码阅读3,4次基本可以理解代码的含义和作用。

  运行并修改代码

  如果你的代码是可运行的,那么先让它运行起来,用单步跟踪的方法来阅读代码,会提高你的代码速度。代码通过看中间变量了解代码的含义,而且对 以后的修改会提供很大的帮助

  用自己的代码代替原有代码,看效果,但在之前要保留源代码

  600行的一个函数,阅读起来很困难,编程的人不是一个好的习惯。在阅读这个代码的时候将代码进行修改,变成了14个函数。每一个大约是40-50 行左右.

———————————————源码下载网站—————————————————————

跟你说几个我常用的源码下载网站

csdn(中文IT社区)它是集新闻、论坛、群组、Blog、文档、下载、读书、Tag、网摘、搜索、.NET、Java、游戏、视频、人才、外包、第二书店、《程序员》等多种项目于一体的大型综合性IT门户网站,源码只是其中的一项,但是很实用 里边有很多大牛。

DevStore(源码下载)主要是开发者服务平台,汇集国内外众多第三方开发者服务,为开发者提供从设计开发到运营推广一站式的解决方案,源码和服务评测也是亮点,很专业,很实用,这里边聚集的都是开发者和PM,可以看看。

站长之家(网站源码)针对个人站长,企业网管提供的资讯和源码,包含的语言和类型也比较多。

查看评论

CAS源码阅读

开源单点登录系统源码阅读 第一部分  Spring webflow 1、通过flow-register节点定义的id和xml文件的映射关系来寻找url和webflow的映射关系。一个webflow的x...
  • rikey111
  • rikey111
  • 2016年07月04日 01:23
  • 583

Gluster源代码阅读1--RPC与NFS

修改/usr/lib/systemd/system/glusterd.service 里的log级别到TRACE Environment="LOG_LEVEL=TRACE" 可以查看更多log   当...
  • alajl
  • alajl
  • 2016年06月02日 15:06
  • 953

如何阅读项目源代码

如何阅读项目源代码(github)Github工程项目过大?难以阅读怎么办,本文就根据自己阅读代码的经验,总结一下如何阅读源代码的经验。借鉴博客看他人的源码分析是最简单也是最直接的项目经验获取方式,一...
  • yxy11256974
  • yxy11256974
  • 2016年12月04日 00:30
  • 3820

阅读jdk源码

1.首先介绍下如何导入jdk源码,需要下载jdk(不是jre),jdk包中会有一个src.zip,这个就是源码包 2.用idea新建一个普通java项目,把解压后的src所有文件拷到对应id...
  • m0_37499059
  • m0_37499059
  • 2018年02月06日 16:16
  • 259

牛人教你如何阅读源码

1、腾讯IMWEB负责人说: 首先,搞清楚自己要读懂他们的原因和动机。 其次,可以先看下这些优秀框架或者库的设计文档和架构图,这样会让你宏观上对一些概念有些认识。  然后,从你最感兴趣的一个...
  • Maxbyzhou
  • Maxbyzhou
  • 2016年05月16日 13:52
  • 11487

怎样高效阅读源码?

写代码是从模仿开始的,提高也是从观摩别人的优秀设计和代码开始的。所以阅读源码至关重要,接下来咱从下列方面聊聊阅读源码的事儿。 目的工具知识准备运行与开发环境笔记实用技巧心理调试(散步在各个环节)...
  • sea1105
  • sea1105
  • 2016年04月30日 14:46
  • 655

代码阅读整理之 层次 uml 逆向工程

eclipse : Eclipse逆向工程插件ModelSpoon,由代码轻松生成UML图 https://stackoverflow.com/questions/5790508/uml-t...
  • fei33423
  • fei33423
  • 2017年05月23日 23:50
  • 326

JDK源码阅读——Collection

JDK源码阅读——Collection
  • xmkid
  • xmkid
  • 2016年03月19日 22:47
  • 1147

如何阅读 Redis 源码?

在这篇文章中, 我将向大家介绍一种我认为比较合理的 Redis 源码阅读顺序, 希望可以给对 Redis 有兴趣并打算阅读 Redis 源码的朋友带来一点帮助。第 1 步:阅读数据结构实现 刚开始阅...
  • bobkentblog
  • bobkentblog
  • 2015年06月08日 19:38
  • 743

mybatis源码阅读(一)

一直以来都想阅读一些开源框架的源码来提升自己的编程水平,但是诸如spring、hibernate比较流行但又比较重量级的框架,源码十分不好阅读(功力不够),恰好最近的项目在使用mybatis,看了看源...
  • mhxy199288
  • mhxy199288
  • 2015年01月11日 15:28
  • 1470
    个人资料
    等级:
    访问量: 183
    积分: 35
    排名: 193万+
    文章存档