首页>参考读物>计算机科学与技术>软件与程序设计

构建高质量软件:持续集成与持续交付系统实践
作者 : 心蓝 著
出版日期 : 2021-09-06
ISBN : 978-7-111-69020-7
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 360
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书包含四大部分,共10 章。第 一部分(第1~4 章)主要围绕如何提高软件的开发质量和效率展开,详细讲述了单元测试的常用工具和实践方法,并展开阐述了持续集成、持续交付、持续部署等概念;第二部分(第5~6 章)详细讲解了两个常用的mock 工具——Mockito 和Powermock,通过实例详尽地讲解了它们的语法规则和使用场景,目的是让开发者在不修改软件源代码和程序结构的前提下尽可能确保软件具备可测试性;第三部分(第7~8 章)为读者详细讲述了两个行为驱动开发工具(功能测试)Concordion 和Cucumber 的使用,这两个工具可以帮助我们很好地完成功能测试、验收测试、回归测试等工作;第四部分(第9~10 章)综合前面三部分的知识点,并引入代码风格检查、静态代码分析、第三方依赖安全性检查、企业内部私服的原理和搭建、Ansible 自动化软件部署工具、Jenkins Pipeline 等知识,以帮助读者构建了一个完整的CI/CD 流程。

图书特色

深入解析测试驱动开发的方法论
基于丰富的工具和实战案例引导读者从无到有
构建企业级持续集成与持续交付环境

图书前言

为什么写这本书
技术在变,市场在变,需求在变,用户的诉求在变,一切都在快速变化着。因此,在某个固定时间进行软件发布的传统作业方式已经远远无法适应当下急速变化的世界。
越来越多的公司和团队在追求以最快的速度交付软件,像谷歌这样的互联网顶级公司甚至在几分钟之内就可以提交一个“具备交付能力的”软件版本,而国内的阿里则能够在一小时以内发布一整套全量功能的淘宝、天猫商城为用户服务。
“快”的前提是高质量的交付,而高质量的交付则离不开一套稳健的持续(continuous)环境。所谓的持续,并不是一直运行(always running),而是具备持续运行(always ready to run)的能力。因此,基于“持续”概念衍生出了持续集成(CI)、持续交付和持续部署(CD)等工程实践,在每一个细分领域中又诞生了琳琅满目的工具和工具组合,如图0-1所示。

图0-1 工具和工具组合
如何在如此之多的工具中挑选出合适的工具集来构建自己的“持续”环境呢?这正是本书所要解决的问题。只有真正理解了什么是持续集成、持续交付和持续部署,才能理解单元测试、功能测试,以及集成环境中每一个环节的作用和重要性。
本书将从理论、最佳实践的角度出发,为读者介绍CI/CD环节中不同工具的使用和整合,使读者能够快速搭建起适合自己团队的持续构建环境。
读者对象
本书适合以下读者:
从事软件测试的人员
Java程序开发者
从事Java系统架构的架构师
开设Java课程的专业院校和培训机构
如何阅读本书
本书包含四大部分,共10章。第一部分(第1~4章)主要围绕如何提高软件的开发质量和效率展开,详细讲述了单元测试的常用工具和最佳实践,并给出了持续集成、持续交付、持续部署等概念;第二部分(第5~6章)详细讲解了两个常用的mock工具——Mockito和Powermock,通过实例详尽地讲解了它们的语法规则和使用场景,目的是让开发者在尽可能不修改软件源代码和程序结构的前提下确保软件具备可测试性;第三部分(第7~8章)为读者详细讲述了两个行为驱动开发工具(功能测试)Concordion和Cucumber的使用,这两个工具可以帮助我们很好地完成功能测试、验收测试、回归测试等工作;第四部分(第9~10章)综合前面三部分的知识点,并引入代码风格检查、静态代码分析、第三方依赖安全性检查、企业内部私服的原理和搭建、Ansible自动化软件部署工具、Jenkins Pipeline等知识,构建了一个完整的CI/CD流程。
书中出现的代码及工具均已上传至GitHub,读者可以下载参阅。
随书代码-I:https://github.com/wangwenjun/cicd
随书代码-II:https://github.com/wangwenjun/cicd-powermock
Jenkins插件:https://github.com/wangwenjun/jenkins_plugins
综合实例:https://github.com/wangwenjun/simple_application
综合实例功能测试:https://github.com/wangwenjun/simple_application_acceptance
Ansible相关脚本:https://github.com/wangwenjun/ansible_tutorial
勘误和支持
由于作者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或者表述不准确的地方,恳请读者批评指正。如果读者在阅读的过程中发现了问题,欢迎将宝贵意见发送到我的个人邮箱(532500648@qq.com),我真挚地期待着你的建议和反馈。
致谢
感谢机械工业出版社华章分社的杨绣国(Lisa)编辑,从选题立项到图书命名,从大纲确定到内容剪裁,她都给了我很多意见和指导。
感谢我的家人,感激他们的陪伴和对我的支持。
感谢我的上一家公司——汇丰科技在我过去的七年中提供了如此优秀的平台和环境,也让我结识了一群可爱又可敬的同事。
最后感谢我的读者,希望你们能够快乐工作,认真生活。
谨以此书,献给我最亲爱的家人,以及众多坚持在一线的开发者朋友。

