什么才是“软件工程化”?

记得单位上通过GJB5000正式评价之后不久,一些型号项目就有软件工程化的要求,并且编写《软件工程化大纲》(有的也称之为《软件质量保证大纲》)也逐渐成为型号项目的必备条件。

作为单位上的GJB5000的推进者,编写《软件工程化大纲》的任务光荣地落在我的头上。

什么是软件工程化?当时的我对此认识并不是很清楚。GJB5000是软件能力成熟度模型,实施GJB5000可以提升组织的软件工程化水平,但是,实施GJB5000就是软件工程化吗?

当时没有人给我答案。

如果把“工程”的概念泛化一下,工程往往不是短期的、靠单打独斗能够完成的,它是把很多人有机地组织起来,按照合理的计划、设计才能完成的。那么,实施GJB5000确实是把软件开发“工程化”了,因为实施GJB5000需要成立软件项目组,软件开发依靠的是多人的合作来完成的。

有基于此,当时我编写的《软件工程化大纲》主要是按照GJB5000体系的要求把型号各阶段需求管理和开发、设计、测试、评审等工程活动以及配置管理、质量保证等管理活动形成明确要求固化下来。这个大纲一直延续至今……

但这是我们追求的“软件工程化”吗?

对于“工程化”,还有另外一种解读:工程化,意味着自动化。

软件工程化就是把软件生产过程中那些不需要逻辑判断的“体力”的部分进行标准化,然后自动化。

这就是软件工程化。

以Java为例。程序员编写出来的Java代码如果要运行起来需要以下几个步骤:

  1. 下载依赖

  2. 编译

  3. 打包

  4. 安装运行环境,即JDK

  5. 启动程序

其中1,2,3步骤,我们通常称为构建过程。4,5称为部署过程。

软件工程化就是要将这两个部分(构建过程和部署过程)标准化、自动化。

构建过程的标准化可以使用Maven工具,自动化可以可以使用Ant工具;部署过程的标准化可以使用Docker,而Kubernetes,其实它是软件工程化的集大成者。它标准且自动化了软件的构建、部署、可观察性、软件的运行方式。

以上这两种软件工程化,如果让我重新进行一次选择,我会选第二种。

现如今的军用软件开发任务重,周期短,实施软件开发过程的标准化、自动化无疑是我们当前应该追求的开发方式。

这正是:

说说软件工程化,适时正确认识它

不为文字表达意,形势使然推进它

参考文献:我是如何做软件工程化的,作者:翟志军,公众号:持续交付实践指南

(0)

相关推荐