赵辉

DBAplus社群(dbaplus)

读完需要

20

分钟

速读仅需 5 分钟

图片来源:Pixabay, CC0

作者介绍

赵辉,前HSBC商业银行DevOps团队主管,DevOps专家,现任一线公有云企业DevOps平台解决方案架构师。

术语字典

  • 数字化转型:Digital Transformation (DT);

  • 开发运维一体化:DevOps;

  • 云计算:Cloud Computing,常见的公有云有Amazon Cloud Service(AWS)、Microsoft Azure Cloud、Google Cloud Platform(GCP)、阿里云(Alibaba Cloud)、腾讯云(Tencent Cloud), 以及华为云(Huawei Cloud);

  • 测试驱动开发:Test-driven Development, 是一种开发面向测试用例的软件开发模式和流程。

概论

这样的浪费有很多原因,但不乏是由于传统行业对于软件开发、部署、发布、迭代以及运维的了解有限,因而本文面向传统企业转型中的困难和疑问,通过推进组织的DevOps转型作为抓手来尝试提供一份数字化转型指南,以资参考。

1、数字化转型

数字化转型是使用云计算、大数据,以及其他信息技术对企业的运营、组织架构和商业模式进行改造的过程,以提高企业相应客户需求的速度,增强企业与客户的联系。数字化转型不仅仅是技术转型,更需要从商业战略、组织架构、文化、客户关系等多维角度来确定企业的转型策略和目标。

这些维度和开发运营一体化(DevOps)变革和敏捷运动有众多重叠的领域。因而,我们可以使用DevOps作为抓手,在确定商业目标的同时,减少数字化转型中的成本,通过DevOps的成熟度指标,来关联和量化数字化转型的成果。缺乏量化性的指标,就无法管理数字化转型的过程,也是造成大量投资浪费的原因之一。

2、开发运营一体化

开发运营一体化(DevOps)是对于企业内部开发和运营的整合的方法论、工具和指标。衡量一个组织的DevOps成熟度,需要从技术、流程、度量和文化四个维度来进行评价。根据当前主流业界的标准,DORA(DevOps Research and Assessment) DevOps成熟度模型、软件交付表现SDP(Software Delivery Performance)包含了下面这些指标,包括前置时间(Lead Time)、变更失败(Change Fail)、可靠性(Availability),以及部署频率(Deployment Frequency)和恢复时间(Time to Restore)。

3、开发运营一体化和数字化转型的实例

微软公司,作为操作系统和办公软件的业界翘楚,也同样面临着数字化转型的压力。但是不同于其他企业,微软有深厚的工程师文化,强大的IT技术储备。他们面临的问题是如何将基于授权(license)的商业模式转型为以订阅(subscribe)为基础的订阅服务上。例如传统的单机密钥授权转换为云化的office 365订阅服务。

在这期间,微软着重推行了敏捷开发模式并且是office业务上云,同时将其传统的基于私有数据中心的Team Foundation Server改造成为基于微软云业务的Microsoft Azure DevOps。这成为了微软内部的运营开发一体化的转型抓手和重要推动引擎。

开发运营一体化能力建设

依据DORA(DevOps Research and Accessment)超过六年对业界技术能力(Technical)、流程(Process)、度量(Measurement)和文化(Cultrue)四个维度的连续研究和评估,我们同样可以从这四方面进行建设。

1、技术能力

版本控制跟自动化紧密相关。事实上,建设持续集成和持续交付能力的建立在成熟的版本控制流程和工具的基础之上。很多企业在建立版本控制的时候,更多关注的是代码,而忽略了代码之外的配套流程和制品,例如测试用例、自动化测试脚本、测试数据、基础设施和数据库。我们在建立版本控制的时候,需要实现基础设施即代码、配置即代码、数据即代码,以及测试即代码。版本控制可以帮助企业满足以下两个最关键的需求,即:

1)可复制性(Reproducibility)

可复制性是保障我们的开发、测试,以及生产环境的可复制性。能够快速通过自动化的手段实现环境的复制和重建,进而保证环境的一致性。

2)可追踪性(Traceability)

可追踪性的目的是为了保证团队可以在任何时间都可以利用版本重建环境,并且可以比较两套环境的区别。

