图书目录

简明目录

第I 部分 奠定基础

第1 章 欢迎来到软件构建的世界 3

第2 章 有助于更充分理解软件开发的隐喻 9

第3 章 谋定而后动:前期准备 23

第4 章 关键的“构建”决策 61

第II 部分 创建高质量的代码

第5 章 软件构建中的设计 73

第6 章 可以工作的类 125

第7 章 高质量的例程 161

第8 章 防御性编程 187

第9 章 伪代码编程过程 215

第III 部分 变量

第10 章 变量中使用的一般性难题 237

第11 章 变量名的力量 259

第12 章 基本数据类型 291

第13 章 不常用的数据类型 319

第IV 部分 语句

第14 章 直线性代码的组织 347

第15 章 条件语句的使用 355

第16 章 控制循环 367

第17 章 不太常见的控制结构 391

第18 章 表驱动的方法 411

第19 章 常见的控制难题 431

第V 部分 代码改进

第20 章 软件质量的全景观 463

第21 章 协同构建代码 479

第22 章 开发人员和测试 499

第23 章 调试 535

第24 章 重构 563

第25 章 代码调优策略 587

第26 章 代码调优技术 609

第VI 部分 系统级考量

第27 章 程序规模对构建的影响 649

第28 章 对软件构建进行管理 661

第29 章 集成 689

第30 章 编程工具 709

第VII 部分 软件匠艺

第31 章 布局和风格 729

第32 章 自带文档说明的代码 777

第33 章 个性 819

第34 章 软件工艺的话题 837

第35 章 更多信息来源 855

参考文献 863

索引 883

详细目录

第I 部分 奠 定 基 础

第1章 欢迎来到软件构建的世界     3

1.1 什么是软件构建?         3

1.2 软件构建的重要性         6

1.3 如何阅读本书           8

第2章 有助于更充分理解软件开发的隐喻             9

2.1 隐喻的重要性           9

2.2 如何使用软件隐喻        11

2.3 常见的软件隐喻         13

第3章 谋定而后动,前期准备     23

3.1 先决条件的重要性        24

3.2 确定要开发什么类型的软件    31

3.3 定义问题的先决条件       36

3.4 需求的先决条件         38

3.5 架构的先决条件         43

3.6 花在事前先决条件上的时间    55

第4章 关键的构建决策        61

4.1 编程语言的选择         61

4.2 编程约定            66

4.3 评估自己在技术浪潮中的位置   66

4.4 选择主流的构建实践       69

第II 部分 创建高质量的代码

第5章 软件构建中的设计       73

5.1 设计挑战            74

5.2 关键的设计概念         77

5.3 设计构建块:启发式       87

5.4 设计实践            110

5.5 点评各种流行的方法论      118

第6章 可以工作的类         125

6.1 类的基础知识          126

6.2 何为好的类的接口        133

6.3 设计和实现有哪些难题      143

6.4 创建类的理由          152

6.5 特定于语言的难题        156

6.6 超越类:软件包         156

第7章 高质量的例程         161

7.1 基于合理缘由来创建例程     164

7.2 在例程层级的设计        168

7.3 何为好的例程名称        171

7.4 一个例程多长为好?       173

7.5 如何使用例程的参数       174

7.6 使用函数时候的特殊考量     181

7.7 宏例程和内联例程        182

第8章 防御性编程          187

8.1 防止程序接收无效输入      188

8.2 断言              189

8.3 错误处理技术          194

8.4 异常              198

8.5 隔离程序,免受误操作所造成的损害             203

8.6 调试帮助            205

8.7 决定产品代码中保留多少防御性编程              209

8.8 关于防御性编程,要慎重     210

第9章 伪代码编程过程        215

9.1 总结构建类和例程的步骤     216

9.2 Pro伪代码           218

9.3 使用PPP构建例程        220

9.4 PPP的备选方案         232

第III 部分 变 量

第10章 变量使用中的一般性难题   237

10.1 数据的含义          238

10.2 让变量声明变得简单一些    239

10.3 初始化变量指导方针      240

10.4 范围             244

10.5 持久化            251

10.6 绑定时间           252

10.7 数据类型和控制结构的关系   254

10.8 变量名称要精准体现其用途   255

第11章 变量名的力量        259

11.1 选择好名称时的注意事项    259

11.2 特定数据类型的命名      264

11.3 命名约定的力量        270

11.4 非正式化命名约定       272

11.5 标准化前缀          279

11.6 名称要言简意赅        282

11.7 要避免哪些类型的名称     285

第12章 基础数据类型        291

12.1 数字             292

12.2 整数             293

12.3 浮点数            295

12.4 字符和字符串         297

12.5 布尔变量           301

12.6 枚举类型           303

12.7 命名常量           307

12.8 数组             310

12.9 创建自己的类型(类型别名)   311

第13章 不常用的数据类型      319

13.1 结构             319

13.2 指针             323

13.3 全局数据           335

第IV 部分 语 句

第14章 直线性代码的组织      347

14.1 必须按特定顺序组织的语句   347

14.2 顺序无所谓的语句       351

第15章 条件语句的使用       355

