如何阅读源代码(7)

第七章: 编码规范和约定

+++++++++++++++++++

137.了解了给定代码库所遵循的文件组织方式后, 就能更有效率地浏览它的源代码.

138.阅读代码时, 首先要确保您的编辑器或优美打印程序的tab设置, 与代码遵循的风格规范一致.

139.可以使用代码块的缩进, 快速地掌握代码的总体结构.

140.对编排不一致的代码, 应该立即给予足够的警惕.

141.分析代码时, 对标记为XXX, FIXME和TODO的代码序列要格外注意: 错误可能就潜伏在其中.

142.常量使用大写字母命名, 单词用下划线分隔.

143.在遵循Java编码规范的程序中, 包名(package name)总是从一个顶级的域名开始(例如, org, com), 类名和接口名由大写字母开始, 方法和变量名由小写字母开始.

144.用户界面控件名称之前的匈牙利记法的前缀类型标记可以帮助我们确定它的作用.

145.不同的编程规范对可移植构造的构成有不同的主张.

146.在审查代码的可移植性, 或以某种给定的编码规范作为指南时, 要注意了解规范对可移植性需求的界定与限制.

147.如果GUI功能都使用相应的编程结构来实现, 则通过代码审查可以轻易地验证给定用户界面的规格说明是否被正确地采用.

148.了解项目编译过程的组织方式与自动化方式之后, 我们就能够快速地阅读与理解对应的编译规则.

149.当检查系统的发布过程时, 常常可以将相应发行格式的需求作为基准.

++++++++++++

第八章: 文档

++++++++++++

150.阅读代码时, 应该尽可能地利用任何能够得到的文档.

151.阅读一小时代码所得到的信息只不过相当于阅读一分钟文档.

152.使用系统的规格说明文档, 了解所阅读代码的运行环境.

153.软件需求规格说明是阅读和评估代码的基准.

154.可以将系统的设计规格说明作为认知代码结构的路线图, 阅读具体代码的指引.

155.测试规格说明文档为我们提供可以用来对代码进行预演的数据.

156.在接触一个未知系统时, 功能性的描述和用户指南可以提供重要的背景信息,从而更好地理解阅读的代码所处的上下文.

157.从用户参考手册中, 我们可以快速地获取, 应用程序在外观与逻辑上的背景知识, 从管理员手册中可以得知代码的接口|文件格式和错误消息的详细信息.

158.利用文档可以快捷地获取系统的概况, 了解提供特定特性的代码.

159.文档经常能够反映和提示出系统的底层结构.

160.文档有助于理解复杂的算法和数据结构.

161.算法的文字描述能够使不透明(晦涩, 难以理解)的代码变得可以理解.

162.文档常常能够阐明源代码中标识符的含义.

163.文档能够提供非功能性需求背后的理论基础.

164.文档还会说明内部编程接口.

165.由于文档很少像实际的程序代码那样进行测试, 并受人关注, 所以它常常可能存在错误|不完整或过时.

166.文档也提供测试用例, 以及实际应用的例子.

167.文档常常还会包括已知的实现问题或bug.

168.环境中已知的缺点一般都会记录在源代码中.

169.文档的变更能够标出那些故障点.

170.对同一段源代码重复或互相冲突的更改, 常常表示存在根本性的设计缺陷, 从而使得维护人员需要用一系列的修补程序来修复.

171.相似的修复应用到源代码的不同部分, 常常表示一种易犯的错误或疏忽, 它们同样可能会在其他地方存在.

172.文档常常会提供不恰当的信息, 误导我们对源代码的理解.

173.要警惕那些未归档的特性: 将每个实例归类为合理|疏忽或有害, 相应地决定是否应该修复代码或文档.

174.有时, 文档在描述系统时, 并非按照已完成的实现, 而是系统应该的样子或将来的实现.

175.在源代码文档中, 单词gork的意思一般是指”理解”.

176.如果未知的或特殊用法的单词阻碍了对代码的理解, 可以试着在文档的术语表(如果存在的话)|New Hacker’s Dictionary[Ray96]|或在Web搜索引擎中查找它们.

177.总是要以批判的态度来看待文档, 注意非传统的来源, 比如注释|标准|出版物|测试用例|邮件列表|新闻组|修订日志|问题跟踪数据库|营销材料|源代码本身.

178.总是要以批判的态度来看待文档; 由于文档永远不会执行, 对文档的测试和正式复查也很少达到对代码的同样水平, 所以文档常常会误导读者, 或者完全错误.

179.对于那些有缺陷的代码, 我们可以从中推断出它的真实意图.

180.在阅读大型系统的文档时, 首先要熟悉文档的总体结构和约定.

181.在对付体积庞大的文档时, 可以使用工具, 或将文本输出到高品质输出设备上, 比如激光打印机, 来提高阅读的效率.