2、主干开发模式

业界有两种常见的软件开发模式,即功能分支模式(Feature Branch Based Development)和主干开发模式(Trunk-based Developoment)。

1)功能分支模式

功能分支模式是指开发人员从主干分支(Master分支)拉取代码来开始开发,直到开发人员认为代码开发结束,即从不可部署阶段到可部署阶段。如上图所示,即从浅灰色变为深灰色,才将代码重新合并到主分支。

这种模式有两个主要问题。第一,每一次发布都伴随着大量的代码合并,并且会引起代码冲突。原因是每次分支合并的代码量过大;第二,需要手工维护代码的合并,因为代码不仅仅是合并到主干,还需要人工判断是否需要合并到其他功能分支上。一般的逻辑是如果另一个功能分支的发布时间晚于当前要合并的分支,并且后面的发布需要当前分支的功能或问题修复,即需要合并,即所谓的向后合并。向后合并可以采用自动化合并的模式来实现,例如可以依赖于Jenkins来实现自动向后合并。由于每次合并代码都需要完整的测试,所以需要代码锁定(Code Freeze),以确保代码的稳定性。

2)主干开发模式

不同于功能分支模式,主干开发模式是实现持续集成的必要条件。开发人员只有在代码准备发布的时候,才会拉出发布分支,所以发布分支一直是可部署的状态。而在功能分支模式下,功能分支不一定是可部署状态。开发人员每天都会把当下代码签入主干,但是要求开发人员如果自己签入的新代码引起了任何问题,必须立即修复,否则会阻塞其他开发人员签入代码。因为每次签入的代码量比较少,所以出现代码冲突的可能性就会大幅度降低。同时,主干代码因为继承了回归测试的自动化,任何破坏回归功能的代码都会被立刻修复,也维护了代码质量。主干开发模式不需要锁定代码或者其他手段来保证代码稳定性。

实现主干开发模式的要点:

  • 分支数目控制在3个或以下;

  • 至少每天一次代码合并;

  • 不要采用代码锁定(Code Freeze)和集成阶段;

  • 确保在代码合并之前进行代码复查(Code Review)和代码扫描(Code Scanning), 推荐使用PR(Pull Request)代码扫描。

3、测试驱动开发

开发人员经常误认为开发运营一体化(DevOps)就是讨论开发和运维,即Development和Operation,其实这是一个望文生义的一种误解。在推进DevOps转型中,很多企业和团队经常忽略了自动化测试这一个关键的因素。没有完善的测试驱动开发流程,没有完善的回归测试自动化,持续集成就是空谈。

上图是测试驱动开发TDD的流程示意。新的功能在拿到需求之后,测试人员和开发人员都需要被通知。所有的开发都是基于对测试用例的实现。首先增加新的测试用例,并且运行自动化测试。此时,由于代码还没有开发,测试一定会失败。这么做的原因是让开发和测试人员明确在代码开发之前新增加的测试用例是失败的,从而避免测试用例的错误而造成测试用例错误通过的问题。开发人员根据测试来进行功能开发,直到所有测试用例通过。当测试用例通过之后,开发人员进行代码的重构来进行代码优化,以实现安全性和性能的要求。在签入代码到主干的时候,如果发现自动化回归测试失败,测试人员需要更新自动化回归测试确保回归测试是最新状态。

实现TDD的要点:

  • 代码签入都会触发自动化构建;

  • 代码签入会触发一系列自动化测试;

  • 确保每天的构建和自动化测试必须是成功状态;

  • 如果出现构建和测试失败,开发人员必须立即修复。

4、自动化测试

自动化测试给开发人员提供了一种快速反馈的机制。自动化测试是保证持续集成的基础条件。自动化测试包括下面两种测试种类:

1)单元测试(Unit Test)

单元测试是TDD流程中经常使用的针对单个函数、类或者方法,来保证开发人员的代码按照预期的测试方法。单元测试的开发早于业务代码,流程在上一节介绍TDD的内容中已经提及。

2)验收测试(Acceptance Tests)

验收测试是针对程序或这API进行功能上的测试,本身也是开发工作的一部分。开发人员在没有通过验收测试之前是不能够认为开发工作已经完成。

