什么才是“软件工程化”?
记得单位上通过GJB5000正式评价之后不久,一些型号项目就有软件工程化的要求,并且编写《软件工程化大纲》(有的也称之为《软件质量保证大纲》)也逐渐成为型号项目的必备条件。
作为单位上的GJB5000的推进者,编写《软件工程化大纲》的任务光荣地落在我的头上。
什么是软件工程化?当时的我对此认识并不是很清楚。GJB5000是软件能力成熟度模型,实施GJB5000可以提升组织的软件工程化水平,但是,实施GJB5000就是软件工程化吗?
当时没有人给我答案。
如果把“工程”的概念泛化一下,工程往往不是短期的、靠单打独斗能够完成的,它是把很多人有机地组织起来,按照合理的计划、设计才能完成的。那么,实施GJB5000确实是把软件开发“工程化”了,因为实施GJB5000需要成立软件项目组,软件开发依靠的是多人的合作来完成的。
有基于此,当时我编写的《软件工程化大纲》主要是按照GJB5000体系的要求把型号各阶段需求管理和开发、设计、测试、评审等工程活动以及配置管理、质量保证等管理活动形成明确要求固化下来。这个大纲一直延续至今……
但这是我们追求的“软件工程化”吗?
对于“工程化”,还有另外一种解读:工程化,意味着自动化。
软件工程化就是把软件生产过程中那些不需要逻辑判断的“体力”的部分进行标准化,然后自动化。
这就是软件工程化。
以Java为例。程序员编写出来的Java代码如果要运行起来需要以下几个步骤:
下载依赖
编译
打包
安装运行环境,即JDK
启动程序
其中1,2,3步骤,我们通常称为构建过程。4,5称为部署过程。
软件工程化就是要将这两个部分(构建过程和部署过程)标准化、自动化。
构建过程的标准化可以使用Maven工具,自动化可以可以使用Ant工具;部署过程的标准化可以使用Docker,而Kubernetes,其实它是软件工程化的集大成者。它标准且自动化了软件的构建、部署、可观察性、软件的运行方式。
以上这两种软件工程化,如果让我重新进行一次选择,我会选第二种。
现如今的军用软件开发任务重,周期短,实施软件开发过程的标准化、自动化无疑是我们当前应该追求的开发方式。
这正是:
说说软件工程化,适时正确认识它
不为文字表达意,形势使然推进它
参考文献:我是如何做软件工程化的,作者:翟志军,公众号:持续交付实践指南