C++程序设计实践与技巧 测试驱动开发

C++程序设计实践与技巧 测试驱动开发 pdf epub mobi txt 电子书 下载 2025

[美] 杰夫兰格(Jeff Langr) 著,余飞,秦涛 译
图书标签:
  • C++
  • 测试驱动开发
  • 程序设计
  • 实践
  • 技巧
  • 软件工程
  • 代码质量
  • 单元测试
  • 编程
  • 开发
  • 算法
想要找书就要到 静流书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 人民邮电出版社
ISBN:9787115438959
版次:1
商品编码:12015731
包装:平装
丛书名: 图灵程序设计丛书
开本:16开
出版时间:2016-11-01
用纸:胶版纸
页数:283
正文语种:中文

具体描述

编辑推荐

  本书是市面上全面介绍C++测试驱动开发的新书。  全书内容丰富,几乎讨论了所有有关测试驱动开发方面的问题,并配以大量示例。  全书兼顾设计原则与编程实践,帮助读者深入理解测试驱动开发。

内容简介

  本书是一本关于设计原则、编程实践、测试驱动开发的指南,旨在帮助C++ 程序员用测试驱动开发方法构建高性能解决方案。全书共11 章,涵盖测试驱动开发的基本工作方式、潜在好处、怎样利用测试驱动开发解决设计缺陷、测试驱动开发的难点和成本、怎样利用测试驱动开发减少甚至免除调试工作,以及如何长时间维持测试驱动开发。  本书适合所有技术层次的C++ 程序员阅读。

作者简介

  Jeff Langr,杰出程序员,C++语言专家,曾在Bob大叔的Object Mentor公司工作,后创建Langr Software Solutions公司。出版过多本与测试驱动开发相关的图书,如《Agile Java:测试驱动开发的编程技术》等。

目录

