持续集成实践成熟度模型

简介:

1 概述
持续集成从“配置管理”、“构建”、“测试”、“部署及发布”及“团队习惯”5个纬度考察其成熟度,每个维度都有5个级别,分别是“入门”、“新手”、“中等”、“进阶”和“疯狂”。目前在各个维度上,行业的平均水平集中在“入门”和“新手”两个级别。
评估时各级别之间不能越级,就是说即使“新手”中个别条目已经做到了,但如果“入门”中有条目没有做到,也只能评为“入门”级。
该模型的主要目的是为了更好地帮助团队认识现状,同时了解改进的方向。该模型是对持续集成主要维度的简单衡量,背后可能有一些并不适合团队的假设,且并未对每个条目做细致解释,为获得团队持续集成工作的有针对性的全面评估,请联系PMO部门。
由于技术和项目的差异性,不同团队达到同一级别需要付出的努力可能差异很大,获得的收益也有区别,因此不适宜利用此模型在团队间进行比较。
2 配置管理维度
入门:
 使用版本管理工具
 使用私有分支
 功能测试Case在本地管理
 生产代码被版本管理
 每天提交代码,并写Comment。
新手:
 应用在最小工作单元完成后即可集成的分支策略
 所有构建、测试及部署脚本都被版本管理
 所有测试代码和数据被集中管理
 测试环境中的应用配置被版本管理
 代码签入的Comment清楚达意,含有必要的Metadata,比如Bug号等。
 RD使用完全标准的开发环境,没有仅供自己使用的脚本、数据或测试环境等。
中等:
 测试代码与生产代码同源
 生产环境中的应用配置被版本管理
 持续集成平台运行的脚本被版本管理,无需登录平台修改脚本。
 每次构建均有版本追溯,无需重新从源码构建历史版本。
 Qa使用标准的开发测试环境
 数据库被版本管理
 功能测试数据被版本管理
进阶:
 没有仅在团队成员本地保存的任何项目资产。
 RD和QA使用一致的开发测试环境。
疯狂:
 开发、测试、生产环境被版本管理,可以一键克隆。
 所有测试数据被版本管理

通过下面问题进一步了解团队的配置管理现状:
 使用何种分支管理策略?
 团队成员签入代码的频率和内容,Comment的质量如何?
 一个RD在全新的机器上建立完整的工作环境要经历那些步骤?
 一个QA在全新的机器上建立完整的工作环境要经历那些步骤?
 RD和QA的工作环境有什么区别?
 RD之间的工作环境有什么区别?
 Qa之间的工作环境有什么区别?
 测试数据是怎么管理的?
 RD是否在沙盒中开发?如果不是,有那些依赖?
 本地和平台构建脚本是如何管理的?
 测试环境和生产环境的应用配置是如何管理的?
 测试工具和测试Case是如何管理的?
 测试运行的环境依赖有那些?是否每个人在自己的工作环境中都可以方便运行?
 所有团队成员是否使用相同的脚本做本地构建?
 团队成员有那些私有的代码,脚本和预先部署的环境?
3 构建维度
入门:
 有帮助脚本分别执行各构建步骤
 阶段构建,例如Nightly Build或Weekly Build。
 Shell脚本作为自动化构建开发脚本
新手:
 代码签入后即运行包含自动化测试的构建过程
 构建结果被有效通知团队
 所有人都知道如何运行本地构建
 基础构建过程不再有突出的环境问题
 通过自动化构建脚本完成自动化构建任务。
 专人维护构建环境。
中等
 在本地和平台中运行自动化冒烟测试
 在平台中运行功能测试全集和性能测试。
 充分利用多台机器运行多个构建。
 构建过程集成了详细的报告。
 能够灵活配置各构建阶段的具体任务。
 通过脚本同步及升级各个构建机器中的环境依赖
进阶
 构建步骤被充分优化
 构建过程可以对报告做分析,并记录关键指标的趋势,并进行改进。
 充分利用多台机器做单个构建任务。
 在全新的开发环境中签出项目,通过一个脚本即可构建完整的开发和测试环境并成功产出部署包。
