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

550 lines
77 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{软件}
人们通常把软件理解为计算机系统中与硬件相对的部分,包括程序及其文档,以及相关的数据。
但这只是软件的存在形式,其所表达和实现的实质内容是以计算为核心手段实现应用目标的解决方案。
不同于一般物品,软件是一种人工制品,同时也是一种纯粹的逻辑制品。
作为一种人工制品,其需以适应其所处环境的方式完成应用目标;作为逻辑制品,其困难不在于物理限制而在于逻辑构造。
因此,软件开发活动本质上不同于传统工程制造:后者在于“造物”,前者可谓“拟人”—即表达人脑思维形成的问题解决方案。软件没有“边际成本”,即复制成本几乎为零,主要成本在于它的“创造”。%每一个软件系统都需要独一无二的创造。
软件既受刚性约束,又能柔性适应。软件以计算为实现手段,受逻辑正确性、图灵可计算性和计算复杂性的刚性约束。%软件作为逻辑制品,其在静态表示上没有任何物理意义的弹性。
而通用图灵机模型和存储程序式计算机架构又使得软件具有无与伦比的灵活性,在前述刚性约束下,其丰富的动态语义可以表达千变万化的计算解决方案。
%这是其他任何种类的制品所不具有的巨大优势。
软件规模在原则上可以无限扩展。
其高度灵活性也使得软件不仅仅是系统中的信息处理工具,也是管理各类资源、融合人机物的“万能集成器”。
这就使得整个人工系统的复杂性向软件集中。
纵观软件的发展历程,其复杂性呈爆炸性增长趋势。软件成为人类所创造的最复杂的一类制品。
对复杂性的驾驭成为软件开发和运维的核心挑战。
\subsection{软件的重要作用}
进入21世纪以来信息技术飞速发展已经广泛覆盖并深入渗透到了社会经济的方方面面。
近年来,以云计算、大数据、移动互联网、物联网、人工智能为代表的新一代信息技术推动了软件的跨界融合发展,
开始呈现出“网构化、泛在化、智能化”的新趋势,并不断催生新平台、新模式和新思维。
可以说,信息技术的深度应用已经推动人类社会步入到一个新的发展阶段。
%对这样一个新的发展阶段,可以从不同的视角去考察和认知。
%例如,从基础设施视角,可视为是以互联网为核心主干,移动网、广电网、物联网等多种网络融合形成新型泛在化基础设施,并支撑规模化跨界创新应用服务模式为特征的“互联网+”时代;
%从计算模式视角,可视为是以支持计算、存储、网络、数据、应用等资源的集约式管理和服务化使用为特征的云计算时代;
%从信息资源视角,则可视为是将数据作为新型战略资源并以数据的深度挖掘和融合应用为特征的大数据时代;
%从信息应用视角,则可视为是以人工智能技术为基础,支持感知、认知到决策为特征的智能化时代。
%然而,如果
从使能技术的视角看软件技术在信息技术中始终处于“灵魂”地位所有新的信息技术应用、平台和服务模式均离不开软件技术作为基础支撑例如谷歌所有的网络服务涉及的代码达到20亿行。
更为重要的是软件技术不仅引领信息技术产业的变革在很多传统领域如制造、能源、交通、零售等中的存在比重和重要性也在不断加大。例如宝马7系的软件代码总量超过2亿行特斯拉Model S超过4亿
行。软件在支持这些传统领域产业结构升级换代甚至颠覆式创新的过程中起到了核心关键作用,加速重构了全球分工体系和竞争格局。
例如作为新一轮科技革命和产业变革的标志德国的“工业4.0”和美国的“工业互联网”以及我国的“中国制造2025”均将软件技术作为发展重点。
无所不在的软件已走出信息世界的范畴,深度渗透到物理世界和人类社会,并扮演着重新定义整个世界的重要角色。从这个意义上说,我们正在进入一个“软件定义一切”的时代!
\subsection{软件学科}
软件学科是以软件为研究对象,研究以软件求解应用问题的理论、原则、方法和技术,以及相应的工具支持、运行平台和生态环境的学科。
换言之,软件学科本质上是一门方法论学科。
%其带来的是一种人类思维的创新,以人机共融方式延伸了单纯人脑思维,形成了一种前所未有的创造力。
%
尽管软件学科的内容一直在不断深化、边界一直在不断扩展,
作为一门方法论学科其焦点始终是如何驾驭用计算为手段解决应用问题的复杂性,而合适的软件抽象是驾驭此复杂性的关键。
可将计算平台集合看作是平台空间,可能的软件集合看作是解空间,而将应用需求归入问题空间。
唯有凭借恰当的软件抽象,方能有效认知并合理建模这三个空间,进而在其间建立映射,
为给定应用需求找到可在合适计算平台上高效运行的软件解。
%如何将问题空间元素(问题)映射到解空间元素(解决方案)、以及如何构建平台空间元素(计算平台)以高效运行解空间元素(解决方案),
%
若以软件抽象为视角,软件学科可大致划分为四个子领域,即软件语言、软件运行支撑、软件构造方法以及软件度量与质量评估。
软件语言的核心任务是建立通用的抽象机制,包括抽象的表示和抽象之间的关系,为问题空间、解空间和平台空间建模。
软件语言包括程序设计语言、各类建模语言以及编程模型等。
其中程序设计语言用于描述软件的计算行为,提供了基础的软件抽象。%承载着软件的范型。
一方面,程序设计语言需要提供更有效、有力、更符合人类思维方式的语言设施,以降低软件开发的难度、提高软件制品的质量;
另一方面,这些语言设施又需能被高效地实现以保证软件的执行效率。
软件运行支撑的核心任务是建立解空间向平台空间的映射方法并构建平台空间抽象的计算实现。
运行支撑系统包括操作系统、编译系统、中间件和数据库管理系统等,
它们负责驱动下层计算资源有效运转、为上层应用提供共性服务,从而将计算平台的概念从硬件扩展到了软件层面上。
%其内容主要是在平台空间中实现解决方案、并构建平台空间的计算实现,。
%其中,操作系统负责管理计算系统软硬件资源、操纵程序运行,为应用软件提供公用支撑。
%编译系统(又称编译器)负责将源语言编写的源程序翻译为等价的可 运行目标程序;
%中间件将系统软件的概念扩展到网络环境,为分布式应用软 件部署、运行和管理提供支撑;数据库管理系统旨在统一管理和维护数据库中的数据,是存储、组织、联接、变换和加载数据的软件。
软件构造方法的核心任务是建立问题空间抽象到解空间抽象的映射方法,构建解决方案完成特定应用目标。
其关键问题包括如何理解所面对的问题空间、如何理解当前需要软件来解决的问题并以此设计可能的解决方案、
以及如何高效高质量地开发出能满足需求的软件等。
软件构造方法包括了软件开发的技术、过程、管理等方面,形成了软件学科的软件工程分支的主要内容。
软件度量与质量评估的核心任务是将基于软件抽象的制品与服务及其构造、运行过程作为观察对象,
度量、评估和预测其质量和效率等指标。软件度量评估通过量化发现软件和技术的规律,并评价解决方案对应用目标的满足程度。
这涉及到软件语言、构造和运行诸多方面,通常也将其归在软件工程的主要内容之中。
这四个子领域是密切联系、相互作用的,贯穿其中的是软件范型。
每一个范型为软件工程师(或程序员)提供一套具有内在一致性的软件抽象体系,具化为一系列软件模型及其构造原理,并外化为相应的软件语言、构造方法、运行支撑和度量评估技术,从而可以系统化地回答软件应该“如何表示”、“怎样构造”、“如何运行”以及“质量如何”的问题~\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{我国的软件学科与产业}
我国软件学科起步较早在几代科学家的不懈努力下取得了一系列的成果。例如在上世纪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亿增长至2018年的6.3万亿元且近年来保持每年10\%以上的增速。
尽管面临国际软件企业巨头的竞争国内软件企业通过自主创新逐渐探索出符合中国国情的发展道路。近年来CEC、华为、阿里、腾讯等企业软件研发投入和产出持续增长技术水平不断提高市场影响力日益扩大。
在迅速发展的同时,我国软件产业也存在一些问题。
首先在总量上我国软件产业占电子信息产业的比重约30\%显著低于发达国家的50\%-70\%,仍有巨大发展空间。
其次我国软件产业基础薄弱在操作系统、数据库管理系统等基础软件和EDA等核心工业软件领域有待摆脱受制于人的局面。
第三,我国软件企业的技术成熟度、国际影响力和认可度还需进一步提升。
考虑到软件产业自身的发展规律和当前的国际政经竞合形势,我国软件产业的进一步发展和升级亟需软件学科在原创技术和人才供给方面提供更有力的支持。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{发展趋势与挑战问题}
\subsection{软件成为基础设施}
当前,计算的泛在化和软件定义一切的发展趋势使得软件成为信息社会的基础设施,软件学科也进入了一个新的发展阶段。
所谓“计算的泛在化”是指计算变得无处不在而又无迹可寻。万物数字化、万物互联使得计算无处不在,形成了“人-机-物” 三元融合的发展趋势。计算自然融入人类 生产、生活活动的环境和过程之中,无需关注,不着痕迹。
所谓“软件定义”是指软件以平台化的方式,向下管理各种资源,向上提供编程接口,其核心途径是资源虚拟化以及功能可编程。而“软件定义一切”则将软件平台所管理的资源和提供的编程抽象泛化到包括计算、存储、网络、软件服务等在内的各类计算资源,包括各种数字化机电设备和可传感物体对象在内的各类物理资源,乃至可通过激励机制调配的人力资源。
软件的基础设施地位具体表现为两个方面。一方面,软件自身已成为信息技术应用基础设施的重要构成成分,以平台方式为各类信息技术应用和服务提供基础性能力和运行支撑。另一方面,软件正在 “融入”到支撑整个人类经济社会运行的“基础设施”中,特别是随着以互联网和其他网络(包括电信网、移动网、物联网等)的不断交汇融合,软件正在对传统物理世界基础设施和社会经济基础设施进行重塑,通过软件定义的方式赋予其新的能力和灵活性,成为促进生产方式升级、生产关系变革、产业升级、新兴产业和价值链的诞生与发展的重要引擎。从经济社会整体发展的角度,计算成为了人类与物理世界互动的中介,软件对人类社会的运行和人类文明的发展进步起到重要支撑作用。
%首先,一大批基础软件本身就是信息基础设施,支撑各种应用软件的运行。其次,一大批嵌入式软件已成为掌控并支撑物理基础设施运行的关键系统。第三,一大批应用软件及其所提供的服务已成为信息社会不可或缺的基础资源与设施。最后,从软件产业整体的角度看,随着传播和互联的渗透发展,计算成为了人类与物理世界互动的中介,软件成为了创造新文明的载体,大规模、高效率地生产高质量的软件产品和提供软件服务的能力已成为社会经济升级发展的新动能,构成国家的一种核心竞争力。
在此宏观趋势下,软件学科的边界日益拓展、内涵不断深化。
\subsection{软件学科的拓展}
软件学科的拓展来自软件应用范围扩张、计算平台的泛化和软件方法技术本身发展三个方面的驱动。
从软件应用范围扩张的角度看,计算日益变得无处不在,“人-机-物”三元融合不断深入。
软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的“人-机-物”各类资源,实现应用价值。
软件作为应用解决方案,涉及的范畴扩展到各类物理设备、物品和人类的主观体验与价值实现;
因而软件学科无可避免地涉及到控制科学、系统科学以及心理学、管理学、经济学和社会学等范畴的问题,并以软件学科自身的方法论将其内化和拓展。
从软件依赖的计算平台泛化的角度看,计算平台从传统的集中式单机发展到并行与分布平台,到今天的“云-边-端”异构多态计算平台。
软件定义技术为这个“人-机-物”融合的平台提供可编程计算抽象。
软件作为解决方案,在这个计算平台之上利用数据资源,协同人机物,实现应用价值;同时也通过在这个平台上提供服务,并进一步积累数据,不断拓展这个计算平台。
从软件方法技术发展的角度看,软件的基本形态从计算机硬件的附属品到独立的软件产品,转变到云化和泛在的软件服务,%,转变为无处不在而又无迹可寻的泛在服务。
软件形态的耦合边界趋于模糊,开发运维一体化成为趋势;
面向计算平台和应用需求变化和拓展的软件演化成为软件的常态,元级结构以及在基于规则的演绎之上发展出数据驱动的归纳,将成为超大规模软件体系结构的重要元素,各种场景的适应和成长是软件运行支撑发展焦点;
软件开发经历了从实现数学计算到模拟物理世界,将拓展到虚实融合创造的转变,人类社会和赛博空间的虚实互动促进着软件系统向社会-技术系统Socio-technical System发展对软件作为客体对象的考察从以个体及其生产使用为主扩展到在生态的层面上转换为考虑软件及其利益相关者群体的竞争、协作等社会性特征软件度量和质量评估的科学观察对于技术的发展和软件生态的发展具有显著意义。
%在元级方法论层面,正从以还原论为主向系统论发展,软件作为解决方案越来越多地被视为开放环境中的复杂适应系统,而不是封闭规约下的确定行为系统。
\subsection{软件科学的新理解}
在软件作为基础设施、软件定义一切的背景下,软件进一步成为构造开放环境下复杂信息系统的关键。在研究方法学的层面上,认识软件学科的内涵需要有新的视角,包括以驾驭复杂性为目标的系统观、以泛在服务和持续演化为特征的形态观、以人为中心的价值观、以及关注群体协作平衡的生态观。
\subsubsection{系统观}
%所谓软件学科的系统观,有三层含义。第一层含义是系统工程。也就是说,软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注整个“人-机-物”融合系统的价值实现。
%软件定义一切的趋势使得软件不仅仅是系统中的信息处理工具,也是管理各类资源、融合人机物的“万能集成器”,是实现应用价值的整体解决方案。
% 第二层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,
%体现在其前所未有的代码规模、软件处理的数据量、软件用户量和使用的多样性、软件通过网络形成的连接量和种类、涉及承载运行的计算和物理设备量和种类等方面,也体现在且其所处环境的具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。
%第三层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法。
所谓软件学科的系统观,有三层含义。
第一层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,且所处的环境具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。第二层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法,超越还原论。第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注“人-机-物”融合的整个系统的价值实现。
以系统观看软件学科发展,软件科学与自然科学、社会科学等各领域产生了千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为技术-社会系统。人机物融合的软件系统,其复杂性本身就呈现在系统乃至系统之系统的层面上,综合性和系统性也愈来愈强。%系统观要求软件科学体系需超越传统还原论的思维藩篱。
%
近年来软件科学在系统观方向上进行了不少探索包括基于复杂网络来认识大规模软件系统的整体性质、基于多自主体Agent的软件系统和方法、复杂自适应软件与系统、群体化软件开发方法等。网络化和大数据催发了融合软件系统与系统论研究的切入点数据驱动的软件设计和优化初显端倪在一些特定领域获得很大成功。
%人们对于数据驱动的软件的设计,不再遵循传统的自顶向下、分而治之、逐步精化的经典还原论法则,而是一种基于输入输出的黑盒的数据描述,训练出深度神经网络,充当所需要的软件。这种%
例如,基于深度学习的方法从海量的样本中归纳出神经网络,其泛化能力可视为通过神经元系统的涌现而达成的功能。
然而,总体来看,这些研究仍较为初步,未能形成体系化的软件系统论和软件系统工程方法。
%处于方法层次,还未到达方法论的层次,即关于研究问题需要遵循的途径和研究路线,也可视作具体方法的元级层次。
% 新的软件方法学的关键在于如何认识因果和相关。因果观是有前提的相对的相关性是绝对的。软件发展在人机物融合时代人在回路、“拟人化”计算Human Computation、人机共融等需要关于软件规律的元级方法论创新。在软件系统的建模方面软件将从单纯信息处理向“场景计算”发展这里的场景包括物理环境和社会环境。在软件系统的机理方面软件的语义将由传统的还原论形式语义方法向多尺度、可演化的抽象方向发展组合方式将从传统的静态组合方式向动态可演化的、具有涌现特性的方式发展建立软件微观行为与宏观行为的辩证统一。面向人机物融合的认知软件作为人工智能或者“智能+”的承载,将深化复杂自主系统的智能行为理论和方法,软件定义将成为人机物融合系统中学习赋能(型)资源的管理途径。
软件科学的发展也将促进系统论和系统学的发展。在软件定义一切的时代,软件成为复杂适应系统认知的载体和实验平台,而软件发展中形成的以形式化体系为基础的规则驱动软件理论,高性能计算之上建立的模拟仿真技术,与进入智能化阶段形成的大数据驱动的软件方法,为形成还原论和整体论的辩证统一奠定了良好的基础,软件走向人机物融合更是为系统论和系统学的发展提供了实践探索的大场景。
% 展望未来,多自主体形成的协同与自组织以及自适应结构和能力、网络化产生的大数据与数据语义的复杂网络,将是软件系统在传统规则驱动基础上走向人机物融合超大规模系统的基础。软件作为复杂系统乃至复杂巨系统,在软件定义时代,软件科学将与系统学共同发展,软件方法学将吸收系统论成果,并支撑系统论和系统学的发展。
\subsubsection{形态观}
% 随着计算机技术的发展和计算机应用的不断深入,软件的外在形态逐步从硬件附属物、独立的软件制品发展到网络化服务。与之相对应,软件开发范型也经历了无结构、结构化、面向对象、面向构件、面向服务的发展历程。
当前,软件的外在形态正在朝着泛在化和可持续成长的方向发展:在空间维度上,软件应用的范围越来越广,对于人类生活和现实世界的渗透力越来越强,呈现出泛在化的趋势;时间维度上,软件应用随着上下文环境及用户需求的变化不断适应和演化,呈现出持续成长的趋势。与此同时,软件开发范型也进一步向网构化以及数据驱动方向发展。
% \subsubsubsection{软件应用的泛在化}
% 计算和信息处理早已通过各种移动设备、嵌入式设备以及各种传感器渗透到了我们日常生活的方方面面,并通过各种通信技术实现了广泛的设备互连和信息互通。各种软件应用以嵌入式的方式实现预定义的信息处理和通信功能。
%
%近年来,信息技术呈现软件定义一切的发展趋势,即软件全面接管人类社会以及物理社会中的各种资源(包括物理、计算和人力资源),以各种形式的接口对外提供服务。这一发展建立在物联网云计算的基础上,使得软件的核心能力脱离了固化的用户界面和使用环境,可以按需灵活获取并组合。%另一方面,硬件专用化使得运行在各种面向特定用途的硬件设备上的软件应用能够获得更好的执行效率。
%
%
%面向最终用户的软件应用将越来越多地以人机物融合应用的形态出现,即软件以平台化、定制化和集成化的方式融合人、机、物三个方面的资源和服务从而满足用户的各种需求。
%这种新型的人机物融合应用具有泛在化、社会化、情境化、智能化的特点,即:软件应用无处不在同时又无迹可寻;所融合的人机物资源具备社会属性,来自于不同所有者并以社会化的方式产生价值交换;软件应用面向最终用户所处的情境按需构造,以满足即时的用户需求为目标;软件应用在智能化技术基础上,以非预设的方式按需聚合人机物资源并进行定制。
% \subsubsubsection{软件应用的持续成长}
% 越来越多的软件都已具备面向动态变化环境的适应性和面向需求变化的演化性。软件通过监控、分析、决策、执行的反馈环路对其结构和行为进行调控并通过不断演化来保持其有用性。快速响应变更请求并实现持续的软件演化是软件产品保持竞争优势的一个必要条件。在过去的几十年中软件开发的主流方法已经从以瀑布模型为代表的计划驱动的方法演变为以敏捷开发为代表的快速迭代开发方法。基于云的软件应用以及软件开发平台的发展进一步催生了开发运维一体化DevOps的技术趋势。由此反映出软件演化中的反馈和迭代周期越来越短演化越来越频繁。另一方面越来越多的软件应用以服务化和云化的方式运行在提供服务的同时持续收集用户的行为及其反馈并在云端汇聚形成软件用户大数据。这种不断积累的用户数据为软件应用的持续优化和改进提供了新的途径。数据驱动的软件演化方式反映了用户行为已经在一定程度上取代专家成为掌握软件演化方向的主导力量。软件将逐步从被动演化转变为基于内生机制的持续生长。
% \subsubsubsection{新形态下的软件学科内涵}
%在软件定义一切以及人机物融合的发展背景下产生的软件应用的泛在化和持续成长的
这一软件形态的发展趋势对于软件学科的内涵发展将产生多个方面的影响。
首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。因此,最终用户必须具备基于计算思维的问题解决方案规划和构造能力。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
其次,适应泛在化、专用化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移和优化。针对通用目的开发的软件需要不依附于硬件的长期生长演化能力,并具备面向不同专用硬件和平台的高效定制和裁剪能力。
再次,内生的持续成长能力将成为软件的基本能力。除了自适应能力外,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长意味着通过各种智能化算法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成以及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动(代码也可以看作一种数据)的方式进行表示,并实现自演化和自生长。
最后,软件与人将在不断汇聚的群体智慧中实现融合发展。软件的覆盖面越来越广、渗透性越来越强,最终用户对于软件的依赖也越来越强。由此,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智慧。这种群体智慧注入软件后又将服务于每个最终用户,使得他们能够在各种应用场景中以更加智能化和个性化的方式满足自身的需求,从而使得软件在使用中越来越有“灵性”和“人性”。未来的软件学科及相关研究需要摒弃“人”与“软件”二元分离的思维定式,更加自觉地考虑人机共融,不仅考虑“人因”,更要考虑“群智”。
%
\subsubsection{价值观}
软件在整个系统中角色定位日益从负责应用过程中的信息处理环节转变为实现应用价值的主要载体。
这就要求对软件质量的理解从以软件制品为中心的传统质量观转变为以人为中心的价值观。
传统的软件质量观下,人们主要关注软件制品的正确性、高效性、易用性等外部质量属性和易维护性、易移植性等内部质量属性。这些质量属性一般是客观的。
软件的价值观是建立在传统的软件制品质量属性基础上,强调用户体验,强调软件系统的应用对人类价值的实现。软件通过一系列价值要素体现了主观的人类价值。
除了可以用经济价值衡量的软件质量以外,尤其需要强调软件的可信性、安全性、
%持续性
伦理和持续性等价值要素。
% 传统的软件质量观以软件制品为中心,人们主要通过客观度量软件系统来评估软件。
% 新时代下,软件制品的内外部质量要求进一步强化和扩展。
% 更重要的变化,软件通过服务的方式满足用户需求,软件无迹可寻的趋势强化了软件作为人类价值载体的特征,需要在传统的质量观的基础上发展到以人为中心的价值观。
% \subsubsection{从质量走向价值}
% 传统的软件质量模型定义了内部质量、外部质量和使用质量,其主要关注包含内部质量和外部质量的系统客观质量属性。
% 新时代下,软件生态和形态特征变化使得对于软件质量需要有新的认识。
% 一方面变化是软件的服务化特征软件系统通过服务满足用户需求用户不再拥有软件制品只享受软件提供的服务。另一方面技术对社会的影响使得软件体现了人类价值观。人类价值观指的是“基于人的一定的思维感官之上而作出的认知、理解、判断或抉择体现了人、事、物一定的价值或作用”价值观具有稳定性、持久性、历史性和选择性等特点软件通过一系列价值要素体现了主观的人类价值观这些价值要素包括隐私性、安全性safety \& security、平等性等。传统的质量观转变为 “以软件制品为基础,以用户体验为中心”的价值观。在价值观主导下,不同用户会有不同的软件预期,也会使得同一软件系统具有不同的价值。
% \subsubsection{新时代软件系统的价值要素}
% 软件会有多个不同的角度来评价其价值。未来人机物融合的软件基础设施将在可信性、安全性和持续性等价值要素上推动软件学科的发展。
%
% 1可信性
%
%软件作为信息化社会的的基础设施,其可信性对于整个社会系统至关重要。
%软件系统的可信性,要求在软件开发、运行、维护、使用等过程采取有效的措施和方法确认其满足人们的普遍要求和期望,它体现了新时代软件的价值取向。
软件系统的可信性,包括软件本身可信和行为可信两个方面。
软件本身可信,指的是软件身份可信和能力可信,即:软件开发过程提供可信证据(如内部质量和外部质量)进行自证。
软件行为可信,指的是软件行为可追踪记录、不可更改,即:软件运行过程提供监控以控制其对周遭的影响,使得包含该软件在内的整个系统的对外表现符合用户要求。
软件形式日趋多样,加剧了软件可信面临的挑战。
%
% 2安全性
%
% 安全性要求软件为人类活动和生存环境提供必要的安全保障包括系统安全Safety和信息安全Security。系统安全是指能及时有效地避免给人员、设施、环境、经济等造成严重损害信息安全是指能有效防控各类信息的非法获取、传播和使用。
安全性,既包括了功能安全,也包括了信息安全。功能安全是指避免给人员、设施、环境、经济等造成严重损失。其安全性设计通过主动冗余、失效安全等机制,降低系统失效导致灾难性后果的概率。信息安全性防护防止信息以及系统软硬件设施被非法获取、传播和使用。
%软件信息安全保障失效的后果之一就是系统安全故障因此本书将两种安全性合二为一统称为安全性Safety\&Security。传统软件质量观将安全视作系统质量的一部分强调软件个体的安全性。随着人机物融合软件系统已融入人类社会并与人类无缝交互。换言之泛在计算平台上软件与软件、软件与人的交互无处不在软件个体可影响整个泛在网络计算平台的行为软件个体的漏洞等故障很容易扩散传播
软件作为基础设施,描述并掌控了很多关键领域的资源,其安全性威胁会给整个系统带来致命的威胁。因此,安全性这一质量属性随着软件成为基础设施的趋势而变得愈发重要。
%
% 4持续性
%
%软件系统成为支撑社会经济运行的基础设施,需具有持续提供服务的能力。
% 软件系统提供服务的持续性sustainability指的是在持续不间断运行、维护和发展过程中面对各种突发异常事件仍能提供令人满意的服务的能力。
% 高持续性的软件系统具有可成长性,也就是能够在其所处的外部环境、所使用的外部资源、所面对的用户需求不断演化的条件下,通过系统自身的持续演进来实现长期生存和不断成长。
%
% 3 伦理观
%
%作为人类价值载体,软件行为体现了人类价值观;由于软件无迹可寻,导致人类价值观又通过软件影响人类社会。因此,
软件系统的行为应符合社会道德标准,不对个人和社会产生负面结果,这种规范称为软件系统的伦理观。社会道德定义了一定时间区域内人们行为规范,可具体表现为无歧视、尊重隐私、公平公正等,并最终在软件系统的具体行为中体现。因此,软件系统的伦理观,体现于软件行为的上述方面,并需要通过软件开发和运行的诸多机制进行支持。
%软件支撑的基础设施服务,为满足各类应用快速增长、新技术不断涌现的需求,需要具有开放扩展能力,即能集成各种异构的技术及系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。显然,这种开放体系架构常常引入系统设计的脆弱性和质量隐患,从而给持续提供服务带来挑战。
软件系统成为支撑社会经济运行的基础设施需具有持续提供服务的能力。软件系统提供服务的可持续性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等因其基础性和流行度涉及到众多厂商的利益因此也会吸引庞大的群体企业和个体在其开发和应用市场中扮演不同的角色形成生态。
%
% 总的来说,软件生态系统指参加软件活动(开发、运行、维护、应用等)的一组实体及其环境组成的、彼此交互的社区体系(系统之系统)。
生态系统可以从下述维度来刻画。
%
首先,多元素交互是软件生态系统的最典型特征,而且交互的元素具有深刻的社会性。元素关系主要体现为协作、竞争和混合并保持生态的平衡。系统中要素关系之间的平衡是秩序之本,非平衡是运动变化之源。
其次,生态系统的关键元素是软件涉众、软件制品和软件设施,三者互相融合、依赖和影响。涉众之间、制品之间、设施之间存在各种依赖,网状的依赖形成各种供应链,而涉众、制品和设施之间因为彼此依存也存在各种影响。生态的要义在于供应链的形成和各种影响的相互作用需要抵达平衡。
第三,生态系统是由人类智能和机器智能交互并融合而实现的。人类智能体现为分布在全球的开发者和用户;机器智能体现为支撑分布式开发和使用的软件工具与基础设施,支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。通过众多的个体认知的汇聚,以及商业和宏观调控角度的战略调控,人类智能和机器智能相互协作、补充,并向群体混合智能方向发展。
%生态系统是由群体智能和计算机智能交互并融合而实现的。群体智能体现为分布在全球的开发者和用户,计算机智能体现为支撑分布式开发和使用的工具和基础设施(计算机辅助支持和人机交互)。群体智能(体现了众多的个体认知的汇聚,并涵盖商业智能和宏观调控的战略智能等)通过计算机智能凝炼为代码和产品,计算机智能支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。
% \subsubsection{生态观下的软件学科的关键科学问题}
软件从过去的个体作坊开发,到不同组织内或组织间人员混合参与的组织式开发,发展到了数以万计互相依赖的软件或项目形成的供应链和庞大的生态系统。其转变给软件开发带来了前所未有的创新水平。同时,规模指数级增长的软件或项目及其之间庞杂的依赖关系使得软件供应链的复杂度激增,进而给软件开发和使用及市场带来诸多挑战,包括:大规模代码和项目的供应链行为如何理解和利用?面临高昂的学习成本,个体开发者如何学习并加入复杂项目和生态?复杂生态中群体如何协作,协作行为如何发展?产业生态如何形成,如何实现可持续发展?等等。
%
% 第一,个体开发者学习成本进一步增大。
%首先因为软件之间广泛存在的依赖关系使得掌握一个新的软件需要学习别的软件。例如对某个软件进行调试需要学习的相关软件依赖包可能会很多。其次复杂依赖关系带来了新的问题涉及更多的学习内容。例如不同开源项目遵循相应许可证License的约束并且不同许可证之间存在兼容问题这就要求开发者在借鉴开源代码时需要了解对应的许可证。这其中的关键科学问题是
% 个体开发者如何学习并加入复杂项目和生态?
%
% 第二,群体协作更加复杂。%首先群体元素更为多样,其次不同元素围绕生态中的各种软件活动存在错综复杂的协作关系,最后协作行为并非恒定而是不断发展和演化的。例如供应链上的软件项目互相依赖,开发者需要跨越多个项目去实现目标功能,开发者之间的协作不再拘泥于单个项目。例如具有不同商业目标的公司需要各司其职,互补有无,还需要跟竞争对手建立协作,在商业利益和群体目标之间实现平衡。已有的群体协作机制大多聚焦对单个项目的支持,互相依赖的项目之间因缺少有效的信息沟通与集成机制使得群体协调的复杂度增大。总之,这其中的关键科学问题是:复杂生态中群体如何协作,协作行为如何发展?
%
% 第三生态可持续性受到的威胁持续增加。软件供应链上的节点是组成生态的关键元素它们互相依赖互相影响。一个软件的漏洞有可能使得其他依赖该软件的项目面临同样的危机。例如影响昭著的Heartbleed漏洞所涉及的OpenSSL项目中的两个文件至少存在于其他六千多个开源项目中。各大企业因为软件供应链的存在对软件溯源即追踪代码问题的来源有很大的需求投资也是可观的。然而软件供应链上节点间的依赖关系隐藏在开发活动数据中看不见摸不着但广泛存在这就使得软件生态的可持续受到更多潜在威胁。而生态的形成和可持续发展影响到软件甚至信息产业的革新和发展。这方面的关键科学问题是大规模代码和项目的供应链行为如何理解产业生态如何形成如何实现可持续发展
%
% 总之,尽管有数千万个软件和项目及超过一千亿的源代码文件,但人们对软件生态中供应链的形成和发展,及其可能带来的风险和挑战却知之甚少。随着软件生态系统的快速延展,各类供应链关系逐步显现,如开发供应、技术供应、以及产销供应等。供应链中数以千万计的个体开发者、软件项目、公司等围绕软件形成复杂生态的各种活动数据都被软件支持工具记录下来,可以方便的获取,这为公众或者企业自己更好地理解生态的形成和发展,以降低或消除上述生态中的依赖风险、识别其他可能存在的风险提供了一种很好的方法。利用社会学理论对海量数据可视化出来的软件供应链网络进行分析,可以允许我们从个体学习、群体协作、以及生态持续的角度去识别评估风险,进而地更好保障软件生态的可持续发展。
%
% 综上,生态观对软件方法学带来显著的变化和跨越,软件学科跟其他学科的交叉性将更为凸显。软件和软件学科需要从以往关注个体软件的构建和运维转变到关注有广泛社会参与的软件体系的构建、运维和成长,以及软件生态的平衡和可持续发展。
%
%
%
\subsection{学科研究的主要问题}
软件学科的学科内容主要涵盖软件语言与软件理论、软件开发方法、软件运行支撑、软件度量和质量评估四方面的内容,而软件范型贯穿其间,使之相互配合形成方法论意义上的有机整体。软件范型的变化将牵引软件技术体系的变化。而上述系统观、形态观、价值观和生态观的新视角将引起软件范型的变化,并辐射到软件开发、运行和度量各个层面方法和技术的变革,进而对软件的整体生态与教育方面产生深刻的影响。
软件语言与软件理论方面将着力解决适应人机物融合新软件范型的抽象建立这一基础性问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,特别是需要应对大规模的数据与计算的算法理论,以及在异构多态的新硬件架构和量子计算等新计算平台下的程序理论等等。与软件理论紧密相关,软件语言应重点研究领域和应用问题表达和求解的新抽象,加强大数据时代语言对数据处理的支持,以及开发人机物融合的泛在混成系统的编译技术,在领域特定语言和语言工程、多范式程序设计范式融合、软件语言和实现的内生安全等方面奠定软件定义的形态基础。
软件构造方法将面向人机物融合场景的“软件定义”,软件需要在万物互联的平台上开发、运行、并持续演进地提供服务,具有自主性、协同性、演化性、情境性、涌现性和可信性等诸多特性。这在软件构造的技术方法和组织模式上均需要新方法和技术,包括:复杂场景分析与建模、软件自适应与自成长、基于人机协作的群智化软件开发、数据驱动的软件自动化、安全可信高度智能的开发运维一体化等。
软件运行支撑需要满足软件作为社会基础设施的规模、效能、持续、演进等诸多关键需求,并适应人机物融合的各类资源和应用场景的管理和实现。这将集中反映在未来的泛在操作系统与运行平台方面,需研究支持软件定义的新型运行平台架构、泛在资源的高效虚拟化和灵活调度、复杂软件系统持续适应演化的共性支撑、人机物融合过程中的安全与隐私保护等关键问题。
软件度量和质量评估是软件学科的科学观察、工程构造相交融的重要方面。未来的重要变化是在复杂系统和软件生态层面的科学观察,用以指导软件开发和运行技术层面的持续创新。以各类软件大数据为核心的度量抽象将揭示
软件生态如何形成、如何可持续发展的基本规律,进而理解并驾驭大规模代码和项目的供应链行为、支持个体学习并加入复杂项目和生态,改进复杂生态中群体的协作。数据驱动和规则驱动将在软件质量与安全保障上发挥重要的作用。
“数据为中心”是人机物融合时代的最为突出的特征,数据工程和数据管理是未来软件构造和运行支撑的共性沉淀。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。在数据管理方面,需研究如何管理大数据、特别是如何利用新硬件混合架构来实现大数据的管理。
在软件成为基础设施的时代,%软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局,
应用软件系统日益以面向领域的人机物融合的场景计算为主要呈现形式。
%这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在不同的应用领域,
面对系统边界的可伸缩性、系统成分的异构性和系统模型的混成性,需研究各领域的环境建模及其软件定义方法、模型驱动场景感知和认知、异构资源的统一表示和封装、系统学习赋能机制及性能确保、异构模型的融合和验证以及空间分布系统的的时空一致性等关键技术问题。
%,在共性方法上发展领域特定方法,并反馈、沉淀于共性方法。
当前智慧城市、无人自治系统、以及软件定义卫星等新兴应用领域为此方面的研究提供了大场景。
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。软件教育需要适应“软件定义一切”普及教育的需求,还要在顺应人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育上有新发展。
%在此软件学科发展的新阶段,可以上述系统观、形态观、价值观和生态观的新视角,展望本学科的主要挑战和研究问题:
%\begin{itemize}
%\item 在软件理论方面,需研究如何应对大规模的数据与计算;如何保证复杂软件系统的正确性、可靠性、安全性;针对新型计算机的硬件架 构与新的计算平台,如何建立其理论分析基础等。
%为此,需要重点研究
%\item 在软件语言方面,需研究如何通过对领域和应用问题的抽象,开发有效的领域特定语言;如何支持多范式程序设计,特别是加强大数据时代语言对数据处理的支持;如何开发人机物融合的泛在混合系统的编译技术;以及如何构建程序语言的安全性保障机制等。
%\item 在软件开发方法方面,需研究人机物融合复杂场景分析与建模、软件自适应与自成长、基于人机协作的群智化软件开发、数据驱动的软件自动化、安全可信高度智能的开发运维一体化等新方法和新技术。
%\item 在操作系统与运行平台方面,需研究支持软件定义的新型运行平台架构、泛在资源的高效虚拟化和灵活调度、复杂软件系统持续适应演化的共性支撑、人机物融合过程中的安全与隐私保护等关键技术问题。
%\item 在数据管理方面,需研究如何管理大数据、特别是如何利用新硬件混合架构来实现大数据的管理。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。
%\item 在人机物融合的领域特定软件系统构造方面,面对系统边界的可伸缩性、系统成分的异构性和系统模型的混成性,需研究环境建模及其软件定义方法、模型驱动场景感知和认知、异构资源的统一表示和封装、系统学习赋能机制及性能确保、异构模型的融合和验证以及空间分布系统的的时空一致性等关键技术问题。
%\item 在软件质量与安全保障方面,需重点研究数据驱动的智能软件系统质量保障、人机物融合场景下的软件系统可信增强、大规模复杂系统安全缺陷检测与保障以及物联网软件安全保障等挑战性问题。
%\item 在软件生态方面,需要研究并阐明各类软件生态如何形成,如何可持续发展的基本规律,进而理解并驾驭大规模代码和项目的供应链行为、支持个体学习并加入复杂项目和生态,改进复杂生态中群体的协作等。
%\item 最后,在软件教育方面,需研究面向不同受众对象和认知水平的普及教育、反映人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育,给出适应软件学科发展的人才培养理念及教育方法。
%\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{政策建议}
%\section{资助机制与政策建议}
%在当前人机物三元融合往纵深发展、软件定义一切成为大势所趋的新时代,往为促进我国软件学科和软件产业的健康
\subsection{学科发展政策建议}
\begin{enumerate}
\item 大力加强面向泛在计算的程序设计语言以及支撑环境、软件开发方法的基础性研究,以领域特定的程序设计语言的设计原理与高效实现为核心,以程序设计语言的演化和互操作性机理为重点,通过程序设计语言的基础研究,加大程序设计语言的支撑环境和工具链的开发,从而有效而深入地解决计算的泛在和多样性,软件的复杂性和软件的安全性等带来的新时代的挑战。
%
\item 推进对以“连接协调”为核心的新型软件体系结构下的新一代操作系统模型和机理的研究。研究如何为各类新型异构资源建立适当抽象,并按照应用需求进行灵活调度。研究操作系统和运行平台如何充分发挥其“元层”支撑作用,有效驱动和实现“信息-物理-社会”空间的协同持续演化。
%
\item 推进以人为中心的软件价值与伦理的研究和规范。面向泛在计算场景下的软件价值,研究各种社会因素带来的突破使用质量的新的软件价值,并建立相关约束和规范,包括提示用户可能存在的风险,制定智能软件的质量标准、检测方法和实施办法等。
\item 推进对大规模代码和项目的供应链和生态行为的研究和分析。研究个体如何认知复杂项目和生态,群体如何高效高质地协作完成各类软件活动相关的任务,涵盖公司、个体开发者及用户在内的广泛社会力量如何围绕软件构建可持续性演化的生态系统等。%并进一步推进国内软件产业生态系统的建设。
%\item加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施的研究建立公平、公正的环境持续推动软件技术创新进程。
\end{enumerate}
\subsection{软件教育政策建议}
\begin{enumerate}
\item 推行以“计算思维 + 创新思维”为核心的普及教育,包括软件学科核心认知能力的成长模型和规律及其知识体系、以计算思维为核心,融合创新思维的系统化认知能力培养方法和适应不同认知水平且贯穿终生的软件学科普及教育方法。
%
\item 推行以“多学科交叉融合知识体系+系统能力和解决复杂工程 问题能力培养”为核心的专业教育,包括建立面向多学科交叉融合的软件学科专业教育的知识体系和软件学科专业教育核心能力的培养方法。
%
\item 推行以“专业学科知识 + 软件学科知识”为基础,实现复合型、创新型和跨界人才培养的其他学科专业教育,建立基于“专业学科知识 + 软件学科知识”的其他学科专业教育知识体系和具有软件学科知识和能力的复合型、创新型和跨界专业人才培养方法。
%
\item 开展以“探究成才规律 + 寻求理念创新 + 开发支撑软件”为 核心的教育方法改革,探索软件学科人才培养模型及规律、研究软件学科资源在人才培养中的应用,推进群体化学习和大规模在线开放实践 MOOP研发软件学科教育的支撑软件。
\end{enumerate}
\subsection{软件产业政策建议}
\begin{enumerate}
\item 加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施的研究,建立有针对性的知识产权保护、投融资政策环境,培育健康发展的软件产业生态。
\item 建立数据开放机制和平台,鼓励围绕大数据聚集、管理、分析和应用的大规模协作制定数据开放的相关政策,开放地理、气候、统计、环境、交通等政府数据,并建立基于互联网的大数据开放共享平台,以及开放的数据分析工具库,鼓励不同的组织和个人基于此平台开展数据聚集、管理、分析和应用的大规模协作,挖掘数据蕴含的价值,提供高附加值的数据类软件产品和服务。
\item 面向智慧城市、移动互联网应用等热点领域加大投入,支持高附加值的新型网络计算操作系统和应用支撑工具平台的技术创新和产品推广,
%针对智慧城市、移动互联网应用等当前需求迫切且应用价值高的热点领域,加大投入力度,把握互联网、移动互联网、物联网等平台深度普及所带来的发展契机,支持产学研用相结合的技术创新和成果转化,建立自主可控的新型网络计算操作系统和应用支撑工具平台,
打造针对热点应用领域的高附加值基础软件产品和服务。
\end{enumerate}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{小结}
经由七十余年的发展,计算机软件已经成为信息社会不可或缺的基础设施,支撑着国计民生,承载着现代文明。
本书旨在勾画软件科学与工程的学科体系及其发展态势,指出其所面临的挑战和未来的研究方向。如未做到,乃能力及知识所限,请读者见谅。
%无意也不能涵盖软件学科的所有方面,而科学研究的探索本质也决定了我们并不能确定地指出软件学科未来应该做什么、怎么做。本报告仅尽我们所知,力图澄清软件学科的定位、回顾其发展历程、梳理其发展规律,进而讨论其所面临的发展机遇与挑战,给出政策建议,以供参考。
%
%软件是以计算为核心手段实现应用目标的解决方案。软件学科是研究以软件求解应用问题的理论、原则、方法和技术以及相应的工具支持和生态环境的学科。也就是说软件学科本质上是一门方法论学科【cite N. Wirth】。其带来的是一种人类思维的创新以人机共融方式延伸了单纯人脑思维形成了一种前所未有的创造力。随着软件应用范围的扩张,软件的计算平台的泛化和软件方法技术的发展,软件学科的边界不断拓展,内涵不断深化。本章总论“软件作为基础设施”这一发展趋势,进而以系统观、形态观、价值观和生态观四个视角探讨软件学科的方法论新内涵。
\renewcommand{\thesection}{\arabic{chapter}.\arabic{section}}%