搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
优质代码:软件测试的原则、实践与模式:software testing principles, practices, and patterns
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787115375582
  • 作      者:
    (美)Stephen Vance著
  • 出 版 社 :
    人民邮电出版社
  • 出版日期:
    2015
收藏
编辑推荐
  《优质代码:软件测试的原则、实践与模式》专门从软件开发人员和技术人员关注的代码质量的角度来讲软件测试的原理、实践和模式。作者有30多年的软件开发经验,20多年软件测试技术的教授经验。书中积累了来自大量高水准软件工程师的多年经验。无论你是在写一个新系统,还是试图驾驭一个遗留系统,本书都会让你高效地开发高质量的代码。
  测试驱动、测试先行和尽早测试这些开发实践,正在帮助成千上万的软件开发组织改善其软件。在本书中,作者立足于所有读者已经熟知的测试驱动开发知识,帮助读者实现前所未有的优质代码。
  为了帮助读者更加全面、有效和轻松地测试任何软件系统,本书使用真实的代码示例介绍了测试的模式、原则和20多个技术细节,并通过两个完整的案例分析,即测试一个全新的Java应用程序和一个未被测试的“遗留”JavaScriptjQuery插件,将本书讲述的所有内容整合在了一起。此外,作者还展示了一个概念框架,帮助读者将精力重点放在改善贯穿整个软件生命周期的可测试性上,并给读者提供了简化代码构造的全系列测试的实操指南。
  无论是最常见的场景还是多线程,本书都会帮读者学会如何针对每一种情景选择最好的测试技术;无论是为一个新的创业公司开发前沿代码,还是维护一个很难驾驭的老旧系统,本书都会帮读者交付其真正需要的优质代码。
  简化所有代码的单元测试,并改善集成测试和系统测试。
  详述意图和实现,促进更加可靠和可扩展的测试。
  克服对编写测试的机制的混淆和误解。
  测试“副作用”、行为特征和上下文约束。
  了解软件设计与可测试性之间微妙的交互,并对其进行利用,而非受困其中。
  揭示能够指导关键测试决策的一些核心原则。
  探讨以下内容的测试:getter/setter、字符串处理、封装、覆写变化、可见性、单例模式、错误条件等。
  确定性地重现并测试一些复杂的竞态条件。
展开
作者简介
  Stephen Vance,从1992年开始,就已经成为专业的软件开发者、咨询师、经理、导师和讲师,从1997年开始,实践和讲授代码级别的自动化测试技术。他曾工作过的公司小到创业公司,大到财富100强企业,行业涉及广泛。他的演讲遍布美国和欧洲的软件技术大会。
展开
内容介绍
  《优质代码:软件测试的原则、实践与模式》讲述如何对所有的软件进行轻松的例行测试,书中为读者提供一些工具——一些实现模式,这些工具几乎可以测试任何代码。
  《优质代码:软件测试的原则、实践与模式》分为三个部分:第一部分(第1~5章)讨论了测试的一些原则和实践,包括首次优质、代码意图、测试攻略和测试与设计之间的关系等;第二部分(第6~13章)讨论了有关测试实践方面的一些模式,包括测试构造器和getter/setter、处理字符串、封装与覆写、调整代码可见性、测试单例模式、验证错误条件,以及利用各种接缝和测试多线程等;第三部分(第14~15章)展示了两个实例的编程过程,其中一个是用测试驱动开发方法编写新的Java应用程序WebRetriever,另一个是为一个未写测试的JavaScript开源项目jQuery Timepicker Addon添加测试代码。
  《优质代码:软件测试的原则、实践与模式》适合对测试驱动开发有初步了解或实践并想提升测试代码编写技能的程序员和自动化测试工程师阅读,也适合想通过本书在GitHub上的微量提交的代码来学习用测试驱动开发方法编写Java新项目和用测试来驯服JavaScript遗留代码的详细过程的任何读者阅读。
