考研自动化(考研自动化专业排名大学)

考研自动化,考研自动化专业排名大学

技术专家

熊志男

DevOps平台产品经理 & 研发效能专家

【作者介绍】致力于通过DevOps工具平台赋能助力业务研发团队,实现研发效能提升,包括规模化持续集成、代码扫描和自动化测试等实践。

你好,今天我想跟你聊聊如何通过流程自动化驱动研发效能提升, 工业革命以来,自动化技术极大改变了人们的工作和生活 , 而软件研发过程的自动化则 成了 新的挑战 。

从上世纪八九十年开始,计算机辅助软件工程和基于模型的软件开发等方法逐渐兴起,直到近十年的低代码软件开发等,一直在致力于通过工具和技术的手段,来提升软件的生产效率。

在如今这个“软件正在吞噬世界”的时代,作为一名软件工程师,需要实现的需求数量如滚雪球般逐渐增加,超时工作已经成为软件从业者的常态,不过通过软件研发流程自动化,可以实现个人和组织的效能提升。

本文将从以下两个维度,分别阐述下研发流程自动化的应用方法和收益:

• 单项任务的自动化

• 多任务自动化协同

01单项任务的自动化

很多企业都是先从自动化发布和运维起步,然后逐步往前推进自动化的。

从下图可以看到,这个研发生命周期的简单模型中,按照时间线来看,一个需求从想法转换为设计、落地到代码、再生成二进制包、结合环境信息发布到生产,整个过程不确定性是从后往前逐渐增加的。

软件生命周期,不确定性变化

而不确定性则是实现自动化的一大挑战,因此目前阶段对于具备发散特性的代码开发过程自动化,虽然已经有很多优秀的学术研究成果和部分的落地实践,但是仍然没有在企业中实现大规模的落地和推广。

按照以上思路,我带你先从自动部署这个 最常被大家提起的自动化实践展开探讨。

▶︎自动部署

微软公司在2019年时,每天部署超过8万次,如果每次部署都需要手动执行,可想而知是多么痛苦的一件事情。

虽然一般在小型的软件公司不会有这么多的部署需求,但是对一名开发人员来说,部署仍然是需要每天面对的,具体来说比如测试环境的部署、准生产环境部署和生产环境部署。

到现在我还记得大概十年以前,当时还是通过脚本部署测试环境时是多么耗费时间,常常是一边执行部署脚本,一边查看启动日志。

如果顺利执行完成则会感到非常庆幸,接下来再去执行另外一个脚本,甚至在执行脚本前还需要修改一些部署目录等参数变量,整个部署过程是不可重复的且不稳定的。

而到现在随着云原生技术的兴起,软件的部署过程已经完全实现自动化,从过程化脚本、到脚本与配置分离、然后再到Ansible和Puppte等此类自动化配置工具的应用。

如今在基于云的环境下,无论是公有云还是私有云,IAC(基础设施即代码)已经广泛应用,自动部署变得越来越稳定和快速,并且能做到完全的重复执行。

自动部署技术演进

部署流水线进一步增强了编排能力,并且加入了前置的自动化测试等,把多个原子的自动化任务组合起来形成一条流水线,GitOps是一个很好的实践。

▶︎部署流水线

部署流水线进一步增强了编排能力,并且加入了自动化测试和静态代码分析等前置任务,把多个原子的自动化任务组合起来形成一条流水线。自动化流水线两个重要的特性分别是触发器和编排能力:

  • Webhook触发器

拿Github代码仓库举例,当一个特性分支要合并到受控分支(Master)时,会发起Pull Request,为了确保受控分支的代码质量,一般会在此时进行CodeReview(代码评审)。

而自动化的静态代码分析,可以作为人工评审前置操作,提取过滤掉一些低级别的代码错误,如空指针异常等。以下为由Pull Request的Webhook来触发静态代码分析的流程图:

pull request 触发静态代码扫描

  • 流水线编排

由Pull Request扩展开来,可以编排一个包含自动化测试的流水线,其中会包含测试环境部署的步骤。以下为流程图:

pull request 触发完整部署流水线

谈到支持流水线编排的工具,就不得不提起我们大家都熟悉的Jenkins,该工具至今仍然是被广泛使用的流水线平台之一。而随着GitHubAction、GitLabCI和Argo CD等支持GitOps的工具流行起来,GitOps实践逐渐成为一种趋势。

图源:Argo CD官网-Argo CD的架构图

▶︎ 自动部署的应用

单独的自动部署过程属于单项任务的自动化,而部署流水线则需要多个自动子任务的协同,只不过这是一种简单的串型执行的协作方式。在实际应用中,自动部署和部署流水线的应用场景却略有不同。

单项任务的自动化,无论是自动构建、自动部署或自动化静态代码分析,现在都被集成到IDE(集成开发环境)中了。这样做带来的好处是,作为一名软件开发人员,不需要切换工具或平台,就可以在本地的集成开发环境中实现这些操作,带来个体效率的提升。下图为阿里云的自动部署插件。

