-99娱%1 火龙果·整理 uml.org.cn 致谢 首先应该感谢上海爱立信研发中心允许我把这些内部培训资料分享给大家。 特别感谢许晓斌(@juvenxu)在结构、方向和细节处给了我很多的建议。 特别感谢徐毅(@徐毅-Kaveri)给我写书的动力,也期待他的测试新书早日面世。 感谢李任、王艳、晁立山、梅一、姜信宝、卢绮闽对本书做了早期的审阅。 非常感谢北京的李小波从一开始就用开源的方式对文字细节进行不断地校对
致谢 首先应该感谢上海爱立信研发中心允许我把这些内部培训资料分享给大家。 特别感谢许晓斌(@juvenxu)在结构、方向和细节处给了我很多的建议。 特别感谢徐毅(@徐毅-Kaveri)给我写书的动力,也期待他的测试新书早日面世。 感谢李任、王艳、晁立山、梅一、姜信宝、卢绮闽对本书做了早期的审阅。 非常感谢北京的李小波从一开始就用开源的方式对文字细节进行不断地校对
-999%1 火龙果·整理 uml.org.cn 目录 前言 i 版本变化 致谢 目录 1敏捷开发和Scrum 1 1.1工作环境.· 1.2简单历史。.。.. 1 1.2.1敏捷流派 2 1.3 Scrum基本知识·. 1.3.1基本角色 3 1.3.2框架过程 1.3.3常用的实践 的 1.4相关知识 1.5课后练习···· 4 1.6小结....·. 4 1.7参考阅读..... 4 2版本控制Git和代码审阅Gerrit 2.1工作环境 2.2什么是Git 5 2.2.1集中式和分布式 2.3Git基本用法 6 2.3.1安装 6 2.3.2配置Git o 2.3.3建立本地Git仓库 > 2.3.4第一个提交:···· 2.3.5Git分支(Branch)和合并(Merge) 7 2.3.6Git变基(Rebase)# 6 2.3.7Git标记(Tag)# 8 2.4Git远程仓库连接····· 8 2.4.1在Gerrit中注册 9 2.4.2Git克隆(c1one) 9 2.4.3Git推送/拉(Push/Pu11)············· 9
目录 前言 i 版本变化 v 致谢 vii 目录 ix 1 敏捷开发和Scrum 1 1.1 工作环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 简单历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2.1 敏捷流派 . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Scrum 基本知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3.1 基本角色 . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3.2 框架过程 . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.3.3 常用的实践 . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 相关知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.5 课后练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.6 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.7 参考阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 版本控制Git和代码审阅Gerrit 5 2.1 工作环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 什么是Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2.1 集中式和分布式 . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Git基本用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3.1 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3.2 配置 Git . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.3.3 建立本地 Git 仓库 . . . . . . . . . . . . . . . . . . . . . . 7 2.3.4 第一个提交 . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3.5 Git分支(Branch)和合并(Merge) . . . . . . . . . . . . . . 7 2.3.6 Git变基(Rebase)### . . . . . . . . . . . . . . . . . . . . 8 2.3.7 Git标记(Tag)### . . . . . . . . . . . . . . . . . . . . . . 8 2.4 Git远程仓库连接 . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.4.1 在Gerrit中注册 . . . . . . . . . . . . . . . . . . . . . . . 9 2.4.2 Git克隆(Clone) . . . . . . . . . . . . . . . . . . . . . . 9 2.4.3 Git推送/拉(Push/Pull) . . . . . . . . . . . . . . . . . . . . 9
-999% 火龙果·整理 uml.org.cn 2.5Git的良好使用习惯 。 10 2.5.1提交注释的质量 10 2.6常用的工作模式·· 10 2.6.1本地特性分支 10 2.7代码审阅和Gerrit. 11 2.8Git的缺点 11 2.9相关知识.··. 11 2.9.1几种协议 12 2.10课后练习····· 12 2.11小结.···· 12 2.12参考阅读.···. 12 3持续集成 13 3.1环境准备.. 13 3.2持续集成流程... 13 3.3 Maven...:··. 14 3.3.1安装Maven.... 14 3.3.2 Maven仓库管理器:Nexus x 3.3.3第一个maven命令 15 3.3.4体会两层缓存 16 3.4持续集成服务器:Jenkins 16 3.4.1安装 16 3.4.2安装Git插件 16 3.4.3系统配置Naven 16 3.4.4设置构建任务 16 3.5如何实施持续集成. 3.6相关知识 17 3.7课后练习 17 3.8小结.... 18 3.9参考阅读.. 18 4如何写好别ava程序 19 4.1环境准备.··.. 19 4.2代码风格和编程规范 20 4.3安全代码..。.. 20 4.4单元测试.··. 20 4.5代码覆盖率 20 4.6重构.····· 20 4.7测试驱动开发TDD···· 21 4.7.1测试驱动开发的步骤 21 4.7.2单元测试就是文档 22 4.7.3单元测试也要重构 22 4.8测试模拟(Mock) 22 4.9课后练习···· 22 4.10参考阅读..·. 22
2.5 Git的良好使用习惯 . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.5.1 提交注释的质量 . . . . . . . . . . . . . . . . . . . . . . . 10 2.6 常用的工作模式 . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.6.1 本地特性分支 . . . . . . . . . . . . . . . . . . . . . . . . 10 2.7 代码审阅和Gerrit . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.8 Git的缺点 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.9 相关知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.9.1 几种协议 . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.10 课后练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.11 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.12 参考阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3 持续集成 13 3.1 环境准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.2 持续集成流程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.3 Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3.1 安装Maven . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.3.2 Maven仓库管理器:Nexus . . . . . . . . . . . . . . . . . . . 14 3.3.3 第一个maven命令 . . . . . . . . . . . . . . . . . . . . . . . 15 3.3.4 体会两层缓存 . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4 持续集成服务器:Jenkins . . . . . . . . . . . . . . . . . . . . . . 16 3.4.1 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4.2 安装Git插件 . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4.3 系统配置Maven . . . . . . . . . . . . . . . . . . . . . . . . 16 3.4.4 设置构建任务 . . . . . . . . . . . . . . . . . . . . . . . . 16 3.5 如何实施持续集成 . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.6 相关知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.7 课后练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.8 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.9 参考阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4 如何写好Java程序 19 4.1 环境准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2 代码风格和编程规范 . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.3 安全代码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.4 单元测试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.5 代码覆盖率 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.6 重构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 4.7 测试驱动开发 TDD . . . . . . . . . . . . . . . . . . . . . . . . . . 21 4.7.1 测试驱动开发的步骤 . . . . . . . . . . . . . . . . . . . . . 21 4.7.2 单元测试就是文档 . . . . . . . . . . . . . . . . . . . . . . 22 4.7.3 单元测试也要重构 . . . . . . . . . . . . . . . . . . . . . . 22 4.8 测试模拟(Mock) . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.9 课后练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 4.10 参考阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
火龙果·整理 uml.org.cn 5需求管理和实例化需求 25 5.1环境准备 25 5.2需求的困惑· 25 5.2.1测试人员的工作文档 26 5.3用实例化来解决需求的问题 26 5.3.1主要过程模式 2 5.3.2网上书店一个例子 27 5.3.3常见问题 29 5.4如何实施.........。... 30 5.4.1循序渐进和现有流程的结合 30 5.4.2贴在墙上 31 5.5相关知识..·.·.·. 31 5.6课后练习···· 31 5.7小结..····· 吧 5.8参考阅读······ 31 6用Cucumber来实例化需求 33 6.1环境准备...... 男 6.2 Cucumber简介 33 6.3安装······· 34 6.4运行Cucumber..·. 34 6.5业务层:Gherkini语言 35 6.6驱动层·· 36 6.7常用的目录结构···· 36 6.8继续网上书店的例子···· 9 69常见问颗.....」 37 6.9.1我们的系统没有接口能够被这么(或容易)测试得? 37 6.9.2 Cucumber用起来了,也自动化了,但是没人看? 37 6.10相关知识............. 37 6.11课后练习..... 37 6.12小结····· 38 6.13参考阅读.·· 38 7项目实践:Game of life 39 71常见问题...。........ 39 7.l.1过度承诺(over commit)# 39 7.1.2没有团队精神 4 39 7.1.3缺少计划和工作方式的制定 39 72小结。·。········ 40 附录A培训示例模板 41 A.1时间安排.··· 41 A.2培训的材料···· 41 A.3培训负责人准备工作 。 41 A.4反馈.········ 42
5 需求管理和实例化需求 25 5.1 环境准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.2 需求的困惑 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5.2.1 测试人员的工作文档 . . . . . . . . . . . . . . . . . . . . . 26 5.3 用实例化来解决需求的问题 . . . . . . . . . . . . . . . . . . . . . . 26 5.3.1 主要过程模式 . . . . . . . . . . . . . . . . . . . . . . . . 27 5.3.2 网上书店一个例子 . . . . . . . . . . . . . . . . . . . . . . 27 5.3.3 常见问题 . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.4 如何实施 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 5.4.1 循序渐进和现有流程的结合 . . . . . . . . . . . . . . . . . . 30 5.4.2 贴在墙上 . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.5 相关知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.6 课后练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.7 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5.8 参考阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6 用Cucumber来实例化需求 33 6.1 环境准备 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.2 Cucumber 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.3 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 6.4 运行Cucumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 6.5 业务层:Gherkin语言 . . . . . . . . . . . . . . . . . . . . . . . . 35 6.6 驱动层 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.7 常用的目录结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.8 继续网上书店的例子 . . . . . . . . . . . . . . . . . . . . . . . . . 36 6.9 常见问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.9.1 我们的系统没有接口能够被这么(或容易)测试得? . . . . . . . 37 6.9.2 Cucumber用起来了,也自动化了,但是没人看? . . . . . . . . . 37 6.10 相关知识 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.11 课后练习 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 6.12 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 6.13 参考阅读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 7 项目实践:Game of life 39 7.1 常见问题 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 7.1.1 过度承诺(over commit)### . . . . . . . . . . . . . . . . . 39 7.1.2 没有团队精神 . . . . . . . . . . . . . . . . . . . . . . . . 39 7.1.3 缺少计划和工作方式的制定 . . . . . . . . . . . . . . . . . . 39 7.2 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 附录 A 培训示例模板 41 A.1 时间安排 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 A.2 培训的材料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 A.3 培训负责人准备工作 . . . . . . . . . . . . . . . . . . . . . . . . . 41 A.4 反馈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
-99% 火龙果·整理 uml.org.cn 附录B企业版本控制的改革:走向Gt 43 B.1了解最新技术-分布式版本控制(DVCS)#··········· 43 B2尝试在日常中使用分布式版本控制·················· 43 B3宣扬和推广分布式版本控制····················· 44 B4详细研究版本迁移························· 44 B.5开始在小范围实施···· 44 B.6推广、并引入Gerrit做代码审查··············· 45 45
附录 B 企业版本控制的改革:走向Git 43 B.1 了解最新技术-分布式版本控制(DVCS)## . . . . . . . . . . . . . . . 43 B.2 尝试在日常中使用分布式版本控制 . . . . . . . . . . . . . . . . . . . 43 B.3 宣扬和推广分布式版本控制 . . . . . . . . . . . . . . . . . . . . . . 44 B.4 详细研究版本迁移 . . . . . . . . . . . . . . . . . . . . . . . . . . 44 B.5 开始在小范围实施 . . . . . . . . . . . . . . . . . . . . . . . . . . 44 B.6 推广、并引入Gerrit做代码审查 . . . . . . . . . . . . . . . . . . . . 45 B.7 小结 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45