上架指导

计算机\软件测试

封底文字

当下,越来越多的公司和团队在追求以最快的速度交付软件,从而应对灵活多变的业务场景需求。“快”的前提是高质量的交付,高质量的交付离不开一套稳健的持续环境。所谓持续,并不是一直运行的意思,而是具备持续运行的能力。基于持续概念衍生出持续集成、持续交付、持续部署等工程实践,在每一个细分领域又诞生了琳琅满目的工具和工具组合。如何在如此之多的工具中挑选出合适的工具集来构建自己的持续环境?这正是本书所要解决的问题。只有真正理解了什么是持续集成、持续交付、持续部署,才能理解单元测试、功能测试,以及集成环境中每一个环节的作用和重要性。
本书结合理论和实践为读者讲解持续集成、持续部署环节不同工具的整合使用,以便读者能够快速搭建适合自己团队的持续构建环境。
本书的主要内容和特色
循序渐进 本书内容由浅入深,结合实际应用开发精准阐述如何基于测试驱动开发的方法论进行软件开发,能帮助读者系统化地对知识点进行梳理和归纳。
内容丰富 不仅囊括了Hamcrest对象匹配库中各种匹配器的用法及其与JUnit的整合,还展示了众多工具和插件的使用方法,从而帮助开发者开发出高质量的代码。
真实案例 书中所包含的案例都源于实践,通过案例重点解读了当下主流的单元测试mock工具(Mockito、Powermock)和功能测试框架(Cucumber、Concordion),读者在练习过程中会发现这些案例与日常工作十分切合。
延展阅读 每章的最后都会给出拓展资料,方便读者在掌握本书知识的基础上进一步提升。

作者简介

心蓝 著:心蓝,某外资零售银行电子渠道高级开发总监、技术专家,有超过十年的系统设计、一线开发经验。对团队管理、项目管理有自己独到的见解。拥有多年的移动网关通讯研发经验,以及移动互联网开发与产品运营、云计算、B2C电子商务平台开发经验,热衷于技术分享,目前已录制20余套技术视频,在互联网上广泛传播。所著图书包括《Java高并发编程详解:多线程与架构设计》、《Java高并发编程详解:深入理解并发核心库》等。

图书目录

