前言

为什么写这本书

技术在变,市场在变,需求在变,用户的诉求在变,一切都在快速变化着。因此,在某个固定时间进行软件发布的传统作业方式已经远远无法适应当下急速变化的世界。

越来越多的公司和团队在追求以最快的速度交付软件,像谷歌这样的互联网顶级公司甚至在几分钟之内就可以提交一个“具备交付能力的”软件版本,而国内的阿里则能够在一小时以内发布一整套全量功能的淘宝、天猫商城为用户服务。

“快”的前提是高质量的交付,而高质量的交付则离不开一套稳健的持续(continuous)环境。所谓的持续,并不是一直运行(always running),而是具备持续运行(always ready to run)的能力。因此,基于“持续”概念衍生出了持续集成(CI)、持续交付和持续部署(CD)等工程实践,在每一个细分领域中又诞生了琳琅满目的工具和工具组合,如图0-1所示。

003-01

图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,读者可以下载参阅。

勘误和支持

由于作者的水平有限,编写的时间也很仓促,书中难免会出现一些错误或者表述不准确的地方,恳请读者批评指正。如果读者在阅读的过程中发现了问题,欢迎将宝贵意见发送到我的个人邮箱(532500648@qq.com),我真挚地期待着你的建议和反馈。

致谢

感谢机械工业出版社华章公司的杨绣国(Lisa)编辑,从选题立项到图书命名,从大纲确定到内容剪裁,她都给了我很多意见和指导。

感谢我的家人,感激他们的陪伴和对我的支持。

感谢我的上一家公司——汇丰科技在我过去的七年中提供了如此优秀的平台和环境,也让我结识了一群可爱又可敬的同事。

最后感谢我的读者,希望你们能够快乐工作,认真生活。

谨以此书,献给我最亲爱的家人,以及众多坚持在一线的开发者朋友。