自从软件出现以来,软件开发中新技术、新方法不断出现,如编程语言有C、Java、Rust等,构件技术有COM/COM+、CORBA、JavaBean/EJB等,开发方法有面向过程、面向对象、面向服务等,以及目前比较流行的虚拟机、容器、微服务、DevOps、Scrum等技术和方法。但是,这些软件开发、软件复用技术,并没有给软件行业带来真正的变革,以下问题一直没有得到解决:一是每个软件项目都需要建立一个开发团队,并全程参与软件生命周期的所有阶段,包括软件需求、设计、开发、测试、部署,而软件开发过程中也一直离不开程序员一行行地编写代码;二是开发团队中的参与者必须是相关专业人员,其他人无法直接参与到其中;三是软件行业的生产力从来没有出现过大的飞跃,集中体现在软件开发周期长、不同团队的工作成果极难实现共享。参照人类社会发展历史可以发现,目前软件项目的开发模式与古代手工作坊非常类似,仅能开发是一些轮子、马车这一类的手工制品,无法想象软件界的航天飞机是个什么样子?这说明软件行业还处于一个低水平发展阶段,即“软件作坊”阶段,还远未进入软件的工业化生产阶段。
所以,软件的未来就在于实现“软件工业化”。
“软件作坊”是依靠手工劳动,使用简单工具从事小规模、小范围的软件项目开发,而“软件工业”则需要实现全社会的分工与协作,并能够贯穿于软件生产过程中的所有阶段,进而实现大规模或极大规模软件项目的开发。要实现社会化的分工与协作,其中的关键又在于软件开发的模块化。
虽然软件组件或构件技术已出现很长时间,还有人提出了软件生产线、软件工厂等概念,也有人提出由人工智能代替人工来实现编程自动化,但目前仍然没有任何一个开发平台或者一种开发技术够真正实现“以模块组装的方式开发软件”,进而引领软件行业发生软件的工业化革命。
软件行业陷入这种困境的根本原因,是缺少一个具备普适性的“工业规范”,目前已有的各种软件协议、规范或标准,都难以担当此重任。没有规矩,不成方圆,一个行业没有标准,就无法进入工业化生产。软件行业也是如此,软件开发更是如此。所以,要实现“以模块组装的方式开发软件”,就要遵循“工业规范”来开发标准化的软件模块,从而使得不同团队开发的软件模块可以组合在一起生成能够满足特定需求的软件产品。
上述“工业规范”应具备以下特征:
1.根据“工业规范”开发的软件模块,应处于同一个软件环境当中,具体体现为同一个目录、同一个开发工具版本、同一个程序库或数据库支持等。目前软件开发中的空间、包等概念的出现,是为了防止软件组件、类等的版本冲突而提出的,而“工业规范”则要求软件模块位于同一个空间或包中,这样才能实现软件模块的可组合、可插拔、可替换特性。
2.根据“工业规范”开发的软件模块,其对外提供的接口(或方法)名称和参数,应统一、明确。由不同团队开发同一个软件模块,如果没有一个统一的规范来约束,该软件模块的实现将千差万别,比如模块接口(或方法)命名方式的不同,以及接口(或方法)的参数名称、参数数据类型、参数顺序、返回值类型和数据格式的不同,都会导致该模块的实现方式不同,即使使用了同样的开发运行环境,这样的软件模块也难以与其他模块组合在一起并互相发生作用。
3.根据“工业规范”开发的软件模块,其属性、字段的名称和数据类型,应统一、明确。这个特征主要体现在软件模块的输入、输出数据和存储数据的规范化管理上。以一个用户数据表为例,对于“用户名称”这个字段,可统一定义为name,而不是login_name或userName,这样将极大地提高软件模块的开发效率,也便于不同软件模块之间的数据交互。