2022年智能运维:浅谈持续集成、持续交付和软件测试 .pdf
-
资源ID:27181483
资源大小:402.19KB
全文页数:14页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年智能运维:浅谈持续集成、持续交付和软件测试 .pdf
导读:浅谈CI/CD 和软件测试知其 然,知 其所 以然 。相较 于 DevOps而 言,CI/CD是一 个相 对具 象的概念 。在IT 企业 中,CI/CD的应 用愈 加 广泛 ,成 为推 动软 件 研发 活动的重 要基 础设 施服 务 ,同 时推 动DevOps 模式 的实 际落 地。什么是CI/CD 在实 践CI/CD 相 关 内容 之前 ,我 们有 必 要先 认识 下什 么是CI/CD 。一 般 传 统 或 者 狭 义 、 普 遍 的CI/CD , 是 指 持 续 集 成 ( Continuous Integration,CI)和持 续交 付( Continuous Delivery,CD )。而 更加广义 、 全面 的理 解, 是指 持 续集 成( Continuous Integration, CI) 、持续 测试( Continuous Testing, CT) 、 持续交 付 ( Continuous Delivery,CD)和持 续部 署( Continuous Deployment,CD )四个 方面。通常 ,一个 软件 开发 的流 水 线如 下图 所示 。?Design : 这一 阶段 完成 软件 开发 的需 求分析 和设 计。?Develop:这一阶 段完成 软件 开发 的功 能 代码 ,一个最 佳实 践 是采用测 试驱 动开 发( TDD )的方 法,测 试 代码 和功 能代 码的 编 写同 时进行。 需要 注意的 是,在Develop 阶段 也会 运行 单元 测试 和 其他小型 测试 。?Test :这 一 阶 段完 成 软件的 各 项大型 或 专项 测试 ,比 如界 面 测 试、API 测试 、性 能测 试和 系统 测试 等。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - ?Release :这 一阶 段完成 软件 产品 的发 布 ,并 交付 给用 户使 用 。持续集成( Continuous Integration)随着 敏捷 开发 的发 展 ,持续 集成 在软 件项 目活 动中 也日 益成 为 主流。顾名思 义,持续 集成 是指每 日频 繁地(比 如 一天 多次 )将 代码 集 成到 主干分支 中。强调 通过 集成和 测试 的速 度,快 速给 出一 个集 成的 结 果( 是失败还 是成 功),在代码集 成之 前,必须 先 通过 自动 化测 试验 证 ,只 要有一个 测试 用例 失败 , 就不 能集 成。Martin Fowler 说过 ,“持续 集成 并不 能 消除 Bug ,而 是让 它 们非 常容易被 发现 和改 正” 。 这也 正是 持续 集成 的 真谛 所在 。敏 捷开 发的 核心 是 指 整个 软件 开发 活 动 被 划 分成 一 系 列 短 的 迭代 过程 ,每个 迭代 完成 一定 数 量的 功能,迭代周期 应该 尽量 短。在 软件 开发 需求已经 确定 的情 况下 ,迭代 应该 由测 试驱 动 开发( TDD )和集 成 反馈 来驱动。 只有 这样 ,才 能 为质 量持 续改 进奠 定 一个 良好 的基 础。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - 持续 集成 是和 单元 测 试结 合在 一起 的,也 就意 味着,持续集成 和单 元测试 需要 并 行 工作。 持 续集成 一般 由代码 每 次git push/review 触发 。先签 入代 码就 先看 到 构建 结果 ,后 签入 ,则要 排在 后面 。这 就 要求 构建时间 不能 太长,否则在构 建时 容易 引起 混 乱,很 难知 道是 谁的 代码 破坏了集 成, 导致 很难 定 位问 题。可以 说,持续 集成 是敏捷 开发 的重 要基 础 环节 ,没 有持 续集 成 ,所 谓的敏捷 开发 便失 去了 赖 以生 存的 土壤,其实施效 果也 会大 打折 扣 。持续 集成是 一种 软件 开发 实 践,团 队成 员频 繁集 成他 们开 发的 代码,每次集成都会 经过 自动 构建 自动测试 的验 证,以尽 快发 现集 成错 误 。使用 这种方 法可 以显 著减 少 集成 引起 的问 题,并加快 团队 合作 开发 软 件的 速度。( 1)持 续集 成过 程持续 集成 的工 作阶 段 比较 明确,主要有三 个大 的阶 段:持 续集 成准 备阶段、 持续 集成 使用 阶 段和 持续 集成 测试 阶 段。持续 集成 准备 阶段 的 工作 主要 包括 :?通过 代码 评审 系统 ( 比如Gerrit ), 实现代 码审 查和 集成 反馈。?通过 版本 控制 系统 ( 比如Git 或GitLab)建 立源 码仓 库。?通过 构 建 工 具 运 行 相 关 构 建 和 测 试 ( 比 如Python 项目 的Tox 和Pytest )。?通过CI 系统( 比如Jenkins)建立Job ,将版本 控制 和构 建 工具整合 ,并 设置 构建 触 发条 件。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 持续 集成 使用 阶段 的 工作 主要 包括 :?开发 人员 向代 码评 审 系统 (比 如Gerrit)提 交代 码。?通过CI 系统监 听代 码的 提交 ,运 行单 元测试 ,反 馈集 成结 果 。?通过 构建 工具 对代 码 进行 编译 、打 包和 部署。?通过 版本 控制 工具 实 现版 本控 制与 管理 。持续 集成 测试 阶段 的 工作 主要 是,CI 系 统根 据集 成结 果进 行不同 操作,如果 成功 ,则 将代 码合并 到主 分支 ;如 果 失败 ,则 反馈 给开 发 人员 修改重新 提交 。从中 我们 可以 看到 , 持续 集成 涉及 的主 要 工具 类别 包括 :?版本 控制 工具 实 现源 代码 管理 、版 本 控制 。?构建 工具 实 现代 码的 自动 化编 译、打 包等 ,这是持 续集 成 的核心工 具。?测试 工具 实 现代 码的 自动 化测 试, 以 及大 型测 试或 专项 测 试。?CI 系统 整 合版 本控 制、构建 工作 和 测试 工作 ,实 现持 续 集成。( 2)持 续集 成的 好 处主要 有以 下几 点:?易于 定位 错误 。比 如当持 续集 成失 败时 ,说明 新提 交的 代码 引 起了错误 ,这 样也 很容 易 知道 是谁 犯了 错误 ,可以 找谁 来讨 论。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - ?提高 团队 的开 发信 心 。虽 然整 个系 统还 不 是那 么可 用,但至 少 可以看到 功能 已经 在一 点 点被 集成 了。?提高 对进 度的 控制 和 把握。这点非常 明显 ,如果 每天 都在 集成 ,当然每 天都 可以 看到 哪 些功 能可 以使 用,哪 些功 能还 没有 实现 。如果你是 开发 人 员 , 则 不用 为在 每 日Scrum 晨 会 时 说 自 己 完 成 了 多少开 发而 烦恼 ;而如 果你 是Scrum Master,那么 也不 用再 烦 恼开发人 员说 完成 了代 码 的 40% 到底是 个什 么概 念。?有助 于代 码开 发的 质 量评 估。比如 从开 发 质量 的评 估图 表中 ,找出经常 出错 的测 试和 源 码等 。?与测 试工 具结 合, 做 到每 次提 交都 进行 测试。?快速 发现 错误 。每 完 成一 点开 发,就提 交 评测 、代 码审 查,可 以快速发 现错 误, 及时 修 复, 越尽 早解 决, 成本越 低。持续测试( Continuous Testing)持续 测试 作为 软件 持 续集 成中 的重 要组 成 部分 ,为软件 项目 的 成功 提供了保 证软 件质 量持 续 改进 的重 要手 段。在 持续 集成 中,更 多的 是运 行小型的 单元 测试 ,因 此 ,关 于其 他测 试将 在 后续 章节 中阐 述。持续 测试 是指 开发 人 员提 交代 码后 自动 运 行相 关单 元测 试,给 出测 试结果的 反馈 ;如 果失 败 ,则 会在 测试 结果 的 详情 页面 中输 出错 误提示 。有了 持续 测试 ,我们 才能 实现 真正 的测 试 驱动 开发( TDD )。举 一 个例子,当开 发人 员向 代码评 审系 统提 交了 代 码后 ,Jenkins hooks 监听 到名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 14 页 - - - - - - - - - 有 代码 提交 ,自 动 运 行单 元测 试, 然 后 在 页 面视 图 上 显 示 测 试的 结果 ;如果 测试 失败 ,开 发 人员 需要 重新 修改 并 再次 提交 测试 ,直 至成功 。这也 需要 开发 人员 在 编写 功能 代码 时,同 时编 写测 试代 码,这 样几 乎能够在 问题 产生 之时 就 将其 发现。不经常运 行测 试通 常就 不怎 么 有效,因为从 产生 缺陷 到发 现 该缺 陷相 隔时 间很 长 ,但持 续地( 即每 一 次代 码改变时 )运 行测 试能 确 保快 速地 发现 症结 。持续 测试 应当 输出 测 试报 告,报告 是将 持续集 成的 运行 情况 以 适当 的形式展 现给 相关 人员 的 基本方式。报告是持 续集 成的 晴雨 表,所 以它 必须直 观、 易懂 ,比 如 开 发人 员从 错误 日 志 中 找 到代 码 出 错 的 位 置和 原因 ;QA 测 试人 员发 现测 试的 覆盖 率和 执行 情 况;管 理人 员从 持续 集成 通过率的 趋势 中了 解到 项 目的 进度 和质 量。持续交付( Continuous Delivery)持续 交付 和持 续部 署 是两 个非 常容 易混 淆 的概 念。持续 交付 指 的是 频繁地将 软件 的新 版本 交 付给QA 测试 团队 或者 运营 团队 ,如 果评审 通过,代码 就进 入发 布、 生 产阶 段。为 了更 加符 合 国 内软 件行 业的 实 际 情况 ,我 在这里 将QA 和 测 试 统称为“ QA 测试 ”。持 续交 付可 以看 作是 持 续集 成、持续 测试 的 延续 ,它强调 的是 不管 怎么 更 新,软 件是 随时 随地 可以 交付 的。通 过严 格的 自动化测 试,可 以确 保软 件开 发的 质量 和进 度 。因为 通过 完全 的自 动化 过程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 14 页 - - - - - - - - - 把每 个变 更自 动提 交 到测 试环 境中,所以当功 能开 发完 成时,就有信心只需 要点 击一 次按 钮 就能 保证 发布 和部 署 应用 的质 量。( 1)选 择持 续交 付 工具 集在没 有制 定出 工作 流 程时,便考虑选 择持 续交 付工 具集,是最不重 要的决策。实际上,在 设计好 工作 流程 和业 务流程 之后 再选 择相 匹 配的 工具集即 可。考 虑到 满足 实际 业务 和工 作流 程 的情 况,开 发一 些诸 如Shell 、Python 等脚 本程 序 是非 常理 性的 做法 。更重 要的 是,无论是CI 还是CT、 CD 等,都可 以使 用众 多 的开 源工具, 这样 做没 有被 锁 定的 风险 ,可 以自 由 切换 等。( 2)持 续交 付的 角 色和 方式产 品持 续交 付 的 角色 应由QA 测 试 人 员 来 担任 , 开 发 人 员也 需要 参与到产 品的 某一 轮系 统 测试 中,并随 时准 备Bug 审查 和Bug 修复 。最后 ,由QA 测试人 员根 据具 体 的 产品 缺陷 、质 量 情 况等 做出 产品 是 否适合 面向 用户 交付 、 发布 的决 定。持续 交付 的目 标不 是 要消 灭缺 陷,而 是要 规范 开发 和测 试的 流 程,从 根源上 提高 软件 质量 。总之 ,持 续集 成 、持 续测 试、持续 交付 和 持续 部署的核 心就 是让 不间 断 的 “密 集型、高强 度、信息 及时 反馈 的持 续 性改 进”成为 提高 软件 产品 质 量的 驱动 力。目前 ,持 续交 付的 方 式一 般有 :名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - ?源代 码交 付 需要将源 代码 下载 到所 需 要的 环境 中,如Python 的py 、Java 的java 等 程序 文件 。但 这 些文 件都 不是 标准 的 软件包, 不利 于集 中管 理 和运 行。?Linux 标 准 包 交 付 通 过Linux deb 或 者RPM 对 项 目 的依赖进 行管 理。这种 方式相 对更 加规 范和 科 学,但仍 然需 要解 决 包冲突问 题。同 时,这种 方式 会经 常因 服务 器 环境 差异、构建环境 初始化失 败等 问题 导致 无 法部 署Linux 标准 包。?虚拟 机镜 像交 付 在虚拟机 中安 装测 试 软件 产品 成功 后, 直 接将该虚 拟机 镜像 (比 如 VMware 的vmdk 、VirtualBox 的ova 、OpenStack 的qcow2 等镜像 )进 行交 付、发布 。显 然,这 种方式部 署成 功率 接近 100% ,而且 隔离 性好 。但存 在着 虚拟 机镜 像对服务 器资 源的 消耗 , 同时 容量 较大 、不 够灵活 等问 题。?Docker 镜 像交 付这 种方 式 是 对虚 拟机 镜 像 交付 的重大 改进 ,在保 证 系 统隔 离 的同 时, Docker 镜像 对 服 务器 的资源 消耗 更 低 、更加 轻量 。这 种交 付 方式 将成 为主 流趋 势。持续部署( Continuous Deployment)持续 部署 是持 续交 付 的后 续阶 段,也是整 个 CI/CD环 节中 的最后 一环 ,指的 是软 件通 过测 试 后自 动部 署到 生产 环 境中 。持续部 署的 目 标是 软件在 任何 时刻 都 是 可部 署的 ,可 进 入 生产 阶段 ,发布 给用 户使 用 。持续部署 的前 提是 能够 自 动化 完成 集成、测试和交 付等。它与持续 交付 的区别是 ,持 续交 付是 将软件 部署 到线 上环 境 中,使用 的是 手动 方 式;而持名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 14 页 - - - - - - - - - 续部 署强 调的 是自 动 化。换言 之,持续 部 署是 持续 交付 的更 高 阶段 ,所有通 过了 测试 验证 的 软件 都自 动部 署到 生 产环 境中 。如 果没 有 制度 的约束或 其他 条件 的影 响 ,团 队都 应该 以持 续 部署 为目 标, 如下 图所示 。CI/CD 在软件研发测试中的应用DevOps是 一种 工程 文化、理论集,是 一 个抽 象的 概念;而其范畴 下的CI/CD 则 是它 的具 体实 现和 方法, 是一 种化 抽象 为形 象的 工 具集 、流程图。如果 说DevOps 是云计 算,那么CI/CD 就是 计算 、存储 和网 络,OpenStack 则是 其具体 实现 平台 。软件 项目 的研 发有 两 大难 题:一是 确定 软 件的 需求 ,即 确定 目 标;二是确定 当前 离目 标还 有 多远,即确定剩 余的 工作 量。后 者是 项目 缺少 可见性的 问题 。前 者是 持续性 反馈 的问 题。比 如来 自用 户需 求的 反 馈、市场变化 的反 馈、 项目 研 发测 试过 程的 反馈 等 。自动 化是 软件 研发 测 试中 的重 要方 式。持续集 成最 大的 优点 就 是降 低风险,提 高项 目研 发过 程的 效率 和质 量,迎 合互 联网 时代 信息 快 速更 新的规律 。持 续集 成本 身 并不 能帮 助开 发工 程 师和QA 工程 师解 决 Bug ,而是 通过 不断 的测 试 和反 馈来 尽早 地发 现Bug ,问 题发 现得 越早,处理名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 14 页 - - - - - - - - - 问题 的成 本就 越小,也越容易 解决 。由于 无法 证明 通过 了某 次 测试 的代码永 远无 缺陷 ,因 此,持 续集 成中 的测 试 也就 显得 非常 重要 ,好的 测试能够 更多 、更 快地 发 现当 前版 本中 的错 误 。根据 持续 集成 的作 业 流,代 码从 提交 到生 产环 境,整 个过 程分 为以 下几步。提交( Commit )开发 者向 代码 仓库 提 交代 码。所有 后面 的步骤 都始 于本 地代 码 的一 次提交。测试(第 1 轮)整个CI 系 统配 置了 代码 仓库 系统 、 Jenkins 系统和 代码 评审 系统 的触发器,只要 提交 代码 就会 运行 自动 化测 试。 一般 这里 的测 试有 如下 几种。?单元 测试 :针 对函 数 或模 块的 测试 。?集成 测试 :针 对整 个 软件 的功 能测 试 。?代码 风 格 测试 : 针对 代码 的 编 写风 格进 行 测 试, 比如Python 的PEP 8 等 。?其他 测试 。构建( Build )名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 14 页 - - - - - - - - - 通过 第 1 轮 测试 后,代码 就可 以合 并进 主 干分 支,推送 到私 有 代码 仓库GitLab 系统中 ,进 行下 一阶 段的 构建 了。从开 发人 员提 交本 地 代码 ,到 测试 通过 ,代码 合并 到分 支里 ,提交 就算完成 了。此时 ,就 需要进 行构 建进 入第 2 轮测 试。所谓 构建 ,指的 是将源 码转 换为 可 以 运行 的Linux 标 准软 件包 , 比 如安 装依 赖、 生 成 配置文件 等, 当然 也可 以 构建 成Docker 镜像。测试(第 2 轮或多轮)构建 完成 后,就 要进 行第 2 轮或 多轮 测试 。 总之,构建部 署在 测试 之前 。此阶 段的 测试 最全 面 ,投入 资源 最多 ,包 括系 统测 试、功 能 / 集成 测试 、性能 测试 等都 会运 行 。需 要强 调的 是,每 一个 更新 点都 必须 测 试到 。如果测 试的 覆盖 率不 高 ,进入 后面 的部 署和 生产 阶段 后,很 可能 会出 现严重的 问题 。部署通过 多轮 测试 后,当 前代 码就 是一 个可 以 直接 部署 的稳 定版 本 。将这 个版本 的所 有文 件打 包 存档(比如Fuel 的iso , 或其他 自研 产品的iso 、vmdk 乃至Docker 镜 像 等 ), 发布 到成 品库 服 务 器 上 。这 方面 的自动化 部署 工具 有Ansible、Chef 、 Puppet 等。回滚名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 14 页 - - - - - - - - - 一旦 当前 软件 版本 发 生问 题,就 要回 滚到 上一 次构 建的 版本,使用上一次构 建并 发布 的版 本 。CI/CD 很 好地 解决 了代 码从 自动 化编 译 打包、 自动 化构 建部 署、自 动化测试 到快 速交 付产 品 4 个 阶段 。为 此, 需要 做到 :?软件 包尽 量轻 。 为 了保证 代码 在编 译、打 包、构建 等阶 段做 到快速 、轻量,应尽 可能 实现 软件 的模 块化 处理。典型 的,如 将OpenStack 的各 个服 务分 别放 在 不同 的Docker 镜像中 。?重视 管理 教育。在 公 司 中 ,一 个团 队 / 部门 里 的 工程 师素质 是 良莠不齐 的,不 能让 少数 人影 响到 一群 人、一 个整 体,仅 靠自 觉是 完全不够 的,需要 指导 团队养 成做 事的 好习 惯 。一个常 见的 问题 就 是开发人 员不 写单 元测 试 代码 , 影响到 整个 软 件研 发测 试的 质量 和 周期。构建产出物构建 工作 主要 产出 两 个东 西:待 测的 软件 包和 应用 系统( 有的 只有 后者)。这两 个产 出物 有所 不 同,前者 是构 建过 程 与环 境无 关,而且 可 重复 ,因此需 要提 供如yum 、npm 、gem 等软 件包 服务 ,让构建 号和软 件包 号建立 关联 ,便 于回 溯 。通 过IaaS 云 或Docker 容 器将CI/CD 环境 以微 服 务 的 方 式运 行,做到 开箱 即用。 CI/CD是软件 工程 的一 个 重要 实践,可以帮助 我们 更早地发 现问 题、解决 问题,降低 成本 ,同时 大大 减少 交付 、发 布 过程 中的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 14 页 - - - - - - - - - 不确 定性 ,提 高团 队 的生 产效 率。当然 ,CI/CD 与其他 工具 和方 法也 紧密相 关。每日构建和每日测试每日 构建( Daily Build)在 反应 速度 上没 有持 续集 成快 ,它 更 强调 的是通过 每天(通 常是 晚上)自动 部署 当天 开 发所 累积 的代 码,并 结合 每日测试(Daily Test)方 法进 行自 动化 测试 ,用于 评估 和衡 量项 目 的进 度。持续 集成 特性 决定 了 不可 能在 该阶 段加 入 大量 的测 试,而每 日 构建 则一般是 在夜 里执 行的,那么 这时 就可 以做 更多的 事情,比如 代码 质量 检查、单元 测试 、测 试覆 盖率、集成 测试 等。每 日构 建会 把当 天所 有 的提 交代码 都一 起做 集成 , 而 不像 持续 集成 那 样 每 提 交一 次 代 码 就 做 一次 集成 。持续 集成 属于 增量 式 构建 ,而 每日 构建 则 是一 次完 全构 建。每日 构建 是项 目的 心 跳线。一般而言,通 过每 日构 建我 们可 以 看到 项目的进 度。 比如 今天 有 10 个Bug 的修 复代 码都 提交 了, 晚上进 行自 动部署 并通 过了 自动 化 测试 ,第 二天 上班 时通过 查看 邮件 我们 就 可以 发现每日 构建 成功 了,那 么项 目就 又往 前迈 了 一大 步,开 发工 作又 有 了 具体的进 展。具 体 的 ,每 日 构 建 就 是 在 每 天 晚上 自 动 化部 署 一 个OpenStack 环境(可 以是 all-in-one,也 可以 是multi-node),然 后运 行大 型或 专项测 试 , 比 如API 性 能 测 试 、 API 接 口 测 试 、 功 能 测试 、部 署测 试 等 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 14 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 14 页 - - - - - - - - -