15.1 if语句             355

15.2 case语句           361

第16章 控制循环          367

16.1 如何选择循环的类型      367

16.2 对循环进行控制        373

16.3 轻松创建循环—由内而外    385

16.4 循环和数组之间的相关性    387

第17章 不太常见的控制结构     391

17.1 子例程的多种返回路径     391

17.2 递归             393

17.3 goto语句           398

17.4 如何看待不同寻常的控制结构   408

第18章 表驱动的方法        411

18.1 常见考量           411

18.2 直接方案表          413

18.3 索引访问表          425

18.4 单步访问表          426

18.5 其他的表查找范例       429

第19章 常见的控制难题       431

19.1 布尔表达式          431

19.2 复合语句(块)        443

19.3 Null语句            444

19.4 搞定危险的深度嵌套      445

19.5 编程基础:结构化编程     454

19.6 控制结构与复杂性       456

第V 部分 代码改进

第20章 软件质量的全景观      463

20.1 软件质量具备哪些特征     463

20.2 软件质量改进技巧       466

20.3 质量技术的相对有效性     469

20.4 质量保障何时做        473

20.5 软件质量的一般性原则     474

第21章 协作构建代码        479

21.1 协作开发实践概览       480

21.2 结对编程           483

21.3 正式检查           485

21.4 其他类型的协作开发实践    492

第22章 开发人员和测试       499

22.1 开发人员的测试角色      500

22.2 建议开发人员如何做测试    503

22.3 测试技巧汇总         505

22.4 典型错误           517

22.5 支持测试的工具        523

22.6 如何改进测试         528

22.7 保留测试记录         529

第23章 调试            535

23.1 调试难题概览         535

23.2 发现缺陷           540

23.3 修复缺陷           550

23.4 调试过程中的心理学考量    554

23.5 调试工具:明显的和不太明显的          556

第24章 重构            563

24.1 软件演进的几种类型      564

24.2 重构介绍           565

24.3 特定类型的重构        571

24.4 以安全的方式重构       579

24.5 重构策略           582

第25章 代码调优策略        587

25.1 性能概览           588

25.2 代码调优简介         591

25.3 蜜糖和哥斯拉         597

25.4 度量             603

25.5 迭代             605

25.6 总结代码调优的几种方式    606

第26章 代码调优技术        609

26.1 逻辑             610

26.2 循环             616

26.3 数据转换           624

26.4 表达式            630

26.5 子例程            639

26.6 用低级别的语言重写代码    640

26.7 变动越大,越要大部分一致   643

第VI 部分 系统级考量

第27章 程序规模对代码构建的影响            649

27.1 通信和大小          650

27.2 项目大小的范围        651

27.3 项目大小对错误的影响     651

27.4 项目大小对生产力的影响    653

27.5 项目大小对开发活动的影响   654

第28章 对软件构建进行管理     661

28.1 鼓励写好代码         662

28.2 配置管理           664

28.3 对构建日程表进行评估     671

28.4 度量             677

28.5 以人为本,程序员首先是人    680

28.6 向上管理           686

第29章 集成            689

29.1 集成方法的重要性不可小觑   689

29.2 集成的频率,按阶段还是按增量?            691

29.3 增量集成策略         694

29.4 每日构建和冒烟测试      702

第30章 编程工具          709

30.1 设计工具           710

30.2 源代码工具          710

30.3 可执行代码工具        716

30.4 面向工具的编程环境      720

30.5 自己构建编程工具       721

30.6 工具魔境           722

第VII 部分 软件匠艺

第31章 布局和风格         729

31.1 布局基础           730

31.2 布局             736

31.3 布局风格           738

31.4 控制结构的布局        745

31.5 单条语句的布局        753

31.6 注释的布局          763

31.7 子例程的布局         766

31.8 类的布局           768

第32章 自带文档说明的代码     777

32.1 内部文档           777

32.2 编程风格也是一种文档     778

32.3 注释,加还是不加,这是个问题             781

32.4 有效注释的关键        785

32.5 加注释的技术         792

32.6 IEEE标准           813

第33章 个性            819

33.1 个性和软件构建主题有关系吗            820

33.2 精明和谦逊          821

33.3 好奇心            822

33.4 睿智的真诚          826

33.5 交流与合作          828

33.6 创造性和规范性        829

33.7 懒有懒的道理         830

33.8 性格其实没有太大关系     830

33.9 习惯             833

第34章 软件匠艺的话题       837

34.1 征服复杂性          837

34.2 选择适合自己的流程      839

34.3 写程序的时候,首先考虑到人,

其次才考虑机器        841

34.4 写程序的时候,思维优先,不要受限于语言        843

34.5 专注于编程约定的帮助文档   844

34.6 以问题域来考虑编程      845

34.7 注意落石           848

34.8 迭代、重复,反复练习     850

34.9 软件与信仰,各自心生欢喜   851

第35章 更多信息来源        855

35.1 与软件构建相关的信息     856

35.2 软件构建之外的话题      857

35.3 期刊             859

35.4 软件开发人员的阅读计划    860

35.5 加入专业组织         862