上图从四个角度分析了自动化测试的使用。

从业务角度来看,验收测试和手工探索性测试都是针对业务功能进行的,来保证业务流的顺利进行。一般手工测试在代码上生产环境之前进行,有些团队称之为PVT(Product Validation Testing),即产品验证测试,对应的测试人员一般都是业务专家。

从开发支持的角度来看,单元测试和自动化验收测试是实现CICD和TDD的关键。

以上为一个完整的CICD从开发到发布的流程。在commit stage中,经常会进行代码扫描和单元测试。如果单元测试或者代码扫描未通过,开发人员可以获得快速反馈,并根据需要重新修改代码。这个地方可以实现问题的左移, 即代码风格问题左移和安全性左移。

在自动化验收测试时,如果测试未通过,有两种可能性。第一是业务代码有问题,第二为验收测试代码需要调整。这个反馈应该发送给对应的测试团队和开发团队。

3)自动化测试金字塔(Automation Testing Pyramid)

根据自动化测试金字塔模型,尽可能多的问题应该被自动化单元测试发现,这样可以降低测试成本,开发人员可以尽早获得反馈以修改代码。验收测试的作者和维护者,应该尽可能是开发人员,这一点经常被很多企业和团队所忽略。

5、测试数据管理自动化

测试数据管理是很多团队和企业在做DevOps转型中容易忽略的领域。测试数据是保证测试能够正常进行的基础。没有良好的测试数据管理,会提告测试缺陷的误报率,降低团队的信息,忽略真正的严重产品缺陷。

测试数据管理必须要保证自动化测试能够顺利进行。针对不同的环境,例如测试环境、预生产环境、测试数据必须能够区别管理,因为不同环境的测试数据有可能会有不同。

测试数据管理应该能够自动的在环境设置完成之后,配置测试环境,以便开展自动化测试。在测试完成之后,能够自动清理数据,并且恢复环境至测试开始之前。

测试数据管理必须要能够根据代码开发更新,确保数据的实时性。

本文主要从技术的角度探讨DevOps如何助力企业数字化转型,后续将陆续推出包括DevOps流程、指标、文化和组织角度的解读,敬请持续关注。

>>>>

参考文档

  • 《哈佛商业评论 - 数字化转型并不仅仅是技术》

    https://hbr.org/2019/03/digital-transformation-is-not-about-technology

  • 《State of DevOps Report by puppet》

    https://www.thinkahead.com/wp-content/uploads/2018/10/State-of-DevOps-Report.pdf

  • 《Five Foundational DevOps Practices by Splunk》

    https://www.splunk.com/pdfs/ebooks/5-foundational-devops-practices.pdf

  • 《Google DevOps Research》

    https://cloud.google.com/devops

  • 《DORA State 2018》

    https://cloudplatformonline.com/rs/248-TPC-286/images/DORA-State%20of%20DevOps.pdf

  • 《测试驱动开发(TDD)》

    https://en.wikipedia.org/wiki/Test-driven_development


推荐阅读

CTO 技术管理的“三板斧”

架构师这5条禁忌,你犯了么?

“宇宙第一大行”之 MySQL 数据库架构解密

阿里高工流生 | 云原生时代的 DevOps 之道

   END
#接力技术,链接价值#