时间: 2024-11-08 21:08:12

如何阅读源代码(7)的相关文章

如何阅读源代码(2)

今天遇到的问题,专心的跟进源代码中.... 第二章: 基本编程元素 ++++++++++++++++++++ 19.第一次分析一个程序时, main是一个好的起始点. 20.层叠if-else if-...-else序列可以看作是由互斥选择项组成的选择结构. 21.有时, 要想了解程序在某一方面的功能, 运行它可能比阅读源代码更为恰当. 22.在分析重要的程序时, 最好首先识别出重要的组成部分. 23.了解局部的命名约定, 利用它们来猜测变量和函数的功能用途. 24.当基于猜测修改代码时, 您应

如何阅读源代码

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

Emacs和它的朋友们——阅读源代码篇(转)

正如那本<Code Reading>一书中指出的那样,源代码阅读一直没有被很好的重 视:你上大学的时候有“代码阅读”这门课吗?相信没有. 1 Source Insight 谈到阅读源代码,不得不提一下很多人都用过并且现在也还用着的一个工具: Source Insight.很多年前我最早接触的源代码阅读工具就是这个.不可否认, 它有很多优点:非常直观,非常容易上手,该有的功能基本上都有… 但是,它也有一些缺点: 是商业软件:要花钱买或者使用盗版是Windows软件:在Linux下用的话需要用 W

菜鸟好文推荐(二十三)——成为一名更好的程序员:如何阅读源代码

阅读源代码有许多益处.你会发现新的架构(construct)和库,与其他的代码维护者产生共鸣,但最重要的是学会如何组织代码,避免因内部极其复杂而变得不可维护. 但是也有一个不好的地方,那就是阅读源代码太困难了.每当我看到一个新的代码库(code base)时,这种让人眩晕的感觉就充斥了我的大脑.我的内心告诉我压根不想趟眼前这趟浑水. 这是(希望是)正常的反应.当我们的大脑接触过多的新东西,就会产生排斥.造物主赋予我们的这台强大的模式匹配机器根本找不到规律.所有的抽象(abstraction)都是

[转]Linux下阅读源代码:(g)vim+Taglist+ctags

Linux下阅读源代码的方法很多,聪明人从标题应该就可以知道,需要(g)vim+Taglist+ctags.3者配合,真是珠联璧合,功力无限啊! vim/gvim什么是vim/gvim,如果看官连vi都不知道,那就别往下看了.一些对Linux一知半解的人说,vi不就是一个和Win下的note pad一样的工具吗?其实大错特错了,如果仅仅是和note pad一样的功能,那它早就不叫vi了. TaglistTaglist是一个vim的源代码浏览插件,具体功能介绍还烦请各位看官自己google一下.很

高效阅读源代码指南

最近一年里,我阅读了不少开源项目的源代码,之前也和朋友讨论过阅读源代码时遇到的一些问题.我觉得有必要写一篇博文分享一下自己的经验. 序章:准备工作 通常情况下,我们不会无缘无故拿到一份源代码,我是说,当想要阅读源代码时,一定是抱着某种目的进行下去的,这个目的会贯穿整个研究过程,比如: 想研究某个东西的实现 想学习作者的代码风格和项目组织 想参考实现并用其他语言移植项目 等等.所以在最初的时候,明确自己阅读源代码的目的非常关键. 在明确了目的之后,就可以正式开始深挖代码了.不过在此之前,还是要提醒

阅读源代码之“那是我的青春”

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.                                                                                                                                          

如何阅读源代码(5)

第五章: 高级控制流程 +++++++++++++++++ 98.采用递归定义的算法和数据结构经常用递归的函数定义来实现. 99.推理递归函数时, 要从基准落伍测试开始, 并认证每次递归调用如何逐渐接近非递归基准范例代码. 100.简单的语言常常使用一系列遵循该语言语法结构的函数进行语法分析. 101.推理互递归函数时, 要基于底层概念的递归定义. 102.尾递归调用等同于一个回到函数开始处的循环. 103.将throws子句从方法的定义中移除, 然后运行Java编译器对类的源代码进行编译, 就

如何阅读源代码(8)

第九章: 系统构架 ++++++++++++++ 182.一个系统可以(在重大的系统中也确实如此)同时出多种不同的构架类型. 以不同的方式检查同一系统|分析系统的不同部分|或使用不同级别的分解, 都有可能发现不同的构架类型. 183.协同式的应用程序, 或者需要协同访问共享信息或资源的半自治进程, 一般会采用集中式储存库构架. 184.黑板系统使用集中式的储存库, 存储非结构化的键/值对, 作为大量不同代码元件之间的通信集线器. 185.当处理过程可以建模|设计和实现成一系列的数据变换时, 常常