开发工具:
文件大小: 2mb
下载次数: 0
上传时间: 2009-05-06
详细说明: 书中主要介绍的内容如下:我大致列了一下: 第I篇 代码表面第一部分 第1章 善于防守——健壮代码的防御性编程技巧 3 1.1 向优秀的代码前进 4 1.2 设想:最坏的选择 4 1.3 什么是防御性编程 6 1.4 又大又坏的世界 8 1.5 防御性编程技巧 8 1.5.1 使用好的编码风格和合理的设计 9 1.5.2 不要仓促地编写代码 9 1.5.3 不要相信任何人 10 1.5.4 编码的目标是清晰,而不是简洁 10 1.5.5 不要让任何人做他们不该做的修补工作 11 1.5.6 编译时打开所有警告开关 11 1.5.7 使用静态分析工具 12 1.5.8 使用安全的数据结构 12 1.5.9 检查所有的返回值 13 1.5.10 审慎地处理内存(和其他宝贵的资源) 13 1.5.11 在声明位置初始化所有变量 14 1.5.12 尽可能推迟一些声明变量 14 1.5.13 使用标准语言工具 14 1.5.14 使用好的诊断信息日志工具 15 1.5.15 审慎地进行强制转换 15 1.5.16 细则 15 1.6 约束 16 1.6.1 约束的内容 17 1.6.2 移除约束 18 1.7 总结 20 1.8 另请参见 20 1.9 思考 21 1.9.1 深入思考 21 1.9.2 结合自己 22 第2章 精心布局——源代码的版面和样式 23 2.1 什么是关键 24 2.2 了解你的读者 25 2.3 什么是好的样式 26 2.4 使用括号 26 2.4.1 K&R括号风格 27 2.4.2 悬挂式的括号风格 27 2.4.3 缩进的括号风格 29 2.4.4 其他的括号风格 29 2.5 主宰一切的风格 30 2.6 内部风格(以及在哪里使用它们) 31 2.7 设立标准 33 2.8 正义的战争 35 2.9 总结 35 2.10 另请参见 37 2.11 思考 37 2.11.1 深入思考 37 2.11.2 结合自己 38 第3章 名正言顺——为有意义的事物起有意义的名称 39 3.1 为什么我们应该恰当地命名呢 41 3.2 我们对什么进行命名 41 3.3 名字游戏 42 3.3.1 描述性 42 3.3.2 技术上正确 42 3.3.3 符合语言习惯 43 3.3.4 恰当 43 3.4 具体细节 44 3.4.1 命名变量 44 3.4.2 命名函数 45 3.4.3 命名类型 46 3.4.4 命名名字空间 47 3.4.5 命名宏 48 3.4.6 命名文件 48 3.5 玫瑰不叫玫瑰 49 3.5.1 保持前后一致 50 3.5.2 利用上下文 51 3.5.3 使用对你有利的名称 51 3.6 总结 52 3.7 另请参见 53 3.8 思考 53 3.8.1 深入思考 54 3.8.2 结合自己 55 第4章 不言自明——编写“自文档化”代码的技巧 57 4.1 自文档化的代码 59 4.2 编写自文档化代码的技术 61 4.2.1 使用好的样式编写简单的代码 61 4.2.2 选择有意义的名称 62 4.2.3 分解为原子函数 62 4.2.4 选择描述性的类型 63 4.2.5 命名常量 63 4.2.6 强调重要的代码 64 4.2.7 分组相关信息 64 4.2.8 提供文件头 64 4.2.9 恰当地处理错误 65 4.2.10 编写有意义的注释 65 4.3 实用的自文档化方法 66 4.3.1 文学性编程 66 4.3.2 文档化工具 67 4.4 总结 69 4.5 另请参见 70 4.6 思考 71 4.6.1 深入思考 71 4.6.2 结合自己 72 第5章 随篇注释——如何编写代码注释 73 5.1 什么是代码注释 74 5.2 注释看上去是什么样的 75 5.3 多少注释是恰当的 75 5.4 注释中应该有些什么 76 5.4.1 解释为什么,而不是怎么样 76 5.4.2 不要描述代码 76 5.4.3 不要取代代码 76 5.4.4 确保注释有用 77 5.4.5 避免分心 78 5.5 实践 79 5.6 从审美的角度看注释 80 5.6.1 一致性 80 5.6.2 清晰的块注释 80 5.6.3 缩进的注释 81 5.6.4 行尾注释 81 5.6.5 帮助你阅读代码 81 5.6.6 选择一种维护成本较低的风格 82 5.6.7 分隔板 82 5.6.8 标志 83 5.6.9 文件头注释 83 5.7 使用注释 84 5.7.1 帮助你编写例行程序 84 5.7.2 错误修正通告 85 5.7.3 注释过时 85 5.7.4 维护和空洞无物的注释 86 5.8 总结 86 5.9 另请参见 87 5.10 思考 87 5.10.1 深入思考 88 5.10.2 结合自己 88 第6章 人非圣贤——处理不可避免的情况——代码中的错误情形 89 6.1 从何而来 90 6.2 错误报告机制 91 6.2.1 不报告 91 6.2.2 返回值 92 6.2.3 错误状态变量 93 6.2.4 异常 93 6.2.5 信号 95 6.3 检测错误 95 6.4 处理错误 96 6.4.1 何时处理错误 97 6.4.2 可能的反应 98 6.4.3 代码示例 100 6.5 使地狱浮现 104 6.6 管理错误 105 6.7 总结 106 6.8 另请参见 107 6.9 思考 107 6.9.1 深入思考 107 6.9.2 结合自己 108 第II篇 代码的神秘生命 第7章 欲善其事,先利其器——使用工具构建软件 111 7.1 什么是软件工具 112 7.2 为什么要在意工具 114 7.3 使工具发挥作用 115 7.3.1 了解它能做些什么 115 7.3.2 学习如何驾驭它 116 7.3.3 了解它适合什么任务 116 7.3.4 检查它是否可用 116 7.3.5 找到了解更多信息的途径 117 7.3.6 查明新版本何时出现 117 7.4 哪个工具 117 7.4.1 源代码编辑工具 118 7.4.2 代码构建工具 120 7.4.3 调试和调查工具 123 7.4.4 语言支持工具 124 7.4.5 其他工具 125 7.5 总结 126 7.6 另请参见 127 7.7 思考 128 7.7.1 深入思考 128 7.7.2 结合自己 128 第8章 测试时代——测试代码的魔术 129 8.1 反思现实 131 8.2 谁、是什么、何时以及为什么 132 8.2.1 我们为什么要测试 132 8.2.2 谁来进行测试 133 8.2.3 测试的内容有些什么 133 8.2.4 何时进行测试 134 8.3 测试并不难…… 135 8.4 测试的类型 138 8.5 选择单元测试用例 142 8.6 为测试而设计 144 8.7 看!不要用手! 144 8.8 面对故障该怎么办 145 8.9 你能管理它吗 146 8.9.1 缺陷跟踪系统 147 8.9.2 bug审查 148 8.10 总结 149 8.11 另请参见 150 8.12 思考 150 8.12.1 深入思考 150 8.12.2 结合自己 151 第9章 寻找缺陷——调试:当事情进展得不顺利时该怎么办 153 9.1 生活的真相 154 9.2 bug的种类 155 9.2.1 从远处看 155 9.2.2 从近处看 156 9.2.3 从更近处看 158 9.3 消灭害虫 160 9.3.1 地下之路 161 9.3.2 地上之路 161 9.4 搜寻bug 162 9.4.1 编译时错误 162 9.4.2 运行时错误 164 9.5 如何修正缺陷 167 9.6 预防 169 9.7 除蜂剂、驱虫剂、捕蝇纸 169 9.7.1 调试器 169 9.7.2 内存访问校验器 170 9.7.3 系统调用跟踪 170 9.7.4 内核转储 170 9.7.5 日志 170 9.8 总结 171 9.9 另请参见 172 9.10 思考 173 9.10.1 深入思考 173 9.10.2 结合自己 173 第10章 代码构建——将源代码转换为可执行代码的过程 175 10.1 语言障碍 176 10.1.1 解释型语言 177 10.1.2 编译型语言 178 10.1.3 字节编译型语言 179 10.2 小题大做 179 10.3 构建软件版本 181 10.4 怎样才算是一个优秀的构建系统 184 10.4.1 简洁 184 10.4.2 一致 184 10.4.3 可重复和可靠 185 10.4.4 原子性 186 10.4.5 能够应付错误 187 10.5 技术细节 187 10.5.1 目标的选择 187 10.5.2 内务处理 189 10.5.3 依赖关系 189 10.5.4 自动构建 190 10.5.5 构建配置 191 10.5.6 递归地使用make 192 10.6 请发布我吧 192 10.7 构建大师是全能的吗 194 10.8 总结 195 10.9 另请参见 195 10.10 思考 196 10.10.1 深入思考 196 10.10.2 结合自己 196 第11章 追求速度——优化程序和编写高效的代码 199 11.1 优化是什么 200 11.2 是什么使代码不尽如人意 201 11.3 为什么不进行优化呢 202 备选方案 204 11.4 为什么要进行优化 205 11.5 优化的具体细节 206 11.5.1 证明你需要进行优化 206 11.5.2 找出运行得最慢的代码 207 11.5.3 测试代码 208 11.5.4 优化代码 209 11.5.5 优化之后 209 11.6 优化的技术 210 11.6.1 设计更改 210 11.6.2 代码更改 213 11.7 编写高效的代码 217 11.8 总结 219 11.9 另请参见 219 11.10 思考 220 11.10.1 深入思考 220 11.10.2 结合自己 221 第12章 不安全感综合症——编写安全的程序 223 12.1 危险 224 12.2 敌人 226 12.3 借口,都是借口 228 12.4 感到很脆弱 229 12.4.1 不安全的设计和体系结构 229 12.4.2 缓冲溢出 229 12.4.3 嵌入的查询字符串 230 12.4.4 竞争状况 231 12.4.5 整数溢出 231 12.5 防范措施 232 12.5.1 系统安装技术 233 12.5.2 软件设计技术 234 12.5.3 代码实现技术 235 12.5.4 规程技术 236 12.6 总结 236 12.7 另请参见 237 12.8 思考 238 12.8.1 深入思考 238 12.8.2 结合自己 238 第III篇 代码的形成过程 第13章 崇尚设计——如何创作出优秀的软件设计 241 13.1 边设计边编程 242 13.2 我们要设计什么 243 13.3 为什么这么忙乱 244 13.4 良好的软件设计 245 13.4.1 简洁 246 13.4.2 优雅 247 13.4.3 模块化 247 13.4.4 良好的接口 248 13.4.5 可扩展性 251 13.4.6 避免重复 251 13.4.7 可移植性 252 13.4.8 符合语言习惯 252 13.4.9 良好地文档化 253 13.5 如何设计代码 253 13.5.1 设计方法和过程 254 13.5.2 设计工具 255 13.6 总结 257 13.7 另请参见 258 13.8 思考 258 13.8.1 深入思考 258 13.8.2 结合自己 259 第14章 软件体系结构——奠定软件设计的基础 261 14.1 什么是软件体系结构 262 14.1.1 软件蓝图 262 14.1.2 视图 263 14.1.3 在何时和何处进行体系结构设计 264 14.1.4 用体系结构来做什么 265 14.1.5 关于组件和连接 266 14.2 什么是良好的体系结构 268 14.3 体系结构风格 269 14.3.1 没有体系结构 269 14.3.2 分层的体系结构 270 14.3.3 管道和过滤器体系结构 271 14.3.4 客户端/服务器体系结构 271 14.3.5 基于组件的体系结构 273 14.3.6 框架 274 14.4 总结 275 14.5 另请参见 276 14.6 思考 276 14.6.1 深入思考 276 14.6.2 结合自己 277 第15章 改良与革命——代码是如何成长的 279 15.1 软件腐烂 281 15.2 警告信号 282 15.3 代码是如何成长的 284 15.4 相信不可能之事 286 15.5 对此我们可以做些什么 287 15.5.1 编写新代码 287 15.5.2 维护现有代码 288 15.6 总结 290 15.7 另请参见 290 15.8 思考 291 15.8.1 深入思考 292 15.8.2 结合自己 292 第IV篇 “一群”程序员第一部分 第16章 代码猴子——培养正确的编程态度和方法 295 16.1 各种各样的猴子 296 16.1.1 卖力工作的程序员 297 16.1.2 代码猴子 298 16.1.3 权威 299 16.1.4 半权威 300 16.1.5 傲慢的天才 300 16.1.6 牛仔 302 16.1.7 规划者 302 16.1.8 老前辈 303 16.1.9 狂热者 304 16.1.10 单线条程序员 305 16.1.11 拖沓者 306 16.1.12 勉强的团队领导 306 16.1.13 你 307 16.2 理想的程序员 308 16.3 那么该怎么办 308 16.4 最愚蠢的人 309 16.5 总结 310 16.6 另请参见 310 16.7 行为表格 311 16.8 思考 312 16.8.1 深入思考 312 16.8.2 结合自己 312 第17章 团结就是力量——团队合作与个人程序员 315 17.1 我们的团队——概览 316 17.2 团队组织 318 17.2.1 管理方法 318 17.2.2 责任划分 318 17.2.3 组织和代码结构 320 17.3 团队合作工具 320 17.4 团队疾病 322 17.4.1 巴别塔 322 17.4.2 独裁制 324 17.4.3 *制 325 17.4.4 卫星站 327 17.4.5 大峡谷 329 17.4.6 流沙 330 17.4.7 旅鼠 332 17.5 良好团队合作的个人技巧和特点 333 17.5.1 沟通 333 17.5.2 谦虚 334 17.5.3 处理冲突 334 17.5.4 学习和适应能力 335 17.5.5 了解你的不足之处 336 17.6 团队合作原则 336 17.6.1 集体代码所有制 336 17.6.2 尊重别人的代码 337 17.6.3 编码准则 337 17.6.4 定义成功 337 17.6.5 定义责任 338 17.6.6 避免倦怠 338 17.7 团队的生命周期 339 17.7.1 团队的创建 339 17.7.2 团队的成长 341 17.7.3 团队合作 342 17.7.4 团队结束 343 17.8 总结 345 17.9 另请参见 346 17.10 行为表格 347 17.11 思考 348 17.11.1 深入思考 348 17.11.2 结合自己 348 第18章 安全措施——源代码控制与自我控制 349 18.1 我们的责任 350 18.2 源代码控制 351 18.2.1 修订控制 352 18.2.2 访问控制 353 18.2.3 处理代码库 354 18.2.4 在代码树上创建分支 354 18.2.5 源代码控制简史 356 18.3 配置管理 356 18.4 备份 358 18.5 发布源代码 359 18.6 应该将源代码放在哪里 360 18.7 总结 361 18.8 另请参见 362 18.9 思考 363 18.9.1 深入思考 363 18.9.2 结合自己 363 第V篇 开发过程的组成部分第一部分 第19章 注意细节——编写软件规范 367 19.1 规范到底是什么 368 19.2 规范的类型 369 19.2.1 需求规范 371 19.2.2 功能规范 373 19.2.3 系统体系结构规范 373 19.2.4 用户界面规范 374 19.2.5 设计规范 374 19.2.6 测试规范 375 19.3 规范应当包含哪些内容 376 19.4 规范编写过程 379 19.5 我们为什么会不编写规范 381 19.6 总结 383 19.7 另请参见 383 19.8 思考 384 19.8.1 深入思考 384 19.8.2 结合自己 384 第20章 代码审查——执行代码审查 385 20.1 什么是代码审查 386 20.2 何时进行审查 387 20.2.1 是否要进行审查 388 20.2.2 审查哪些代码 389 20.3 执行代码审查 389 20.3.1 代码审查会议 390 20.3.2 集成审查 392 20.4 审查你的态度 393 20.4.1 作者的态度 393 20.4.2 审查人员的态度 394 20.5 完美的代码 395 20.6 代码审查之外 396 20.7 总结 397 20.8 另请参见 397 20.9 清单 398 20.10 思考 399 20.10.1 深入思考 399 20.10.2 结合自己 399 第21章 时间估计——软件时间范围估计的魔术 401 21.1 在黑暗中摸索 402 21.2 为什么估计这么困难? 403 21.3 压力之下 405 21.4 实用的估计方法 406 21.5 计划游戏 409 21.6 坚持! 412 21.7 总结 415 21.8 另请参见 415 21.9 思考 416 21.9.1 深入思考 416 21.9.2 结合自己 416 第VI篇 从高处鸟瞰 第22章 程序秘方——代码开发的方法和过程 419 22.1 编程风格 420 22.1.1 结构化编程 421 22.1.2 面向对象的程序设计 422 22.1.3 函数式编程 423 22.1.4 逻辑编程 424 22.2 烹饪方法:做什么与怎样做 424 22.3 开发过程 425 22.3.1 混乱 426 22.3.2 瀑布模型 427 22.2.3 SSADM和PRINCE 429 22.3.4 V模型 430 22.3.5 原型设计 430 22.3.6 迭代和增量开发 432 22.3.7 螺旋模型 432 22.3.8 敏捷的方法 433 22.3.9 其他开发过程 434 22.4 已经够了! 435 22.5 选择一种过程 436 22.6 总结 437 22.7 另请参见 438 22.8 思考 438 22.8.1 深入思考 438 22.8.2 结合自己 439 第23章 编程领域大观——不同的编程分支 441 23.1 应用程序编程 442 23.1.1 塑装软件 443 23.1.2 定制应用程序 444 23.2 游戏编程 445 23.3 系统编程 446 23.4 嵌入式编程 447 23.5 分布式编程 450 23.6 网络应用程序编程 451 23.7 企业编程 453 23.8 数字编程 454 23.9 那又怎样 455 23.10 总结 456 23.11 另请参见 456 23.12 思考 457 23.12.1 深入思考 457 23.12.2 结合自己 457 第24章 下一步呢——结果好就一切都好 459 但下一步该做什么呢? 460 答案和讨论 463 参考书目 559 索引 564 ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.