如何阅读别人的源代码

Hierarchical Flow Partition(Top-down&&Bottom-up) hierarchy flow是将设计切分成多个block,分别处理单个block,然后完成后,将它们进行拼接以完成最终的chip。一般划分为三个阶段:chip planning;physical budget就是pin assignmenthierarchy flow实现的方法有两种,一种是top-down,另一种是bottom-up,无论是哪种,都是都要通过flatten的方法分别全局范围进行优化实现。 阅读详情

        网上搜到的一篇介绍阅读别人源代码的方法,放在这里,有空可以查看。

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

  收集所有可能收集的材料

  阅读代码要做的第一件事情是收集所有和项目相关的资料。比如你要做一个项目的售后服务,那么你首先要搞明白项目做什么用的,那么调研文档、概要设计文档、详细设计文档、测试文档、使用手册都是你要最先搞到手的。如果你是为了学习那么尽量收集和你的学习有关的资料,比如你想学习linux的文件系统的代码,那最好要找到linux的使用手册、以及文件系统设计的方法、数据结构的说明。(这些资料在书店里都可以找到)。

  材料的种类分为几种类型

  1.基础资料。

  比如你阅读turbo c2的源代码你要有turbo c2的函数手册,使用手册等专业书籍,msc 6.0或者java 的话不但要有函数手册,还要有类库函数手册。这些资料都是你的基础资料。另外你要有一些关于uml的资料可以作为查询手册也是一个不错的选择

  2.和程序相关的专业资料。

  每一个程序都是和相关行业相关的。比如我阅读过一个关于气象分析方面的代码,因为里边用到了一个复杂的数据转换公式,所以不得不把自己的大学时候课本 找出来来复习一下高等数学的内容。如果你想阅读linux的文件管理的代码,那么找一本讲解linux文件系统的书对你的帮助会很大。

  3.相关项目的文档资料

  这一部分的资料分为两种,一个相关行业的资料,比如你要阅读一个税务系统的代码那么有一些财务/税务系统的专业资料和国家的相关的法律、法规的资料是 必不可少的。此外就是关于这个项目的需求分析报告、概要设计报告、详细设计报告,使用手册、测试报告等,尽量多收集对你以后的代码阅读是很重要的

  知识准备

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

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

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

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

  做什么事情都要知道从那里开始,读程序也不例外。在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 行左右.

Allan方差读图分析IMU误差指标 Allan方差标定IMU参数实测分析 阅读详情

相关推荐

如何下载era5数据?(两种方式)

供水利大数据云计算课程同学参考使用#

Camiel_sweet的博客 1万+

如何看别人代码

1.看到每一个新变量,看他在哪里用得到 2.

weixin_50382279的博客 3082

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.2 数据分组与透视(CUBE/ROLLUP/GROUPING SETS)

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.2 数据分组与透视(CUBE/ROLLUP/GROUPING SETS)

kngines 1809

每日一题 No.34 Codeforces怎么查看别人代码和查看自己错在哪里

本题要求:一般的A题网站无法查看别人的代码和每个测试案例是什么。 但是Codeforces就不同啦,只要不是正在比赛的题,你就可以查看别人的代码和看自己的测试点到底哪里出错啦,具体的我今天来交给大家输入格式:无输出格式:无输入样例:无输出样例:无解题思路 :查看别人代码 点击这个题号即可查看别人代码。查看自己错在哪里 勾选查看的代码都是朋友的(包括自己) 接下来就跟查看别人代码一样了

一名小学生的辛酸奋斗史 1万+

非常实用的代码阅读策略!

谁都喜欢可读性强的代码,希望接手的代码容易阅读,容易理解,从而减少交接的工作量,但并不是所有的代码都有好的易读性,接手前辈的“屎山”通常是一件令开发者非常痛苦的事情。

Java_LingFeng的博客 642

如何阅读代码

关于如何阅读代码自己整理的一些见解

weixin_45451974的博客 467

如何阅读源码汇总

译文:从源码中学习(阅读源码,初学者的有效成长方式) 目录前言为什么我们需要读源码站在巨人的肩膀上解决困难问题扩展你的边界应该读什么样的源码如何读源码预先准备流程与技巧结合上下文阅读代码把实例跑起来并与之交互了解数据结构间的关系了解模块间的依赖关系与边界使用测试用例点评一些好书译者的话 这是一篇译制博客文章,原博客为 Learn from Source Code (an Effective Way to Grow for Beginners) ,原作者为Nick Mose 。 我 向Nick申请获得了此文的

qq_41854911的博客 3977

阅读源代码

1**********************************************************************************     阅读源代码对于程序员来说是提高技术实力和业务知识最好的方法,那么我们怎样阅读源代码就是我们 首先要解决的问题。      阅读源代码就像管理一家大的公司,关键在于管理者卓越的领导意识。作为阅读源代码的人也应该有良好的意识

汪翰翔的Blog 4885

怎样阅读源代码,怎样提高阅读源代码的效率

怎样阅读源代码,怎样提高阅读源代码的效率 就我自己阅读安卓源代码的经验,本人研究过 settings,launcher,Sysupdate ,framework /services ,recovery的部分源代码。而且成功改动google留下...

126

为什么要阅读源代码?如何有效的阅读源代码? 选一些比较优秀的开源产品作为源代码阅读对象?