第1 章 环境设置 1
1.1 开场白 1
1.2 示例程序 1
1.3 C++编译器 2
1.3.1 Ubuntu 2
1.3.2 OS X 2
1.3.3 Windows 3
1.4 CMake 4
1.5 Google Mock 5
1.5.1 安装Google Mock 5
1.5.2 创建main 函数运行Google Mock 测试 7
1.6 CppUTest 7
1.6.1 安装CppUTest 7
1.6.2 创建main 函数以运行CppUTest 测试 8
1.7 libcurl 8
1.8 JsonCpp 8
1.9 rlog 9
1.10 Boost 10
1.11 构建示例并运行测试 10
1.12 结束语 11
第2 章 测试驱动开发:第一个示例 12
2.1 开场白 12
2.2 Soundex 类 12
2.3 开始吧 13
2.4 去掉不干净的代码 19
2.5 增量性 21
2.6 fixture 与设置 23
2.7 思索与测试驱动开发 25
2.8 测试驱动与测试 28
2.9 如果出现别的情况呢 30
2.10 一次只做一件事 31
2.11 限制长度 32
2.12 丢掉元音 34
2.13 让测试自我澄清 34
2.14 跳出条条框框来测试 36
2.15 言归正传 38
2.16 重构至单一责任的函数 39
2.17 收尾工作 40
2.18 漏了什么测试吗 41
2.19 解决方案 42
2.20 Soundex 类 43
2.21 结束语 46
第3 章 测试驱动开发基础 47
3.1 开场白 47
3.2 单元测试和测试驱动开发基础知识 47
3.2.1 单元测试的组织和执行 47
3.2.2 测试驱动单元 48
3.3 测试驱动开发周期:红—绿—重构 49
3.4 测试驱动开发的三条准则 50
3.5 表里不一 51
3.5.1 运行了错误的测试 52
3.5.2 测试了错误的代码 52
3.5.3 不当的测试规范 53
3.5.4 对系统的无效假设 53
3.5.5 不佳的测试顺序 53
3.5.6 相关联的产品代码 56
3.5.7 过度编码 58
3.5.8 确定性测试 59
3.5.9 停下来想一下 59
3.6 成功运用测试驱动开发的思维 59
3.6.1 增量性 59
3.6.2 测试行为而非方法 60
3.6.3 使用测试来描述行为 60
3.6.4 保持简单 61
3.6.5 恪守测试驱动开发周期 62
3.7 成功运用测试驱动开发的方法 62
3.7.1 下一个测试是什么 62
3.7.2 十分钟限制 64
3.7.3 代码缺陷 64
3.7.4 禁用测试 65
3.8 结束语 66
第4 章 测试结构 67
4.1 开场白 67
4.2 组织方式 67
4.2.1 文件组织 67
4.2.2 fixture 68
4.2.3 Setup 与Teardown 69
4.2.4 Arrange-Act-Assert/Given-When-Then 72
4.3 快速测试、慢速测试、过滤器和测试集 73
4.4 断言 75
4.4.1 经典的断言形式 76
4.4.2 Hamcrest 断言 76
4.4.3 选择正确的断言 78
4.4.4 浮点数比较 78
4.4.5 基于异常的测试 79
4.5 探查私有成员 81
4.5.1 私有数据 81
4.5.2 私有行为 82
4.6 测试和测试驱动:参数化的测试及其他方法 85
4.6.1 参数化测试 85
4.6.2 测试中的注释 87
4.7 结束语 87
第5 章 测试替身 88
5.1 开场白 88
5.2 依赖问题 88
5.3 测试替身 89
5.4 手动打造的测试替身 90
5.5 在使用测试替身时提升测试的抽象程度 94
5.6 使用模拟对象工具 96
5.6.1 定义一个派生类 96
5.6.2 设立期望 97
5.6.3 松模拟和严模拟 100
5.6.4 模拟对象中的顺序 101
5.6.5 巧妙的模拟工具特性 102
5.6.6 排除模拟失败 104
5.6.7 一个还是两个测试 104
5.7 让测试替身各就各位 105
5.7.1 覆写工厂方法和覆写Getter 105
5.7.2 使用工厂 107
5.7.3 通过模板参数 109
5.7.4 注入工具 110
5.8 设计会变化 110
5.8.1 内聚与耦合 110
5.8.2 转嫁私有依赖 112
5.9 使用测试替身的策略 113
5.9.1 探索设计 113
5.9.2 mock 流派 114
5.9.3 明智地使用测试替身 115
5.10 其他关于测试替身的主题 115
5.10.1 怎么称呼它们 116
5.10.2 测试替身该放在哪 116
5.10.3 虚函数表和性能 117
5.10.4 模拟具体的类 117
5.11 结束语 118
第6 章 增量设计 119
6.1 开场白 119
6.2 简单设计 119
6.2.1 重复代码的代价 120
6.2.2 投资管理器 120
6.2.3 投资管理器中的简单重复 122
6.2.4 我们真的能坚持增量方法吗 124
6.2.5 更多的重复 129
6.2.6 小方法的好处 132
6.2.7 完成功能 134
6.2.8 增量设计让事情变得简单 138
6.3 预先设计在哪 141
6.3.1 哪里才会讨论真正的设计呢 142
6.3.2 简单设计原则和经典设计
理念会在哪起冲突 143
6.4 阻碍重构的因素 143
6.5 结束语 145
第7 章 高质量测试 146
7.1 开场白 146
7.2 测试先行 146
7.2.1 快速 146
7.2.2 独立 148
7.2.3 可重复 149
7.2.4 自我验证 150
7.2.5 及时 150
7.3 一个测试一个断言 150
7.4 测试抽象 153
7.4.1 臃肿的初始化 153
7.4.2 不相关的细节 154
7.4.3 缺失的抽象 156
7.4.4 多重断言 157
7.4.5 不相关的数据 157
7.4.6 不必要的测试代码 158
7.5 结束语 164
第8 章 遗留代码的挑战 165
8.1 开场白 165
8.2 遗留代码 165
8.3 法则 166
8.4 遗留应用程序 167
8.5 保持测试驱动开发的心态 170
8.6 支持测试的安全重构 171
8.7 添加测试刻画已有行为 174
8.8 被遗留代码转移注意力 175
8.9 为rlog 创建测试替身 175
8.10 测试驱动开发改动 179
8.11 新的场景 181
8.12 寻求更快测试的简要探索 182
8.13 立竿见影的提炼 183
8.14 用成员变量查看状态 186
8.15 用mock 查看状态 187
8.16 其他注入技巧 191
8.17 用Mikado 方法大规模改动代码 192
8.18 Mikado 方法概览 192
8.19 用Mikado 移动一个方法 193
8.20 有关Mikado 方法的更多思考 202
8.21 这样做值得吗 203
8.22 结束语 203
第9 章 测试驱动开发与多线程 204
9.1 开场白 204
9.2 测试驱动开发多线程应用的核心概念 204
9.3 示例程序GeoServer 205
9.4 性能要求 211
9.5 设计异步方案 213
9.6 依然简单的测试驱动 216
9.7 为多线程做好准备 218
9.8 暴露并发性问题 220
9.9 在测试中创建客户端线程 222
9.10 在ThreadPool 中创建多个线程 224
9.11 回到GeoServer 226
9.12 结束语 230
第10 章 测试驱动开发的其他概念和讨论 231
10.1 开场白 231
10.2 测试驱动开发与性能 231
10.2.1 性能优化测试的策略 232
10.2.2 相关单元级性能测试 233
10.2.3 尝试优化GeoServer 代码 234
10.2.4 TestTimer 类 235
10.2.5 性能和小函数 236
10.2.6 推荐 237
10.3 单元测试、集成测试和验收测试 238
10.3.1 测试驱动开发如何与验收测试建立联系 239
10.3.2 程序员定义的集成测试 239
10.3.3 测试驱动开发和验收测试驱动开发的重合部分 240
10.4 变换优先级假设 241
10.4.1 了解变换 241
10.4.2 三角法 242
10.4.3 浏览测试列表 243
10.5 编写断言 252
10.5.1 断言—行为—排列 253
10.5.2 示例程序优先,或至少第二 253
10.6 结束语 255
第11 章 发展和维持测试驱动开发 256
11.1 开场白 256
11.2 向非技术人员解释测试驱动开发 256
11.2.1 测试驱动什么 257
11.2.2 关于TDD 的研究 259
11.3 不良测试的死亡漩涡(亦称为SCUMmy 周期) 260
11.4 结对编程 261
11.4.1 结对原则 262
11.4.2 结对编程与测试驱动开发 262
11.4.3 角色切换 263
11.5 Kata 和Dojo 264
11.5.1 在测试驱动开发中应用Kata 264
11.5.2 Dojo 265
11.6 有效地使用代码覆盖率统计 266
11.7 持续集成 267
11.8 为团队制定测试驱动开发标准 268
11.9 保持与社区同步 268
11.9.1 阅读测试 268
11.9.2 博客与论坛 269
11.10 结束语 269
附录A 比较单元测试工具 270
附录B 代码Kata:罗马数字转换器 273
附录C 参考文献 282
《Python程序开发实战:高效编码与项目实践》 简介: 在当今快速发展的技术浪潮中,Python以其简洁的语法、强大的库支持以及广泛的应用领域,成为了开发者们的宠儿。无论你是初学者渴望踏入编程世界,还是经验丰富的开发者希望提升技能,掌握Python都意味着打开了通往无限可能的大门。 《Python程序开发实战:高效编码与项目实践》正是为你量身打造的一本深度学习指南。它不仅仅是简单的语法罗列,更侧重于通过大量的实战案例和精炼的技巧,帮助你构建扎实的Python编程基础,并培养出高效、规范的开发习惯。本书将引领你从Python的基础概念出发,逐步深入到高级特性和实际应用,让你能够自信地驾驭各种Python项目,解决实际问题。 本书内容详情: 第一部分:Python编程基石的夯实 Python环境搭建与入门: 我们将从最基础的Python安装和配置讲起,介绍不同操作系统的安装方法,并演示如何使用交互式解释器进行初步的代码编写。你将学习如何编写你的第一个Python程序“Hello, World!”,并理解print()函数、注释等基本要素。 变量、数据类型与运算符: 深入理解Python中丰富的内置数据类型,包括整数(int)、浮点数(float)、字符串(str)、布尔值(bool)等。学习如何声明和使用变量,以及掌握算术运算符、比较运算符、逻辑运算符等,为后续的程序逻辑构建奠定基础。 数据结构:列表、元组、字典与集合: Python强大的数据结构是其灵活性的重要体现。本书将详细讲解列表(list)的创建、访问、修改和常用方法,以及列表推导式的妙用;探索元组(tuple)的不可变特性及其应用场景;深入理解字典(dict)的键值对存储机制、遍历和操作;最后介绍集合(set)的无序性和唯一性,以及集合运算在去重和成员判断中的作用。 流程控制语句:条件判断与循环: 掌握if-elif-else语句,学习如何根据条件执行不同的代码块;精通for循环和while循环,理解它们的区别和应用场景,并通过练习来巩固循环的控制。我们将演示如何使用break和continue来控制循环的流程。 函数:代码的复用与模块化: 函数是实现代码复用和模块化的核心。本书将指导你如何定义函数,理解参数传递(位置参数、关键字参数、默认参数、可变参数),学习函数的返回值,以及如何使用lambda表达式创建匿名函数。你还将了解到作用域(局部作用域、全局作用域)的概念。 文件I/O操作:读写文本与二进制文件: 掌握Python进行文件读写的各项技术,包括打开、读取、写入和关闭文件。学习如何以不同的模式(如r、w、a、rb、wb)打开文件,以及使用read()、readline()、readlines()、write()等方法进行数据交互。还将介绍with语句的使用,确保文件资源的正确释放。 异常处理:健壮程序的关键: 编写高质量的代码离不开异常处理。本书将教授你如何使用try-except-else-finally语句块来捕获和处理运行时可能出现的错误,防止程序崩溃。你将学习如何自定义异常类型,使你的程序更加健壮。 第二部分:Python进阶技巧与应用 面向对象编程(OOP): 深入理解Python的面向对象特性,包括类(class)的定义、对象的创建、属性和方法的访问。学习封装、继承和多态这三大面向对象的核心概念,并通过实际案例演示如何设计和实现面向对象的程序。你将掌握构造函数(__init__)、析构函数(__del__)、类变量、实例变量等。 模块与包:代码的组织与复用: 学习如何创建和导入自定义模块,以及如何利用Python的标准库和第三方库来扩展程序的功能。理解包(package)的概念,学习如何组织和管理大型项目中的代码。我们将介绍pip包管理器,以及如何安装和使用常用的第三方库。 迭代器与生成器:高效处理大数据: 探索Python的迭代器协议,理解iter()和next()函数。学习如何创建自定义迭代器,以及生成器(generator)的优势,特别是在处理大量数据时,它能够显著节省内存。你将学会使用yield关键字来定义生成器函数。 装饰器:优雅地扩展函数功能: 装饰器是一种强大的Python特性,能够让你在不修改原函数代码的情况下,为其添加额外的功能,如日志记录、性能度量、权限控制等。本书将详细讲解装饰器的原理,并通过多个实用案例展示其用法。 上下文管理器:资源管理的最佳实践: 学习如何编写自己的上下文管理器,利用__enter__和__exit__方法来优雅地管理资源,例如文件句柄、网络连接等,确保资源的正确获取和释放,避免资源泄露。 正则表达式:强大的文本匹配利器: 掌握正则表达式,这是一种用于匹配字符串中特定模式的强大工具。你将学习如何使用Python的re模块进行模式编译、搜索、匹配、替换和分割,这对于文本处理、数据清洗和信息提取至关重要。 并发与并行编程基础: 了解Python中实现并发与并行的方法,包括多线程(threading)和多进程(multiprocessing)的概念,以及它们在解决CPU密集型和I/O密集型任务时的不同适用场景。 第三部分:Python实战项目与开发流程 Web开发入门:使用Flask或Django构建Web应用: (根据具体选择的库进行详细介绍)我们将选取一个流行的Python Web框架(例如Flask),从零开始指导你搭建一个简单的Web应用,包括路由、模板渲染、表单处理等。你将学习如何利用Python构建动态网站和API服务。 数据分析与可视化:使用Pandas和Matplotlib: 学习如何使用Pandas库进行数据清洗、处理和分析,掌握DataFrame和Series的使用。结合Matplotlib库,学习如何创建各种类型的图表,将数据可视化,以便更好地理解数据和展示分析结果。 自动化脚本编写:提升工作效率: 学习如何利用Python编写各种自动化脚本,例如文件管理、网络爬虫、数据批量处理等,极大地提高工作效率。我们将演示如何与操作系统交互,如何发送HTTP请求,以及如何解析HTML内容。 版本控制:Git与GitHub的最佳实践: 掌握Git版本控制系统的基本命令和工作流程,学习如何使用GitHub进行代码托管、团队协作和项目管理。理解分支、合并、提交等概念,养成良好的版本控制习惯。 单元测试与代码调试:保证程序质量: 学习如何编写单元测试,使用Python的unittest或pytest框架来验证代码的正确性。掌握使用调试器(如pdb)来定位和解决程序中的bug,这是保证代码质量和可维护性的重要环节。 代码风格与性能优化:编写高质量、高效率的代码: 介绍PEP 8代码风格指南,学习如何编写清晰、易读、易于维护的代码。探讨一些常见的Python性能优化技巧,例如使用更高效的数据结构,避免不必要的计算,以及利用内置函数等。 谁适合阅读本书? 初学者: 希望系统学习Python编程,打下坚实基础的零基础学习者。 在校学生: 计算机科学、软件工程及相关专业的学生,用于课程学习和项目实践。 转行开发者: 希望掌握Python这门热门语言,拓展职业发展道路的IT从业者。 希望提升技能的Python开发者: 想要深入理解Python高级特性,掌握实战开发技巧的已有Python基础的开发者。 对数据科学、Web开发、自动化等领域感兴趣的读者: 希望利用Python实现这些领域的学习和实践。 本书的特色: 理论与实践深度结合: 每一章节都配有大量的代码示例和练习题,帮助读者巩固所学知识。 循序渐进的难度设计: 从基础概念到高级技巧,再到实际项目,难度逐步提升,适合不同水平的读者。 注重开发习惯的培养: 强调编写高质量、可读性强、可维护的代码,并介绍版本控制、单元测试等工程实践。 覆盖广泛的应用领域: 通过实战项目,展示Python在Web开发、数据分析、自动化等领域的强大能力。 清晰易懂的语言: 使用简洁明了的语言解释复杂概念,避免晦涩难懂的术语。 《Python程序开发实战:高效编码与项目实践》将是你学习Python、提升编程能力、实现项目目标的得力助手。现在就开始你的Python学习之旅吧!