展开
精彩书摘
  当在软件领域出现了这种复兴运动后,其结果就是我们往往会淡化手艺(craR)、工程和创作之间的界限。另外,在软件开发中,还要去参与了解问题领域(problemdomain)的内容,这就难怪会在工作中把所应关注的问题与其他问题纠缠在一起了。但讨论这些的用意何在呢?
  专业的软件从业者,会在多个层次上进行编码、设计、架构、测试、度量和分析。这其中的一些内容,很明显就是工程。进行设计和由他人进行验证也很显然就是工程。但不管怎样切分,编码的行为,就是匠艺的行为,就是做出来的行为。当我们的手指在键盘上敲击的同时,我们或许是在并发地做一些“工程”,但这还是在做一门手艺。
  1.2匠艺在首次优质中的作用
  匠艺蕴含着技巧。在编码中所使用的技巧,决定着编码的结果。无论对软件做了多少架构、设计或构思的工作,一个差劲的实现就能够破坏掉所有这一切。
  作为传统,我们过去会依赖这样的验证,即通过自己的注意力或一个质量保证小组来手工确保软件行为的正确性。一位开发人员曾对笔者说:“我先编写代码,然后再训练它做正确的事情。”虽然他那种最终实现正确性的用意值得称颂,但是此话也表露出他对最初就把产品做好缺乏意愿和关注。当他花了l周时间在一个复杂系统中修改了一些核心代码后,令人哭笑不得的事情发生了,他又要求花3周时间来测试修改的结果。
  精益制造是运作在将优质构建到产品中的原则之下的。返工是一种形式的浪费,需要从系统中消除。j而先编写软件以待将来发现bug时再重写或修补,就是返工。
  测试那种本应正确的软件,就可以被看作是一种浪费。由于尚未找到创建没有缺陷的软件的方法,所以在编程之后进行测试在一定程度上是必需的。然而,当软件缺陷被发现、修复和重测时,对该软件所做的多于一次的测试显然是低效的。
  另一种形式的浪费是库存,可以将其视为机会成本。在修复bug上所花费的时间,也正是该软件中那些被正确编写的部分无法交付给客户或提供商业价值的时间。这个时间同时也是开发人员原本可以做包括职业发展在内的其他有价值的行为的时问。
  提升工作中的匠艺水平,能为个人和公司带来成倍的回报。它能令人用更少的时间和更少的浪费,来交付更多的价值,并带来更多的个人满足感。
  关于方法的一点看法
  首先需要事先声明,笔者是软件开发中敏捷和精益方法的热衷者。然而,笔者也坚信,世界上不存在一个或一组方法,能够适合每个团队、公司、项目或产品的情况。笔者从事过同时使用敏捷和瀑布开发方法的相当标准的软件项目,也把敏捷开发过程嵌入到瀑布式开发过程中,甚至在很大程度上,把敏捷技术运用到涉及实时控制和有关人身安全的产品上,还曾经雄心勃勃地以整个组织转型为目标,把敏捷和精益方法运用到前沿的Web开发上。
  无论使用哪种方法,项目中可能都已经有了某种形式的自动化测试,哪怕就是为了省却自己去按下按钮的麻烦。而更有可能的是,为了频繁地运行单元测试、集成测试、系统测试、组件测试、功能测试和其他形式的测试,项目已经拥有了某种形式的持续集成系统。
  只要有测试自动化的地方,就会有人编写代码来测试其他的代码。对于这种情况,本书所讨论的技术将会很有用。对于单元测试或隔离测试(iso1ationtesting),本书所讨论的几乎所有技术都适用。而对于更大范围的测试,或许可以选择来运用的技术就会少很多。一些技术只适合于某些编程语言,而其他技术则可被用于几乎任何编程语言或编程范型(progl‘ammingparadigm)。
  笔者会提及一些敏捷软件开发中常见的测试方法。即使有些方法不合某些人的开发口味,也不要让这一点成为去尝试它们的拦路虎。无论是实践测试驱动开发、测试先行、尽早测试或者测试后行(testafter),都仍然需要驯服被测代码。祝读者有一个快乐的测试!
  ……
