CI持续集成与软件测试

1.定义与内涵

IT 企业中CI/CD的应用愈加广泛,成为推动软件研发活动的重要基础设施服务,同时推动 DevOps 模式的实际落地。一般传统或者狭义、普遍的 CI/CD,是指持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)。而更加广义、全面的理解,是指持续集成(Continuous Integration,CI)、持续测试(Continuous Testing,CT)、持续交付(Continuous Delivery,CD)和持续部署(Continuous Deployment,CD)四个方面。
持续集成是指每日频繁地(比如一天多次)将代码集成到主干分支中。强调通过集成和测试的速度,快速给出一个集成的结果(是失败还是成功),在代码集成之前,必须先通过自动化测试验证,只要有一个测试用例失败,就不能集成。

  • Design:这一阶段完成软件开发的需求分析和设计。
  • Develop:这一阶段完成软件开发的功能代码,一个最佳实践是采用测试驱动开发(TDD)的方法,测试代码和功能代码的编写同时进行。
  • Test:这一阶段完成软件的各项大型或专项测试,比如界面测试、API 测试、性能测试和系统测试等。
  • Release:这一阶段完成软件产品的发布,并交付给用户使用。

敏捷开发的核心是指整个软件开发活动被划分成一系列短的迭代过程,每个迭代完成一定数量的功能,迭代周期应该尽量短。在软件开发需求已经确定的情况下,迭代应该由测试驱动开发(TDD)和集成反馈来驱动。只有这样,才能为质量持续改进奠定一个良好的基础。

持续集成是和单元测试结合在一起的,也就意味着,持续集成和单元测试需要并行工作。持续集成一般由代码每次 git push/review 触发。先签入代码就先看到构建结果,后签入,则要排在后面。这就要求构建时间不能太长,否则在构建时容易引起混乱,很难知道是谁的代码破坏了集成,导致很难定位问题。

2.持续集成过程

持续集成的工作阶段比较明确,主要有三个大的阶段:持续集成准备阶段、持续集成使用阶段和持续集成测试阶段。
1)持续集成准备阶段的工作主要包括:

  • 通过代码评审系统(比如 Gerrit),实现代码审查和集成反馈。
  • 通过版本控制系统(比如 Git或 GitLab)建立源码仓库。
  • 通过构建工具运行相关构建和测试(比如 Python 项目的 Tox 和 Pytest)。
  • 通过 CI 系统(比如 Jenkins)建立 Job,将版本控制和构建工具整合,并设置构建触发条件。

2)持续集成使用阶段的工作主要包括:

  • 开发人员向代码评审系统(比如 Gerrit)提交代码。
  • 通过 CI 系统监听代码的提交,运行单元测试,反馈集成结果。
  • 通过构建工具对代码进行编译、打包和部署。
  • 通过版本控制工具实现版本控制与管理。

3)持续集成测试阶段的工作主要是,CI 系统根据集成结果进行不同操作,如果成功,则将代码合并到主分支;如果失败,则反馈给开发人员修改重新提交。
从中我们可以看到,持续集成涉及的主要工具类别包括:

  • 版本控制工具——实现源代码管理、版本控制。
  • 构建工具——实现代码的自动化编译、打包等,这是持续集成的核心工具。
  • 测试工具——实现代码的自动化测试,以及大型测试或专项测试。
  • CI 系统——整合版本控制、构建工作和测试工作,实现持续集成。

CI优势:

  1. 易于定位错误。比如当持续集成失败时,说明新提交的代码引起了错误,这样也很容易知道是谁犯了错误,可以找谁来讨论。
  2. 提高团队的开发信心。虽然整个系统还不是那么可用,但至少可以看到功能已经在一点点被集成了。
  3. 提高对进度的控制和把握。这点非常明显,如果每天都在集成,当然每天都可以看到哪些功能可以使用,哪些功能还没有实现。如果你是开发人员,则不用为在每日 Scrum 晨会时说自己完成了多少开发而烦恼;而如果你是 Scrum Master,那么也不用再烦恼开发人员说完成了代码的40%到底是个什么概念。
  4. 有助于代码开发的质量评估。比如从开发质量的评估图表中,找出经常出错的测试和源码等。
  5. 与测试工具结合,做到每次提交都进行测试。
  6. 快速发现错误。每完成一点开发,就提交评测、代码审查,可以快速发现错误,及时修复,越尽早解决,成本越低。

你可能感兴趣的:(软件测试理论,软件测试,python)