用户评价

评分

拿到这本书,第一感觉就是它的排版非常舒适,字体大小适中,行间距也让人阅读起来不费力。我一直认为,一本技术书籍的阅读体验,很大程度上决定了读者能否坚持读下去。这本书的章节划分也很清晰,感觉逻辑性很强,这对于我这种喜欢按部就班学习的读者来说,无疑是个福音。我特别关注的是它是否能讲解清楚 TDD 的核心原则,比如“红-绿-重构”这个循环在 C++ 项目中具体如何落地?是否会涉及到 C++ 中常用的测试框架,比如 Google Test 或 Catch2,并且会给出详细的使用指南?另外,对于 C++ 程序设计,我一直在寻找能够提升代码优雅性和可维护性的方法,这本书如果能将 TDD 和 C++ 的设计模式、面向对象原则等结合起来讲解,那绝对是锦上添花了。我希望能看到一些关于如何分解复杂问题、如何编写更具扩展性和模块化的 C++ 代码的 TDD 实践。如果书中能有详细的图示,比如流程图或者类图,来辅助说明 TDD 的流程或者代码结构,那会大大提升我的理解效率。

评分

坦白说,我是一名在工作中接触 C++ 的开发者,每天面对的都是遗留代码的维护和新功能的开发,时间压力非常大。很多时候,为了赶进度,代码质量和测试覆盖率都很难得到保证,这让我非常苦恼。我一直在寻找一种方法,能够在保证开发速度的同时,显著提升代码质量,减少 bug 的产生。测试驱动开发(TDD)听起来非常美好,但实践起来总感觉步子迈不开。我希望这本书能够提供一些“接地气”的 TDD 技巧,能够教会我在实际项目中,如何在不影响现有开发节奏的情况下,逐步引入 TDD。比如,针对遗留代码如何进行测试改造?如何从简单的功能开始,逐步建立起测试体系?我更希望这本书能分享一些作者在 C++ TDD 实践中的“踩坑”经验和解决方案,这样可以避免我走弯路。如果书中能够给出一些实际项目中遇到的典型问题,并展示如何用 TDD 来解决,那对我来说,将是极大的帮助。我尤其关心如何在 C++ 的多线程、内存管理等方面运用 TDD,这些都是 C++ 开发中比较棘手的环节。