疯狂
 运行时间超过限制即失败。

通过下面问题进一步了解团队的构建现状:
 如何管理编译依赖?
 如何管理模块版本依赖?
 编译的时间是多长?
 每个人的构建环境和方法是否一致?
 自动化构建的具体步骤?
 自动化构建失败的主要原因是什么?
 是否使用了Build Grid?如何用的?
 如何管理Grid中的各台机器?如何同步和更新环境?
 本地构建的内容?什么时候运行?要多长时间?
 使用那个CI平台?如何配置的?
 如何调整构建中包含的内容?
4 测试维度
在其它纬度中也有一些与测试相关的条目,可参考。
入门:
 有部分自动化功能测试
 在项目后期集中测试
 利用缺陷跟踪系统管理缺陷
 仅有少量的单元测试,尚未发挥明显作用。
新手:
 最小工作单元包含手工测试。
 积累一定量的单元测试,团队已从中受益。
 构建时运行自动回归测试。
 有人工参与的提测过程。
 自动化功能测试具备一定数量并起到了一定保障作用。
 自动化功能测试全集频繁运行,不少于一天一次。
中等:
 最小工作单元包含自动化测试工作。
 不同层级的自动化测试发挥质量保障作用。
 静态代码检查及相关举措
 可以在构建中推荐提测版本
 自动化提测
进阶:
 普遍的单元测试,发挥良好效果。
 自动化测试覆盖率较高,测试工作被有效分散在开发阶段。
 手工测试大部分属于探索性测试。
疯狂:
 100%单元测试覆盖率。
 自动化测试提供信心十足的质量保证,构建成功后即自动部署。

通过下面问题进一步了解团队的构建现状:
 有那些级别的测试,现状如何?
 提测流程是怎么样的?需要多长时间?有多少人工参与?
 集中的测试阶段占整个项目周期的比例?
 QA和RD的合作流程是怎么样的?
 有那些自动化测试,数量和质量分别如何?
 自动化测试一般是什么时候写的,谁维护,怎么管理和运行的?
 什么时间,如何做回归测试?
 自动化验收测试、性能测试以及安全性测试现状?
 应用了那些静态代码检查,怎么用的?
 单元测试的覆盖率如何?
 什么时机,做那些人工测试?
 如何选择对哪个构建做测试?
5 部署及发布维度
入门:
 有辅助脚本支持的手工部署
 依据文档的人工上线流程
新手:
 完整的部署脚本支持
 向测试环境的标准化部署
 通过平台的半自动上线流程
中等:
 选择指定的构建产出进行自动部署
 可以推荐某个构建为上线候选版本
进阶:
 向生产环境中一键发布,一键回滚。
 向生产线部署后的自动化验证。
疯狂:
 一键恢复生产环境

通过下面问题进一步了解团队的部署及发布现状:
 上线流程是什么样的?
 是否需要通过work文档,邮件或是一个在线系统传递上线步骤或参数?
 如何监测部署的质量?
 如何做回滚操作?
 如何向开发环境部署?有那些步骤?需要多少人工参与?
 如何向测试环境部署?有那些步骤?需要多少人工参与?
 有那些用于部署的脚本?
 团队成员各自的部署环境有什么区别?
 如何选择合适的构建做部署?
6 团队习惯维度
入门:
 至少有一个人随时知晓构建状态
 阶段性代码提交习惯
 专人维护持续集成平台和脚本
新手:
 专人看护平台构建状态
 最小工作单元完成后即时合并到目标分支
 所有人知晓当前的构建状态
 构建失败后被及时修复或回滚,失败期间没人提交与修复构建无关的代码。
 签入前做本地自动化验证
 团队成员签入代码前做相同的本地验证
 失败构建不过夜
中等:
 失败构建修复时间少于半个小时。
 由提交人负责修复失败构建,每个人都关注构建状态。
 团队成员都写较为全面的单元测试
 每人每天向目标分支做至少一次对最小工作单元的有效提交。
 团队清楚持续集成平台和脚本内容,每个人都可以维护。