盛大TeamHost上有个关于学习开源项目的wiki :http://www.teamhost.org/projects/learn-with-open-source/wiki/Wiki 一、为什么要阅读源代码?       很多作家成名之前都阅读过大量的优秀文学作品,经过长期的阅读和写作积累,慢慢的才有可能写出一些好的、甚至是优秀的文学作品...

MTS的博客 1150

阅读源代码系列

阅读源代码系列 转 http://blog.csdn.net/goodfriends2007/article/details/6881883 摘要:本文从阅读源代码的目的和意义开始,主要介绍了怎样阅读别人的源代码,列举了阅读源代码的例子,以及阅读源代码工具和阅读源代码技巧。 引言 大家在软件开发过程中,在加入一个团队后或多或少都会接触到原来的源代码,要不是在原有基础上继续开发或者维

ajian005的专栏 2934

洛谷P1003满分代码

洛谷P1003满分代码分析代码总结 题目不再赘述。 分析 为了处理数据太大的问题,我们不能用二维数组染色的方法做这道题。由于题目只要求输出覆盖在目标点上的数字,所以可以直接判断点是否在每一块地毯范围之内,在就覆盖上编号即可。 代码 #include<iostream> #include<cstdio> #include<cstdlib> #include<...

Krazy_D的博客 499

怎么阅读代码,老司机总结的 6 个实用经验

④ 看文件里面的方法,以及方法继承,方法前面的注释。关键信息,支持 OpenGL ,Android,C 语言写的,以及版权信息。了全部资料,非常详尽,每个参数都给出了注释,说明,还有就是 Google。下来,然后慢慢消化,最后画出来,变成文档。官方的 GitHub 上,也给出了示例代码,这个就是你的一手资料。刚上班的时候,选择的是跟着公司的文档,去敲代码,把 Demo 跑通。那么第二步就是找到 Demo,去查看这个代码,对于它的流程,演示。面,就如同回调陷阱一样,因为一层层的调用,导致大脑的堆栈溢出,

程序员入门进阶 6086

如何阅读源码?

最近打算再看一遍UGUI源码。发现还是有些茫然无绪。 在突然面对大量 官方源码/他人代码 时,大多数人恐怕都是这样。 探究 “如何科学地阅读源码?” 是有意义的! 零、准备。 1、明确自己阅读源码的原因。能解决自己的问题即可。 2、戒急戒躁,做好长期阅读的准备。 3、黑盒体验,重度使用、熟读文档。明白系统需求、痛点、重点、难点。 4、做好笔记、总结。可以纳入版本管理,长期注解保存。 5、疑问点可以自己动手实例验证、调试。 一、从整体出发 1、看类设计 ①、 利用 VS的 类..

NRatel的博客 1288

洛谷 搜索

dfs:枚举所有的解决方案。 实现:每次判断这步是否可行,不可行就返回;再判断是否为最后一步,是则返回或者输出;否则就是继续搜索。记得搜索结束要回溯。 bfs:找到最快的一条路径。 实现:将合法的下一步,都压入队列中,每次判断队列是否为空,不空则取出队首,继续判断。记录路径的话,就保存它的前驱点,等到终止时,再输出即可。 八皇后****** 每行每列,所有对角线上 都只有一个皇后。 分析:我们逐行...

weixin_42091898的博客 1931

手机免费看小说的开源软件“阅读

手机免费开小说开源软件

CSDN博客 8413

推荐几个好的阅读python代码的工具

推荐几个好的阅读python代码的工具

xiqng17111342931的博客 3546

还不会如何阅读源码?一问教会你阅读源码的方式

正如标题描述的这样,我试图通过这篇文章,教会你如何阅读源码。事情大概是这样的,前段时间,我收到了一个读者发来的类似于这样的示例代码:他说在没有执行代码之前,他也知道前两个为什么一个不会回滚,一个会回滚。因为抛出的异常和 @Transactional 里面的注解呼应上了。但是第三个到底会不会回滚,没有执行之前,他不知道为什么会回滚。执行之后,回滚了,他也不知道为什么回滚了。我告诉他:源码之下无秘密。让他去看看这部分源码,理解它的原理,不然这个地方抛出一个其他的异常,又不知道会不会回滚了。

wdj_yyds的博客 1709

如何阅读Python代码?

如何阅读Python代码?

xiangxue666的博客 4149

Github代码在线阅读神器! 程序员必备

IT攻城狮,阅读代码的利器

qq_36075612的博客 3258

【洛谷】刷题代码详解day1

前缀和与差分【洛谷】P2367语文成绩 前缀和:可以理解为数学上的数列的前n项和 差分:可以看作前缀和的逆运算 前缀和与差分有一维、二维 举例【洛谷】P2367语文成绩 题目描述 语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行。她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少。你能帮帮她吗? 输入格式 第一行有两个整数 nn,pp,代表学生数与增加分数的次数。 第二行有 nn 个数,a_1 \sim a_na1∼a**n,代表各个学生的初始成绩。 接下来 pp 行,每行有三个数,xx,y

jingyu_1的博客 922

代码太多不要怕,分享一个阅读代码的神器

代码阅读

qq_31716541的博客 3806

红树林遥感图像补充数据集(秋茄).zip

红树林遥感图像补充数据集(秋茄).zip

基于单片机的电子音乐门铃.doc

基于单片机的电子音乐门铃.doc

上一篇: 嵌入式软件复用的可能性
下一篇: 搭建android环境
阑珊marina
博客等级 码龄17年 67粉丝 28原创
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值