评分

我是一名正在学习 C++ 的学生,对于如何在实际项目中应用所学的知识,一直感到有些迷茫。学校里的课程虽然讲解了 C++ 的语法和基础概念,但对于如何编写出高质量、可维护的代码,以及如何保证代码的正确性,着重强调的还是比较少。测试驱动开发(TDD)这个概念对我来说既陌生又充满吸引力,我希望这本书能够从零开始,清晰地讲解 TDD 的理念和流程,并将其与 C++ 的学习结合起来。我期待书中能够提供一些简单的 C++ 小项目,通过 TDD 的方式逐步完成,让我能够亲身感受到 TDD 的好处。例如,如何设计一个简单的命令行工具,如何实现一个基础的数据结构,然后在 TDD 的指导下逐步完成。我希望这本书能够引导我养成良好的编程习惯,让我明白编写测试的重要性,以及如何编写有用的、有价值的测试。如果书中还能提及一些关于测试用例设计原则的讲解,那对我来说将是莫大的帮助。

评分

这本书的封面设计非常吸引人,深邃的蓝色背景搭配简洁的 C++ 图标,一下子就点明了主题。我之前接触过一些 C++ 的基础书籍,但总觉得在实际项目开发中,理论知识和实际操作之间总有一层隔阂,很难把学到的东西融会贯通。特别是对于测试驱动开发(TDD)这种在敏捷开发中越来越重要的实践,我一直想深入了解,但市面上很多 TDD 的书要么过于理论化,要么只讲了某个特定语言的框架,没有 C++ 这种底层语言的针对性指导。所以,当看到这本书的书名时,我的内心是既期待又忐忑的。期待的是它能填补我在 C++ TDD 领域的知识空白,能够提供一套切实可行、落地到代码的开发流程。忐忑的是,C++ 本身就以复杂著称,再加上 TDD 的理念,真的能做到“实践与技巧”的完美结合吗?我希望这本书能真正地从“为什么要做 TDD”讲到“怎么在 C++ 项目中高效地实践 TDD”,并提供一些具体的代码示例和实际案例,而不是泛泛而谈。我更看重它能教会我如何设计可测试的代码,如何写出高质量的单元测试,以及如何在 TDD 的过程中,有效地利用 C++ 的特性来提升开发效率和代码质量。

