《别人的原代码程序员怎样阅读》由会员分享,可在线阅读,更多相关《别人的原代码程序员怎样阅读(22页珍藏版)》请在金锄头文库上搜索。
1、别人的原代码程序员怎样阅读别人的原代码程序员怎样阅读 源码就是指编写的最原始程序的代码。运行的软件是要经过编写的,程序员编写 程序的过程中需要他们的“语言”。音乐家用五线谱,建筑师用图纸,那程序员的 工作的语言就是“源码”了。人们平时使用软件时就是程序把“源码”翻译成我们可 直观的形式表现出来供我们使用的。任何一个网站页面,换成源码就是一堆按一 定格式书写的文字和符号,但我们的浏览器帮我们翻译成眼前的模样了。 计算机里面运行的所有东西都是用程序编出来的(包括操作系统,如 Windows,还有 Word 等,网络游戏也一样),而编写程序要用到计算机语言,用计算 机语言直接编出来的程序就叫源码,比
2、如用 VisualBasic 编写的源码文件一般 为.bas 文件,而用 C+编写的一般为.cpp 文件,源代码不能直接在 Windows 下 运行, 必须编译后才能运行。源码经过编译处理后就可以直接在操作系统下运行 了。很多的站长都喜欢使用建网站的程序源码,因为可以很方便的修改,对于任 何一个 seo 人员来说,都是非常好的一个切入点。从字面意义上来讲,源文件是 指一个文件,指源代码的集合.源代码则是一组具有特定意义的可以实现特定功能 的字符(程序开发代码),源代码”在大多数时候等于“源文件”。比如在这个网页上 右键鼠标,选择查看源文件.出来一个记事本,里面的内容就是此网页的源代码.“这 句
3、话就体现了他们的关系,此处的源文件是指网页的源文件,而源代码就是源文件 的内容,所以又可以称做网页的源代码.,源代码是指原始代码,可以是任何语言 代码。汇编码是指源代码编译后的代码,通常为二进制文件,比如 DLL、 EXE、.NET 中间代码、JAVA 中间代码等。高级语言通常指 C/C+、BASIC、 C#、JAVA、PASCAL、易语言等等。汇编语言就是 ASM,只有这个,比这个 更低级的就是机器语言了。 网站源码作为软件的特殊部分,可能被包含在一个或多个文件中。一个程 序不必用同一种格式的源代码书写。例如,一个程序如果有 C 语言库的支持, 那么就可以用 C 语言;而另一部分为了达到比较
4、高的运行效率,则可以用汇编 语言编写。较为复杂的软件,一般需要数十种甚至上百种的源代码的参与。为了 降低种复杂度,必须引入一种可以描述各个源代码之间联系,并且如何正确编译 的系统。在这样的背景下,修订控制系统(RCS)诞生了,并成为研发者对代 码修订的必备工具之一。还有另外一种组合:源代码的编写和编译分别在不同的 平台上实现,专业术语叫做软件移植。 阅读别人的代码作为开发人员是一件经常要做的事情。 一个是学习新的编程语言的时候通过阅读别人的代码是一个最好的学习方法,另外是积累编程经验。 如果你有机会阅读一些操作系统的代码会帮助你理解一些基本的原理。还有就是在你作为一个质量保证人员或一个小领导的
5、时候如果你要做白盒测试的时候没有阅读代码的能力是不能完成相应的任务。 最后一个就是如果你中途接手一个项目的时候或给一个项目做售后服务的时候是要有阅读代码的能力的。 收集所有可能收集的材料 阅读代码要做的第一件事情是收集所有和项目相关的资料。 比如你要做一个项目的售后服务,那么你首先要搞明白项目做什么用的,那么调研文档、概要设计文档、详细设计文档、测试文档、使用手册都是你要最先搞到手的。如果你是为了学习那么尽量收集和你的学习有关的资料,比如你想学习 linux 的文件系统的代码,那最好要找到 linux 的使用手册、以及文件系统设计的方法、数据结构的说明。(这些资料在书店里都可以找到)。 材料的
6、种类分为几种类型 1.基础资料。 比如你阅读 http:/ 源代码你要有 turbo c2 的函数手册,使用手册等专业书籍,msc 6.0 或者 java 的话不但要有函数手册,还要有类库函数手册。这些资料都是你的基础资料。另外你要有一些关于 uml 的资料可以作为查询手册也是一个不错的选择 2.和程序相关的专业资料。 每一个程序都是和相关行业相关的。 比如我阅读过一个关于气象分析方面的代码, 因为里边用到了一个复杂的数据转换公式,所以不得不把自己的大学时候课本 找出来来复习一下高等数学的内容。如果你想阅读 linux 的文件管理的代码,那么找一本讲解 linux 文件系统的书对你的帮助会很大
7、。 3.相关项目的文档资料 这一部分的资料分为两种,一个相关行业的资料,比如你要阅读一个税务系统的代码那么有一些财务/税务系统的专业资料和国家的相关的法律、法规的资料是 必不可少的。此外就是关于这个项目的需求分析报告、概要设计报告、详细设计报告,使用手册、测试报告等,尽量多收集对你以后的代码阅读是很重要的 知识准备 了解基础知识,不要上来就阅读代码,打好基础可以做到事半功倍的效果 留备份,构造可运行的环境 代码拿到手之后的第一件事情是先做备份,最好是刻在一个光盘上,在代码阅读的时候一点不动代码是很困难的一件事情, 特别是你要做一些修改性或增强性维护的时候。 而一旦做修改就可能发生问题, 到时候
8、要恢复是经常发生的事情,如果你不能很好的使用版本控制软件那么先留一个备份是一个最起码的要求了。 在做完备份之后最好给自己构造一个可运行的环境,当然可能会很麻烦,但可运行代码和不可运行的代码阅读起来难度会差很多的。 所以多用一点时间搭建一个环境是很值得的, 而且我们阅读代码主要是为了修改其中的问题或做移植操作。不能运行的代码除了可以学到一些技术以外,用处有限。 找开始的地方 做什么事情都要知道从那里开始,读程序也不例外。在 c 语言里,首先要找到 main()函数,然后逐层去阅读,其他的程序无论是 vb、delphi 都要首先找到程序头,否则你是很难分析清楚程序的层次关系。 分层次阅读 在阅读代
9、码的时候不要一头就扎下去,这样往往容易只见树木不见森林,阅读代码比较好的方法有一点象二叉树的广度优先的遍历。 在程序主体一般会比较简 单,调用的函数会比较少,根据函数的名字以及层次关系一般可以确定每一个函数的大致用途,将你的理解作为注解写在这些函数的边上。当然很难一次就将全部注 解都写正确,有时候甚至可能是你猜测的结果,不过没有关系这些注解在阅读过程是不断修正的,直到你全部理解了代码为止。一般来说采用逐层阅读的方法可以是 你系统的理解保持在一个正确的方向上。避免一下子扎入到细节的问题上。在分层次阅读的时候要注意一个问题,就是将系统的函数和开发人员编写代码区分开。在 c, c+,java ,de
10、lphi 中都有自己的系统函数,不要去阅读这些系统函数,除非你要学习他们的编程方法,否则只会浪费你的时间。将系统函数表示出来,注明它们的作用 即可,区分系统函数和自编函数有几个方法,一个是系统函数的编程风格一般会比较好, 而自编的函数的编程风格一般比较会比较差。从变量名、行之间的缩进、注 解等方面一般可以分辨出来,另外一个是象 ms c6+会在你编程的时候给你生成一大堆文件出来, 其中有很多文件是你用不到了,可以根据文件名来区分一下时候是系统函数,最后如果你实在确定不了,那就 用开发系统的帮助系统去查一下函数名,对一下参数等来确定即可。 写注解 写注解是在阅读代码中最重要的一个步骤, 在我们阅
11、读的源代码一般来说是我们不熟悉的系统,阅读别人的代码一般会有几个问题, 1 搞明白别人的编程思想不 是一件很容易的事情,即使你知道这段程序的思路的时候也是一样。2 阅读代码的时候代码量一般会比较大, 如果不及时写注解往往会造成读明白了后边忘了前边的 现象。3 阅读代码的时候难免会出现理解错误,如果没有及时的写注解很难及时的发现这些错误。4 不写注解有时候你发生你很难确定一个函数你时候阅读过,它的功能是什么,经常会发生重复阅读、理解的现象。 好了,说一些写注解的基本方法:1 猜测的去写,刚开始阅读一个代码的时候, 你很难一下子就确定所有的函数的功能, 不妨采用采用猜测的方法去写注解,根 据函数的
12、名字、位置写一个大致的注解,当然一般会有错误,但你的注解实际是不但调整的,直到最后你理解了全部代码。2 按功能去写,别把注解写成语法说明 书,千万别看到 fopen 就写打开文件,看到 fread 就写读数据,这样的注解一点用处都没有,而应该写在此处开发参数配置文件(*。dat)读出 系统初始化参数。,这样才是有用的注解。3 在写注解的使用另外要注意的一个问题是分清楚系统自动生成的代码和用户自 己开发的代码,一般来说没有必要写系统自动生成的代码。象 delphi 的代码,我们往往要自己编写一些自己的代码段,还要对一些系统自动生成的代码段进行 修改,这些代码在阅读过程是要写注解的,但有一些没有修
13、改过的自动生成的代码就没有必要写注解了。4在主要代码段要写较为详细的注解。有一些函数或类在程 序中起关键的作用,那么要写比较详细的注解。这样对你理解代码有很大的帮助。5 对你理解起来比较困难的地方要写详细的注解,在这些地方往往会有一些编程的技巧。不理解这些编程技巧对你以后的理解或移植会有问题。6 写中文注解。如果你的英文足够的好,不用看这条了,但很多的人英文实在不怎么样,那就写中文注解吧,我们写注解是为了加快自己的理解速度。中文在大多数的时候比英文更适应中国人。与其写一些谁也看不懂的英文注解还不如不写。 重复阅读 一次就可以将所有的代码都阅读明白的人是没有的。至少我还没有遇到过。反复的去阅读同
14、一段代码有助于得代码的理解。一般来说,在第一次阅读代码的时候 你可以跳过很多一时不明白的代码段,只写一些简单的注解,在以后的重复阅读过程用,你对代码的理解会比上一次理解的更深刻,这样你可以修改那些注解错误的 地方和上一次没有理解的对方。一般来说,对代码阅读 3,4 次基本可以理解代码的含义和作用。 运行并修改代码 如果你的代码是可运行的,那么先让它运行起来,用单步跟踪的方法来阅读代码,会提高你的代码速度。代码通过看中间变量了解代码的含义,而且对 以后的修改会提供很大的帮助 用自己的代码代替原有代码,看效果,但在之前要保留源代码 600 行的一个函数,阅读起来很困难,编程的人不是一个好的习惯。在
15、阅读这个代码的时候将代码进行修改,变成了 14 个函数。每一个大约是 40- 50 行左右. 第一章: 导论 1.要养成一个习惯, 经常花时间阅读别人编写的高品质代码. 2.要有选择地阅读代码, 同时, 还要有自己的目标. 您是想学习新的模式|编码风 格|还是满足某些需求的方法. 3.要注意并重视代码中特殊的非功能性需求, 这些需求也许会导致特殊的实现风 格. 4.在现有的代码上工作时, 请与作者和维护人员进行必要的协调, 以避免重复劳 动或产生厌恶情绪. 5.请将从开放源码软件中得到的益处看作是一项贷款, 尽可能地寻找各种方式来 回报开放源码社团. 6.多数情况下, 如果您想要了解“别人会如
16、何完成这个功能呢?“, 除了阅读代码以 外, 没有更好的方法. 7.在寻找 bug 时, 请从问题的表现形式到问题的根源来分析代码. 不要沿着不相 关的路径(误入歧途). 8.我们要充分利用调试器|编译器给出的警告或输出的符号代码|系统调用跟踪器 |数据库结构化查询语言的日志机制|包转储工具和 Windows 的消息侦查程序, 定 出的 bug 的位置. 9.对于那些大型且组织良好的系统, 您只需要最低限度地了解它的全部功能, 就能够对它做出修改. 10.当向系统中增加新功能时, 首先的任务就是找到实现类似特性的代码, 将它作 为待实现功能的模板. 11.从特性的功能描述到代码的实现, 可以按照字符串消息, 或使用关键词来搜索 代码. 12.在移植代码或修改接口时, 您可以通过编译器直接定位出问题涉及的范围, 从 而减少代码阅读的工作量. 13.进行重构时, 您从一个能够正常工作的系统开始做起, 希望确保结束时系统能 够正常工作. 一套恰当的测试用例(test case)可以帮助您满足此项约束.