software-strategy-book/Ch1-5-SoftwareIndustry.tex

122 lines
41 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

% !TEX root = main.tex
\section{概述}
软件产业是战略性新型产业的重要组成部分,在推动传统产业升级转型、促进经济结构调整和发展方式转变、拉动经济增长和扩大就业、变革人类生产生活方式等方面发挥着日益重要的作用。
随着软件从依附于计算机硬件的程序逐步发展为独立的产品并且门类逐渐丰富与软件产品、服务相关的组织和团体在协作和竞争中逐渐形成产业链、产业圈其重要性已经国民经济中显现。2018年我国软件和信息技术服务企业数超过3.7万家从业人数达到643万人软件业务规模包括软件产品、信息技术服务、嵌入式系统软件达到6.3万亿元\cite{baobiao2019}。据预测2019年全球信息技术产业规模将达5万亿美元其中软件和信息技术服务业占比将达32\%物联网软硬件、云计算、大数据等新兴领域将占17\%\cite{ITIndustryOutlook2019}
软件学科与软件产业相互促进、共生共荣。软件产业的发展推动着软件学科的进步,软件产业的繁荣与分化对软件学科的演进与细化提出了更高的要求。同时,软件学科服务于软件产业,支撑软件产业的发展和壮大。软件学科从理论和实践上对软件产业的繁荣发挥着越来越重要的作用。
本章将概述软件产业概念以及软件产业的生态构成,回顾软件产业的形成、发展的历程,从软件技术与软件产业的互动的视角阐述软件产业生态不同阶段的特点和不同的侧面,分析软件产业随着应用场景和应用领域的细分所形成的不同产业生态格局,揭示软件学科在软件产业发展中的推动作用和软件产业对软件学科演进的需求牵引。通过软件产业生态不同阶段和侧面的讨论,揭示软件产业的发展趋势,以及软件学科对支撑软件产业和国民经济发展的重要作用,力图为软件学科更好地服务于产业和经济发展需求提供有用的信息。
\section{软件产业和软件产业生态}
软件产业是为有效地利用计算机资源而从事计算机程序编制、信息系统开发和集成及从事相关服务的产业\cite{research1996}。软件产业\index{软件产业}通常分为软件产品业和软件服务业两大部分。因此也有学者将软件产业定义为“与软件产品和软件服务相关的一切经济活动与关系的总称”\cite{furonghui2017}
软件产业这一概念的外延非常广泛。在工信部中国电子信息产业发展研究院编著的中国软件产业发展蓝皮书系列中软件产业细分为基础软件产业、工业软件产业、信息技术服务产业、嵌入式软件产业、云计算产业、大数据产业、信息安全产业等。中国软件行业协会的软件产业研究报告中将软件产业分为软件产品和软件服务而软件产品进一步分为系统软件、支撑软件和应用软件软件服务则涵盖了与软件相关的服务内容。国际数据公司IDC将软件产业细分为应用解决方案Application Solutions、应用开发及部署软件Application Development and Deployment Software和系统基础软件System Infrastructure Software。从更广泛的意义上来说无处不在的软件产品和服务越来越深刻地影响着众多传统产业和新兴产业并随着技术的发展和应用领域的扩展不断细化社会分工软件在其他产业中的重要性也日益显现并使得软件产业与其他产业呈现出融合的态势。
软件产业涵盖了软件企业、软件产品和服务、软件从业人员(特别是开发者)众多要素,他们之间相互影响、相互依存、相互竞争。在软件产业产生与发展过程中,软件企业及其所生产的产品、所提供的服务之间的供需关系形成了软件产业链,相关或者相似关系形成了软件产业的若干子领域,或产业圈。这些不同的产业链、产业圈以及相关的参与者之间或互补、或竞争,从而逐步发展为错综复杂的产业生态。
软件产业生态\index{软件产业生态}是软件企业、软件从业人员以及各层次、多种类的软件产品与服务的共生体。软件产业的发展历史,也是软件产业生态中产业链和产业圈逐步建立和发展繁荣的历史。当前,从各类软件产品和服务的相互依赖性来看,软件产业生态链中各类软件基本可分为系统软件、支撑软件、应用软件等层次。软件产业链上不同种类的软件及其开发者、开发企业形成了相互关联的多个子产业圈。例如应用软件产业又可进一步细分出工业软件(包括企业管理信息系统等软件)、个人软件(以个人使用为目的的软件)子产业。下游的软件子产业很大程度上受到上游软件子产业的制约,而另一方面又在一定程度上促进上游软件子产业的发展。例如,处于软件产业链上游的操作系统等系统软件是下游应用软件运行的基础,因此围绕操作系统等系统软件和各个业务领域的需求所研发的一系列应用软件,与所对应的操作系统形成相互依赖、相互促进、相互制约的关系;而随着应用软件的普及使用,用户市场也能进一步驱动应用软件摆脱原有的操作系统约束,发展出支持其他操作系统的新版本,从而扩展原有的生态范围。由此可见,各类应用软件、操作系统等软件以及相应的开发商、用户共同构成了复杂且演化的生态系统。软件产业生态的主要参与方及其相互关系如图\ref{fig:fig1-5-1}所示。
\begin{figure}[ht]
\centering
\includegraphics[scale=0.5]{fig1-5/fig1.png}
\caption{软件产业构成}\label{fig:fig1-5-1}
\end{figure}
\section{软件产业发展历程概览}
软件产业脱胎于计算机产业的发展和进步,与软件技术相互影响、相互促进。软件产业的形成与发展遵循产业分化和进步的一般规律。图\ref{fig:fig1-5-2}展示了软件产业发展历程的概貌。
\begin{figure}[ht]
\centering
\includegraphics[scale=0.4]{fig1-5/fig2.png}
\caption{软件产业发展历史概览}\label{fig:fig1-5-2}
\end{figure}
早期的计算机软件往往附属于计算机硬件。直到20世纪50年代软件还主要以项目的形式进行定制化开发。这些软件开发项目往往由政府主导并服务于国防等关键部门并且只有少量大型服务企业研制。当时计算机行业的大多数高管不相信软件产品会有重要的市场\cite{DBLP:journals/annals/Johnson98}
20世纪60年代随着计算机硬件能力的提升软件的规模日益庞大开发过程日益复杂出现了软件危机。软件的重要性和独立性也开始逐渐显现。例如1961年开始研发的OS/360操作系统软件耗费了超过5000人年的工作量软件成本甚至超过了IBM System/360大型机硬件。60年代中期出现了一些具有特定用途、可以被售卖给不止一个客户的程序具有一些产品化的特性但销售量小仅能看作是软件产业的萌芽。而与此同时软件开发和管理中的大量现实问题促使业界思考软件开发的独特之处。1968年软件工程概念提出标志着对软件及其开发方法的研究进入了一个新的阶段也预示着软件开发向工程化发展。1969年计算机企业巨头IBM宣布了软件可作为独立于硬件单独售卖的商品而存在\cite{DBLP:journals/annals/Johnson98}。在此期间出现了强大的企业解决方案提供商例如专业的数据库公司研发数据库等通用型软件以弥补计算机制造商自带软件的不足但整体规模仍然不大。这种状态几乎持续到20世纪70年代末绝大多数软件应用程序仍是在主机或微机上按需定制的。在这一阶段软件厂商已经开始发展起来并且开始认识到大规模复杂软件开发中的一些问题推动了软件工程理论的发展。
20世纪80年代随着微型计算机的大规模普及大量软件得到了广泛的使用软件企业以此为契机得以迅速发展开启了以软件为销售对象的商业模式\cite{furonghui2017},也由此掀起了以数字化为主要特征的第一次信息化浪潮\cite{2018建设数字中国}。在这时期,软件真正开始形成一个独立的产业,不仅有大量的软件开发企业和开发者,还出现了更加广大的软件产品市场和用户,并且越来越独立于特定的计算机硬件,逐步形成独立的产业。
从20世纪90年代中期开始以美国提出“信息高速公路”建设计划为重要标志互联网逐渐实现了大规模商用迎来了以网络化为主要特征的第二次信息化浪潮\cite{2018建设数字中国}。软件从以单机应用为主逐渐呈现出网络化交互特征。大量带有社会化特征的软件开始蓬勃发展,形成了以互联网为基础、以服务化为特征的产业生态。
当前,随着以智能化为主要特征第三次信息化浪潮\cite{2018建设数字中国}的到来,软件产业正在发生新的变化。新型的融合化应用场景越来越丰富,基于云计算、大数据的智能化应用软件和企业蓬勃发展,基于软件的产品和服务日益多样化精细化,逐渐向传统行业和新兴行业渗透,呈现出“软件定义一切”的融合化态势。
在后续的论述中,我们将以软件产业与软件技术互动为主线,从不同阶段和视角回顾软件产业及其生态的发展,探讨软件产业对软件学科的需求以及软件学科对软件产业的支撑。
\section{不同阶段和视角的软件产业生态}
\subsection{软件产业与软件技术的互动}
由软件产业发展历程可以看到,软件产业的发展与软件技术的进步是相互影响、相互促进的。
当人们意识到软件可以是独立于硬件存在的单独产品时,针对不同目的、具有不同功能特点的软件也逐渐发展出专门化细分的软件技术领域,相应的软件产品也逐渐形成独立的门类。逐渐细化的各类软件产品,极大丰富了软件产业的内容结构。
随着互联网技术的发展和普及,软件产品从拷贝安装的应用模式,逐渐转向通过网络按需获得的服务模式。软件的应用场景和用户群体的多样化趋势,扩大了软件市场,催生了一批以在线软件服务为主要业务的软件企业。这些企业和各类新型应用需求,反过来又促进了服务化软件技术的创新和发展,使得软件产业显示出服务化特征。
随着软件在各个不同行业中的广泛使用,各类企业与软件相关的投入与产出都普遍增加。无处不在的软件在各个业务领域中的重要性日益显示,并正在迅速融入各个领域的核心业务中,推动着各个领域的技术创新和发展。
在软件产业和软件技术的发展过程中,软件的复杂性和软件开发的困难也越来越被人们所重视。在不同的产业阶段,如何高效地开发高质量软件成为永恒的话题,不断推动着软件技术的进步和软件产业的发展。从软件开发的角度而言,软件开发方法、工具和环境经历着不同的变化。软件开发者,以及以软件开发工具和环境为主要业务的软件企业,一起构建了独特的产业生态,与软件技术的共同发展。
可见,软件产业的发展,从形成初期的以单独销售软件授权的产品化为特征,到逐渐发展为以提供在线服务、按次按量收费的服务化为特征,以及近年来因其他产业对软件产品和服务的大量需求而进一步发展为以软件和传统应用场景的融合化为特征,软件技术的发展和变革无所不在。与此同时,软件技术本身的发展,也逐步建立起以开发者为中心的,由软件开发方法、环境和工具为主要产物的子产业,并持续推动整个软件产业的演进。软件开发也从最早的源代码由开发者独占的“闭源”模式,逐渐发展出以基于互联网的广域协同为特色的源代码共享的“开源”模式;开源和闭源共存、商用和免费共存,造就了丰富的产业发展方式。
本节回顾软件产业从产品化到服务化的发展过程,进而以开发视角为例,阐述软件产业与软件技术的互动,并揭示软件产业与传统产业的融合化发展新趋势。
\subsection{以产品化为特征的软件产业生态}
正如传统工业部门在生产力发展过程中不断分化一样,软件也经历了产品门类不断细分的过程。软件从硬件中剥离出来之初,并没有具体的门类细分,从硬件资源管理到具体应用功能都包括在一个混沌的整体中。随着软件需求的不断增长,软件应用的数量不断增多,人们发现有一些共性功能是几乎所有软件的运行都必须具备的,因此就将这些共性分离出来,包装成早期的操作系统,而功能各异的应用功能则在操作系统之上开发运行,形成各类应用软件。后来,人们发现一些应用软件中仍然存在不少逻辑上高于操作系统、同时又存在于多种应用中的共性部分。这些共性部分又进一步被分离出来,有些被单独包装成产品,产生了数据库软件以及其他用于支撑软件运行交互的所谓中间件。而上层的应用软件也在实际应用中针对不同的业务需求不断细分,形成了各类不同的应用软件,孕育了各自的软件开发企业和应用市场。可见,随着软件技术的发展,软件产品经历了共性沉淀、结构细分的过程,而此过程中,每一个细分领域出现了专门的软件技术领域和产品,而产业结构也逐渐丰富。
本小节以操作系统产品、办公软件产品、中间件产品、工业软件产品为典型代表,概述以产品化为特征的软件产业生态产生与发展过程。
操作系统是构建现代软件产业生态的重要基石。20世纪60年代操作系统软件开始逐渐从计算机硬件中独立出来出现了产品化萌芽。例如OS/360操作系统能运行在一系列用途与价位不同的IBM System/360大型机上具有了现代操作系统的独立性和产品化的特征但仍然依附于特定厂商没有形成规模化生产。1969年贝尔实验室开发开放源码的Unix操作系统得到了广泛的应用。之后基于Unix的源代码大量类Unix系统被研发出来可用于多种计算机硬件。市场上形成了多种独立的操作系统软件产品。例如加州大学伯克利分校研发的BSD以及此后的FreeBSD、NetBSD、OpenBSD等衍生产品。20世纪80年代微软通过与IBM公司的合作成功研制了面向个人计算机的桌面操作系统MS-DOS成为当时在IBM PC上最常用的操作系统也带来了大量的软件应用场景推动了第一波信息化浪潮促进软件产业的发展和壮大。同期MacOS在苹果公司Macintosh计算机上也得到广泛应用。1983年嵌入式实时操作系统RTOSVxWorks由美国WindRiver公司研发具有高性能的内核以及友好的用户开发环境以其良好的可靠性和卓越的实时性至今仍被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中。20世纪90年代微软公司自行研发新操作系统Windows通过图形化界面来替换其原有的字符界面为主的DOS系列操作系统并持续推出更新版本直到今天仍占有大量桌面操作系统市场份额。1991年芬兰裔美国软件工程师Linus Torvalds基于Unix研发了Linux操作系统具有轻量级微内核的设计和良好的可移植性随后由不同的厂商或开源社区参与研发形成了Redhat、CentOS、Debian、Ubuntu等多种发行版本。在多个软件厂商和开发社区的参与下Linux操作系统在软件产业中建立起独特的地位并且在多种开源或共享软件协议下形成了付费与免费并存、闭源与开源并存、商业与社区并存的产业格局。这也是当今开源软件相关产业的特点之一。
当前操作系统软件产业中各类操作系统产品具有不同的特点或应用场景。例如在移动智能终端操作系统领域源于谷歌的Android操作系统以其开放性吸引了众多手机设备厂商开发出多个Android定制版本而苹果公司的iOS则在其独立的经营下形成了相对封闭的发展模式以其优良的性能获得了市场的认可。两者形成了各自产业发展模式。可见在某一细分的领域往往存在多个产品形成市场竞争同时也因不同产品各自的特点形成了市场互补。产品的多样性以及标准化等特性为操作系统产业乃至整个软件产业的繁荣提供了重要的支撑各类软件能够在通用的操作系统软件上运行是其他各个子产业发展的基础。
办公软件是一种重要的服务于日常信息处理的共性应用软件产品\footnote{在我国,办公软件也被归入基础软件。}。由于办公软件产品的普及各类信息的记录与处理有了便捷高效的平台。其中最为知名的办公软件包括文字处理、电子表格、演示等。早期的办公软件国外有Word Prefect、Lotus123等而国内则有WPS等都具有广泛的应用和深刻的商业影响。随着信息处理的需求越来越大人们对办公软件的易用性要求也日益提升推动者各厂商对软件产品的设计不断改进。在操作系统进入图形化“视窗”时代后相应的办公软件也开启了“所见即所得”WYSIWYG的新阶段大大提升用户体验并反过来对操作系统的效率和稳定性提出新的要求。各主要厂商的办公软件产品逐渐成熟稳步发展相互竞争形成细分的子领域和相对独立的子产业。
中间件是一种重要的基础软件。中间件与操作系统、数据库系统并称为三大系统软件但相比于操作系统和数据库中间件产品出现得更晚。一般认为中间件是网络环境下处于操作系统等系统软件和应用软件之间的一种起连接作用的分布式软件。1968年出现的将应用软件与系统服务分离的IBM CICS交易事务控制系统可以看作是中间件产品的萌芽。它在面向最终用户的应用功能与面向机器的系统服务之间提供了中间层的封装使得各个层次的关注点更加集中。到20世纪90年代互联网的出现使网络应用和分布式应用登上历史舞台而其中涉及通信、协同等源于异构性的大量共性问题复杂性越来越高需要专门的软件产品来处理。一般认为AT\&T公司贝尔实验室于1990年推出的用于解决分布式交易事务控制的交易中间件Tuxedo是中间件产品诞生的标志。此后消息中间件、应用服务器中间件、应用集成中间件企业服务总线ESB等、业务架构中间件业务流程管理BPM等等各类中间件产品迅速发展起来。典型的中间件厂商包括国外企业IBM、Oracle、BEA等开源产品组织Apache、JBoss、JOnAs等以及国内企业金蝶、东方通、中创、普元等形成了相互竞争、相互补充的繁荣生态。可见中间件产品的发展过程也是软件技术相关领域日益复杂和细分的结果。
工业软件是一类典型的面向领域的应用软件是支撑传统工业企业信息化、提升传统工业企业管理水平的重要软件产品簇。工业软件按涉及的工业业务领域可分为研发设计类软件和业务运营管理类软件。最早的面向工业生产及其信息化的独立软件开发商在20世纪六七十年代出现80年代更便宜的个人电脑和通用操作系统逐步普及企业信息化的门槛得以大幅降低工业软件逐渐开始普及并开始功能细分。随着工业生产和研发复杂性提升各个研发领域如计算机辅助设计CAD、辅助分析CAE、辅助制造CAM、辅助工艺规划CAPP、产品数据管理PDM、产品全生命周期管理PLM等涌现了大量的商业化软件产品为相关业务领域带来了显著的生产力优势很快在各个行业得到普及。在业务运营和管理领域早期的软件更多集中于管理信息系统MIS重点在于以数字化的形式来记录企业管理过程中产生的原始数据以及简单的业务流程。为了更好利用以手工为主的企业既有流程企业资源规划ERP等软件产品诞生逐渐形成了以计算机软件为中心的企业级管理系统。它不仅仅是对既有业务流程的自动化而是包含了诸如财务预测、生产能力、资源调度等更具有价值的软件功能同时对企业经营管理方式产生了深刻的影响。工业软件产品的销售已不限于单个系统的售卖与安装还包括行业解决方案、业务流程优化、最佳实践培训等业务咨询和服务能力的传播形成了更加丰富的商业模式。
由此可见,以产品化为特征的软件产业销售软件使用许可为主要形式,针对不断细化的软件使用需求,研发出各类软件产品,作为商品向用户销售,并基于这些软件产品深刻影响到人们的生产生活。由于软件产品复制的边际成本非常低,以至于可被忽略这一完全不同于传统产业的特性,知识产权保护成为软件产业中的重要企业战略决策\cite{RePEc:unm:umamer:1995006}。同时,大量用户的特殊需求要求软件企业提供大量的定制功能,因此咨询与实施成为软件产品部署的重要方式,同时也促进企业采用支持可变性建模的开发方法开发面向特定领域的系列软件产品,使得产品化的软件生态更加丰富。随着云计算、移动计算等技术的发展和普及,一些以销售软件产品为主的软件企业开始向云化、服务化转型。软件产业逐步进入以服务化为主要特征的新阶段。
\subsection{以服务化为特征的软件产业生态}
互联网技术的发展与普及,使得软件产品从依赖于拷贝安装转变为通过网络、按需索取成为可能。软件功能进一步细分为前端以人机交互为主和后端以业务逻辑处理为主两大部分。随着大量的业务逻辑迁移到后端,对后端的计算、存储能力提出了更高的技术要求,逐步发展出了云计算技术与平台;而互联网的广泛可达能力,带来了巨量的普通用户,形成了丰富的互联网应用。
在以服务化为特征的软件产业生态中,软件的核心价值主要以网络服务的形式呈现。作为产业生态的主体,软件企业大量采用云计算技术提升用户服务能力;同时,软件的用户能够在各类终端上通过网络按需访问所需要的服务。此时,软件可以根据用户的需求,以按次、按量等方式计费使用,出现了服务租赁这种新的商业模式。以由于软件的服务化、远程化、轻量化带来了具有良好的伸缩性和互操作性,因此,服务化的软件极大地推动了软件产业生态的繁荣。从企业而言,软件的部署和运维得到良好的控制;从用户而言,轻量化的运行提升了使用体验。受限于篇幅,本节仅以社交类软件和云计算服务为例介绍具有典型服务特征的新型软件产业生态。
社交类软件体现了人和人之间的连接。这一天然的人际链接的需求在互联网普及之前只能通过传统的社交方式来完成。互联网的发展使得社交活动发展到一个完全不同的高度这也催生了一大批以社交为主营业务的软件公司。社交类软件最早以即时消息服务IM的形式出现例如国外的ICQ、AIM、MSN以及国内的OICQQQ的前身等。由于和社交关系深度绑定这类软件具有极强的粘性一旦占据优势地位就非常难于被其他软件所替代但其功能受到当时技术环境的制约也相对单一。
互联网模式的变革也为新的社交软件形态的产生带来了新的机会例如Web2.0时代的到来在线交流变得更加便捷也催生了诸如Facebook、Twitter以及国内的微博等社交类网站的兴起。它们不再局限于通讯录中的固定的联系人而是使得互不相识的人际互动变得更加频繁甚至还出现了以陌生人社交为主要业务的软件产品以及面向职业人士的LinkedIn等软件产品。移动互联网的兴起带来另一场变革。智能手机的用户普及率高且便于随身携带使得通过智能手机随时在线使用社交媒体软件成为可能。这催生了新一代的社交类产品如微信、Telegram、Line、WhatsApp等的繁荣。传统的即时消息服务软件例如QQ等也扩展出游戏等增值服务并加入更广泛社交的能力。围绕这些应用软件形成了大量外围软件服务涉及电子商务、在线支付、招聘择业、娱乐游戏、社会信息服务、在线通讯等众多领域几乎涉及了社会生活的方方面面。可以说在新型软件技术的支撑下社交软件产业生态已经影响到当今社会的主要生活方式。
云计算服务是新型服务化软件背后的重要技术支撑提供了大规模并行化定制化的服务能力。虚拟化技术Virtualization是云计算服务的基础。虚拟化本身可以以软件产品形式出现但对外提供服务化能力将计算机的各种实体资源如CPU、内存、磁盘空间、网络适配器等进行抽象、转换后以虚拟设备的方式呈现出来并可供分割、组合为一个或多个计算机环境。自20世纪60年代以来虚拟化能力随着桌面计算和服务器架构的日益发展不断发展完善面向不同的底层硬件资源和上层应用需求出现了以KVM、VirtualBox、VMware ESX、Xen等多种虚拟化软件产品进而出现了用于虚拟环境管理的OpenStack、Amazon EC2等产品。基于虚拟化技术许多厂商如Amazon、微软、Google、百度、阿里巴巴、华为等提供了不同层次的在线服务包括基础设施即服务IaaS、平台即服务PaaS、软件即服务SaaS。基础设施即服务提供在线计算资源和基础设施比如Amazon、阿里巴巴、华为等厂商的云服务器租赁等服务。平台即服务提供在线的应用开发和发布解决方案提升应用开发和运行的灵活性比如Google App Engine、微软Azure、Force.com等。软件即服务是在线化的软件形态面向最终软件用户以在线服务的形式提供面向领域的软件功能比如SalesForce的CRM系统、Cisco的WebEx等。不同厂商在推出相应的云计算服务时往往会提供IaaS、PaaS、SaaS中的一层或多层服务建立起各自的服务生态而不同软件厂商的软件产品和服务间相互竞争、相互补充进而构成更加复杂的云计算服务软件产业生态。
在软件服务化的趋势下,不论是传统行业还是新兴行业,软件随处可用、随需而变、按需提供的特性,大大扩张了软件产业的范围,使得软件与人们生产、生活关联更加紧密,成为社会经济生活各个环节中不可或缺的重要组成部分。进而,随着软件能力的提升和应用范围的扩大,小到日常生活、大到城市治理,多元融合的软件开启了以融合化为特征的软件产业阶段。
\subsection{以融合化为特征的软件产业生态}
第三次信息化浪潮的推进使得智能化、融合化逐渐成为软件产品和服务的新趋势。从无处不在的计算到软件定义一切融合化的软件已经开始渗透到社会生活的方方面面。在这新型的软件产业生态中软件产业与传统产业的边界开始模糊很多传统产业越来越多地引入软件作为本产业能力提升的途径。这些产业不仅使用软件还积极开展业务转型加强软件研发的投入客观上有向软件企业转型的趋势形成产业的融合化态势。另一方面软件已经不仅局限于运行在计算机设备上还进一步覆盖多种智能移动终端、感知设备甚至人。人机物融合是新型软件产业生态中的典型场景。得益于小型微型终端设备、智能终端设备的普及新型物联网应用促使软件开发商、硬件制造商、服务提供商、系统集成商等多种角色共享智能化、融合化的软件市场份额形成更加多元化的软件产业。例如在智能家居场景中各类智能家居设备通过软件定义的方式接入智能家居总控软件用户能通过在智能手机中安装远控软件实现对家中设备的远程查看、管理和控制。与生活密切相关的传统生活电器产业产生大量的智能软件研发需求为软件产业提供了巨大的潜在发展空间。又如近年来从线上到线下O2O的服务模式以共享单车、共享汽车为代表的共享经济模式无不体现了软件与各行业融合的全新产业生态。
软件产业与各个产业的融合趋势,体现了软件价值的日益增长。越来越多的行业需要软件来充分利用信息化、智能化带来的重大能力提升。软件的重要性使得传统企业开始向软件企业发展,甚至开始转型;同时,更专业化的软件企业将深入地与业务领域结合,从而为各行各业提供更加精准、高效、智能的软件支撑。软件的价值,从早期通过硬件体现,到通过产品和服务体现,将进一步通过与各个领域的数据、知识与业务的深度融合来体现。传统产业中的软件份额的提升,以及软件产业向传统业务领域的渗透,将构建更加丰富和庞大的软件产业生态。
\subsection{开发视角的软件产业生态}
软件开发是软件产业的重要环节,软件开发者是软件产业生态的重要参与者。从软件开发的视角来看,软件生产的方式不断演进,带来了软件产业的发展和变革。软件产业的发展离不开软件开发工具与环境以及软件开发过程与方法的进步,同时,软件开发相应的工具、环境、方法、技术也形成了富有特色的子产业,并形成一种推动软件产业本身发展的重要动力。软件开发工具既能用来开发软件产品,同时其自身也是一类软件产品,构成软件产业重要组成部分。本节将从软件开发活动所形成的软件产业的角度,回顾软件工具\index{软件工具}与软件开发方法的产业影响,分析不同阶段软件开发技术对软件产业发展的支撑。
从产业发展规律而言,规模化的软件生产是软件产业产生和发展的重要条件。而软件工具的产生对提升软件开发、运行、维护等过程的效率具有重要的作用,是规模化软件生产的前提。早期的软件工具主要是特定计算机主机上的专用程序。汇编语言和高级程序设计语言出现后,汇编程序、解释程序、编译程序等工具大大提升了软件开发效率\cite{百科全书}。到20世纪六十年代随着软件工程思想的出现和发展软件工具开始覆盖软件开发的各个过程出现了需求分析工具、设计工具、编程工具、测试工具以及项目管理工具、配置管理工具等多种计算机辅助软件工程\index{计算机辅助软件工程}CASE工具并出现了工具箱(toolkit)的思想。随着工具种类的增加,软件开发过程中所用到的工具的单独使用不再能满足复杂软件开发过程的需要,工具间的交互和集成需求催生了软件开发环境\index{软件开发环境}。软件开发环境可以看成是通过集成机制集成了多种软件工具的软件在软件开发过程中能极大提升软件开发的效率和质量因此越来越受到业界的重视。各类集成开发环境IDE\index{集成开发环境}与开发套件、插件被研制出来。从20世纪八九十年代起宝蓝Borland、国际商用机器IBM、微软Microsoft等多家软件企业推出了各自的开发工具软件和开发环境以及我国“七五”“八五”国家科技攻关项目研制的集成化开发环境“青鸟”系统不仅包括以编程为中心的开发调试工具还提供软件版本管理、配置管理、团队协作、需求和设计建模、项目管理等特性形成了多种工具和环境在市场中的协同与竞争局面。直至今日各类开发工具以及开发环境软件仍然是软件产业的重要组成部分。可见软件技术的进步推动着软件开发工具产业的持续发展而开发工具产业生态的兴盛也支撑着软件技术的不断提升与改进。
与此同时开源集成开发环境随着Java等语言的兴起而不断发展形成以开源和协作为特色的软件产业生态并派生出特有的商业模式。Eclipse是一个典型的例子。Eclipse最初由IBM公司主导开发并于2001年开源随后转由非盈利组织Eclipse基金会管理至今。Eclipse项目架构设计灵活其开源引起了广泛的关注并得到上百家大型软件企业的参与与贡献。围绕Eclipse这个开源集成开发环境开源社区的开发者和参与开源社区贡献的软件企业纷纷为该产品开发插件并得到集成和推广。在此基础上Eclipse衍生出了MyEclipse等商用版本以及IBM Rational Software Architect等多种工具软件。此类工具面向软件开发者的不同开发需求提供不同层次的解决方案和开发环境。这类软件生态往往以开源为核心通过良好设计的、具有可扩展性的软件体系结构构展现了软件的良好生命力并且在开源环境下不断发展同时采用合适的开源许可证允许衍生出商业产品并通过商业产品的应用与开源版本实现协同的演进。
从闭源到开源,是软件开发模式的重大革新。软件企业逐步认识到开源以及开源软件在开发模式上的独特优势,越来越多地参与到开源运动中,在贡献开源项目的同时,还建立起商业和开源混合的项目,形成了多种开源协同模式,并通过各类开源许可证\index{开源许可证}规范开源软件的开发、发布和销售。个人开发者和企业开发者共同驱动并搭建了开源软件开发技术框架与平台,建立起开源软件生态系统,在开发模式上体现出“无偿贡献、用户创新、充分共享、自由协同、持续演化”的新特征\cite{梅宏2016开源软件生态_研究与实践}\cite{金芝2016开源软件与开源软件生态}。在软件企业和开发者个人的共同参与下,开源软件给软件产业的所有参与者建立起复杂的利益关联,丰富了软件产业生态,形成了特有的协作模式和商业模式,并推动软件技术的持续发展。
随着软件产品日益复杂开发人员的协同工作更为重要。在协同开发环境下涉及到不同的开发团队、不同的开发资源如何协调的问题。例如对协同开发的软件代码需要有相应的版本控制软件。在版本控制领域除了经典的ClearCase、Perforce等商业工具之外还产生了CVS、SubVersion等开源免费工具。由于软件开发的社会化协作程度越来越高分布式版本管理系统逐渐替代中央控制的版本管理系统成为主流。其中的典型代表是git和mercurial。社会化编程的兴起又对版本控制之外的社会化协作产生了新的需求催生了一大批诸如GitHub、Gitlab、Bitbucket、Coding等国内外的开发者社区及协作服务提供商。持续集成需要自动化构建工具的支持其中既有Bamboo等商业的持续集成工具也有Jenkins等开源免费的工具同时还存在以免费为主体、但具有某些收费高级功能或是面向开源社区免费、但面向商业应用收费的产品如Go、Travis等。此外在配置管理、自动化构建和测试、容器和服务平台、日志管理及监控和告警等领域都出现了许多具有竞争力的产品。
开发运维一体化DevOps运动的兴起则是在前述实践基础上进一步引发的更为深刻的技术和文化变革。开发和运维不再彼此独立而是建立了更流畅、更紧密的协作关系。从工具链角度不仅仅是发布活动配置、监控及最终用户反馈等环节也融入其中。因为持续集成、持续交付和开发运维一体化的工具链的端到端的特点基本上囊括了软件开发中从开发到集成交付、从基础运行环境配置到软件配置管理等各个子领域的多种工具的集合也促进了相关子领域的各工具软件产业的繁荣以及生态的兴盛。从开发者角度而言大量的开发工具和开发模式为开发者提供了多种提升开发效率和质量的技术途径同时也带来了更多的技术选择成本和学习成本。如何促进相关软件产业生态良性发展辅助开发人员更专注于需求提升开发效率和交付能力降低学习成本是一个重要的研究问题。
在各类软件工具和软件开发环境繁荣发展的同时软件开发过程和开发方法的演进也深刻影响着软件产业的发展。由于软件固有的复杂性和不可见性业界逐渐认识到软件开发过程以及开发方法对软件产品质量的巨大影响。如果没有规范化的软件开发过程和软件开发能力评价标准就无法形成可信的、规模化的软件生产能力。20世纪80年代后期卡内基梅隆大学软件工程研究所CMU/SEI发布了软件能力成熟度模型CMM随后在美国国防部和联邦政府的支持下得到了产业界的广泛应用并衍生出多个模型同时软件企业也意识到该模型对于改进自身的软件开发过程和提升企业软件研发能力的作用主动对软件开发过程进行改进并参与成熟度等级评估。2000年在美国联邦政府和产业界共同推动下CMU/SEI整合CMM的多个模型发布了能力成熟度模型集成CMMI并于2002年推出CMMI v1.1为软件企业的能力成熟度评估和过程改进提供了重要的基准在保持模型稳定的同时也在持续更新确保能力评估与软件开发技术匹配。另外国际标准化组织ISO的ISO 9000质量标准体系以及在20世纪90年代末着手制定软件过程评价标准“软件过程改进和能力确定SPICEISO 15504\cite{百科全书},作为推荐业界实施的软件质量和过程改进国际标准,并且也在保持相对稳定地同时随着软件技术的发展而更新。这些模型和标准的出现,对软件开发的规范化起到了重要的作用,是软件产业健康发展的重要组成部分。
\section{结束语}
软件产业的产生以及软件产业生态的发展和繁荣已经经历了超过半个世纪。回顾这五十多年的软件产业发展历程软件产业生态与软件技术的发展密不可分。随着技术的进步各类软件产品、软件企业、软件从业人员之间的竞争与合作持续发展逐步渗透入人类生活的方方面面。“软件定义一切”和“一切皆服务XaaS”为软件产业创新发展扩展了新的空间。
软件产业的发展遵循人类社会生产力发展中社会分工细化的一般规律。从软件从硬件剥离出来开始,软件的能力分工不断细化,形成各种不同类型的软件。同时,软件生产企业也不断细分,形成各个领域专业化的软件开发能力,生产出领域细分的专业软件。正是这种逐步细化的分工,促进了软件产业的发展和繁荣,使得各类软件能够以更加专业的方式研发。领域化专业化细分,是软件产业发展的总体趋势。
软件产业是新型生产力的代表,是推动社会经济和其他产业发展的重要驱动力之一。一方面,软件产业通过与业务领域的结合,向其他产业渗透,实现能力细分,服务于其他产业的发展,另一方面,其他产业通过加强软件研发投入和业务转型,实现传统企业的软件企业化,充分利用自身领域专业优势融入软件产业中,为软件产业的发展提供新的增长点。
随着各行各业对软件和软件技术需求的增长,软件产业将进一步与人类社会生产生活的方方面面紧密融合。无所不在的软件和无所不在的软件产业将给软件学科的研究带来新的挑战,需要支撑软件泛在化、软件产业融合化的研究内容和成果,认识并补足软件产业生态化发展的短板,从而支持和促进软件产业的可持续健康发展。