评分

这本书的副标题“实践与技巧”让我对它充满了期待。我之前读过一些关于 C++ 的书,有些过于理论化,读起来像在啃一本字典,还有些则过于偏重某个特定领域的应用,比如游戏开发或者嵌入式系统,而我更希望一本能够覆盖 C++ 程序设计的通用实践和技巧的书籍。而 TDD 的加入,更是让我觉得这本书非常有价值。我希望它不仅仅是教我写测试,而是能够教会我如何通过测试来驱动设计,如何写出更易于测试、更易于维护的代码。我期待书中能够详细讲解 C++ 中一些高级特性,比如模板元编程、智能指针、STL 容器等,在 TDD 的场景下如何更好地应用。如果书中能够提供一些关于代码重构的技巧,以及如何利用 TDD 来保障重构的安全性,那将是我的福音。我希望这本书能够真正地提升我的 C++ 编程内功,让我写出的代码不仅功能正确,而且结构清晰,性能优越。

评分

好书,正版,包装完美,物流很快!一个字:赞!

评分

不错,效果很好,以后有需要还会再买,谢谢京东,提供方便

评分

字有点小了,内容还是不错的,写代码之前要好好想想

评分

字有点小了,内容还是不错的,写代码之前要好好想想

评分

很满意的一次购物

评分

很满意的一次购物

评分

好。

评分

公司采购的书 还不错吧 速度很快

评分

送货及时,物美价廉,不错!

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.coffeedeals.club All Rights Reserved. 静流书站 版权所有