图源:阿里云官网-Alibaba Cloud Toolkit部署插件

部署流水线这种多任务协同的自动化,仍然需要有个专门的工具或者平台来支持,不过并不影响通过IDEA插件来触发执行。

未来可以实现本地插件和云端服务的结合,本地插件负责触发执行,并能够展示结果;而云端服务则通过云原生技术,来分布式地高效执行流水线。

本地插件触发流水线

▶︎ 低代码平台

目前业界对于低代码的看法,仍然存在一些争议。有人认为低代码是未来软件开发的大势所驱,也有人对其持有负面的意见。

在这里先抛开分歧,从实际应用情况来看,低代码平台已经在企业软件开发领域,逐步开始发挥作用了。特斯拉公司曾经用低代码片平台Mendix,快速实现自建ERP系统,各个IT巨头也纷纷搭建自己的低代码平台。

图源:文章《Low-code development and model-driven

engineering: Two sides of the same coin》

有效使用低代码平台,可以极大地提升效率。用免费的建站工具wordpress,最快可以十几分钟搭建一个网站出来。

OutSystems和Mendix这样的低代码平台,则可以支持更多类型的应用创建,包含网页端、移动端和IOT应用等。通过与云原生基础设施的结合,集成了企业级DevOps工具,从创建一个应用到完成发布实现了无缝衔接。下图为OutSystems的介绍:

图源:OutSystems官网文章《Developing with OutSystems》

低代码平台提供的功能,除了我们常见的通过拖拽控件方式来生成前端应用外,还有基于DSL语言、流程图和状态机等方式,来直接生成应用程序。从模型到可执行的应用,通常有两条实现路径:

• 1)通过模型来生成代码,生产的代码或字节码,直接运行在JVM这样的运行时环境,成为可执行的应用。

• 2)通过执行元数据的方式,模型以元数据的方式保存,然后通过解释器来直接执行元数据,从而实现应用的功能。

第二种方式执行更加高效,因为其减少了生成代码的过程,使开发、部署和测试过程更加快速。在实际使用情况下,两种方式可以分别单独使用或者结合使用。

02多任务协同的自动化

在单点效率的提升方面,如自动部署、自动代码质量检测和自动化测试等,目前已经有很多优秀的实践,并且使单点效率得到了很大的提升。

不过纵观整个软件研发生命周期,仅仅提升单点的效率是不够的,还需要通过提升多任务的协同效率,来减少等待时间和提升整体的效率。

图中示例可以看出有很多重协同的任务,其总交付时间(lead time)会比处理时间(processing time)要多,是因为这些任务有一些前置准备和等待的时间,因此就会使总交付时间变长。

比如一个任务从设计进入开发,需要一些评审和沟通的时间,从开发完到测试开始之前,又需要一些测试环境准备的时间。

因此可以说,从单点自动化到流程自动化,是提升研发效能的一个必然发展路线。

通过流程自动化来提升多任务协同效率的具体手段,可以从可视化和自动化两个方面入手:

  • 可视化

主要指上下级或上下游任务之间数据的打通,如在需求维度可以查看开发过程的代码相关信息和测试维度的相关信息,这样的做法使不同视角均能够准确且及时获取更加完整的信息,利于多角色高效协同。需求关联开发和测试信息如下图:

需求任务与开发测试数据关联

如上图,以需求和任务为主线,关联了开发过程中的数据包含代码提交信息、代码合并请求和代码分支信息,还有测试过程中的缺陷、用例和提测单数据。

  • 自动化

主要是指不同任务的前置和后置任务,能够根据规则自动化触发执行、多个任务之间的状态自动同步等。下图是使用GitHub时,通过git命令触发issue的状态变为关闭的实践:

以下为通过Jira自动化规则来分配任务的实践,可以根据提前设定好的规则,自动把任务分配给状态为空闲的团队成员。

总结起来,有以下几种类型的流程自动化工程实践:

▶︎ 结语

作为一名软件开发人员,我们的日常工作就是通过技术手段使业务流程自动化,从而提升业务运营的效率。而对软件研发活动自身来说,目前还有很多低效的和手工的操作,可以说,研发效能提升正是要找到这些效能瓶颈,并通过技术手段来实现改变。

自动化技术正是解决低效工作的最佳手段,我本人也是从自动化测试开始入手,逐步到自动化部署、自动化代码检测,到现在致力于通过工具来实现多任务的自动化协同,深刻体会到了自动化带来的收益。

关于软件研发流程自动化的更多实践和观点,欢迎留言区和我一起探讨。

报告下载

大 佬观点分享

关于RPA、AI、企业数字化转型

(点击文字即可阅读)

行业知识交流分享,结识扩展人脉圈层

考研自动化(考研自动化专业排名大学)

想获得更多考研相关资料

京ICP备14027590号