software-strategy-book/Ch0-1-Abstract.tex

548 lines
78 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
%\chapter[软件科学与工程学科发展战略(摘要)]{ 软件科学与工程学科\\发展战略(摘要) }
\epigraph{\emph{软件承载着我们的文明。\\Our civilization runs on software.}}{Bjarne Stroustrup}
\renewcommand*\thesection{\arabic{section}}
软件是信息系统的灵魂,
%软件是社会信息化的灵魂,
是世界数字化的直接产物、自动化的现代途径、智能化的逻辑载体。
时至今日,小到一个智能传感器、一块智能手表,大到一座智慧城市、一张智能电网,
无不有赖于软件系统的驱动与驾驭。
软件已经成为信息化社会不可或缺的基础设施。
%软件已经成为现代社会不可或缺的基础设施。
软件重塑了从休闲娱乐、人际交往到生产生活、国计民生等社会经济的方方面面,
“软件定义一切”日益成为一种现实。
高效地构建和运用高质量软件系统的能力成为国家和社会发展的一种核心竞争力。
软件是定义计算的逻辑制品,其实质是以计算为核心手段实现应用目标的解决方案。
因此,软件科学与工程学科(以下简称软件学科)本质上是一门具有高度综合性的方法论学科。
60余年的发展历史表明软件学科具有独特的发展规律其内涵与外延随着计算平台与应用范围
的不断拓展而迅速发展。当前,随着物联网、云计算、大数据和人工智能应用的进一步发展,
软件及软件学科面临着前所未有的系统复杂性、适应性和可信性要求的重大挑战,也孕育着新的范式转换的重大机遇。
本报告回顾总结软件学科的发展历程和发展规律,进而针对人机物三元融合、软件定义一切的发展趋势,展望学科发展的关键问题和重要研究方向,并给出学科领域未来发展的政策建议。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{软件与软件学科}
\subsection{软件}
人们通常把软件理解为计算机系统中与硬件相对的部分,包括程序及其文档,以及相关的数据。
但这只是软件的存在形式,其所表达和实现的实质内容是\emph{以计算为核心手段实现应用目标的解决方案}
不同于一般物品,软件是一种人工制品,同时也是一种纯粹的逻辑制品。
作为一种人工制品,其需以适应其所处环境的方式完成应用目标;作为逻辑制品,其困难不在于物理限制而在于逻辑构造。
因此,软件开发活动本质上不同于传统工程制造:后者在于“造物”,前者可谓“拟人”—即表达人脑思维形成的问题解决方案。软件没有“边际成本”,即复制成本几乎为零,主要成本在于它的“创造”。%每一个软件系统都需要独一无二的创造。
软件既受刚性约束,又能柔性适应。软件以计算为实现手段,受逻辑正确性、图灵可计算性和计算复杂性的刚性约束。%软件作为逻辑制品,其在静态表示上没有任何物理意义的弹性。
而通用图灵机模型和存储程序式计算机架构又使得软件具有无与伦比的灵活性,在前述刚性约束下,其丰富的动态语义可以表达千变万化的计算解决方案。
%这是其他任何种类的制品所不具有的巨大优势。
软件规模在原则上可以无限扩展。
其高度灵活性也使得软件不仅仅是系统中的信息处理工具,也是管理各类资源、融合人机物的“万能集成器”。
这就使得整个人工系统的复杂性向软件集中。
纵观软件的发展历程,其复杂性呈爆炸性增长趋势。软件成为人类所创造的最复杂的一类制品。
对复杂性的驾驭成为软件开发和运维的核心挑战。
\subsection{软件的重要作用}
进入21世纪以来信息技术飞速发展已经广泛覆盖并深入渗透到了社会经济的方方面面。
近年来,以云计算、大数据、移动互联网、物联网、人工智能为代表的新一代信息技术推动了软件的跨界融合发展,
开始呈现出“网构化、泛在化、智能化”的新趋势,并不断催生新平台、新模式和新思维。
可以说,信息技术的深度应用已经推动人类社会步入到一个新的发展阶段。
%对这样一个新的发展阶段,可以从不同的视角去考察和认知。
%例如,从基础设施视角,可视为是以互联网为核心主干,移动网、广电网、物联网等多种网络融合形成新型泛在化基础设施,并支撑规模化跨界创新应用服务模式为特征的“互联网+”时代;
%从计算模式视角,可视为是以支持计算、存储、网络、数据、应用等资源的集约式管理和服务化使用为特征的云计算时代;
%从信息资源视角,则可视为是将数据作为新型战略资源并以数据的深度挖掘和融合应用为特征的大数据时代;
%从信息应用视角,则可视为是以人工智能技术为基础,支持感知、认知到决策为特征的智能化时代。
%然而,如果
从使能技术的视角看软件技术在信息技术中始终处于“灵魂”地位所有新的信息技术应用、平台和服务模式均离不开软件技术作为基础支撑例如谷歌所有的网络服务涉及的代码达到20亿行。
更为重要的是软件技术不仅引领信息技术产业的变革在很多传统领域如制造、能源、交通、零售等中的存在比重和重要性也在不断加大。例如宝马7系的软件代码总量超过2亿行特斯拉Model S超过4亿
行。软件在支持这些传统领域产业结构升级换代甚至颠覆式创新的过程中起到了核心关键作用,加速重构了全球分工体系和竞争格局。
例如作为新一轮科技革命和产业变革的标志德国的“工业4.0”和美国的“工业互联网”以及我国的“中国制造2025”均将软件技术作为发展重点。
无所不在的软件已走出信息世界的范畴,深度渗透到物理世界和人类社会,并扮演着重新定义整个世界的重要角色。从这个意义上说,我们正在进入一个“软件定义一切”的时代!
\subsection{软件学科}
软件学科是以软件为研究对象,研究以软件求解应用问题的理论、原则、方法和技术,以及相应的工具支持、运行平台和生态环境的学科。
换言之,软件学科本质上是一门方法论学科。
%其带来的是一种人类思维的创新,以人机共融方式延伸了单纯人脑思维,形成了一种前所未有的创造力。
%
尽管软件学科的内容一直在不断深化、边界一直在不断扩展,
作为一门方法论学科其焦点始终是如何驾驭用计算为手段解决应用问题的复杂性,而合适的软件抽象是驾驭此复杂性的关键。
可将计算平台集合看作是平台空间,可能的软件集合看作是解空间,而将应用需求归入问题空间。
唯有凭借恰当的软件抽象,方能有效认知并合理建模这三个空间,进而在其间建立映射,
为给定应用需求找到可在合适计算平台上高效运行的软件解。
%如何将问题空间元素(问题)映射到解空间元素(解决方案)、以及如何构建平台空间元素(计算平台)以高效运行解空间元素(解决方案),
%
若以软件抽象为视角,软件学科可大致划分为四个子领域,即软件语言、软件运行支撑、软件构造方法以及软件度量与质量评估。
软件语言的核心任务是建立通用的抽象机制,包括抽象的表示和抽象之间的关系,为问题空间、解空间和平台空间建模。
软件语言包括程序设计语言、各类建模语言以及编程模型等。
其中程序设计语言用于描述软件的计算行为,提供了基础的软件抽象。%承载着软件的范型。
一方面,程序设计语言需要提供更有效、有力、更符合人类思维方式的语言设施,以降低软件开发的难度、提高软件制品的质量;
另一方面,这些语言设施又需能被高效地实现以保证软件的执行效率。
软件运行支撑的核心任务是建立解空间向平台空间的映射方法并构建平台空间抽象的计算实现。
运行支撑系统包括操作系统、编译系统、中间件和数据库管理系统等,
它们负责驱动下层计算资源有效运转、为上层应用提供共性服务,从而将计算平台的概念从硬件扩展到了软件层面上。
%其内容主要是在平台空间中实现解决方案、并构建平台空间的计算实现,。
%其中,操作系统负责管理计算系统软硬件资源、操纵程序运行,为应用软件提供公用支撑。
%编译系统(又称编译器)负责将源语言编写的源程序翻译为等价的可 运行目标程序;
%中间件将系统软件的概念扩展到网络环境,为分布式应用软 件部署、运行和管理提供支撑;数据库管理系统旨在统一管理和维护数据库中的数据,是存储、组织、联接、变换和加载数据的软件。
软件构造方法的核心任务是建立问题空间抽象到解空间抽象的映射方法,构建解决方案完成特定应用目标。
其关键问题包括如何理解所面对的问题空间、如何理解当前需要软件来解决的问题并以此设计可能的解决方案、
以及如何高效高质量地开发出能满足需求的软件等。
软件构造方法包括了软件开发的技术、过程、管理等方面,形成了软件学科的软件工程分支的主要内容。
软件度量与质量评估的核心任务是将基于软件抽象的制品与服务及其构造、运行过程作为观察对象,
度量、评估和预测其质量和效率等指标。软件度量评估通过量化发现软件和技术的规律,并评价解决方案对应用目标的满足程度。
这涉及到软件语言、构造和运行诸多方面,通常也将其归在软件工程的主要内容之中。
这四个子领域是密切联系、相互作用的,贯穿其中的是软件范型%
\footnote{这里的软件范型对应的英文是Software Paradigm。
而为遵循习惯在本书中程序设计和程序设计语言的Paradigm译为“范式”。}
每一个范型为软件工程师(或程序员)提供一套具有内在一致性的软件抽象体系,具化为一系列软件模型及其构造原理,并外化为相应的软件语言、构造方法、运行支撑和度量评估技术,从而可以系统化地回答软件应该“如何表示”、“怎样构造”、“如何运行”以及“质量如何”的问题~\cite{Mei:2016:INS:3086926,}。软件范型的变化将牵引构造方法、运行支撑、度量和质量评估的一系列变化,带动软件学科的发展。
\begin{figure}[htbp]
\centering
\includegraphics[width=.45\textwidth]{figs/framework.pdf}
\caption{软件学科基本架构}
\label{fig:1-6}
\end{figure}
%由于应用范围的迅速拓展,软件抽象中用于表述现实世界的数据抽象日益重要,数据量及其复杂性迅猛增长,数据管理逐渐从上述三个子领域中分离出来成为一个单独的子领域。
\subsection{软件学科的重要地位}
软件学科在整个计算机学科中占有举足轻重的核心地位。从1966年首届图灵奖至2019年的54次颁奖中属于软件领域的有37次68.5\%其中以程序设计语言、编译和操作系统为主的有22次获奖还有4次数据库获奖。
从目前我国人才培养一级学科划分看,软件学科横跨了计算机科学与技术、软件工程、网络空间安全等三个一级学科,特别是与计算机软件与理论二级学科和软件工程一级学科关系密切。
与国际本科计算教育学科划分相比软件学科横跨了ACM/IEEE Computing Curricula的五个学科即计算机科学、计算机工程、软件工程、信息技术、信息系统。
随着信息技术及信息化的快速发展,软件学科也逐渐成为一门基础学科,并向其他学科渗透。
所谓基础学科,是指某个拓展人类可认识改造的世界疆域之不可替代的知识体系,具有独特的思维方式与方法论,为其他学科发展提供不可或缺的支撑。
软件学科日益呈现出这些特征:软件是把物理世界拓展为信息-物理-社会融合世界的主要手段;与此同时,“软件定义”赋能的计算思维有可能成为继实验观察、理论推导、计算仿真、数据密集型科学之后的综合性的科学研究手段,尤其是为以信息-物理-社会融合系统为对象的科学研究提供赖以运作的理论基础和实践规范。
以软件知识为主体的计算机教育已经成为包括我国在内的多个国家的国民基础教育课程体系的主要内容之一。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{发展历程与发展规律}
\subsection{软件学科发展历程}
以程序化的系列步骤表达解决方案是人类思维的基本形式之一。
但直到上世纪四十年代末存储程序式电子计算机出现以后,现代意义上的软件才真正出现。
粗略而言,软件的发展历程可分为四个阶段:
\begin{enumerate}
\item 从存储程序式电子计算机出现到实用高级程序设计语言出现之前为第一阶段上世纪40年代末到50年代中期。此阶段计算机处理能力有限应用领域主要集中于科学计算与工程计算。编制程序所用的工具是低级语言。系统软件仅能提供程序载入等简单功能。程序开发无系统方法强调编程技巧。
%
\item 从实用高级程序设计语言出现到软件工程提出之前为第二阶段上世纪50年代中期到60年代后期。此阶段计算机处理能力迅速提高应用领域扩展到商业数据处理等领域。人们开发了操作系统以充分利用系统资源。为了适应大量数据处理问题的需要, 数据库及其管理系统开始出现。FORTRAN、COBOL、ALGOL等高级语言大大提高了程序设计的效率但软件的复杂程度迅速提高研制周期变长 质量难以保证,出现了所谓软件危机。为此,人们提出结构化程序设计方法,并开始了程序正确性和软件可靠性的理论研究。
%
\item 从软件工程提出到基于互联网的软件服务广泛使用之前为第三阶段上世纪60年代后期到90年代后期
计算机系统的处理能力继续增长,向嵌入式和局域网或基于广域网的企业计算延伸;应用领域扩展到社会生产生活的诸多方面。
以系统化、工程化的方法开发大型软件逐渐成为主流,软件开发方法和技术迅速发展,对象化、构件化等方法获得广泛应用。
%为了适应计算机网络的需要,出现了网络软件;随着微型计算机的推广,
分布式应用和分布式软件得到快速发展,出现了软件中间件。关系数据库管理系统高速发展,获得了很大的成功。
软件知识产权获得重视,基于软件产品形态的软件产业迅速发展。
%
\item 从基于互联网的软件服务广泛使用迄今为第四阶段90年代后期以来。随着互联网和万维网的普及以及物联网、移动互联网的兴起
软件的应用范围向泛在化发展,全面融入人类生产生活的各个方面。软件的核心价值日益以网络服务的形式呈现。
云计算、大数据和人工智能技术的进步推动了服务化的软件产业的繁荣。软件技术呈现出网构化、泛在化和智能化的发展趋势。
与此同时,开源软件运动取得了巨大成功,软件和软件技术的可获得性极大提升,对整个软件生态产生了重要影响。
\end{enumerate}
%计算机软件的发展受到应用和硬件发展的推动和制约。反之,软件的发展也推动了应用和硬件的发展。软件的发展经历了如下阶段:从第一台计算机上的第一个程序开始到实用的高级程序设计语言出现以前为第一阶段(20世纪40年代中期到50年代中期)。如前所述,在计算机发展初期,应用领域较窄,主要是科学计算与工程计算。处理对象是数值数据。编制程序所用的工具是低级语言。程序的设计和编制工作采用个体工作方式,强调编程技巧。研究对象是顺序程序。这一阶段主要研究科学计算与工程计算程序、服务性程序和程序库。当时人们对和程序有关的文档的重要性尚认识不足,重点考虑程序本身。那时虽尚未出现“软件”一词,但毕竟由于程序是软件的主体,从发展的连续性来看,仍应将其归为第一阶段。从实用的高级程序设计语言出现以后到软件工程提出以前为第二阶段(50年代中期到60年代后期)。虽然早在1951年瑞士学者H.Rutishauser就提出设计高级语言及其翻译程序,但直到1956年在J.Backus领导下,才就IBM704机器研制出第一个实用的高级语言FORTRAN及其翻译程序。此后,相继又有多种高级语言问世,著称者有ALGOL60,COBOL,ALGOL68等,从而设计和编制程序的功效显著提高。为了充分利用系统资源,产生了操作系统(如IBM360操作系统)。为了适应大量数据处理问题的需要,研制了数据库及其管理系统。在50年代后期人们逐渐认识到和程序有关的文档的重要性,因此到了60年代初期,出现了“软件”一词,融程序及其有关文档为一体。这时,软件的复杂程度迅速提高,研制周期变长,正确性难以保证,可靠性问题相当突出。到了60年代中期,发生了人们难以控制的局面,即所谓软件危机。为了解决这一危机,人们进行了以下三方面的工作:第一,提出结构程序设计方法;第二,提出用工程方法开发软件;第三,从理论上探讨程序正确性和软件可靠性问题。这一阶段的研究对象增加了并发程序,并着重研究高级程序设计语言、编译程序、操作系统以及各种应用软件。计算机系统的处理能力得到加强,设计与编制程序的工作方式逐步转向合作方式。从软件工程提出迄今为第三阶段(60年代后期以来)。由于大型软件的开发是一项工程性任务,采用个体或合作方式不仅效率低、产品可靠性差,而且很难完成,只有采用工程方法才能适应。从而在1968年的大西洋公约学术会议上提出了“软件工程”的概念。近三十年来,软件领域工作的主要特点是:第一,随着应用领域的不断拓广,出现了嵌入式应用及其软件;为了适应计算机网络的需要,出现了网络软件;随着微型计算机的推广,分布式应用和分布式软件得到快速发展。第二,软件工程发展迅速,开发方式逐步由个体合作方式转向工程方式,形成了“计算机辅助软件工程”。除了开发各类工具与环境,用以支持软件的开发与维护外,还有一些实验性的软件自动化系统。第三,致力研究软件过程本身,研究各种软件开发范型与模型。第四,除了软件传统技术继续发展外,人们着重研究以智能化、自动化、集成化、并行化、开放化以及自然化为标志的软件开发新技术。第五,注意研究软件理论,特别是软件开发过程的本质。
\subsection{软件学科发展规律}
纵观软件学科的历史,可以发现其发展的外在驱动力始终来自于计算平台的发展和应用范围的扩张,
而内在驱动力来自于其核心问题的解决,追求更具表达能力、更符合人的思维模式的编程范式,
追求更高效地发挥计算机硬件所提供的计算能力,不断凝练应用共性并沉淀计算平台,同时更好地满足用户对易用性的需求。
这是由软件学科的方法论学科本质所决定的。
换言之,如何深入软件开发所涉及的问题空间、平台空间和解空间,并在其间有效协同,是软件学科的``元'' 主题,
而随着问题空间和平台空间的拓展,如何以更好的软件抽象帮助驾驭软件开发的复杂性 --- 即尽量避免引入附属的复杂性,更好理解和应对本质的复杂性~\cite{Brooks:1987} --- 是学科发展的``元'' 规律。不同层次的抽象(集中体现在软件语言等表达设施)、抽象的计算实现(集中体现在系统软件)和使用(集中体现在软件工程)组成了软件学科的主体内容,而给出体系化的软件范型迭代更新则展现了学科发展的脉络。
%软件的计算平台给出了解决方案所依赖的平台空间,而应用问题域形成了软件的问题空间。
%在平台空间和问题空间之间,构成了软件所需具有的功能、目的和适应能力构成的解空间。解空间受制于问题空间和平台空间。
%平台空间从广义上看属于解空间的一部分,也是基础部分。
%通过对这三个空间的协同,可以。
%对这三个空间的认识不断深化并在其间有效协同的过程。
%软件作为问题解决方案,是在解空间中构建从问题空间的到平台空间的映射。
%协调三个空间驾驭复杂性的关键在于软件范型给出的体系化软件抽象,包括但不限于程序设计语言设施、软件构件、 软件服务等。
%如前所述,软件方法学及其程序设计语言表达的核心是建立(一般的)软件抽象,而系统软件的核心在于实现这些抽象,软件工程则使用这些抽象构造应用软 件。
\begin{figure}[htbp]
\centering
\includegraphics[width=.52\textwidth]{figs/progress.pdf}
\caption{软件泛型的发展}
\label{fig:swdcpldev}
\end{figure}
\ref{fig:swdcpldev} 展示了在应用范围扩张和计算平台发展驱动下主要软件范型的发展历程。
例如结构化软件范型乃是由于上世纪60年代计算机基础能力(计算、存储与外设)的快速发展和软件危机的出现而导致人们对基础的程序设计方法与语言的科学思考而产生的。它以结构化的程序抽象较好地协调了软件开发的平台空间与解空间,解空间和平台空间匹配较好,但问题空间和解空间差距大。
而面向对象软件范型则进一步发展了从宏观角度控制复杂性的手段, 如关注点分离、信息隐蔽、多态等, 并强调将问题空间纳入软件设计的范畴,
提出与问题结构具有良好对应关系的面向对象程序抽象与支撑机制, 从而协调了软件开发的问题空间和解空间,平台空间也发展出中间件和容器等技术以支持对象抽象在计算平台的实现。
除了通用软件范型的迭代更新,软件学科中的各类专门抽象也随着平台空间和问题空间的发展而发展。
例如,关系型数据库以关系模型抽象很好地平衡了来自平台空间的性能需求和来自问题空间的易用性需求,取得了巨大成功;
但面临非结构化、海量数据的应用问题后,数据库不再采用严苛的关系模型,转而使用更为灵活的键值对结构、文档模型、图模型等更为契合问题空间的抽象,
同时给出这些抽象在大规模分布计算平台上的高效实现。
\subsection{我国的软件学科与产业}\todo{可能需要根据第17章更新本小节}
我国软件学科起步较早在几代科学家的不懈努力下取得了一系列的成果。例如在上世纪60 年代中期就自主研发了ALGOL等语言的编译系统70年代初研发了XT系列操作系统
80-90年代在银河系列巨型机上配备了操作系统、高级语言编译程序等系统软件。
在软件相关的基础研究方面,我国在程序理论、算法理论等方面取得了一批基础性的成果,提出了以时序逻辑作为软件开发的统一基础。
八十年代后,我国学者在大规模综合性的软件工程环境、软件自动化技术方面做了一系列的工作。
进入新世纪以来,提出面向开放互联网环境的新软件范型——网构软件及其支撑技术体系。
%当前,从软件领域相关的重要学术期刊和会议上发表的论文及其引用的计量指标来看,
%近年来我国软件学科在总量上进步迅速,已仅次于美国。
%在软件工程、数据处理等子领域已接近美国。
%但在基础理论、系统软件和程序设计语言等方面仍有明显差距。
尽管从软件领域相关的重要学术期刊和会议上发表的论文及其引用的计量指标来看我国论文、引文的数量以及国际合作的规模呈现出持续增长的态势部分指标已经位于世界前列。例如在2008-2017的10年之间我国软件学科领域SCI期刊论文数量增长了2.7倍于2017年超越美国位于榜首
2013-2017年中国软件学科SCI论文的被引频次以0.4\%的微弱劣势落后于美国,位列世界被引频次排行榜的第二位。但是,另一方面,我国具有重大影响的成果和具有引领性的研究缺失;细分领域之间、以及期刊/会议之间发展不平衡的问题也较为突出。
例如,数据库、软件工程、交叉/新兴领域的研究论文呈现出高速发展态势,但计算机理论、系统软件、程序设计语言等领域尚有较大提升空间。
自上世纪80年代初以来我国的软件教育尤其是软件工程教育迅速发展先后开展了开设软件工程课程、试办软件工程专业、培养软件工程硕士研究生等一系列的建设工作。2001年国家开展示范性软件学院的建设全国共有37家首批35家重点高校试办示范性软件学院。2010年教育部软件工程教指委编制了“高等学校软件工程本科专业规范”以指导我国软件工程专业建设2011年国家增设软件工程一级学科。截止目前我国已有300多所高校成立了软件学院或开设了软件工程专业形成本、硕、博多层次成系统的软件工程教育体系。2019年软件工程教指委推出了中国软件工程知识体系C-SWEBOK。2019年教育部出台的《2019年教育信息化和网络安全工作要点》指出要在中小学阶段逐步推广编程教育。根据“中国软件产业年鉴2017我国软件产业从业人数达到600多万人。
随着软件地位和需求的增长及软件技术的发展,软件学科教育日益受到重视,社会对软件人才的数量和质量提出了更高的要求,这既给软件学科教育带来了机遇,也对软件学科教育提出了严峻的挑战。软件学科教育滞后于软件学科的整体发展,软件学科的教育界需要加大与产业界、学术界的合作,需要与时俱进地更新和完善其知识体系,提高人才培养的质量。
%经过数十年的发展,我国软件产业已经取得长足发展。
%2018年我国软件和信息技术服务企业数超过3.7万家从业人数达到643万人软件业务规模(包括 软件产品、信息技术服务、嵌入式系统软件)达到6.3万亿元。
%在电子商务、社交网络、安防监控、民用无人机等方面的软件应用进入世界先进行列。
%然而,总体来看,我国软件产业大而不强的问题仍然十分突出。在操作系统、程序设计语言、数据库管理系统和大数据处理平台等关键系统软件方面受制于人;
%在不依赖市场区隔的关键软件服务技术创新方面仍落后于发达国家。
基于软件学科发展的技术和人才积累,我国的软件产业伴随着改革开放的东风起步。
20世纪80年代初原国家电子计算机工业总局颁布试行《软件产品计价收费办法》,原电子工业部计算机局软件登记中心、北京软件工程研究中心和中国软件行业协会先后成立,推动了软件产业的形成和发展。
此后,随着计算机的日益普及带来的需求增长、国家法律法规和产业政策的不断完善,我国软件产业迅速壮大。
尤其是进入21世纪以来其发展尤为迅猛。据国家有关部门统计软件与信息技术服务业产值从2000年的560亿增长至2019年的7万亿元且近年来保持每年10\%以上的增速。
尽管面临国际软件企业巨头的竞争国内软件企业通过自主创新逐渐探索出符合中国国情的发展道路。近年来CEC、华为、阿里、腾讯等企业软件研发投入和产出持续增长技术水平不断提高市场影响力日益扩大。
在迅速发展的同时,我国软件产业也存在一些问题。
首先在总量上我国软件产业占电子信息产业的比重约30\%显著低于发达国家的50\%-70\%,仍有巨大发展空间。
其次我国软件产业基础薄弱在操作系统、数据库管理系统等基础软件和EDA等核心工业软件领域有待摆脱受制于人的局面。
第三,我国软件企业的技术成熟度、国际影响力和认可度还需进一步提升。
考虑到软件产业自身的发展规律和当前的国际政经竞合形势,我国软件产业的进一步发展和升级亟需软件学科在原创技术和人才供给方面提供更有力的支持。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{发展趋势与挑战问题}
\subsection{软件成为基础设施}
人类信息化发展有三条并行不悖的主线:以单机应用为主要特征的数字化、以联网应用为主要特征的网 络化和以数据的深度挖掘和融合应用为主要特征的智能化。当前,计算的泛在化和软件定义一切的发展趋势使得信息化进入了一个新的时代,即从数字化阶段发展进入了网络化阶段,并正进入智能化阶段。这也使得软件真正成为信息社会的基础设施,软件学科也进入了一个新的发展阶段。
所谓“计算的泛在化”是指计算变得无处不在而又无迹可寻。万物数字化、万物互联使得计算无处不在,形成了人机物三元融合的发展趋势。计算自然融入人类 生产、生活活动的环境和过程之中,无需关注,不着痕迹。
所谓“软件定义”是指软件以平台化的方式,向下管理各种资源,向上提供编程接口,其核心途径是资源虚拟化以及功能可编程。而“软件定义一切”则将软件平台所管理的资源和提供的编程抽象泛化到包括计算、存储、网络、软件服务等在内的各类计算资源,包括各种数字化机电设备和可传感物体对象在内的各类物理资源,乃至可通过激励机制调配的人力资源。
软件的基础设施地位具体表现为两个方面。一方面,软件自身已成为信息技术应用基础设施的重要构成成分,以平台方式为各类信息技术应用和服务提供基础性能力和运行支撑。另一方面,软件正在 “融入”到支撑整个人类经济社会运行的“基础设施”中,特别是随着以互联网和其他网络(包括电信网、移动网、物联网等)的不断交汇融合,软件正在对传统物理世界基础设施和社会经济基础设施进行重塑,通过软件定义的方式赋予其新的能力和灵活性,成为促进生产方式升级、生产关系变革、产业升级、新兴产业和价值链的诞生与发展的重要引擎。从经济社会整体发展的角度,计算成为了人类与物理世界互动的中介,软件对人类社会的运行和人类文明的发展进步起到重要支撑作用。
%首先,一大批基础软件本身就是信息基础设施,支撑各种应用软件的运行。其次,一大批嵌入式软件已成为掌控并支撑物理基础设施运行的关键系统。第三,一大批应用软件及其所提供的服务已成为信息社会不可或缺的基础资源与设施。最后,从软件产业整体的角度看,随着传播和互联的渗透发展,计算成为了人类与物理世界互动的中介,软件成为了创造新文明的载体,大规模、高效率地生产高质量的软件产品和提供软件服务的能力已成为社会经济升级发展的新动能,构成国家的一种核心竞争力。
在此宏观趋势下,软件学科的边界日益拓展、内涵不断深化。
\subsection{软件学科的拓展}
软件学科的拓展来自软件应用范围扩张、计算平台的泛化和软件方法技术本身发展三个方面的驱动。
从软件应用范围扩张的角度看,计算日益变得无处不在,人机物三元融合不断深入。
软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的人机物各类资源,实现应用价值。
软件作为应用解决方案,涉及的范畴扩展到各类物理设备、物品和人类的主观体验与价值实现;
因而软件学科无可避免地涉及到控制科学、系统科学以及心理学、管理学、经济学和社会学等范畴的问题,并以软件学科自身的方法论将其内化和拓展。
从软件依赖的计算平台泛化的角度看,计算平台从传统的集中式单机发展到并行与分布平台,到今天的“云-边-端”异构多态计算平台。
软件定义技术为这个人机物融合的平台提供可编程计算抽象。
软件作为解决方案,在这个计算平台之上利用数据资源,协同人机物,实现应用价值;同时也通过在这个平台上提供服务,并进一步积累数据,不断拓展这个计算平台。
从软件方法技术发展的角度看,软件的基本形态从计算机硬件的附属品到独立的软件产品,转变到云化和泛在的软件服务,%,转变为无处不在而又无迹可寻的泛在服务。
软件形态的耦合边界趋于模糊,开发运维一体化成为趋势;
面向计算平台和应用需求变化和拓展的软件演化成为软件的常态,元级结构以及在基于规则的演绎之上发展出数据驱动的归纳,将成为超大规模软件体系结构的重要元素,各种场景的适应和成长是软件运行支撑发展焦点;
软件开发经历了从实现数学计算到模拟物理世界,将拓展到虚实融合创造的转变,人类社会和赛博空间的虚实互动促进着软件系统向社会-技术系统Socio-technical System发展对软件作为客体对象的考察从以个体及其生产使用为主扩展到在生态的层面上转换为考虑软件及其利益相关者群体的竞争、协作等社会性特征软件度量和质量评估的科学观察对于技术的发展和软件生态的发展具有显著意义。
%在元级方法论层面,正从以还原论为主向系统论发展,软件作为解决方案越来越多地被视为开放环境中的复杂适应系统,而不是封闭规约下的确定行为系统。
\subsection{软件科学的新理解}
在软件作为基础设施、软件定义一切的背景下,软件进一步成为构造开放环境下复杂信息系统的关键。在研究方法学的层面上,认识软件学科的内涵需要有新的视角,包括以驾驭复杂性为目标的系统观、以泛在服务和持续演化为特征的形态观、以人为中心的价值观、以及关注群体协作平衡的生态观。
\subsubsection{系统观}
%所谓软件学科的系统观,有三层含义。第一层含义是系统工程。也就是说,软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注整个“人-机-物”融合系统的价值实现。
%软件定义一切的趋势使得软件不仅仅是系统中的信息处理工具,也是管理各类资源、融合人机物的“万能集成器”,是实现应用价值的整体解决方案。
% 第二层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,
%体现在其前所未有的代码规模、软件处理的数据量、软件用户量和使用的多样性、软件通过网络形成的连接量和种类、涉及承载运行的计算和物理设备量和种类等方面,也体现在且其所处环境的具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。
%第三层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法。
所谓软件学科的系统观,有三层含义。
第一层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,且所处的环境具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。第二层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法,超越还原论。第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注人机物融合的整个系统的价值实现。
以系统观看软件学科发展,软件科学与自然科学、社会科学等各领域产生了千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为技术-社会系统。人机物融合的软件系统,其复杂性本身就呈现在系统乃至系统之系统的层面上,综合性和系统性也愈来愈强,必须作为视作复杂系统来认识对待。这就要求超越传统还原论的思维藩篱,发展作为复杂系统的软件的理论。
%
近年来软件科学在系统观方向上进行了不少探索包括基于复杂网络来认识大规模软件系统的整体性质、基于多自主体Agent的软件系统和方法、复杂自适应软件与系统、群体化软件开发方法等。网络化和大数据催发了融合软件系统与系统论研究的切入点数据驱动的软件设计和优化初显端倪在一些特定领域获得很大成功。
%人们对于数据驱动的软件的设计,不再遵循传统的自顶向下、分而治之、逐步精化的经典还原论法则,而是一种基于输入输出的黑盒的数据描述,训练出深度神经网络,充当所需要的软件。这种%
例如,基于深度学习的方法从海量的样本中归纳出神经网络,其泛化能力可视为通过神经元系统的涌现而达成的功能。
然而,总体来看,这些研究仍较为初步,未能形成体系化的软件系统论和软件系统工程方法。
%处于方法层次,还未到达方法论的层次,即关于研究问题需要遵循的途径和研究路线,也可视作具体方法的元级层次。
% 新的软件方法学的关键在于如何认识因果和相关。因果观是有前提的相对的相关性是绝对的。软件发展在人机物融合时代人在回路、“拟人化”计算Human Computation、人机共融等需要关于软件规律的元级方法论创新。在软件系统的建模方面软件将从单纯信息处理向“场景计算”发展这里的场景包括物理环境和社会环境。在软件系统的机理方面软件的语义将由传统的还原论形式语义方法向多尺度、可演化的抽象方向发展组合方式将从传统的静态组合方式向动态可演化的、具有涌现特性的方式发展建立软件微观行为与宏观行为的辩证统一。面向人机物融合的认知软件作为人工智能或者“智能+”的承载,将深化复杂自主系统的智能行为理论和方法,软件定义将成为人机物融合系统中学习赋能(型)资源的管理途径。
软件科学的发展也将促进系统论和系统学的发展。在软件定义一切的时代,软件成为复杂适应系统认知的载体和实验平台,而软件发展中形成的以形式化体系为基础的规则驱动软件理论,高性能计算之上建立的模拟仿真技术,与进入智能化阶段形成的大数据驱动的软件方法,为形成还原论和整体论的辩证统一奠定了良好的基础,软件走向人机物融合更是为系统论和系统学的发展提供了实践探索的大场景。尤其是,正如 Jim Gray所指出大数据将成为人类触摸、理解和逼近现实复杂系统的有效途径。
% 展望未来,多自主体形成的协同与自组织以及自适应结构和能力、网络化产生的大数据与数据语义的复杂网络,将是软件系统在传统规则驱动基础上走向人机物融合超大规模系统的基础。软件作为复杂系统乃至复杂巨系统,在软件定义时代,软件科学将与系统学共同发展,软件方法学将吸收系统论成果,并支撑系统论和系统学的发展。
\subsubsection{形态观}
% 随着计算机技术的发展和计算机应用的不断深入,软件的外在形态逐步从硬件附属物、独立的软件制品发展到网络化服务。与之相对应,软件开发范型也经历了无结构、结构化、面向对象、面向构件、面向服务的发展历程。
当前,在空间维度上,随着应用的范围越来越广、软件对于人类生活和现实世界的渗透力越来越强,呈现出泛在化的趋势;在时间维度上,随着应用上下文环境及用户需求的变化不断适应和演化,软件呈现出持续成长的趋势。与之相应地,软件的范型进一步向网构化以及数据驱动的方向发展。
% \subsubsubsection{软件应用的泛在化}
% 计算和信息处理早已通过各种移动设备、嵌入式设备以及各种传感器渗透到了我们日常生活的方方面面,并通过各种通信技术实现了广泛的设备互连和信息互通。各种软件应用以嵌入式的方式实现预定义的信息处理和通信功能。
%
%近年来,信息技术呈现软件定义一切的发展趋势,即软件全面接管人类社会以及物理社会中的各种资源(包括物理、计算和人力资源),以各种形式的接口对外提供服务。这一发展建立在物联网云计算的基础上,使得软件的核心能力脱离了固化的用户界面和使用环境,可以按需灵活获取并组合。%另一方面,硬件专用化使得运行在各种面向特定用途的硬件设备上的软件应用能够获得更好的执行效率。
%
%
%面向最终用户的软件应用将越来越多地以人机物融合应用的形态出现,即软件以平台化、定制化和集成化的方式融合人、机、物三个方面的资源和服务从而满足用户的各种需求。
%这种新型的人机物融合应用具有泛在化、社会化、情境化、智能化的特点,即:软件应用无处不在同时又无迹可寻;所融合的人机物资源具备社会属性,来自于不同所有者并以社会化的方式产生价值交换;软件应用面向最终用户所处的情境按需构造,以满足即时的用户需求为目标;软件应用在智能化技术基础上,以非预设的方式按需聚合人机物资源并进行定制。
% \subsubsubsection{软件应用的持续成长}
% 越来越多的软件都已具备面向动态变化环境的适应性和面向需求变化的演化性。软件通过监控、分析、决策、执行的反馈环路对其结构和行为进行调控并通过不断演化来保持其有用性。快速响应变更请求并实现持续的软件演化是软件产品保持竞争优势的一个必要条件。在过去的几十年中软件开发的主流方法已经从以瀑布模型为代表的计划驱动的方法演变为以敏捷开发为代表的快速迭代开发方法。基于云的软件应用以及软件开发平台的发展进一步催生了开发运维一体化DevOps的技术趋势。由此反映出软件演化中的反馈和迭代周期越来越短演化越来越频繁。另一方面越来越多的软件应用以服务化和云化的方式运行在提供服务的同时持续收集用户的行为及其反馈并在云端汇聚形成软件用户大数据。这种不断积累的用户数据为软件应用的持续优化和改进提供了新的途径。数据驱动的软件演化方式反映了用户行为已经在一定程度上取代专家成为掌握软件演化方向的主导力量。软件将逐步从被动演化转变为基于内生机制的持续生长。
% \subsubsubsection{新形态下的软件学科内涵}
%在软件定义一切以及人机物融合的发展背景下产生的软件应用的泛在化和持续成长的
这一软件形态的发展趋势对于软件学科的内涵发展将产生多个方面的影响。
首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
其次,适应泛在而专用化甚至变化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移和优化。软件平台需要具有预测和管理未来硬件资源变化的能力,能适应硬件、底层资源和平台的变化,乃至能相对独立地长期生存演化。
再次,内生的持续成长能力将成为软件的基本能力。除了自适应能力外,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长不仅意味着通过各种智能化方法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成以及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动的方式进行设计,并实现自演化和自生长。
最后,软件与人将在不断汇聚的群体智能中实现融合发展。软件的覆盖面越来越广,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智能。这种群体智能注入软件后又将服务于每个最终用户,使得他们能够在各种应用场景中以更加智能化和个性化的方式满足自身的需求,从而使得软件在使用中越来越有``灵性''和``人性''。%未来的软件研究需要更加自觉的考虑人机共融,不仅考虑``人因'',更要考虑``群智''。
%
\subsubsection{价值观}
软件在整个系统中角色定位日益从负责应用过程中的信息处理环节转变为实现应用价值的主要载体。
这就要求对软件质量的理解从以软件制品为中心的传统质量观拓展、转变到以人为中心的价值观。
传统的软件质量观下,人们主要关注软件制品的正确性、高效性、易用性等外部质量属性和易维护性、易移植性等内部质量属性。这些质量属性一般是客观的。
软件的价值观是建立在传统的软件制品质量属性基础上,强调用户体验,强调软件系统的应用对人类价值的实现。软件通过一系列价值要素体现了主观的人类价值。
除了可以用经济价值衡量的软件质量以外,尤其需要强调软件的可信性、安全性、
%持续性
伦理和持续性等价值要素。
% 传统的软件质量观以软件制品为中心,人们主要通过客观度量软件系统来评估软件。
% 新时代下,软件制品的内外部质量要求进一步强化和扩展。
% 更重要的变化,软件通过服务的方式满足用户需求,软件无迹可寻的趋势强化了软件作为人类价值载体的特征,需要在传统的质量观的基础上发展到以人为中心的价值观。
% \subsubsection{从质量走向价值}
% 传统的软件质量模型定义了内部质量、外部质量和使用质量,其主要关注包含内部质量和外部质量的系统客观质量属性。
% 新时代下,软件生态和形态特征变化使得对于软件质量需要有新的认识。
% 一方面变化是软件的服务化特征软件系统通过服务满足用户需求用户不再拥有软件制品只享受软件提供的服务。另一方面技术对社会的影响使得软件体现了人类价值观。人类价值观指的是“基于人的一定的思维感官之上而作出的认知、理解、判断或抉择体现了人、事、物一定的价值或作用”价值观具有稳定性、持久性、历史性和选择性等特点软件通过一系列价值要素体现了主观的人类价值观这些价值要素包括隐私性、安全性safety \& security、平等性等。传统的质量观转变为 “以软件制品为基础,以用户体验为中心”的价值观。在价值观主导下,不同用户会有不同的软件预期,也会使得同一软件系统具有不同的价值。
% \subsubsection{新时代软件系统的价值要素}
% 软件会有多个不同的角度来评价其价值。未来人机物融合的软件基础设施将在可信性、安全性和持续性等价值要素上推动软件学科的发展。
%
% 1可信性
%
%软件作为信息化社会的的基础设施,其可信性对于整个社会系统至关重要。
%软件系统的可信性,要求在软件开发、运行、维护、使用等过程采取有效的措施和方法确认其满足人们的普遍要求和期望,它体现了新时代软件的价值取向。
软件系统的可信性包括软件本身可信和行为可信两个方面。软件本身可信,指的是软件的身份和能力可信,即:软件开发过程提供可信证据(如关于软件质量的过程记录和评审、测试结果等),对软件及其组成成分的来源和质量进行自证;软件行为可信,指的是软件运行时行为可追踪且记录不可篡改,即:通过监控软件运行过程并控制其对周围环境的影响,使得包含该软件在内的整个系统的对外表现符合用户要求。软件形态日趋多样,自身以及运行环境的复杂性越来越高,加剧了软件可信面临的挑战。
%
% 2安全性
%
软件系统的安全性要求其为人类活动和生存环境提供必要的安全保障包括功能安全Safety和信息安全Security。功能安全是指能及时有效地避免给人员、设施、环境、经济等造成严重损害信息安全是指系统保护自身免于入侵及信息的非法获取、使用和篡改具体包括机密性、完整性和可用性三方面。
%本书将两种安全性合二为一统称为安全性Safety \& Security。传统软件质量观将安全视作系统质量的一部分强调确定边界之内的系统安全性。
在人机物融合的趋势下,%软件已经广泛并深入渗透到人类社会生活的方方面面,与人形成了密切的交互关系。换言之,泛在计算平台上软件与软件、软件与人的交互无处不在,软件个体可影响整个泛在网络计算平台的行为;软件个体的漏洞等故障很容易扩散(传播)。这些也导致了信息安全问题很容易转化为防危安全问题。
软件作为基础设施,参与并掌控了很多关键领域的资源,其安全性威胁会给整个系统甚至人类社会带来致命的威胁。因此,安全性随着软件成为基础设施的现状变得愈发重要。
%软件系统成为支撑社会经济运行的基础设施,需具有持续提供服务的能力。
% 软件系统提供服务的持续性sustainability指的是在持续不间断运行、维护和发展过程中面对各种突发异常事件仍能提供令人满意的服务的能力。
% 高持续性的软件系统具有可成长性,也就是能够在其所处的外部环境、所使用的外部资源、所面对的用户需求不断演化的条件下,通过系统自身的持续演进来实现长期生存和不断成长。
%
% 3 伦理观
%
%作为人类价值载体,软件行为体现了人类价值观;由于软件无迹可寻,导致人类价值观又通过软件影响人类社会。因此,
软件系统的伦理是指系统的行为应符合社会道德标准,不会对个人和社会产生负面结果。社会道德定义了一定时间区域内人们行为规范,可具体表现为无歧视、尊重隐私、公平公正等,并最终体现于软件系统的具体行为。因此,软件系统的伦理,也体现于软件行为的上述方面,并需要通过软件开发和运行的诸多机制进行支持。
%
% 4持续性
%
%软件支撑的基础设施服务,为满足各类应用快速增长、新技术不断涌现的需求,需要具有开放扩展能力,即能集成各种异构的技术及系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。显然,这种开放体系架构常常引入系统设计的脆弱性和质量隐患,从而给持续提供服务带来挑战。
软件系统的可持续性Sustainability指的是在持续不间断运行、维护和发展过程中面对各种突发异常事件仍能提供令人满意的服务的能力。这是软件作为信息社会基础设施的必然要求。同时为满足各类应用快速增长、新技术不断涌现的需求软件系统需要具有开放扩展能力即能集成各种异构的技术及子系统支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。
% \subsubsubsection{价值观下,软件方法学的关键科学问题}
% 软件价值观强化了可信性、安全性、持续性等具有新时代特色的价值要素,这些价值要素与软件开发运行维护过程的交融将经历一个长期的阶段,其带来的关键科学问题在于四个方面:
%
% \hangafter=1
% \setlength{\hangindent}{3.4em}
% 1) 软件以何种方式承载人类价值观?具体地,如何通过需求等阶段获得项目特定的价值观,将其细化并融合于软件开发过程(包括软件的分析、设计和实现等环节)中?
%
% \hangafter=1
% \setlength{\hangindent}{3.4em}
% 2) 如何定义复杂开放软件的可信性度量模型,并以此为基础通过开发运行环境证据的收集评估软件可信性?在开放环境下,可信性的定义也是动态多变的,如何在系统实现和运行中支持动态的可信性?
%
% \hangafter=1
% \setlength{\hangindent}{3.4em}
% 3) 如何在泛在网络计算平台下系统化地从硬件平台、操作系统、应用软件等多层考虑软件安全性Safety\&Security
%
% \hangafter=1
% \setlength{\hangindent}{3.4em}
% 4) 如何在软件开发和运行过程中引入灵活性的机制,使得作为基础设施的软件系统提供的服务具有持续性?此外,这种灵活性机制,有可能会给软件质量等带来的影响,这也是支持持续性的软件系统需要在设计实现中需要解决的问题。
%
%
\subsubsection{生态观}
软件的开发、维护和应用所涉及的三大类元素,包括软件涉众(开发者、用户及企业和组织等),软件制品,以及软件设施(支持软件活动的软件设施),彼此交互、互相依赖,逐渐形成复杂生态系统,需要用生态化的观点去理解和研究。
%生态化是软件的强大渗透力的必然结果:一方面软件活动延伸到了个体、群体和社会;另一方面软件所涉及的各种元素之间存在越来越多的依赖性、相关性和相互作用。
% \subsubsection{软件生态系统}
% “人-机-物”三元融合的新型应用模式涉及到广大社会群体,涉及面广,分工精细,不仅需要术业专攻的各种企业和个体参与,也使得它们可以根据其本身特点和业务诉求参与到开发、应用及其支撑的各个环节,从而形成联合生态。
%
% 开源是一类典型生态系统。开源以燎原之势渗透到了软件产业各个领域,目前80\%的软件开发都是开源模式几乎100\%的IT企业都借鉴开源代码故而代码片段、软件包、软件以及技能、知识和上下游项目等的依赖无处不在生态以一种自然的方式呈现于软件、开发者、开发社区和企业中。一些大规模复杂软件尤其是基础软件例如Linux内核OpenStack等因其基础性和流行度涉及到众多厂商的利益因此也会吸引庞大的群体企业和个体在其开发和应用市场中扮演不同的角色形成生态。
%
% 总的来说,软件生态系统指参加软件活动(开发、运行、维护、应用等)的一组实体及其环境组成的、彼此交互的社区体系(系统之系统)。
生态系统可以从下述维度来刻画。
%
首先,多元素交互是软件生态系统的最典型特征,而且交互的元素具有深刻的社会性(例如核心参与者---开发者和用户---都是社会体)。元素关系主要体现为协作、竞争和混合并以生态平衡为目标。系统中要素关系(对立、独立或互补)之间的平衡是秩序之本,非平衡是运动变化之源。
其次,生态系统的关键元素是软件涉众、制品和基础设施,三者互相融合、依赖和影响。涉众之间、制品之间、基础设施之间存在各种依赖,网状的依赖形成各种供应链,而涉众、制品和基础设施之间因为彼此依存也存在各种影响。生态的要义在于供应链的形成和各种影响的相互作用需要抵达平衡。
第三,生态系统是由人类智能和机器智能交互并融合而实现的。人类智能体现为分布在全球的开发者和用户;机器智能体现为支撑分布式开发和使用的软件工具与基础设施,支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。通过众多的个体认知的汇聚,以及商业和宏观调控角度的战略调控,人类智能和机器智能相互协作、补充,并向群体混合智能方向发展。
软件从过去的个体作坊开发,到不同组织内或组织间人员混合参与的组织化开发,再发展到数以万计互相依赖的软件形成的供应链和庞大的生态系统下的社会化开发。其转变给软件开发带来了前所未有的创新可能。
%同时,规模指数级增长的项目及其之间庞杂的依赖关系使得供应链复杂度激增,进而给软件开发、运行和使用及市场带来诸多挑战。
相应地,生态观对软件方法学带来显著的变化。软件和软件学科需要从以往关注个体软件的构建和运维转变到关注有广泛社会参与的软件体系的构建、运维和成长,以及软件生态的平衡和可持续发展。同时软件学科跟其他学科的交叉性将更为凸显,社会学、经济学、组织学、生物学等学科的理论和发现可被用来研究海量软件活动数据隐含的软件生态网络,其发现反过来对其他学科的发展也将很有裨益。
\subsection{学科研究的主要问题}
软件学科的学科内容主要涵盖软件语言与软件理论、软件开发方法、软件运行支撑、软件度量和质量评估四方面的内容,而软件范型贯穿其间,使之相互配合形成方法论意义上的有机整体。软件范型的变化将牵引软件技术体系的变化。而上述系统观、形态观、价值观和生态观的新视角将引起软件范型的变化,并辐射到软件开发、运行和度量各个层面方法和技术的变革,进而对软件的整体生态与教育方面产生深刻的影响。
软件理论和软件语言方面将着力解决如何建立适应人机物融合的软件范型基础这一基本问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,\wang{拓展可计算理论传统研究的内容范围,特别是需要应对网络环境下日益增长的大数据与持续计算的算法与计算复杂性理论,以及在新的硬件架构(异构多态)和计算平台(量子计算平台)下的计算理论和程序理论等等}。与软件理论紧密相关,软件语言\wang{将重点研究泛在计算各种抽象,构建领域特定的程序设计语言,探索语言演化和生长机制、以及基于“语言工程”的软件设计方法和支撑环境,共同奠定软件范型发展的理论和语言基础}
软件构造方法将\wang{研究人机物融合场景下的软件开发范型和技术体系,也即研究面向应用场景需求、如何“软件定义”人机物融合的“场景计算机”。
%它要在万物互联的平台上持续演进地面向场景提供服务,具有自主性、协同性、演化性、情境性、涌现性和可信性等诸多特性。
面向高效、高质量、低成本的目标,软件构造的技术方法和组织模式上需要应对复杂场景分析与建模、群智开发、人机协作编程、开发运维一体化等以一系列挑战,亟待新方法和技术的发展。}
软件运行支撑\wang{将向支撑人机物融合、具有“资源虚拟化”和“功能可编程”特点的泛化运行平台发展,需要满足作为社会基础设施在规模、适应、演化、安全、效能等方面的诸多严格要求。未来的泛在操作系统与运行平台,需在软件定义的新型运行平台架构、泛在资源的高效虚拟化和调度方法、软件系统持续适应演化的支撑机制、人机物融合过程中的安全与隐私保护等关键问题上有突破。}
软件度量和质量评估是软件学科的科学观察、工程构造相交融的重要方面,\wang{其未来的重要变化是在复杂系统和软件生态层面的科学观察,并以此为基础推进软件开发和运行层面的持续发展。一方面,将通过有效的度量和分析,理解和利用大规模代码和项目的供应链行为,研究个体学习和群体协作,并探索软件生态的形成和可持续机制机理等。另一方面,在软件成为信息社会的基础设施后,软件质量评估和保障的需求不断增长、更为突出。以应用场景的价值牵引,带动软件质量和确保技术的发展成为重要趋势,未来突破的重点将在数据驱动的智能系统质量保障、 人机物融合场景下的系统可信增强、大规模复杂系统安全缺陷检测、物联网环境下的系统安全保障等方面。}
“数据为中心”是人机物融合时代的最为突出的特征,数据工程和数据管理是未来软件构造和运行支撑的共性沉淀。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。在数据管理方面,需研究如何管理大数据、特别是如何利用新硬件混合架构来实现大数据的管理。
软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局。这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在已有共性方法上发展领域特定方法,并反馈并带动新型共性方法的发展,是学科发展的有效途径。\wang{在人机物融合及软件定义一切的大背景下,以卫星、流程工业控制、智慧城市、无人自主系统等为代表的重大领域都蕴含着平台再造与整合的发展机遇,即以软件作为万能集成器对相关系统原有的软硬件和服务资源进行解构然后以平台化的方式进行重构,从而建立软件定义的融合发展平台。此外,高性能 CAE 软件系统等专用工程软件也是软件学科的重要关注点。在支撑实现高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计等重大应用价值外,其高效能、高精度、高定制的需求亦将推动软件技术的发展。}
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。\wang{软件教育需要构建包括顺应``软件定义一切''发展趋势的通识教育、针对人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育和继续教育的完整体系,并建设发展相应的教育理念、方法和伦理。}
%在此软件学科发展的新阶段,可以上述系统观、形态观、价值观和生态观的新视角,展望本学科的主要挑战和研究问题:
%\begin{itemize}
%\item 在软件理论方面,需研究如何应对大规模的数据与计算;如何保证复杂软件系统的正确性、可靠性、安全性;针对新型计算机的硬件架 构与新的计算平台,如何建立其理论分析基础等。
%为此,需要重点研究
%\item 在软件语言方面,需研究如何通过对领域和应用问题的抽象,开发有效的领域特定语言;如何支持多范式程序设计,特别是加强大数据时代语言对数据处理的支持;如何开发人机物融合的泛在混合系统的编译技术;以及如何构建程序语言的安全性保障机制等。
%\item 在软件开发方法方面,需研究人机物融合复杂场景分析与建模、软件自适应与自成长、基于人机协作的群智化软件开发、数据驱动的软件自动化、安全可信高度智能的开发运维一体化等新方法和新技术。
%\item 在操作系统与运行平台方面,需研究支持软件定义的新型运行平台架构、泛在资源的高效虚拟化和灵活调度、复杂软件系统持续适应演化的共性支撑、人机物融合过程中的安全与隐私保护等关键技术问题。
%\item 在数据管理方面,需研究如何管理大数据、特别是如何利用新硬件混合架构来实现大数据的管理。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。
%\item 在人机物融合的领域特定软件系统构造方面,面对系统边界的可伸缩性、系统成分的异构性和系统模型的混成性,需研究环境建模及其软件定义方法、模型驱动场景感知和认知、异构资源的统一表示和封装、系统学习赋能机制及性能确保、异构模型的融合和验证以及空间分布系统的的时空一致性等关键技术问题。
%\item 在软件质量与安全保障方面,需重点研究数据驱动的智能软件系统质量保障、人机物融合场景下的软件系统可信增强、大规模复杂系统安全缺陷检测与保障以及物联网软件安全保障等挑战性问题。
%\item 在软件生态方面,需要研究并阐明各类软件生态如何形成,如何可持续发展的基本规律,进而理解并驾驭大规模代码和项目的供应链行为、支持个体学习并加入复杂项目和生态,改进复杂生态中群体的协作等。
%\item 最后,在软件教育方面,需研究面向不同受众对象和认知水平的普及教育、反映人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育,给出适应软件学科发展的人才培养理念及教育方法。
%\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{政策建议}
我们比任何时候都需要更加重视软件学科建设,牢固确立软件学科的优先发展地位,准确把握新时代软件学科的发展方向。建议从加强软件基础前沿研究、升级软件高等教育体系和构建软件产业良性发展环境等维度规划我国的软件学科发展战略。
\subsection{加强软件基础前沿研究}
新时代软件学科面对的软件是人机物融合、泛在、可演化的复杂系统,这样的系统已经超出传统软件学科关注的以计算机为中心的软件范畴;为此加强软件基础前沿研究是现实而紧迫的。
\begin{enumerate}
\item \textbf{加强面向人机物融合泛在计算模式的软件理论研究。} 新时代软件系统是持续演化、人机物融合、泛在的开放复杂系统。以互联网(物联网)上大量涌现的人机物融合的智能云服务系统为例,软件系统需要处理持续增长的网络大数据,融合离散计算与连续的物理空间,服务行为具有不确定性和持续演化性。此类软件系统已经超出了当前算法和程序理论的研究范畴。需要借鉴复杂系统思想、理论和方法,拓展与控制理论的交叉,研究开放的新型软件理论,为新时代软件学科提供理论支持。
%
\item \textbf{加强面向泛在计算的程序设计语言及其支撑环境研究。} 随着计算向各个领域的渗透,降低普通用户学习门槛成为面向泛在计算的程序设计语言关注的重点。需要结合各个行业领域的软件定义需求,以领域特定的程序设计语言设计原理和高效实现为目标,研究面向领域应用的新型程序设计语言理论、程序设计语言的演化和互操作性机理、程序设计语言的支撑环境和工具链等,提供共性和个性兼顾的编程支撑。
%
\item \textbf{布局基于软件定义方法的泛在操作系统原理和技术研究。} 需要研究以``连接协调''为核心的新型软件体系结构下泛在操作系统模型和机理、各类新型异构资源的抽象机制及其虚拟化技术、应用需求导向的按需高效资源调度、内生可信安全机制等,以及研究如何充分发挥泛在操作系统的``元层''共性基础支撑作用,有效驱动和实现``信息-物理-社会''空间的协同持续演化。
%
\item \textbf{探索以数据为中心的新型应用开发运行模式及其平台支撑。} 随着大数据应用的繁荣和数据作为主要资产定位的确立,围绕数据部署应用将成为一种主要的应用模式。需要研究异构海量数据的抽象和建模、多元(源)数据资源的互操作和调度管理技术及平台、以多元(源)数据为中心的应用快速开发和高效运行技术、以及相应的数据安全和隐私保护技术等。
%
\item \textbf{加强对大规模代码和项目的供应链和生态行为研究。} 开源、众包等软件开发社区模式已成为传统组织型软件开发模式之外的重要模式。需要以刻画和分析复杂的软件供应链模型为基础,研究个体如何高效认知复杂项目和生态、群体如何高效高质地协作完成各类软件开发相关的任务、软件涉众如何围绕软件构建可持续性演化的生态系统等。基于互联网群体智能的软件开发方法和支撑平台研究、基于软件工程大数据的软件自动化方法和技术研究、以及软件知识产权的甄别和保护技术也是值得关注的重点。
%
\item \textbf{重视软件技术研究和应用的价值取向和管理。} 鉴于软件的基础设施化的发展趋势,需要加强复杂人机物融合系统安全可靠确保、机器学习赋能软件的质量评估和风险防控等,同步发展软件确保工具环境、软件基础设施以及软件生态治理。需要推进以人为中心的软件价值观研究和规范,研究各种社会因素带来的超越软件使用质量的新型软件价值及其约束和规范、可能风险的防护和提示机制等,软件技术及其应用的伦理研究也应受到关注。
\end{enumerate}
\subsection{升级完善软件学科高等教育体系}
软件不仅成为社会经济活动的基础设施,还将重塑人们的思维模式。在现代高等教育体系中,软件教育不仅仅是面向软件专门人才的专业教育,还应该成为覆盖全体大学生的通识教育。
\begin{enumerate}
\item \textbf{布局面向全体大学生的软件通识教育。} 要通过以``算法抽象+编程思维''为核心的认知教育,帮助学生形成用算法和编程理解数字空间的认知能力;通过以``语言案例+编程案例''为核心的实践案例教育,帮助学生形成自主学习编程工具、解决现实计算问题的实践能力。要使大学软件通识教育与中小学的计算机基础教育相衔接;与当下大学开设的``大学计算机基础''通识课程融合衔接;还要与大学各类专业教育和未来终身学习相衔接。
%
\item \textbf{重构软件学科专业人才培养体系。} 需将以计算机为核心的软件学科知识体系拓展为以网络为平台的软件学科知识体系,系统能力培养标准也要由计算机空间拓展到网络空间,建立与软件新``四观''相适应的高层次研究型专门人才培养方法,强化解决以网络为平台的复杂系统问题的能力,造就勇于开拓新时代软件学科``无人区''的探索者,为中国引领新时代软件学科发展培养领军人才。
%
\item \textbf{开展面向其他学科专业的软件工程教育。} 为适应``软件定义一切''的时代特点,结合各行业领域信息化转型发展需求,需构建面向其他学科专业的软件工程课程体系,实现复合型、创新型和跨界人才培养,有效提升行业领域应用专门人才与软件专业人才合作开发复杂应用软件的能力,为各行业领域提供高端软件开发人才,提高基于计算机和网络开发仿真、设计、分析、制造、测试等工具软件的能力和水平。
%
\item \textbf{构建并开放软件教育支撑平台。} 要把握软件学科实践性的特点坚持以泛在化的计算机和网络为支撑工具支持软件人才实践能力培养研发支持软件人才培养的支撑软件和大规模开放在线课程Massive Open Online CourseMOOC与开源软件资源以及开源软件开发部署云平台对接构建开放共享的软件开发、部署、维护、升级和演化的实训平台推广大规模开放在线实践Massive Open Online PracticeMOOP教学对接软件产业环境形成支撑大学教育和终身教育的开放平台。
\end{enumerate}
\subsection{构建软件产业良性发展环境}
在软件定义一切、成为经济社会基础设施的时代背景下,强大的软件产业需要强大的软件学科支撑,同时也提供了软件学科发展的沃土。需要把握住新时代软件带来的颠覆式发展机遇期,实现创新发展和跨越发展。
\begin{enumerate}
\item \textbf{完善知识产权保护。} 需加强软件知识产权保护的宣传,加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施研究以及法规制定,完善健全软件知识产权保护体系并建立严格的实施机制,切实保护软件技术和应用创新,促进我国软件产业的技术升级。
%
\item \textbf{布局新基础设施建设。} 结合数字中国建设和数字经济发展新需求打造新一代信息技术主导的社会经济活动的新型基础设施如5G通信网、物联网、人工智能开放平台和大型数据中心等。同时加快推动传统物理基础设施的软件定义改造和升级如电力传输网、交通路网等。以此为基础面向传统行业领域数字化转型、网络化重构和智能化提升的迫切需求大力推进软件定义方法在各行业的推广应用推进工业互联网技术研发和平台构建按需打造各行业特定的泛在操作系统。
%
\item \textbf{大力发展新型应用。} 需面向智慧城市、社会治理、敏捷物流、信息消费等重点领域,加强投入和引导,构建相应的大数据互操作平台和应用开发工具,支撑高附加值软件产品和服务的技术创新,培育人机物融合的新型应用。
%
\item \textbf{积极培育开源生态。} 需培育基于开源模式的公益性生态环境建设,``参与融入''国际成熟开源社区,``蓄势引领''中文开源社区。探索开源生态下的新型商业模式,并以其为抓手提升我国在信息技术领域的核心竞争力和国际影响力,特别是通过中文开源平台的建设构建国家软件资产托管和共享体系。
%
\item \textbf{推进公共数据开放。} 需通过政策和法规制定,鼓励地理、气候、统计、环境、交通等政府数据和公共数据开放,构建基于互联网的大数据开放共享平台及开放的数据分析工具库,支持不同组织和个人开展数据汇聚、管理、分析和应用的大规模协作和高附加值的数据类软件产品和服务创新。
\end{enumerate}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{小结}
经由七十余年的发展,计算机软件已经成为信息社会不可或缺的基础设施,支撑着国计民生,承载着现代文明。
本书旨在勾画软件科学与工程的学科体系及其发展态势,指出其所面临的挑战和未来的研究方向。如未做到,乃能力及知识所限,请读者见谅。
%无意也不能涵盖软件学科的所有方面,而科学研究的探索本质也决定了我们并不能确定地指出软件学科未来应该做什么、怎么做。本报告仅尽我们所知,力图澄清软件学科的定位、回顾其发展历程、梳理其发展规律,进而讨论其所面临的发展机遇与挑战,给出政策建议,以供参考。
%
%软件是以计算为核心手段实现应用目标的解决方案。软件学科是研究以软件求解应用问题的理论、原则、方法和技术以及相应的工具支持和生态环境的学科。也就是说软件学科本质上是一门方法论学科【cite N. Wirth】。其带来的是一种人类思维的创新以人机共融方式延伸了单纯人脑思维形成了一种前所未有的创造力。随着软件应用范围的扩张,软件的计算平台的泛化和软件方法技术的发展,软件学科的边界不断拓展,内涵不断深化。本章总论“软件作为基础设施”这一发展趋势,进而以系统观、形态观、价值观和生态观四个视角探讨软件学科的方法论新内涵。
\renewcommand{\thesection}{\arabic{chapter}.\arabic{section}}%