前言
第一部分 提高软件的开发质量及开发效率
第1章 单元测试与TDD3
1.1 单元测试的定义3
1.2 单元测试的好处5
1.3 单元测试的FIRST原则6
1.4 JUnit最佳实践10
1.5 测试驱动开发14
1.5.1 红–绿–重构15
1.5.2 TDD工作流程16
1.5.3 TDD实践17
1.6 本章总结26
第2章 Hamcrest:优雅强大的对象匹配器27
2.1 Hamcrest概述27
2.2 Hamcrest对象匹配器详解34
2.2.1 org.hamcrest.core34
2.2.2 org.hamcrest.beans37
2.2.3 org.hamcrest.collection38
2.2.4 org.hamcrest.number41
2.2.5 org.hamcrest.text42
2.2.6 org.hamcrest.xml43
2.3 自定义对象匹配器44
2.4 REST-Assured的使用47
2.5 本章总结51
第3章 Git及Git工作流程52
3.1 快速上手Git53
3.2 文件状态生命周期及Git中的对象56
3.2.1 文件状态生命周期56
3.2.2 Git中的对象59
3.3 Git与本地仓库64
3.3.1 add与commit命令64
3.3.2 log命令65
3.3.3 diff与blame命令65
3.3.4 Git的分支及操作66
3.3.5 stash命令69
3.3.6 reset命令70
3.3.7 标签的操作73
3.3.8 “.gitignore”文件的规则74
3.4 Git与远程仓库75
3.4.1 远程仓库的管理76
3.4.2 远程仓库的操作77
3.4.3 本地仓库与远程仓库的其他协同操作78
3.5 Git的配置和别名操作81
3.5.1 Git的基本配置81
3.5.2 Git的别名82
3.6 Git工作流程82
3.7 本章总结85
第4章 持续集成与持续交付86
4.1 什么是持续集成87
4.2 什么是持续交付89
4.3 什么是持续部署91
4.4 本章总结94
第二部分 mock:构造测试对象的替身
第5章 Mockito:热门的mock工具97
5.1 mock技术97
5.2 快速上手Mockito98
5.2.1 引入Mockito98
5.2.2 测试用户登录99
5.3 创建mock“替身”对象实例104
5.3.1 四种mock方式104
5.3.2 深度mock108
5.4 Stubbing语法详解111
5.4.1 when...thenReturn和doReturn...when语法111
5.4.2 doNothing...when语法112
5.4.3 when...thenThrow和doThrow...when语法115
5.4.4 when...thenAnswer和doAnswer...when语法117
5.4.5 多值返回的Stubbing语法117
5.4.6 级联风格的Stubbing语法118
5.4.7 when...thenCallRealMethod和doCallRealMethod...when语法119
5.5 Spying详解120
5.6 Argument对象匹配器详解123
5.6.1 Argument对象匹配器在Stubbing语法中的使用123
5.6.2 自定义Argument对象匹配器125
5.6.3 集成Hamcrest中的对象匹配器126
5.7 Mockito Verify与ArgumentsCaptor127
5.7.1 Mockito Verify操作127
5.7.2 VerificationMode详解130
5.7.3 ArgumentCaptor与@Captor132
5.8 InjectMocks134
5.9 Mockito对BDD风格的支持135
5.10 Mockito Inline136
5.11 本章总结138
第6章 Powermock详解140
6.1 快速入门Powermock141
6.1.1 为什么需要Powermock141
6.1.2 搭建Powermock环境141
6.1.3 Powermock入门143
6.2 Powermock如何通过mock操作局部变量145
6.3 Powermock如何通过mock操作静态方法148
6.4 Powermock如何通过mock操作final修饰的类151
6.5 Powermock如何通过mock操作私有方法152
6.6 Powermock中的Spying154
6.7 Powermock与JaCoCo155
6.8 本章总结160
第三部分 行为驱动开发
第7章 Concordion:测试即文档163
7.1 Concordion的开发流程164
7.2 搭建Concordion环境174
7.2.1 搭建Concordion基础环境174
7.2.2 Concordion与Maven进行集成176
7.3 Concordion的指令详解178
7.4 在Specification文档中处理Java返回的结果183
7.4.1 简单的数据类型183
7.4.2 复杂的数据类型188
7.5 table和list中的指令191
7.5.1 使用table标签批量执行测试用例191
7.5.2 使用list标签批量执行测试用例193
7.6 拾遗补漏194
7.7 本章总结196
第8章 Cucumber:热门的行为驱动开发工具197
8.1 Cucumber简介198
8.1.1 快速上手Cucumber199
8.1.2 Cucumber与IntelliJ IDEA集成204
8.1.3 Cucumber的执行流程207
8.2 Feature文档的语法基础:Gherkin208
8.2.1 什么是Gherkin209
8.2.2 Gherkin语法基础209
8.2.3 Gherkin中的注释212
8.2.4 Gherkin对其他语系的支持213
8.3 Step Definitions详解214
8.3.1 步骤的匹配215
8.3.2 通过正则表达式捕获参数217
8.3.3 通过Cucumber表达式捕获参数220
8.3.4 使用Java 8 Lambda表达式定义步骤方法223
8.3.5 Step Definitions的常见问题225
8.3.6 Cucumber中Step的执行过程227
8.4 Cucumber进阶228
8.4.1 Background关键字228
8.4.2 Data Table229
8.4.3 Scenario Outline关键字233
8.4.4 Doc String 235
8.4.5 Tagging & Hooks236
8.5 CucumberOptions239
8.6 Cucumber整合Selenium进行Web自动化测试241
8.7 Cucumber功能测试报告246
8.8 本章总结248
第四部分 遇见Jenkins
第9章 Jenkins的基础知识253
9.1 Jenkins的安装及快速构建Job253
9.1.1 Jenkins的安装253
9.1.2 Jenkins Job的快速构建258
9.2 配置Jenkins261
9.2.1 Jenkins的基本配置261
9.2.2 为Jenkins配置集群节点264
9.2.3 Jenkins插件管理268
9.2.4 基于Role Strategy配置权限270
9.2.5 构建Maven项目类型的Job272
9.3 Jenkins参数化及可视化构建274
9.3.1 参数化构建275
9.3.2 可视化构建280
9.4 Jenkins构建Pipeline Job282
9.4.1 Groovy Pipeline Script282
9.4.2 Jenkinsfile285
9.4.3 Blue Ocean286
9.5 本章总结288
第10章 基于Jenkins构建持续集成与持续交付290
10.1 Spring Boot开发RESTful应用291
10.1.1 搭建Spring Boot环境291
10.1.2 代码检查与分析295
10.1.3 基于测试驱动开发完成应用程序开发303
10.1.4 使用Cucumber开发自动化功能测试程序311
10.2 Nexus私服317
10.2.1 搭建Nexus私服318
10.2.2 私服仓库配置319
10.3 RedHat Ansible326
10.3.1 Ansible的安装326
10.3.2 Ad-hoc及Playbook简介330
10.3.3 Ansible模板引擎jinjia2333
10.3.4 通过Playbook逐步完成软件自动化部署335
10.4 创建Jenkins Pipeline343
10.4.1 创建CI/CD Jenkins Pipeline Job343
10.4.2 GitHub WebHook自动触发Jenkins Job348
10.5 本章总结351

教学资源推荐
作者: [美] 凯·霍斯特曼(Cay Horstmann) 著
作者: 刘振安 刘燕君 唐军 编著
作者: 李柏岩 尹枫 王洪亚 等编著
参考读物推荐
作者: 闫莺 郑凯 郭众鑫 编著
作者: 王小科 李继业 等编著
作者: 陈宇姣,徐卉