我是如何做软件工程化的

作者: 翟志军 | 来源:发表于2021-07-16 06:56 被阅读0次
girl-2961959_640.jpg

最近有些忙,就是给团队里的同事写的代码进行工程化。只是这些活对我而言有些过于体力活,我干起来提不起兴致。

这个过程中也发现很多人不理解什么是“软件工程化”。导致的结果就是,很少人知道我干的事的价值,也不知道该如何与我配合。所以,有必要正式给大家介绍一下我做的“软件工程化”指的是什么。

要介绍软件工程化,我们首先工从程序员写出来的代码开始说起。

首先,程序员写出来的代码,并不能直接运行。不同的编程语言,要运行起来,所经过的步骤不同,我们以Java来例。Java代码运行起来需要以下几个步骤:

  1. 下载依赖
  2. 编译
  3. 打包
  4. 安装运行环境,即JDK
  5. 启动程序

1,2,3步骤,我们通常称为构建过程。Long long a ago,构建过程全在程序员自己的开发机上完成。后来,想偷懒的程序员发明了Ant这款工具,将构建过程自动化了。但是,Ant这款工具本质上只定义了一个基于任务的DSL(领域特定语言),不利于标准化。这时,Maven出现了。它将1,2,3步骤进行标准化。即,构建过程标准化。说多一句,在这方面,Gradle相对Maven其实是开了倒车。

构建过程,除了构建工具本身的标准化,我还会将构建环境标准化。这个过程就是根据不同的构建环境创建相应的标准化的Docker镜像。将来,同一个项目的每一次构建都使用相同的构建环境。

构建过程的标准化只是软件工程化的一个阶段。下一个阶段是构建过程自动化,即,将构建过程放到一个标准化的构建环境中自动化执行。换句话说,程序员依然在本地可以执行1,2,3步骤,只不过,团队不再使用程序员本地构建出来的结果,而是使用标准化的构建环境中构建出来的。

在我做构建自动化的工作的时候,常有程序员不屑地说:我在本地电脑就一条命令,就可以把包上传到制品仓库了。

这样的话,我听了很多了。我想说:是的,你的确可以一条命令解决问题。但是你只是解决了你个人的问题。你并不没有解决软件团队的问题。软件工程化要解决的是一个团队协作的问题,而是个人的问题。你的不屑就像当年在福特汽车厂里手工造车的工人,看不上流水线生产汽车。

在对构建过程工程化后,我们就开始对4,5步骤进行工程化了。4,5步骤叫做部署过程。部署过程的工程与构建过程的工程化类似,也是先标准化,然后自动化。

在没有Docker之前,运行环境的准备和启动程序的标准化是非常困难的,每个公司不一样,同一个公司下的不同团队也大概率不一样。

有Docker之后,一切都变了。一下子任何语言的程序的部署过程的标准化都变得非常容易了。

在将原来的应用改成使用Docker运行的过程,是运行环境标准化的过程,也被我们称之为容器化的过程。

它所带来的好处是部署过程不用关心你的运行环境。也就是部署过程与软件运行环境进行了解耦。

部署过程如何做到工程化,我之前的文章已经有说明,本文就不再细说。

这时,你发现,上面我们对1,2,3,4,5步骤做的,无非就是把软件生产工程中,体力的部分进行标准化,然后自动化。这就是软件工程化。关键是,你能否识别什么是体力部分,什么是脑力部分。

另,脑力部分,还是需要发挥每个人创造力。

最后,想想Kubernetes,其实它是软件工程化的集大成者。它标准且自动化了软件的构建、部署、可观察性、软件的运行方式。它真正做到了软件的工程化。

个人经验总结

  • 标准化与自动化的顺序并不是固定的。有时,你需要先自动化,再标准化。因为不自动化,没有人力做标准化。
  • 标准化涉及很多技术细节,在你还不了解何种标准更优时,千万要先松后紧,不要一开始就把标准就定得全面且死板。标准是演化出来的。
  • 部署过程的标准化,大多数人只记得对应用的部署,却忘记了对配置也进行同样的标准化部署。
  • 工程化需要一个人知识面非常的广,要懂多种语言、多种构建工具、多种部署工具、多种监控方式。

相关文章

  • 我是如何做软件工程化的

    最近有些忙,就是给团队里的同事写的代码进行工程化。只是这些活对我而言有些过于体力活,我干起来提不起兴致。 这个过程...

  • 2019-07-04

    对前端工程化的理解 目录 前端-GUI 软件 构建工程化的几个阶段 工程化需要考虑的几大因素 一.GUI软件 现如...

  • 8.4 软件开发环境与工具

    软件开发环境(software development environment ,SDE)是指支持软件的工程化开发...

  • 前端为什么要工程化?

    什么是前端工程化? 虽然前端工程化的概念兴起还没几年的时间,但是对于“工程化”这个词并不是一个新鲜词了,在其他软件...

  • 前端工程化之组件化

    前端工程化是从软件工程衍生出的概念, 它是指以工程化的方法构建和维护有效、实用和高质量的软件。前端从刀耕火种到现在...

  • 软件工程基础、软件测试过程模型

    软件工程 软件工程(Software Engineering,简称SE)是一门研究用工程化方法构建和维护有效的、实...

  • 前端项目工程化

    什么是前端工程化 前端工程化是使用软件工程的方法来解决前端的开发流程中模块化、组件化、规范化、自动化的问题,其主要...

  • 开发环境,生产环境,测试环境的区别

    软件开发环境是指在基本硬件和宿主软件的基础上,为支持系统软件和应用软件的工程化开发和维护而使用的一组软件,简称SD...

  • 软件工程:1.概述

    软件工程是研究软件开发技术和软件项目管理的一门工程学科,从工程化的角度来指导软件开发、测试和项目管理等活动。 1....

  • 2021-11-12 谈谈什么是前端工程化

    谈谈什么是前端工程化 [TOC] 什么是前端工程? 将工程方法系统化地应用到软件开发中,就叫软件工程。 那么 工程...

网友评论

    本文标题:我是如何做软件工程化的

    本文链接:https://www.haomeiwen.com/subject/ovmiultx.html