代码阅读方法与实践(二)

    虽然前四章已经讲了大量能够影响程序指令序列的控制流程的语句,这些常见的语句也能够大多数常见的编程任务,然而,一些并不常见的部分对许多应用程序也很重要。

    递归:经常用相似的定义来反映数据结构和算法。简单的说,递归就是函数的自身调用。许多数据结构——如树和堆,操作——如类型判断和类型和一,数学实体——如裴波纳戚数和分形图,以及算法——如快速排序、数遍历和递归下降分析,都采用递归定义。递归并不是死循环!

    异常:在C++java中采用组织对错误的处理,或者有效地使用多处理器的计算机。Java的异常处理代码可能包括:try块中的一系列语句,其中发生的异常可以捕获;0或多个catch子句,当异常发生时,将这些字句进行匹配;一个可选的的finally子句块,总是在try之后执行。

    当并行机制不可用时,程序可能必须采用异步信号(能够在任意时间发出的信号)和非局部跳转来响应外部事件。为了提高效率,程序员往往在平常调用C函数的地方使用C语言预处理的宏替换功能。

   大型的多个项目文件与小型项目之间的不同。

   项目的组织。开发多平台应用程序的一个通常策略就是将平台相关的代码隔离开来,针对每种平台进行定制。然后,将这些代码放入分离的目录中:依据目标平台,配置其中的某一个参与到编译过程中。一句体系大小的不同,我们我们描述的目录可能适用于整个系统,或者系统中每个部分都有自己独立的目录结构。在浏览大型的项目时要注意,项目的源码远不止是编译后获得可执行程序的计算机语言指令:一个项目的源码树一般还包括规格说明、最终用户和开发人员文档、测试脚本、多媒体资源、编译工具、例子、本地化文件、修订历史、安装过程和许可信息。

    在运行期间读人的配置数据可以自由的被终端用户操作。因此,程序应该像对待其他用户输入一样,仔细的对他进行验证,同时在较高安全特权下运行的程序,应该保证不让他的任何函数允许无特权的用户使用。

    我们可以将系统的源代码想象成在时间和空间两个方向上延伸。代码,组织成文件和目录的形式,占据空间,同时,统一代码还随着时间的推移不断演化。修订控制系统可以跟踪代码的演化,标记重大事件,并记录更改之后的原因,允许我们查看和控制时间的要素。

    作为源代码阅读活动的一部分,我们首先应该能够识别并推理测试代码和测试用例,然后使用这些测试产物帮助理解其余的代码。

大多数规范都会说明文件应该如何命名,应该使用什么样的扩展名。现代块结构语言编写的程序,都使用缩进来强调每个块的嵌套层次,风格指南经常规定用来缩进代码块的空格的数量和类型。所有的代码规范都会规定声明以及每个具体语句的编排方式。命名的约定:首字母大写、用下划线分隔单词、只取首字母。

   应用传统工程方法的项目,在开发过程中会产生大量不同的文档:系统规格说明文档

文档的类型、软件规格说明、系统的测试规格说明用户文档。利用文档可以快捷的获取系统的概况了解提供特定特性的代码。文档给出系统的规格说明,我们可以依据他对代码进行审查。文档经常能够反应和揭示出系统的底层结构。算法的文字描述能够使不透明的代码变得可以理解。文档常常能够阐明源代码中标识符的含义;能够提供非功能性需求的背后理论基础;找到设计者当时的观点,系统要求的目标、目的和意图、构架,以及实现,还有当时否认的其他方案以及否决他们的原因。同一份RFC文档中还有一份用ASCII字符集精心绘制的图,详细说明TCP协议如何建模为有限状态机。在阅读文档时注意文档常常会提供不恰当的信息。

在寻找源代码文档时,要考虑到非传统的涞源,比如注释、规范、出版物、测试用例、邮件列表、新闻组、修订日志、问题跟踪数据库、营销材料和源代码本身。在研究大量代码时,人们一般会寻找更为正式的涞源,然而,原代码注释、用ASCII码画成的图经常比相应的正式文档维护的更好,并且隐藏着重要的信息。最常遇到的文档格式有:torfftexinfodocbookdoxygenUNIx手册、javadoc手册、texinfo文档、docbook文件。

 

你可能感兴趣的:(代码阅读方法与实践(二))