展开
目录
第一部分 测试的原则和实践
第1章 工程、匠艺和首次优质
1.1工程与匠艺
1.2 匠艺在首次优质中的作用
1.3 支持软件匠艺的实践    测试
1.4 在代码检查器的约束下进行单元测试
1.5 针对覆盖率的单元测试
第2章 代码的意图
2.1 意图都被放到哪里去了?
2.2 将意图与实现分离
2.3 一个能引发思考的简单例子
第3章 从哪里开始
3.1 一种测试的方法
3.1.1 了解范围
3.1.2 测试的概念框架
3.1.3 状态和行为测试
3.1.4 测试还是不测试
3.2 攻略
3.2.1 测试"正常路径"
3.2.2 测试替代路径
3.2.3 测试错误路径
3.2.4 测试数据的排列组合
3.2.5 对缺陷进行测试
第4章 设计和可测试性
4.1 关于设计范型
4.2 封装和可观察性
4.2.1 表示性的封装
4.2.2 行为的封装
4.2.3 测试的灰度
4.2.4 封装、可观察性和可测试性
4.3 耦合和可测性
第5章 测试的原则
5.1 把测试雕琢好
5.1.1 将输入关联到输出
5.1.2 使用命名约定
5.2 避免在生产代码内出现测试代码
5.3 通过实现来验证意图
5.4 将耦合最小化
5.5 要最小的、新的和瞬态fixture
5.6 利用现有设施
5.7 要完整的验证而不要部分的验证
5.8 编写小测试
5.9 分离关注点
5.10 使用唯一值
5.11 保持简单:删除代码
5.12 不要测试框架
不要测试生成的代码
5.13 有时测试框架

第二部分 测试与可测试性模式
第6章 基础知识
6.1 bootstrapping构造器
6.2 测试简单的getter和setter
6.3 共享常量
6.4 在局部重新定义
6.5 暂时替换
6.6 封装和覆写
6.7 调整可见性
6.8 通过注入的验证
第7章 字符串处理
7.1 通过包含关系来验证
7.2 通过模式来验证
7.3 通过值来精确验证
7.4 使用格式化的结果来精确验证
第8章 封装和覆写变化
8.1 数据注入
8.2 封装循环条件
8.3 错误注入
8.4 替换协作者
8.5 使用现有的操作类
第9章 调整可见性
9.1 用包来包装测试
9.2 将其分解
9.3 更改访问级别
9.4 仅用于测试的接口
9.5 命名那些尚未命名的
9.6 变为friend
9.7 通过反射来强制访问
9.8 声明范围变更
第10章 间奏:重温意图
10.1 测试单例模式
10.2 单例的意图
10.3 测试的策略
10.3.1 测试单例的性质
10.3.2 对类的目的进行测试
10.4 独具慧眼的意图
第11章 错误条件验证
11.1 检查返回值
11.2 验证异常类型
11.3 验证异常消息
11.4 验证异常有效载荷
11.5 验证异常实例
11.6 有关异常设计的思考
第12章 利用现有接缝
12.1 直接调用
12.1.1 接口
12.1.2 实现
12.2 依赖注入
12.3 回调、观察者、监听者和通告者
12.4 注册表
12.5 工厂
12.6 日志记录与最后一手的其他设施
第13章 并行性
13.1 线程和竞态条件的简介
13.1.1 一些历史
13.1.2 竞态条件
13.1.3 死锁
13.2 一个用于重现竞态条件的策略
13.3 直接测试线程的任务
13.4 通过常见锁来进行同步
13.5 通过注入来同步
例子:通过日志记录来注入同步
13.6 使用监督控制
13.7 统计性的验证
13.8 调试器API

第三部分 实例
第14章 测试驱动的Java
14.1 bootstrapping
14.2 首要功能
14.3 切断网络连接
14.4 转移到处理多个网站的情况
14.5 幽灵协议
14.5.1 死胡同
14.5.2spy手艺
14.6 执行选项
14.7 走向下游
14.8 回顾
第15章 遗留的JavaScript代码
15.1 准备开始
15.2 DOM的统治
15.3 在牙膏与测试之上
15.4 向上扩展
15.5 软件考古学
15.6 回顾
封底文字
展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证