具体描述
在本书中,作者回归技术层面。从Apache web server、BSD版本的Unix system、ArgoUMl、ACE网络编程库等著名开源软件中选取了大量真实C、C++和java语言源代码,直观而深刻的阐述了代码中可能存在的各种质量问题,涉及可靠性、安全性、时间性和空间性、可移植性、可维护性以及浮点运算等方面,很多内容都市独辟蹊径,发前人所未发。正因如此,本书继作者的《代码阅读》之后在获JoIt生产效率大奖
作者简介
世界著名程序员,曾4次在国际c语言编程大赛(IOCCC)中折桂。他是FreeBSD操作系统的核心开发人员之一,开发了大量开源软件,包括所有BSD system上的sed编辑器、大受好评的建模引擎UMLGraph和C语言源码分析与重构工具CScout.在英国理工学院获得了软件工程硕士和计算机科学博士学位之后,他目前任教于希腊雅典经济管理大学,领导着一个欧盟资助的开源软件质量协作研究项目。他是IEEE software杂志的编委和专栏作家,曾获Usenix协会终生成就奖,也是网络百科全书Wikipedia的一位活跃作者。出本书外,他的《代码阅读》一书曾获得2004年的Jolt生产效率大奖。
目录信息
1.1 软件质量
1.1.1 用户、制造者和管理者眼中的质量
1.1.2 质量属性
1.1.3 紧张的世界
1.2 本书阅读指南
1.2.1 排版约定
1.2.2 图示
1.2.3 图表
1.2.4 汇编代码
1.2.5 练习
1.2.6 补充材料
1.2.7 工具
进阶阅读
第2章 可靠性
2.1 输入问题
2.2 输出问题
2.2.1 不完整输出或输出缺失
2.2.2 在错误的时刻输出的正确结果
2.2.3 错误的格式
2.3 逻辑问题
2.3.1 偏差为一的错误与循环迭代
2.3.2 被忽视的极端情况
2.3.3 被遗漏的情况、条件测试和步骤
2.3.4 被遗漏的方法
2.3.5 多余的功能
2.3.6 曲解
2.4 计算问题
2.4.1 不正确的算法或计算
2.4.2 表达式中错误的操作数
2.4.3 表达式中错误的运算符
2.4.4 运算符优先级问题
2.4.5 溢出、下溢和符号转换错误
2.5 并发与时序问题
2.6 接口问题
2.6.1 不正确的例程或参数
2.6.2 没有正确测试返回值
2.6.3 没有提供错误检测或恢复
2.6.4 资源泄漏
2.6.5 误用面向对象功能
2.7 数据处理问题
2.7.1 不正确的数据初始化
2.7.2 引用错误的数据变量
2.7.3 越界引用
2.7.4 不正确的下标使用
2.7.5 不正确的比例或数据单位
2.7.6 不正确的数据打包与解包
2.7.7 不一致的数据
2.8 容错
2.8.1 管理策略
2.8.2 空间冗余
2.8.3 时间冗余
2.8.4 可复原性
锦囊妙计
进阶阅读
第3章 安全性
3.1 脆弱代码
3.2 缓冲区溢出
3.3 竞态条件
3.4 问题API
3.4.1 容易出现缓冲区溢出的函数
3.4.2 格式字符串漏洞
3.4.3 路径与命令行解释器的元字符漏洞
3.4.4 临时文件
3.4.5 不适合密码用途的函数
3.4.6 可篡改数据
3.5 不可信输入
3.6 结果验证
3.7 数据与特权泄漏
3.7.1 数据泄漏
3.7.2 特权泄漏
3.7.3 Java的方法
3.7.4 分离特权代码
3.8 特洛伊木马
3.9 工具 110锦囊妙计
进阶阅读
第4章 时间性能
4.1 测量技术
4.1.1 负载评定
4.1.2 受限于I/O的任务
4.1.3 受限于内核的任务
4.1.4 受限于CPU的任务与剖析工具
4.2 算法复杂性
4.3 独立的代码
4.4 与操作系统交互
4.5 与外设交互
4.6 "不请自来"的交互
4.7 高速缓存处理
4.7.1 一个简单的系统调用高速缓存
4.7.2 替换策略
4.7.3 预先计算结果
锦囊妙计
进阶阅读
第5章 空间性能
5.1 数据
5.1.1 基本数据类型
5.1.2 聚合数据类型
5.1.3 对齐
5.1.4 对象
5.2 内存组织
5.3 内存层次结构
5.3.1 主存及其高速缓存
5.3.2 磁盘高速缓存与分列内
5.3.3 交换区与基于文件的磁盘存储
5.4 进程/操作系统接口
5.4.1 内存分配
5.4.2 内存映射
5.4.3 数据映射
5.4.4 代码映射
5.4.5 访问硬件资源
5.4.6 进程间通信
5.5 堆内存管理
5.5.1 堆碎片
5.5.2 堆剖析
5.5.3 内存泄漏
5.5.4 垃圾收集
5.6 栈内存管理
5.6.1 栈框架
5.6.2 栈空间
5.7 代码
5.7.1 设计时
5.7.2 编码时
5.7.3 构建时
锦囊妙计
进阶阅读
第6章 可移植性
6.1 操作系统
6.2 硬件与处理器体系结构
6.2.1 数据类型的属性
6.2.2 数据存储
6.2.3 特定于计算机的代码
6.3 编译器与语言扩展
6.4 图形用户界面
6.5 国际化与本地化
6.5.1 字符集
6.5.2 区域
6.5.3 消息
锦囊妙计
进阶阅读
第7章 可维护性
7.1 测量可维护性
7.1.1 可维护性指数
7.1.2 面向对象程序的度量
7.1.3 包的依赖度度量
7.2 可分析性
7.2.1 一致性
7.2.2 表达式的格式化
7.2.3 语句的格式化
7.2.4 命名习惯
7.2.5 语句级别的注释
7.2.6 版本注释
7.2.7 视觉结构:块与缩进
7.2.8 表达式、函数与方法的长度
7.2.9 控制结构
7.2.10 布尔表达式
7.2.11 可辨认性与内聚性
7.2.12 依赖与耦合
7.2.13 代码块注释
7.2.14 数据声明注释
7.2.15 正确的标识符名字
7.2.16 依赖的位置
7.2.17 不确定性
7.2.18 可审查性
7.3 可变性
7.3.1 识别
7.3.2 隔离
7.4 稳定性
7.4.1 封装与数据隐藏
7.4.2 数据抽象
7.4.3 类型检查
7.4.4 编译时断言
7.4.5 运行时检查与查看时断
7.5 可测试性
7.5.1 单元测试
7.5.2 集成测试
7.5.3 系统测试
7.5.4 测试覆盖度分析
7.5.5 偶发性测试
7.6 开发环境的影响
7.6.1 增量构建
7.6.2 调整构建性能
锦囊妙计
进阶阅读
第8章 浮点运算
8.1 浮点表示法
8.1.1 量度误差
8.1.2 舍入
8.1.3 内存格式
8.1.4 规格化与隐含的一个位
8.1.5 阶码偏移
8.1.6 负数
8.1.7 反向规格化数
8.1.8 特殊值
8.2 舍入
8.3 溢出
8.4 下溢
8.5 相消
8.6 吸收
8.7 无效运算
锦囊妙计
进阶阅读
附录A 源代码致谢
参考文献
· · · · · · (收起)
读后感
用户评价
翻开《高质量程序设计艺术》,最先吸引我的是它严谨的逻辑和深入浅出的讲解方式。我一直觉得,很多关于程序设计的书籍,要么过于理论化,让人望而却步;要么过于碎片化,缺乏系统性。但这本书却能在理论的深度和实践的可操作性之间找到了绝佳的平衡点。它没有回避那些核心的、可能有些枯燥的概念,而是用生动形象的比喻和贴合实际的例子,将它们一一剖析。读着读着,你会发现那些曾经让你头疼的编程难题,似乎都有了清晰的解答思路。更重要的是,这本书的编排逻辑非常清晰,从基础概念的铺垫,到高级技巧的应用,再到整体架构的设计,层层递进,如同在为读者绘制一幅完整的程序设计蓝图。我尤其喜欢其中关于代码复用和模块化设计的章节,它们不仅提供了实用的编码技巧,更重要的是,它们教会了我如何从更高层面上思考代码的可维护性和扩展性。这对于一个正在努力提升自己软件工程能力的开发者来说,无疑是一次宝贵的启迪。
我一直认为,一个程序员的成长,不仅仅在于掌握多少种编程语言,或者写出多少行代码,更在于能否在面对复杂问题时,设计出优雅且高效的解决方案。《高质量程序设计艺术》这本书,正好满足了我对这类“思想性”的编程读物的期待。它不像市面上一些充斥着“黑魔法”和“奇技淫巧”的书籍,而是踏踏实实地引导读者去理解程序设计的本质,去探究那些能够经受时间考验的编程范式和设计原则。我特别欣赏其中对“代码可读性”和“错误处理”的强调,这两点看似基础,却往往是衡量一个程序是否“高质量”的关键。很多时候,我们过于追求功能的实现,而忽略了代码本身所承载的“信息量”和“健壮性”,这本书就像一个经验丰富的导师,适时地提醒我,优秀的程序不仅仅是实现功能的工具,更是高质量的产物。
拿到这本《高质量程序设计艺术》的书,光是封面设计就透着一股扎实的功底,没有花里胡哨的图示,只有沉静的配色和清晰的标题,仿佛预示着里面将是一场关于精益求精的编程之旅。我一向对那些“速成”的编程技巧感到不屑,总觉得真正的技术积累需要的是耐心和对底层原理的深入理解。这本书在我看来,就如同为我搭建了一个坚实的知识框架,让我可以不再被零散的技术碎片所困扰,而是能够系统地去构建对软件工程的认知。它不仅仅是教你如何写出“能运行”的代码,更在于如何写出“健壮、高效、易于维护”的代码。这一点,对于任何有志于在软件开发领域深耕的从业者来说,都至关重要。这本书的出版,无疑是为我们这些渴望提升自身专业素养的开发者,提供了一份珍贵的财富。我迫不及待地想通过阅读这本书,去学习那些前辈们经过实践检验的宝贵经验,将那些晦涩的理论化为可执行的实践,最终内化为自己解决实际问题的能力。
刚拿到《高质量程序设计艺术》这本书时,我并没有抱有太大的期望,毕竟市面上关于编程的书籍良莠不齐。然而,在阅读的过程中,我逐渐被它深厚的底蕴和独到的见解所吸引。它没有过多地纠缠于具体的编程语言语法,而是将重点放在了那些普适性的程序设计思想和方法论上。书中关于“低耦合、高内聚”的设计原则,以及对“设计模式”的深入解读,都让我受益匪浅。我发现,这本书不仅能够帮助我提升编码能力,更重要的是,它能够引导我从更高的维度去理解软件的构建过程,去思考如何设计出更加灵活、可扩展和易于维护的系统。我尤其喜欢其中关于“测试驱动开发”和“持续集成”的讨论,这些现代软件工程的实践,在这本书中得到了清晰的阐释,让我看到了提升开发效率和保障代码质量的有效途径。
作为一名在软件开发领域摸爬滚打多年的工程师,我深知“高质量”并非一日之功,它需要的是对细节的极致追求和对原理的深刻洞察。《高质量程序设计艺术》这本书,恰恰是这样一本能帮助我们实现“质变”的著作。它不像那些泛泛而谈的入门指南,而是直击核心,深入剖析了那些能够显著提升程序质量的关键要素。我从书中学习到了如何更有效地进行代码审查,如何识别和规避潜在的设计缺陷,以及如何通过合理的抽象和封装,让复杂的系统变得井井有条。尤其令我印象深刻的是关于性能优化的部分,它并没有提供一些“银弹”式的解决方案,而是教会了我如何从系统层面去分析性能瓶颈,并给出了一系列行之有效的优化策略。这本书的价值,在于它能够帮助我们培养一种“严谨”的编程思维,让我们在每一次编码实践中,都能够以更高的标准来要求自己。
一些观点很不错
翻译不行
翻阅,其中关于代码质量测量的内容非常好
翻阅,其中关于代码质量测量的内容非常好
本书列举了很多代码细节中的各种问题,这些宝贵的经验对初学者很有用,作者居然都是用开源代码来举例,这得花多少时间去找啊。不过本书主要是针对基于C/C++的系统开发,其中的很多问题在高级语言中并不存在