进阶:
 交付团队全员对持续集成平台的稳定构建负责。
 交付团队全员负责持续集成脚本开发。
疯狂:
 1小时左右向目标分支做一次对最小工作单元的有效提交,且很少发现构建失败。

通过下面问题进一步了解团队的部署及发布现状:
 RD如何定义自己工作完成的含义?
 团队签入代码的规范是什么?
 是否在签入代码前运行本地构建?
 如何确保失败的平台构建有人处理?是签入代码的人处理吗?
 构建失败的频率是多少?
 团队中谁维护自动化构建脚本?
 团队中谁维护CI平台?CI平台有那些权限控制?
 团队如何提高每个人的单元测试水平?

(作者:wenjian)















本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/743325,如需转载请自行联系原作者

相关文章
|
存储 缓存 NoSQL
深入理解Django与Redis的集成实践
深入理解Django与Redis的集成实践
436 0
|
3月前
|
人工智能 自然语言处理 安全
代码静态扫描工具集成与实践
代码静态扫描工具(Static Application Security Testing, SAST)是在不运行代码的情况下,通过分析源代码或二进制代码来发现潜在安全漏洞、代码缺陷和质量问题的工具
441 4
|
3月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
156 6
|
3月前
|
安全 JavaScript 前端开发
安全漏洞检测集成及实践:SAST/DAST工具集成指南
通过合理集成和配置SAST/DAST工具,可以显著提升应用程序的安全性,并在开发早期发现和修复漏洞,降低安全风险和维护成本
318 4
|
3月前
|
机器学习/深度学习 边缘计算 数据可视化
MyEMS 深度解析:碳管理赋能与系统集成的实践路径
MyEMS 是一款集碳管理与能源优化于一体的开源系统,具备多标准碳核算、碳足迹可视化、碳成本分析等功能,助力企业实现精准碳减排。系统支持与工业、建筑、政务平台等多系统集成,打破数据孤岛,提升能效。依托活跃的开源社区与丰富实践案例,MyEMS 持续迭代,推动绿色转型。
162 1
|
4月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
808 1
|
4月前
|
供应链 监控 搜索推荐
35页PPT|零售行业自助数据分析方法论:指标体系构建平台集成、会员与商品精细化运营实践
在零售行业环境剧变的背景下,传统“人找货”模式正被“货找人”取代。消费者需求日益个性化,购买路径多元化,企业亟需构建统一的指标体系,借助BI平台实现数据驱动的精细化运营。本文从指标体系构建、平台集成到会员与商品运营实践,系统梳理零售经营分析的方法论,助力企业实现敏捷决策与业务闭环。
35页PPT|零售行业自助数据分析方法论:指标体系构建平台集成、会员与商品精细化运营实践
|
5月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
171 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
6月前
|
机器学习/深度学习 数据采集 存储
朴素贝叶斯处理混合数据类型,基于投票与堆叠集成的系统化方法理论基础与实践应用
本文探讨了朴素贝叶斯算法在处理混合数据类型中的应用,通过投票和堆叠集成方法构建分类框架。实验基于电信客户流失数据集,验证了该方法的有效性。文章详细分析了算法的数学理论基础、条件独立性假设及参数估计方法,并针对二元、类别、多项式和高斯分布特征设计专门化流水线。实验结果表明,集成学习显著提升了分类性能,但也存在特征分类自动化程度低和计算开销大的局限性。作者还探讨了特征工程、深度学习等替代方案,为未来研究提供了方向。(239字)
202 5
朴素贝叶斯处理混合数据类型,基于投票与堆叠集成的系统化方法理论基础与实践应用
|
7月前
|
JSON 前端开发 算法
掌握Multi-Agent实践(三):ReAct Agent集成Bing和Google搜索功能,采用推理与执行交替策略,增强处理复杂任务能力
掌握Multi-Agent实践(三):ReAct Agent集成Bing和Google搜索功能,采用推理与执行交替策略,增强处理复杂任务能力
456 23