浪费超9000亿美金,数字化转型失败罪魁祸首在DevOps?相关推荐

  1. 9000亿投资浪费在数字化转型,罪魁祸首在DevOps?

    来自:DBAplus社群 作者介绍 赵辉,前HSBC商业银行DevOps团队主管,DevOps专家,现任一线公有云企业DevOps平台解决方案架构师. 术语字典 数字化转型:Digital Trans ...

  2. 亿信华辰:避免数字化转型失败的3大破局思路和4点建议

    数字化转型,是重点,同时也是痛点. 埃森哲与国家工业信息安全发展研究中心推出的<2021中国企业数字转型指数研究>显示,2021年我国数字化转型效果显著的企业为16%. 麦肯锡发布的报告显 ...

  3. 【数字化】导致数字化转型失败的12个原因;数字化关键要看供应链 苹果和亚马逊做出了表率

    导致数字化转型失败的12个原因 至顶网CIO与应用频道 01月21日 编译:数字化转型时下很流行.你都找不到一家没有利用某种云.分析.人工智能和机器学习的组合来更好地服务客户或简化操作的企业. 但是这 ...

  4. 安超OS为企业数字化转型构建坚实的云基座

    安超OS为企业数字化转型构建坚实的云基座 随着越来越多的用户将超融合用在重要的系统上,使得整个系统的安全性和可靠性也就显得尤为重要. 安超OS采用的是端到端的全容错冗余架构设计,完全支持了数据容错.网 ...

  5. 快手一夜“10台春晚”背后,未来市值或超千亿美金

    1月28日,快手在其官方微博宣布与十家省级卫视春晚达成合作.1月29日,快手APP更新,并在更新说明中备注:上快手,一起分21亿,每晚8点看超级直播. 快手"老铁"们有福了! 一. ...

  6. 美的:100亿,数字化转型路径与实践

    最艰难.焦虑的决策,是数字化转型的投入.数字化每年都要投几十亿.这种时候,这种抉择,很迷茫.因为你没办法一下看到成效.焦虑来自对未来的未知. 来源:一问 报告来源:开源证券 美的集团董事长方洪波兼总裁 ...

  7. “云”上就诊,泽塔云超融合助力医院数字化转型

    在大多数人的印象里,去医院看病的体验并不太好.门诊大厅里,挂号.收费.取药和办理手续的人们大排长龙,等待就诊的患者拥挤在诊室的门口,患者家属带着检查结果在各个楼层来回奔波,伴随患儿的哭闹声,一切场面都 ...

  8. 撕破币圈交易惊天骗局:超 30 亿美金成交量完全是虚假编造

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 近日,OKex.火币.币安.Lbank等虚拟货币交易所,均被指存在交易量造假行为,涉假数据高 ...

  9. 商汤两月内完成融资超12亿美金,估值达45亿美金

    2018 年 5 月 31 日,商汤科技宣布完成 C+ 轮 6.2 亿美元融资,由多家国内外投资机构和战略伙伴参与,联合领投方包括厚朴投资.银湖投资.老虎基金.富达国际等,深圳市创新投资集团.中银集团 ...

最新文章

  1. 总结ISO各层协议都有哪些
  2. 数据结构--图(Graph)详解(四)
  3. 数据建模大数据就业挑战月薪30K
  4. html table 转置,jQuery+CSS实现的table表格行列转置功能示例
  5. 关于static继承的问题
  6. php中json_encode中文编码问题(转)
  7. 算法设计与分析 —— 排列问题
  8. hdoj 5934 强连通分量+缩点 模版题(Java版)
  9. 小学计算机老师实习报告,精选信息技术教师实习报告3篇
  10. 百度地图迁徙大数据_百度地图大数据看十一:各地商圈出现“红色拥堵”游乐场迎来“高光时刻”...
  11. java计算机毕业设计高校学生党建管理系统源码+mysql数据库+系统+lw文档+部署
  12. 8.绘制统计图形——直方图
  13. [OpenGL] 非真实感渲染(NPR)的几种效果demo(水墨画/漫画/铅笔画)
  14. python在家怎么赚钱手工艺_在家手工赚钱的3个好方法(一天挣个百多块钱轻轻松松)...
  15. 【Jenkins】Linux环境Jenkins下载与安装
  16. LeetCode - 1002 - 查找常用字符(find-common-characters)
  17. 计算机组装与维护结业报告,计算机维修与维护的结课论文
  18. H5DU1262GTR-E3C特征
  19. 红白机基本原理(二) CPU
  20. js中every用法_详解JavaScript中的every()方法

热门文章

  1. queuedeclare参数说明_MQ 学习笔记之RabbitMQ
  2. java多线程模拟loadrunner进行压测
  3. 具体的压栈指令,例子
  4. 计算机网络之网络概述:6、TCP/IP模型和5层参考模型
  5. 【专栏必读】王道考研408操作系统万字笔记(从学生角度辅助大家理解):各章节导航及思维导图
  6. python之paramiko模块
  7. sqlite3使用简介
  8. golang错误:The process cannot access the file because it is being used by another process
  9. Citrix路径遍历(CVE-2019-19781)
  10. docker将容器设置与宿主机为同一局域网