This commit is contained in:
wang-hpc 2020-02-05 18:41:54 +08:00
commit 15ccd8c623
26 changed files with 808 additions and 584 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

0
Ch1-1-History.tex Normal file → Executable file
View File

79
Ch1-2-ProgrammingLanguage.tex Normal file → Executable file
View File

@ -1,19 +1,19 @@
% !TEX root = main.tex
\section{引言}
软件工程师在开发软件系统时,不可避免地要用到某种程序设计语言。顾名思义,程序设计语言\index{程序设计语言}是程序员用来描述程序行为的语言。一般来说,每种程序设计语言往往具有某种应用背景、所属的语言范式以及鲜明的特征。在计算机科学领域曾出现过数百种程序设计语言。近几年TIOBE、IEEE 等给出了目前常用的程序设计语言排名居于前列的包括Java、C、Python、C++、C\#、JavaScript、PHP等。Sebesta~\cite{sebesta2012concepts}从高级语言机制的设计角度对程序设计语言进行了深入细致的介绍和比较。大多数新程序设计语言的创建都受以前语言概念的启发,而新出现的程序设计语言使程序员的工作变得更加简单。
\section{概述}
%概念的界定,怎么展开
软件工程师在开发软件系统时,不可避免地要用到某种程序设计语言。顾名思义,程序设计语言\index{程序设计语言}是程序员用来描述程序行为的语言。一般来说,每种程序设计语言往往具有某种应用背景、所属的语言范型以及鲜明的特征。程序理论作为程序设计语言的基础,不仅可以用于描述程序设计语言的语法、语义,还可以支撑程序的正确性构造。在计算机科学领域曾出现过数百种程序设计语言。近几年TIOBE、IEEE 等给出了目前常用的程序设计语言排名居于前列的包括Java、C、Python、C++、C\#、JavaScript、PHP等。Sebesta~\cite{sebesta2012concepts}从高级语言机制的设计角度对程序设计语言进行了深入细致的介绍和比较。大多数新程序设计语言的创建都受以前语言概念的启发,而新出现的程序设计语言往往通过规则的简化,使程序员的工作变得更加简单。
%程序设计语言的定义可分为语法、语义等方面。语义表示程序的含义,由静态语义和动态语义组成。静态语义指程序编译时可以确定的语法成分的含义;建立在转换/迁移系统上的动态语义则描述程序如何执行。
%
\section{程序设计语言}
在计算机发展的早期,人们往往是用二进制(0/1序列)给计算机发指令。这显然很不方便。后来,逐渐出现了汇编语言\index{汇编语言}以及各种高级语言。一般来说,提高软件开发本身的效率与质量需要更抽象更高级的程序设计语言;而提高现实计算机硬件系统的利用率和执行效率,则需要使用较低级的程序设计语言,这样程序可以更直接地控制硬件资源。较通用的程序设计语言适用于广泛的应用领域和应用场景,可吸引大量的语言使用者,积累充足的遗产代码,便于培训与推广共享资源;但高度通用的语言设计上难以兼顾开发效率与执行效率。很多针对特定应用领域的程序设计语言更容易通过合适的语言机制同时改善软件开发与执行的效率。多样化的编程接口具有程序设计语言功能,但缺乏相应的编程框架甚至程序库等。这类接口反映了相应的编程模型的特点,实质上起到了程序设计语言的作用。
程序设计语言的发展因计算机系统发展的驱动和行业应用需求发展的推动不同语言不同程度地受这些因素推动。但从程序设计语言发展历史角度看,应用需求的影响明显处于主导地位。新出现的程序设计语言通常是应对新兴应用或者新兴计算机体系结构的需要。
程序设计语言的发展因计算机系统发展的驱动和行业应用需求发展的推动不同语言不同程度地受这些因素推动。新出现的程序设计语言通常是应对新兴应用或者新兴计算机体系结构的需要。但从程序设计语言发展历史角度看,应用需求的影响明显处于主导地位。
\subsection{语言的设计、实现及生命期}
\subsubsection{设计}
一般说来,程序语言的设计应该遵守以下原则\footnote{http://people.cs.aau.dk/~bt/DAT5E07/PrgLDesign.pdf}
一般说来,程序语言的设计应该遵守以下原则\footnote{http://people.cs.aau.dk/$\sim$bt/DAT5E07/PrgLDesign.pdf}
\begin{itemize}
\item 可读性:能够很容易的理解;
\item 可写性:能够清晰、准确地表达计算意图;
@ -32,7 +32,7 @@
\subsubsection{实现}
语言的传统实现方式分为从高级语言\index{高级语言}到机器代码\index{机器代码}的静态编译与直接对高级语言程序解释执行\index{解释执行}两种方式。如果存在中间语言,在不同层次分别可能采用不同方式混合实现,如避免在运行时的编译性能消耗和内存消耗的运行前编译(Ahead of Time简称为AOT)与根据当前硬件情况实时编译生成机器指令的运行时编译\index{运行时编译}(Just-in-time简称为JIT)。编译技术仍然是语言实现的关键技术。一方面,类型检查等静态程序分析\index{静态程序分析}均在编译阶段实施;另一方面,代码生成过程中的优化技术是对程序员屏蔽硬件复杂性的主要手段。
语言的传统实现方式分为从高级语言\index{高级语言}到机器代码\index{机器代码}的静态编译与直接对高级语言程序解释执行\index{解释执行}两种方式。如果存在中间语言,在不同层次可能分别采用不同方式混合实现,如避免在运行时的编译性能消耗和内存消耗的运行前编译(Ahead of Time简称为AOT)与根据当前硬件情况实时编译生成机器指令的运行时编译\index{运行时编译}(Just-in-time简称为JIT)。编译技术仍然是语言实现的关键技术。一方面,类型检查等静态程序分析\index{静态程序分析}均在编译阶段实施;另一方面,代码生成过程中的优化技术是对程序员屏蔽硬件复杂性的主要手段。
近年来,随着计算机系统结构\index{计算机系统结构}的多样化和复杂化,程序设计语言出现了许多新的形式。例如,并行编程模型\index{并行编程模型}OpenMP使用预编译制导语句插在C或Fortran的代码中描述了多线程并行。尽管OpenMP本身不具有完整的独立语法但因为反映了与串行C语言不同的共享变量式并行编程模型我们也可以称之为新的“语言”或者至少是新的“语言机制”。
@ -42,7 +42,7 @@
\begin{figure}[htbp]
\centering
\includegraphics[width=0.80\textwidth]{fig1-2/2-1.png}
\includegraphics[width=0.95\textwidth]{fig1-2/2-1.png}
\caption{常见程序设计语言的发展脉络
\label{fig:2-1}}
\end{figure}
@ -53,10 +53,10 @@
\item 机器语言\index{机器语言}由二进制0、1代码指令构成不同的处理器具有不同的指令系统。由于机器语言难编写和维护人们已很少直接使用这种语言。
\item 汇编语言\index{汇编语言}:汇编语言指令可以直接访问系统接口。由汇编程序翻译成的机器语言程序效率高。但同样难以使用与维护。
\item 高级语言:它是面向用户的,独立于计算机种类与结构。因此易学易用,通用性强,应用广泛。图\ref{fig:2-1}给出了常见高级程序设计语言的发展脉络\footnote{https://exploring-data.com/vis/programming-languages-influence-network/},其中箭头指向的程序设计语言借鉴了前驱的设计思想。
\item 非过程化语言\index{非过程化语言}:使用这种语言编码时只需说明“做什么”,不需描述算法细节。数据库查询语言是其中的一种,用户可以对数据库中的信息进行复杂的操作。
\item 声明式语言\index{非过程化语言}:使用这种语言编码时只需说明“做什么”,不需描述算法细节。数据库查询语言是其中的一种,用户可以对数据库中的信息进行复杂的操作。
\end{enumerate}
在程序设计语言发展最初阶段,程序设计语言按照主要编程范\index{编程范式},可以被归类为过程式、面向对象、函数式~\cite{hu2015functional}等。随着C++、C\#等语言的出现,传统分类之间的界限逐渐变得模糊。现代的编程语言往往具有若干种类编程语言的元素,这就是所谓的多范式编程语言。而多范式程序设计语言\index{多范式程序设计语言}也是一个越来越明显的趋势。
在程序设计语言发展最初阶段,程序设计语言按照主要编程范\index{编程范型},可以被归类为过程式、面向对象、函数式~\cite{hu2015functional}等。随着C++、C\#等语言的出现,传统分类之间的界限逐渐变得模糊。现代的编程语言往往具有若干种类编程语言的元素,这就是所谓的多范型编程语言。而多范型程序设计语言\index{多范型程序设计语言}也是一个越来越明显的趋势。
一个成功的程序设计语言从探索到推广、接受和最终成为行业标准往往经历以下四个阶段:第一阶段,新兴应用与系统的软件开发在早期开发过程只能采用已有的程序设计语言配以一定的软件工程方法;第二阶段,为提高软件生产率,多种语言工具开始出现;第三阶段,行业标准的形成有助于积累遗产代码资源和培训与推广资源;第四阶段,随着大量遗产代码开始积累,行业商业模式成型,倾向于使用成熟的程序设计语言。分析程序设计语言所处的发展阶段有助于我们了解甚至预测其发展规律。
@ -64,25 +64,26 @@
\begin{figure}[htbp]
\centering
\includegraphics[width=0.80\textwidth]{fig1-2/2-2.png}
\includegraphics[width=0.99\textwidth]{fig1-2/2-2.png}
\caption{程序设计语言的发展及分类}
\label{fig:2-2}
\end{figure}
这里以多个有代表性的语言为例,分析其应用背景、设计特点与发展规律,从而展现程序设计语言发展的历史与现状。按照程序设计语言的类型与应用,图\ref{fig:2-2}给出了以时间为主线的不同类别语言的发展过程与分类关系。从不同角度来看,一种程序设计语言既可能属于系统编程语言,又是面向对象语言。从发展过程来看,一种语言在发展过程中会不断进行扩充,融入不同的范式,进而趋近于多范式语言。本节主要以应用驱动来组织。计算机产业的发展往往是新的产业应用从已有的应用模式中成长出来而不是取而代之。新语言的出现往往标志着信息技术在新的应用领域的扩张。
%这里以多个有代表性的语言为例,分析其应用背景、设计特点与发展规律,从而展现程序设计语言发展的历史与现状。
按照程序设计语言的类型与应用,图\ref{fig:2-2}给出了以时间为主线的不同类别语言的发展过程与分类关系。从不同角度来看,一种程序设计语言既可能属于系统编程语言,又是面向对象语言。从发展过程来看,一种语言在发展过程中会不断进行扩充,融入不同的范型,进而趋近于多范型语言。计算机产业的发展往往是新的产业应用从已有的应用模式中成长出来而不是取而代之。新语言的出现往往标志着信息技术在新的应用领域的扩张。本节主要以应用驱动来组织。
\begin{itemize}
\item 科学与工程计算
\item 科学与工程计算(1954$\sim$)
\end{itemize}
早期计算机系统硬件结构简单软件专用性强主要用于核反应计算、密码破译这样专业性强的科学与工程计算领域直接服务对象往往是政府与军工。由John Backus主导实现的Fortran语言标志着具有完整工具链的程序设计语言出现。Fortran语言符合典型的过程式语言的特征由从事系统结构和系统软件的研究人员设计采取编译的方式实现反映了程序设计与计算机系统之间的紧密联系。尽管串行的科学计算软件开发方法已成熟积累的大量遗产代码保证了Fortran这样的语言在其适用领域仍然具有生命力。
早期语言的准确语义往往依赖于编译器的实现,针对特定体系结构由编译器的开发者设计。1950年代末期出现了一些由计算机逻辑理论与程序语义研究者设计和实现的程序设计语言如ALGOL和LISP语言。此后出现的大量函数式语言如Haskell、ML往往具有清楚而简洁的数学表示,设计出发点上更多地考虑如何优美地表示计算,但由于缺乏工业级应用的针对性以及性能上对常见体系结构的适配性,其接受范围受到限制。
早期语言的准确语义往往依赖于编译器的实现,针对特定体系结构由编译器的开发者设计。上世纪五十年代末期出现了一些由计算机逻辑理论与程序语义研究者设计和实现的程序设计语言如ALGOL和LISP语言。上世纪七十年代后出现的大量函数式语言如ML、Haskell往往具有清楚而简洁的数学表示,设计出发点上更多地考虑如何优美地表示计算,但由于缺乏工业级应用的针对性以及性能上对常见体系结构的适配性,其接受范围受到限制。
科学与工程性质的计算尤其是高性能计算往往与计算机体系结构密切相关发展了多种形式的编程接口。OpenMP是共享内存的并行计算所常用的编程接口。其特点是在C或Fortran中插入指导语句希望不改变原有串行程序语义的条件下利用共享存储器的多线程并行加速计算。MPI是跨平台的消息传递通讯程序库完全不增加额外的语法机制。图形处理器语言CUDA在C基础上扩展了一些语法机制用以区分在CPU、GPU上运行的程序片段作出不同的编译。并行程序设计模型一直是程序设计理论研究的一个重点 。
\begin{itemize}
\item 商用计算
\item 商用计算(1960$\sim$)
\end{itemize}
信息技术的应用逐渐从专业领域扩展到广阔的商业领域信息化。COBOL语言的出现标志着商业化的事务处理如金融、财会有了强有力的语言技术支持。该时期计算系统往往是大型机或小型机服务器。COBOL拥有庞大的用户群据称积累了超过2000亿行遗产代码\footnote{http://cobolcowboys.com/cobol-today/}。由于商业计算的多样性一台大型机往往需要运行多种类型的软件甚至同时并发地运行不同软件。这一时期开始管理不同类型软件的操作系统得以发展。C语言可以直接处理系统资源尤其适合系统软件开发。相比之下同样是过程式语言\index{过程式语言}的PASCAL语言则是由程序设计语言理论研究者设计的更加安全和规范的语言。数据库查询语言\index{数据库查询语言}SQL是较早出现的领域专用语言。它不具有完整的程序设计语言功能但可看成是针对关系数据库\index{关系数据库}应用的编程模型。
@ -90,25 +91,25 @@
随着商用计算而来的是软件大规模化。1960年代末出现了一系列旨在有效控制大规模软件开发过程复杂性的程序设计思想。面向对象的思想及其第一个语言Simula 67试图对不同程序模块访问共享变量的方式进行限制使得程序更加具有模块组装特性。Edsger W. Dijkstra提出避免使用GOTO语句的结构化程序设计\index{结构化程序设计}思想~\cite{dijkstra1968go},对程序的控制流进行限制。
\begin{itemize}
\item 人工智能
\item 人工智能(1960$\sim$)
\end{itemize}
\index{人工智能}自诞生以来,广受关注。在该领域也出现了若干专用语言。人工智能有符号主义、连接主义等流派。
人工智能\index{人工智能}自诞生以来,广受关注。在该领域也出现了若干专用语言。例如基于λ演算的函数式编程语言LISP具有对符号表达式的支持、交互式环境和可扩展性等特性曾大量用于人工智能系统的开发。人工智能有符号主义、连接主义等流派。
符号主义就是以符号逻辑系统\index{符号逻辑系统}为基础来表示知识。二十世纪七十年代Robert Kowalski 等人提出了逻辑可以作为程序设计语言的基本思想,把逻辑和计算这两个截然不同的概念统一在一起。这就是逻辑程序设计(Logic Programming)而Prolog语言就是典型的逻辑程序设计语言。对经典的逻辑程序设计语言可以进行各种扩充。例如将状态转移的控制机制引入到时序逻辑系统的XYZ/E是世界上第一个可执行的时序逻辑程序设计语言~\cite{Tang2002}
连接主义的代表是试图模拟人脑的人工神经网络。近十年来深度学习显示出了强大的学习能力和广泛的应用前景。TensorFlow、PyTorch等工具针对深度神经网络学习算法的特点利用高级语言展开生成神经网络结构然后以高性能方式运行学习算法。这些多样的领域特定语言工具不具备完整的通用程序设计语言功能但十分适合特定的应用场景。
\begin{itemize}
\item 个人计算与系统编程
\item 个人计算与系统编程(1981$\sim$)
\end{itemize}
在摩尔定律背景下计算机硬件系统的价格不断下降个人使用计算机的情形越来越普遍。随个人计算而来的是软件的多样化应用形式从事务处理和业务处理扩展到教育与娱乐。软件的开发与销售形式从硬件捆绑式发展到专业软件企业发行软件拷贝的销售形式。软件开发团队与人员的数目大量增加。C 语言是一种通用的、面向过程式的计算机程序设计语言。计算机系统设计以及应用程序编写是C语言应用的主要领域。 C++是C语言的面向对象扩展又增加了泛型编程机制更适合大中型程序的开发。
作为一种新的多范语言Rust不仅能够提供友好的编译器和清晰的错误提示信息而且速度快、内存利用率高同时具有丰富的类型系统保证内存安全和线程安全。目前从初创公司到大型企业已有很多公司都在使用 Rust应用非常广泛。
作为一种新的多范语言Rust不仅能够提供友好的编译器和清晰的错误提示信息而且速度快、内存利用率高同时具有丰富的类型系统保证内存安全和线程安全。目前从初创公司到大型企业已有很多公司都在使用 Rust应用非常广泛。
\begin{itemize}
\item Web服务与移动计算
\item Web服务与移动计算(1990$\sim$)
\end{itemize}
伴随互联网的出现Web服务软件一改拷贝销售形式直接通过互联网向终端用户提供服务。其服务形式多样方式多变。服务的反应速度往往受限于互联网的带宽与延迟而不是计算的速度。因此客户端与服务器端交互程序设计语言重点关注软件的开发效率而不是程序的性能。典型的支持此类应用的脚本语言有JavaScript、PHP等。
@ -116,7 +117,7 @@
1990年代后智能手机的出现与普及将计算拓展到个人随身携带的新模式。一些为Web服务设计的语言仍然适用但新的应用形式也带来了新的挑战。许多项目需要同时以网页、平板以及智能手机形式提供服务。由于应用需求与服务逻辑的易变性软件的任何更新希望在不同平台上一致地更新。它们不仅需要支持复杂的功能还需要解决跨平台、跨设备、跨操作系统兼容可移植的难题。
\begin{itemize}
\item 大数据分析与处理
\item 大数据分析与处理(2004$\sim$)
\end{itemize}
平台系统的大规模数据分析与处理需求,首先来自于互联网的搜索服务。其特点是大量采集的数据需要多台服务器的集群通过并行计算高速处理。分布式并行计算带来了性能优化与可靠性的挑战。但是,在平台建设期无法预知随时可能出现的各种数据分析需求。应用开发人员需要随时针对应用需求快速、灵活地编程,而不必为系统级的性能与可靠性问题所困扰。
@ -128,25 +129,28 @@
%基本的Map与Reduce命令还不能涵盖一般的并行计算步骤的数据依赖关系。
\begin{itemize}
\item 互联网金融
\item 互联网金融(2009$\sim$)
\end{itemize}
以软件为核心的互联网金融指的是以互联网为载体的金融服务形式而并非仅仅将互联网作为连接客户的信息系统。开源软件技术主导的金融服务形式始于2009年出现的第一个数字货币--比特币。数字货币以去中心化共识的区块链记账技术为基础,提供类似法定货币的金融功能,具有特殊的金融服务属性。以太坊数字货币扩展了记账技术,支持区块链中记录完整的程序并以可验证的方式执行这样的程序:合同即是程序,程序即是合同。这就是所谓的智能合约(Smart Contract)。Solidity是目前最流行的合约编程语言。Solidity语法类似于JavaScript支持继承、类和复杂的用户定义类型通过编译的方式生成以太坊虚拟机中的代码。
\vspace{10pt}
\noindent{\bf{展望}}
在计算机发展的不同阶段为了应对一些典型应用各种不同的程序设计语言应运而生。现阶段多范式、函数式程序设计语言逐渐成为主流如Java、C++及新出现的程序设计语言第二虽然如JavaScript、Python等语言强调动态类型安全编译器能够对查询执行语法正确性检查新出现的语言重新强调静态类型安全不使用编译器不能保证安全的语言功能第三新出现的语言语法更加简洁并更加重视语言的可扩充性同时轻量级并发程序设计变得越来越普及。
\section{程序理论}
程序设计语言都具有语法和语义。语义表示程序的含义。程序理论涵盖程序设计语言的设计、实现,以及程序正确性的分析方法等。本节将介绍程序设计语言的语法与语义基础,并给出描述程序设计规范的形式化方法。其中,形式语言是用数学方法研究程序设计语言的语法,研究语言的组成规则。类型理论\index{类型理论}可以帮助完善程序设计本身,帮助运行系统检查程序中的语义错误。形式语义\index{形式语义}\index{程序设计理论}的组成部分,以数学为工具,利用符号和公式,精确地定义和解释计算机程序设计语言的语义。而形式规约\index{形式规约}将事物的状态和行为用数学符号形式化描述,为编写计算机程序和验证程序的正确性提供依据。
程序设计语言都具有语法和语义。语义表示程序的含义。程序理论涵盖程序设计语言的设计、实现,以及程序正确性的分析方法等。本节将介绍程序设计语言的语法与语义基础,并给出描述程序设计规范的形式化方法,如图\ref{fig:1-2-4}所示。其中,形式语言是用数学方法研究程序设计语言的语法,研究语言的组成规则。类型理论\index{类型理论}可以帮助完善程序设计本身,帮助运行系统检查程序中的语义错误。形式语义\index{形式语义}是程序设计理论\index{程序设计理论}的组成部分,以数学为工具,利用符号和公式,精确地定义和解释计算机程序设计语言的语义。而形式规约\index{形式规约}将事物的状态和行为用数学符号形式化描述,为编写计算机程序和验证程序的正确性提供依据。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.99\textwidth]{fig1-2/2-4.png}
\caption{程序设计语言的发展及分类}
\label{fig:1-2-4}
\end{figure}
\subsection{程序设计语言的词法与语法}
程序设计语言都有自己的词法和语法,而词法和语法的定义是一系列规则的集合,这些规则的基础就是形式语言。文法\index{文法}是形式语言中十分重要的基本概念,是描述语言的语法结构的一组形式规则。文法有四种分类,其中最常用的为正则语言\index{正则语言}和上下文无关语言\index{上下文无关语言}。正则语言可以用正规式定义,上下文无关语言可以用上下文无关文法(元素和规则的集合)定义。程序设计语言中的大多数算术表达式可用上下文无关文法\index{上下文无关文法}生成。正则语言是最简单的语言类,是上下文无关语言类的一个真子类。对程序设计语言编写的程序进行分析和处理(编译)时,需要判断对应的句子是否合法,可以通过对应语言的自动机进行判断。自动机是语言的另一种表示方法。其中,正则语言可以转换成有限状态自动机\index{有限状态自动机}、上下文无关语言可转换成下推自动机\index{下推自动机}表示,反之亦然。针对某种特定输入的一系列有限的规则,对不同的输入的元素,自动机依据自身的状态会做出不同的响应,最后达到某种特定的状态。
程序设计语言都有自己的词法和语法,而词法和语法的定义是一系列规则的集合,这些规则的基础就是形式语言。文法\index{文法}是形式语言中十分重要的基本概念,是描述语言的语法结构的一组形式规则。文法有四种分类,其中最常用的为正则语言\index{正则语言}和上下文无关语言\index{上下文无关语言}。正则语言可以用正规式定义,上下文无关语言可以用上下文无关文法(元素和规则的集合)定义。程序设计语言中的大多数算术表达式可用上下文无关文法\index{上下文无关文法}生成。正则语言是最简单的语言类,是上下文无关语言类的一个真子类。对程序设计语言编写的程序进行分析和处理(编译)时,需要判断对应的句子是否合法,可以通过对应语言的自动机进行判断。自动机是语言的另一种表示方法。其中,正则语言可以转换成有限状态自动机\index{有限状态自动机}、上下文无关语言可转换成下推自动机\index{下推自动机}表示,反之亦然。针对某种特定输入的一系列有限的规则,对不同的输入元素,自动机依据自身的状态会做出不同的响应,最后达到某种特定的状态。
\subsection{程序设计语言的类型系统}
在很多程序设计语言中,变量与数据是带类型的;而类型之间有一定的关联。人们在研究程序设计语言理论时,可以借鉴类型论\index{类型论}(Type theory, 也称“类型理论”)来研究程序设计语言的类型系统\index{类型系统}。类型论是数理逻辑中的一个分支,其中的马丁洛夫类型理论用规则来刻画类型及行为,是程序构造的形式理论。类型理论\index{类型理论}研究的是程序设计语言的类型系统,用于定义如何将编程语言中的数值和表达式等短语归类为许多不同的类型,如何操作这些类型,这些类型如何互相作用。类型通过预测程序部件的某些执行行为来协调这些部件间的交互。在类型化的程序设计语言中,语言构造分为引入和消去两种形式。类型的引入形式确定该类型的值或范式,而消去形式则确定如何操作该类型的值以形成另一种(可能是相同的)类型的计算。例如,可以使用类型系统中的归纳类型定义如自然数、表、树等数据结构\index{数据结构};使用多态类型处理程序的特定型与参数型这些不同的输入类型;使用记录类型定义一组记录的命名类型等;自然数类型的引入形式是自然数,消去形式是加法和乘法等。
在很多程序设计语言中,变量与数据是带类型的;而类型之间有一定的关联。人们在研究程序设计语言理论时,可以借鉴类型论\index{类型论}(Type theory, 也称“类型理论”)来研究程序设计语言的类型系统\index{类型系统}。类型论是数理逻辑中的一个分支,其中的马丁洛夫类型理论用规则来刻画类型及行为,是程序构造的形式理论。类型理论\index{类型理论}研究的是程序设计语言的类型系统,用于定义如何将编程语言中的数值和表达式等短语归类为许多不同的类型,如何操作这些类型,这些类型如何互相作用。类型通过预测程序部件的某些执行行为来协调这些部件间的交互。在类型化的程序设计语言中,语言构造分为引入和消去两种形式。类型的引入形式确定该类型的值或范,而消去形式则确定如何操作该类型的值以形成另一种(可能是相同的)类型的计算。例如,可以使用类型系统中的归纳类型定义如自然数、表、树等数据结构\index{数据结构};使用多态类型处理程序的特定型与参数型这些不同的输入类型;使用记录类型定义一组记录的命名类型等;自然数类型的引入形式是自然数,消去形式是加法和乘法等。
\subsection{程序的语义}
给定一个程序,如何判断它是否正确?这是很早以前人们就关注的问题。简单来说,如果一个程序恰当地实现了设计者与用户的意图,它就是正确的。严格意义上,程序的正确性~\cite{turing1989checking}需要数学证明,不仅需要形式描述设计者与用户的意图,而且要形式描述程序的含义,并推导程序的行为满足设计者与用户的意图。程序含义的形式化描述就是形式语义学。基于形式语义,不仅可以构建描述程序含义的基础,还可以用于验证程序的正确性。
@ -186,7 +190,7 @@
%若条件语句if(y==1) then x=1; else x=2; 的前置断言为\{y==1\},则该语句执行后,后置断言为\{x==1\}
在该形式系统中可以直接进行程序性质的规约和验证。程序逻辑的表达能力、可靠性、完备性以及可判定性都可归结为数理逻辑上的元性质,程序逻辑的解释模型通常就是程序设计语言的指称语义或操作语义。
常见的公理语义有基于一阶逻辑\index{一阶逻辑}扩展的Floyd-Hoare 逻辑\index{Floyd-Hoare 逻辑}~\cite{Hoare1969}、谓词转换器(Predicate Transformer)等。其中,
Floyd-Hoare 逻辑最初是面向串行程序\index{串行程序}的,并扩展至并发程序、实时系统\index{实时系统}、混成系统甚至量子系统\index{量子系统}等。针对指针程序\index{指针程序}和面向对象程序产生了分离逻辑及其变种从而把Floyd-Hoare 逻辑的应用推进到实际的程序验证\index{程序验证}。公理语义在形式验证中应用比较多
Floyd-Hoare 逻辑最初是面向串行程序\index{串行程序}的,并扩展至并发程序、实时系统\index{实时系统}、混成系统甚至量子系统\index{量子系统}等。针对指针程序\index{指针程序}和面向对象程序产生了分离逻辑及其变种从而把Floyd-Hoare 逻辑的应用推进到实际的程序验证\index{程序验证}。公理语义在形式验证中应用比较多。
\begin{itemize}
\item 代数语义
@ -204,7 +208,7 @@ Floyd-Hoare 逻辑最初是面向串行程序\index{串行程序}的,并扩展
\subsection{程序的规}
\subsection{程序的规}
%基于程序逻辑系统的性质规约刻画了所期望的系统行为,这些性质是通过逻辑公式来描述的。
直接使用程序设计语言及其语义,难以描述和证明软件从需求文档到程序代码的开发过程各阶段创建的不同抽象层次的制品及其正确性。针对这一问题,人们开始研究高层抽象的形式规约语言的设计。形式规约语言\index{形式规约语言}是指由严格的递归语法规则所定义的语言,满足语法规则的句子称为合式或良构(Well-formed)规约。
@ -219,7 +223,8 @@ Floyd-Hoare逻辑中程序与断言是分离的而且也无法表达活性
%形式规约可以自顶向下逐步精化形成软件开发的规约序列在足够的实现细节完成后可以通过代码自动生成得到程序。以形式规约语言为基础的形式化开发方法有VDM、Z、Event-B、RAISE、CafeOBJ、TLA、SOFL等。
%20世纪七十年代后
\vspace{5pt}
%\vspace{5pt}
\subsection{程序设计理论框架}
不同的形式语义有各自特点与适用范围。学者们试图在这些语义的基础上构建一个统一的理论。
%软件工程界认识到数学可以为程序正确性保证提供技术基础。
相应的出现了一些程序设计理论框架。例如八十年代初唐稚松提出以时序逻辑作为软件开发过程的统一基础并着手建立XYZ系统\index{XYZ系统}~\cite{Tang2002}。Joseph A. Goguen 和Rod M. Burstall提出了一种抽象模型理论以实现不同形式逻辑基础上的各种形式化方法的理论统一、技术和工具的集成与使用~\cite{Goguen92}。 C.A.R. Hoare和何积丰提出了统一程序设计理论框架UTP提供了在一种程序(如串行程序)语义模型理论基础上构建扩展程序(如并发)的语义理论,从而保证原来的理论在扩展的理论中能够重用~\cite{hoare1998unifying}
@ -259,7 +264,7 @@ Floyd-Hoare逻辑中程序与断言是分离的而且也无法表达活性
\end{itemize}
%由Edmund M. Clarke、E. Allen Emerson和Joseph Sifakis提出的
模型检验\index{模型检验}方法通过自动遍历系统模型的有穷状态空间,来检验系统的语义模型与其性质规约之间的满足关系。软件系统属于无穷状态系统,即使状态有穷,其状态空间规模通常远超当前计算机可处理的范围。在硬件系统模型检验取得巨大成功的时候,软件模型检验所面临严峻的挑战。对于无穷状态系统,符号化可达性分析可能不终止。软件模型检验的核心问题是如何建立可检验规模的软件模型(抽象)。一种方法是采用上近似(Over-approximation或下近似(Under-approximation)对模型进行抽象,另一种方法是使用限界模型检验,将模型空间爆炸涉及的参数(例如循环次数、并发数等)限制在一定范围内,验证系统模型在此深度内是否满足系统规约。在软件模型检验中,利用静态分析、符号执行\index{符号执行}等方法抽取程序模型,以及基于路径的模型检验等静态和动态结合的方法,也是有效提高模型检验扩展性的重要途径。近年来,将模型检验与定理证明有效地结合也是一个有前景的研究方向。
模型检验\index{模型检验}方法通过自动遍历系统模型的有穷状态空间,来检验系统的语义模型与其性质规约之间的满足关系。软件系统属于无穷状态系统,即使状态有穷,其状态空间规模通常远超当前计算机可处理的范围。在硬件系统模型检验取得巨大成功的时候,软件模型检验所面临严峻的挑战。对于无穷状态系统,符号化可达性分析可能不终止。软件模型检验的核心问题是如何建立可检验规模的软件模型(抽象)。一种方法是采用上近似(Over-approximation或下近似(Under-approximation)对模型进行抽象,另一种方法是使用限界模型检验,将模型空间爆炸涉及的参数(例如循环次数、并发数等)限制在一定范围内,验证系统模型在此深度内是否满足系统规约。在软件模型检验中,利用静态分析、符号执行\index{符号执行}等方法抽取程序模型,以及基于路径的模型检验等静态和动态结合的方法,也是有效提高模型检验扩展性的重要途径。%近年来,将模型检验与定理证明有效地结合也是一个有前景的研究方向。
\subsection{程序的自动综合}
按照某种形式规约表达的用户意图,程序综合\index{程序综合}能够使用指定的编程语言自动生成符合规约的程序代码。程序综成器通常在程序空间上执行某种形式的搜索,以生成与各种类型一致的程序约束(例如输入输出示例,演示,自然语言,部分程序和断言)。程序综合是编程理论中最核心的问题之一~\cite{pnueli1989synthesis}。早期的想法是通过组合子问题生成带有证明的、可解释的实现。一个分支是使用定理证明器首先证明用户提供的规约,再使用这个证明提取相应的程序逻辑。而另一个较为流行的方法是从一个高层规约开始,不断的进行转换,直到实现目标程序。近期的程序综合方法中,用户提供规约的同时,还可以提供目标程序的语法。这样使得基于语法结构进行的综合过程更加高效,得到的程序的可解释性更高。
@ -267,9 +272,11 @@ Floyd-Hoare逻辑中程序与断言是分离的而且也无法表达活性
\subsection{程序的精化}
程序精化\index{程序精化}是将抽象高级形式规范可验证地转换为具体低级可执行程序的过程是通过逐步细化分阶段完成。精化Refinement是一种数学表示法和若干规则的集合它对Dijkstra的卫式命令语言进行扩充通过结合规约语句、精化规则和语言本身从程序规约推导出命令式程序。程序精化(程序规约转换成可执行代码)可分为数据精化和算法精化两种,形式化将程序逐步转换为更加便于实现的形式:数据精化把抽象的数据结构转换为可以高效实现的形式;算法精化将程序逐步转换为更加便于实现的代码形式。
\section{结束语}
开发软件,离不开程序设计语言。本章简要介绍了程序设计语言的发展历史与现状,着重介绍了若干典型的程序设计语言。
本章还介绍了基本的程序理论,特别是几类形式语义。它们有助于清晰地表达程序的含义,保障程序的正确性。 正是由于在程序设计语言和相关理论领域的先驱工作目前已经有20位左右的研究人员获得了“计算机界的诺贝尔奖”--图灵奖。
\section{本章小结}
开发软件,离不开程序设计语言。
在计算机发展的不同阶段,为了应对一些典型应用,各种不同的程序设计语言应运而生。
第一现阶段多范型、函数式程序设计语言逐渐成为主流如Java、C++及新出现的程序设计语言第二虽然如JavaScript、Python等语言强调动态类型安全编译器能够对查询执行语法正确性检查新出现的语言重新强调静态类型安全不使用编译器不能保证安全的语言功能第三新出现的语言语法更加简洁并更加重视语言的可扩充性同时轻量级并发程序设计变得越来越普及。同时为了适应软件的新形态程序理论也取得了长足的进步。首先随着新领域的涌现出现了新的计算模型与语义例如描述量子程序设计的理论模型其次程序规约的形式随着需求的发展日益复杂再次待验证程序的类型表现出多元化特征从简单的串行程序到并发、分布式最后可验证程序规模日益增加从简单的驱动程序到编译器甚至是操作系统层次。
正是由于在程序设计语言和相关理论领域的先驱工作目前已经有23位研究人员获得了图灵奖。
%\section{参考文献}
%

View File

@ -1,7 +1,7 @@
% !TEX root = main.tex
\section{系统软件内涵与知识体系}
\section{概述}
系统软件\index{系统软件}是驱动下层计算资源有效运转、为上层应用提供共性支撑的软件,主要包括操作系统、编译系统、中间件和数据库管理系统。其中,操作系统\index{操作系统}负责管理计算系统软硬件资源、操纵程序运行,为应用软件提供公用支撑;编译系统(又称编译器)负责将源语言编写的源程序翻译为等价的可运行目标程序;中间件将系统软件的概念扩展到网络环境,为分布式应用软件部署、运行和管理提供支撑;数据库管理系统旨在统一管理和维护数据库中的数据,是组织、存储、存取、控制和维护数据的软件。
与面向特定领域、解决特定问题的应用软件不同,系统软件是运行于计算“系统”层面上的软件。此处的“系统”有两层含义:
@ -11,7 +11,7 @@
\item 系统软件是驱动计算系统有效运转的控制器/协调者。系统软件一方面与计算系统中各类硬件资源直接交互管理、调度和使用这些资源使得之可以高效协同另一方面系统软件也直接操纵管控上层应用的运行从而达到提高程序装载和调度的自动化程度、提高资源利用率等目标。例如操作系统可以通过批处理、分时共享等方法来实现计算系统作业任务切换因此早期也被称为“监督程序”Supervisory Program或“控制程序”\cite{bullynck2018operating}
\end{itemize}
系统软件并不是与计算机一起诞生的它的出现有内因和外因两个方面。早期的计算机如ENIAC编程采用接线和开关等手工操作方式并没有系统软件的概念。即使在存储程序计算机出现之后系统软件也并未马上出现,应用直接在裸机上运行。但是,将应用与硬件祼机直接绑定,无论是编程难度、应用管理/切换效率还是底层资源利用率都十分低下。特别是早期CPU速度和I/O速度之间的巨大差异基于时分复用的“虚拟化”成为客观需求推动了系统软件、尤其是操作系统的快速发展。系统软件出现的外因则是软件复杂性增长所导致的分工细化特别是上个世纪50-60年代面向底层硬件资源的系统程序设计System Programming和面向领域的应用程序设计Application Programming的分化以及系统程序员和应用程序员的分工直接推动了系统软件这一概念的广泛接受。
系统软件并不是与计算机一起诞生的它的出现有内因和外因两个方面。早期的计算机如ENIAC编程采用接线和开关等手工操作方式并没有系统软件的概念。即使在存储程序计算机出现之后除了汇编器等带有系统软件思想的工具外,操作系统等主流系统软件并未马上出现,应用仍是直接在裸机上运行。但是,人们很快认识到,将应用与硬件祼机直接绑定,无论是编程效率、应用管理/切换效率还是底层资源利用率都十分低下。特别是早期CPU速度和I/O速度之间的巨大差异基于时分复用的“虚拟化”成为客观需求推动了系统软件、尤其是操作系统的快速发展。系统软件出现的外因则是软件复杂性增长所导致的分工细化特别是上个世纪50-60年代面向底层硬件资源的系统程序设计System Programming和面向领域的应用程序设计Application Programming的分化以及系统程序员和应用程序员的分工直接推动了系统软件这一概念的广泛接受。
\section{操作系统}
从功能定位的角度而言,操作系统\index{操作系统}是负责管理硬件资源、控制程序运行、改善人机界面和为应用提供支持的系统软件,是计算机软件生态链的基础核心。在一个计算系统中,操作系统向下是最靠近硬件的一层软件,它通过调用硬件驱动程序、固件等方式实现对硬件的管理;向上屏蔽硬件细节,为应用软件提供功能更为完善、灵活可编程的“虚拟机”,并通过事件循环等实现对各类应用软件的运行管理。因此,操作系统兼具“承上启下”和“管家”两类作用。由于操作系统的特殊地位,其发展与上层应用需求和底层硬件形态的演化都有着密切联系。从最初与硬件和应用场景高度绑定,到之后逐渐独立于硬件,操作系统向上提供的服务越来越多、向下针对硬件的抽象程度越来越高,其内涵和外延不断拓宽,并在积累一段时间后产生质变,呈现出主机计算、个人计算、互联网和移动计算等明显阶段性特点(图\ref{fig:3-1})。
@ -23,14 +23,14 @@
\label{fig:3-1}}
\end{figure}
\subsection{操作系统的出现20世纪50年代}
\subsection{单道批处理操作系统}
早期的存储程序计算机并没有操作系统需由用户或专门操作人员Operator管理计算任务包括装入打孔卡片或纸带、通过包含开关和指示灯的控制面板来了解状态、在出错时进行必要干预等。这一方式可以满足早期少量科学计算的需要。但是随着计算机应用领域从传统科学计算领域向国防、政府、商业等通用领域拓展计算任务及相关的数据量迅速增长手工管理成为了制约计算机利用效率的瓶颈问题。用软件来代替操作人员实现计算任务自动管理包括载入和执行这是操作系统最早出现的动因之一并直接催生了第一代的批处理操作系统\index{批处理操作系统}。由于其强调替代人进行监管,这一时期的操作系统雏形多被冠以“控制程序/例程”Control Program/Routine、“管程”Monitor、“监督例程”Supervisory Routine等名称。典型实例是通用汽车与北美航空于1956年基于IBM 704所开发的GM-NAA IO系统\cite{patrick1987general}其核心的管程可以从磁带上自动顺序读入和批量执行应用程序。该系统通常被认为是第一个成熟的商用操作系统在20世纪50年代末被移植到多个巨型机上。
操作系统出现的另一个背景是20世纪 50年代计算机技术的革新特别是磁芯内存、磁带等大容量高速存储技术的应用以及从早期打孔卡片发展而来的“文件”等抽象的出现使得专业化的大型软件成为可能软件开发作为一个独立行业开始从硬件设计制造中分离出来。人们针对“如何提高软件开发的效率”这一问题进行初步探索催生了Fortran等高级语言的出现也在这一过程中积累了大量工具、编译器、可重用例程和库等。由于软件开发与运行密切相关因此在这一时期许多操作系统与编程系统并未严格区分典型实例包括MIT的CSSRComprehensive System of Service Routines\cite{Bennington:1956:LLU:1455410.1455416}、ERA 1103UNIVAC 1103A计算机所配备的“集成计算系统”\cite{Bauer:1956:ICS:320831.320836}等。这类系统通常具备运行时批处理功能但更强调对开发的支持其核心是一系列可重用库和辅助工具Utility Tool。这也是今天操作系统“沉淀共性问题解决方案”能力的来源。
虽然第一代操作系统以批处理模式为主但由于指挥控制、工业自动化等领域对计算机的迫切需求早期人们即在实时或者至少能够在线处理的操作系统方面开展了实践。典型案例是上个世纪50年代美国军方半自动地面防空系统Semi Automatic Ground EnvironmentSAGE项目这一系统通过多个主机实现了雷达数据的实时汇聚、处理和态势生成其操作系统能够实现计算和I/O操作过程的交叠在部份文献中被认为是首个实时操作系统\index{实时操作系统}
虽然第一代操作系统以批处理模式为主但由于指挥控制、工业自动化等领域对计算机的迫切需求早期人们即在实时或者至少能够在线处理的操作系统方面开展了实践。典型案例是上个世纪50年代美国军方半自动地面防空系统Semi Automatic Ground EnvironmentSAGE项目\footnote{https://en.wikipedia.org/wiki/Semi-Automatic\_Ground\_Environment}这一系统通过多个主机实现了雷达数据的实时汇聚、处理和态势生成其操作系统能够实现计算和I/O操作过程的交叠在部份文献中被认为是首个实时操作系统\index{实时操作系统}
\subsection{主机计算时代的操作系统50年代-70年代}
\subsection{多道和分时主机操作系统}
在大型主机时代,操作系统的发展主要围绕提高计算资源的利用率和提高操作系统的抽象能力两条主线展开:
\begin{enumerate}[(1)]
@ -53,7 +53,7 @@
\end{enumerate}
\subsection{计算机普及时代的操作系统70年代-21世纪初}
\subsection{个人/嵌入式操作系统}
20世纪70年代集成电路技术的高速发展推动了微处理器的出现使得计算技术由“旧时王谢堂前燕飞入寻常百姓家”具体表现为一方面个人计算机迅速普及产品和技术快速发展使得能“兼容”多种软硬件的操作系统成为主流而且用户的非专业化使得图形用户界面成为主流操作系统的内嵌能力另一方面由于工业控制、航空航天、武器装备等领域微处理器的应用嵌入和实时操作系统作为操作系统的一个分支开始登上历史舞台。此外这一时期的开源操作系统对本领域后续发展产生了深远影响。
\begin{enumerate}[(1)]
@ -61,37 +61,22 @@
70年代中期Intel发布8080 CPU以后Digital Research发布了最早的微型计算机操作系统CP/M-80它由基本输入输出系统Basic Input/Output SystemBIOS、基本磁盘操作系统和控制台命令处理程序组成。其中基本输入输出系统的引入实现了操作系统其它模块与低层具体硬件的解耦显著提高了操作系统的适用性和上层应用的可移植性。这种操作系统与具体硬件解耦的思想拓展了System/360大型机时代所提出的“兼容”概念被后来的微软MS-DOSMicrosoft Disk Operating System等操作系统所延续直接为个人计算机软硬件生态链的快速发展奠定了基础。
在个人计算时代操作系统的另一个重要进展是图形用户界面的加入。早在1973年Xerox即推出了支持可视化操作的Alto计算机并于1981年发布了集成完整图形化桌面的操作系统Xerox 8010 Star1984年Apple发布了具有图形用户界面的个人计算机Lisa1985年微软公司发布了Windows系列操作系统。图形用户界面的发展极大地促进了个人计算机的普及由于个人计算机面对的不是专业用户易用性成为了操作系统的瓶颈问题因此基于窗口和鼠标的直观操作取代了繁琐晦涩的命令行界面。
在个人计算时代操作系统的另一个重要进展是图形用户界面的加入。早在1973年Xerox即推出了支持可视化操作的Alto计算机并于1981年发布了集成完整图形化桌面的操作系统Xerox 8010 Star1984年Apple发布了具有图形用户界面的个人计算机Lisa1985年微软公司发布了Windows系列操作系统。图形用户界面的发展极大地促进了个人计算机的普及由于个人计算机面对的不是专业用户易用性成为了操作系统的瓶颈问题因此基于窗口和鼠标的直观操作取代了繁琐晦涩的命令行界面。在此基础上,浏览器、音/视频播放器等一些常用软件开始被打包内置到操作系统中,拓展了操作系统“沉淀共性问题解决方案”这一角色的内涵,也即不仅提供运行库供上层应用调用,也能直接支撑用户使用计算机完成常用功能。
此外90年代初Linux\index{Linux}操作系统以开源软件形式出现,对操作系统技术、产品、产业乃至于相关法律政策、社会文化等都产生了重大影响。开源作为一种群智汇聚、群体协作的有效方式,一方面可以有效推动操作系统产品的发展,应对操作系统自身的复杂性;另一方面,一个操作系统能否被广泛接受也取决于其生态链的完善程度,而开源则为生态链构建提供了一种基于众包的新模式。
\item 嵌入和实时操作系统
20世纪70年代单片机出现是计算机发展史上的重要事件之一它使得在各类设备中“嵌入”计算机成为可能可被视为最早的“信息物理融合”Cyber-Physical尝试。针对嵌入式设备80年代现代意义上强调轻量级的嵌入式操作系统\index{嵌入式操作系统}开始出现此类操作系统需要在资源受限环境下运行并且由于其与物理世界直接交互往往需要提供对实时性时间可预测性的保证。首个商业嵌入式实时操作系统内核VTRX32于1981年发布后续涌现出了vxWorks、uCOS、QNX等一系列被广泛应用的嵌入实时操作系统产品。
20世纪70年代单片机出现是计算机发展史上的重要事件之一它使得在各类设备中“嵌入”计算机成为可能可被视为最早的“信息物理融合”Cyber-Physical尝试。80年代强调轻量级的嵌入式操作系统\index{嵌入式操作系统}开始出现此类操作系统需要在资源受限环境下运行并且由于其与物理世界直接交互往往需要提供对实时性时间可预测性的保证。首个商业嵌入式实时操作系统内核VTRX32于1981年发布后续涌现出了vxWorks、uCOS、QNX等一系列被广泛应用的嵌入实时操作系统产品。
\end{enumerate}
\subsection{互联网和移动计算时代的操作系统21世纪初-}
\subsection{智能终端操作系统}
进入21世纪新型计算模式不断出现计算技术表现出向两极发展的趋势一方面以“云”为核心强调通过资源集约化和按需服务方式推动信息技术实现社会化和专业化另一方面以“端”为核心强调信息技术的普适化使得计算服务如同水、电、空气一样随时随地可以获取而又不可见。需要指出的是“云”和“端”二者并非割裂的而是优势互补正在通过“云+端”等形式共同推动着计算技术的新一轮革命。
\begin{enumerate}[(1)]
\item 云计算操作系统
近年来,作为服务化思想的集大成者,云计算模式被广泛接受,云计算操作系统的概念开始出现。云计算操作系统\index{云计算操作系统}是指架构于云计算数据中心各类硬件资源之上实现“基础设施即服务”、“平台即服务”等目标的系统软件其典型代表包括Google AppEngine、Microsoft Azure等。此类操作系统具有如下一些特征
\begin{itemize}
\item 在资源的管控方面,此类操作系统的核心是大型主机时代即已出现的虚拟化技术,但将其应用场景拓展到了数据中心甚至多数据中心级别的,通过虚拟化实现海量计算、网络、存储资源的细粒度管理,进而实现资源的有效聚合和弹性扩展。例如,互联网虚拟计算环境 iVCE\cite{Lu:2013:IVC:2388122.2388238}通过资源的“自主协同、按需聚合”,将静态统一视图的资源组织模式扩展为相对稳定视图、按需可伸缩的资源组织模式,从而实现面向互联网计算的高效管控。
\item 在应用软件的执行管控维度上,此类操作系统面向云服务这类大规模分布计算软件,提供了任务调度与执行、负载均衡、安全管控、在线监控和升级演化、分布式数据存储访问等一系列基础设施和相应能力。这些能力以的服务化方式提供,用户无需像传统系统软件那样自行安装、部署和维护。部分“平台即服务”基础设施还内建了编译系统和调测试环境,支持云端开发和编译构建。
\item 在可用性方面,此类操作系统需要 7×24小时持续提供基础服务是支撑整个信息空间持续运行的核心基础设施。其突出表现为一旦发生故障会产生较大的社会经济影响。例如有文献指出如果一个主要的云平台宕机36天美国经济会产生30亿150亿美元的损失\footnote{``Cloud Down: Impacts on the US economy,'' https://www.lloyds.com/~/media/files/news-and-insight/risk-insight/2018/cloud-down/aircyberlloydspublic2018final.pdf}
\end{itemize}
\item 智能终端操作系统
当前,已经广泛商用的移动操作系统\index{移动操作系统}是“端”操作系统的典型代表。近年来移动计算、特别是智能手机的出现推动了移动操作系统的快速发展典型实例包括Google的Android和Apple的iOS。此类操作系统在架构上与个人计算机操作系统并无本质区别但更强调对移动和手持环境的支持包括移动网络接入、各类传感器数据获取、电池管理、触摸屏交互等。与个人计算时代类似操作系统在移动计算软硬件生态链中同样具有核心基础地位特别是操作系统内置应用商店的出现和广泛接受在降低用户查找、获取和安装应用程序难度的同时也形成了较完善的商业模型极大推动了以操作系统为核心的软件生态链的成长。移动操作系统当前还表现出了与桌面系统一体化的发展趋势通过统一桌面和移动操作系统及其生态将有利于操作系统更好地发展与维护。例如谷歌继移动操作系统Android和轻量级桌面操作系统ChromeOS之后正在研制跨平台的Fuchsia操作系统。
当前“云”上的系统软件形态主要以“平台即服务”基础设施等形式出现它们运行于经典操作系统如Linux之上可被视为中间件技术的发展参见\ref{internet-middleware}节)。“端”操作系统的代表则是已经广泛商用的移动操作系统\index{移动操作系统}典型实例包括Google的Android和Apple的iOS。此类操作系统在架构上与个人计算机操作系统并无本质区别但更强调对移动和手持环境的支持包括移动网络接入、各类传感器数据获取、电池管理、触摸屏交互等。与个人计算时代类似操作系统在移动计算软硬件生态链中同样具有核心基础地位特别是操作系统内置应用商店的出现在降低用户查找、获取和安装应用程序难度的同时也形成了较完善的商业模型极大推动了以操作系统为核心的软件生态链的成长。移动操作系统当前还表现出了与桌面系统一体化的发展趋势通过统一桌面和移动操作系统及其生态将有利于操作系统更好地发展与维护。例如谷歌继移动操作系统Android和轻量级桌面操作系统ChromeOS之后正在研制跨平台的Fuchsia操作系统。
近年来以Android Things、Ubuntu Core、Mbed和华为“鸿蒙”等为代表的物联网操作系统\index{物联网操作系统}正在成为操作系统领域新的热点。此类操作系统在嵌入式操作系统基础上,一方面强调对“连接”、以及建立在连接基础上的分布计算甚至“云-端”融合的支持,从而有力支撑“万物互联”的目标;另一方面强调对异构物理网设备能力的统一抽象,从而屏蔽物联网设备的碎片化特征,为提升物联网的可管理性和可维护性、构建物联网良好生态环境奠定基础
\end{enumerate}
近年来以Android Things、Ubuntu Core、Mbed和华为“鸿蒙”等为代表的物联网操作系统\index{物联网操作系统}正在成为操作系统领域新的热点。此类操作系统在嵌入式操作系统基础上,一方面强调对“连接”、以及建立在连接基础上的分布计算甚至“云-端”融合的支持,从而有力支撑“万物互联”的目标;另一方面强调对异构物理网设备能力的统一抽象,从而屏蔽物联网设备的碎片化特征,为提升物联网的可管理性和可维护性、构建物联网良好生态环境奠定基础。
\section{编译系统}
编译系统\index{编译系统}是将源语言例如高级程序设计语言编写的代码翻译为等价的、高效的、能被计算机或虚拟机执行的目标代码例如机器语言的系统软件。编译系统的诞生早于操作系统但如前节所述由于软件开发与运行的密切相关性在计算机发展早期通常并不严格区分操作系统Operating System和编程系统Programming System仅仅是后者更强调其对开发的支持内置了编译能力、开发辅助工具和可重用例程/库等。随着程序设计语言的变迁、特别是高级语言的出现,编译系统逐渐成为系统软件的一个主要分支,其内涵和外延随语言和计算机体系结构的发展而不断扩展(图\ref{fig:3-2})。
@ -102,20 +87,23 @@
\caption{编译系统发展历程
\label{fig:3-2}}
\end{figure}
\subsection{从汇编器到高级程序编译器}
作为机器体系结构抽象的符号化语言汇编语言的目标是提高编程效率和质量。然而计算机能读懂的只有机器指令此时需要一个能够将汇编指令转换成机器指令的翻译程序。1947年伦敦大学伯贝克学院的Kathleen Booth为ARC2计算机开发了第一个汇编语言及其机器汇编器。之后不久开始出现带有支持代码“库”的计算机预先记录在打孔卡片和磁带上的支持代码库能够在装载器Loader的支持下与用户程序进行连接从而支持输入输出等操作。这就是编译系统这种系统软件类型最早的雏形。
虽然汇编语言相对于机器语言提高了程序的可读性但编写、阅读和理解汇编语言的难度依然较高。20世纪50年代初Grace Hopper在UNIVAC I上首次使用了“编译器”Compiler一词。在她所实现的编译器雏形中磁带上的每段例程由一个数字代码标识用户输入一组数字代码来使得计算机依次加载这些例程。Grace Hopper工作证明了高级语言数字代码向机器语言磁带上例程中所包含机器指令序列映射的可行性。在此基础上更为激进的“自动编程”Automatic Programming的概念\cite{hopper1953influence}被提出希望能够采用接近于人类自然语言的语言编写程序依据这些程序自动生成可执行的机器代码从而显著提高程序开发效率和质量、便于程序的理解阅读和维护。在这一思想的驱动下上个世纪50年代出现了第一个高级程序设计语言——为IBM 704大型机设计的Fortran语言\cite{Backus:1978:HFI:960118.808380}。1957年发布的Fortran编译器则是第一个功能比较完备的高级程序语言编译器。它也是第一个具备优化能力的编译器引入了循环优化、寄存器分配等技术使编译器翻译的机器代码能够与当时人工编写的汇编程序性能相当。
\subsection{程序设计语言驱动的编译系统发展60年代-90年代}
\subsection{面向程序设计语言的编译系统}
在高级程序设计语言出现以后,程序设计方法学和程序设计语言飞速发展,诸如结构化程序设计\index{结构化程序设计}、面向对象程序设计\index{面向对象程序设计}、函数式程序设计\index{函数式程序设计}、逻辑程序设计\index{逻辑程序设计}等方法和语言百花齐放,直接推动了编译技术和编译系统的发展。
20世纪50年代末COBOLCommon Business-Oriented Language语言诞生\cite{Sammet:1978:EHC:960118.808378}。与Fortran主要面向科学计算不同COBOL是用于商务数据处理的语言也是第一个跨平台的高级程序设计语言。1960年由不同编译器编译的同一COBOL程序成功在UNIVAC II和RCA 501机上运行表明了。70年代初美国Bell实验室以开发了B语言和B语言编译器并用B语言编写了第一个UNIX操作系统内核。在B语言基础上Bell实验室经过进一步改进完善后发布了C语言及其编译器。
20世纪50年代末COBOLCommon Business-Oriented Language语言诞生\cite{Sammet:1978:EHC:960118.808378}。与Fortran主要面向科学和工程计算不同COBOL是用于商务数据处理的语言也是第一个跨平台的高级程序设计语言。1960年由不同编译器编译的同一COBOL程序成功在UNIVAC II和RCA 501机上运行表明了。70年代初美国Bell实验室以开发了B语言和B语言编译器并用B语言编写了第一个UNIX操作系统内核。在B语言基础上Bell实验室经过进一步改进完善后发布了C语言及其编译器。
相对于Fortran和 C等命令式高级语言面向对象语言也在这一时期得到发展。20世纪 60年代的SIMULA67语言\cite{Dahl:1968:FSL:800166.805258}引入了类和对象的概念被认为是世界上第一个面向对象语言。70年代出现的Smalltalk语言支持类的动态创建和修改。受到C和SIMULA67语言的影响Bell实验室在八十年代开发了C++随后开发了支持C++的Cfront编译器。20世纪90年代随着C++等语言的流行面向对象语言成为主流的编程语言重要标志是GCC编译器GNU Compiler Collection走向成熟以及Java面向对象语言和编译器的发布。这一时期互联网的发展也促进了编程语言及其编译/解释执行系统的发展例如出现了互联网开发、在运行时检查类型甚至改变程序结构的动态语言如PHP、Ruby等
相对于Fortran和C等命令式高级语言面向对象语言也在这一时期得到发展。20世纪60年代的SIMULA67语言\cite{Dahl:1968:FSL:800166.805258}引入了类和对象的概念被认为是世界上第一个面向对象语言。70年代出现的Smalltalk语言支持类的动态创建和修改。受到C和SIMULA67语言的影响Bell实验室在八十年代开发了C++随后开发了支持C++的Cfront编译器。20世纪90年代随着C++等语言的流行面向对象语言成为主流的编程语言重要标志是GCC编译器GNU Compiler Collection走向成熟以及Java面向对象语言和编译器的发布。这一时期互联网的发展也促进了编程语言及其编译/解释执行系统的发展例如出现了互联网开发、在运行时检查类型甚至改变程序结构的动态语言如PHP、Ruby等
60-70年代编译系统的基础理论和相关技术也开始成熟。20世纪50年代Noam Chomsky通过研究自然语言结构提出Chomsky文法类型其中上下文无关文法成为现今几乎所有程序设计语言的语法\cite{chomsky1956three}。60年代至80年代用于上下文无关文法识别的有效算法逐步发展为编译原理的标准部分同时科学家们着眼研究编译器的自动构造典型实例包括为UNIX操作系统研制的词法分析器生成工具Lex和语法分析器生成工具Yacc。编译系统中的代码优化研究也起步于这一阶段包括与处理器体系结构无关的优化如循环变换、常量传播、公共表达式删除以及与处理器体系结构相关的优化如寄存器分配、指令调度后者与当时精简指令集、超标量、超长指令字等体系结构技术的发展密不可分。
\subsection{多核/众核架构驱动的编译系统发展21世纪-}
\subsection{针对多核/众核架构优化的编译系统}
提高处理器性能是计算机领域长期追求的目标。随着处理器功耗、散热和设计复杂度等原因在单核处理器上提高时钟频率的方法已无法继续提高处理器性能。因此学术界和工业界开始改变策略通过增加处理器核心数目来扩展性能。2001年第一款商用非嵌入式多核处理器IBM POWER4发布计算机体系结构发展进入多核时代。然而增加处理器核数并不必然带来应用性能的提升需要充分挖掘应用中的并行性以利用处理器的多核特性。在编译系统中挖掘并行性具有对程序员透明、有可能在机器指令层面发挥硬件潜力等特点因此当前的主流编译器如GNU GCC、Intel ICC、IBM XLC和Oracle Compiler均提供了对多核心的支持和优化。
与多核处理器通常仅集成几个处理单元不同众核处理器在同一处理器内部集成了大量同构处理单元。例如GPUGraphics Processing Unit在一个芯片上集成数百甚至数千个“小而简单”的核心通过使用大量线程并发提高性能特别适合用于加速大规模并行应用。近年来众核处理器在高性能计算、人工智能等领域发展迅速其编译优化技术也随着体系结构的不断升级而进步包括针对GPU不同存储层次的优化、程序并行度的自动调优、通信优化、针对宽向量的自动向量化等。
@ -132,7 +120,7 @@
\label{fig:3-3}}
\end{figure}
\subsection{中间件的出现20世纪60年代中后期-80年代}
\subsection{早期的中间件}
中间件的出现是软件系统应用场景快速拓展的结果。随着计算技术的发展上层应用在适应新场景过程中对系统软件不断提出新的要求而作为底层支撑的经典操作系统能力相对稳定固化很难快速跟上这些变化二者之间的差距决定了中间件存在的合理性。在1968年北大西洋公约组织的软件工程报告中“中间件”一词被首次使用\cite{buxton1970software},代指弥补底层操作系统(当时称“服务例程/控制程序”)通用能力和上层应用特化需求之间鸿沟的中间层软件(图\ref{fig:3-4}。1972年Jenkin等撰文指出“随着一些系统变得空前复杂标准的操作系统需要扩展或修改推动了中间件这一名词出现”\cite{jenkins1972developments}
\begin{figure}[htbp]
@ -146,25 +134,35 @@
为了应对上述挑战人们早期围绕两种思路展开了探索。一是以Amobea\cite{Tanenbaum:1990:EAD:96267.96281}等分布式操作系统为代表的方法,核心是将单机操作系统的概念放大到网络环境,实现对网络软硬件资源的严格管控,例如文献\cite{Tanenbaum:1985:DOS:6041.6074}指出“分布式操作系统对用户而言与单机操作系统无二只是运行在多个独立处理器上。它的核心概念是透明性”。但是网络资源具有分布自治、高度异构、持续演化等特点其软件很难通过严格的以自顶向下的方法精确设计出来而更多的是通过互联互通方式成长式构造出来的。后一种思路在1976年的ARPANET RFC707中即以“允许调用远程进程所实现的任意命令或函数”的“请求-响应”协议形式出现\footnote{IETF, ``RFC 707 - High-level framework for network-based resource sharing,'' 1977}。Birrel和Nelson等于1984年实现了首个远程过程调用Remote Procedure CallRPC\index{远程过程调用}框架\cite{Birrell:1984:IRP:2080.357392},标志着现代意义中间件的诞生。
\subsection{企业计算时代的中间件80年代-21世纪初}
如前所述,最早出现的中间件是面向过程中间件\index{面向过程中间件}。早期的Sun RPC、开源软件基金会的DCEDistrbuted Computing Environment等都是具有代表性的此类中间件聚焦于尽量实现“调用远程过程像调用本地过程一样简单”。相对于过程“对象”提供了更贴近现实世界的抽象。面向对象中间件\index{面向对象中间件}出现于上个世纪80年代初例如华盛顿大学1980年启动的Eden项目\cite{Black:1985:SDA:323627.323646}即以在网络计算环境中应用面向对象技术为目标提出了分布式EjectsEden objects的概念、编程模型和相应支撑平台。OMG于1990年发布CORBA 1.0是具有里程碑意义的面向对象中间件标准直接推动了面向对象中间件的成熟和高速发展对后续SUN公司的Java/RMI、微软公司的DCOM等技术体系有着直接和深远的影响。
\subsection{面向内联网的中间件}
中间件在诞生之后的很长一段时间内都以企业或组织内部的内联网Intranet为运行环境为明确边界范围的域内资源互联互通提供系统软件支撑。如前所述最早被广泛接受的此类中间件是面向过程中间件\index{面向过程中间件}。它们聚焦于尽量实现“调用远程过程像调用本地过程一样简单”早期的Sun RPC、开源软件基金会的DCEDistrbuted Computing Environment和今天的Google gRPC、Apache Thrift等都是典型实例。
相对于过程,“对象”提供了更贴近现实世界的抽象。面向对象中间件\index{面向对象中间件}出现于上个世纪80年代初例如华盛顿大学1980年启动的Eden项目\cite{Black:1985:SDA:323627.323646}即以在网络计算环境中应用面向对象技术为目标提出了分布式EjectsEden objects的概念、编程模型和相应支撑平台。OMG于1990年发布CORBA 1.0是具有里程碑意义的面向对象中间件标准直接推动了面向对象中间件的成熟和高速发展对后续SUN公司的Java/RMI、微软公司的DCOM等技术体系有着直接和深远的影响。
分别发布于1998年和2000年的EJBEnterprise JavaBean和CCMCORBA Component Model推动了面向构件中间件\index{面向构件中间件}的出现。面向构件中间件又被称构件容器或构件化应用服务器,它是以构件为基本单元的分布式软件的运行平台。构件技术一方面强调通过大粒度、具有规范接口的软件单元来组装软件系统,另一方面由于构件具有规范的功能和管理接口,因此运行时可以对分布式系统进行灵活管理操纵,包括生命周期管理、交互关系管理甚至动态更新演化等。
除了上述支撑不同应用程序模型的通用中间件外,部份中间件关注的是分布式软件的一些特化场景,其典型代表是消息中间件\index{消息中间件}和事务处理中间件\index{事务处理中间件}1在分布计算实践的初期人们就已发现紧耦合、同步的过程调用并不能满足所有应用场合支持异步交互和松耦合通信的分布式应用消息机制的研究和实践开始被重视诸如Field、InformationBus等消息中间件平台开始出现。上个世纪90年代IBM MQSeries等消息中间件产品被大量使用消息中间件技术走向成熟。2在大型主机时代IBM的CICSCustomer Information Control System系统就已提供了跨计算结点事务支持。针对美国电话公司需要的联机事务处理能力AT\&T贝尔实验室于上个世纪80年代初发布了跨平台的Tuxedo事务处理中间件相关研究与实践对后续X/Open组织的分布式事务处理规范、OMG组织的对象事务服务规范等产生了较大影响\cite{Emmerich:2008:IRD:13487689.13487692}
\subsection{互联网计算时代的中间件90年代末-}
\subsection{面向互联网的中间件}\label{internet-middleware}
20世纪90年代中后期 互联网进入高速发展阶段。互联网资源具有开放动态、成长自治的特点但人们同时又希望软件能够持续在线、高度可用二者之间的矛盾催生了“服务”的概念。从2000年左右W3C组织所制定一系列Web Service标准开始“服务”\index{服务}一词即被用来抽象可通过网络按需访问、无需关心实现细节的能力。以此为核心,面向服务体系结构通过服务化封装和“服务提供者-消费者”之间的动态发现,解决开放动态与持续在线之间的矛盾。
作为互联网时代的产物服务化思想首先推动了中间件技术外延的拓展。Apache Tomcat、IBM WebSphere等Web服务中间件以支撑面向服务体系结构为目标封装了服务注册、服务发现、服务访问等共性基础设施以企业服务总线Enterprise Service BusESB\index{企业服务总线}为代表的服务集成中间件通过服务封装、服务组合、服务协同等技术实现自治子系统之间的通信,进而实现复杂业务系统跨域集成;微服务\index{微服务}则聚焦单个业务系统内部通过系统内部组件的彻底服务化实现开发阶段“分而治之”和运行阶段的灵活应变这一思路催生了Spring Cloud等微服务框架。
互联网软件按需提供服务的特点也促使了中间件本身向持续运行的平台形式的转型其典型代表是网格计算中间件、P2P中间件以及云计算“平台即服务”PaaS基础设施等。“平台即服务”在“基础设施即服务”IaaS的基础上提供包括中间件和数据库在内的一系列软件栈为云端分布式应用提供服务化的、可按需使用的运行托管环境。在某种程度上“平台即服务”可视为中间件技术在云计算环境下的集成和延续。
近年来作为服务化思想的集大成者云计算模式被广泛接受。如同工业革命让水、电、交通等成为公共服务一样云计算正在通过后端资源集约化和前端按需服务方式推动信息技术实现社会化和专业化使得信息服务成为公共基础设施。这一趋势推动着中间件概念内涵和外延的发展新一代“平台即服务”Platform as a Service, PaaS软件基础设施成为了各大云服务提供商的核心竞争力所在。它为云端分布式应用提供服务化的、可按需使用的运行托管环境集成了从分布式调用、数据库访问到服务治理在内的一系列软件栈其典型代表包括Google AppEngine、Microsoft Azure、Amazon EC2等。与传统中间件相比它们具有如下一些显著特征
\subsection{信息物理融合时代的中间件发展21世纪初-}
\begin{itemize}
\item 在资源的管控方面,此类平台的核心是大型主机时代即已出现的虚拟化技术,但将其应用场景拓展到了数据中心甚至多数据中心级别的,通过虚拟化实现海量计算、网络、存储资源的细粒度管理,进而实现资源的有效聚合和弹性扩展。例如,互联网虚拟计算环境 iVCE\cite{Lu:2013:IVC:2388122.2388238}通过资源的“自主协同、按需聚合”,将静态统一视图的资源组织模式扩展为相对稳定视图、按需可伸缩的资源组织模式,从而实现面向互联网计算的高效管控。
\item 在应用软件的执行管控维度上,此类平台面向云服务这类大规模分布计算软件,提供了任务调度与执行、负载均衡、安全管控、在线监控和升级演化、分布式数据存储访问等一系列基础设施和相应能力。这些能力以的服务化方式提供,用户无需像传统系统软件那自行安装、部署和维护。部分“平台即服务”基础设施还内建了编译系统和调测试环境,支持云端开发和编译构建。
\item 在可用性方面此类平台需要7×24小时持续提供基础服务是支撑整个信息空间持续运行的核心基础设施突出表现为一旦发生故障会产生较大的社会经济影响。例如有文献指出如果一个主要的云平台宕机36天美国经济会产生30亿150亿美元的损失\footnote{``Cloud Down: Impacts on the US economy,'' https://www.lloyds.com/\~/media/files/news-and-insight/risk-insight/2018/cloud-down/aircyberlloydspublic2018final.pdf}
\end{itemize}
\subsection{人机物融合中间件}\label{blockchain-history}
计算技术的网络化和普适化推动了信息与物理空间的持续融合,出现了各类可以感知/作用于物理世界的大规模网络软件中间件技术随之在不断发展。自上个世纪末以来随着相关硬件技术的逐渐成型中间件领域针对嵌入式传感器和移动设备等载体开始关注对物理空间情境Context数据的处理出现了普适计算中间件、传感器网络中间件、情境感知中间件等一系列新型中间件。近年来快速发展的物联网中间件\index{物联网中间件}IoT Middleware在上述中间件概念的基础上进一步针对“万物互联”的大规模异构环境进行了拓展其核心关注点是在资源受限、高度异构、规模庞大、网络动态变化条件下如何实现互联互通互操作并且不违反各种时空约束特性满足物联网应用对海量传感器数据或事件实时处理的需求。
除了感知物理世界外,随着信息物理融合系统的成熟,近年来中间件领域开始关注如何联接能够直接“作用”于物理世界的计算设备,其突出代表是无人系统/机器人中间件。针对无人系统计算环境高度异构、资源受限、常态失效、实时性要求高等特点从2000年左右的Player等中间件开始包括Miro、CLARAty、OpenRTM-aist、Pyra、Orca、MARIE等在内的一系列实践推动了无人系统中间件技术的发展并直接为今天广泛使用的机器人“元级操作系统”ROSRobot Operating System奠定了理论和技术基础。
此外从早期的P2P中间件到今天的区块链平台分布自治中间件突出体现了“社会-技术”系统的思想具有人机融合的特点。此类中间件通过信息空间内的机制设计激励人的自主协同通过软件基础设施及平台支撑社会价值交换。以区块链为例2009年比特币网络上线并连续无故障运行2010年“比特币披萨日”第一次用于购买实物2013年塞浦露斯金融危机中成功得到高度关注。从软件角度而言此时的比特币仍然只是一个独立于国家货币体系的分布式应用而2014年发布的以太坊则摆脱了电子货币的桎梏作为建立于区块链技术之上的应用平台以太坊的“区块”可以记录各类数据而Solidity语言描述的智能合约能够实现各种场景下的复杂应用逻辑。这标志着区块链从应用层技术向支持分布式共识的系统软件部件的转变。后续超级帐本、联盟链等技术/系统的发展,更进一步将参与方从个人扩展到组织,在金融、物流、社会治理等领域形成了一系列极具前景的新型应用模式。
\section{数据库管理系统}
数据库\index{数据库}是长期存储在计算机内有组织、可共享的大量数据的集合,数据库管理系统旨在统一管理和维护数据库中的数据,是组织、存储、存取、控制和维护数据的软件。从本质上而言,数据库管理系统\index{数据库管理系统}把逻辑数据转换成为计算机中具体的物理数据,从而使得用户可以访问、检索和维护数据,而不必顾及这些数据在计算机中的布局和物理位置。
@ -177,33 +175,33 @@
\label{fig:3-5}}
\end{figure}
\subsection{数据库管理系统的出现20世纪60年代-70年代初}
\subsection{层次和网状数据库}
20世纪50年代前期计算机被主要用于科学计算数据仅被认为是“计算”的产品或附属品通常存储在被称为“文件”的打孔卡片早期或外设数据单元上。随着计算机应用领域向商业、金融、政府等通用领域扩展文件作为数据存储的主要设施已经无法满足对各类应用中数据项之间的复杂关系进行管理的需求主要表现在以下几个方面文件内部数据组织往往是面向单一应用的不同应用共享同一个文件结构效率较低文件之间的数据是独立的无法表达两个文件的数据所存在内在逻辑关系文件的组织方式单一难以满足不同的访问模式对数据高效率访问的需求。
在上述背景下为了提供系统化、高效的数据组织与访问功能专门的数据库管理系统开始出现。60年代初通用电气在其生产信息和控制系统MIACS中设计了“集成数据存储”Integrated Data Store被认为是首个支持直接访问的数据库管理系统\cite{Bachman:2009:OID:1674526.1674536}并直接为CODASYL组织后续制定的网状数据库标准奠定了基础。1968年IBM发布了运行于System/360主机的层次数据库管理系统IMSInformation Management System。上述两个具有里程碑意义的产品分别代表了数据库管理系统的两种早期数据模型也即数据是按照网状的“图”还是层次化的“树”来组织。其中层次模型由于其每一个节点最多只有一个父节点因此可以采用有效的手段例如按照树遍历的顺序来存储数据而网状模型可以将图分解为一组“基本层次联系”的集合其本质上可以用“树”结构来表达和存储数据。
\subsection{关系数据库的高速发展70年代-90年代}
220世纪70年代是关系数据库\index{关系数据库}形成并实现产品化的年代主要的代表人物就是IBM的埃德加·科德Edgar F. Codd。1970年科德发表题为“大型共享数据库的关系模型”的论文\cite{Codd:1970:RMD:362384.362685}文中提出了数据库的关系模型。由于关系模型简单明了、具有坚实的数学理论基础操作语言是描述性的无需像层次网状模型那样需要描述存取路径既先访问哪个数据再访问哪个数据这样的细节给提高信息系统开发的生产率提供了极大的空间所以一经提出就受到了学术界和产业界的高度重视和广泛响应。尽管一开始产业界还充斥了对关系数据库系统性能的怀疑但科德所开发的System R系统证明其性能可以有保障。这一结论极大地推动了关系数据库技术的发展关系数据库产品开始涌现包括IBM公司在System R系统基础上推出的DB2产品、ORACLE公司的同名数据库产品以及80年代初出现的、针对个人电脑设计的dBase等。由于科德杰出的贡献1981年的图灵奖授予了这位“关系数据库之父”
\subsection{关系数据库}
20世纪70年代是关系数据库\index{关系数据库}形成并实现产品化的年代主要的代表人物就是IBM的埃德加·科德Edgar F. Codd。1970年科德发表题为“大型共享数据库的关系模型”的论文\cite{Codd:1970:RMD:362384.362685}文中提出了数据库的关系模型。由于关系模型简单明了、具有坚实的数学理论基础操作语言是描述性的无需像层次网状模型那样需要描述存取路径既先访问哪个数据再访问哪个数据这样的细节给提高信息系统开发的生产率提供了极大的空间所以一经提出就受到了学术界和产业界的高度重视和广泛响应。尽管一开始产业界还充斥了对关系数据库系统性能的怀疑但科德所开发的System R系统证明其性能可以有保障。这一结论极大地推动了关系数据库技术的发展关系数据库产品开始涌现包括IBM公司在System R系统基础上推出的DB2产品、ORACLE公司的同名数据库产品以及80年代初出现的、针对个人电脑设计的dBase等。由于科德杰出的贡献1981年的图灵奖授予了这位“关系数据库之父”
20世纪80年代关系数据库迅速取代层次和网状数据库占领市场描述型的关系库数据语言SQL语言、完善数据正确性确保的机制、逐渐发展的开发工具和软件生态在实践中显著提高了生产率。数据库研究工作重心也围绕关系数据库展开包括查询优化和事务管理等方面1查询优化。关系数据库语言是基于集合的描述性语言如70年代初出现的SQL语言其查询的结果也是一个集合。如何将一个SQL语句转换为可以执行的程序类似程序自动生成器而且要在所有可能的执行计划程序中选择出一个效率足够好的加以执行是这一阶段工作重点之一。2事务管理。事务管理提供对并发事务的调度控制和故障恢复确保数据库系统的正确运行。詹姆斯·尼古拉·格雷James Gray在相关研究方面发挥了十分关键的作用为数据库管理系统成熟并顺利进入市场做出了重要的贡献。他的成就汇聚成一部厚厚的专著《Transaction Processing: Concepts and Techniques》\cite{Gray:1992:TPC:573304}他个人也众望所归获得了1998年度的图灵奖。
在这一时代对于数据库管理系统做出重要贡献的还有迈克尔·斯通布雷克Michael Stonebraker。他在加州大学伯克利分校计算机科学系任教的29 年中领导开发了关系数据库系统Ingres、对象关系数据库系统Postgres、联邦数据库系统Mariposa等同时创立了多家数据库公司。他在“One size does not fit all”的思想指导下开发了一系列的“专用”关系数据库产品例如流数据管理系统、内存数据库管理系统、列存储关系数据库系统、科学数据库管理系统等。因“对现代数据库系统底层的概念与实践所做出的基础性贡献”他于2015年获得了图灵奖。
\subsection{数据仓库系统的出现和发展90年代-}
\subsection{数据仓库系统}
数据仓库\index{数据仓库}可看作是关系数据库的一个自然延伸。随着数据库技术的普及应用,越来越多的数据被存储在数据库中,除了支持业务处理以外,如何让这些数据发挥更大的作用,就是一个亟待解决的问题。特别是对于联机分析处理类应用,如何让复杂分析能高效地执行,需要有特殊的数据组织模式,推动了数据仓库系统的出现。
星型模型是最常用的数据仓库的数据组织模型。所谓星型模型也称多维模型,就是选定一些属性作为分析的维度,另一些属性作为分析的对象。维属性通常根据值的包含关系会形成一个层次,例如时间属性可以根据年月周日形成一个层次,地区属性也可以形成街道-区-市这样的层次。为了实现快速分析可以预先计算出不同层次上的统计结果从而获得快速联机分析的性能。在实现方式上数据仓库可以用关系数据库实现Relational OLAP分别用事实表和维表来存储统计结果和维度结构也可以用特别的数据模型CUBE来实现列存储的技术也在这个过程中被提出和应用。同时支持联机分析处理的前端工具的发展也使得普通用户可以方便地使用数据仓库
\subsection{大数据时代数据库管理系统的发展21世纪初-}
\subsection{大数据时代数据库管理系统}
关系数据库成熟并广泛应用后数据库领域一度走入一段迷茫期被关系模型的“完美”所陶醉。进入21世纪互联网的高速发展使得数据规模越来越庞大传统关系数据库的弊端开始凸显在搜索引擎、流媒体等拥有海量非结构化数据的领域传统的关系数据模型并不完全适用而关系型数据库所承诺的原子性、一致性、隔离性、持久性等ACID特性在这些领域有可能不需要严苛保证不必要的开销和有限的可扩展性导致数据存储和管理效率低下。在这一背景下NoSQL数据库\index{NoSQL数据库}开始出现其重要的里程碑事件是Google所发布的Bigtable\cite{Chang:2008:BDS:1365815.1365816}及根据其理念所开发的开源HBase数据库。与关系数据库不同NoSQL数据库不再采用严苛的关系模型转而使用更为灵活的键值对结构、文档模型、图模型等。同时NoSQL数据库可能不提供严格的一致性保证并且通常在设计时即考虑了水平可扩展能力即通过增加计算节点来扩充处理能力因此可以达到比关系型数据库更高容量和性能。
随着实践的深入人们发现NoSQL并非解决大数据时代数据管理问题的“银弹”。一方面无论从应用程序继承的角度还是提高生产率的角度SQL语言都是不可或缺的工具因此继承和汲取SQL的优点如在上层提供SQL查询引擎逐渐成为NoSQL数据库的共识NoSQL一词的含义也从“非SQL”被修正为“不仅仅是SQL”Not Only SQL。另一方面许多联机事务处理业务在应对海量数据同时仍需要采用关系模型并保证原子性、一致性、隔离性、持久性等特性。因此能够提供与NoSQL数据库类似的扩展性能、但仍具备关系数据库能力的NewSQL数据库\index{NewSQL数据库}近年来得到了快速发展其典型代表包括Google全球级分布数据库Spanner\cite{Corbett:2013:SGG:2518037.2491245}和开源领域的CockroachDB、TiDB等。
\section{束语}
\section{本章小}
系统软件将计算系统的概念从硬件扩展到了软件层面上,它为上层应用提供了一个可以使用各类资源能力、但又无需关注底层细节的软件平台。历经六十余年的发展,系统软件已经形成操作系统、编译系统、中间件和数据库管理系统等典型形态,已经成为了计算机软硬件生态链的核心,对信息产业乃至人类社会产生了较大影响,在促进经济发展和文明进步中发挥了重要作用。在这一过程中,系统软件表现出了如下一些发展规律:
\begin{itemize}
\item 硬件技术和应用场景变迁是发展的核心动力。系统软件具有“承上启下”的特点,无论是形态还是机理的发展都受到硬件和应用两方面的驱动。例如,在贝尔定律支持下计算设备约每10年一次换代设备和用户增加10倍成为新的蓝海、催生新型应用间次推动操作系统换代并形成新的生态使得操作系统每隔20年左右迎来一次跨越式发展的机遇期参见图\ref{fig:3-1}。另一个典型案例是编译系统近年来高性能计算、智能计算方面的应用需求以及GPU等新型硬件的出现成为了编译系统近年来发展的主要动力。
\item 硬件技术和应用场景变迁是发展的核心动力。系统软件具有“承上启下”的特点,无论是形态还是机理的发展都受到硬件和应用两方面的驱动。例如,如贝尔定律所述计算设备约每10年一次换代设备和用户增加10倍成为新的蓝海、催生新型应用间次推动操作系统换代并形成新的生态使得操作系统每隔20年左右迎来一次跨越式发展的机遇期参见图\ref{fig:3-1}。另一个典型案例是编译系统近年来高性能计算、智能计算方面的应用需求以及GPU等新型硬件的出现成为了编译系统近年来发展的主要动力。
\item 构建“抽象”和实现平台化是发展的重要主题。本质而言,系统软件负责向应用提供运行支撑、网络交互、数据管理等不同维度上的“抽象”(或者说虚拟机),并将这一“抽象”以尽可能高效方式绑定到硬件裸机,充分发挥硬件潜力。例如,过去数十年中,操作系统形成了一系列诸如文件、进程/线程、内存页、Socket等的概念并由这些概念实体共同组成了应用可见的“抽象”或者说虚拟机。同时沉淀共性、进而实现平台化也是系统软件发展的重要主题一方面可以避免应用去重新“造每一个轮子”另一方面也为软件生态奠定基础。
\item 技术螺旋上升与交叉融合是发展的主要特征。与应用软件的快速更新不同,系统软件具有相对稳定性,很多核心技术表现出了螺旋上升的接入点。例如虚拟化技术早在60年代IBM实验性操作系统CP-40和其后商用化的CP-67、VM/370中得到完整实现而云计算时代虚拟化技术“复兴”过程中的挑战则主要来自于数据中心环境资源集约化的需求。另一方面系统软件发展经历了从无到有、进而形成多个分支的过程。“分久必合”近年来分支之间表现出相互融合趋势中间件与操作系统就是一个典型案例参见\ref{middleware}节)。
\item 技术螺旋上升与交叉融合是发展的主要特征。与应用软件的快速更新不同,系统软件具有相对稳定性,很多核心技术表现出了螺旋上升的点。例如虚拟化技术早在60年代IBM实验性操作系统CP-40和其后商用化的CP-67、VM/370中得到完整实现而云计算时代虚拟化技术“复兴”过程中的挑战则主要来自于数据中心环境资源集约化的需求。另一方面系统软件发展经历了从无到有、进而形成多个分支的过程。“分久必合”近年来分支之间表现出相互融合趋势中间件与操作系统就是一个典型案例参见\ref{middleware}节)。
\end{itemize}

View File

@ -150,7 +150,7 @@
总之,敏捷软件开发通过自组织和跨职能团队及其客户/最终用户的协作努力使需求和解决方案不断演化发展的方法它倡导适应式规划、演化式发展、尽早交付和持续改进同时鼓励快速应变和灵活反应。实际上迭代增量开发可追溯到1957年~\cite{larman2003iterative},而演化式项目管理~\cite{gilb1981evolutionary}和自适应软件开发~\cite{edmonds1974process}也早在70年代就已经出现。他们都早于敏捷宣言并都被包含进敏捷软件开发方法。
\subsection{软件质量保障}
软件是一种人工制品,需要有相应的软件质量保障Software Quality Assurance, SQA机制包括监控软件工程过程以确保质量。软件质量保障涵盖整个软件开发过程包括需求定义、软件设计、编码、源代码控制、代码审查、软件配置管理、测试、发布管理和产品集成等。
软件是一种人工制品需要有相应的质量保障Software Quality Assurance, SQA机制包括监控软件工程过程以确保质量。软件质量保障涵盖整个软件开发过程包括需求定义、软件设计、编码、源代码控制、代码审查、软件配置管理、测试、发布管理和产品集成等。
\subsubsection{软件质量体系}
软件质量是反映软件系统或产品满足明确或隐含需求能力的特性的总和。有四个方面的含义: 其一,能满足给定需要的特性的全体;其二,具有所期望的各种属性的组合的程度;其三,用户觉得能满足其综合期望的程度;其四,软件的组合特性,它确定软件在使用中将满足顾客预期要求的程度。软件质量常常用下列特性来评价:
@ -168,12 +168,12 @@
\item 易移植性:软件产品从一种环境迁移到另外一种环境的能力。
\end{itemize}
Boehm等人于1976年提出了定量评价软件质量的概念提出了60个质量度量公式首次提出了软件质量度量的层次模型。1978年Walters和McCall提出了从软件质量要素、准则到度量的三层软件质量度量模型将质量要素降到11个。国际标准化组织于1985年建议的质量度量模型是高层——软件质量需求评价准则中层——软件质量设计评价准则低层——软件质量度量评价准则的三层次模型。高层
软件质量度量是用于确定软件系统或产品头屑特性的定量尺度,Boehm等人于1976年提出了定量评价软件质量的概念提出了60个质量度量公式首次提出了软件质量度量的层次模型。1978年Walters和McCall提出了从软件质量要素、准则到度量的三层式软件质量度量模型将质量要素降到11个。
\subsubsection{软件质量标准}
国际标准化组织(ISO)和国际电工委员会(IEC)于1991年提出了标准给出了6个特性和21个子特性又于2001年再次修订了标准建立了软件产品质量的两部分模型1内部质量软件产品在特定条件下使用时软件产品的一组静态属性满足明确和隐含需要的能力和外部质量系统在特定条件下使用时软件产品使得系统的行为能满足明确和隐含需要的能力2使用质量在特定的使用周境中,软件产品使得特定用户在达到有效性、生产率、安全性和满意度等方面的特定目标的能力)。
国际标准化组织于1985年建议的质量度量模型分为三层高层——软件质量需求评价准则中层——软件质量设计评价准则低层——软件质量度量评价准则。在1991年国际标准化组织(ISO)和国际电工委员会(IEC)又共同提出了标准给出了6个特性和21个子特性于2001年再次修订标准建立了软件产品质量的两分模型1内部质量软件产品在特定条件下使用时软件产品的一组静态属性满足明确和隐含需要的能力和外部质量系统在特定条件下使用时软件产品使得系统的行为能满足明确和隐含需要的能力2使用质量在特定的使用场景中,软件产品使得特定用户在达到有效性、生产率、安全性和满意度等方面的特定目标的能力)。
已经存在一系列标准用于监控和评估软件生产过程过程以支持软件质量的提升ISO/IEC 15504\footnote{https://www.iso.org/standard/38932.html}其第一个版本专注于软件开发过程后来扩展到涵盖软件业务中的所有相关流程例如项目管理配置管理质量保障等是成熟度模型的参考模型评估者可以根据模型在评估期间收集证据全面确定所开发产品软件系统和IT服务的能力。其更新版本是ISO/IEC 33000\footnote{https://www.iso.org/standard/54175.html}。其它质量标准还包括ISO/IEC 25000\footnote{https://www.iso.org/standard/64764.html}、ISO/IEC/IEEE 29119\footnote{https://www.iso.org/standard/45142.html}等。
还有一系列标准用于监控和评估软件生产过程过程以支持软件质量的提升ISO/IEC 15504\footnote{https://www.iso.org/standard/38932.html}其第一个版本专注于软件开发过程后来扩展到涵盖软件业务中的所有相关流程例如项目管理配置管理质量保障等是成熟度模型的参考模型评估者可以根据模型在评估期间收集证据全面确定所开发产品软件系统和IT服务的能力。其更新版本是ISO/IEC 33000\footnote{https://www.iso.org/standard/54175.html}。其它质量标准还包括ISO/IEC 25000\footnote{https://www.iso.org/standard/64764.html}、ISO/IEC/IEEE 29119\footnote{https://www.iso.org/standard/45142.html}等。
\subsubsection{形式化规约和验证}
除了采用工程方法来组织、管理软件的开发过程,并根据标准检验过程的正确性外。还有一类工作就是深入探讨程序和程序开发过程的规律,建立严密的理论,以其用来指导软件开发实践,这类工作推动了形式化方法的深入研究,其目标是以严格的数学推演为基础,通过对系统的形式规约、验证和逐步精化来构造并实现软件,从而提高软件设计的可靠性和鲁棒性。通过对系统的形式规约、验证和逐步精化来构造并实现软件。其中,形式规约是使用形式语言构建所开发的软件系统的规约,对应软件生命周期不同阶段的制品,刻画系统不同抽象层次的模型和性质。形式化开发就是构造并证明形式规约之间的等价转换和精化关系,以系统的形式模型为指导,通过逐步精化,最后开发出满足需要的系统,也称为构造的正确性(Correct by Construction)。
@ -184,7 +184,13 @@
软件测试通过人工或自动的方式运行被测试的软件,检验其运行结果或行为是否与预期相符,其目的是发现软件中潜在的错误和问题。测试应当经过设计,并在测试用例的驱动下进行。测试用例一般包括输入、环境配置、测试步骤和期望输出。软件测试可以在不同层次上进行,包括单元测试\index{单元测试}、集成测试\index{集成测试}、系统测试\index{系统测试}和验收测试\index{验收测试}。此外,在软件进行修改后为确认修改未引入新的错误还需要重新运行相关的测试用例,即进行回归测试\index{回归测试}。软件测试的基本过程包括测试计划、测试用例设计、测试执行、测试结果分析等步骤。其中,测试用例设计是关键,一方面要确保对软件运行过程中的各种可能性有较高的覆盖度,另一方面要限制测试用例数量以节省测试时间和成本。相应的测试用例设计方法主要包括白盒测试\index{白盒测试}和黑盒测试\index{黑盒测试}两类,同时与各种测试用例选取和排序等辅助技术相结合。为了缩短测试时间、节省测试成本,自动化测试技术受到了很大关注,包括自动化的测试用例生成、执行和结果分析。
\subsection{软件工程工具}
软件工程工具是辅助软件开发人员、运维人员、管理人员等不同参与者参与软件开发活动的各类软件产品的总称。软件工程工具从早期的编程工具、软件过程管理工具以及软件度量工具,逐步发展为服务于软件全生命周期的整套工具链,并且在不同的软件工程环节存在多种可供选择的工具产品。丰富的软件工程工具为软件开发人员提供了更加高效便捷的开发方法和能力。面向软件工程过程不同环节的软件工程工具,促进了软件工程的领域细分。不同的软件工程工具对工具使用者的不同技能要求,使软件工程技能培训和学习更加细化和专业化。根据软件工程工具所服务的人员角色不同,可将软件工程工具分为软件开发工具、软件运维工具、软件开发管理工具等。
软件工程工具,或软件工具,是用来辅助计算机软件的开发、运行、维护、管理、支持等过程中活动或任务的一类软件。早期的软件开发所用到的引导程序、装入程序、编辑程序等都可以看作是最早的软件工具。在汇编语言和高级程序设计语言出现以后,汇编程序、解释程序、编译程序、连接程序和排错程序构成了早期的软件工具集。在软件工程出现后,支持软件需求分析、设计、编码、测试、维护和管理等活动的软件工具逐渐发展起来,从各个阶段支持着软件开发过程,并且自然而然出现了工具集成的需要,使得各个工具能够协同操作。
软件开发环境由软件工具和环境集成机制构成,是支持软件产品开发的软件系统~\cite{张效祥2005计算机科学技术百科全书}。软件开发环境在工具集成的需求中开始萌芽上世纪70年代中后期出现了软件工具箱Toolkit的思想在软件开发过程中使用成套的多个软件工具。80年代起出现了支持图形设计方式的第二代软件工具和集成这些工具为一体的软件开发环境采用环境信息库支持软件开发模型和开发方法并且集成机制有了较大发展。90年代开始出现支持面向对象方法和技术的软件开发环境。我国“七五”“八五”科技攻关中研制的\index{青鸟软件开发环境},是当时先进的软件开发环境,具有较为完善的集成化软件开发支撑能力。
21世纪以来随着互联网和移动通信的普及软件工具和软件开发环境的用途和种类进一步拓展出现了支持软件国际化、软件开发协同工作、开源软件库和开源社区环境以及支持互联网、物联网和云计算的基础软件和应用测试支撑工具。软件开发环境不仅支持时间上的松耦合开发还支持空间上的分布开发并且开始以协同开发思想为基础更强调多相关方、多工具、多活动的协同开发支撑使得软件产品相关的所有利益相关方能在互动的软件开发协作过程中实现包括需求管理、项目管理、软件部署和运行监控等活动在内的完整的软件生存周期过程支撑。
随着软件形态的演化和软件开发方法的发展,软件工具和软件开发环境正在功能智能化、网络化、服务化方向发展,并且对软件开发过程的可视化管理和定量分析优化提供支持。
\subsubsection{软件开发工具}
早期的软件开发工具仅限于汇编器和编译器。20世纪五六十年代随着Fortran、Basic等高级语言的出现计算机程序逐步脱离了面向特定硬件系统的束缚更加接近于自然语言而易于开发人员书写。开发人员使用文本编辑工具编写代码后使用代码解释或编译工具将源代码转换为操作系统可以识别的代码进而实现预期的程序行为。广义上来说文本编辑器、汇编器、编译器都可以看作最原始的软件开发工具。
@ -201,12 +207,6 @@
\end{itemize}
单一的软件开发工具很多时候由于缺少必要的上下文信息或与其他工具的联系而很难使用。因此基于多种软件开发工具形成的集成开发环境IDE\index{集成开发环境IDE}逐渐发展起来。20世纪80年代通用编程语言Ada带有自己的编程支持环境APSE提供了编辑界面、编译器、测试器、连接加载器等功能模块将集成开发环境提升到一个新的阶段。此后微软Microsoft、宝蓝Borland等软件公司相继开发出各自的开发环境用于支持相应编程语言的开发与调试。
IDE的出现为软件开发人员在开发过程中集中完成软件开发任务提供了统一的环境也为后续进一步扩展新的软件工程工具奠定了基础。例如1987年宝蓝公司推出的Turbo C开发环境在字符界面上提供了灵活的代码编写和调试环境使得开发人员能够一站式完成程序编写、测试和调试。1991年为了适应微软公司的视窗Windows操作系统界面风格宝蓝公司又推出Borland C++并在90年代后期推出Borland C++ Builder提升了集成开发环境的易用性和代码编译链接的效率。在这个工具的升级过程中不仅需要适应C/C++语言标准的变化、操作系统的变化还考虑了开发人员的易用性需求通过可视化的窗体设计器、对象观察器等可视化元素加入到开发环境中推出了VCL构件库引领了快速应用程序开发RAD开发方法大大降低了开发Windows应用程序的难度。
开放式架构的开源集成开发环境以插件的形式提供各类辅助支持包括在开发环境中提供各类代码静态扫描功能、代码重构功能、代码自动补全和框架自动生成功能等大大扩展了集成开发环境的能力范围使之能服务于不同的开发过程活动。例如最初由IBM公司主导开发的Eclipse在2001年开源转入非盈利组织Eclipse基金会管理后开源社区的大量开发者为其开发了众多实用的功能进而衍生出了MyEclipse、IBM Rational Software Architect等多种工具软件服务于不同层次和复杂程度的开发需求。
\subsubsection{软件运维工具}
软件的运行和维护是软件交付后的必要环节。在以桌面应用为主的上世纪90年代以前软件产品要么以商业成品Commercial-off-the-shelf形式提供给最终用户要么以商用服务项目的形式在客户现场On-site提供支持。此时软件的运维主要是软件日志的收集与分析。通常只能通过现场日志的分析获知软件的可能问题进而在开发环境中进一步测试、验证、修改软件以修复相关问题。在这种模式下软件运维工具往往并不受重视并且通常是融合在软件开发工具中的即需要通过软件开发过程中写入必要的日志信息才能实现必要的运行维护工作。随着互联网应用和应用的服务化进程的开启21世纪以来服务化和云化的软件使得软件运维从客户端现场支持逐步转向后端、云端。此时的软件运行具有在线动态地特性不仅需要运行时的日志记录与分析还需要能快速响应特定的运行问题并快速给出维护方案、上线修复的软件产品。软件运维从简单的运行日志分析和调错逐步向实时监控、快速响应的反向发展这也带来了开发运维一体化DevOps\index{开发运维一体化DevOps}的兴起。由此软件运维工具范围迅速扩大形成了涵盖开发、构建、测试、集成及交付、容器平台等个子领域的工具集。例如自动化构建是持续集成的重要支撑支持持续集成的工具包括开源工具Jenkins、商用工具Bamboo以及商用开源版本并存的Travis等。这些工具的特性分别适应特定的应用群体或用户运维人员可实现多种运维工具的按需选择。
@ -272,5 +272,6 @@
\section{结束语}
随着信息技术的飞速发展,软件系统无处不在,其应用形态呈现出泛在化、社会化、情境化、智能化等特征,软件正逐步成为人类社会不可或缺的基础设施。软件工程方法和技术的进步支撑了整个的软件应用的展开,体现在软件系统的规模越来越大,所解决的问题越来越复杂、交互对象越来越多样,人们寄予越来越高的可靠性要求。现在,人机物融合应用模式的不断深入,“泛在系统”和“软件定义”也成为呼之欲出的着力点。这既孕育了软件工程学科的新的增长点,也给软件工程方法和技术带来了新的挑战,需要有新的软件工程方法和技术支撑。
综观软件工程的起源和发展,可以发现,软件成为独立存在的人工制品,因此需要一种系统化的方法以及相应的技术,第一使得这种人工制品的功能能满足应用需求,第二使得其开发和生产能高效地完成,第三能提供手段以保证其质量。因此软件工程的发展总是围绕需求、软件方法学和软件开发技术、以及软件质量体系和保障等几个方面展开,这形成了软件工程学科的内涵。
但是,软件又和其它人工制品不同,它在需求和表现形式上具有极大变化性,它承载在看上去非常容易修改的代码上,随着软件和物理设备以及人的越来越深度的融合,通过软件作为核心支撑来解决的问题也越来越复杂。这也使得软件工程方法和技术不断面临新的挑战,面对的问题(需求)越来越复杂、软件操作的交互对象越来越多样,人们寄予越来越高的可靠性等等,这些是软件工程方法和技术发展的原动力。

View File

@ -1,110 +1,122 @@
% !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.8]{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世纪70年代后期IBM公司推出的个人电脑PC催生了面向个人的软件使用场景为软件产业的发展提供了广阔的空间80年代微软通过与IBM公司的合作成功研制了面向个人计算机的桌面操作系统MS-DOS成为当时在IBM PC上最常用的操作系统也带来了大量的软件应用场景推动了第一波信息化浪潮促进软件产业的发展和壮大。同期MacOS在苹果公司Macintosh计算机上也得到了广泛的应用。1983年嵌入式实时操作系统RTOSVxWorks由美国WindRiver公司研发具有高性能的内核以及友好的用户开发环境以其良好的可靠性和卓越的实时性至今仍被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中。20世纪90年代微软公司自行研发新操作系统Windows通过图形化界面来替换其原有的字符界面为主的DOS系列操作系统。同期芬兰裔美国软件工程师Linus Torvalds基于Unix研发了Linux操作系统由于其轻量级微内核的设计和良好的可移植性目前已经发展为国际主流操作系统之一并形成了多种变体版本。
当前操作系统软件产业在不同操作系统领域呈现各自的发展特点。在服务器操作系统领域Linux、Unix和Windows是最常见的操作系统软件产品形成能力互补的同时也存在多个角度的竞争。在桌面操作系统领域Windows占据最大的市场份额但是近年来Mac OS和Linux的份额在不断增加竞争态势显著。在移动智能终端操作系统领域Android被华为、三星等众多手机和其他终端厂商使用而iOS则在苹果公司经营下形成了相对封闭的发展模式两者形成了各自的产品生态特色。在嵌入式操作系统领域VxWorks、Windows Embedded、嵌入式Linux等系统软件产品广泛用于工业控制、终端设备等领域我国国产工控实时操作系统SylixOS也在在国内关键系统市场逐步扩展份额开始形成对VxWorks等国际产品的替代。云操作系统、智能穿戴操作系统等产品的软件产业规模总体较小仍有很大的发展空间。各类操作系统具有不同的使用平台和应用场景在某一细分的领域往往存在几个产品共同形成市场竞争同时也存在市场互补。产品的多样性以及标准化等特性为操作系统产业乃至整个软件产业的繁荣提供了重要的保障对其他各个子产业建立了重要的平台支撑。操作系统与计算机硬件密切相关在很长一段时间操作系统软件与硬件往往共同销售并且预装在硬件上。随着操作系统产品的逐步成熟以销售许可的方式对产品进行售卖逐渐形成另一种典型的软件产品商业模式。
办公软件是一种重要的服务于日常信息处理的共性应用软件产品\footnote{在我国,办公软件也被归入基础软件。}。由于办公软件产品的普及各类信息的记录与处理有了便捷高效的平台。其中最为知名的办公软件包括文字处理、电子表格、演示等。早期的办公软件国外有Word Prefect、Lotus123等而国内则有WPS等都具有广泛的部署和深刻的商业影响。随着信息处理的需求越来越大人们对办公软件的易用性要求也日益提升推动者各厂商对软件产品的设计不断改进。在操作系统进入图形化“视窗”时代后相应的办公软件也开启了“所见即所得”WYSIWYG的新阶段大大提升用户体验并反过来对操作系统的效率和稳定性提出新的要求。办公软件与操作系统一样也在产品逐渐成熟和商业模式逐步清晰的背景下进入按许可进行销售的软件产品商业模式。
中间件是一种重要的基础软件。中间件与操作系统、数据库系统并称为三大类系统软件但相比于操作系统和数据库中间件产品出现得更晚。一般认为中间件是网络环境下处于操作系统等系统软件和应用软件之间的一种起连接作用的分布式软件。1968年出现的将应用软件与系统服务分离的IBM CICS交易事务控制系统可以看作是中间件产品的萌芽。它在面向最终用户的应用功能与面向机器的系统服务之间提供了中间层的封装使得各个层次的关注点更加集中。到20世纪90年代互联网的出现使网络应用和分布式应用登上历史舞台而其中涉及通信、协同等源于异构性的大量共性问题复杂性越来越高需要专门的软件产品来处理。一般认为ATT公司贝尔实验室于1990年推出的用于解决分布式交易事务控制的Tuxedo系统是中间件产品诞生的标志是一种交易中间件也是最早的中间件。此后消息中间件、应用服务器中间件、应用集成中间件企业服务总线ESB等、业务架构中间件业务流程管理BPM等等各类中间件产品迅速发展起来。典型的中间件厂商包括国外企业IBM、Oracle、BEA等开源产品组织Apache、JBoss、JOnAs等以及国内企业金蝶、东方通、中创、普元等形成了相互竞争、相互补充的繁荣的生态格局。可见中间件产品的发展过程也是软件技术相关领域日益复杂和细分的结果。
工业软件是一类典型的面向领域的应用软件是支撑传统工业企业信息化、提升传统工业企业管理水平的重要软件产品簇。工业软件按涉及的工业业务领域可分为研发设计类软件和业务运营管理类软件。早在20世纪60年代美国的大型企业就会采购昂贵的计算机设备进行商业信息的处理。但是由于当时计算机硬件和软件之间耦合紧密软件往往是作为计算机售后的一种服务提供因此无法形成独立的产业生态圈。60年代末70年代初随着系统软件的出现通用计算机系统开始普及由此面向工业生产及其信息化的独立软件开发商开始逐渐出现。直至80年代随着更便宜的个人电脑和通用操作系统的普及企业信息化的门槛得以大幅降低软件技术开始惠及更多的行业。随着工业生产和研发复杂性提升研发领域如计算机辅助设计CAD、辅助分析CAE、辅助制造CAM、辅助工艺规划CAPP、产品数据管理PDM、产品全生命周期管理PLM等涌现了大量的商业化的软件产品为相关业务领域带来了显著的生产力优势很快在各个行业得到普及。在业务运营和管理领域早期的软件更多集中于管理信息系统MIS重点在于以数字化的形式来记录企业管理过程中产生的原始数据以及简单的业务流程。为了更好利用以手工为主的企业既有流程企业资源规划ERP等软件产品诞生逐渐形成了以计算机软件为中心的企业级管理系统。它不仅仅是对既有业务流程的自动化而是包含了诸如财务预测、生产能力、资源调度等更具有价值的软件功能同时对企业经营管理方式产生了深刻的影响。大数据和智能化时代的到来正在将业务运营管理方面的软件产业水平提升到一个新的高度。
由此可见,以产品化为特征的软件产业代表着早期桌面化的市场需求,软件企业通过软件销售的形式向各类用户提供商用的软件产品。由于软件产品复制的边际成本非常低以至于可被忽略这一完全不同于传统产业的特性,知识产权保护成为软件产业中的重要企业战略决策\cite{RePEc:unm:umamer:1995006},并且持续促进着软件技术的发展。同时,大量用户的特殊需求要求软件企业提供大量的定制功能,因此咨询与实施成为软件产品部署的重要方式,同时也促进企业采用支持可变性建模的开发方法开发面向特定领域的系列软件产品,使得产品化的软件生态更加丰富。随着云计算、移动计算等技术的发展和普及,一些以销售软件产品为主的软件企业开始向云化、服务化转型。软件产业逐步开启以服务化为特征的新阶段。
\subsection{以服务化为特征的软件产业生态}
服务化是互联网技术的产物。互联网软硬件的发展,使得依赖于拷贝安装的软件产品转变为通过网络、按需索取成为可能。软件功能进一步细分为前端以人机交互为主和后端以业务逻辑处理为主两大部分。随着大量的业务逻辑迁移到后端,对后端的计算、存储能力提出了更高的技术要求,逐步发展出了云计算技术与平台;而互联网的广泛可达能力,带来了巨量的普通用户,形成了丰富的互联网应用。
在以服务化为特征的软件产业生态中,软件的核心价值主要以网络服务的形式呈现。作为产业生态的主体,软件企业大量采用云计算技术提升用户服务能力;同时,软件的用户能够在各类终端上通过网络按需访问所需要的服务。由于软件的服务化、远程化、轻量化带来了具有良好的伸缩性和互操作性,因此,服务化的软件极大地推动了软件产业生态的繁荣。从企业而言,软件的部署和运维得到良好的控制;从用户而言,轻量化的运行提升了使用体验。受限于篇幅,本节以社交类软件和云计算服务为例介绍具有典型服务特征的新型软件产业生态。
社交类软件体现了人和人之间的连接。这一天然的人际链接的需求在互联网普及之前只能通过传统的社交方式来完成。互联网的发展使得社交活动发展到一个完全不同的高度这也催生了一大批以社交为主营业务的软件公司。社交类软件最早以即时消息服务IM的形式出现例如国外的ICQ、AIM、Skype等国内的QQ早期称为OICQ。由于和社交关系深度绑定社交软件的盈利模式非常多样同时这类软件也具有极强的粘性一旦占据优势地位就非常难于被其他软件所替代。
互联网模式的变革也为新的社交软件形态的产生带来了新的机会例如Web2.0时代的到来在线交流变得更加便捷也催生了诸如Facebook、Twitter、国内的微博等社交类网站的兴起。它们不再局限于通讯录中的固定的联系人而是使得互不相识的人际互动变得更加频繁甚至还出现了以陌生人社交为主要业务软件产品以及面向职业人士的LinkedIn等软件产品。移动互联网的兴起是另一次变革的浪潮由于智能手机的用户普及率高且便于随身携带等特点通过智能手机随时在线使用社交媒体软件成为可能。这催生了新一代的社交类产品如微信、Telegram、Line、WhatsApp等的繁荣。围绕这些应用软件形成了大量外围软件服务涉及电子商务、在线支付、招聘择业、娱乐游戏、社会信息服务等众多领域几乎涉及了社会生活的方方面面。可以说在新型软件技术的支撑下相关软件产业生态已经影响到当今社会的主要生活方式。
云计算服务是新型服务化软件背后的重要技术支撑提供了大规模并行化定制化的服务能力。其中大规模和并行化处理能力往往来自以虚拟化技术Virtualization为基础的云计算服务而定制化能力则更多依赖于21世纪初发展起来的平台即服务PaaS概念。就虚拟化软件而言其本身以产品化形式出现但对外提供服务化能力将计算机的各种实体资源如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{软件开发环境}经历了单机集成开发环境、支持协同的软件开发环境以及云开发环境等多个阶段,形成了单机集成开发环境\index{集成开发环境}和云协同开发环境\index{协同开发环境}融合的庞大产业。20世纪80年代以前软件开发环境主要是针对特定的硬件平台因此此时开发工具相关的软件还没有形成固定的产业。随着高级编程语言的出现和普及各类集成软件开发环境IDE逐渐发展起来形成了具有领域特点的产业雏形。在高级编程语言和集成开发环境的支撑下软件开发效率大大提升促进了软件产品的繁荣。20世纪80-90年代宝蓝Borland、微软Microsoft等公司推出了各自的开发工具软件形成了多种开发工具软件竞争的产业局面。随着新的操作系统和中间件的变化开发工具产业也在发生着适应性的变化。例如以C和Pascal起家的宝蓝公司在20世纪90年代末到21世纪初为了应对Java语言的广泛使用推出了JBuilder系列开发环境随着Linux的不断普及推出了Kylix随着.NET平台的广泛使用推出了支持.NET的开发工具Delphi 8以及多个后继版本直至2006年由于对服务化编程模式支持不足、定价过高等多种原因Delphi才在竞争中渐渐失去有利地位被Embarcadero收购继而由Embarcadero控制的Delphi开发环境工具为了满足服务化、跨平台的软件开发需求仍然推出新的版本通过面向移动开发和跨平台特点与微软Visual Studio .NET等工具软件竞争。可见软件技术的进步推动着软件开发工具产业的持续发展而开发工具产业生态的兴盛也支撑着软件技术的不断提升与改进。
与此同时开源集成开发环境随着Java等语言的兴起而不断发展形成以开源和协作为特色的软件产业生态并派生出特有的商业模式。Eclipse是一个典型的例子。Eclipse最初由IBM公司主导开发并于2001年开源随后转由非盈利组织Eclipse基金会管理至今。Eclipse项目架构设计灵活其开源引起了广泛的关注并得到上百家大型软件企业的参与与贡献。围绕Eclipse这个开源集成开发环境开源社区的开发者和参与开源社区贡献的软件企业纷纷为该产品开发插件并得到集成和推广。在此基础上Eclipse衍生出了MyEclipse等商用版本以及IBM Rational Software Architect等多种工具软件。此类工具面向软件开发者的不同开发需求提供不同层次的解决方案和开发环境。这类软件生态往往以开源为核心通过良好设计的、具有可扩展性的软件体系结构构展现了软件的良好生命力并且在开源环境下不断发展同时采用合适的开源许可证允许衍生出商业产品并通过商业产品的应用与开源版本实现协同的演进。
随着软件产品日益复杂开发人员的协同工作更为重要。在协同开发环境下涉及到不同的开发团队、不同的开发资源如何协调的问题。例如对协同开发的软件代码需要有相应的版本控制软件。在版本控制领域除了经典的ClearCase、Perforce等商业工具之外还产生了CVS、SubVersion等开源免费工具。由于软件开发的社会化协作程度越来越高分布式版本管理系统逐渐替代中央控制的版本管理系统成为主流。其中的典型代表是git和mercurial。社会化编程的兴起又对版本控制之外的社会化协作产生了新的需求催生了一大批诸如GitHub、Gitlab、Bitbucket、Coding等国内外的开发者社区及协作服务提供商。持续集成需要自动化构建工具的支持其中既有Bamboo等商业的持续集成工具也有Jenkins等开源免费的工具同时还存在以免费为主体、但具有某些收费高级功能或是面向开源社区免费、但面向商业应用收费的产品如Go、Travis等。此外在配置管理、自动化构建和测试、容器和服务平台、日志管理及监控和告警等领域都出现了许多具有竞争力的产品。
开发运维一体化DevOps运动的兴起则是在前述实践基础上进一步引发的更为深刻的技术和文化变革。开发和运维不再彼此独立而是建立了更流畅、更紧密的协作关系。从工具链角度不仅仅是发布活动配置、监控及最终用户反馈等环节也融入其中。因为持续集成、持续交付和开发运维一体化的工具链的端到端的特点基本上囊括了软件开发中从开发到集成交付、从基础运行环境配置到软件配置管理等各个子领域的多种工具的集合也促进了相关子领域的各工具软件产业的繁荣以及生态的兴盛。从开发者角度而言大量的开发工具和开发模式为开发者提供了多种提升开发效率和质量的技术途径同时也带来了更多的技术选择成本和学习成本。如何促进相关软件产业生态良性发展辅助开发人员更专注于需求提升开发效率和交付能力降低学习成本是一个重要的研究问题。
\section{结束语}
软件产业生态的建立、发展和繁荣已经经历了超过半个世纪。回顾这五十多年的软件产业发展历程软件产业生态的建立与软件技术的发展密不可分。随着技术的进步各类软件产品、软件企业、软件从业人员之间的竞争与合作持续发展逐步渗透入人类生活的方方面面。“软件定义一切”和“一切皆服务XaaS”为软件产业创新发展扩展了新的空间。新一代技术催生新的软件产业细分促进软件产业向其他各个产业的渗透形成基于软件的产业融合。同时传统软件企业在云计算技术的推动下加快自身的服务化转型全球软件即服务落地明显加快。软件产业的服务化、融合化特征日趋显著成为软件产业的新增长点也成为软件技术和软件学科发展的新契机。
随着越来越多行业对软件和软件技术需求的增长,软件产业将继续发展和细分,并进一步与人类社会生产生活紧密融合。软件产业的细分与服务化、融合化转型,给软件学科的研究带来了新的挑战,需要有符合产业可持续发展要求的研究内容和成果,认识并补足软件产业生态化发展的短板,从而支持和促进软件产业的持续健康发展。
% !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”为软件产业创新发展扩展了新的空间。
软件产业的发展遵循人类社会生产力发展中社会分工细化的一般规律。从软件从硬件剥离出来开始,软件的能力分工不断细化,形成各种不同类型的软件。同时,软件生产企业也不断细分,形成各个领域专业化的软件开发能力,生产出领域细分的专业软件。正是这种逐步细化的分工,促进了软件产业的发展和繁荣,使得各类软件能够以更加专业的方式研发。领域化专业化细分,是软件产业发展的总体趋势。
软件产业是新型生产力的代表,是推动社会经济和其他产业发展的重要驱动力之一。一方面,软件产业通过与业务领域的结合,向其他产业渗透,实现能力细分,服务于其他产业的发展,另一方面,其他产业通过加强软件研发投入和业务转型,实现传统企业的软件企业化,充分利用自身领域专业优势融入软件产业中,为软件产业的发展提供新的增长点。
随着各行各业对软件和软件技术需求的增长,软件产业将进一步与人类社会生产生活的方方面面紧密融合。无所不在的软件和无所不在的软件产业将给软件学科的研究带来新的挑战,需要支撑软件泛在化、软件产业融合化的研究内容和成果,认识并补足软件产业生态化发展的短板,从而支持和促进软件产业的可持续健康发展。

View File

@ -1,34 +1,33 @@
%\centerline{毛新军,魏峻,孙艳春,邓水光}
\centerline{毛新军,魏峻,孙艳春,邓水光}
~\\
学科教育基于学科的独立知识体系,宣传和普及学科知识,培养学科专业人才。学科教育是构成学科的要素之一,并受学科的发展、教育理念和方法的进步等因素的影响。近年来,随着软件学科的边界不断拓展,内涵持续变化,地位不断提升,以及对人类社会的影响面日益扩大,软件学科教育的重要性日益凸显。与此同时,随着我国经济结构的调整和升级以及以信息技术为代表的新经济的快速发展\cite{aihua2017accelerate},软件学科教育需要为国家的经济转型培养高素质的专业人才。如何加强软件学科教育,提高人才培养的质量和水平,让更多的社会大众从中受惠和受益,成为全社会关注的话题。
科教育基于学科的独立知识体系,宣传和普及学科知识,培养学科专业人才。学科教育是构成学科的要素之一,并受学科的发展、教育理念和方法的进步等因素的影响。近年来,随着软件学科的边界不断拓展,内涵持续变化,地位不断提升,以及对人类社会的影响面日益扩大,软件学科教育的重要性日益凸显。与此同时,随着我国经济结构的调整和升级以及以信息技术为代表的新经济的快速发展\cite{aihua2017fast},软件学科教育需要为国家的经济转型培养高素质的专业人才。如何加强软件学科教育,提高人才培养的质量和水平,让更多的社会大众从中受惠和受益,成为全社会关注的话题。
软件学科的研究主体是人类及其思维活动,客体是软件及其内在规律。在人机物融合时代,“软件无所不在”、“软件定义一切”使得软件成为人类社会的重要基础设施\cite{hong2018everything},软件系统的环境、边界、构成、形态、交互等发生了深刻的变化。这些变化不仅推动了软件学科的发展和进步,而且使得软件学科教育的对象、面临的挑战等也随之发生变化。
首先,随着软件的日益普及,软件对人类社会和现实世界的渗透力越来越强、影响面越来越广,受其辐射和影响的人群也越来越多,并随之产生了一系列新的问题、出现了新的价值取向,如伦理、道德、可信、隐私保护、安全等。越来越多的大众融入到了软件定义的世界(如使用微信来开展社交),甚至通过编程等方式参与软件的构造。总体而言,\textbf{软件学科与人类社会间的关系变得更为紧密,软件学科教育日趋普及化和全民化。}
其次,随着计算平台不断向物理世界和人类社会的快速延伸,软件作为“集成器”在连接物理系统和社会系统中发挥着日趋重要的作用,软件泛在化和人机物融合的趋势日益明显,软件成为诸多行业和领域(如机器人、航空、航天、生物医学等)解决其特定问题的核心手段和必不可少的工具。\textbf{这些行业、领域的专业人士需要掌握软件学科的基础知识和核心能力,学会运用软件工具来解决特定领域的问题;与此同时,软件学科的专业人才也需要向特定领域扩展和渗透,软件学科教育呈现出与其他学科教育日益交融的趋势。}
第三,软件系统变得日益复杂,并体现多元价值,传统的还原论开发方法在应对软件日益增长的复杂性方面面临着诸多挑战\cite{huaimin2014growth},需要从生态系统的角度认识软件系统及其开发和演化。随着软件学科外延的拓展和内涵的发展,软件学科需与更多的学科进行交叉。开源软件\index{开源软件}的成功以及开源文化的流行对人才培养提出了新的要求\cite{hong2017challenges, bandyopadhyay2016ict},使得软件学科教育的知识体系\cite{borque2014swebok}不断的丰富和发展,对软件专业人才的知识、能力、素质和技能等要求也随之发生变化。\textbf{软件学科教育需在知识体系层面与时俱进,需从系统观和系统能力、生态观、多元价值观等方面加强专业人才的培养。}
第三,软件系统变得日益复杂,并体现多元价值,传统的还原论开发方法在应对软件日益增长的复杂性方面面临着诸多挑战\cite{huaiming2014complex},需要从生态系统的角度认识软件系统及其开发和演化。随着软件学科外延的拓展和内涵的发展,软件学科需与更多的学科进行交叉。开源软件的成功以及开源文化的流行对人才培养提出了新的要求\cite{hong2017opensource, bandyopadhyay2016ict},使得软件学科教育的知识体系\cite{borque2014swebok}不断的丰富和发展,对软件专业人才的知识、能力、素质和技能等要求也随之发生变化。\textbf{软件学科教育需在知识体系层面与时俱进,需从系统观和系统能力、生态观、多元价值观、伦理等方面加强专业人才的培养。}
最后当前教育理念和技术的发展日新月异教育教学改革非常活跃如MOOC\index{MOOC}、SPOC\index{SPOC}、个性化学习\index{个性化学习}、学习路径推荐等,计算机软件在教育改革和人才培养中发挥着日益重要的作用。\textbf{软件学科教育需要借鉴当前先进的教育理念和方法\cite{editors2019computer},结合自身的特点和人才培养的特殊要求,利用软件学科已经积累的资源,交叉大数据分析、机器学习、数据挖掘等技术手段,研制教育软件工具,以推动软件学科教育和人才培养的改革}
最后当前教育理念和技术的发展日新月异教育教学改革非常活跃如MOOC、SPOC、个性化学习、学习路径推荐等计算机软件在教育改革和人才培养中发挥着日益重要的作用。\textbf{软件学科教育需要借鉴当前先进的教育理念和方法\cite{computerEducation},结合自身的特点和人才培养的特殊要求,利用软件学科已经积累的资源,交叉大数据分析、机器学习、数据挖掘等技术手段,研制教育软件工具,以推动软件学科教育和人才培养的改革}
概括起来,软件学科作为基础学科,其教育的影响面大,面临挑战多,需要推动普及教育,加强跨学科教育\index{跨学科教育},深化专业教育\index{专业教育},重视人才培养理念和教育方法的改革,促进软件伦理制度的建设及宣传教育
概括起来,软件学科作为基础学科,其教育的影响面大,面临挑战多,需要推动普及教育,加强跨学科教育,深化专业教育,重视人才培养理念和教育方法的改革,促进软件伦理建设。
\section{重大挑战问题}
为了适应人机物融合时代软件学科的发展以及人才培养的需求,软件学科教育在普及教育(§\ref{subsection:10_1_1})、跨学科教育\index{跨学科教育}\ref{subsection:10_1_2})、专业教育\index{专业教育}\ref{subsection:10_1_3})、教育理念和方法改革(§\ref{subsection:10_1_4})、软件伦理制度建设和宣传教育\ref{subsection:10_1_5})等面临一系列的重大挑战问题。
为了适应人机物融合时代软件学科的发展以及人才培养的需求,软件学科教育在普及教育(§\ref{subsection:10_1_1})、跨学科教育(§\ref{subsection:10_1_2})、专业教育(§\ref{subsection:10_1_3})、教育理念和方法改革(§\ref{subsection:10_1_4})、软件伦理建设(§\ref{subsection:10_1_5})等面临一系列的重大挑战问题。
\subsection{普及教育问题}
\label{subsection:10_1_1}
在人机物融合时代,软件不仅是人类社会的基础设施,而且正成为承载人类文明的新载体。如何做好现代软件文明的继承者、传播者和创作者,软件学科教育必须顺应这一时代要求,从单一性的专业教育向大众化的通识教育转变,即惠及普通大众,从儿童、少年、青年、中年到老年\cite{xiaoming2014imagination},人人能用软件,人人能评软件,人人能读软件,人人能写软件。
在人机物融合时代,软件不仅是人类社会的基础设施,而且正成为承载人类文明的新载体。如何做好现代软件文明的继承者、传播者和创作者,软件学科教育必须顺应这一时代要求,从单一性的专业教育向大众化的通识教育转变,即惠及普通大众,从儿童、少年、青年、中年到老年\cite{xiaoming2019older},人人能用软件,人人能评软件,人人能读软件,人人能写软件。
\begin{itemize}
\item[$\bullet$] \textbf{如何培养以计算思维\index{计算思维}为核心,融合创新思维\index{创新思维}的系统性认知能力\index{认知能力}}
\item[$\bullet$] \textbf{如何培养以计算思维为核心,融合创新思维的系统性认知能力}
\end{itemize}
软件是人类智力活动的创作结果。软件学科普及教育首先需要解决社会大众(尤其是青少年)针对软件及其开发的系统化认知问题。从系统观的视角上看,软件学科的核心认知能力是计算思维,它是信息社会中现代人的基本素养,也是人类诸多认知能力的核心要素之一\cite{wing2014computational, grover20185th}。从内涵上看,计算思维能力绝不仅仅是编程技能,也不纯粹是掌握某些程序设计语言,还包括应用软件来创新解决问题以及由此所需的创新思维能力。现阶段软件已渗透到自然科学、工程技术、社会人文等方方面面,计算思维与其他认知能力(如批判思维、创新思维等)相互作用,相互影响,不可分离。软件学科教育要突出软件作为“集成器”在连接物理系统和社会系统中的关键作用,强化通过软件来解决各种实际问题的思维训练。为此,软件学科的普及教育需要充分揭示计算思维能力与其他认知能力之间的关系,深化以计算思维、创新思维为核心的普及教育,提高大众的系统化认知能力。现阶段,软件学科的普及教育还是以编程技能培养为主,我们对计算思维与创新思维二者相互作用的认识还不够深入,无法满足软件学科普及性教育的需要。
软件是人类智力活动的创作结果。软件学科普及教育首先需要解决社会大众(尤其是青少年)针对软件及其开发的系统化认知问题。从系统观的视角上看,软件学科的核心认知能力是计算思维,它是信息社会中现代人的基本素养,也是人类诸多认知能力的核心要素之一\cite{wing2014computational, grover20185th}。从内涵上看,计算思维能力绝不仅仅是编程技能,也不纯粹是掌握某些程序设计语言,而且还包括应用软件来创新解决问题以及由此所需的创新思维能力。现阶段软件已渗透到自然科学、工程技术、社会人文等方方面面,计算思维与其他认知能力(如批判思维、创新思维等)相互作用,相互影响,不可分离。软件学科教育要突出软件作为“集成器”在连接物理系统和社会系统中的关键作用,强化通过软件来解决各种实际问题的思维训练。为此,软件学科的普及教育需要充分揭示计算思维能力与其他认知能力之间的关系,深化以计算思维、创新思维为核心的普及教育,提高大众的系统化认知能力。现阶段,软件学科的普及教育还是以编程技能培养为主,我们对计算思维与创新思维二者相互作用的认识还不够深入,无法满足软件学科普及性教育的需要。
\begin{itemize}
\item[$\bullet$] \textbf{不同教育受众认知能力的成长有何规律,如何构建适应不同受众的普及教育知识体系}
@ -50,17 +49,18 @@
\item[$\bullet$] \textbf{如何实现软件学科知识体系与其它学科专业知识体系的融合}
\end{itemize}
现有的许多学科与软件学科关系紧密,但在教育层面,它们很少融合软件学科的知识体系。随着软件学科的日趋泛在化以及对各个领域、行业和专业的不断渗透,以及社会对复合型人才\index{复合型人才}、创新型人才的迫切需求,如何把软件学科的相关知识体系融入到非软件学科(如航空、航天、机器人、新材料等)的知识体系中,或者让软件学科的人才融入到其他学科领域之中,构建跨专业、多学科交叉的融合性知识体系,将成为软件学科教育和其它非软件学科教育面临的一项重大挑战。
现有的许多学科与软件学科关系紧密,但在教育层面,它们很少融合软件学科的知识体系。随着软件学科的日趋泛在化以及对各个领域、行业和专业的不断渗透,以及社会对复合型、创新型人才的迫切需求,如何把软件学科的相关知识体系融入到非软件学科(如航空、航天、机器人、新材料等)的知识体系中,或者让软件学科的人才融入到其他学科领域之中,构建跨专业、多学科交叉的融合性知识体系,将成为软件学科教育和其它非软件学科教育面临的一项重大挑战。
其他学科教育需要借鉴和引入“软件定义+计算思维”的理念,使得相关专业人才具备利用软件学科的思维方法解决专业特定问题的能力,这种新的融合性教学模式能够充分发挥软件学科的优势和专业特长,有利于激励学生探索交叉学科的新领域,促进学生能力和素质的全面发展。实现“非软件学科 + 软件学科”相融合的教育改革,既是当前诸多专业教育面临的机遇,也是它们必须应对的挑战。针对相关学科专业(如农业、气象、生物医学、现代服务业等)的人才培养,在保障以本学科专业为主导的前提下,如何加强软件学科相关知识的学习和能力的培养,如何调整培养方案和知识体系,完成从“专业型”到“融合型”学科培养方式的转型,是当前非软件学科教育亟待解决的问题。
当前各大高校设置了包含软件学科知识的公共基础课程(如大学计算机基础、计算机导论、计算机程序设计等),以帮助相关学科和专业的学生建立起初步的计算思维和编程能力,但是统一的授课内容导致软件学科知识与其他学科专业学科知识脱节,没有考虑不同学科和专业培养目标和应用需求的差异性,未能实现针对不同学科专业人才培养特点和要求的个性化和差异化教学,尤其是缺乏软件学科与其他学科相结合的优秀教学案例。
当前各大高校设置了介绍软件学科知识的公共基础课程(如大学计算机基础、计算机导论、计算机程序设计等),以帮助相关学科和专业的学生建立起初步的计算思维和编程能力,但是统一的授课内容导致软件学科知识与其他学科知识脱节,没有考虑不同学科和专业培养目标和应用需求的差异性,未能实现个性化和差异化教学,尤其是缺乏软件学科与其他学科相结合的优秀教学案例。
\begin{itemize}
\item[$\bullet$] \textbf{如何培养具有软件学科知识和能力的复合型、创新型跨界专业人才}
\end{itemize}
随着行业软件化转型需求的不断增长,诸多学科和专业与软件学科的融合日趋紧密,迫切需要具有软件学科知识的复合型、创新型跨界专业人才。然而,现有的许多专业人才培养尚无法满足这一需求,极大制约了相关行业的转型、专业和学科的发展,导致这种状况的原因是多方面的:一些非软件学科的专业人才培养直接将软件学科中的某些先进软件技术套用到相关专业领域之中,并没有系统地考虑这些技术在跨界专业领域中的实用性以及软件应用需求的特殊性;它们更多地关注于自身专业领域的相关知识和能力,忽视和错失了软件学科的知识和技术给专业领域问题的解决带来的新机遇。因此,如何培养具有软件学科知识和能力的复合型、创新型跨界专业人才\index{跨界专业人才},将是诸多专业和学科教育面临的重大机遇和挑战。在现有的人才培养体系下,我们应该深入思考如何在掌握专业基础知识的同时,将软件学科的知识与相关专业学科的知识相交叉和融合,实现从单一专业人才到跨界复合型、创新型人才的转变,满足人机物融合时代对复合型、创新型人才的巨大需求。
随着行业软件化转型需求的不断增长,诸多学科和专业与软件学科的融合日趋紧密,迫切需要具有软件学科知识的复合型、创新型跨界专业人才。然而,现有的许多专业人才培养尚无法满足这一需求,极大制约了相关行业的转型、专业和学科的发展,导致这种状况的原因是多方面的:一些非软件学科的专业人才培养直接将软件学科中的某些先进软件技术套用到相关专业领域之中,并没有系统地考虑这些技术在跨界专业领域中的实用性以及软件应用需求的特殊性;它们更多地关注于自身专业领域的相关知识和能力,忽视和错失了软件学科的知识和技术给专业领域问题的解决带来的新机遇。因此,如何培养具有软件学科知识和能力的复合型、创新型跨界专业人才,将是诸多专业和学科教育面临的重大机遇和挑战。在现有的人才培养体系下,我们应该深入思考如何在掌握专业基础知识的同时,将软件学科的知识与相关专业学科的知识相交叉和融合,实现从单一专业人才到跨界复合型、创新型人才的转变,满足人机物融合时代对复合型、创新型人才的巨大需求。
\subsection{专业教育问题}
\label{subsection:10_1_3}
@ -70,16 +70,15 @@
\item[$\bullet$] \textbf{如何认识人机物融合时代对软件学科专业能力提出的新要求?}
\end{itemize}
在人机物融合时代,由于软件系统自身形态、复杂性、价值观等发生了深刻的变化。软件学科教育需要从提升可持续核心竞争力的角度加强专业人才的能力和素质培养\cite{editors2019computer}
在人机物融合时代,由于软件系统自身形态、复杂性、价值观等发生了深刻的变化。软件学科教育需要从提升可持续核心竞争力的角度加强专业人才的能力和素质培养\cite{computerEducation}
复杂庞大的软件系统在人类社会的诸多领域发挥着日益重要的作用和影响,如银行金融、城市服务、国防军事、电力通讯等等。这类系统不仅在基本形态、运维方式、质量要求等方面有其特殊性,而且在支持这类系统建设的软件开发隐喻、软件生态环境、元级方法论等也呈现出新的特点。软件学科教育迫切地需要培养能够掌握和驾驭这类软件系统开发和运维的人才。
从系统观的视角,人机物融合时代的软件系统已不再是纯粹的技术系统,而是需要与物理世界、社会系统等进行高度融合。这类系统的开发需要采用系统论方法(而非还原论方法)来驾驭复杂性,要从“人机物”相互融合的角度和层次来认识软件系统的构成,要将软件视为融合人机物的“万能集成器”;需要从横向(系统的联盟)和纵向(系统的层次)、高层、宏观、全局等视角来分析系统的构成及考虑系统的设计,需要站在系统的高度综合考虑人、机、物之间的关系,通过人、机、物三者间的协同给出软件系统的解决方案,即软件学科专业人才需要具备“系统能力”。
从系统观的视角,人机物融合时代的软件系统已不再是纯粹的技术系统,而是需要与物理世界、社会系统等进行高度融合。这类系统的开发需要采用系统论方法(而非还原论方法)来驾驭复杂性,要从“人机物”相互融合的角度和层次来认识软件系统的构成,要将软件视为融合人机物的“万能集成器”;需要从横向(系统的联盟)和纵向(系统的层次)、高层、宏观、全局等视角来分析系统的构成及考虑系统的设计,需要站在系统的高度综合考虑人、机、物之间的关系,通过人、机、物三者间的协同给出软件系统的解决方案,即软件学科专业人才需要具备“系统能力”。
人机物融合时代的软件系统呈现出新的特点,软件规模超大(如几亿甚至十几亿行代码)、软件需求不清晰且持续变化,软件系统表现为一类系统之系统而非单一系统、动态演化系统而非静态确定系统、社会技术系统而非纯粹技术系统\cite{sommerville2011large, northrop2006ultra}等等。因此,软件形态和复杂性的变化以及软件学科范畴的拓展对软件学科专业人才的能力和素质提出了更高的要求,他们需要具备解决人机物融合时代背景下的解决复杂工程问题的能力,这种能力需建立多学科知识的基础之上,以应对人机物融合带来的各种问题和挑战。
人机物融合时代软件开发的方式和手段也在发生深刻的变化。例如,建设开源生态、借助开源软件、利用群智开发等成为重要的趋势,开源软件已成为世界信息技术及产业发展的重要方向。然而,当前开源软件人才的培养及供应无论在质或量上均存在较大不足\cite{hong2017challenges}。此外,软件学科教育需要深入地探究如何有效地利用海量、多样、高质量的开源软件和群智资源来培养软件学科人才\cite{xinjun2019soft}
人机物融合时代的软件系统也呈现出新的特点,软件规模超大(如几亿甚至十几亿行代码)、软件需求不清晰且持续变化,软件系统表现为一类系统之系统而非单一系统、动态演化系统而非静态确定系统、社会技术系统而非纯粹技术系统\cite{sommerville2012large,northrop2006ultra}等等。因此,软件形态和复杂性的变化以及软件学科范畴的拓展对软件学科专业人才的能力和素质提出了更高的要求,他们需要具备解决人机物融合时代背景下的解决复杂工程问题的能力,这种能力需建立多学科知识的基础之上,以应对人机物融合带来的各种问题和挑战。
在人机物融合时代,软件开发方式和手段也在发生深刻的变化。例如,建设开源生态、借助开源软件、利用群智开发等成为重要的趋势,开源软件已成为信息技术及产业发展的重要方向。然而,当前开源软件人才的培养无论在质或量上均存在较大不足\cite{hong2017opensource}。此外,软件学科教育需要深入地探究如何有效地利用海量、多样、高质量的开源软件和群智资源来培养软件学科人才\cite{xinjun2019software}
\begin{itemize}
\item[$\bullet$] \textbf{如何构建与人机物融合时代软件学科特点相适应的专业知识体系?}
@ -95,7 +94,7 @@
\item[$\bullet$] \textbf{如何借助软件学科成果来加强软件学科教育?}
\end{itemize}
在几十年的发展过程中,软件学科领域积累了丰富、多样和海量的资源,包括代码、模型、文档、数据、开发知识、工具等等。尤其是近年来,随着开源软件、群智开发、软件开发知识分享等的快速发展,互联网上的开源社区汇聚了大量的软件资源和开发数据。这既给软件学科教育创造了条件、提供了机会和奠定了“物质”基础,同时也给软件学科教育提出了新的问题和挑战\cite{xinjun2019soft}:如何借助这些软件资源来深入探究软件学科人才(如软件工程师)的成长轨迹和培养路径?如何有效利用这些软件资源来支持软件学科的教育、促进软件人才的培养?
在几十年的发展过程中,软件学科领域积累了丰富、多样和海量的资源,包括代码、模型、文档、数据、开发知识、工具等等。尤其是近年来,随着开源软件、群智开发、软件开发知识分享等的快速发展,互联网上的开源社区汇聚了大量的软件资源和开发数据。这既给软件学科教育创造了条件、提供了机会和奠定了“物质”基础,同时也给软件学科教育提出了新的问题和挑战\cite{xinjun2019software}:如何借助这些软件资源来深入探究软件学科人才(如软件工程师)的成长轨迹和培养路径?如何有效利用这些软件资源来支持软件学科的教育、促进软件人才的培养?
\begin{itemize}
\item[$\bullet$] \textbf{如何顺应教育理念和方法的发展来改革软件学科教育的方式和手段?}
@ -109,7 +108,7 @@
软件可为特定领域的问题提供基于计算平台的解决方案。软件学科教育也是一个特殊的应用领域,它涉及与教育有关的诸多问题的解决,如教育资源的组织、分享和推荐,学习者的交互和协同,教育成效的考核和评估等等。因此,如何为软件学科教育提供支撑软件成为一个开放性的问题。
\subsection{软件伦理制度建设及教育问题}
\subsection{软件伦理建设问题}
\label{subsection:10_1_5}
\begin{figure}[!b]
\centering
@ -118,12 +117,12 @@
\label{fig:fig2_10_1}
\end{figure}
在人机物融合时代,计算机软件对人类社会的方方面面产生了重大和深远的影响,也带来一些深层次、前所未有的风险和问题,如私密数据被窃取、软件留有后门、系统受到攻击等等。我们社会还没有建立起针对这些风险和问题的伦理准则和法律体系;软件研究者、开发者和使用者的行为缺乏相关的约束,也没有有效和高效的监管手段,以确保其遵守和履行法律、道德和伦理规范。软件伦理教育\index{软件伦理教育}没有得到国家、社会和行业等的足够重视,也没有普及。缺乏软件专业背景的其他学科专家和一般大众很难从系统外部及时感知和发现潜在的软件伦理问题。自动化、智能化甚至量子化软件新技术的发展及应用将给人类社会带来更多的未知,评估它们对人类社会未来的长远影响需要对技术本身以及可能的应用场景有深入的理解,以及足够的前瞻预测能力。
在人机物融合时代,计算机软件对人类社会的方方面面产生了重大和深远的影响,也带来一些深层次、前所未有的风险和问题,如私密数据被窃取、软件留有后门、系统受到攻击等等。我们社会还没有建立起针对这些风险和问题的伦理准则和法律体系;软件研究者、开发者和使用者的行为缺乏约束,也没有有效和高效的监管手段,以确保其遵守和履行法律、道德和伦理规范。软件伦理教育没有得到国家、社会和行业、公众等的足够重视。缺乏软件专业背景的人员和大众很难从系统外部及时感知和发现潜在的软件伦理问题。自动化、智能化甚至量子化软件新技术的发展及应用将给人类社会带来更多的未知,评估它们对人类社会产生的长远影响需要对技术本身以及潜在的应用场景有深入的理解,以及足够的前瞻预测能力。
\section{主要研究内容}
针对上述重大挑战问题,软件学科教育需要开展以下诸多方面的研究工作,包括:以“知识普及 + 思维培养”为核心的普及教育(§\ref{subsection:10_2_1});以“复合型 + 创新型”为目的的跨学科教育(§\ref{subsection:10_2_2});以“知识体系 + 能力培养”为核心的专业教育(§\ref{subsection:10_2_3});以“探究规律 + 方法创新 ”为主体的教育理念和方法改革(§\ref{subsection:10_2_4});以及以“健全制度 + 加强监督”为核心的软件伦理建设、治理和教育(§\ref{subsection:10_2_5})。
针对上述重大挑战问题,软件学科教育需要开展以下诸多方面的研究工作,包括:以“知识普及 + 思维培养”为核心的普及教育(§\ref{subsection:10_2_1});以“复合型 + 创新型”为目的的跨学科教育(§\ref{subsection:10_2_2});以“知识体系能力培养”为核心的专业教育(§\ref{subsection:10_2_3});以“探究规律 + 方法创新 ”为主体的教育理念和方法改革(§\ref{subsection:10_2_4});以“规范内涵 + 自动检测”为核心的软件伦理建设(§\ref{subsection:10_2_5})。
@ -133,10 +132,10 @@
\item[$\bullet$] \textbf{软件学科核心认知能力的成长模型和规律及其知识体系}
\end{itemize}
软件学科的认知能力以计算思维为核心,包含抽象思维、表达交流、逻辑分析和推理、计算抽象等这些能力有其各自的特殊性,相互间存在依赖性。为此,需要深入研究以计算思维能力为核心的认知能力成长模型,探究不同受众认知能力的成长规律。与此同时,这些能力培养所需的知识潜藏在数学、语文、物理、化学、自然科学等课程的知识体系之中。软件学科认知能力的培养和上述知识之间存在横切关系,代表这些知识体系的课程很少与实际的软件及其开发相关联。因此,需要从横切和纵切二个方面,探究并建立起支撑软件学科核心认知能力培养的知识体系。
软件学科的认知能力以计算思维为核心,包含抽象思维、表达交流、逻辑分析和推理、计算抽象等这些能力有其各自的特殊性,相互间存在依赖性。为此,需要深入研究以计算思维能力为核心的认知能力成长模型,探究不同受众认知能力的成长规律。与此同时,这些能力培养所需的知识潜藏在数学、语文、物理、化学、自然科学等课程的知识体系之中。软件学科认知能力的培养和上述知识之间存在横切关系,代表这些知识体系的课程很少与实际的软件及其开发相关联。因此,需要从横切和纵切二个方面,探究并建立起支撑软件学科核心认知能力培养的知识体系。
\begin{itemize}
\item[$\bullet$] \textbf{以计算思维为核心,融合\index{创新思维}的系统化\index{认知能力}培养方法}
\item[$\bullet$] \textbf{以计算思维为核心,融合创新思维的系统化认知能力培养方法}
\end{itemize}
人机物融合时代,软件使能的创新是软件学科辐射影响的主要目标,软件学科教育要在培养计算思维能力的同时,强化基于软件来解决问题的创新思维能力的培养。因此,我们需要研究如何将“计算思维”与“创新思维”二者相结合来深化软件学科的普及教育,探究“计算思维+创新思维”融合培养的学习路径,建立起支撑“计算思维 + 创新思维”培养的方法和手段。
@ -145,7 +144,7 @@
\item[$\bullet$] \textbf{适应不同认知水平且贯穿终生的软件学科普及教育方法}
\end{itemize}
软件学科普及教育受众的专业和知识背景具有多样化的特点,年龄层次和认知水平有较大的差异性。为此,需要借鉴生态化发展的思路,研究与教育对象的生理、心理和认知相适应的教育教学方法;研究同质生态教育方法和异质生态关联的迁移教育方法;研究如何借助于信息系统(尤其是软件系统)来支持和推广软件学科的普及教育。
普及教育受众的专业和知识背景具有多样化的特点,年龄层次和认知水平有较大的差异性。为此,需要借鉴生态化发展的思路,研究与教育对象的生理、心理和认知相适应的教育教学方法;研究同质生态教育方法和异质生态关联的迁移教育方法;研究如何借助于信息系统(尤其是软件系统)来支持和推广软件学科的普及教育。
\subsection{以“复合型 + 创新型”为目标的跨学科教育}
\label{subsection:10_2_2}
@ -159,139 +158,75 @@
\item[$\bullet$] \textbf{具有软件学科知识和能力的复合型、创新型和跨界专业人才培养方法}
\end{itemize}
随着软件学科在其他专业领域的不断渗透,在这些学科专业人才培养方案的设计中,必须解决软件学科知识储备不足的问题。由于专业背景和专业思维的差异性,不同学科专业教育对软件学科知识结构的需求和相关课程衔接也不尽相同,因此跨界的软件学科人才培养需要多元化的知识和课程体系,为此需要探究如何实施“因材施教”的教学理念,分析不同专业对软件学科的“个性化”需求,构建专业软件化的新型课程体系,设计差异化的跨界软件学科人才培养方案,以实现软件学科和其他相关学科专业交叉融合,让非软件专业的学生也具备软件学科的思维能力来解决本学科专业的问题,以满足社会对复合型、创新型的跨界软件学科人才的需求。
随着软件学科在其他专业领域的不断渗透,在这些学科专业人才培养方案的设计中,必须解决软件学科知识储备不足的问题。由于专业背景和专业思维的差异性,不同学科专业教育对软件学科知识结构的需求和相关课程衔接也不尽相同,因此跨界的软件学科人才培养需要多元化的知识和课程体系,为此需要探究如何实施“因材施教”的教学理念,分析不同专业对软件学科的“个性化”需求,构建专业软件化的新型课程体系,设计差异化的跨界软件学科人才培养方案,以实现软件学科和其他相关学科专业交叉融合,让非软件专业的学生也具备软件学科的思维能力,以满足社会对复合型、创新型的跨界软件学科人才的需求。
软件学科的跨界人才培养也是双向的。软件学科跨界进入其他学科领域的发展趋势愈发明显。在该形式的跨界教育中,教育对象已具备良好的计算思维能力,需要研究他们如何需要跳出软件学科知识领域的思维定势,强化跨界学科知识的学习,如何以全新的视角建立起软件学科与其他学科间的关联性,探索跨界学科计算的本质,培养适用于跨界专业的计算思维能力。
软件学科的跨界人才培养也是双向的。软件学科跨界进入其他学科领域的发展趋势愈发明显。在该形式的跨界教育中,教育对象已具备良好的计算思维能力,需要研究他们如何跳出软件学科知识领域的思维定势,强化跨界学科知识的学习,如何以全新的视角建立起软件学科与其他学科间的关联性,探索跨界学科计算的本质,培养适用于跨界专业的计算思维能力。
\subsection{以“知识体系 能力培养”为核心的专业教育}
\label{subsection:10_2_3}
\begin{itemize}
\item[$\bullet$] \textbf{面向多学科交叉融合的软件学科专业教育知识体系}
\item[$\bullet$] \textbf{面向多学科交叉融合的软件学科专业教育知识体系}
\end{itemize}
针对人机物融合时代的软件学科特点和人才培养要求,深入研究软件学科与哪些相关学科发生了交叉、交叉的边界和范围是什么;人们对软件的价值取向发生了什么样的变化,这些变化对学科的知识体系提出了什么样的要求;软件学科自身发展带来哪些方面的变化,这些变化处于知识体系的哪些层次和方面。另外,还需要从软件学科专业人才能力培养的视点,探讨系统能力、解决复杂工程问题能力的培养对知识体系提出什么要的要求。在此基础上,研究并建立起人机物融合时代面向多学科交叉融合的软件学科专业教育的知识体系,包括知识领域、知识单元、知识点等。
针对人机物融合时代的软件学科特点和人才培养要求,深入研究软件学科与哪些相关学科发生了交叉、交叉的边界和范围是什么;人们对软件的价值取向发生了什么样的变化,这些变化对学科的知识体系提出了什么样的要求;软件学科自身发展带来哪些方面的变化,这些变化处于知识体系的哪些层次和方面;需要研究如何根据产业界的成功实践以及学术界的研究成果来丰富和完善软件学科的知识体系。另外,还需要从软件学科专业人才能力培养的视点,探讨系统能力、解决复杂工程问题能力的培养对知识体系提出什么要的要求。在上述研究的基础上,建立起人机物融合时代面向多学科交叉融合的软件学科专业教育的知识体系,包括知识领域、知识单元、知识点等。
\begin{itemize}
\item[$\bullet$] \textbf{软件学科专业教育核心能力的培养方法}
\item[$\bullet$] \textbf{软件学科专业教育的核心能力及其培养方法}
\end{itemize}
系统能力、解决复杂工程问题能力等是人机物融合时代软件学科专业教育的核心能力。这类能力的关注点和侧重点有所不同,培养方式和手段也不尽相同。实践无疑是专业教育环节中支撑能力培养的主要手段。为此需要深入研究系统能力和解决复杂工程问题能力的内涵、构成和模型,分析不同能力之间的内在关联性,探究能力持续性培养和形成的特点和规律性,探究如何通过渐进式、综合性的实践教学来促进系统能力和解决复杂工程问题能力的培养,以及针对能力培养的考评方法。
创新实践能力、系统能力、解决复杂工程问题能力等是人机物融合时代软件学科专业教育的核心能力。这类能力的关注点和侧重点有所不同,培养方式和手段也不尽相同。实践无疑是专业教育环节中支撑能力培养的主要手段。为此需要在软件学科的范畴中深入研究创新实践能力、系统能力和解决复杂工程问题能力的内涵、构成和模型,分析不同能力之间的内在关联性,探究能力持续性培养和形成的特点和规律性,探究如何通过渐进式、综合性的实践来促进这三类能力的培养,以及针对能力培养的考评方式和方法。
\begin{itemize}
\item[$\bullet$] \textbf{开源文化教育及开源人才培养}
\end{itemize}
探究开源模式对软件开发人员的能力需求,将开源文化(如开源历史、开源共识及开源社区的治理规则等)、开源软件及开源社区和生态等内容有机地融入到软件学科专业的知识体系及教学和实践环节之中,研究促进开源意识、开源技能培养的教育方法和手段,积极开展基于开源和群智的教育和教学改革,建立起支撑软件学科人才培养的开源资源。
\subsection{以“探究规律 + 方法创新”为主体的教育理念和方法改革}
\subsection{以“探寻规律 + 方法创新”为主体的教育理念和方法改革}
\label{subsection:10_2_4}
\begin{itemize}
\item[$\bullet$] \textbf{软件学科人才培养模型及规律}
\end{itemize}
软件学科教育对象的涉及面广,年龄层次和知识背景差异性大,培养的目的和要求多样化。软件学科教育牵涉多方面的专业和非专业知识,需要强化不同层次的能力和素质培养。这些知识、能力和素质之间存在内在的关联性。为此,软件学科教育需要针对不同的培养对象和培养目标,深入探究人才培养模型,包括知识体系、能力体系、工程素质等,分析它们在培养过程中所发挥的作用以及相互之间的继承性和依赖性。此外,软件学科人才的成长受多方面因素的影响,包括自身的素质和能力,外在的教育者及合作群体,学习的环境和激励机制,甚至学习过程中所依赖的软件平台(如开源社区)等。为此,需要探究软件学科人才的成长规模,以此来指导教育政策和机制的设计以及平台的建设。
软件学科教育对象的涉及面广,年龄层次和知识背景差异性大,培养的目的和要求多样化。软件学科教育牵涉多方面的专业和非专业知识,需要强化不同层次的能力和素质培养。这些知识、能力和素质之间存在内在的关联性。为此,软件学科教育需要针对不同的培养对象和目标,深入探究人才培养模型,包括知识体系、能力体系、工程素质等,分析它们在培养过程中所发挥的作用以及相互之间的继承性和依赖性。此外,软件学科人才的成长受多方面因素的影响,包括自身的素质和能力,外在的教育者及合作群体,学习的环境和激励机制,甚至学习过程中所依赖的软件平台(如开源社区)等。为此,需要研究软件学科人才的成长模型,依此来指导教育政策和机制的设计以及平台的建设。
\begin{itemize}
\item[$\bullet$] \textbf{软件学科资源在人才培养中的挖掘和应用}
\item[$\bullet$] \textbf{软件学科资源在人才培养中的挖掘和应用 }
\end{itemize}
经过几十年的积累,尤其是近年来开源软件、群智软件开发等的发展,软件学科积累了大量、多样、极有价值的软件资源,如以开源社区为载体的开源代码、知识问答、软件开发历史数据等。软件学科教育需要深入挖掘和利用软件学科资源在教育中的价值,系统研究如何在课程教学、实践教学和人才培养过程中有效地应用这些资源,如何将抽象的知识与具体的资源相结合来促进知识的理解和掌握、推动实践教学、培养能力和素养
经过几十年的积累,尤其是近年来开源软件、群智软件开发等的发展,软件学科积累了大量、多样、极有价值的软件资源,如以开源社区为载体的开源代码、知识问答、软件开发历史数据等。软件学科教育需要深入挖掘软件学科资源,系统研究如何在课程教学、实践教学和人才培养过程中有效地应用这些资源,如何将抽象的知识与具体的资源相结合来促进知识的讲授、推动实践教学、培养能力和素养,如何建立起支撑软件学科人才培养的开源教育资源
\begin{itemize}
\item[$\bullet$] \textbf{群体化学习\index{群体化学习}}
\item[$\bullet$] \textbf{群体化学习}
\end{itemize}
借助互联网平台,通过吸引、汇聚和管理大规模的学习者,使得他们以竞争和合作等多种自主协同方式来开展学习将是未来重要学习方式,我们称之为群体化学习。软件学科教育需要充分借助于互联网大众的智慧和理念,施行群体化学习的思想,以促进软件学科人才的大规模、高质量、普及化的培养。为此,基于群智理论和方法的指导,借助于互联网上的大数据分析,需要研究支持群体化学习的组织结构和协同模型,分析和设计群体化学习的激励机制,探究不同组织结构、协同模型和激励机制对群体化学习成效、质量和受益面等产生的影响及涌现结果。
借助互联网平台,通过吸引、汇聚和管理大规模的学习者,使得他们以竞争和合作等多种自主协同方式来开展学习将是未来重要学习方式,我们称之为群体化学习。软件学科教育需要充分借助于互联网大众的智慧和理念,施行群体化学习的思想,以促进软件学科人才的大规模、高质量、普及化的培养。为此,基于群智理论和方法,借助于互联网上的大数据分析,研究支持群体化学习的组织结构和协同模型,分析和设计群体化学习的激励机制,探究不同组织结构、协同模型和激励机制对群体化学习成效、质量和受益面等产生的影响及涌现结果,开展基于群体化学习的教育和教学方法的改革
\begin{itemize}
\item[$\bullet$] \textbf{大规模在线开放实践MOOP\index{大规模在线开放实践MOOP}}
\item[$\bullet$] \textbf{大规模在线开放实践MOOP}
\end{itemize}
能力和素质培养是软件学科教育的一项主要任务。针对软件学科的发展特点需要研究软件学科人才的能力和素质模型建立不同能力和素质之间的关系分析普及教育、专业教育、跨学科教育等分别需要达到什么样的水平和层次探究软件学科内涵的拓展如何影响能力和素质。实践是支撑能力和素质培养的主要教学途径。依托大规模人群的在线开放实践称为MOOP将成为能力和素质培养的重要趋势也是对MOOC在该方面存在欠缺的有效弥补。为此需要研究支撑能力和素质培养的实践体系建设探究如何将诸如游戏化机制等引入到MOOP之中以激励大众参与和贡献分析针对MOOP的量化表示与评测方法建立起针对能力和素质培养的\index{评价体系}评价指标。
能力和素质培养是软件学科教育的一项主要任务。针对软件学科的发展特点需要研究软件学科人才的能力和素质模型建立不同能力和素质之间的关系分析普及教育、专业教育、跨学科教育等分别需要达到什么样的水平和层次探究软件学科内涵的拓展如何影响能力和素质。实践是支撑能力和素质培养的主要教学途径。依托大规模人群的在线开放实践称为MOOP将成为能力和素质培养的重要趋势也是对MOOC在该方面存在欠缺的有效弥补。为此需要研究支撑能力和素质培养的实践体系建设探究如何将诸如游戏化机制等引入到MOOP之中以激励大众参与和贡献分析针对MOOP的量化表示与评测方法建立起针对能力和素质培养的评价体系与指标。
\begin{itemize}
\item[$\bullet$] \textbf{支撑软件学科教育的软件工具}
\item[$\bullet$] \textbf{支撑软件学科教育的软件系统}
\end{itemize}
针对软件学科教育的特殊需求,借助于软件学科资源大数据,交叉诸如人工智能、大数据分析、移动计算等技术,研究支撑软件学科教育的关键软件技术,包括开源社区中学习资源(如开源软件和软件开发知识)的同步和分享技术,针对学习者个性化特点及需求的教育资源推荐技术,实现教育软件与开源社区间互操作和交互技术,基于教育大数据来构建学习者个性化学习\index{个性化学习}路径的方法,对学习者的学习情况和成长进行跟踪和考评的技术等等,并在此基础上研发软件学科教育软件。
针对软件学科教育的特殊需求,借助于软件学科资源大数据,交叉诸如人工智能、大数据分析、移动计算等技术,研究支撑软件学科教育的关键软件技术,包括开源社区中学习资源(如开源软件和软件开发知识)的同步和分享技术,针对学习者个性化特点及需求的教育资源推荐技术,实现教育软件与开源社区间互操作和交互技术,基于教育大数据来构建学习者个性化学习路径的方法,对学习者的学习情况和成长进行跟踪和考评的技术等等,并在此基础上研发软件学科教育软件。
\subsection{以“健全制度 + 加强监督”为核心的软件伦理建设、治理和教育}
\subsection{以“规范内涵 + 自动检测”为核心的软件伦理建设}
\label{subsection:10_2_5}
\begin{itemize}
\item[$\bullet$] \textbf{制定软件领域法律法规,加强软件伦理的制度化建设}
\item[$\bullet$] \textbf{规范化和可检验的软件伦理内涵}
\end{itemize}
国家、软件行业主管部门应与行业主体、学术团体、社会公众等众多利益相关方通力合作,制定、发布和修订软件领域的专项法律法规和伦理准则,让软件的研究、开发和应用有法可依、有规可循。支持行业自律,建立伦理审查制度,成立自律组织,制定行业标准等,积极推动软件伦理的全球治理,参与相关国际标准、规则的制定
国家、软件行业主管部门应与行业主体、学术团体、社会公众等众多利益相关方通力合作,通过多学科交叉的方式,研究软件伦理的规范化内涵;综合人员、过程、行为、制品、法规等多个方面,研究并制定软件伦理的可解释、可检验的条文和准则,制定相关的法律法规和行业标准
\begin{itemize}
\item[$\bullet$] \textbf{研究软件伦理的合规检测和监督技术,大力开展软件伦理教育和宣传}
\item[$\bullet$] \textbf{软件伦理的自动化检测技术和监督方法}
\end{itemize}
加快研发软件伦理合规检测和监督技术,尤其是自动化技术,例如面向软件版权保护的代码溯源技术、软件许可证违规使用检测技术,软件及软件使用者恶意、危险行为检测技术等,形成覆盖全面、导向明确、规范有序、协调一致的检测和监督技术体系,辅助软件行业从业者、用户和监管机构快速发现和修正违背伦理的问题,使法律法规、伦理制度得到严格执行。同时,研究和建立完善的软件伦理教育机制,针对不同教育阶段和年龄层次的人群普及软件伦理的教育,搭建创新与伦理之间高效对话机制和沟通平台,制定并落实全民软件素养培养计划
研究针对软件开发者行为和制品的软件伦理合规检测技术,尤其是自动化检测技术。例如,面向软件版权保护的代码溯源技术、软件许可证违规使用检测技术,软件及软件使用者恶意和危险行为检测技术等;研究并制定软件伦理的合规监督方法,如过程、规范、标准等,形成覆盖全面、导向明确、规范有序、协调一致的检测和监督技术体系,以快速、高效和准确地发现和修正违背伦理的问题
\section{本章小结}
在人机物融合时代,随着软件辐射面和影响面的扩大,软件学科的发展和进步,软件学科教育的内涵和外延也在发生改变,它涉及普及教育、专业教育、跨专业教育、教育理念与方法改革等多个方面,面临着一系列重大的问题的挑战,包括:如何针对具有不同认知水平的受众对象开展普及教育?如何根据人机物融合时代特点来深化专业教育?如何加强软件学科与其他学科的融合来实现跨专业的教育?以及如何改革软件学科的教育理念和方法来满足日益增长的人才培养需求、如何应对软件伦理问题等等。
在人机物融合时代,随着软件辐射面和影响面的扩大,软件学科的发展和进步,软件学科教育的内涵和外延也在发生改变,它涉及普及教育、专业教育、跨专业教育、教育理念与方法改革等多个方面,面临着一系列重大的问题的挑战,包括:如何针对具有不同认知水平的受众对象开展普及教育?如何根据人机物融合时代特点来深化专业教育?如何加强软件学科与其他学科的融合来实现跨专业的教育?以及如何改革软件学科的教育理念和方法来满足不断增长的人才培养需求、如何应对软件伦理问题等等。为了迎接上述挑战,软件学科教育需开展一系列研究,包括:以“知识普及 + 思维培养”为核心的普及教育、以“复合型 + 创新型”为目标的跨学科教育、以“知识体系+能力培养”为核心的专业教育、以“探究规律 + 方法创新”为主体的教育理念和方法改革、以“规范内涵 + 自动检测”为核心的软件伦理建设。
为了迎接上述挑战软件学科教育需开展一系列研究内容包括1以“计算思维 + 创新思维”为核心的普及教育2以“知识体系能力培养”为核心的专业教育3以“复合型 + 创新型”为目标的跨学科教育4以“探究规律 + 方法创新”为主体的教育理念和方法改革5以“健全制度 + 加强监督”为核心的软件伦理建设、治理和教育。
%\bibliographystyle{unsrt}
%\bibliography{reflib}
%\bibliogaphystyle{acm}
%\bibliography{references_2_10}
%\bibliography{IEEEabrv,ref}
%\section{参考文献}
%
%[1] 吴爱华, 侯永峰, 杨秋波等. 加快发展和建设新工科 主动适应和引领新经济[J]. 高等工程教育研究, 2017, (1): 1-9.
%
%[2] 梅宏. 万物皆可互联,一切均可编程[J]. 方圆, 2018, 501(12):58-59.
%
%[3] 王怀民, 吴文峻, 毛新军, 丁博, 郭长国, 李未, 复杂软件系统的成长性构造与适应性演化, 中国科学:信息科学, 2014, 45(6): 743-761.
%
%[4] 梅宏, 周明辉. 开源对软件人才培养带来的挑战[J]. 计算机教育, 2017, (1): 2-5.
%
%[5] Bandyopadhyay S, Thakur S S. ICT in education: Open source software and its impact on teachers and students[J]. International Journal of Computer Applications, 2016, 151(6): 19-24.
%
%[6] Pierre Bourque, Richard E. Fairley, SWEBOK V3.0 - Guide to the Software Engineering Body of Knowledge, IEEE Computer Society, 2014.
%
%[7] 计算机教育与可持续竞争力, “计算机教育20人论坛”编写组高等教育出版社2019.
%
%[8] 李晓明, “老年编程”的畅想, 计算机学会通讯, 2019, 15(5): 51.
%
%[9] Wing, Jeannette,. Computational Thinking Benefits Society, 40th Anniversary Blog of Social Issues in Computing, 2014.
%
%[10] Grover, S. . The 5th Cof 21st century skills. Try computational thinking (not coding). Retrieved from EdSurge News: https://www. Edsurge.com/news/2018-02-25-the-5th-c-of-21st-century-skills-try-computational-thinking-not-coding. 2018.
%
%[11] Ian Sommerville, Dave Cliff, Radu, etc., Large-Scale Complex IT System, Communication of ACM, 2012, 55(7): 71-77.
%
%[12] Linda Northrop, et.al., Ultra-Large-Scale Systems: The Software Challenge of the Future, Software Engineering Institute, Carnegie Mellon University, 2006.
%
%[13] 毛新军, 王涛, 余跃. 软工程实践教程: 基于开源和群智的方法, 高等教育出版社, 2019.
%\begin{thebibliography}{00}
%\bibitem{ref1} 吴爱华, 侯永峰, 杨秋波等. 加快发展和建设新工科 主动适应和引领新经济[J]. 高等工程教育研究, 2017, (1): 1-9.
%\bibitem{ref2} 梅宏. 万物皆可互联,一切均可编程[J]. 方圆, 2018, 501(12):58-59.
%\bibitem{ref3} 王怀民, 吴文峻, 毛新军, 丁博, 郭长国, 李未, 复杂软件系统的成长性构造与适应性演化, 中国科学:信息科学, 2014, 45(6): 743-761.
%\bibitem{ref4} 梅宏, 周明辉. 开源对软件人才培养带来的挑战[J]. 计算机教育, 2017, (1): 2-5.
%\bibitem{ref5} Bandyopadhyay S, Thakur S S. ICT in education: Open source software and its impact on teachers and students[J]. International Journal of Computer Applications, 2016, 151(6): 19-24.
%\bibitem{ref6} Pierre Bourque, Richard E. Fairley, SWEBOK V3.0 - Guide to the Software Engineering Body of Knowledge, IEEE Computer Society, 2014.
%\bibitem{ref7} 计算机教育与可持续竞争力, “计算机教育20人论坛”编写组高等教育出版社2019.
%\bibitem{ref8} 李晓明, “老年编程”的畅想, 计算机学会通讯, 2019, 15(5): 51.
%\bibitem{ref9} Wing, Jeannette,. Computational Thinking Benefits Society, 40th Anniversary Blog of Social Issues in Computing, 2014.
%\bibitem{ref10} Grover, S. . The 5th Cof 21st century skills. Try computational thinking (not coding). Retrieved from EdSurge News: https://www. Edsurge.com/news/2018-02-25-the-5th-c-of-21st-century-skills-try-computational-thinking-not-coding. 2018.
%\bibitem{ref11} Ian Sommerville, Dave Cliff, Radu, etc., Large-Scale Complex IT System, Communication of ACM, 2012, 55(7): 71-77.
%\bibitem{ref12} Linda Northrop, et.al., Ultra-Large-Scale Systems: The Software Challenge of the Future, Software Engineering Institute, Carnegie Mellon University, 2006.
%\bibitem{ref13} 毛新军, 王涛, 余跃. 软工程实践教程: 基于开源和群智的方法, 高等教育出版社, 2019.
%\end{thebibliography}

149
Ch2-2-SoftwareTheory.tex Normal file → Executable file
View File

@ -19,8 +19,8 @@
\section{重大挑战问题}
在新的时代背景下,特别是在人机物融合的大环境下,软件理论遇到了新的挑战。具体包括:如何应对大规模的数据与计算(§\ref{sec:st-complexity});如何保证复杂软件系统的正确性、可靠性、安全性(§\ref{sec:st-reliability});针对新型计算机的硬件架构与新的计算平台,如何建立其理论分析基础(§\ref{sec:st-architecture})。
在新的时代背景下,特别是在人机物融合的大环境下,软件理论遇到了新的挑战。具体包括:如何应对大规模的数据与计算(§\ref{sec:st-complexity});如何保证复杂软件系统的正确性、可靠性、安全性(§\ref{sec:st-reliability});针对新型计算机的硬件架构与新的计算平台,如何建立其理论分析基础(§\ref{sec:st-architecture});如何分析新型计算模型下的程序并保证它的正确性(§\ref{sec:st-quantum})
%
\subsection{面向数据科学的算法与计算复杂性理论}\label{sec:st-complexity}
构建高效的软件系统,需要发展算法设计与分析技术;确保算法的性能、理解计算的本质与界限,需要发展相应的计算复杂性理论。算法与计算复杂性理论,就是在这一背景与宗旨下发展形成的,是软件科学乃至计算机科学的根基。随着现代计算机科学进入大数据时代,建立在多项式时间图灵机和最坏情况复杂度分析基础上的传统算法与计算复杂性理论,在计算模型、问题模型和解决标准上,都面临新的挑战。
@ -75,9 +75,16 @@
最后新型计算平台引发了分布式系统数据一致性分析的挑战。云计算平台中为了提高系统的可用性往往采用地理上分布的多拷贝数据这也使得系统开发需要面对数据一致性、可用性和对网络分割的容忍性这三者不可兼得的经典问题即所谓的CAP定理需要在三者中做出取舍取得合理折中。考虑到强数据一致性串行一致性的实现对效率影响较大实际系统中往往根据业务特点来适当放松对一致性的保证这样带来的结果是一方面系统中可能多种一致性并存另一方面应用级程序员在使用弱一致性数据的时候难以保证程序业务的正确性。如何在编程语言和模型中既支持多种一致性又能简化编程负担并且对程序的可靠性和正确性给出指导原则和分析验证技术是当前研究的热点。
\subsection{新型计算模型下的计算复杂性理论与程序正确性保证}\label{sec:st-quantum}
量子硬件设计与制造技术的飞速发展人们乐观的预测多于一百个量子比特的特定用途的量子计算机有望在5-10 年内实现。量子计算拟充分利用量子力学的两大特性——量子叠加与量子纠缠——来获得潜在的比传统计算性能上的大幅度提升从而有可能使用量子计算模型来解决经典计算模型中无法高效计算的问题特别是一些经典困难问题例如Shor提出的量子整数分解算法可以高效地求解大整数的质因数分解问题Grover提出的量子搜索算法可以开平方根量级的加速无序数组的查找问题。
量子软件与算法领域最核心的挑战问题仍然是:量子软件与算法能否比经典软件算法在效率上有本质的提升?如果可以提升,那在哪些问题上可以有提升?最多可以提升多大量级?即能否从数学上完全刻画出量子计算能够有效加速的范围及其加速的极限。这对于我们更加深刻的理解计算的本质,特别是计算困难性的起源有着重要的科学意义。同时它还有助于加深我们对于量子力学本质的认识,以及在宏观尺度下量子效应的展示。
另一个重要的挑战是量子软件和程序该如何进行验证。虽然量子程序的分析与形式化验证领域已经取得了一些可喜的进展但目前的研究还非常零散很多问题甚至还不清楚如何准确定义。对于整数分解问题因其属于NP复杂性类其结果可以有效地经典验证但是对一个超出经典计算能力的量子程序如何才能验证其正确性例如最近谷歌宣称的“量子优越性”实验。量子密码协议特别是量子密钥分发协议从理论上具有比经典协议更好的安全性保障但如何才能够使用经典的方式来验证所设计的量子密码协议的正确性
%第三个重要的挑战是如何进行量子的编译和电路优化。谷歌等公司已经能制造出53-70物理比特的量子芯片量子计算的发展目前正在进入到含噪中尺度量子系统时代 (NISQ, Noisy Intermediate-Scale Quantum Computing)。目前的量子纠错方法或者纠错成本过高需要约1001的纠错比特开销或者所需要的物理比特的质量要求过高需要门正确率阈值超过3个9以上。如何能够通过电路的优化和软件编译的优化使得在NISQ系统上真正运行一个有意义的量子软件和算法
\section{主要研究内容}
软件理论的研究与软件应用的需求、承载软件的架构、平台息息相关。如图\ref{fig:2-2-1}所示,软件理论支撑了软件应用构建的整个过程;同时,软件应用构建过程中的问题推动了软件理论的深入研究。为了应对人机物融合环境下对软件理论的诸多挑战,需要开展多方面的研究工作。首先,为了支持有效的大数据处理,需要研究针对性的算法(§\ref{sec:stc-complexity});其次,为了保证复杂系统的可靠性,需要围绕着规约、建模、分析与验证等环节,从系统特征、行为的描述与可靠性保证方法进行研究(§\ref{sec:stc-reliability});其次,为了支持新的处理器结构与计算平台上的程序设计,需要构建相应的理论(§\ref{sec:stc-architecture});最后,为了提高新型软件的可靠性,需要研究新型软件的特点,从而给出相应的分析方法(§\ref{sec:stc-newsoftware})。
软件理论的研究与软件应用的需求、承载软件的架构、平台息息相关。如图\ref{fig:2-2-1}所示,软件理论支撑了软件应用构建的整个过程;同时,软件应用构建过程中的问题推动了软件理论的深入研究。为了应对人机物融合环境下对软件理论的诸多挑战,需要开展多方面的研究工作。首先,为了支持有效的大数据处理,需要研究针对性的算法(§\ref{sec:stc-complexity});其次,为了保证复杂系统的可靠性,需要围绕着规约、建模、分析与验证等环节,从系统特征、行为的描述与可靠性保证方法进行研究(§\ref{sec:stc-reliability});为了支持新的处理器结构与计算平台、新型计算模型上的程序设计,需要构建相应的理论(§\ref{sec:stc-architecture}, §\ref{sec:stc-quantum});最后,为了提高新型软件的可靠性,需要研究新型软件的特点,从而给出相应的分析方法(§\ref{sec:stc-newsoftware})。
\begin{figure}[htbp]
\centering
\includegraphics[width=0.80\textwidth]{fig2-2/2-1.png}
@ -93,94 +100,82 @@
\subsection{形式化方法的理论研究}\label{sec:stc-reliability}
一般来说,形式化方法的理论研究内容主要涉及规约、建模、分析与验证方法。其中,规约与建模是系统正确性、可靠性分析的基础,而分析与验证方法是保证系统正确性、可靠性的手段。
\begin{itemize}
\item 形式规约
\end{itemize}
%\begin{itemize}
% \item 形式规约
%\end{itemize}
%形式规约可以分为基于模型的方法与基于代数的方法。基于模型的方法有VDM、Z、B、CSP等。基于代数的方法有Lotos、Larch、LTL等。
为了验证不同的系统研究人员对经典时序逻辑如LTL、CTL和CTL*等做了各种扩展上,包括博弈扩展、概率扩展、实时扩展、量子扩展等。
这些扩展在模型检验的问题复杂度高,而且有的判定问题仍未解决。
%时序逻辑的概率扩展主要包括PCTL、PCTL*等。对于离散马尔可夫链模型PCTL的模型检验问题可在多项式时间内完成而LTL和PCTL*的模型检验问题仍是PSPACE-完全的。时序逻辑的实时扩展包括MTL和TCTL。MTL的可满足性问题和针对时间自动机的模型检验问题在连续时间上是不可判定的在离散时间上是EXPSPACE-完全的。时序逻辑的量子扩展主要包括QCTL、QCTL*等。QCTL在量子马尔可夫链上的验证可在多项式时间内完成同样该逻辑的可满足性的判定问题目前仍然没有解决。
另外时序逻辑的“超性质”是基于计算机安全背景的扩展主要包括HyperLTL、HyperCTL*等。
%HyperLTL的模型检验算法在最坏情况下是非初等可判定的同时
这两种逻辑的可满足性问题也是非初等可判定的,但对于其某些特定片段却存在较为高效的算法。%除了基于时序逻辑形式规约的研究进展,还出现了%同步语言Quartz、描述动态自适应系统的RLEAX等系统规约。此外
%基于本体论的网络本体语言(web ontology language)用于机器人、航天领域的形式规约描述系统需求。
%近些年来,针对串行程序的形式规约语言的进展集中在分离逻辑方面。除了针对分离逻辑的研究工作,
形式规约的主要研究内容包括:对经典逻辑的各种扩展以及表达能力、相关判定问题复杂度的研究;面向不同领域规约的扩展以及相关判定算法;针对新的复杂系统特征的形式规约的扩展研究。
%为了验证不同的系统研究人员对经典时序逻辑如LTL、CTL和CTL*等做了各种扩展上,包括博弈扩展、概率扩展、实时扩展、量子扩展等。
%这些扩展在模型检验的问题复杂度高,而且有的判定问题仍未解决。
%%时序逻辑的概率扩展主要包括PCTL、PCTL*等。对于离散马尔可夫链模型PCTL的模型检验问题可在多项式时间内完成而LTL和PCTL*的模型检验问题仍是PSPACE-完全的。时序逻辑的实时扩展包括MTL和TCTL。MTL的可满足性问题和针对时间自动机的模型检验问题在连续时间上是不可判定的在离散时间上是EXPSPACE-完全的。时序逻辑的量子扩展主要包括QCTL、QCTL*等。QCTL在量子马尔可夫链上的验证可在多项式时间内完成同样该逻辑的可满足性的判定问题目前仍然没有解决。
%另外时序逻辑的“超性质”是基于计算机安全背景的扩展主要包括HyperLTL、HyperCTL*等。
%%HyperLTL的模型检验算法在最坏情况下是非初等可判定的同时
%这两种逻辑的可满足性问题也是非初等可判定的,但对于其某些特定片段却存在较为高效的算法。%除了基于时序逻辑形式规约的研究进展,还出现了%同步语言Quartz、描述动态自适应系统的RLEAX等系统规约。此外
%%基于本体论的网络本体语言(web ontology language)用于机器人、航天领域的形式规约描述系统需求。
%%近些年来,针对串行程序的形式规约语言的进展集中在分离逻辑方面。除了针对分离逻辑的研究工作,
%
%总体来说,新出现的、更为复杂的系统特征推动了各种形式规约的提出,及对已有规约的扩展研究。但是,形式规约的表达能力越强,模型检验问题的复杂度就越高,甚至变得不可判定。如何寻找可判定的子集,在可判定的情况下,增加形式规约的表达能力,提高判定算法的效率,是该项研究的核心问题。
总体来说,新出现的、更为复杂的系统特征推动了各种形式规约的提出,及对已有规约的扩展研究。但是,形式规约的表达能力越强,模型检验问题的复杂度就越高,甚至变得不可判定。如何寻找可判定的子集,在可判定的情况下,增加形式规约的表达能力,提高判定算法的效率,是该项研究的核心问题。
%\begin{itemize}
% \item 形式建模方法
%\end{itemize}
形式建模的研究包括动态行为建模方法的研究,如支持离散指令与环境连续变化的描述;如何描述静态的系统架构;如何构造结构化的建模方法;如何刻画无穷状态系统的随机、参数化等特征;如何对新型的软件系统进行抽象建模。
%形式建模方法用于精确地刻画计算机软硬件系统的行为。如何以数学的形式描述日益复杂的系统结构与行为用于系统正确性分析是形式建模研究的核心问题之一。在一些安全关键领域为了描述和验证系统的安全性既需要描述离散的机器指令又需要描述系统所处环境的连续特性。通常使用混成自动机刻画这类系统。然而与状态机类似混成自动机缺乏对结构的描述。因此出现了很多辅助复杂系统模块化表示的方法。例如支持混成行为的层次化规范的环境SHIFT、PTOLEMY描述并发混成行为的I/O自动机、CHARON描述混成行为的规范HCSP(Hybrid CSP)、描述基于逻辑与组合分析的混成Hoare逻辑HHL(Hybrid Hoare logic)等。工业界常使用Simulink/Stateflow环境实现复杂系统的建模但它缺乏统一的形式语义。为了对复杂系统的建模人们还提出了组合建模方法如HMODEST随机混成程序。
%刻画无穷状态系统有随机、参数化等模型除了使用相应的分析工具如INFANY、JKind等还可以统一在进程重写系统(Process Rewrite System, PRS)中进行分析。
%
%最近深度神经网络的健壮性分析是研究热点之一。神经网络的结构常被表示为一组在整数域或实数域上的线性算术方程组与激活函数对应的非线性方程组的集合。然而已有的线性优化算法或者SMT求解器不擅于直接求解非线性方程。比较普遍的方法是根据具体的非线性方程对线性优化算法或SMT求解器进行扩展以便验证神经网络的安全性或找到对抗干扰实例。
%\begin{itemize}
% \item 形式分析与验证方法
%\end{itemize}
%
%
%软件系统的分析与验证的核心问题与挑战是如何缓解大规模复杂系统验证过程中的状态空间爆炸问题,并提高分析的精度与效率。
形式分析与验证方法主要包括符号执行、抽象解释、定理证明、模型检验等,从不同方法与角度提高分析验证系统的精度与规模。
\begin{itemize}
\item 形式建模方法
\item 基于符号执行的程序分析方法研究集中在增加可分析问题类型、提高可行性、可分析程序规模与算法效率这些方面。在可行性方面的研究基本都是在分析的精确性、可靠性、建模工作量以及可扩展性之间进行权衡和折中。提高可分析程序规模方面的研究包括设立特定的搜索策略、约束输入范围减少程序的路径空间、优化路径条件、或面向特征的高效编码等。面向新的分析需求,也有一些新的符号执行技术出现,其中比较有代表性的是概率符号执行技术。符号执行技术与其他技术之间的紧密融合,以提高分析的效果,也是目前新的发展趋势,包括与模型检验、抽象解释\index{抽象解释}、模糊测试\index{模糊测试}、随机测试\index{随机测试}等的一些技术结合,以提高程序的覆盖率或缺陷发现效率。
\item 基于抽象解释的形式验证主要包括提高抽象精度与可行性方面的研究。提高抽象解释分析精度的方法包括结合符号化方法来提高分析精度利用SMT求解器、插值等技术来计算程序语句迁移函数的最佳抽象提高抽象域的非线性表达能力。提高抽象解释可行性方面的研究工作包括复杂数据结构如数组内容、数值与形态混合程序自动分析的支持不同谱系目标程序如多线程程序、中断驱动型程序、概率程序的支持活性性质如时序性质、终止性分析的支持。
\item 基于演绎推理的定理证明研究可以分成两部分交互式定理证明Interactive Theorem proving和自动推理Automated Theorem proving%交互式定理证明最常用的两个证明辅助工具是Coq和Isabelle。Lean是一个最新的证明辅助工具其中的一个设计重点是允许更有效的证明策略的实现从而提高证明的自动化程度。
自动定理证明的基础包括SMTSatisfiability Modulo Theories和归结(Resolution)。SMT的研究包括如何将已有的算法框架与理论求解有效结合如何采用多种策略加速求解过程如理论预处理选择分支理论推导理论冲突分析和引理学习等。 基于定理证明的研究主要围绕如何支撑构造即正确的系统软件开发。
\item 基于模型检验的形式验证研究包括使用抽象或符号化等方法减少验证过程中遍历的状态空间规模、计算混成系统的可达集等。在缓解状态空间爆炸的研究包括反例制导的抽象精化方法Counter-Example Guided Abstraction RefinementCEGAR、基于插值Interpolant来对抽象谓词进行精化、有界模型检验Bounded Model CheckingBMC、如何对代码中各种数据结构如数组、位向量、堆等进一步提供编码机制如何对给定深度内行为空间进行有效编码及剪枝等来提升可验证系统规模并提高验证效率、如何通过多技术深度融合来进行代码验证、如何将抽象解释Abstract Interpretation与模型检验相结合、如何将插值技术与SMT结合等等。
混成系统的可达集计算包括使用基于决策过程的Tarski代数方法、基于多面体Polyhedral的计算、通过惰性定理证明方法分析线性或非线性混成系统的限界可达性问题、采用基于网格或谓词抽象的连续动力学特性的离散化等技术。
\item 面向复杂系统的统计模型检验研究内容包括功能与非功能规约的形式化表示、涵盖功能与非功能规约的统一模型、统计模型检测算法的改进、确认正确(Verified)的工具实现、不同领域的应用等。
\item 面向复杂系统的运行时验证研究包括如何降低监测对系统的开销、如何实现对实时系统的监测、如何对新型软件如基于学习的系统的监测等。
\end{itemize}
形式建模方法用于精确地刻画计算机软硬件系统的行为。如何以数学的形式描述日益复杂的系统结构与行为用于系统正确性分析是形式建模研究的核心问题之一。在一些安全关键领域为了描述和验证系统的安全性既需要描述离散的机器指令又需要描述系统所处环境的连续特性。通常使用混成自动机刻画这类系统。然而与状态机类似混成自动机缺乏对结构的描述。因此出现了很多辅助复杂系统模块化表示的方法。例如支持混成行为的层次化规范的环境SHIFT、PTOLEMY描述并发混成行为的I/O自动机、CHARON描述混成行为的规范HCSP(Hybrid CSP)、描述基于逻辑与组合分析的混成Hoare逻辑HHL(Hybrid Hoare logic)等。工业界常使用Simulink/Stateflow环境实现复杂系统的建模但它缺乏统一的形式语义。为了对复杂系统的建模人们还提出了组合建模方法如HMODEST随机混成程序。
刻画无穷状态系统有随机、参数化等模型除了使用相应的分析工具如INFANY、JKind等还可以统一在进程重写系统(Process Rewrite System, PRS)中进行分析。
最近深度神经网络的健壮性分析是研究热点之一。神经网络的结构常被表示为一组在整数域或实数域上的线性算术方程组与激活函数对应的非线性方程组的集合。然而已有的线性优化算法或者SMT求解器不擅于直接求解非线性方程。比较普遍的方法是根据具体的非线性方程对线性优化算法或SMT求解器进行扩展以便验证神经网络的安全性或找到对抗干扰实例。
\begin{itemize}
\item 形式分析与验证方法
\end{itemize}
软件系统的分析与验证的核心问题与挑战是如何缓解大规模复杂系统验证过程中的状态空间爆炸问题,并提高分析的精度与效率。形式分析与验证方法主要包括符号执行、抽象解释、定理证明、模型检验等,从不同方法与角度提高分析验证系统的精度与规模。
1)基于符号执行的程序分析方法
符号执行提供了一种系统性遍历程序路径空间的手段。目前的研究集中在增加可分析问题类型、提高可分析程序规模与算法效率这些方面。提高可伸缩性方面的研究包括设立特定的搜索策略、约束输入范围减少程序的路径空间、优化路径条件、或面向特征的高效编码提高可伸缩性。在可行性方面的研究基本都是在分析的精确性、可靠性、建模工作量以及可扩展性之间进行权衡和折中。面向新的分析需求,也有一些新的符号执行技术出现,其中比较有代表性的是概率符号执行技术。符号执行技术与其他技术之间的紧密融合,以提高分析的效果,也是目前新的发展趋势,包括与模型检验、抽象解释\index{抽象解释}、模糊测试\index{模糊测试}、随机测试\index{随机测试}等的一些技术结合,以提高程序的覆盖率或缺陷发现效率。
2)基于抽象解释的形式验证方法
抽象解释理论为程序分析的设计和构建提供了一个通用的框架并从理论上保证了所构建的程序分析的终止性和可靠性。抽象解释的核心问题是提高抽象的精度。为提高抽象解释分析精度可以结合符号化方法来提高分析精度利用SMT求解器、插值等技术来计算程序语句迁移函数的最佳抽象也可以提高抽象域的非线性表达能力。如何有效降低存储开销和提高计算效率是提高抽象解释可扩展性需要考虑的主要问题。在提高抽象解释的可行性方面研究工作包括复杂数据结构如数组内容、数值与形态混合程序自动分析的支持不同谱系目标程序如多线程程序、中断驱动型程序、概率程序的支持活性性质如时序性质、终止性分析的支持。
3)基于演绎推理的定理证明方法
定理证明的基本思想是将程序满足其形式规约的证明问题转化为一组数学命题的证明。为了提高证明的效率、增加自动化证明程度、推广定理证明的应用定理证明方面的研究可以分成两部分交互式定理证明Interactive Theorem proving和自动推理Automated Theorem proving%交互式定理证明最常用的两个证明辅助工具是Coq和Isabelle。Lean是一个最新的证明辅助工具其中的一个设计重点是允许更有效的证明策略的实现从而提高证明的自动化程度。
自动定理证明的基础包括SMTSatisfiability Modulo Theories和归结(Resolution)。SMT的研究对象是各种领域知识的逻辑组合经常表达为带等词的一阶逻辑公式。惰性算法是目前主流的SMT求解方法采用了被称为DPLLT的算法框架。为了DPLL求解与理论求解更为有效地结合理论判定过程一般要设计为增量式的Incremental和可回溯的Backtrackable。主流SMT求解器还采用多种策略加速求解过程如理论预处理选择分支理论推导理论冲突分析和引理学习等。此外基于定理证明的方法也可以支撑构造即正确的系统软件开发如具有分层规范与公式推导特征的DeepSEA程序能够生成由CompCert编译的C程序、低层的Coq规范以及表明该程序满足规范的证明。
4)基于模型检验的形式验证方法
模型检验方法的基础是状态空间的遍历。一方面,状态空间爆炸问题是大规模复杂系统模型检验方法的主要瓶颈。这方面的研究集中在怎样使用抽象或符号化等方法,减少验证过程中遍历的状态空间规模。另一方面,复杂系统中连续状态变化导致的系统可达集计算方法也相当复杂。该方面的研究主要集中在如何计算混成系统的可达集。
在缓解状态空间爆炸的方法方面反例制导的抽象精化方法Counter-Example Guided Abstraction RefinementCEGAR是当前复杂系统模型检验的主要手段之一。同时基于插值Interpolant来对抽象谓词进行精化、有界模型检验Bounded Model CheckingBMC也是主流的研究方向。目前相关方向的工作主要集中于如何对代码中各种数据结构如数组、位向量、堆等进一步提供编码机制如何对给定深度内行为空间进行有效编码及剪枝等来提升可验证系统规模并提高验证效率等。此外通过多技术深度融合来进行代码验证是近年来的重要趋势之一。如将抽象解释Abstract Interpretation与模型检验相结合将插值技术与SMT结合等等。其中最具有代表性的工作为CPAChecker工具。它基于若干技术的结合通过统一接口集成多种求解器和技术来对软件系统进行验证从而得到更好的性能和可伸缩性。
混成系统的可达集计算是制约混成系统验证的主要问题。
简单混成系统的验证可以通过时间自动机、多速率自动机等实现。基于决策过程的Tarski代数的方法可以计算特定线性混成系统的可达集计算。HYTECH模型检验工具是第一个实现线性混成系统的精确符号化可达性分析工具用的是基于多面体Polyhedral计算的方法。而CHECKMATE、d/dt工具使用多面体方法计算线性混成系统可达集的上近似。除此以外还可以通过惰性定理证明方法分析线性或非线性混成系统的限界可达性问题混成系统的分析还可以采用基于网格或谓词抽象的连续动力学特性的离散化等技术。
能够避免可达集计算的演绎推理方法被越来越多的用于复杂混成系统的验证其核心是用来描述与推理系统属性的规范逻辑的表达能力。例如微分动态逻辑Differential Dynamic LogicDDL可用于大部分混成系统的建模与自动化推理。
5)面向复杂系统的统计模型检验方法
为了避免穷举复杂系统状态而产生的空间爆炸问题,
统计模型检验方法通过有限多次的执行对系统进行模拟,并使用假设检验来推断这些样本是否提供满足或违反规范的统计证据。虽然基于仿真的解决方案并不能保证正确的结果,但可以限制发生错误的概率。而且,基于模拟的方法比基于搜索的精确方法使用的计算资源要小得多。
6)面向复杂系统的运行时验证方法
与基于模型的系统静态验证方法不同,运行时验证方法在系统运行过程中监测系统的异常,避免系统出现难以恢复的故障。它的基本思想是将形式化描述的规范转换成监测器,插桩在实际的系统中,观测系统行为是否出现异常。目前,可监测的范围既可以是形式描述的规范,也可以是抽象出来的系统行为,不仅可以对传统的软件进行监测,也可以对基于学习的软件进行监测。为了降低监测行为对系统的开销,还出现了硬件形式的监测器,实现对实时系统的监测。
\subsection{新型体系结构和计算平台下的程序理论}\label{sec:stc-architecture}
为了应对新涌现的体系结构与计算平台,软件与程序理论主要研究运行于新体系架构程序的语义、可靠性保证等问题。
新型体系结构下内存模型的形式化定义是软件理论研究的领域之一。片上多核众核处理器已成为计算机体系结构发展的主流。传统的顺序一致性Sequential Consistency模型虽然符合程序设计的直觉但已不能满足编译优化、处理器性能提升等多方面的需要。目前主流的多核处理器如x86、ARM和Power等所实现的内存模型都放松了对一致性的要求允许同一线程对不同地址的读写访问可以乱序执行。在程序设计语言层面如C11/C++11、Java等也直接定义了内存模型支持基于共享内存的多线程程序设计为编译优化、虚拟机性能提升等提供必要基础。但目前处理器及程序设计语言层面的内存模型仍缺乏严格的形式化定义使并发程序设计及验证变得更加困难。已有的语义有x86-TSO内存模型的操作语义、Power内存模型的公理语义。但如何严格刻画不同处理器、程序设计语言的内存模型仍有待进一步研究。
多处理器架构的并发程序可线性化问题是新型体系架构下的另一个研究内容。可线性化是多处理器并发程序设计的一种正确性条件沿袭了顺序式程序设计的惯性但可能会由于顺序瓶颈Sequential Bottleneck制约并发软件的性能和可扩展性。近年来提出的准可线性化Quasi-linearizability及更一般的量化松弛框架允许放松可线性化标准所要求的严格顺序规约如放松并发队列的FIFO顺序以适应多核平台性能优化的灵活性。可线性化问题对有界多并发线程而言是可判定的但对无界多并发线程而言已经是不可判定的。在理论方面已证明准可线性化问题对有界多并发线程而言是不可判定的一般而言弱内存模型可线性化在无界多调用/返回操作的情况下是不可判定的,但在有界多调用/返回操作的情况下是可判定的,因此可以采用静态方法来验证限界条件下并发数据结构实现的弱内存模型可线性化问题。
近年来,高性能计算机的峰值计算能力不断提高。但相关软件的发展还难以跟上。如何保证这类软件的可靠性,更是一个尚未解决的难题。目前,虽然有少量研究,但不能用于大规模并行程序的验证。
研究内容包括:新型体系结构下支持编译优化、多线程程序设计、与虚拟机性能提升的内存模型的形式化定义;多处理器架构的并发程序可线性化问题、可线性化在有界与无界并发线程操作中的可判定性问题、大规模并行程序的验证等。
%新型体系结构下内存模型的形式化定义是软件理论研究的领域之一。片上多核众核处理器已成为计算机体系结构发展的主流。传统的顺序一致性Sequential Consistency模型虽然符合程序设计的直觉但已不能满足编译优化、处理器性能提升等多方面的需要。目前主流的多核处理器如x86、ARM和Power等所实现的内存模型都放松了对一致性的要求允许同一线程对不同地址的读写访问可以乱序执行。在程序设计语言层面如C11/C++11、Java等也直接定义了内存模型支持基于共享内存的多线程程序设计为编译优化、虚拟机性能提升等提供必要基础。但目前处理器及程序设计语言层面的内存模型仍缺乏严格的形式化定义使并发程序设计及验证变得更加困难。已有的语义有x86-TSO内存模型的操作语义、Power内存模型的公理语义。但如何严格刻画不同处理器、程序设计语言的内存模型仍有待进一步研究。
%
%
%多处理器架构的并发程序可线性化问题是新型体系架构下的另一个研究内容。可线性化是多处理器并发程序设计的一种正确性条件沿袭了顺序式程序设计的惯性但可能会由于顺序瓶颈Sequential Bottleneck制约并发软件的性能和可扩展性。近年来提出的准可线性化Quasi-linearizability及更一般的量化松弛框架允许放松可线性化标准所要求的严格顺序规约如放松并发队列的FIFO顺序以适应多核平台性能优化的灵活性。可线性化问题对有界多并发线程而言是可判定的但对无界多并发线程而言已经是不可判定的。在理论方面已证明准可线性化问题对有界多并发线程而言是不可判定的一般而言弱内存模型可线性化在无界多调用/返回操作的情况下是不可判定的,但在有界多调用/返回操作的情况下是可判定的,因此可以采用静态方法来验证限界条件下并发数据结构实现的弱内存模型可线性化问题。
%
%
%近年来,高性能计算机的峰值计算能力不断提高。但相关软件的发展还难以跟上。如何保证这类软件的可靠性,更是一个尚未解决的难题。目前,虽然有少量研究,但不能用于大规模并行程序的验证。
\subsection{新型计算模型下的算法复杂性理论与程序验证方法}\label{sec:stc-quantum}
针对量子计算模型下的挑战性问题,具体研究内容如下:量子程序设计与验证、量子密码协议设计与验证、量子复杂性下界问题等。量子程序设计与验证的研究包括量子程序设计模型和基本指令集;适用于量子计算的程序逻辑;量子程序不变式生成问题;量子程序的模型检验问题;并行与分布式量子程序设计技术等。量子密码协议设计与验证的研究包括抗量子攻击的经典密码协议,量子随机数生成,量子密码协议验证,量子纠错与编码等。量子复杂性下界研究包括图灵机模型下量子与经典复杂性类的(神谕)区分;量子通信协议复杂性下界;量子判定树模型复杂性下界;量子计算的交互式验证等。
\subsection{新型软件及应用的处理与分析方法}\label{sec:stc-newsoftware}
对于近年来新出现的各种软件及应用,核心问题是在提高系统效率的同时,如何保证系统的可靠性。基于学习的系统是近期出现的主流新型软件之一。根据不同的系统需求,有不同的研究方法。
主要研究内容包括如何使用梯度下降优化、模型与噪音的优化等方法快速攻击系统并产生对抗样本;如何使用对抗训练、防御蒸馏等方法有效防御对基于学习系统的攻击;如何以形式化分析为基础提供该类系统的可靠性、鲁棒性等保证,如对部分系统进行验证、将语义作为训练内容增加系统可解释性、根据网络结构特点构建输出的监测器。
一类研究围绕着如何攻击与防御人工智能系统。基于学习的模型极易受到噪音的影响,输入中的一点噪音就会改变输出结果。因此对抗样本是不可避免的。在实际系统中,对抗样本攻击的成功率非常高。如何快速地寻找对抗样本,进行攻击,是个重要的研究问题。它本质是一个优化问题,通常可以利用梯度下降优化的方法得到较好的解。目前较新的方法将模型与噪声都转变成优化目标项,而输出限制条件转换成损失函数,值域限制被转换成了平滑截断函数的变量,这样优化器可以通过直接优化目标函数,得到对抗样本。除了对抗样本的寻找,另一个方向是如何进行防御,如对抗训练、防御蒸馏等。有研究表明,即使在有防御蒸馏保护的前提下,仍可以通过转移学习生成有效的对抗样本。
另一类研究以形式化分析为基础,提供该类系统的可靠性、鲁棒性等保证。基于神经网络的智能系统结构\index{智能系统结构}复杂,神经元结点数众多。如何验证这类系统的正确性、分析其可靠性,是一个挑战性的问题。基于抽象的方法大大提高了可处理的神经元个数。由于实际系统的输入具有不确定性,针对确定的神经网络结构判断系统对每个输入的鲁棒性难以推广,目前缺乏对实际系统可用的验证方法。一种可行的方法是对接近输出的中间层进行验证。或者,针对神经网络的可解释性问题,把语义作为训练内容,与现有的系统结合,增加网络的可解释性。另一种可行的方法是根据系统训练过程中网络结构特点,构建输出的监测器。在使用中若某个输入导致了异常的网络内部结构,则该输入可能未在训练集范围内,输出结果不一定可靠。
%一类研究围绕着如何攻击与防御人工智能系统。基于学习的模型极易受到噪音的影响,输入中的一点噪音就会改变输出结果。因此对抗样本是不可避免的。在实际系统中,对抗样本攻击的成功率非常高。如何快速地寻找对抗样本,进行攻击,是个重要的研究问题。它本质是一个优化问题,通常可以利用梯度下降优化的方法得到较好的解。目前较新的方法将模型与噪声都转变成优化目标项,而输出限制条件转换成损失函数,值域限制被转换成了平滑截断函数的变量,这样优化器可以通过直接优化目标函数,得到对抗样本。除了对抗样本的寻找,另一个方向是如何进行防御,如对抗训练、防御蒸馏等。有研究表明,即使在有防御蒸馏保护的前提下,仍可以通过转移学习生成有效的对抗样本。
%
%
%另一类研究以形式化分析为基础,提供该类系统的可靠性、鲁棒性等保证。基于神经网络的智能系统结构\index{智能系统结构}复杂,神经元结点数众多。如何验证这类系统的正确性、分析其可靠性,是一个挑战性的问题。基于抽象的方法大大提高了可处理的神经元个数。由于实际系统的输入具有不确定性,针对确定的神经网络结构判断系统对每个输入的鲁棒性难以推广,目前缺乏对实际系统可用的验证方法。一种可行的方法是对接近输出的中间层进行验证。或者,针对神经网络的可解释性问题,把语义作为训练内容,与现有的系统结合,增加网络的可解释性。另一种可行的方法是根据系统训练过程中网络结构特点,构建输出的监测器。在使用中若某个输入导致了异常的网络内部结构,则该输入可能未在训练集范围内,输出结果不一定可靠。
\section{本章小结}
计算机软硬件的飞速发展以及不同领域需求的日益复杂,催生出各种实际问题,为软件的设计与开发带来巨大的机遇与挑战。作为软件学科基础的理论与方法也需要与时俱进;我们需要不断探索解决这些挑战性问题的新途径。软件理论依赖于各种数学手段;反过来,软件及理论的发展也可能给数学研究带来新的问题。

View File

@ -2,19 +2,19 @@
软件开发方法与技术\index{软件开发方法与技术}是软件学科\index{软件学科}的核心关注点之一。从宏观上看,其目标一方面是在计算平台上给出满足用户需求的解决方案,另一方面是达到开发效率、质量、成本的最佳平衡。在通常的软件及信息技术体系中,软件开发包括了技术、管理、工具等多个方面:技术上包括软件分析、设计、构造、维护和质量保证,关注于如何完成具体的软件开发活动并产出相应的软件制品;管理上包括软件过程模型\index{软件过程模型}、开发团队组织和最佳实践,关注于软件开发活动的流程和协作管理以及包括人在内的各类资源的组织和运筹等;不论是技术还是管理方面,在解决大规模复杂软件开发问题时都离不开工具的支持和帮助。高效、高质量、低成本地开发和演化软件系统是软件开发方法和技术研究追求的总体目标,在这个总体目标指引下,在不断出现的、新的应用需求的牵引下,软件开发方法和技术研究不断面临新的挑战。
在“软件定义一切”的时代背景下,尽管软件开发方法与技术的目标宏观上依然不变,但是软件的需求空间被进一步大幅度扩展,人机物融合的需求场景和运行环境更进一步增大了软件系统的规模和复杂性,导致软件开发和演化的成本随之急剧上升,从而产生了对软件自动化\index{软件自动化}方法与技术的迫切需求;另一方面,软件开发和演化\index{软件开发和演化}的外在条件随着需求和技术发展不断发生变化,新的问题不断涌现,不断扩展了软件自动化方法和技术的研究空间。
在“软件定义一切”的时代背景下,尽管软件开发方法与技术的目标宏观上依然不变,但是软件的需求空间被进一步大幅度扩展,人机物融合的需求场景和运行环境更进一步增大了软件系统的规模和复杂性,导致软件开发和演化的成本随之急剧上升,从而产生了提高软件开发和演化自动化程度的迫切需求;另一方面,软件开发和演化\index{软件开发和演化}的外在条件随着需求和技术发展不断发生变化,新的问题不断涌现,不断扩展了软件自动化方法和技术的研究空间。
人是软件开发成败的决定因素,认知空间中人们长期的积累与计算平台的发展,使得软件开发的社会化和智能化成为必然方向,也为软件开发中人与计算/机器平台的新型关系的建立提出了挑战。网络化、数据化、可视化、虚拟化将改变人在软件开发中的工作方式、合作方式和组织方式,催生出软件开发的各种新方式,包括软件开发终端化和普及化、群智化开发\index{群智化开发}与生态化平台等等。建立新的开发方式以有效适应人机融合的软件生态发展,将是软件开发和平台的未来机遇。
软件作为智力和人工制品,软件开发属于认知空间范畴,介于应用空间(问题空间)与平台空间(解空间)之间。应用空间和平台空间的泛在化和持续变化决定了未来软件形态的泛在性、适应性、演化性。复杂多样的不确定性成为软件的固有本质特征,控制而不是消除不确定性使得软件的持续演化和成长成为必然挑战。与传统软件开发相比较,软件的不确定性控制和处理难以在设计时完成,除了面向应用空间,软件开发的设计时与运行时融合要求认知空间与平台空间的协作乃至一体化成为一个趋势。近来的开发运维一体化\index{开发运维一体化}已经有了一个良好的开端。
软件作为智力和人工制品,软件开发属于认知空间范畴,本质上是问题空间、解空间和平台空间之间的转换和映射。随着问题空间和平台空间的泛在化和持续变化,未来软件形态也呈现出泛在性、适应性、演化性、不确定性。特别是复杂多样的不确定性成为软件的固有本质特征,控制而不是消除不确定性使得软件的持续演化和成长成为必然挑战。与传统软件开发相比较,软件的不确定性控制和处理难以在设计时完成,除了面向应用空间,软件开发的设计时与运行时融合要求认知空间与平台空间的协作乃至一体化成为一个趋势。近来的开发运维一体化\index{开发运维一体化}已经有了一个良好的开端。
面向动态变化场景的人机物融合复杂系统\index{人机物融合复杂系统},软件开发面临的首要挑战是融合人机物三元资源、以建模为核心的软件定义\index{软件定义}方法和技术。我们需要构建人机物三元资源及其行为的抽象、观察和度量的新模型和方法,研究基于软件定义方法的元级控制和数据赋能机理,使得软件开发方式(包括设计、构造和保)从实体建模为主走向实体加链接,从分而治之走向群智聚合,从而有效驾驭各类软件复杂性。
面向动态变化场景的人机物融合复杂系统\index{人机物融合复杂系统},软件开发面临的首要挑战是融合人机物三元资源、以建模为核心的软件定义\index{软件定义}方法和技术。我们需要构建人机物三元资源及其行为的抽象、观察和度量的新模型和方法,研究基于软件定义方法的元级控制和数据赋能机理,使得软件开发方式(包括设计、构造和保)从实体建模为主走向实体加链接,从分而治之走向群智聚合,从而有效驾驭各类软件复杂性。
\section{重大挑战问题}
在人机物融合应用场景需求牵引下,软件开发方法和技术研究面临的重大挑战问题主要包括复杂场景分析与建模、群智开发、人机协作编程\index{人机协作编程}和开发运维一体化。
\subsection{复杂场景分析与建模}
人机物融合计算场景的需求在我们的日常生活中已经存在,大到智慧国家、智慧城市,小到网络家电、汽车引擎智能网络控制系统,对这类计算场景的分析和建模存在许多挑战,其中最重要的挑战包括如下四个方面。
人机物融合计算场景的需求在我们的日常生活中已经存在,大到智慧国家、智慧城市,小到网络家电、汽车引擎智能网络控制系统,对这类计算场景的分析和建模存在许多挑战,其中主要的挑战包括如下几个方面。
\subsubsection{与日俱增的规模与复杂度}
首先,从已经出现的支撑人机物融合计算场景的系统来看,其系统的大小和复杂性显著增加。例如,现代汽车中基于软件的功能在不断地持续增加\cite{zhang2017software}比如2007年经典高端轿车包含大约270个与驾驶员互动的软件实现的功能而最新的高端轿车包含超过500个这样的功能。轿车软件的规模也在大幅增长。2007年高端轿车的二进制代码量约为66兆字节而现在这类轿车则含超过1千兆字节的二进制代码。随着软件支持的功能的数量和规模的增加复杂性也随之增加。这些基于软件的功能要求各个子系统例如刹车系统、发动机管理系统、驾驶辅助系统等具备更细粒度的功能以及子系统之间密集的交互因而整个系统的复杂性大大增加对系统的分析和建模需要从方法和技术上得到全面提升。
@ -37,6 +37,13 @@
人机物融合计算场景下,软件系统分析和建模的困难还来自于当前的需求相关者(即领域专家,最终用户和客户)无法提供完整和正确的能力要求。许多创新应用,如微信、在线购物等一些受欢迎的应用程序,都是由技术的发展和产品设计师的创新思维驱动的,而不是最初的需求相关者所要求的。信息技术飞速发展的时代,领域专家和最终用户无法提出超出想象的技术发展,不能预测技术的发展趋势,如何在软件系统分析和建模方法中,支持创新需求的引入,或提供对创新需求的包容手段是一个重要的挑战。
\subsubsection{系统内生安全性}
对人机物融合系统而言,安全和隐私保护是第一要务,首先不容置疑的是系统安全性,系统在和人和物理环境直接交互的过程,需要保护人生安全,需要保护其交互环境,不施加具有破坏性的操作,避免交互环境受到损失;其次,由于其直接和人打交道,采集和分享人的信息,使得系统的隐私保护成为计算系统需要强制执行的法律,欧盟、美国等都出台了个人隐私数据或网络隐私保护法,中国也出台了个人信息保护法。与开发功能性需求是申明系统要做什么不同,使人机物融合系统具有内生的安全性和遵循隐私保护法,其系统需求开发的难点和挑战是回答以下几个问题:如何避免在系统操作回路中/上的人的安全隐患?如何避免系统可能对交互环境造成的伤害/破坏?如何避免不在系统操作回路上的人的安全隐患?如何避免泄露不在系统操作回路上的人的隐私。
\subsubsection{计算与控制的交互与融合}
人机物融合场景下,大量系统不再是单纯等待外界输入后做简单响应。在以轨道交通、航空航天、医疗卫生、工业控制等为代表的核心系统软件中,相关系统行为都包含了连续实时计算与离散决策控制之间的交互与融合。以列控系统为例,列车运行中相关运行参数物理量,如车速、位置、外界风速、轨道坡度等取值在连续变化。基于这些运行参数取值的实时监控与预测计算,列控系统会在各运行模式间切换,比如加速,减速等。然而列车不同的运行模式也会导致这些物理量变化规律发生改变。在这类情况下,系统的连续计算和离散控制两种行为相互依赖、相互影响、彼此互为依存、息息相关。因此,如何在开放环境下准确构建系统离散与连续交织行为模型成为重要挑战。
\subsection{群智开发}
互联网\index{互联网}技术的发展,使得人类群体打破物理时空限制开展大规模协作成为可能。新型编程技术(包括新型高级编程语言、智能化编程工具和技术等)的出现则降低了编程开发的参与门槛。软件开发从一个纯粹的生产性活动演变为一个涉及到多种要素紧密关联的社会性活动;软件也从相对独立的产品演变为多种元素相互依赖、持续演化的生态。在软件生态系统中,作为软件开发活动的关键要素,“人”在其中发生了显著变化:参与者规模的变化-软件开发活动的参与者规模由过去的公司/组织内部封闭环境下的数百至数万人,演变为软件生态系统\index{软件生态系统}中开放环境下通过互联网联接的数万数十万人;参与者群体多样类型的变化-软件开发活动的参与者由过去的主要是开发者,演变为软件生态系统中开发者、用户、管理者、投资人等多种不同类型的群体深度参与,共同驱动软件生态系统的发展演化;参与者个体多重角色的变化-软件开发活动中参与个体的角色从单纯的软件开发者或使用者等单一角色,演变为软件生态系统的参与者和推动者等多重角色,每个参与个体都成为软件生态中的组成部分,与软件生态共同成长演化\cite{zhang2017software}
@ -82,10 +89,10 @@ DevOps 持续高效高质量的交付有赖于高度自动化支持工具的支
DevOps整合了开发团队与运维团队使其成为一个整体这使得团队的组织、文化和软件过程都与单纯的开发团队和运维团队有所不同。同时团队的规模也不可避免的有所增加降低了团队面对面沟通的效率。DevOps是受到敏捷软件开发的影响而产生的天然带有敏捷基因并植根于精益思想。然而敏捷方法的很多理念和实践并不能天然应用于DevOps。例如常规敏捷方式鼓励着眼当前问题同时通过承担一定程度的技术负债来应对未来的多种可能变化。这种寻求局部最优解的思维方式并不利于打破各个部门之间的壁垒。又如在敏捷宣言鼓励之下的“重代码轻文档”工作方式对于持续性的维持还是弊大于利毕竟我们不会轻易终止一款软件系统。另一方面随着开发和维护的软件系统越来越复杂其规模也越来越大在开发运维团队合并后必然要求团队规模也相应扩大团队之间的协作和交流也会更加复杂。敏捷社区提出了SAFeScaled Agile Framework来支持更大规模的团队目前已经列入DevOps相关内容。然而也有很多人批评SAFe过于复杂违背了敏捷的基本价值观。从这个意义上说如何在大规模团队中实施DevOps仍将成为未来一段时间研究者和实践者需要解决的问题。
\section{主要研究内容}
面向高效、高质量、低成本开发和演化软件系统的总体目标,软件开发方法和技术的研究范围涵盖新型程序设计与软件方法学\index{软件方法学}、软件自动化技术、软件复用\index{软件复用}技术、软件自适应与生长\index{软件自适应与生长}技术、复杂软件分析与建模、智能软件开发方法、嵌入式软件\index{嵌入式软件}开发方法与技术、复杂系统需求分析方法与技术、\index{软件服务}化方法与技术等各个方面。结合应对以上重大挑战问题,主要研究内容将集中在人机物融合场景建模、系统自适应需求分析、系统内生安全规约获取、群智软件生态、群智开发方法、群智协同演化、群智软件支撑环境、面向机器编程的代码生成、面向人机协同的智能开发环境、开发过程建模与优化、软件系统运行数据管理、安全可信的开发运维一体化、开发运维一体化的组织与管理、微服务软件体系结构等。
面向高效、高质量、低成本开发和演化软件系统的总体目标,软件开发方法和技术的研究范围涵盖新型程序设计与软件方法学\index{软件方法学}、软件自动化技术、软件复用\index{软件复用}技术、软件自适应与生长\index{软件自适应与生长}技术、复杂软件分析与建模、智能软件开发方法、嵌入式软件\index{嵌入式软件}开发方法与技术、复杂系统需求分析方法与技术、\index{软件服务化方法与技术}等各个方面。结合应对以上重大挑战问题,主要研究内容将集中在人机物融合场景建模、系统自适应需求分析、系统内生安全规约获取、群智软件生态、群智开发方法、群智协同演化、群智软件支撑环境、面向机器编程的代码生成、面向人机协同的智能开发环境、开发过程建模与优化、软件系统运行数据管理、安全可信的开发运维一体化、开发运维一体化的组织与管理、微服务软件体系结构等。
\subsection{人机物融合场景建模}
人机物融合的新型泛在系统,以实现人类社会、信息空间和物理世界的互联互通为目标。在这种应用场景中,计算资源高度泛化,系统能力拓展到包括连接、计算、控制、认知、协同和重构等在内的网络化、协同式和适应性的认知、计算和控制一体的综合能力范畴。需要研究人机物融合的计算环境的认知和建模,特别是对各种实现感知、计算、通信、执行、服务等能力的异构资源的认知的建模;系统研究交互环境的建模理论,包括交互环境静态属性特征和动态行为特征,以及行为约束等多个方面;需要对典型人机物融合场景下泛在应用的本质特征,分别予以有效的场景抽象,研究相应的软件定义方法,以凝练人机物融合应用场景的共性,更有效地管理资源,并适应动态多变的应用场景。
人机物融合的新型泛在系统,以实现人类社会、信息空间和物理世界的互联互通为目标。在这种应用场景中,计算资源高度泛化,系统能力拓展到包括连接、计算、控制、认知、协同和重构等在内的网络化、协同式和适应性的认知、计算和控制一体的综合能力范畴。需要研究人机物融合的计算环境的认知和建模,特别是对各种实现感知、计算、通信、执行、服务等能力的异构资源的认知的建模;系统研究交互环境的建模理论,包括交互环境静态属性特征和动态行为特征,以及行为约束等多个方面;针对系统离散、连续行为交织,系统外部运行环境、内部协作关系随时间、任务变化进行实时演变的特性,研究相关复杂行为建模与刻画方法,从而对系统行为进行描述,为后续分析、测试、验证提供基础;需要对典型人机物融合场景下泛在应用的本质特征,分别予以有效的场景抽象,研究相应的软件定义方法,以凝练人机物融合应用场景的共性,更有效地管理资源,并适应动态多变的应用场景。
\subsection{系统自适应需求分析}
人机物融合应用场景下,需求以及交互环境的动态变化性和不确定性,使得系统的自适应性成为关键,软件系统的自适应性需求建模和管理成为热点研究课题,其中包括自适应需求的获取,自适应系统的建模,需求、系统模型和交互环境的在线检测和分析,系统能力在线规划和管理等。针对系统环境的开放性、动态变化性和不确定性等,需要对系统及其交互环境在建模和模型管理方面进行综合型研究,在系统环境建模方法,环境现象感知方法,环境事件推理技术,模型的追踪关系和基于追踪关系的协同演化策略,运行时目标驱动的在线优化和系统功能重配置方法,以及系统自适应性机制的度量和评估方法等方面进行深入研究。

View File

@ -1,15 +1,16 @@
% !TEX root = main.tex
操作系统负责管理软硬件资源、操纵程序运行,为应用软件提供公共支撑,是“软件作为基础设施”的集中体现。过去,操作系统是信息空间的基础设施,起到以平台化方式向下管理各类资源、向上支撑应用运行的作用;未来,在信息物理持续融合趋势的推动下,操作系统管理资源将向各类物理资源扩展,甚至向其他具有“数字孪生”特性的经济、社会和生产生活资源扩展。这一趋势是“软件定义”思想发展的必然结果:随着计算系统正在突破单机、数据中心等封闭环境的限制,操作系统的资源虚拟化、功能可编程能力进一步拓展,从控制管理单个计算机系统资源进一步延伸为连接协调多个点组成的复杂计算系统,为信息空间、物理空间乃至整个社会提供“软件定义”手段,推动着诸如面向网构软件的操作系统\cite{mei2016internetwareos}、智能家居操作系统、智慧城市操作系统等“泛在操作系统”Ubiquitous Operating System\index{泛在操作系统}成为现实\cite{mei2018toward}
操作系统负责管理软硬件资源、操纵程序运行,为应用软件提供公共支撑,是“软件作为基础设施”的集中体现。过去,操作系统是信息空间的基础设施,起到以平台化方式向下管理各类资源、向上支撑应用运行的作用;未来,在信息物理持续融合趋势的推动下,操作系统管理资源将向各类物理资源扩展,甚至向其他具有“数字孪生”特性的经济、社会和生产生活资源扩展。这一趋势是“软件定义”思想发展的必然结果:随着计算系统正在突破单机、数据中心等封闭环境的限制,操作系统的资源虚拟化、功能可编程能力进一步拓展,从控制管理单个计算机系统资源进一步延伸为连接协调多个点组成的复杂计算系统,为信息空间、物理空间乃至整个社会提供“软件定义”手段,推动着诸如面向网构软件的操作系统\cite{mei2016internetwareos}、智能家居操作系统、智慧城市操作系统等“泛在操作系统”Ubiquitous Operating System\index{泛在操作系统}成为现实\cite{mei2018toward}
与此同时操作系统的外延、或者说“操作系统应该是什么形态”这一问题也在随着技术和应用的发展而不断扩展演化。例如在人机物融合互联这一大背景下中间件正在表现出加速融合到操作系统中的趋势早在上个世纪的90年代初美国华盛顿大学的MOSESMeta Operating System and Entity Shell项目即使用了“元级操作系统”的概念来描述分布环境下“位于本地操作系统之上、应用之下的一层软件”早期的普适计算中间件Gaia\cite{Roman:2002:GMP:643550.643558}等已在文献中混用“元级操作系统”和“中间件”概念而今天广泛应用的ROSRobot Operating System\cite{quigley2009ros}更是继承了网络计算中间件的核心思想。换言之,操作系统正在以海纳百川的方式沉淀各类具有软件定义特征的基础设施,这也是本章标题“操作系统与运行平台”的由来。
基于上述内涵和外延两个方面的观察,本章将从平台架构、方法机制、安全隐私等方面列出操作系统与运行平台的重大挑战问题,并阐述本领域的研究趋势和内容。
\section{重大挑战问题}
互联网革命正在进入下半场,“万物互联”时代正在到来,人机物融合的泛在应用场景推动着操作系统和运行平台的新一轮变革,带来体系结构、资源管理、应用支撑、首先,在所管控资源高度异构、涵盖人-机-物三元空间的条件下,未来的操作系统和运行平台需要什么样的架构(§\ref{os-architecture});其次,从向下管理泛在资源的角度,需要以及什么样的资源虚拟化和调度机制(§\ref{os-scheduling});再次,从向上支撑应用运行的角度,应当如何支撑上层应用的持续适应和演化(§\ref{os-evolution});最后,在人与物加入到操作系统管理对象中之后,基础设施层的安全与隐私保护风险如何应对(§\ref{os-security})。
互联网革命正在进入下半场,“万物互联”时代正在到来,人机物融合的泛在应用场景推动着操作系统和运行平台的新一轮变革,带来体系结构、资源管理、应用支撑、安全隐私等方面的挑战。首先,在所管控资源高度异构、涵盖人-机-物三元空间的条件下,未来的操作系统和运行平台需要什么样的架构(§\ref{os-architecture});其次,从向下管理泛在资源的角度,需要什么样的资源虚拟化和调度机制(§\ref{os-scheduling});再次,从资源聚合和应用协同支撑的角度,在网络环境下如何实现从“精确控制”到“连接协调”的变迁(§\ref{os-connection});第四,从向上支撑应用运行的角度,应当如何支撑上层应用持续适应和演化(§\ref{os-evolution});最后,在人与物加入到操作系统管理对象中之后,基础设施层的安全与隐私保护风险如何应对(§\ref{os-security})。
\subsection{支持软件定义的新型运行平台架构}\label{os-architecture}
“软件定义”的提法最早可追溯到上个世纪90年代所提出的软件定义无线电Software-defined Radio\cite{tuttlebee1999software}概念。在软件定义的无线电设备中,传统由晶体管、集成电路等实现的信号处理部件(如滤波器、调制/解调器等)被软件所代替,在大幅简化硬件设计同时,获得“功能可编程”的显著收益――设备能力可以按需扩增或裁剪,从而快速适应技术体制和市场需求的变化。
“软件定义”的提法最早可追溯到上个世纪90年代所提出的软件定义无线电Software-defined Radio\cite{tuttlebee1999software}概念。在软件定义的无线电设备中,一部分传统由晶体管、集成电路等实现的信号处理部件(如滤波器、调制/解调器等)被软件所代替,在简化硬件设计同时,获得“功能可编程”的显著收益——设备能力可以按需扩增或裁剪,从而快速适应技术体制和市场需求的变化。
进入21世纪随着云计算等新型计算范型的出现人们对计算系统的灵活性、可管理性和资源利用率的追求日益提高“软件定义”一词被引入到计算技术领域。以 “软件定义网络”Software-defined Network\index{软件定义网络} 为例,与传统网络互联能力由硬件/固件所决定不同软件定义网络强调将整个网络自底向上划分为数据、控制和应用三个平面。其中控制平面向下操纵和协调数据平面上设备如交换机的行为向上提供尽可能与硬件无关的抽象编程接口、支撑应用平面运行。控制平面不仅具备“功能可编程”能力也具备了“资源虚拟化”能力也即能够对数据平面资源进行高效管理、封装与抽象。“软件定义”内涵的这一升华深受操作系统思想的影响。例如首个开源的软件定义网络控制器NOXNetwork Operating System在其文献\cite{Gude:2008:NTO:1384609.1384625}中指出“现代操作系统通过提供对资源和信息高层抽象的可控访问…使得程序可以在各种计算硬件上安全和高效执行复杂任务”NOX就是将操作系统思想拓展到了网络设备管理中。
\begin{figure}[htbp]
@ -18,18 +19,20 @@
\centering
\includegraphics[width=0.4\linewidth,height=2.5cm]{fig2-5/tos.png}
}\
\subfigure[软件定义网络$\lbrack$x$\rbrack$]{
\subfigure[软件定义网络]{
\centering
\includegraphics[width=0.5\linewidth, height=2.5cm]{fig2-5/sdn.png}
}
\caption{操作系统与软件定义网络架构的类比}
\end{figure}
将操作系统“功能可编程”、“资源虚拟化”的思想拓展到存储、安全、数据中心等具体领域,我们就得到了软件定义存储、软件定义安全、软件定义的数据中心等概念。进一步,随着操作系统由计算机软硬件之间的桥梁、人与计算机之间的桥梁拓展到云边端、人机物之间的桥梁,其定位将由单个计算机“管家”演化为支撑“软件定义一切”的运行平台。传统操作系统架构面向的是信息空间内孤立计算结点,这一沿用数十年的架构将面临如下两个方面的挑战:
将操作系统“功能可编程”、“资源虚拟化”的思想拓展到存储、安全、数据中心等具体领域,我们就得到了软件定义存储、软件定义安全、软件定义的数据中心等概念。进一步,随着操作系统由计算机软硬件之间的桥梁、人与计算机之间的桥梁拓展到云边端、人机物之间的桥梁,其定位将由单个计算机“管家”演化为支撑“软件定义一切”的运行平台。传统操作系统架构面向的是信息空间内孤立计算节点,主要关注基于一般硬件的通用场景。这一沿用数十年的架构将面临如下三个方面的挑战:
\begin{itemize}
\item 从“精确控制”到“连接协调”的挑战。未来的人机物融合系统将是大规模、网络化的计算系统虽然每个节点上仍将运行传统的节点操作系统在节点内部通过对资源实施严格精确控制来达到资源虚拟化、功能可编程的目的但这种精确控制机制很难直接应用到网络层面。事实上这种简单放大的思路在30年前的Amobea等分布式操作系统实践中就已经证明很难奏效参见本书第一部分\ref{middleware}节)。根本原因在于网络化系统具有开放和复杂系统的特征,其所涉及的实体往往跨越多个管理域,系统边界也随时间演化而不断发生变化,很难构建静态不变的控制中心,或是明确稳定的自顶向下层次化结构。在这种场景下,更为妥当的方式将是 “连接协调”,即通过按需聚合和动态协同来打破不同节点之间的壁垒,统一管理并优化利用计算、数据甚至物理世界各种资源。从“精确控制”到“连接协调”的方式的这一转变,将从根本上动摇现有操作系统的架构,并催生新一代、运行于节点操作系统之上的网络操作系统。在这一过程中,区块链、"云-端”融合、5G通信等新一代分布计算支撑技术将发挥重要的使能作用。例如在其所适合的场景下区块链可望实现信息共享从集中式架构到去中心化架构的变迁其应用将突破传统的金融领域沉淀为泛化运行平台的组成部分之一支持多种类型应用的能力有效提升。
\item 计算、通信、控制三元融合场景的挑战。今天广泛使用的Windows、Linux等操作系统在架构上深受首个现代意义上操作系统Unix的影响。它们运行于单一计算结点范围内内部大致可划分为资源管理、系统调用、人机接口等层次。这种架构针对信息空间内部的孤立计算结点设计很难支撑泛在化、智能化、网络化的新型应用场景。具体而言在计算维度上单一的本地计算将向云边端一体化计算、人机物协作计算、智能和机器学习计算等新型场景变迁在通信维度上5G等新型网络的出现使得网络时延和吞吐量得到极大改善可望触发移动和嵌入式操作系统的新一轮革命在控制维度上物联网、机器人等与物理世界紧密融合的计算设备涌现使得“功能可编程”将突破信息空间范畴需要在操作系统架构设计层面上考虑物理空间约束和对物理空间的影响。
\item 新型硬件对经典操作系统架构的挑战。近年来处理器、存储器件、网络互联设备等硬件技术快速发展众核处理器、FPGA/GPU加速硬件、非易失内存、远程直接数据存取RDMA网络等一系列高性能、具有新架构和新特征的新型硬件不断涌现并逐渐成为主流技术。一个典型案例是面向人工智能等特定领域的“CPU + xPU\footnote{如图形处理器GPU、张量处理器TPU、神经网络处理器NPU等}“体系结构在高性能计算机及移动异构片上系统中均得到较广泛应用。如何充分发挥新型硬件的潜力是经典操作系统架构设计所面临的重大挑战。以内核设计为例传统操作系统主要有宏内核和微内核两种模式以Unix/Linux为代表的宏内核操作系统在架构上已经趋于稳定新的改进主要来自对新的硬件、新的抽象和新型外设的支持这种不断打”补丁“的方式导致系统不堪重负而宏内核天然的一体性也导致通过定制裁剪来适应异构硬件的方法代价高昂现有微内核操作系统主要考虑受约束场景的需求缺乏对大型计算密集任务场景的扩展性支持也缺少完善的用户态环境。
\item 从单一节点到大规模开放环境的挑战。可以预见,随着人机物融合、特别是“软件定义一切”的付诸实践,未来操作系统将具有两种形态:一方面,在新型硬件技术和新型应用场景的共同驱动下,今天我们所熟知的、以单一计算节点为作用空间的经典操作系统(以下称节点操作系统)将继续发展,实现节点尺度上的资源虚拟化和功能可编程;另一方面,操作系统的作用空间将突破单一节点的束缚,新一代操作系统将运行于经典操作系统之上,实现网络环境下异构资源聚合和优化管理,支撑各种类型、更大尺度上的分布式应用,实现计算、数据甚至物理世界各类异构资源的调控。后者将极大的扩展现有操作系统概念的内涵与外延,由于系统边界的开放性、体系结构的分布性、运行环境的动态性、涉及资源的高度异构性,其架构将很难沿用传统操作系统自顶向下、精确控制的模型(详见\ref{os-connection}节)。
\item 计算、通信、控制三元融合场景的挑战。今天广泛使用的Windows、Linux等操作系统在架构上深受首个现代意义上操作系统Unix的影响。它们运行于单一计算节点范围内内部大致可划分为资源管理、系统调用、人机接口等层次。这种架构针对信息空间内部的孤立计算节点设计很难支撑泛在化、智能化、网络化的新型应用场景。具体而言在计算维度上单一的本地计算将向云边端一体化计算、人机物协作计算、智能和机器学习计算等新型场景变迁在通信维度上5G等无线通信技术的出现使得网络时延和吞吐量得到极大改善可望触发移动和嵌入式操作系统的新一轮革命在控制维度上物联网、机器人等与物理世界紧密融合的计算设备涌现使得“功能可编程”将突破信息空间范畴需要在操作系统架构设计层面上考虑物理空间约束和对物理空间的影响。
\end{itemize}
\subsection{泛在资源的高效虚拟化和灵活调度}\label{os-scheduling}
文献\cite{mei2018toward}给出了“泛在操作系统”的概念指出未来的操作系统不仅仅是IT操作系统也将成为物理世界和虚拟世界的操作系统在今天已经初露端倪的机器人操作系统、车辆操作系统、物联网操作系统等基础上校园操作系统、城市操作系统、家庭操作系统等可望在将来成为现实。在这一背景下操作系统的核心功能――资源虚拟化和调度的实现机制面临一系列挑战\ref{fig2})。
@ -40,38 +43,46 @@
\label{fig2}
\end{figure}
首先,如何为人机物融合计算中的各类新型异构资源建立抽象,是未来操作系统需要解决的核心问题。本质上,操作系统和运行平台负责向应用提供“抽象”,并将这些“抽象”绑定到硬件祼机。数十年来,这一领域已经积累了诸如进程、线程、文件、内存页等一系列重要抽象机制,为现代操作系统奠定了基石。但是,未来操作系统所管理的资源将跨越人、机、物三元空间,涵盖物理资源、计算资源、数据资源等多种类型,现有抽象远远不能满足需求。因此,需要探索符合新型资源特点、切合其特性的抽象机制,并突破在单一计算结点、有一定边界的分布式系统、跨域开放式系统等不同尺度上维护这些抽象的方法机理
首先,高性能处理器、新型存储器件、高速网络互联设备等快速发展使得经典的计算资源虚拟化和调度机制面临挑战。例如多核和多芯片计算机系统中非一致性内存访问架构使得传统基于页的虚存系统面临挑战目前已有的设备模拟、设备半虚拟化、设备直通、单根虚拟化SR-IOV等技术尚不能完全扩展到 GPU、张量处理器等人工智能新型加速器或者是效率和灵活性还需要进一步提升非易失性内存的应用使得内存中的某些数据不再需要存储到硬盘内存和持久存储走向融合对传统类文件系统架构带来挑战100G及以上以太网链路在大规模数据中心的普及网络进入纳秒级时延带宽增长速度超越CPU处理能力增长速度操作系统网络协议栈面临挑战等等
其次,在操作系统支持下,物理资源将呈现物理与数字二像性,如何将信息空间内的抽象与物理空间内的实体绑定,并持续保持和校正二者之间的一致性,是操作系统泛在化以后产生的新问题。一方面,需要利用预建立物理模型、传感器实时数据、较大时空尺度上的运行历史等数据,集成多物理量、多尺度、多概率的仿真过程,实现物理资源到信息空间中实体的正向映射,以及“因果关联”的虚拟实体到物理资源的映射;另一方面,即使建立了相应的“数字孪生”关系,也要考虑物理域和社会域资源在管理和调度过程中的特有属性,例如动作的非精确性和动态性、固有的噪声等
其次,如何为人机物融合计算中的各类新型异构资源建立抽象,是未来操作系统需要解决的核心问题。本质上,操作系统和运行平台负责向应用提供“抽象”,并将这些“抽象”绑定到硬件祼机。数十年来,这一领域已经积累了诸如进程、线程、文件、内存页等一系列重要抽象机制,为现代操作系统奠定了基石。但是,未来操作系统所管理的资源将跨越人、机、物三元空间,涵盖物理资源、计算资源、数据资源等多种类型,现有抽象远远不能满足需求。因此,需要探索符合新型资源特点、切合其特性的抽象机制,并突破在单一计算节点、有一定边界的分布式系统、跨域开放式系统等不同尺度上维护这些抽象的方法机理
再次,如何使打破信息-物理世界间以及不同节点间的壁垒,按需聚合各类资源,是实现泛在资源优化利用的关键。如前节所述,未来的计算系统在微观尺度上仍将运行我们今天所熟悉的节点级操作系统,而在整个系统的宏观尺度上,资源管理模型将从“精确控制”向“连接协调”转变。虽然这一理念在中间件、网构软件等领域已经有了初步实践,但一系列实现机制层面上的开放问题仍有待解决,包括需要何种模型来协调跨域资源及其能力、如何在动态环境下维持相对稳定的“功能可编程”抽象、如何有效管理调度各种冲突及涌现现象等。
再次,在操作系统支持下,物理资源将呈现物理与数字二像性,如何将信息空间内的抽象与物理空间内的实体绑定,并持续保持和校正二者之间的一致性,是操作系统泛在化以后产生的新问题。一方面,需要利用物理模型、传感器实时数据、较大时空尺度上的运行历史等数据,集成多物理量、多尺度、多概率的仿真过程,实现物理资源到信息空间中实体的正向映射,以及“因果关联”的虚拟实体到物理资源的映射;另一方面,即使建立了相应的“数字孪生”关系,也要考虑物理域和社会域资源在管理和调度过程中的特有属性,例如动作的非精确性和动态性、固有的噪声等。
最后,需要深入理解未来泛在计算场景下应用模式的共性特征,为上层应用的“软件定义”提供适当的、相对稳定的编程接口。可以预见,未来泛在计算场景至少包括数据规模巨大、强调按需能力获取的“云-边”效用计算,资源需求动态变化、不确定性很强的智能计算,移动性强、承载设备多、续航要求高、迭代快的智慧城市、工业互联网等领域的协作计算,人与物相互驱动、相互协同的人机物统一计算等。这些泛在应用模式很多都处在探索阶段,需要理解和凝练应用模式的共性特征,进而通过编程接口支撑上层应用灵活实施软件定义。
最后,需要深入理解未来泛在计算场景下应用模式的共性特征,为上层应用提供适当的、相对稳定的“功能可编程接口。可以预见,未来泛在计算场景至少包括数据规模巨大、强调按需能力获取的“云-边”效用计算,资源需求动态变化、不确定性很强的智能计算,移动性强、承载设备多、续航要求高、迭代快的智慧城市、工业互联网等领域的协作计算,人与物相互驱动、相互协同的人机物统一计算等。这些泛在应用模式很多都处在探索阶段,需要理解和凝练应用模式的共性特征,进而通过编程接口支撑上层应用灵活实施软件定义。
\subsection{复杂软件系统持续适应演化的共性支撑}\label{os-evolution}
\subsection{基于连接协调的资源聚合与应用协同}\label{os-connection}
未来的人机物融合系统将是大规模、网络化的计算系统虽然每个节点上的节点操作系统仍通过自顶向下、精确控制的模型来达到资源虚拟化、功能可编程的目的但这种机制很难放大到网络层面、特别是大规模网络化系统。事实上简单放大的思路在30年前的Amobea等分布式操作系统实践中就已经尝试过并被证明很难奏效参见\ref{middleware}。根本原因在于大规模网络化的系统具有开放复杂系统的特征1需求和环境开放性突出表现在此类系统通常是在不断适应需求和环境变化的过程中逐步成长演化而成的这一过程在时间尺度上可能长达数年甚至数十年2行为开放性突出表现在此类系统中存在大量非线性相互作用和涌现现象整体的行为很难简单地通过成员系统行为来进行刻画和预测3边界开放性突出表现在系统往往依赖于大量外部软件实体自身构成不具有明确、封闭的边界同时人社会组织、物理世界和软件系统边界模糊化。这些开放性将直接映射到操作系统和运行平台层面使得要“虚拟化”的资源和“可编程”的功能都具有明显的开放性导致很难构建出自顶向下、精确控制的模型。
因此,在开放的网络化环境下,更为妥当的资源管理和应用协同方式将是 “连接协调”,即通过按需聚合和动态协同来打破不同节点之间的壁垒,统一管理并优化利用计算、数据甚至物理世界各种资源,支持应用实体的分布式自主协同。换言之,操作系统将成为通过软件定义管理复杂计算系统的“元”级系统,面向单个计算机系统的“控制”功能则逐渐转移到面向多个计算机系统“连接协调”功能。这将动摇现代操作系统构造和运行的很多基本假设。虽然相关理念在中间件领域和网构软件等范型中已有了初步实践,但一系列共性机理层面上的问题仍有待解决,包括需要何种模型来协调跨域资源及其能力、如何在动态环境下维持相对稳定的“功能可编程”抽象、如何支撑软件实体通过扁平化架构达成共识、如何有效管理调度各种冲突及涌现现象等。
在机理突破基础上,“连接协调”需要何种类型的基础设施支撑,是操作系统领域另一重要挑战。近年来,以区块链\index{区块链}为代表的分布式共识\index{分布式共识}技术,特别是区块链从应用系统向运行平台蜕变的发展历程(参见\ref{blockchain-history}为这一方面的实践提供了一个可借鉴案例——区块链可以在相对开放环境下通过扁平化架构和“连接协调”机制在多种类型大规模分布式系统中构建群体的共同认知。例如IBM的面向区块链的分布式操作系统Hyperledger Fabric\cite{Androulaki:2018:HFD:3190508.3190538}可以利用区块链来支撑分布式应用运行,并且通过模块化的共识协议灵活适应不同的应用场景和信任模型。但是,当前区块链的实际部署仍集中在金融、物流等少数领域,要使其能够为更多应用领域赋能,一系列问题仍有待解决,包括共识算法效率以及如何在效率和扩展性、安全性之间权衡、如何实现不同区块链之间的互操作、如何在形成共识同时保护隐私、如何在开放环境下实现有效监管等。
更进一步,区块链及其上软件系统作为新一代分布式软件体系结构的探路者,在扩展操作系统运行平台外延与内涵的同时,在未来极有可能成为系统软件和软件生态发展的催化剂,围绕群体共识、可信计算等问题,催生分布式软件一个新的独立分支。因此,如何“来自区块链、超越区块链”,借鉴区块链思想,为未来大规模网络化系统共同认知、协同决策、行为实施等环节实现连接协调提供手段支撑,是操作系统和运行平台领域需要探索的方向。
\subsection{复杂软件系统适应演化的共性支撑}\label{os-evolution}
近年来,以人机物融合系统为背景,有研究者提出了信息产业的“昆虫纲悖论”:一方面,未来物联网设备和应用场景将会像昆虫一样繁多,带来空前巨大的市场;另一方面,由于每种场景都存在其个性化需求和特点,针对场景所开发的软件系统将缺乏可拷贝性,导致边际成本显著提高,反过来制约产业的发展。要打破这一悖论,关键在于软件系统不能静态绑定到特定场景,而应当具备灵活适应场景的能力,在其生命周期内能够持续演化来应对环境和用户需求的变化。
软件适应\index{软件适应}能力将成为未来人机物融合软件系统的基本属性而操作系统在支撑软件适应演化活动方面具有天然优势从可计算性的角度而言操作系统与下层硬件裸机一起组成了能够“操纵”应用软件执行的通用图灵机实现这一“操纵”能力使得操作系统有可能驱动应用软件的适应和演化从计算反射Reflection实现的角度而言操作系统和运行平台是应用软件执行的“元层容器”对于上层应用具有计算反射能力例如获知上层应用和环境状态、维护系统化反映上层应用环境和状态的模型、对上层应用实施调整操作等。因此操作系统和运行平台是驱动计算节点动态感知、自主学习、在线演化的理想载体但这一地位也同时对平台设计实现提出了一系列挑战。
软件适应\index{软件适应}能力将成为未来人机物融合软件系统的基本属性而操作系统在支撑软件适应演化活动方面具有天然优势从可计算性的角度而言操作系统与下层硬件裸机一起组成了能够“操纵”应用软件执行的通用图灵机实现这一“操纵”能力使得操作系统有可能驱动应用软件的适应和演化从计算反射Reflection实现的角度而言操作系统和运行平台是应用软件执行的“元层容器”对于上层应用具有反射能力例如获知上层应用和环境状态、维护系统化反映上层应用环境和状态的模型、对上层应用实施调整操作等。因此操作系统和运行平台是驱动计算节点动态感知、自主学习、在线演化的理想载体但这也同时对平台设计实现提出了一系列挑战。
\begin{itemize}
\item 操作系统及其上应用的自主适应与学习赋能。从“网络就是计算机”到“场景就是计算机”,其蕴含的理念从计算资源聚合进一步拓展到了多样化人机物融合场景下的资源按需定制。要实现“场景就是计算机”,关键在于操作系统和其上应用需要具备主动适应新场景和场景变化的能力,包括:操作系统本身和其上应用都具有柔性体系结构,节点本身可以动态调整,节点与节点这间连接关系可以按需变化,并且携带有指导这些变化的元层数据;在操作系统和运行平台内部构建“感知-理解-调整”回路,能够捕获和理解环境及运行状态,进而据此进行应用配置生成、主动部署、参数和连接关系在线调整等操作;具有从过去的适应和演化动作及效果中持续学习的能力,从而突破预定义场景和决策规则的约束,使得操作系统及其上应用在适应场景和用户需求变化的维度上能够表现出一定的“智能”。
\item 操作系统及其上应用的自主适应与学习赋能。从计算资源聚合到多样化人机物融合场景下的资源按需定制,关键在于操作系统和其上应用需要具备主动适应新场景和场景变化的能力,包括:操作系统本身和其上应用都具有柔性体系结构,节点本身可以动态调整,节点与节点这间连接关系可以按需变化,并且携带有指导这些变化的元层数据;在操作系统和运行平台内部构建“感知-理解-调整”回路,能够捕获和理解环境及运行状态,进而据此进行应用配置生成、主动部署、参数和连接关系在线调整等操作;具有从过去的适应和演化动作及效果中持续学习的能力,从而突破预定义场景和决策规则的约束,使得操作系统及其上应用在适应场景和用户需求变化的维度上能够表现出一定的“智能”。
\item 大规模复杂软件系统\index{复杂软件系统}的演化规律及其运行支撑。人机物融合场景下许多软件系统已经达到了空前的规模。例如互联网的前身ARPANET仅连接了4个节点而2018年移动社交应用微信的月活跃用户数达到了10.8亿。规模上的量变引起质变,此类系统具有与单个节点或小规模分布式系统不同的演化规律,带来了一系列挑战性问题:软件系统规模巨大,其海量状态数据之间存在着千丝万缕的联系,如何“去粗取精、去伪存真”,提取能够作为适应演化依据的运行态势数据;系统中的节点通过“连接”形成了一个复杂网络,如何基于复杂网络中的交互掌握软件体系结构和运行大势;在由大量自治软件单元所组成的软件系统中,适应性演化动作往往发生在单元、子系统、系统等多个尺度上,如何在群体层面上形成恰当的适应性演化行为,以及不同层次上的适应性演化如何相互影响;等等。
\item “人在回路中”的软件系统演化决策。软件是“由人开发为人开发”的产品人在软件生命周期各个阶段所发挥的作用不可替代人是软件产品需求的提出者也是需求落地实施的开发者同时也是软件终端的使用者以及运行时的维护和升级者。因此未来人机物融合软件系统适应性演化决策应当是软件和人相结合的方式除了现有的规则、策略、机器学习等自动化方法外“人在回路中”是其重要的特点主要表现为两种形态操作系统和运行平台集成DevOps工具链来有效支持人来发挥作用软件系统从平台层所累积的人的行为数据、特别是群体行为数据中进行主动学习从而不断提升其演化决策能力。
\item“信息-物理-社会”空间的协同持续演化。复杂软件系统是典型的“社会-技术-物理”系统,软件将与其所在的社会和物理环境紧密融合在一起,相互作用、相互影响。这与传统的、完全在信息空间运行的软件有着质的区别。具体到基础性的、“操纵计算系统执行”的操作系统和运行平台层面,需要有能力支撑上层应用与物理世界和人类社会长期性的共同进化。这将显著扩展现有操作系统的内涵,带来一组极具挑战性的开放问题,例如:物理空间变化的频率远高于信息空间变化的频率,如何高效地支撑上层软件适应物理空间的变化;利用人工智能算法来进行演化决策,一旦决策错误可能会直接在物理空间造成严重后果,操作系统和运行平台应当提供什么样的监督、审计和补偿机制;等等。
\item “人在回路中”的软件系统演化决策。软件是“由人开发,为人开发”的产品,人在软件生命周期各个阶段所发挥的作用不可替代,人是软件产品需求的提出者,也是需求落地实施的开发者,同时也是软件终端的使用者以及运行时的维护和升级者。因此,未来人机物融合软件系统适应性演化决策应当是软件和人相结合的方式,除了现有的规则、策略、机器学习等自动化方法外,“人在回路中”是其重要的特点,主要表现为种形态操作系统和运行平台集成DevOps工具链来有效支持人作为“指导者”Oracle来发挥作用;软件系统从平台层所累积的人的行为数据、特别是群体行为数据中进行主动学习,从而不断提升其演化决策能力;人与软件实体协同工作,在宏观尺度上通过人的行为演化驱动软件演化,实现行为涌现和人机协同演化
\item“信息-物理-社会”空间的协同持续演化。未来软件将与其所在的社会和物理环境紧密融合在一起,相互作用、相互影响。这与传统的、完全在信息空间运行的软件有着质的区别。具体到基础性的、“操纵计算系统执行”的操作系统和运行平台层面,需要有能力支撑上层应用与物理世界和人类社会长期性的共同进化。这将显著扩展现有操作系统的内涵,带来一组极具挑战性的开放问题,例如:物理空间变化的频率远高于信息空间变化的频率,如何高效地支撑上层软件适应物理空间的变化;利用人工智能算法来进行演化决策,一旦决策错误可能会直接在物理空间造成严重后果,操作系统和运行平台应当提供什么样的监督、审计和补偿机制;等等。
\end{itemize}
\subsection{人机物融合过程中的安全与隐私保护}\label{os-security}
数十年来“魔高一尺道高一丈”主流操作系统不断围绕系统用户认证、访问控制、数据安全、漏洞攻击缓解等方面进行安全增强。然而安全与隐私保护是一种伴生技术新的安全问题伴随新计算模式的涌现而不断产生。未来随着5G通讯、移动互联、云计算与物联网的应用普及人机物将广泛互联在网络虚拟世界与现实世界的行为将实现虚实深度融合导致信息系统的安全防御边界愈加模糊面临的安全威胁在种类和数量上都将激增用户隐私保护的难度显著增加。在未来人机物融合的过程中作为信息空间与物理空间乃至整个社会进行统一信息处理的载体操作系统及运行平台在安全和隐私保护方面的需求将面临一系列挑战
首先需要在大规模松耦合交互场景下建立虚实融合的信任关系。在未来人机物深度融合的时代将会有大量物理设备与应用软件接入到运行平台以数字身份作为运行主体在系统中发挥作用。随着越来越多的现实世界行为被迁移到网络虚拟空间进行处理在数字世界中如何对纷繁芜杂的虚拟社会关系进行准确刻画并实施严格管理是构筑未来安全可信数字空间的所必须要面对的挑战。在此基础上要建立数字身份的信任关系还需要在平台层面上对数字实体在虚拟世界的行为进行全面、如实地记录为准确刻画数字世界实体间的信任关系提供有力依据。并且由于现实社会中主体之间关系的大规模、松耦合特性原有的集中式管理方式对人机物融合系统的实体管理将无法适用需要实现管理的弱中心化基于众包、基于区块链等新型信任关系构建方法已在操作系统领域崭露头角。例如IBM的面向区块链的分布式操作系统Hyperledger Fabric\cite{Androulaki:2018:HFD:3190508.3190538}可以利用区块链来支撑分布式应用运行,并且通过模块化的共识协议来使得系统可以灵活适应不同的应用场景和信任模型。
其次,需要实现人机物融合场景下的严苛安全和隐私保护需求。人机物融合场景下计算节点众多、数据传输分散,诸如边缘计算等以“计算尽可能靠近数据的源头”为基本理念的计算模式将走向前台。而这些新的计算模式由于其服务模式的复杂性、实时性,数据的多源异构性、感知性以及终端的资源受限特性,传统数据安全和隐私保护机制将很难高效应用。同时,由于移动终端的资源一般都比较有限,其所能承载的数据存储计算能力和安全算法执行能力也有一定的局限性。如何将传统的隐私保护方案与边缘计算环境中边缘数据处理特性相结合,从数据隐私、位置隐私、身份隐私等多个方面入手研究相应的保护方案,是未来操作系统安全与隐私保护领域面临的重要挑战。同时,为了支撑广泛、大规模的人机物融合和互联,需要突破现有操作系统安全和隐私保护的被动防御机制、打破“信任篱笆”,强化安全与隐私保护的主动性与支配性,在利益与风险之间权衡,既关注更强、更灵活的隐私保护,又支持网络资源共享和互联互通。
首先,需要在大规模松耦合交互场景下建立虚实融合的信任关系。在未来人机物深度融合的时代,将会有大量物理设备与应用软件接入到运行平台,以数字身份作为运行主体在系统中发挥作用。随着越来越多的现实世界行为被迁移到网络虚拟空间进行处理,在数字世界中如何对纷繁芜杂的虚拟社会关系进行准确刻画并实施严格管理,是构筑未来安全可信数字空间的所必须要面对的挑战。在此基础上,要建立数字身份的信任关系,还需要在平台层面上对数字实体在虚拟世界的行为进行全面、如实地记录,为准确刻画数字世界实体间的信任关系提供有力依据。并且,由于现实社会中主体之间关系的大规模、松耦合特性,原有的集中式管理方式对人机物融合系统的实体管理将无法适用,需要实现管理的弱中心化,基于区块链等新型分布式信任关系构建方法已在操作系统领域崭露头角。
其次,需要实现人机物融合场景下的严苛安全和隐私保护需求。人机物融合场景下计算节点众多、数据传输分散,诸如边缘计算等以“计算尽可能靠近数据的源头”为基本理念的计算模式将走向前台。而这些新的计算模式由于其服务模式的复杂性、实时性,数据的多源异构性、感知性以及终端的资源受限特性,传统数据安全和隐私保护机制将很难高效应用。同时,由于移动终端的资源一般都比较有限,其所能承载的数据存储计算能力和安全算法执行能力也有一定的局限性。如何将传统的隐私保护方案与边缘计算环境中边缘数据处理特性相结合,从数据隐私、位置隐私、身份隐私等多个方面入手研究相应的保护方案,并沉淀为软件基础设施,是未来操作系统安全与隐私保护领域面临的重要挑战。同时,为了支撑广泛、大规模的人机物融合和互联,需要突破现有操作系统安全和隐私保护的被动防御机制、打破“信任篱笆”,强化安全与隐私保护的主动性与支配性,在利益与风险之间权衡,既关注更强、更灵活的隐私保护,又支持网络资源共享和互联互通。
\section{主要研究内容}
如本章伊始所述,未来操作系统将具有两种形态:一方面,在新型硬件技术和新型应用场景的共同驱动下,今天我们所熟知的、以单一计算节点为作用空间的操作系统(以下称节点操作系统)将继续快速发展;另一方面,随着人机物融合、特别是“软件定义一切”付诸实践,诸如“泛在操作系统”等新一代操作系统将出现,它们运行于经典操作系统之上,通过“连接协调”实现网络环境下人机物异构资源聚合和优化管理,支撑各种类型、不同尺度的泛在应用。
本节将围绕未来操作系统的上述两种形态,阐述操作系统和运行平台的研究趋势与内容。其中,§\ref{os-research1}\ref{os-research3}聚焦节点操作系统,§\ref{os-research4}\ref{os-research7}聚焦新一代操作系统,§\ref{os-research8}和§\ref{os-research9}则分别重点阐述与软件适应和演化、操作系统生态链构建相关的问题(图\ref{fig3})。
如本章伊始所述,未来操作系统将具有节点操作系统和以网络为核心的新一代操作系统两种形态。前者是对今天经典操作系统的继承与发展,后者以“泛在操作系统”\cite{mei2018toward}等为代表,运行于经典操作系统之上,通过“连接协调”实现网络环境下人机物异构资源聚合和优化管理,支撑各种类型、不同尺度的泛在应用。本节将围绕未来操作系统的上述两种形态,阐述操作系统和运行平台的研究趋势与内容。其中,§\ref{os-research1}\ref{os-research3}聚焦节点操作系统,§\ref{os-research4}\ref{os-research8}聚焦新一代操作系统,§\ref{os-research9}和§\ref{os-research10}则分别重点阐述与软件适应和演化、操作系统生态链构建相关的问题(图\ref{fig3})。
\begin{figure}[htbp]
\centering
@ -81,7 +92,7 @@
\end{figure}
\subsection{新型硬件资源管理和调度技术}\label{os-research1}
过去60年中大型主机、个人计算机、手持移动设备、物联网设备等不同类型计算设备的出现推动着经典操作系统技术的持续变革。近年来处理器、存储器件、网络互联设备等硬件技术快速发展众核处理器、FPGA/GPU加速硬件、非易失内存、远程直接数据存取RDMA网络等一系列高性能、具有新架构和新特征的新型硬件不断涌现并逐渐成为主流技术。作为计算系统的“管家”,如何充分适应新型硬件特点并充分发挥其潜能,是操作系统理论和技术的重要研究内容。例如大规模分布式异构计算以及移动异构片上系统对Linux等多线程共享存储的单内核结构提出挑战多核和多芯片计算机系统中非一致性内存访问架构使得传统基于页的虚存系统面临挑战非易失性内存的应用使得内存中的某些数据不再需要存储到硬盘在为操作系统带来性能优化空间的同时对传统类POSIX文件系统架构带来挑战目前已有的设备模拟、设备半虚拟化、设备直通、单根虚拟化SR-IOV等技术尚不能完全扩展到GPU、张量处理器等人工智能新型加速器或者是效率和灵活性还需要进一步提升 100G及以上以太网链路在大规模数据中心的普及网络带宽增长速度超越CPU处理能力增长速度传统的操作系统网络协议栈面临挑战等等
近年来,计算机硬件技术发展迅速,并且表现出向“上”(高性能)、“下”(轻量级)两端拓展的趋势。作为计算系统的“管家”,如何充分适应新型硬件特点并充分发挥其潜能,是操作系统理论和技术的重要研究方向,研究内容包括:新型基础内核架构将汲取宏/微等不同类型内核的长处研究实现适合多样化应用场景和新型硬件特点、易于裁剪定制的新一代操作系统内核架构异构资源融合支撑着重针对”CPU+xPU“硬件体系结构解决异构编程模型、同步和通信机制、访存效率的优化等问题实现高效易用的异构资源使用模式面向极端硬件和应用的轻量级虚拟化机制将结合硬件虚拟化支持研究轻量级虚拟化的实现与虚拟化资源管理机制满足大规模虚拟化管理以及极端硬件如FPGA/GPU加速硬件、TB级内存、非易失性存储器等条件下的虚拟化需求应用场景支撑能力主要研究智能计算、边缘计算以及云边端融合应用场景下的基础系统共性支撑环境为在节点粒度上为新一代人机物整合应用实现可编程的资源和能力抽象
\subsection{面向特定应用领域的优化技术}\label{os-research2}
当前,运行于单一计算节点的操作系统架构已经趋于稳定,但移动计算、物联网等特定应用领域的快速发展,推动着相应操作系统实现优化技术的突破。一方面,移动计算已经是主流的计算模式之一,智能移动终端的操作系统当前已经形成了较为成熟的产业生态。但是,移动计算与边缘计算、人工智能等新兴领域的交叉融合,推动着其架构和实现机理的不断拓展,相应操作系统也表现出向低功耗、强交互、智能化和高安全发展的趋势,研究内容包括轻量级操作系统体系结构、多场景自适应电源管理优化、资源受限环境下的深度学习适配优化、多种生物特征认证增强等。另一方面,随着物联网等设备的普及,针对嵌入式计算中安全关键、任务关键、非关键等任务混合运行及其安全隔离问题,围绕任务确定性调度、系统实时响应、任务间高效通信、操作系统内核验证等技术展开研究,满足嵌入式计算在复杂环境中对系统实时性、安全性、可靠性的严酷要求。
@ -89,27 +100,30 @@
\subsection{软硬协同的安全攻防对抗技术}\label{os-research3}
如何结合处理器和硬件平台的特点设计新型安全高效的操作系统结构是未来操作系统技术的另一主要研究内容。当前基于CPU的可信计算空间隔离和基于TPM芯片的可信计算技术为可信软件执行提供了硬件级的执行验证这些技术都从操作系统底层提供了有力的可信执行支持。未来操作系统安全研究将发展软硬协同的操作系统安全攻防对抗模式变被动响应为主动防护夯实信息系统的安全基础。具体而言需要突破软硬件高效协同的安全体系结构设计、安全防护模型和方法、跨域交互机理及优化方法和基于模糊测试的内核安全性测试等关键技术结合硬件平台提供的多层次特权防护、资源分区隔离等安全能力解决软硬协同的高安全操作系统设计中的核心问题。
\subsection{面向新型架构的资源虚拟化技术}\label{os-research4}
以“函数即服务”FaaS为代表的无服务器计算等计算模式和边缘计算等新型应用模式给传统操作系统和虚拟化架构带来了挑战。首先,虚拟化技术需要能够在支持多租户隔离的前提下实现高密度的资源虚拟化。以在边缘计算场景为例,与集中式云数据中心不同,可能需要在边缘的十几个服务器上分别支持数千种不同的服务,当前已有的基于容器的轻量级虚拟化技术尚不能完全满足。其次,在无服务器计算和边缘计算等场景中,应用对资源的需求是高度动态变化的,这给虚拟化的性能提出了苛刻要求,需要探索新的轻量级虚拟化架构和优化机制。再次,部分云计算应用开始出现向微服务应用发展的趋势。这意味着软件体系结构进一步地解耦,单个镜像上运行的业务更加专一。因此,当前提出了 Unikernel等机制来大幅度精简冗余模块来提高虚拟机的启动速度但虚拟化场景下的适用性和成熟度还需要进一步提升。最后计算资源之外的其它资源GPU、存储、网络等)专用虚拟化技术需要进一步探索。
\subsection{面向分布计算环境的资源虚拟化技术}\label{os-research4}
虚拟化技术不仅仅能够在单台计算机上实现资源的有效隔离更重要的是在分布计算环境下能够实现大量资源的细粒度管理为弹性可伸缩的资源聚合奠定基础这也是为什么云计算高度依赖虚拟化技术的原因。当前“函数即服务”FaaSFunction as a Service、边缘计算等新型分布计算应用模式正在涌现操作系统在资源 虚拟化方面需要突破一系列理论和实践问题。首先,虚拟化技术需要能够在支持多租户隔离的前提下实现高密度的资源虚拟化。以在边缘计算场景为例,与集中式云数据中心不同,可能需要在边缘的十几个服务器上分别支持数千种不同的服务,当前已有的基于容器的轻量级虚拟化技术尚不能完全满足。其次,在无服务器计算和边缘计算等场景中,应用对资源的需求是高度动态变化的,这给虚拟化的性能提出了苛刻要求,需要探索新的轻量级虚拟化架构和优化机制。再次,部分云计算应用开始出现向微服务应用发展的趋势。这意味着软件体系结构进一步地解耦,单个镜像上运行的业务更加专一。当前提出了 Unikernel等机制来大幅度精简冗余模块来提高虚拟机的启动速度但虚拟化场景下的适用性和成熟度还需要进一步提升。最后在分布环境下,计算资源之外的其它资源(如网络等)专用虚拟化技术需要进一步探索。
\subsection{点的资源高效按需聚合技术}\label{os-research5}
“计算的泛在化”意味着操作系统和运行平台的作用范围突破了传统单一计算点范畴,需要在广域环境内调度各类资源,为上层软件提供相对稳定的抽象。在计算系统规模持续增长的情况下,需要突破海量虚拟机资源的高效管理、虚拟机间通信优化、自适应的虚拟机在线迁移及动态部署、共生虚拟机间共享内存的弹性管理及优化、虚拟机访存效率优化等技术,实现跨点的高效分布式计算资源调度。另一方面,网络操作系统中往往没有明确、固化的控制中心或层次结构,跨点的“资源虚拟化”和“能力可编程”主要依靠“连接协调”、通过自底向上的方式来实现。如何借鉴社会系统、经济系统、生物系统等复杂系统机理,实现上述目标,也是此类操作系统面临的挑战。
\subsection{点的资源高效按需聚合技术}\label{os-research5}
“计算的泛在化”意味着操作系统和运行平台的作用范围突破了传统单一计算点范畴,需要在广域环境内调度各类资源,为上层软件提供相对稳定的抽象。在计算系统规模持续增长的情况下,需要突破海量虚拟机资源的高效管理、虚拟机间通信优化、自适应的虚拟机在线迁移及动态部署、共生虚拟机间共享内存的弹性管理及优化、虚拟机访存效率优化等技术,实现跨点的高效分布式计算资源调度。另一方面,网络操作系统中往往没有明确、固化的控制中心或层次结构,跨点的“资源虚拟化”和“能力可编程”主要依靠“连接协调”、通过自底向上的方式来实现。如何借鉴社会系统、经济系统、生物系统等复杂系统机理,实现上述目标,也是此类操作系统面临的挑战。
在跨点的资源按需聚合方面,未来的一个重要应用模式是“云-边-端”\index{“云-边-端”}协同模式。因此,需要面向现代网络化信息支撑体系的发展趋势,探索以资源虚拟化、服务云化、前后融合为基本特征的“云-边-端”协同操作系统柔性结构设计与优化技术,研究“云-边-端”高效资源协同调度框架、基于云边端协同和多目标优化的任务调度技术等。
在跨点的资源按需聚合方面,未来的一个重要应用模式是“云-边-端”\index{“云-边-端”}协同模式。因此,需要面向现代网络化信息支撑体系的发展趋势,探索以资源虚拟化、服务云化、前后融合为基本特征的“云-边-端”协同操作系统柔性结构设计与优化技术,研究“云-边-端”高效资源协同调度框架、基于云边端协同和多目标优化的任务调度技术等。
\subsection{多租户条件下的主动防御技术}\label{os-research6}
多租户将是未来运行平台的主流应用形态之一。更多的服务被整合在单一平台上这些服务中可能包括了来自不同租户的不同安全等级的信息必须根据用户需求对应用系统的硬件、软件、数据、网络、存储等不同层面资源实现安全隔离。同时为了提高资源利用效率运行平台根据资源使用情况进行动态调度这种动态变化的环境将显著增大了安全隔离的难度。为了提高服务运行性能以Docker为代表的轻量级虚拟化容器技术也被广泛应用相对于虚拟机的强隔离性容器技术则是以弱隔离性换取性能的提高。在应用虚拟化技术的过程中隔离性与性能之间的取舍、动态变化下虚拟计算资源的安全复用、Hypervisor虚拟机监视器层的虚拟机监管、虚拟机逃逸防护等都成为必须要面对的挑战。同时虚拟化技术还需要对软件定义网络在数据中心内部的网络安全管理提供支持通过虚拟网关等技术对虚拟化数据流进行安全监控这些虚拟设备能否安全使用都将对系统安全性产生深刻的影响。
\subsection{物理和社会资源的抽象和管控技术}\label{os-research7}
\subsection{基于区块链的新型分布架构运行支撑技术}\label{os-research7}
以区块链为基础的共识与信任机制可以为去中心化、扁平化的分布式应用架构提供支撑,具有驱动未来分布式软件乃至整个软件生态跃升式发展的潜力,将成为新一代操作系统和运行平台的组件之一(参见\cite{os-connection}节)。要实现这一目标,需要在如下一些方面开展研究:首先,区块链技术本身具有可扩展性、去中心化和安全性三者不可兼得的“三元悖论”难题,在区块链成为共性组件后,需要针对应用场景特点突破侧重点不同的共识算法,进而通过机制与策略的分离,实现场景定制的三元平衡寻优;其次,区块链技术在渗透至不同场景后,为了支持价值在不同行业与场景之间流动,支持不同行业与场景群体之间的协作交互,实现区块链的互操作性势在必行,需要针对公证人、侧链、原子交换、分布式私钥控制等为代表的跨链技术深入展开研究;再次,为了保证共识形成,区块链中事务信息需要通过网络传播给大范围节点,需要不断完善链内数据产生、验证、存储和使用整个过程中的隐私保护机制;第四,区块链的匿名性给网络监管机构带来了极大的挑战和威胁,当前对公有链的监管尚无有力技术手段,而如何在保护隐私的前提下实现监管,也是当前联盟链面临的重大挑战;最后,需要深入研究在应用层如何充分发挥区块链的优势和潜力,针对可信计算、共同认知、群体协同等不同场景探索其适用范围。
\subsection{物理和社会资源的抽象和管控技术}\label{os-research8}
操作系统 “资源虚拟化”的能力来自于其对资源的抽象、封装和调度。传统操作系统针对信息空间内部的资源,已经建立了进程/线程、内存页/虚拟内存、文件等相对稳定的抽象实体。未来,在人机物融合系统中,如何表达和管理各类高度异构、动态变化的物理和社会资源,是操作系统领域的开放问题。其中一个核心问题是:在认知、物理和信息空间三者之间,如何刻画、检验、保持、校正多模型结构之间定性与定量一致性,进而实现具有“数字孪生”的物理和社会空间资源的调度和管理。此外,未来操作系统的编程接口不仅涉及到计算资源的“软件定义”,可能包括各种可传感物体对象、智能无人系统等各类物理资源,甚至向其他具有“数字孪生”特性的经济、社会和生产生活资源,其接口形式、接口实现机理等都是开放的问题。
\subsection{运行平台支持的软件持续演化技术}\label{os-research8}
适应和演化是未来人机物融合软件的基本特征,其实现机制牵涉到两个层面。首先,未来人机物融合软件的运行平台自身应当是可以是柔性设计、可以持续演化的。其次,操作系统和运行平台是能够支撑上层应用适应和演化的天然基础设施,由于在线演化的需求是在“软件作为基础设施”过程中逐渐显现的,其实现机理也是目前操作系统和运行平台领域研究相对薄弱的环节,需要从运行状态把握、群体智能决策调整、宏观和微观演化效果评估等角度开展研究。相关研究内容已经在\ref{os-evolution}节中给出,本节不再赘述
\subsection{运行平台支持的软件持续演化技术}\label{os-research9}
适应和演化是未来人机物融合软件的基本特征,其实现机制牵涉到两个层面。首先,未来人机物融合软件的运行平台自身应当是柔性设计、可以持续演化的。其次,操作系统和运行平台是能够支撑上层应用适应和演化的天然基础设施,应当为其提供相应支撑。由于在线演化的需求是在“软件作为基础设施”过程中逐渐显现的,其实现机理也是目前操作系统和运行平台领域研究相对薄弱的环节,需要从态势评估、演化决策、效果评估、人机物协同演化等多个角度开展研究。首先,作为支撑复杂软件系统运行的“元层容器”,操作系统和运行平台有可能采集到各个软件实体的运行状态和环境状态,基于大数据的软件系统态势评估需要从中“去粗取精、去伪存真”,提取出能够作为适应和演化依据的运行态势。其次,为了支撑软件根据环境和状态变化自主做出在线调整和演化的决策,操作系统和运行平台需要提供什么样的支撑,以及在这一过程中如何支持“人在回路中”发挥作用,这一问题仍有待深入探索。再次,由大量自治软件单元所组成的复杂软件系统中,适应性演化动作往往发生在单元、子系统、系统等多个尺度上,需要在”元层“对各个尺度上的演化效果进行评估,必要时进行多个尺度上的演化调整。最后,如\ref{os-evolution}节所述,新一代操作系统需要有能力支撑“信息-物理-社会”空间的协同持续演化,相关机理和实现机制亟待突破
\subsection{基于开源和众包的生态构建技术}\label{os-research9}
随着互联网的深入发展和广泛应用,操作系统和运行平台的研发出现了新的特点,其中开源和众包对操作系统的发展产生了深远影响。它们一方面改变了操作系统产业的商业模式,服务化成为趋势,操作系统厂商如苹果、微软纷纷从销售产品获利转型为提供服务获利的模式;另一方面促进了面向行业或应用场景需求的专用操作系统的发展,降低了操作系统研发定制的门槛,使得更多的厂商可以参与到操作系统生态链构建中来。但是,开源和众包模式的引入,也为操作系统的开发带来了一系列问题。例如,在使用开源资源时,如指导思想和方法不当,可能导致在产品中包含若干“黑盒子”,引入代码不可控、产品升级被动等风险;产品如过度依赖开源,发展途径就会被开源主导,创新的空间将被大幅约束;等等。如何在操作系统生态链构建过程中最大限度发挥开源和众包的长处,是需要深入研究的问题,相关的研究方向包括操作系统代码来源链的建模和分析、开源许可证的合规性及冲突分析、多来源缺陷数据的定性与定量统计分析等
\subsection{基于开源和众包的操作系统生态构建技术}\label{os-research10}
开源和众包对操作系统及其上生态链的发展已经产生深远影响。如何在操作系统生态链构建过程中,最大限度扬长避短,发挥开源和众包的优势,是需要深入研究的问题。首先,在使用开源资源时,如指导思想和方法不当,可能导致在产品中包含若干“黑盒子”,引入代码不可控、产品升级被动等风险,因此,需要研究操作系统代码来源链的建模和分析方法,以及多来源和开源/闭源混源代码缺陷的定位和溯源方法。其次,开源的优势之一是可以促进面向行业或应用场景需求的专用操作系统的发展,在严格遵循开源许可证的前提下,实现操作系统的快速定制。这可能会对操作系统的可剪裁性产生深远影响,甚至催生未来新的商业模式。再次,如何在技术、平台和机制设计层面上驱动开源社区的群智汇聚,丰富和完善操作系统及其上软件生态链,也是未来系统软件领域的重要研究内容
\section{本章小结}
无论是今天还是未来,操作系统都是“软件作为基础设施”的集中体现,也是“软件定义一切”能力的基石。在计算泛在化背景下,未来的操作系统将突破当前单机操作系统这一狭义形式,向支撑人机物融合、具有“资源虚拟化”和“功能可编程”特点的泛化运行平台过渡。受这一趋势所推动,一系列重大挑战性问题涌现,包括支持软件定义的新型运行平台架构、泛在资源的高效虚拟化和调度方法、软件系统持续适应演化的支撑机制、人机物融合过程中的安全与隐私问题等。本节对上述挑战的概念内涵、产生背景和展开后的具体问题进行了详细阐述,并在此基础上结合操作系统和运行平台领域当前研究热点,从未来操作系统的不同形态角度,对领域研究内容进行了梳理。
无论是今天还是未来,操作系统都是“软件作为基础设施”的集中体现,也是“软件定义一切”能力的基石。在计算泛在化背景下,未来的操作系统将突破当前单机操作系统这一狭义形式,向支撑人机物融合、具有“资源虚拟化”和“功能可编程”特点的泛化运行平台过渡。受这一趋势所推动,一系列重大挑战性问题涌现,包括支持软件定义的新型运行平台架构、泛在资源的高效虚拟化和调度方法、软件系统持续适应演化的支撑机制、人机物融合过程中的安全与隐私问题等。本节对上述挑战的概念内涵、产生背景和展开后的具体问题进行了详细阐述,并在此基础上结合操作系统和运行平台领域当前研究热点,从未来操作系统的不同形态角度,对领域研究方向及内容进行了梳理。

View File

@ -1,30 +1,32 @@
大数据时代,我们用“以数据为中心的计算”这一说法来表达计算技术的发展趋势:数据在计算体系中的地位越来越重要,数据不再仅仅是算法处理的对象,也不再仅仅是依附于某种功能软件而存在,数据是组织的资产而独立存在,而且数据越积越多、规模越来越大,形成一种数据平台。
在某种程度上,数据平台隔离了上层基于机器学习的数据建模和推理应用与下层大数据的存储与计算设施。这种分离增加了上层应用系统的稳定性。新一代大数据\index{大数据}管理与分析系统也是一类系统软件具有如下特征多种数据模型并存多种计算模型融合系统可伸缩弹性扩展能力强。首先多种数据模型并存是指可以支持关系、文本、图、KV等多种数据模型的存储与访问系统能够根据应用特征甚至运行负载的情况进行模型的转化支持自适应优化。其次多计算模型融合是指高效支持批处理、流计算等多种计算模型计算系统要能将多种计算模型进行深度的融合而非简单地将两套或多套系统进行集成避免数据的反复迁移提高效率同时能够做到批流交互支持复杂应用和深度分析。最后,系统要能够高效利用底层的云计算资源,面向云计算平台上的虚拟资源构建效率高、弹性扩展能力强的系统,能够实时进行可伸缩调整,提高资源利用率,在软件系统层提升从资源到性能的转换效率。
在某种程度上,数据平台隔离了上层基于机器学习的数据建模和推理应用与下层大数据的存储与计算设施。这种分离增加了上层应用系统的稳定性。新一代大数据\index{大数据}管理与分析系统也是一类系统软件具有如下特征多种数据模型并存多种计算模型融合系统可伸缩弹性扩展能力强。首先多种数据模型并存是指可以支持关系、文本、图、KV等多种数据模型的存储与访问系统能够根据应用特征甚至运行负载的情况进行模型的转化支持自适应优化。其次多计算模型融合是指高效支持批处理、流计算等多种计算模型计算系统要能将多种计算模型进行深度的融合而非简单地将两套或多套系统进行集成避免数据的反复迁移提高效率同时能够做到批流交互支持复杂应用和深度分析。其三,系统要能够高效利用底层的云计算资源,面向云计算平台上的虚拟资源构建效率高、弹性扩展能力强的系统,能够实时进行可伸缩调整,提高资源利用率,在软件系统层提升从资源到性能的转换效率。
从应用角度看未来主流应用将从联机事务处理OLTP\index{联机事务处理OLTP}、联机分析处理OLAP\index{联机分析处理OLAP}走向联机机器学习OLML。机器学习\index{机器学习}等人工智能应用,能够从大数据中挖掘深度知识,将成为大数据管理与分析系统上的一类重要应用。机器学习系统将不再像现在这样,一类模型对应一组数据,而是成为一个同时支持多种机器学习模型的大规模数据平台。此外,降低大数据应用的门槛非常迫切,平民化数据科学成为一种趋势,实现平民化数据学科的有效途径就是提供丰富易用的工具,从数据采集,数据整理到数据分析和模型训练等,这方面的研究实践活动非常活跃,成果大量涌现。未来,期待大数据应用开发方法学的成果能够统领这个方向的研究。
从数据生态的角度看,围绕数据的产生、加工、分析、利用乃至交易形成了相互依存又相互独立的生态系统结构。一方面这些数据为软件系统的智能化提供基础数据支撑,另一方面智能化服务软件又进一步贡献新的数据,进入数据平台。数据生态中涉及多个方面,如用户、商业公司、政府等,需要平衡各方利益、确保可持续发展。
从软件形态的角度看,软件所呈现出的泛在化和持续演化的特性都与数据密切相关。软件的泛在化应用以及人机物融合使得我们所能够获得的数据越来越全面地覆盖了物理世界及人类生活的方方面面。软件的持续演化有赖于持续的数据收集以及数据驱动的智能化演化决策,同时也有赖于软件功能定义的数据化。此外,软件将越来越多地将来自广大用户的群智(例如使用数据反馈)融合到软件自身的持续演进中,这也是通过用户数据的收集和分析来实现的。
从软件形态的角度看,软件所呈现出的泛在化和持续演化的特性都与数据密切相关。软件的泛在化应用以及人机物融合使得我们所能够获得的数据越来越全面地覆盖了物理世界及人类生活的方方面面。软件的持续演化有赖于持续的数据收集以及数据驱动的智能化演化决策,同时也有赖于软件功能定义的数据化(例如配置项、元数据、参数等)。此外,软件将越来越多地将来自广大用户的群智(例如使用数据反馈)融合到软件自身的持续演进中,这也是通过用户数据的收集和分析来实现的。
从系统论的角度看,未来面向复杂应用场景(如智慧城市)的软件需要多源异构的数据来支撑背后的智能决策。这些数据本身来自于很多不同的软件系统以及人机物三个方面的要素,跨越了既有的系统边界,体现了复杂系统特性。汇聚大数据之后产生的一些非预设的系统行为乃至服务业态体现了复杂系统的涌现特性。
由此可见,数据,软件,用户将以一种新的关系共存,需要重新考虑超越传统软件质量之外的与数据紧密相关的诸如隐私保护、平等(非歧视)以及信息普惠等价值观的话题
由此可见,数据、软件、用户将以一种新的关系共存,需要重新考虑超越传统软件质量之外的与数据紧密相关的诸如隐私保护、平等(非歧视)以及信息普惠等价值观的话题
本章列出数据管理和数据工程的若干重要挑战、主要研究内容与研究趋势。
\section{重大挑战问题}
数据管理与数据工程的挑战问题包括两个方面。首先,在数据管理方面,主要表现在如何管理大数据(§\ref{sec:dm-management})、如何利用新硬件混合架构来实现大数据的管理(§\ref{sec:dm-architecure})。在数据工程方面,主要有异构数据整理(§\ref{sec:dm-clearance})、数据分析(§\ref{sec:dm-analysis})和数据安全与隐私保护(§\ref{sec:dm-protection})等挑战。
\subsection{大数据管理的挑战}
\label{sec:dm-management}
大数据具有大容量、多类型、快变化、低质量的4V特征。大数据管理已不像传统数据库时代去追求使用关系数据库来解决所有数据管理的问题而是探索从数据存储、数据组织与存取、语言处理、应用等几个维度对各个传统数据库管理系统进行解耦解耦后的各个子系统依据大数据的4V数据特征各自独立发展用户可根据实际应用的需要采用松耦合的方式对各个子系统进行组装量身定制自己的大数据管理系统。大数据管理系统技术目前还在快速进化之中还没有成型。管理好4V的数据是对大数据管理系统的基本要求。从这个基本点出发可以归纳出大数据管理系统的若干技术挑战
大数据具有大容量、多类型、快变化、低质量的4V特征。大数据管理已不像传统数据库时代去追求使用关系数据库来解决所有数据管理的问题而是探索从数据存储、数据组织与存取、事务管理、查询处理、应用等几个维度对传统数据库系统进行解耦解耦后的各个子系统依据大数据的4V数据特征各自独立发展用户可根据实际应用的需要采用松耦合的方式对各个子系统进行组装量身定制自己的大数据管理系统。大数据管理系统技术目前还在快速进化之中还没有成型。管理好4V的数据是对大数据管理系统的基本要求。从这个基本点出发可以归纳出大数据管理系统的若干技术挑战
第一多数据模型的统一管理。i数据模型是数据管理的核心数据结构、数据操作、完整约束是构成数据模型的三大要素。关系模型有单一的关系数据结构、封闭的关系操作集合、灵活的关系完整性约束而大数据管理中的其他数据模型包括键值对、图、文档等虽然数据结构定义清晰但缺少数据模型中数据操作和数据约束两大要素的定义亟待理论上的突破。ii关系数据库有严格的关系数据理论和模式分解算法辅助数据建模如何对大数据进行有效数据建模尚缺少理论和技术支撑。iii) 大数据多源、异构的特点,使得大数据管理系统无法采用单一数据模型进行管理,多数据模型并存并统一管理,需要系统从语言处理、数据组织与存取、数据存储等多个层次进行重新设计与优化\cite{Du19,Du2018}
第二,多计算模型的深度融合。大数据管理系统更需要高效支持批处理、流计算等多种计算模型,将多种计算模型进行深度的融合,而非简单地将两套或多套系统进行集成,避免数据的反复迁移,提高效率,同时能够做到批流交互,支持复杂应用和深度分析。为此,需要研究
第二,存储与计算的分离。互联网的许多应用,随着业务的发展,集群的规模常常不能满足业务的需求,也许是数据规模超过了集群存储能力,也许是涌现式的业务需求导致集群计算能力跟不上。将存储和计算分离,可以更好地应对存储或计算单方面的不足,进而提升集群硬件资源的利用率。然而,在存储和计算分离的架构下,存储和计算可以部署在不同的数据中心,数据的本地化计算策略无法应用,如何保证系统的整体性能,亟待关键技术的突破。存储与计算的分离是实现以数据为中心的计算的技术基础。以数据为中心的计算,数据进行统一存储和管理,上层支持不同的计算模型和应用开发。同一份数据存储,如何设计合理的数据逻辑结构和物理结构,支持应用的敏捷式开发,促进应用软件开发模式的演进,亟待数据理论和核心算法的突破。
第三新型系统架构。大数据的大容量和快变化特征要求大数据管理系统具备高可扩展性。针对大容量特点采用“分而治之”的思想将数据进行分片每个分片部署到指定的节点上进行管理。针对快变化的特点当数据快速增加时可以通过增加节点的数量使系统仍然具备较低的响应时间。在此背景下大数据管理系统架构面临如下挑战i容错。一方面大数据管理中的存储节点、计算节点已经不局限于传统分布式数据库中的高性能服务器可以是普通服务器甚至是普通的PC机器可靠性有限。更重要的是节点数量的增加整个系统出现节点故障的可能性增大。如何从容错的角度设计可靠的系统架构不影响数据存储、数据操纵、数据运维等管理的正确性和高效性。ii去中心化。大数据管理系统是分布式的中心节点可能会成为访问的瓶颈。一方面中心节点的故障会造成整个系统的瘫痪另一方面中心节点负载过重也会影响系统的可扩展性和高效性如何研究去中心化的大数据管理系统架构突破单点瓶颈实现系统的高可扩展性和高效性。iii) 自适应优化。一方面,集群环境下,存储节点、计算节点的硬件能力可能存在较大差异,需要研究异构集群环境下的自适应优化。另一方面,负载任务的多变性和复杂性,要求研究多数据模型下的自适应优化。
第三,多计算模型的深度融合。大数据管理系统更需要高效支持批处理、流计算等多种计算模型,将多种计算模型进行深度的融合,而非简单地将两套或多套系统进行集成,避免数据的反复迁移,提高效率,同时能够做到批流交互,支持复杂应用和深度分析,需要从统一接口、操作算子、通信机制、作业级与任务级调度等维度进行设计与优化。
第四新型系统架构。大数据的大容量和快变化特征要求大数据管理系统具备高可扩展性。针对大容量特点采用“分而治之”的思想将数据进行分片每个分片部署到指定的节点上进行管理。针对快变化的特点当数据快速增加时可以通过增加节点的数量使系统仍然具备较低的响应时间。在此背景下大数据管理系统架构面临如下挑战i容错。一方面大数据管理中的存储节点、计算节点已经不局限于传统分布式数据库中的高性能服务器可以是普通服务器甚至是普通的PC机器可靠性有限。更重要的是节点数量的增加整个系统出现节点故障的可能性增大。如何从容错的角度设计可靠的系统架构不影响数据存储、数据操纵、数据运维等管理的正确性和高效性。ii去中心化。大数据管理系统是分布式的中心节点可能会成为访问的瓶颈。一方面中心节点的故障会造成整个系统的瘫痪另一方面中心节点负载过重也会影响系统的可扩展性和高效性如何研究去中心化的大数据管理系统架构突破单点瓶颈实现系统的高可扩展性和高效性。iii) 自适应优化。一方面,集群环境下,存储节点、计算节点的硬件能力可能存在较大差异,需要研究异构集群环境下的自适应优化。另一方面,负载任务的多变性和复杂性,要求研究多数据模型下的自适应优化。
\subsection{新硬件与混合架构的挑战}
\label{sec:dm-architecure}
数据管理系统的实现受计算机软件技术和硬件技术以及应用三方面的影响。随着新硬件及各种混合架构的出现,支持数据管理与数据工程的底层硬件正在经历巨大的变革,各类新型加速设备、混合架构出现也在逐渐改变数据管理和数据工程中的设计,并带来了巨大挑战。
@ -42,25 +44,16 @@
\label{sec:dm-clearance}
数据整理是在挖掘提炼数据价值的过程中需要进行的前期的数据预处理工作。它看似不足轻重实则非常重要。有调查研究表明很多大数据分析任务80\%以上的工作花费在数据整理上,这给数据分析带来了巨大的人力成本。很多分析设想因为承担不起前期巨大的数据整理工作而最终被放弃。更重要的是,由于缺少系统性和理论性的支撑,数据整理的质量千差万别,这给数据分析的结果带来了很大的不确定性,大大影响了大数据价值的挖掘与提炼。
与数据仓库时代的ETL只关注业务系统内的数据不同数据整理技术通常需要帮助用户将其拥有的数据与外部的一些数据源进行关联和数据融合。融合过程中面临着比较大的数据集成难题伴随着大量的数据质量问题如数据项缺失、不一致、重复、错位、异常值等。而很多情况下这些数据集成和数据质量方面的问题又与具体的应用场景关系密切很难形成通用的、一体化的数据整理解决方案。因此如何从不同的应用场景中抽象出数据整理的共性需求在新的数据整理的方法论指导下系统地研究数据整理工具和平台在未来会越来越重要也必将面临很多挑战。
第一、数据集成和数据质量是数据整理中的重要挑战。与数据仓库时代的ETL只关注业务系统内的数据不同数据整理技术通常需要帮助用户将其拥有的数据与外部的一些数据源进行关联和数据融合。融合过程中面临着比较大的数据集成难题伴随着大量的数据质量问题如数据项缺失、不一致、重复、错位、异常值等。而很多情况下这些数据集成和数据质量方面的问题又与具体的应用场景关系密切很难形成通用的、一体化的数据整理解决方案。因此如何从不同的应用场景中抽象出数据整理的共性需求在新的数据整理的方法论指导下系统地研究数据整理工具和平台在未来会越来越重要也必将面临很多挑战。
数据准备服务于企业内部所有的数据使用者,以对数据处理技术不熟悉的业务用户为主。这些用户缺少数据管理与数据处理知识,但对业务熟悉,对数据背后的语义更清楚,他们是企业机构大数据价值发现的主力。如何针对这类业务型数据分析人员的需求和特点,提供高效的数据整理工具,是数据整理技术面临的一大挑战。这即包括数据整理工具的易用性,有包括工具在执行数据整理任务过程中的执行性能和被整理后数据的有效性。数据整理工具适用性和易用性之间通常还存在一定的矛盾,如何利用一些自动化的手段,降低用户使用工具的难度,根据场景自动优化配置数据整理工具,会是数据整理面临的一项重要难题\cite{Dubd2019}
第二、数据整理工具的易用性是研究的一大挑战。数据准备服务于企业内部所有的数据使用者,以对数据处理技术不熟悉的业务用户为主。这些用户缺少数据管理与数据处理知识,但对业务熟悉,对数据背后的语义更清楚,他们是企业机构大数据价值发现的主力。如何针对这类业务型数据分析人员的需求和特点,提供高效的数据整理工具,是数据整理技术面临的一大挑战。这即包括数据整理工具的易用性,有包括工具在执行数据整理任务过程中的执行性能和被整理后数据的有效性。数据整理工具适用性和易用性之间通常还存在一定的矛盾,如何利用一些自动化的手段,降低用户使用工具的难度,根据场景自动优化配置数据整理工具,会是数据整理面临的一项重要难题\cite{Dubd2019}
数据仓库中的ETL是为了建立数据仓库所采用的相对固定的数据处理流水线。数据处理过程一旦建立整个过程比较静态很少再变化。数据整理任务是针对企业业务系统中的问题动态构建的数据处理过程。它针对具体问题做数据预处理会随着不同问题采用不同的数据整理过程虽然一些任务之间可以共享某些数据整理过程。如何优化不同数据整理任务所构成工作流共享数据整理的知识和经验避免重复性操作也是数据整理所面临的较大难题\cite{Xin19}
\subsection{交互式数据分析的挑战}
\label{sec:dm-analysis}
传统数据仓库,可以预先创建好结构清晰的数据模式,分析人员往往对数据模式比较了解,因此分析任务也能围绕数据模式较为清晰的定义出来。但是,大数据的异构性给数据分析带来了复杂性。在很多大数据场景中,异构性等让数据模式变复杂、并且可能在需要经常变化,数据分析人员不太容易预先构建好清晰的数据模式和其上的数据分析模型。在这种情况下,数据分析师往往需要交互式的数据分析能力,需要通过交互认识数据,调整模型和参数,对数据分析的一些假设不断做出调整。这就与传统报表式的数据分析有了很大的差别。交互式数据分析有很多新的挑战:
首先,要有很好的数据可视化做为支撑。数据可视化能够帮助分析人员简洁清晰地认识数据的重要特性,为调整分析维度、数据范围、模型类型等提供基本的数据和决策支撑。好的结果可视化分析界面,能够帮助用户更好地与数据分析系统进行交互,让分析任务更快地按用户想要的视角和方向而展开。可视化不仅包含结果的可视化,还要能够引导分析人员朝更有利于开展深入分析的方向而进行分析流程的推荐,辅助分析人员更有效地探索数据空间。
其次可视分析系统要想做的好分析处理的性能至关重要。有研究曾表明秒级以上的交互性能通常会让分析人员失去很多耐心很难保持住流畅持续的分析工作流。因此要求用户每次对分析任务进行调整后新的分析任务能够尽可能在亚秒级完成。这在大数据上近乎是很难实现的必须从技术层面解决高性能数据分析的需求。常见的技术里利用新硬件技术GPU, FPGA, NVM, RDMA等提速、数据预取与预计算、近似查询等都是提升大数据分析性能的有效手段。
再者,交互式数据分析的效果评价也是很有挑战的事情。由于交互式分析过程中分析人员往往存在分析目的不明确的问题,分析任务要在交互过程中不断调整,这为评价交互式分析算法和系统的好坏带来很多挑战。很多研究,需要借鉴人机交互领域的一些方法去衡量交互式分析解决方案的效果。因此,交互式分析也是人机交互和数据分析的学科交叉,需要技术和设计两个方面的支撑与紧密结合。
最后,交互式数据分析的复杂性为分析系统的设计和架构带来了很多挑战。需要在可视化、人机交互、高性能数据处理、数据库等多层面综合考虑,很多环节还需要跨层的紧密结合。该领域的研究难度也比较大,通常只有构建出可用的系统原型,才能够有效验证交互式数据分析算法和系统的优劣。
第三、数据整理过程的流水线优化也是个难题。数据仓库中的ETL是为了建立数据仓库所采用的相对固定的数据处理流水线。数据处理过程一旦建立整个过程比较静态很少再变化。数据整理任务是针对企业业务系统中的问题动态构建的数据处理过程。它针对具体问题做数据预处理会随着不同问题采用不同的数据整理过程虽然一些任务之间可以共享某些数据整理过程。如何优化不同数据整理任务所构成工作流共享数据整理的知识和经验避免重复性操作也是数据整理所面临的较大难题\cite{Xin19}
\subsection{数据隐私保护与数据安全的挑战}
\label{sec:dm-protection}
数据安全与隐私保护问题长期以来一直受到人们的广泛关注。尤其是近年来大数据和人工智能技术的高速发展,数据外包到云平台上的需求与日俱增,各类应用对数据共享的呼声日益强烈,人们日常生活和出行对于基于位置的服务的依赖性逐步提高,这些都使得数据安全和隐私保护问题变得愈加突出和复杂。虽然学术界和工业界在隐私保护与数据安全方面已经取得了一些可喜的进展,但面对大数据的应用需求和应用场景,还是显得力不从心。目前数据隐私和安全问题存在于大数据收集、存储、管理、使用的各个阶段,如何抵御非法用户的恶意攻击和隐私窃取;如何防止数据被非法篡改或删除,导致错误的查询和分析结果;如何避免合法用户利用数据之间的关联关系,通过反复搜索推演出数据隐私;如何防止人们在使用数据服务时暴露自身的偏好、位置、轨迹等隐私信息,都是亟需解决的关键问题,也是关系到大数据应用前景的重要现实问题。这里面的重要技术挑战包括:
数据安全与隐私保护问题长期以来一直受到人们的广泛关注。尤其是近年来大数据和人工智能技术的高速发展,数据外包到云平台上的需求与日俱增,各类应用对数据共享的呼声日益强烈,人们日常生活和出行对于基于位置的服务的依赖性逐步提高,这些都使得数据安全和隐私保护问题变得愈加突出和复杂。虽然学术界和工业界在隐私保护与数据安全方面已经取得了一些可喜的进展,但面对大数据的应用需求和应用场景,还是显得力不从心。目前数据隐私和安全问题存在于大数据收集、存储、管理、使用的各个阶段,如何抵御非法用户的恶意攻击和隐私窃取;如何防止数据被非法篡改或删除,导致错误的查询和分析结果;如何避免合法用户利用数据之间的关联关系,通过反复搜索推演出数据隐私;如何防止人们在使用数据服务时暴露自身的偏好、位置、轨迹等隐私信息,都是亟需解决的关键问题,也是关系到大数据应用前景的重要现实问题。其中所涉及到的数据安全共享与高效计算又是提升敏感数据应用价值的重要环节,数据的安全共享与计算一般是指拥有数据的各方在不暴露自己数据的同时,去完成共同计算的目的,如何设计达到抵御有更强攻击能力的攻击者的安全交互协议,同时又具有高效传输能力,是当前研究的瓶颈之一。数据隐私保护与数据安全面临的重要技术挑战包括:
第一,敏感数据的安全存储与检索。大数据促进了云存储和云计算的快速发展,许多公司,如亚马逊,谷歌,微软等,已经加快了开发云服务步伐,大数据系统将数据外包到云平台上已成为一种趋势,但云平台是不可信的第三方,存在隐私数据被泄露、关键数据被篡改等风险,敏感数据在云平台上的安全存储与检索是必须解决的挑战性问题,它制约了云服务的推广与应用。
@ -68,45 +61,46 @@
第三动态数据的安全发布。数据发布是数据服务的一种重要形式k-匿名、l-多样性等传统隐私保护技术难以解决大数据环境中动态数据发布所带来的隐私泄露问题,差分隐私技术能够对静态数据的统计类信息进行安全发布,但是对于动态持续的数据发布场景,由于数据之间具有关联关系,其隐私泄露问题更加突出和严重,目前还没有有效的解决方案,是一个尚待突破的研究挑战。
第四,隐私性和数据可用性的平衡。数据挖掘技术能够深入挖掘大数据中所蕴含的知识和规律,使大数据的价值能得到更充分的发挥。但与此同时,即使采用了数据加密、数据加噪等数据保护手段,隐藏在不同来源数据背后的个人隐私信息仍然有可能被分析和推断出来。简单地切断社交网络信息、医疗信息、社保信息、购物平台信息、出行轨迹信息等不同来源数据之间的关联,对大数据系统的可用性和数据价值会造成致命影响,如何在隐私性和数据可用性之间寻求平衡是一个重要挑战。
第四,机器学习中的隐私保护和数据安全。随着深度学习等突破性技术的兴起,机器学习在众多领域得到了广泛应用。大数据为机器学习模型提供了丰富的训练集,但服务商作为不可信第三方,无法为训练集的数据提供隐私安全保证。另外逐步成熟的机器学习云服务以及协同训练方式进一步提升了训练数据受到隐私与安全攻击的风险。因此在确保不泄密和保护隐私的前提下训练模型,成为了亟待解决的挑战。
第五,隐私性和数据可用性的平衡。数据挖掘技术能够深入挖掘大数据中所蕴含的知识和规律,使大数据的价值能得到更充分的发挥。但与此同时,即使采用了数据加密、数据加噪等数据保护手段,隐藏在不同来源数据背后的个人隐私信息仍然有可能被分析和推断出来。简单地切断社交网络信息、医疗信息、社保信息、购物平台信息、出行轨迹信息等不同来源数据之间的关联,对大数据系统的可用性和数据价值会造成致命影响,如何在隐私性和数据可用性之间寻求平衡是一个重要挑战。
\section{主要研究内容}
为了应对上述重大挑战需要在多方面开展研究。这里我们列出了11项研究内容其中5个属于数据管理范畴包括分布数据管理(§\ref{sec:dm-distributed})、云数据管理(§\ref{sec:dm-cloud})、图数据管理(§\ref{sec:dm-graph})、新硬件数据管理(§\ref{sec:dm-hardware})和内存数据管理(§\ref{sec:dm-storage}。另外6项属于数据工程范畴包括多源数据集成§\ref{sec:dm-resources})、数据整理(§\ref{sec:dm-clear})、数据分析(§\ref{sec:dm-analyze})、数据可视化(§\ref{sec:dm-visulization})、数据隐私(§\ref{sec:dm-privacy})和数据安全(§\ref{sec:dm-safe})。
\subsection{分布式数据管理}
\label{sec:dm-distributed}
由于大数据的管理需求分布式数据库一直是工业界和学术界的研究重点。分布式数据库应该具备强一致性、高可用性、可扩展性、易运维、容错容灾以及满足ACID属性的高并发事务处理能力。由于受限于CAP理论即在必须支持分区容错性的前提下系统实现只能侧重一致性和可用性的一个方面而无法同时满足另一方面支持ACID事务属性及高并发事务处理一直是分布式关系数据库的难点。分布式数据库基本是围绕数据强一致性、系统高可用性和ACID事务支持等核心问题展开研究工作。这些性质与系统的扩展性和性能密切相关甚至相互制约往往需要根据具体的应用需求进行取舍。很多NoSQL数据库都是放弃支持事务ACID属性来换取性能的提升。近年来新型数据库NewSQL的出现给分布式数据库的发展带来新的方向。它的目标是提供与NoSQL相同的可扩展性和性能同时支持事务的ACID属性。这种融合一致性和可用性的NewSQL已经成为分布式数据库的研究热点。
由于大数据的管理需求分布式数据库一直是工业界和学术界的研究重点。分布式数据库应该具备强一致性、高可用性、可扩展性、易运维、容错容灾以及满足ACID属性的高并发事务处理能力。由于受限于CAP理论即在必须支持分区容错性的前提下系统实现只能侧重一致性和可用性的一个方面而无法同时满足另一方面支持ACID事务属性及高并发事务处理一直是分布式关系数据库的难点。分布式数据库基本是围绕数据强一致性、系统高可用性和ACID事务支持等核心问题展开研究工作。这些性质与系统的扩展性和性能密切相关甚至相互制约往往需要根据具体的应用需求进行取舍。这些性质与系统的扩展性和性能密切相关甚至相互制约往往需要根据具体的应用需求进行取舍。主要研究内容包括1数据强一致性。银行交易系统等重要领域往往有数据强一致性和零丢失的需求。当更新操作完成之后任何多个后续进程或者线程的访问都要求返回最近更新值。如果在这个分布式系统中没有数据副本那么系统必然满足数据强一致性要求原因是只有独本数据不会出现数据不一致的问题。但是分布式数据库系统的设计需要保存多个副本来提高可用性和容错性以避免宕机的时候数据还没有拷贝导致提供的数据不准确。如何低成本地保证数据的强一致性是分布式数据库系统的一个重要难题。2系统高可用性。在分布式数据库中系统的高可用性和数据强一致性往往不可兼得。当存在不超过一台机器故障的时候要求至少能读到一份有效的数据往往需要牺牲数据的强一致性来保证系统的高可用性。相当一部分NoSQL数据库采用这个思路来支持互联网场景下的大规模用户并发访问请求它们通过实现最终一致性来确保高可用性和分区容忍性弱化了数据的强一致要求。为了解决数据不一致问题不同的分布式数据库设计各自的冲突机制。另外有效的容错容灾机制也是保障系统高可用性的坚实后盾。3ACID事务支持。ACID指的是事务层面的原子性Atomicity、一致性Consistency、隔离性Isolation和持久性Durability。如何有效地支持ACID事务属性一直是分布式数据库的难点涉及很多复杂的操作和逻辑会严重影响系统的性能很多NoSQL数据库都是放弃支持事务ACID属性来换取性能的提升。近年来新型数据库NewSQL的出现给分布式数据库的发展带来新的方向。它的目标是提供与NoSQL相同的可扩展性和性能同时支持事务的ACID属性。这种融合一致性和可用性的NewSQL已经成为分布式数据库的研究热点。
\subsection{云数据管理}
\label{sec:dm-cloud}
云数据管理以大容量、多类型、快变化、低质量的大数据为管理对象提供弹性、可靠的与高效的数据存储、组织与存取、查询处理、运行与维护等管理功能。针对多类型特征研究多模型数据统一管理技术提供统一查询语言例如SQL和编程接口。针对大数据的大容量、快变化特点从系统容错、数据划分与迁移、去中心化、自适应优化等维度研究弹性、高可靠、高性能的云数据管理系统架构。针对大数据应用的多样性特点从分布式系统的强一致性、最终一致性、弱一致性,与分布式事务的隔离级别两个维度出发,研究去中心化的分布式事务处理技术。研究基于新硬件、基于人工智能的云数据管理技术,优化数据存取、查询处理、并发访问控制与故障恢复、系统运维等子系统。研究云计算资源的按需分配和弹性伸缩调整技术,支撑系统的弹性管理。
云数据管理以大容量、多类型、快变化、低质量的大数据为管理对象,提供弹性、可靠的与高效的数据存储、组织与存取、查询处理、运行与维护等管理功能。主要研究内容包括1针对多类型特征研究多模型数据统一管理技术提供统一查询语言例如SQL和编程接口。2针对大数据的大容量、快变化特点,从系统容错、数据划分与迁移、去中心化、自适应优化等维度,研究弹性、高可靠、高性能的云数据管理系统架构。3针对大数据应用的多样性特点,从分布式系统的线性一致性、顺序一致性、因果一致性、最终一致性,与分布式事务的隔离级别两个维度出发,研究去中心化的分布式事务处理技术。4研究基于新硬件、基于人工智能的云数据管理技术,优化数据存取、查询处理、并发访问控制与故障恢复、系统运维等子系统。5研究云计算资源的按需分配和弹性伸缩调整技术,支撑系统的弹性管理。
\subsection{图数据管理}
\label{sec:dm-graph}
针对规模巨大的图数据,按照对图数据管理的抽象程度可以被分成两类。低层次抽象的提供编程接口的图数据管理系统,针对图数据管理中的基本操作设计并实现相应的编程接口,用户利用这些编程接口来实现相应的管理功能;高层次抽象的描述性查询语言,用户将相应的管理需求用描述性查询语言表达,系统解析这些描述性查询语句并生成相应的查询计划来进行执行处理,实现包括图搜索、基于图的社区发现、图节点的重要性和相关性分析、图匹配查询等查询和分析需求。新的研究问题还包括异构计算环境下的图数据管理、多源流式图数据管理、RDF知识图谱构建和推理等。
图数据可以显示地表达事物之间的复杂关联,因此其具有非常广泛的应用场景,包括社交网络、知识图谱、网络数据分析等。然而由于图数据的计算模式复杂,图算法的复杂性高等特点,如何有效地管理大规模的图数据是一项具有挑战性的研究。为此需要重点研究: 1低层次抽象的提供编程接口的图数据管理系统,针对图数据管理中的基本操作设计并实现相应的编程接口,用户利用这些编程接口来实现相应的管理和分析功能;2高层次抽象的描述性查询语言,用户将相应的管理需求用描述性查询语言表达,系统解析这些描述性查询语句并生成相应的查询计划来进行执行处理,实现包括图搜索、基于图的社区发现、图节点的重要性和相关性分析、图匹配查询等查询和分析需求3在大数据时代图数据管理的研究还包括在异构计算环境下的图数据管理方法、多源流式图数据管理、RDF知识图谱构建和推理等。
\subsection{新硬件数据管理}
\label{sec:dm-hardware}
近年,计算机体系结构的研究异常活跃,新进展层出不穷。新架构和新硬件技术的发展为数据管理技术带来新的挑战,也带来明显的机遇。作为系统软件,数据库底层需要做出适应性调整,充分利用新架构和新硬件带来的便利,同时避免新瓶颈。目前研究较多的包括高性能和专用处理器、高速网络、和非易失性内存,以及包括各种混合架构等。针对高性能和专用处理器,数据库底层核心算法需要充分考虑多核并行的能力,重新设计连接、排序等基本操作。图形处理器GPU、现场可编程门阵列FPGA等专用处理器具备更大规模的数据并行操作能力从而提升数据的向量处理效率,支持数据库内核范围内的机器学习等任务。传统分布式数据库或者并行数据库在高速网络环境中,网络传输不在是瓶颈,需要设计新的分布式连接方法和分布式并发控制策略等。而非易失存储的高速和持久化能力对数据库系统结构层面结合方式和恢复机制等带来新的研究课题
新型硬件技术的出现和发展为数据管理技术带来新的挑战,也带来明显的机遇。作为系统软件,数据库底层需要针对新型硬件做出适应性调整充分利用新型硬件带来的便利同时避免引入新型硬件后导致的新瓶颈。针对不同类型的硬件重点研究1基于高性能和专用处理器的数据管理方法。图形处理器GPU、现场可编程门阵列FPGA、人工智能芯片等专用处理器具备更大规模的数据并行操作能力,可用于数据库内核范围内的机器学习等任务。同时不同特性异构硬件的协同操作也成为研究问题2基于高速网络连接的数据管理方法。随着RDMA 等高速网络技术的发展网络传输代价大幅度降低。研究基于高速网络的数据库查询处理和分布式事务处理机制3基于非易失存储的数据管理方法非易失型存储器支持内存式的按字节的高速寻址同时支持外存式的持久化能力。研究非易失性存储器和内存、闪存等不同特征的存储介质在体系结构层面结合方式以及非易失存储环境中的数据库恢复机制等技术
\subsection{内存数据管理}
\label{sec:dm-storage}
相对于以磁盘为主要存储介质的传统数据库内存数据库带来多个量级的性能提升内外存数据交换不再是主要性能代价而关注CPU特性对内存操作的影响如CPU中的缓存、指令和数据的预取、共享数据结构等重点研究上述变化在数据组织、数据索引、事务机制、查询优化等方面的不同。在数据组织方面内存数据库中数据可以按照其处理器核进行划分同一个划分中数据操作串行减少并发控制带来的各种代价也可以采用所有处理器核都可以访问全部数据的方式。内存数据库索引设计主要考虑索引结点的大小和CPU缓存大小相关,从而在索引操作过程中提升CPU缓存的命中率同时内存索引结构的设计需要考虑多核环境中的并发查询和更新减少内存数据结构中并发锁的使用减低索引维护代价。内存数据库的事务处理和并发控制机制使用多版本并发控制协议通过保存不同版本从而支持无阻塞高效率的读取操作或采用乐观并发机制提高效率
内存数据库就是以内存为主要数据存储介质在内存中直接对数据进行操作的数据库。传统数据库查询执行的主要瓶颈在IO 操作而在内存数据库中内外存数据交换不再成为代价的主要来源。内存数据库需要考虑现有CPU 特性对内存操作的影响如CPU 中的缓存、指令和数据的预取、共享数据结构上并发访问的控制机制等。为此重点研究1) 数据组织包括内存数据库中数据是否和不同处理器核进行关联的分区策略是否存储多个版本的多版本策略数据按行、按列或者混合方式的存储策略等2) 数据索引研究传统索引在内存多核CPU环境中的演化包括索引节点数据适合CPU缓存、减少多处理器之间的并发控制代价、减少多处理器之间的数据一致性代价、减少非连续内存访问代价等3) 事务机制:考虑多核并发环境以及数据内存组织方式,设计适合内存环境的新型并发控制协议,从而提升事务吞吐量,同时减少单个事务的延迟
\subsection{多源数据集成}
\label{sec:dm-resources}
多源数据集成,指为多个异构的数据源提供统一的存取方法。多源数据集成需要解决两个核心问题:数据集成的精确性以及查询处理的效率。首先,须研究实体匹配的问题,即判断多个字符串或元组是否对应同一个实体。为此需要定义两个字符串或元组相似度的度量标准,如基于字符序列的度量标准、基于集合的度量标准以及混合度量标准。实体匹配方法还需要具备可扩展性,以处理大规模的数据集。其次,须解决模式匹配问题,其目标是建立不同模式到一个统一的集成模式之间的映射。模式匹配的研究方法包括基于实例的匹配,基于模式信息的匹配,以及混合匹配等。近来的一个趋势是采用机器学习或深度学习方法来提高模式匹配的准确度。最后,多源数据集成还包括查询改写和查询优化。查询改写研究形式上不一致的两个查询是否等价,以及一个查询是否可以在一组视图上执行。数据集成系统中的查询优化重点是自适应的查询处理,即查询处理器可以在运行时动态修改查询计划
多源数据集成,指为多个异构的数据源提供统一的存取方法。多源数据集成需要解决三个核心问题,统一的数据建模方法,精准的模式匹配以及高效的查询处理。首先,需要研究如何提供一种通用的数据建模方法,以支持多数据模型混合并存,适应大数据多源、异构的特点。其次,须研究实体匹配和模式匹配的问题。实体匹配的内容是判断多个元组是否对应同一个实体。需要研究合理的相似度度量标准,还要具备可扩展性,以处理大规模的数据集。模式匹配的目标是建立不同模式到一个统一的集成模式之间的映射。模式匹配的研究方法包括基于实例的匹配,基于模式信息的匹配,以及混合匹配等。近来的一个趋势是采用机器学习或深度学习方法来提高模式匹配的准确度。最后,多源数据集成还必须提供统一的查询处理接口。需要有一个框架来容纳和支持多个不同类型的数据处理引擎,以灵活支持用户定义的操作,而不仅仅是确定的操作算子。面对跨引擎的查询和用户定义的操作,查询表达和查询优化将是一个难点
\subsection{数据整理}
\label{sec:dm-clear}
数据整理是为了使数据能够更好地服务于数据分析而对数据进行的审查和转换的过程,它是整个数据分析流程中最占用精力的过程。从技术上讲,数据整理包含了前期数据解析与结构化处理、数据质量评估与数据清洗、数据集成和提纯等过程。由于问题的复杂性,数据整理过程通常不是完全自动化的,而是需要用户介入的反复迭代和交互的过程。数据可视化、用户反馈与交互在整个过程中都发挥了重要作用。如何开展有针对性的研究工作提出数据整理方法论并系统化地集成相关工具形成数据整理方面整体上的研究和应用影响力从事相关领域的研究学者应充分利用庞大的Python开源社区PyData投入系统化的数据准备工具研制中将研究成果更好地应用在实际场景中或许是一条较为可行的技术路线。
数据整理是为了使数据能够更好地服务于数据分析而对数据进行的审查和转换的过程,它是整个数据分析流程中最占用精力的过程。从技术上讲,数据整理包含了前期数据解析与结构化处理、数据质量评估与数据清洗、数据集成和提纯等过程。由于问题的复杂性,数据整理过程通常不是完全自动化的,而是需要用户介入的反复迭代和交互的过程。因此,数据可视化、用户反馈与交互都是数据整理的重要研究内容。如何开展有针对性的研究工作提出数据整理方法论并系统化地集成相关工具形成数据整理方面整体上的研究和应用影响力从事相关领域的研究学者应充分利用庞大的Python开源社区PyData投入系统化的数据准备工具研制中将研究成果更好地应用在实际场景中或许是一条较为可行的技术路线。
\subsection{数据分析}
\label{sec:dm-analyze}
从系统角度交互式分析对大数据处理的性能要求极高如何利用好新硬件如GPU, FPGA, NVM, RDMA等来加速大数据分析至关重要。在数据处理层面还可以利用用户在交互分析时需要花时间去理解数据分析的结果利用这个时间完成数据的预取和预计算操作把最有可能的下一步分析任务的结果提前算出来或者采用近似计算方法给出统计分析结果的上下界并随着数据处理的进行不断更新计算结果让分析结果随着用时的增加更为精确。如何根据一些常见的数据分析类型设计相关的评测基准让不同交互式数据分析解决方案之间有更好的可比性也是很值得研究的方向。再有就是解决具体分析任务时如何设计有效的交互界面结合数据模式和数据空间的特点设计有效的数据交互方式让数据和分析流程都能更好地通过可视化方式引导用户以较低的代价参与到数据分析的整个流程中。
从系统角度交互式分析对大数据处理的性能要求极高如何利用好新硬件如GPU, FPGA, NVM, RDMA等来加速大数据分析至关重要。首先在数据处理层面还可以利用用户在交互分析时需要花时间去理解数据分析的结果利用这个时间完成数据的预取和预计算操作把最有可能的下一步分析任务的结果提前算出来或者采用近似计算方法给出统计分析结果的上下界并随着数据处理的进行不断更新计算结果让分析结果随着用时的增加更为精确。其次如何根据一些常见的数据分析类型设计相关的评测基准让不同交互式数据分析解决方案之间有更好的可比性也是很值得研究的方向。再有就是解决具体分析任务时如何设计有效的交互界面结合数据模式和数据空间的特点设计有效的数据交互方式让数据和分析流程都能更好地通过可视化方式引导用户以较低的代价参与到数据分析的整个流程中。
\subsection{数据可视化}
\label{sec:dm-visulization}
数据可视化利用计算机图形学、数据分析、用户交互界面等技术通过数据建模等手段为用户提供有效的数据呈现方式。数据可视化能够帮助用户迅速理解数据定位问题。数据可视化技术可以从不同维度来刻画如可视化后台的数据类型、不同类型的可视化交互技术等。数据可视化技术的进展通常针对不同的数据类型展开图数据的海量规模包括节点和边以及有限的可视空间限制成为图数据可视化的主要挑战主要研究侧重于图简化的思路通过边聚集或者点聚集构建不同层次的图同时引入交互策略支持用户对其感兴趣的部分进一步动态分析时空数据是包含时间维度和空间维度的数据其空间维度通常和地理系统进行结合重点研究采用属性可视化技术展示对象随着时空维度变化如将事件流和地理流结合的Flowmap、时间-空间-事件等信息的三维立方体方式等;数据仓库中多维数据可视化则着重更加友好呈现数据,利用散点图、平行坐标等方式提高用户对整体分布和不同维度之间关系的理解。
大数据时代如何利用可视化技术让用户更加方便地去理解数据,具有非常广泛的应用场景。数据可视化利用计算机图形学、数据分析、用户交互界面等技术,通过数据建模等手段,为用户提供有效的数据呈现方式。数据可视化能够帮助用户迅速理解数据,定位问题。数据可视化技术可以从不同维度来刻画,如可视化后台的数据类型、不同类型的可视化交互技术等。数据可视化技术的进展通常针对不同的数据类型展开,为此需要重点研究1图数据的可视化。图数据的海量规模(包括节点和边)以及有限的可视空间限制成为图数据可视化的主要挑战,主要研究侧重于图简化的思路,通过边聚集或者点聚集,构建不同层次的图,同时引入交互策略,支持用户对其感兴趣的部分进一步动态分析;2时空数据的可视化。时空数据是包含时间维度和空间维度的数据其空间维度通常和地理系统进行结合重点研究采用属性可视化技术展示对象随着时空维度变化如将事件流和地理流结合的Flowmap、时间-空间-事件等信息的三维立方体方式等;3多维数据可视化。数据仓库中多维数据可视化则着重更加友好呈现数据,利用散点图、平行坐标等方式提高用户对整体分布和不同维度之间关系的理解。
\subsection{数据隐私}
\label{sec:dm-privacy}
数据隐私保护技术主要利用以密码学为基础的加密、签名、协议等技术,以统计学为手段的匿名化技术、模糊化技术以及基于概率分析的差分隐私技术等,为用户数据提供隐私保证。大数据背景下潜在隐私泄露方式更加多元,主要研究内容可以包括以下三方面,一是大数据隐私保护理论,包括隐私定义与搜索能力之间的关系、支持数据隐私的安全搜索机理、隐私保护方法评测基准等。二是数据存储、查询和发布中的隐私保护技术,包括基于隐私识别的数据加密算法、带密检索机制、动态数据的安全连续发布、具有复杂关联的敏感数据反推演策略等。三是数据服务中的个人隐私保护,包括社交网络环境下的个性化隐私度量及保护手段,数据服务中对用户偏好、地理位置、行动轨迹等信息的隐藏策略,及其与服务质量之间的关系度量等。
数据隐私保护技术主要利用以密码学为基础的加密、签名、协议等技术,以统计学为手段的匿名化技术、模糊化技术以及基于概率分析的差分隐私技术等,为用户数据提供隐私保证。大数据背景下潜在隐私泄露方式更加多元,主要研究内容可以包括以下三方面,一是大数据隐私保护理论,包括隐私定义与搜索能力之间的关系、支持数据隐私的安全搜索机理、隐私保护方法评测基准等。二是数据存储、查询和发布中的隐私保护技术,包括基于隐私识别的数据加密算法、带密检索机制、动态数据的安全连续发布、具有复杂关联的敏感数据反推演策略等。三是机器学习模型训练和发布中的隐私保护技术,包括最优化隐私性和可用性的模拟训练数据生成技术、基于目标函数和梯度扰动的模型训练技术、基于加密或扰动的隐私保护联合学习技术、基于对抗学习的模型参数发布技术等。四是数据服务中的个人隐私保护,包括个性化隐私度量及保护手段,数据服务中的个人隐私保护,包括社交网络环境下的个性化隐私度量及保护手段,数据服务中对用户偏好、地理位置、行动轨迹等信息的隐藏策略,及其与服务质量之间的关系度量等。
\subsection{数据安全}
\label{sec:dm-safe}
数据安全研究主要是利用现代密码学算法对数据进行主动保护。大数据背景下,海量规模数据和多样化类型数据给数据的检索和存储都带来巨大的压力,传统数据安全技术可能失效。
主要研究内容可以包括以下三方面,一是大数据安全保护模型,包括攻击者行为形式化、大数据完整性、真实性和可用性定义、大数据访问控制方法等。二是数据存储、访问和处理中的安全保护技术,包括基于属性的身份鉴别、同态认证、基于属性的访问控制、零知识证明、函数加密以及通过安全计算协议解决大数据环境下人工智能高速发展所带来的数据安全共享计算的难题,包括优化同态加密及多方安全计算的高昂通信代价等。三是大数据安全保护动态化管理,包括用户失效证书管理、访问权限更新、应对数据权属变更的代理重加密、支持临时授权的访问控制等。
\section{本章小结}
在“以数据为中心的计算”计算时代,数据在计算体系中的重要性凸显。数据不再是依附软件(业务)而存在的,数据本身可以是独立存在的。这给数据管理和数据工程带来新的挑战和机遇。一方面数据不仅仅支撑业务的运行,即使在业务活动结束后还要继续保存,因此,数据会越积越多,需要新的支撑平台。另一方面,数据只有利用才有价值,围绕数据价值的提升,需要有方法学和工具的支撑。
在“以数据为中心的计算”计算时代,数据在计算体系中的重要性凸显。数据不再是依附软件(业务)而存在的,数据本身作为资源甚至资产可以是独立存在的。这给数据管理和数据工程带来新的挑战和机遇。一方面数据不仅仅支撑业务的运行,即使在业务活动结束后还要继续保存,因此,数据会越积越多,需要新的处理数据的支撑平台。这不仅仅影响到数据的存储组织方式,还对处理器的设计、计算机系统的体系结构、系统软件的设计、数据管理软件设计等都会产生深刻的影响。另一方面,数据只有使用才有价值,因此,围绕数据价值的提升,需要有新的数据工程方法学和软件工具的支撑。

View File

@ -1,108 +1,172 @@
软件系统已经成为各行各业的重要基础设施,包括单纯的信息基础设施、软件嵌入的物理设备、以及软件提供的服务设施等。可以预计,基于这些软件基础设施,未来的应用软件系统将以面向领域的人机物融合场景计算为主要呈现形式。即应用软件系统将使计算服务嵌入各行各业以及民众生活,使计算从单纯的赛博空间进入人机物融合空间,综合利用人类社会(人)、信息空间(机)和物理世界(物)等的资源,通过协作进行领域特定的个性化计算,实现领域价值。
近年来,软件定义网络、软件定义存储、软件定义数据中心等的不断出现,揭示了计算系统在能力描述上的趋势,其内在本质是资源虚拟化和功能可编程。特定领域软件系统要在各种各样的应用场景中承担核心的运维机制,软件定义的方法和技术将成为其体系架构和实施部署上的基本手段。本章选择几个典型领域案例,从体系架构、技术挑战和未来趋势三个方面分别予以阐述,展示未来领域软件系统发展的基本趋势。
软件系统已经成为各行各业的重要基础设施,包括单纯的信息基础设施、软件嵌入的物理设备、以及软件提供的服务设施等。可以预计,基于这些软件基础设施,未来的应用软件系统将以面向领域的人机物融合场景计算为主要呈现形式。即应用软件系统将使计算服务嵌入各行各业以及民众生活,使计算从单纯的赛博空间进入人机物融合空间,综合利用人类社会(人)、信息空间(机)和物理世界(物)等的资源,通过协作进行领域特定的个性化计算,实现领域价值。
人机物融合场景下的软件应用系统起源于2006年前后出现的信息物理融合系统Cyber-Physical SystemsCPS\index{信息物理融合系统Cyber-Physical SystemsCPS}以及更早兴起的物联网Internet of Things, IoT\index{物联网Internet of Things, IoT}。早期研究侧重于网络化嵌入式系统和控制系统等,包含物理资源层、传感网络层、计算控制层和价值服务层,物理资源层通过传感网络层连接到计算控制层;计算控制层和价值服务层则根据感知获得的事件、日志等,并根据相应的数据处理和行为决策逻辑向外提供服务。这类系统明显的具有面向特定应用领域,实现场景计算的特征,譬如智能交通、工业制造、无人驾驶、健康医疗等。
CPS与IoT技术的结合使因特网能感知现实世界通过和云计算的融合使嵌入式系统与云数据中心及云服务连接起来进而支持更高层服务和控制的实现通过与云计算\index{云计算}、雾计算\index{雾计算}及边缘计算\index{边缘计算}深度融合,使能“人”的融入,从而形成了新的应用软件系统形态。随着人的因素在系统运行过程起越来越重要的作用,这类系统逐渐发展出泛在化、社会化和智能化的典型特征。
\ref{fig1}给出了这类面向领域的应用软件系统的通用架构。其含义是,第一,应用场景及其各类物理设备、人及其互连关系等形成面向领域的应用软件系统的上下文元素(或场景元素),当出现计算需求时,与需求相关的上下文元素形成与需求对应的上下文。第二,自适应控制层提供场景元素的动态接入/撤出、场景元素的动态发现、场景元素的融合管理、以及场景元素的社会化协同等机制,形成或动态演化出能满足当前应用需求的系统。第三,所组成的应用系统通过和其上下文元素的交互,实现需求所要求的价值。因此,这类应用软件系统可成为面向需求和场景的软件系统,表现出异构多样化设备的可接入、异质构件的互操作、以及个性化需求的可满足性等,系统通过多样化感知设备使能对现实场景的感知和直接的作用。
\section{卫星操作系统}
随着商业航天时代到来软件定义卫星成为一个新的发展趋势。2018年11月20日中国第一颗软件定义卫星“天智一号”发射升空是软件定义方法进入卫星领域的成功案例。长期以来卫星的研制模式一直采用“为特定任务定制卫星、为特定卫星定制载荷、为特定载荷定制软件”的技术路线。同时传统卫星都是按功能划分一种卫星只能完成一种任务入轨之后无法增加新的功能可谓“一星一任务、一箭定终生”。
软件定义卫星,是采用开放系统架构,以计算为核心,支持有效载荷虚拟化,即插即用,应用软件按需编排、生成与加载,系统功能快速重构的新一代智能卫星系统。从平台优先到载荷优先,从载荷优先到算法优先、软件优先,软件定义卫星是传统卫星向智能卫星演变的重要一环。
软件定义卫星与传统卫星的主要区别是,允许通过软件的方式重构有效载荷、改变和扩展系统功能、并优化其性能。这样可以最大程度地解除卫星软硬件之间的紧耦合关系,使其可以各自独立演化。利用强大的计算能力,一方面可以支撑更多的应用软件,从而将卫星的硬件效能发挥到极致;另一方面还可以实现对卫星全系统资源的虚拟化,从而将卫星的硬件实现简化到极致。软件定义卫星以计算为核心,硬件最小化,软件最大化,从而最大程度地降低卫星的研制成本,缩短卫星的研制周期,提高卫星的应用效能,即最大程度地提高卫星的效费比。
\subsection{参考体系架构}
从软件定义卫星的基本理念出发,其系统实现需要解决三方面的问题,即“有效载荷虚拟化、系统平台可演化、应用软件可编排”,其系统架构如图\ref{fig1}
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{fig2-7/marc.png}
\caption{面向领域的应用软件系统元架构}
\includegraphics[width=\linewidth]{fig2-7/stars.png}
\caption{软件定义卫星体系架构}
\label{fig1}
\end{figure}
其中,系统软件平台是核心,即面向卫星的泛在操作系统。卫星泛在操作系统,向下提供硬件载荷抽象层,实现卫星硬件资源的标准化和虚拟化,为高层统一资源的调度管理提供一致的访问控制接口;向上提供应用编程与编排框架,以及统一的编程接口,支持各类应用程序,并通过丰富的应用程序为用户提供个性化服务;其核心功能是资源的调度、管控、配置、组装及演化。
本章选择四个有代表性的典型应用场景,分别阐述其挑战性问题和主要研究内容。
\section{无人自治系统及其群体系统}
\subsection{关键技术挑战}
软件定义卫星从概念模型到全面实现仍面临诸多技术挑战,包括卫星有效载荷的虚拟化,异构资源的管理与实时调度,以及卫星按需定制和演化及其可靠性等。
\begin{itemize}
\item 异构资源的功能抽象和虚拟化。卫星上的硬件资源包括星敏、太敏、磁强计、陀螺仪、GNSS、动量轮、CMG、磁力矩器、推进、数传发射机、测控应答机、可见光相机、红外相机、高光谱相机、SAR、雷达等诸多种类其功能和特性高度异构。需要提供支持硬件资源功能的统一的虚拟化机制构建相应的模型使软件能认知、驱动或控制硬件设备。
\item 系统平台硬件资源的实时调度。卫星平台硬件资源虚拟化后都映射为软件可认知的系统资源统一资源空间中的资源调度与管理存在两个层次上的差异性其一是使星载计算机系统资源适应不同应用算法需求的调度与管理DSP、FPGA、CPU、NPU、GPU等计算资源以及网络通讯与数据存储资源其二是有效载荷虚拟化后的功能资源满足不同应用算法需求的调度与管理如何对不同层次上的资源进行实时的协同调度与管理是软件卫星定义卫星功能有效性的挑战。
\item 软件定义卫星系统的持续演化。软件定义卫星需要支撑两个层面的适应性和演化性,一是面向容错的载荷资源的功能升级换代,这需要资源虚拟化和软件定义具备自动更新机制,具有自我修复与更新的软件定义自动生成能力;二是应对卫星应用场景需求或者环境变化,提供算法重构和重配置的能力。这向下要求载荷功能定义模型具有自动演化和更新能力,向上要求卫星应用定制程序和架构具有针对需求和环境变化的自适应能力。
\item 面向卫星应用场景的定制和卫星载荷资源的优化。传统的卫星基本都是专用的不具有能力的可定制性在软件定义方法的支持下有可能通过领域任务知识的软件定义化实现面向应用场景的定制实现针对不同应用的APPs。其挑战性问题是如何根据不同任务需求从载荷资源优化利用出发实现一星多用最大限度地发挥硬件的能力。
\end{itemize}
\subsection{未来研究方向}
面对以上技术挑战,围绕软件定义卫星需进一步开展以下研究工作:
\begin{itemize}
\item 基于模型的有效载荷虚拟化及其可靠性检验方法。有效载荷的虚拟化不仅是提供访问接口,还需要有功能的抽象及其软件定义,需要从功能抽象的角度,研究并建立卫星硬件能力的建模和软件定义方法,需要研究基于模型的硬件资源的检验技术和基于模型的测试技术,为卫星有效载荷资源虚拟化提供可靠性检测方法。
\item 面向卫星泛在操作系统的资源协同管理体系。涉及三个方面,一是研究面向应用(算法)需求的星载计算资源统一调度模型;二是研究面向有效载荷的资源调度与使用模型;三是研究面向应用需求的资源协同调度和管理方法。
\item 面向软件定义卫星应用的持续演化框架。其涵盖一系列软件系统演化机制和方法需研究包含1领域特定的编程语言及运行时系统2与编程语言系统适配的自适应计算卸载机制以及代码自动生成与修复技术3基于样例的API自动合成4面向场景不确定性的管控逻辑自适应编排5基于自主学习与数据驱动的管控目标自适应演化机制。
\end{itemize}
\section{工业控制操作系统}
工业是推动科技创新、经济增长和社会稳定的重要力量。工业控制操作系统是指专用于或主要用于工业控制领域,为提高制造企业制造、生产管理水平和工业管理性能的系统软件,包括嵌入式工业软件、协同集成类软件、生产控制类软件、生产管理类软件等四大类。工业控制操作系统利用信息技术将工业过程的控制逻辑化、管理流程代码化,从而驱动装备和管理业务按照既定的逻辑自动高效地运行,并实现预先设定的功能。工业控制操作系统的应用可以提高产品价值、降低企业成本进而提升企业的核心竞争力,是现代工业装备的大脑,也成为支撑第四次工业革命的核心。
工业控制操作系统目前呈现如下的趋势1通过智能工厂建设提升数字化竞争力建设数字工厂的核心首先是完善的信息化规划其次是对各项信息化应用的有机集成2通过协同研发平台优化研发管理体系优化研发管理体系的核心在于数据和流程的标准化以及跨企业研发平台的建设思路3推广工业机器人在垂直行业的应用其核心在于对传统工艺的理解和改造4应用商业智能实现数据驱动企业发展在商业智能系统中实现全员统一查阅企业视图全面预测数据洞察驱动的业务流程最佳化形成统一的基础架构预先构建的分析解决方案演变成企业绩效管理系统。
\subsection{参考体系架构}
从软件定义工业控制系统的基本理念出发,软件定义工业控制系统的主要特点是:第一,机电仪控设备、生产设备、生产资源和虚拟化;第二,信息采集、过程控制、过程优化、生产调度、企业管理、经营决策的定制化;第三,工业应用开发、数据集成和分析服务的平台化。其系统架构如图\ref{fig2}所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{fig2-7/industry.png}
\caption{软件定义工业控制系统}
\label{fig2}
\end{figure}
\subsection{关键技术挑战}
从软件系统的角度看,工业控制操作系统的特殊性体现在设备和生产资源的虚拟化和工业大数据采集和管理上,其中包括工业信息化数据、机器设备数据和产业链跨界数据等,其中数据的采集环境多样,数据采集具有很高的准确性和实时性要求,并且大部分数据具有时序特性。工业控制操作系统的主要挑战,来自于对上述四大类软件系统进行无缝集成的需求,具体挑战包括:
\begin{itemize}
\item 贯穿工业生产全过程的体系化的软件系统之系统:流程工业涉及多个方面,既涉及与企业价值相关的产品生产需求,又涉及原材料提取、传递及其通过物理、机械和/或化学方式转化成其他产品的过程。当工业生产的每个环节都配备传感和通信设备之后,为了实现智能制造,首先需要构建各个生产环节上的独立的信息系统和控制系统,比如生产管控系统、安全环保系统、供应链管理系统、能源管理系统、资产管理系统等。但如何汇聚这些独立的软件系统和物理设备,用统一的机制综合物流、能源流、资金流,形成工业生产全过程全方位的动态镜像,从而实现基于生产数据和管理数据多维度共享基础上的工业智能,不仅是软件技术和软件架构上的挑战,也是先进控制和管理上的挑战。
\item 工业控制操作系统的安全性和系统失效的风险性:一方面,相对独立的工业控制系统越来越多地与开放的管理系统互联,在实现数据共享、智能决策的同时,也为工业控制系统安全带来隐患与威胁。这类系统中的控制协议,大多在开始设计时只考虑如何能满足要求的效率、实用性和可靠性,而忽略了安全性要求。如何增强工控系统的控制协议的安全性,成为建立并实施一体化工业软件系统之系统的最大忧患。另一方面,工业系统中包含了成千上万的物理设备,这些设备很多具有很高的损耗率和失效率,而这些常常导致巨大事故,其系统设计时的风险分析、运行时的失效监测数据实时准确采集、以及精确的风险预测和溯源分析等等,对软件系统的设计和运行支撑都带来挑战。
\item 海量多维流数据的实时处理。工业控制操作系统需要面对的是超高的数据通量和低质乱序的传输同时需要满足的需求又是高质全序查询与复杂分析。只要系统处于运行态检测设备7天24小时不间断地产生数据数据采集频率高而且量大。软件系统需要管理千万条时间序列数据并以每秒百万至千万点的速度处理数据。更加困难的是这些数据基本都是异构的而且从异地采集的常常出现表头缺失、数据错列、数据缺失、数据串行等问题需要高效正确的纠错算法等等这些都是系统设计和运行时的挑战性问题。
\end{itemize}
\subsection{未来研究方向}
工业控制操作系统的未来研究方向包括:
\begin{itemize}
\item 实时准确的信息感知和数据采集。流程工业生产过程优化调控和经营管理优化决策需要准确的信息,其难点是如何实现从原料供应、生产运行到产品销售全流程与全生命周期资源属性等的快速获取与信息集成。因此,原材料与产品属性的快速检测、物流流通轨迹的监测以及部分关键过程参量的在线检测是实现流程工业智能优化制造的前提和基础。
\item 生产运行监测和动态优化决策。流程生产计划的不确定因素众多,原料采购价格和市场需求多变,给生产运行和经营管理的决策带来难题。核心要解决如何深度融合市场和装置运行特性知识进行管理模式的变革,以大数据、知识型工作自动化为代表的现代信息技术为制造过程计划和管理的优化决策带来了契机。
\item 以软件为核心的生产全流程自动协同控制。流程工业制造采用由经济优化、计划调度、先进控制、基础控制等不同功能层组成的分层递阶结构,如何根据实际过程的动态实时运行情况,从全局出发协调系统各部分的操作,成为生产过程优化调控的核心。软件系统需要将物质转化机理与装置运行信息进行深度融合,建立过程价值链的表征关系,支持生产过程全流程的自动协同控制与优化。
\item 生产过程故障诊断与环境安全监测和预报。保证生产制造装备安全、可靠运行是保证生产制造全流程优化运行的关键,也是综合自动化系统正常运行的保证。需要软件系统集成传感、检测、控制以及溯源分析等技术,实现模型与数据驱动的流程工业过程运行工况的故障预报、诊断与自愈控制,以及生产制造全生命周期安全环境足迹监控与风险控制,实现绿色制造。
\item 高通量时序数据全生命周期管理、传输和利用。工业物联网的数据采集、管理和利用涉及跨越“云-网-端”三层体系架构,终端层需要支持高性能的写入、高压缩比的存储以及简单查询。场控层需要配备高效丰富的时间序列查询引擎。数据中心层需要能与大数据分析平台无缝集成,支持时序数据处理和挖掘分析。
\end{itemize}
\section{智慧城市系统}
智慧城市系统利用各种信息技术,将城市的系统和服务打通并集成,以提升资源运用的效率,优化城市管理和服务,以及改善市民生活质量。智慧城市系统是新一代信息技术在城市中广泛且深入应用的结果,其驱动力在于突破地域、部门或系统的边界,促进城市信息空间、物理空间和社会空间的深度融合,以此为基础向城市管理者提供城市规划管理的支持,并向市民提供泛在、周到的智能服务。智慧城市系统除了针对具体应用需求的应用系统外,还需要建立为这些应用系统提供共性支撑的基础支撑平台。在该平台的支撑下,具有不同功能的智慧应用系统,以及对智慧城市具有不同诉求和能力的组织和个人,密切协作,形成各展所长、相互支撑的共生生态系统。
\subsection{参考体系架构}
智慧城市的一种典型体系结构如图\ref{fig3}所示。
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{fig2-7/city.png}
\caption{智慧城市系统}
\label{fig3}
\end{figure}
在上述结构中一共分为三层。最下层是要打破现有城市信息系统的边界,实现跨域信息系统互连互通,并将现有系统中的数据、功能封装为可复用的信息资源;中间层则是为各种城市智慧应用提供开发、运行支撑和知识萃取等共性服务的基础支撑平台,并要随着城市应用需求、数据、技术的变化而演化;最上层是复用已有信息资源构建的大量应用系统,这些应用的功能和性能在基础平台的支撑下,实现功能和性能的自适应,并由平台统一管理并根据用户的情境与偏好推荐用户使用。
\subsection{主要技术挑战}
智慧城市系统的主要技术挑战包括:
\begin{itemize}
\item 系统边界可伸缩,实现跨域信息系统互连互通。在城市信息化建设的初期,城市管理的各个部门独立开展信息化工作,建成了大批“孤岛系统”。建立智慧城市系统的首要挑战就是针对跨部门跨系统的应用场景,如何进行异构信息交换、系统间互操作以及协同问题求解。智慧城市系统的功能重点体现在信息服务上,系统边界体现为信息边界。通过软件定义把信息资源虚拟化,再通过软件系统对虚拟资源进行管理和调度,这是实现跨域信息系统互连互通的技术支撑,也是目前存在重要技术挑战。具体而言,其主要挑战在于,如何进行信息资源的虚拟化,以及如何在信息资源虚拟化的基础上,实现信息服务可编程,通过统一系统调用接口,访问信息资源提供的服务,实现信息资源的灵活管理、调度和更新,以满足对信息服务的多样需求。
\item 满足信息服务的准确一致性要求,提供可信的城市信息服务。智慧城市系统重在为用户提供准确、一致和可信的信息服务,信息服务可信性保障的挑战重点体现在,第一,保证信息服务中信息来源的可信性,比如如何根据信息服务需求,判断并评估需求相关的权威信息来源,并进行可靠的信息挖掘和抽取;第二,对需要推理产生的综合信息服务需求,需要有高置信度的信息源比对、推理和信息融合方法,以保证可以从多信息源中获得所需要的综合信息;第三,如何保证综合信息服务中信息的一致性,也是目前的重要挑战。
\item 满足信息服务时变性和场景相关性特征,实现及时个性化信息萃取和挖掘。智慧城市系统需要能满足不同用户不同场景的个性化信息服务需求,但其信息源海量、分布且动态变化,实现需求驱动的信息动态采集,进行场景相关的信息萃取和综合,并实现适时适地适用的信息服务,是智慧城市系统的重要挑战。
\end{itemize}
\subsection{未来研究方向}
智慧城市系统的未来研究方向包括:
\begin{itemize}
\item 城市信息资源互操作与管理。建立城市信息资源互操作与管理系统,一方面需要打破城市各孤岛系统的壁垒,建立数据共享开放、功能协同的机制;另一方面需要实现对城市各类信息资源的统一索引、授权、监控管理,促进基于语义的资源大规模共享与协同。
\item 城市知识萃取与演化。城市信息系统具有“智慧”的前提是必须掌握与城市相关的各种知识。既包括特定应用相关的专门知识的获取和管理,也包括智慧城市的基础支撑平台,以针对跨应用的共性城市知识建立统一的知识萃取与演化机制,为各类应用提供共性支撑,包括三方面能力:一是领域知识模型构造能力,将分散在信息系统和专家头脑中的知识集中抽象成统一知识模型并建立相应的知识库;二是领域知识模型演化能力,随着城市知识的演化更新知识模型,并保持知识库的一致性;三是知识可信性评估能力,从溯源、推理、传播、交叉验证等多种渠道,评估知识的可信性。
\item 群智城市信息感知和协同推荐。智慧城市系统应满足城市全方位感知和多样化信息服务需求,需要研究多人多组织参与的群智感知和服务定义。具体包括三个方面。第一,群智和移动群体城市感知。将持有智能手机在城市中移动的市民,视为是融合手机的感知、计算、通信能力和人类智能的“综合感知终端”,形成群智和移动群体城市感知网络;第二,构建基于“云-边-端”计算架构的智慧城市互连和协作架构,使能“综合感知终端”通过移动互联网,实现云平台支撑下的互联和协作,完成大规模、复杂城市感知任务。第三,群智智慧城市服务定义和推荐。面向智慧城市中信息服务应用的多样化、本地化、个性化的需求,促进人机交互和协作,在基于互联网的群智汇聚平台支撑下,研究信息服务的软件定义方法,实现大规模协同式信息服务的定义、设计和推荐,形成各展所长、相互支撑的共生生态系统。
\end{itemize}
\section{无人自治系统软件}
无人自治系统UAS是机械系统计算技术传感器和软件的融合包括无人地面车辆、无人飞行器、智能机器人等。其典型特征是能自主感知其周边环境的状态并根据其环境状态通过其内部搭载的计算部件理解环境状态并作出对下步动作的决策并将决策结果直接实施到其机械系统上其各个部分的工作全部通过软件来协调完成。比如无人地面车辆UGV是在与地面接触且没有人在场的情况下运行的车辆一般配备一组传感器以观察其周边环境并自主决定其行为。
无人自治系统其核心是其环境和情景的可感知性和行为的自治性典型的具有如下能力1环境感知能力能收集其周边环境的信息形成对环境的认知例如获得建筑物内部的结构检测环境中感兴趣的物体例如人和车辆2规划和自主行为能力不同功能的无人自治系统有不同的规划和行为能力比如无人地面车辆可以在没有人工导航的情况下自主在航点之间行走无人飞行器可以在没有人工导航的情况下自主在航点之间飞行智能机器人可以在没有人工控制的情况下自主完成为它设定的任务等等3自我修复能力无需外部协助即可自行修复和自我定期维护4环境安全保护能力能在完成设定任务的同时避免对人员财产或自身造成伤害5自主学习能力。包括在没有外部帮助的情况下学习或获得新功能根据环境调整自身的行为策略在没有外部帮助的情况下适应环境培养针对任务目标完成的道德意识。
自主无人系统的群体协作系统是从单体自主无人系统扩展而来的。除了单体自主无人系统具有的特点外群体协作系统还具有1功能分布性即不同功能的自主无人系统协同工作以完成更复杂的任务通过共享资源扩大完成任务的能力范围2空间分布性多个自主无人系统可以分布在工作空间的各个区域同时工作提高完成任务的效率增强系统的鲁棒性。
\subsection{参考体系架构}
从软件定义无人自治系统的基本理念出发,其系统实现需要解决三方面的问题,即“有效载荷虚拟化、系统平台可演化、应用软件可编排”,其系统架构如图\ref{fig4}所示:
\begin{figure}[htbp]
\centering
\includegraphics[width=\linewidth]{fig2-7/auto.png}
\caption{无人自治系统基本结构框图}
\label{fig4}
\end{figure}
首先,无人自治系统利用多传感器系统包含内部传感器与外部传感器,内部传感器主要用于测量系统内部状态信息,外部传感器通过与外部环境进行交互获得相应的环境信息。随后将无人自治系统系统状态数据与环境数据虚拟化和标准化后传向无人自治系统泛在操作系统,实现无人自治系统位/姿控制管理、资源调度与优化和载荷资源管理。在此基础上无人自治系统进行环境感知与理解、定位与规划、决策与控制、自诊断与自愈合、安全与自成长和群体协同与合作。最后利用应用编程接口支持各类应用程序,并通过丰富的应用程序为用户提供个性化服务。其核心功能提供资源的调度和管控,以及资源的配置、组装及演化,使得无人自治系统具有规划与自主行为能力、自我修复能力、环境安全与保护能力以及自主学习能力等自治能力。
\subsection{关键技术挑战}
从软件的角度看,无人自治单体和群体系统的关键技术挑战包括:
\begin{itemize}
\item 环境感知的实时性和场景理解的综合性:无人自治系统的上下文环境是物理世界,物理世界的时间动态是不可逆转的,这对系统的时间性提出了严格的要求,信息获取和提交的实时性影响系统判断与决策精度。无人自治系统的环境具有多个方面的属性,系统一般搭载多个设备分别采集部分信息,分布信息的实时关联和准确汇聚也是构造软件系统的关键挑战。场景感知的目的是对场景的理解,只有在准确理解了。其信息采集的实时性、多维信息关联的一致性、以及场景理解的准确性是无人自治系统的一大挑战。
\item 行为决策的适应性和系统控制的鲁棒性:物理世界不是完全可预测和可控的,无人自治系统需要具备动态自适应能力,即使遇到意想不到的情况,也要保证系统的鲁棒性。同时还必须满足其可靠性和效率等方面的需求。更重要的是,当系统用于安全攸关或者危险环境中时,由于系统实施的控制行为,将对物理环境产生直接的作用效果,系统需要具有强的内生安全性,并保证其行为不会对环境造成威胁。
\item 群体无人自治系统的通信、协作和冲突消解:群体无人自治系统是由多个无人自治系统按照一定的结构或关系构成的一个整体,群体系统的结构决定单个系统间的交互框架,决定单个系统间的信息和控制关系。两种常用的结构是:集中式和分散式。无人自治系统形成群体的目的是完成需要协作才能完成的任务,建立有效的结构是任务完成的关键,有效的结构可以增强自主无人群体系统的协作程度。如何根据任务的复杂性和不确定性,建立动态自组织群体结构是群体有效通信和协作的关键挑战。群体无人自治系统在任务执行过程中,常常出现任务冲突、空间冲突或路径冲突等,一旦发生冲突很容易引起系统的混乱,影响系统的性能,群体无人自治系统的在线冲突消解和有效的行为协调也是本研究方向的一大挑战。
\item 环境感知的实时性和场景理解的综合性:无人自治系统的上下文环境是物理世界,物理世界的时间动态是不可逆转的,这对系统的时间性提出了严格的要求,信息获取和提交的实时性影响系统判断与决策精度。无人自治系统的环境具有多个方面的属性,系统一般搭载多个设备分别采集部分信息,分布信息的实时关联和准确汇聚也是构造软件系统的关键挑战。场景感知的目的是对场景的理解,只有在准确理解了。其信息采集的实时性、多维信息关联的一致性、以及场景理解的准确性是无人自治系统的一大挑战。
\item 环境感知的实时性和场景理解的综合性:无人自治系统的上下文环境是物理世界,物理世界的时间动态是不可逆转的,这对系统的时间性提出了严格的要求,信息获取和提交的实时性影响系统判断与决策精度。无人自治系统的环境具有多个方面的属性,系统一般搭载多个设备分别采集部分信息,分布信息的实时关联和准确汇聚也是构造软件系统的关键挑战。场景感知的目的是对场景的理解,只有在准确理解了。其信息采集的实时性、多维信息关联的一致性、以及场景理解的准确性是无人自治系统的一大挑战
\item 群体无人自治系统的通信、协作和冲突消解:群体无人自治系统是由多个无人自治系统按照一定的结构或关系构成的一个整体,群体系统的结构决定单个系统间的交互框架,决定单个系统间的信息和控制关系。两种常用的结构是:集中式和分散式。无人自治系统形成群体的目的是完成需要协作才能完成的任务,建立有效的结构是任务完成的关键,有效的结构可以增强自主无人群体系统的协作程度。如何根据任务的复杂性和不确定性,建立动态自组织群体结构是群体有效通信和协作的关键挑战。群体无人自治系统在任务执行过程中,常常出现任务冲突、空间冲突或路径冲突等,一旦发生冲突很容易引起系统的混乱,影响系统的性能,群体无人自治系统的在线冲突消解和有效的行为协调也是本研究方向的一大挑战。
\end{itemize}
\subsection{主要研究内容}
\subsection{未来研究方向}
无人自治系统首先是一个完成特定功能的系统,其无人自治特性体现在在没有人干预的情况下根据其所处的环境自主决定如何更好地完成其功能。因此,其主要研究围绕自主决策这个特性展开,即主要关注“环境-监测-分析-规划-实施-环境”这样一个决策回路,其中环境指系统所处的现实世界,该回路中的所有活动以系统所拥有的知识(包括环境知识和行为决策知识)为基础,系统根据知识去感知环境、分析场景并进行行为决策和采取行为。具体包括:
\begin{itemize}
\item 环境感知和场景理解(监测):指无人自治系统对环境信息的感知和分析能力。环境感知包括三个方面:空间感知和建模,静止物体感知和运动物体感知。无人自治系统的环境感知依赖多种传感设备,第一,需要分离空间感知能力和环境实体感知能力,研究空间建模方法以及系统和空间的位置关系判别方法;第二,对静止物体和运动物体的感知,包括物体探测和物体识别,实时捕捉物体和空间及物体和物体间的关系,在系统中建立空间状态的镜像;研究运动物体行动轨迹的追踪方法,变化物体的变化性分析和预测方法;第三,需要研究如何组合空间状态感知和(静止/运动)物体感知和认知,并运用时序关联建立综合感知的技术,研究理解系统所处环境的场景的方法。
\item 安全风险因素识别和风险评估指根据系统所处的环境场景研究系统环境安全因素的监测和安全风险评估方法。根据不同特定领域的基础研究提取安全因素的特征工程技术、深度学习技术、强化学习技术等研究安全因素的分类并确立风险等级。这里的安全因素是广义的安全关注点和无人自治系统的应用场景相关包括坏境给系统带来的风险和系统对环境带来的风险两个方面需要研究以应用场景为依据的安全关注点提取和建模方法建立安全因素分类体系和因果关系模型这是系统知识库的重要部分。在此基础上研究基于HAZOP原理的安全风险评估方法。
\item 行为优化和自主决策:无人自治系统工作过程的首要矛盾就是既要采用最佳策略完成预定任务又要规避各种可能的安全风险。由于系统常常处于动态变化的环境中,行为(包括系统运动行为和交互行为)优化和自主决策(解决已有行为规划是否需要改变、改成什么、如何改变等问题)成为关键特征。为了支持自主决策,需要研究针对系统应用领域和场景的自适应规则和策略的提取和建模,这也是系统知识库的另一个重要组成部分。值得研究的问题包括:环境因素到系统行为到系统任务间的关联关系建模,基于关联关系的任务完成度和安全风险的推理和分析,以及基于系统决策知识的自适应行为优化。
\item 自主学习和模型演化:赋予系统“学习能力”是为了使能系统能充分应对复杂多变的环境,使系统能根据运行时的经验,支持模型(包括系统环境模型和系统能力模型)的演化,自动提升系统的能力,提升系统的性能。但无人自治系统引入自主学习能力,还有很多问题需要研究,包括:学习和自主决策的关系、学习能力的需求识别、系统不同活动与自主学习能力的集成原理和方式、不同活动和不同学习方法的集成、学习构件的任务定义和交互定义、等等。更重要的是,基于控制论的无人自治系统引出了各种源于标准控制系统的体系结构,基于学习的无人自治系统自适应也可能需要以学习能力为中心的新的系统体系结构。
\item 群体协同和动态合作在复杂任务场景下多无人自治系统依赖任务分解和自主行为进行群体协作和动态合作提高任务完成的质量和效率。需要研究的内容包括1群体中个体的在线调度问题需要将动态观测需求常态化研究有效的机制来制定任务规划/重规划的决策时间点、机制策略、规划算法等。其难点是需要综合考虑个体动态环境和计算能力如其他个体状态信息获取延迟滞后、任务发布与任务到达间的动态不确定的时间差、应急任务的时效可用性、个体计算能力对任务的应急响应性能等2针对异构群体的任务分解和协同问题包括任务驱动的群体配置和协同架构机器协同算法机制架构的有效性度量和成本分析机制等群体架构的优化方法等有效分解复杂任务确定协调控制策略, 控制任务的求解过程, 实现个体间的有效协调配合。
\item 环境感知和场景理解(监测):指无人自治系统对环境信息的感知和分析能力。环境感知包括三个方面:空间感知和建模,静止物体感知和运动物体感知。无人自治系统的环境感知依赖多种传感设备,第一,需要分离空间感知能力和环境实体感知能力,研究空间建模方法以及系统和空间的位置关系判别方法;第二,对静止物体和运动物体的感知,包括物体探测和物体识别,实时捕捉物体和空间及物体和物体间的关系,在系统中建立空间状态的镜像;研究运动物体行动轨迹的追踪方法,变化物体的变化性分析和预测方法;第三,需要研究如何组合空间状态感知和(静止/运动)物体感知和认知,并运用时序关联建立综合感知的技术,研究理解系统所处环境的场景的方法。
\item 安全风险因素识别和风险评估指根据系统所处的环境场景研究系统环境安全因素的监测和安全风险评估方法。根据不同特定领域的基础研究提取安全因素的特征工程技术、深度学习技术、强化学习技术等研究安全因素的分类并确立风险等级。这里的安全因素是广义的安全关注点和无人自治系统的应用场景相关包括坏境给系统带来的风险和系统对环境带来的风险两个方面需要研究以应用场景为依据的安全关注点提取和建模方法建立安全因素分类体系和因果关系模型这是系统知识库的重要部分。在此基础上研究基于HAZOP原理的安全风险评估方法。
\item 行为优化和自主决策:无人自治系统工作过程的首要矛盾就是既要采用最佳策略完成预定任务又要规避各种可能的安全风险。由于系统常常处于动态变化的环境中,行为(包括系统运动行为和交互行为)优化和自主决策(解决已有行为规划是否需要改变、改成什么、如何改变等问题)成为关键特征。为了支持自主决策,需要研究针对系统应用领域和场景的自适应规则和策略的提取和建模,这也是系统知识库的另一个重要组成部分。值得研究的问题包括:环境因素到系统行为到系统任务间的关联关系建模,基于关联关系的任务完成度和安全风险的推理和分析,以及基于系统决策知识的自适应行为优化。
\item 自主学习和模型演化:赋予系统``学习能力''是为了使能系统能充分应对复杂多变的环境,使系统能根据运行时的经验,支持模型(包括系统环境模型和系统能力模型)的演化,自动提升系统的能力,提升系统的性能。但无人自治系统引入自主学习能力,还有很多问题需要研究,包括:学习和自主决策的关系、学习能力的需求识别、系统不同活动与自主学习能力的集成原理和方式、不同活动和不同学习方法的集成、学习构件的任务定义和交互定义、等等。更重要的是,基于控制论的无人自治系统引出了各种源于标准控制系统的体系结构,基于学习的无人自治系统自适应也可能需要以学习能力为中心的新的系统体系结构。
\item 群体协同和动态合作在复杂任务场景下多无人自治系统依赖任务分解和自主行为进行群体协作和动态合作提高任务完成的质量和效率。需要研究的内容包括1群体中个体的在线调度问题需要将动态观测需求常态化研究有效的机制来制定任务规划/重规划的决策时间点、机制策略、规划算法等。其难点是需要综合考虑个体动态环境和计算能力如其他个体状态信息获取延迟滞后、任务发布与任务到达间的动态不确定的时间差、应急任务的时效可用性、个体计算能力对任务的应急响应性能等2针对异构群体的任务分解和协同问题包括任务驱动的群体配置和协同架构机器协同算法机制架构的有效性度量和成本分析机制等群体架构的优化方法等有效分解复杂任务确定协调控制策略, 控制任务的求解过程, 实现个体间的有效协调配合。
\end{itemize}
可以预计,群体无人自治系统的发展,将推动包括智能制造、智能交通、智能农业、智能医疗、智能城市、国家安全等的重大变革。但无人自治系统的全面应用还需要很多工程性的工作,比如,建立以数据驱动的无人车间/智能工厂的体系架构和标准体系,形成人机协同的无人车间/工业智能系统完整的体系、技术与标准,实现知识驱动的无人车间/智能工厂的广泛应用,攻克以无人自治系统为基础的智能装备全生命周期的高安全性、高可靠性、高实时性、高精确性等难题等。
\section{工业软件系统}
工业是推动科技创新、经济增长和社会稳定的重要力量。工业软件系统是指专用于或主要用于工业领域,为提高工业企业研发、制造、生产管理水平和工业管理性能的软件系统,包括嵌入式工业软件、协同集成类软件、生产控制类软件、生产管理类软件等四大类。工业系统利用信息技术将工业过程的控制逻辑化、管理流程代码化,从而驱动装备和管理业务按照既定的逻辑自动高效地运行,并实现预先设定的功能。工业软件系统的应用可以提高产品价值、降低企业成本进而提升企业的核心竞争力,是现代工业装备的大脑,也成为支撑第四次工业革命的核心。
云计算、物联网和人工智能正逐步成为影响工业软件发展的核心技术。工业互联网的底层是工业通信网络和传感器网络随着NB-IoT和智能传感器的快速发展CPS(信息物理融合系统)已成为新的热点。SaaS应用已经成为管理软件的发展方向但工业软件因其特殊性不适合采用公有云方式但可以通过混合云方式将企业敏感数据和业务环节进行剥离进而实现企业整体的数字化改造。基于大数据和机器学习的工业智能通过整合企业相关数据与人工智能算法实现数字驱动企业运营。
工业软件目前呈现如下的应用趋势1通过智能工厂项目建设提升数字化竞争力建设数字工厂的核心首先是完善的信息化规划其次是对各项信息化应用的有机集成2通过协同研发平台优化研发管理体系优化研发管理体系的核心在于数据和流程的标准化以及跨企业研发平台的建设思路3推广工业机器人在垂直行业的应用其核心在于对传统工艺的理解和改造4应用商业智能实现数据驱动企业发展在商业智能系统中实现全员统一查阅企业视图全面预测数据洞察驱动的业务流程最佳化形成统一的基础架构预先构建的分析解决方案演变成企业绩效管理系统。
\subsection{关键技术挑战}
工业物联网是第四次工业革命的核心基础设施,从软件系统的角度看,工业物联网特殊性体现在工业大数据上,其中包括工业信息化数据、机器设备数据和产业链跨界数据等,其中数据的采集环境多样,数据采集具有很高的准确性和实时性要求,并且大部分数据具有时序特性。工业软件系统在人机物融合应用场景下的主要挑战,来自于对上述四大类软件系统进行无缝集成的需求。具体挑战包括:
\begin{itemize}
\item 贯穿工业生产全过程的体系化的软件系统之系统:流程工业涉及多个方面,既涉及与企业价值相关的产品生产需求,又涉及原材料提取、传递及其通过物理、机械和/或化学方式转化成其他产品的过程。当工业生产的每个环节都配备传感和通信设备之后,为了实现智能制造,首先需要构建各个生产环节上的独立的信息系统和控制系统,比如生产管控系统、安全环保系统、供应链管理系统、能源管理系统、资产管理系统等。但如何汇聚这些独立的软件系统和物理设备,用统一的机制综合物流、能源流、资金流,形成工业生产全过程全方位的动态镜像,从而实现基于生产数据和管理数据多维度共享基础上的工业智能,不仅是软件技术和软件体系结构上的挑战,也是先进控制和管理上的挑战。
\item 工业控制系统的安全性和系统失效的风险性:一方面,相对独立的工业控制系统越来越多地与开放的管理系统互联,在实现数据共享、智能决策的同时,也为工业控制系统安全带来隐患与威胁。这类系统中的控制协议,大多在开始设计时只考虑如何能满足要求的效率、实用性和可靠性,而忽略了安全性要求。如何增强工控系统的控制协议的安全性,成为建立并实施一体化工业软件系统之系统的最大忧患。另一方面,工业系统中包含了成千上万的物理设备,这些设备很多具有很高的损耗率和失效率,而这些常常导致巨大事故,其系统设计时的风险分析、运行时的失效监测数据实时准确采集、以及精确的风险预测和溯源分析等等,对软件系统的设计和运行支撑都带来挑战。
\item 海量多维流数据的实时处理。工业软件系统需要面对的是超高的数据通量和低质乱序的传输同时需要满足的需求又是高质全序查询与复杂分析。只要系统处于运行态检测设备7天24小时不间断地产生数据数据采集频率高而且量大。软件系统需要管理千万条时间序列数据并以每秒百万至千万点的速度处理数据。更加困难的是这些数据基本都是异构的而且从异地采集的常常出现表头缺失、数据错列、数据缺失、数据串行等问题需要高效正确的纠错算法等等这些都是系统设计和运行时的挑战性问题。
\end{itemize}
\subsection{主要研究内容}
工业控制软件系统包括如下研究内容:
\begin{itemize}
\item 实时准确的信息感知和数据采集。流程工业生产过程优化调控和经营管理优化决策需要准确的信息,其难点是如何实现从原料供应、生产运行到产品销售全流程与全生命周期资源属性等的快速获取与信息集成。因此,原材料与产品属性的快速检测、物流流通轨迹的监测以及部分关键过程参量的在线检测是实现流程工业智能优化制造的前提和基础。
\item 生产运行监测和动态优化决策。流程生产计划的不确定因素众多,原料采购价格和市场需求多变,给生产运行和经营管理的决策带来难题。核心要解决如何深度融合市场和装置运行特性知识进行管理模式的变革,以大数据、知识型工作自动化为代表的现代信息技术为制造过程计划和管理的优化决策带来了契机。
\item 以软件为核心的生产全流程自动协同控制。流程工业制造采用由经济优化、计划调度、先进控制、基础控制等不同功能层组成的分层递阶结构,如何根据实际过程的动态实时运行情况,从全局出发协调系统各部分的操作,成为生产过程优化调控的核心。软件系统需要将物质转化机理与装置运行信息进行深度融合,建立过程价值链的表征关系,支持生产过程全流程的自动协同控制与优化。
\item 生产过程故障诊断与环境安全监测和预报。保证生产制造装备安全、可靠运行是保证生产制造全流程优化运行的关键,也是综合自动化系统正常运行的保证。需要软件系统集成传感、检测、控制以及溯源分析等技术,实现模型与数据驱动的流程工业过程运行工况的故障预报、诊断与自愈控制,以及生产制造全生命周期安全环境足迹监控与风险控制,实现绿色制造。
\item 高通量时序数据全生命周期管理、传输和利用。工业物联网的数据采集、管理和利用涉及跨越“云-网-端”三层体系架构,终端层需要支持高性能的写入、高压缩比的存储以及简单查询。场控层需要配备高效丰富的时间序列查询引擎。数据中心层需要能与大数据分析平台无缝集成,支持时序数据处理和挖掘分析。
\end{itemize}
\section{智慧城市系统}
智慧城市系统利用各种信息技术,将城市的系统和服务打通并集成,以提升资源运用的效率,优化城市管理和服务,以及改善市民生活质量。智慧城市系统是新一代信息技术在城市中广泛且深入应用的结果,其驱动力在于突破地域、部门或系统的边界,促进城市信息空间、物理空间和社会空间的深度融合,以此为基础向城市管理者提供城市规划管理的支持,并向市民提供泛在、周到的智能服务。智慧城市系统除了针对具体应用需求的应用系统外,还需要建立为这些应用系统提供共性支撑的基础支撑平台。在该平台的支撑下,具有不同功能的智慧应用系统,以及对智慧城市具有不同诉求和能力的组织和个人,密切协作,形成各展所长、相互支撑的共生生态系统。
\subsection{主要技术挑战}
智慧城市系统的主要技术挑战包括:
\begin{itemize}
\item 系统边界可伸缩,实现跨域信息系统互连互通。在城市信息化建设的初期,城市管理的各个部门独立开展信息化工作,建成了大批“孤岛系统”。建立智慧城市系统的首要挑战就是针对跨部门跨系统的应用场景,如何进行异构信息交换、系统间互操作以及协同问题求解。智慧城市系统的功能重点体现在信息服务上,系统边界体现为信息边界。通过软件定义把信息资源虚拟化,再通过软件系统对虚拟资源进行管理和调度,这是实现跨域信息系统互连互通的技术支撑,也是目前存在重要技术挑战。具体而言,其主要挑战在于,如何进行信息资源的虚拟化,以及如何在信息资源虚拟化的基础上,实现信息服务可编程,通过统一系统调用接口,访问信息资源提供的服务,实现信息资源的灵活管理、调度和更新,以满足对信息服务的多样需求。
\item 满足信息服务的准确一致性要求,提供可信的城市信息服务。智慧城市系统重在为用户提供准确、一致和可信的信息服务,信息服务可信性保障的挑战重点体现在,第一,保证信息服务中信息来源的可信性,比如如何根据信息服务需求,判断并评估需求相关的权威信息来源,并进行可靠的信息挖掘和抽取;第二,对需要推理产生的综合信息服务需求,需要有高置信度的信息源比对、推理和信息融合方法,以保证可以从多信息源中获得所需要的综合信息;第三,如何保证综合信息服务中信息的一致性,也是目前的重要挑战。
\item 满足信息服务时变性和场景相关性特征,实现及时个性化信息萃取和挖掘。智慧城市系统需要能满足不同用户不同场景的个性化信息服务需求,但其信息源海量、分布且动态变化,实现需求驱动的信息动态采集,进行场景相关的信息萃取和综合,并实现适时适地适用的信息服务,是智慧城市系统的重要挑战。
\end{itemize}
\subsection{主要研究内容}
智慧城市系统的主要研究内容包括:
\begin{itemize}
\item 城市信息资源互操作与管理。建立城市信息资源互操作与管理系统,一方面需要打破城市各孤岛系统的壁垒,建立数据共享开放、功能协同的机制;另一方面需要实现对城市各类信息资源的统一索引、授权、监控管理,促进基于语义的资源大规模共享与协同。
\item 城市知识萃取与演化。城市信息系统具有“智慧”的前提是必须掌握与城市相关的各种知识。既包括特定应用相关的专门知识的获取和管理,也包括智慧城市的基础支撑平台,以针对跨应用的共性城市知识建立统一的知识萃取与演化机制,为各类应用提供共性支撑,包括三方面能力:一是领域知识模型构造能力,将分散在信息系统和专家头脑中的知识集中抽象成统一知识模型并建立相应的知识库;二是领域知识模型演化能力,随着城市知识的演化更新知识模型,并保持知识库的一致性;三是知识可信性评估能力,从溯源、推理、传播、交叉验证等多种渠道,评估知识的可信性。
\item 群智城市信息感知和协同推荐。智慧城市系统应满足城市全方位感知和多样化信息服务需求,需要研究多人多组织参与的群智感知和服务定义。具体包括三个方面。第一,群智和移动群体城市感知。将持有智能手机在城市中移动的市民,视为是融合手机的感知、计算、通信能力和人类智能的“综合感知终端”,形成群智和移动群体城市感知网络;第二,构建基于“云-边-端”计算架构的智慧城市互连和协作架构,使能“综合感知终端”通过移动互联网,实现云平台支撑下的互联和协作,完成大规模、复杂城市感知任务。第三,群智智慧城市服务定义和推荐。面向智慧城市中信息服务应用的多样化、本地化、个性化的需求,促进人机交互和协作,在基于互联网的群智汇聚平台支撑下,研究信息服务的软件定义方法,实现大规模协同式信息服务的定义、设计和推荐,形成各展所长、相互支撑的共生生态系统。
\end{itemize}
\section{高性能CAE软件系统}
高性能计算机辅助工程高性能CAE泛指运用高性能计算机解决高端装备、重大工程和重要产品的全生命周期—设计、研制、生产和使用—中关键的科学和技术问题包括对功能、性能与安全可靠性进行计算、优化设计对其未来的工作状态和运行行为进行模拟仿真以期及早发现设计缺陷改进和优化设计方案证实工程/产品的可用性与可靠性。
高性能计算机辅助工程高性能CAE泛指采用计算机辅助手段解决高端装备、重大工程和重要产品的全生命周期设计、研制、生产和使用中关键的科学和技术问题包括对功能、性能与安全可靠性进行计算、优化设计对其工作状态和运行行为的模拟仿真目的是及早发现设计缺陷改进和优化设计方案证实工程/产品的可用性与可靠性。高性能CAE软件系统是高性能计算机辅助工程的载体是计算力学、计算数学、相关工程科学、工程管理学与计算机科学和技术相结合的产物是实现高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计的工程软件是支持工程科学家进行创新研究和工程师进行创新设计的最重要的工具和手段在提高装备/工程/产品的设计质量、降低研究开发成本、缩短开发周期等方面发挥重要的作用。
高性能CAE软件系统是高性能计算机辅助工程的载体是计算力学、计算数学、相关的工程科学、工程管理学与现代计算机科学和技术相结合的产物是一种综合性、知识密集型的信息产品是实现高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计的工程软件是支持工程科学家进行创新研究和工程师进行创新设计的最重要的工具和手段在提高装备/工程/产品的设计质量、降低研究开发成本、缩短开发周期等方面发挥重要的作用。
高性能CAE软件系统关系到国家创新驱动发展战略的实施成效是推动关重装备自主创新发展的核心载体是将装备向精细化设计转化的桥梁与纽带是重大工程实施、核反应堆设计与安全分析、航空发动机优化设计、飞行器优化设计、高端精密仪器装备、重大科学实验装置、复杂电磁环境与防护等关重装备/科学装置研制不可替代的研究手段。高性能CAE软件系统作为工程行业和制造企业信息化的主导技术智能制造的重要基础和核心支撑实现工程/产品创新的主要技术手段,对推动我国制造业转型升级、加快我国从制造大国向制造强国的转变、实现制造强国和高质量发展,具有重要意义。
高性能CAE软件系统关系到国家创新驱动发展战略的实施成效是推动关重装备自主创新发展的核心载体是将装备向精细化设计转化的桥梁与纽带是重大工程实施、核反应堆设计与安全分析、航空发动机优化设计、飞行器优化设计、高端精密仪器装备、重大科学实验装置、复杂电磁环境与防护等关重装备/科学装置研制不可替代的研究手段。高性能CAE软件系统也是工程行业和制造企业信息化的主导技术智能制造的重要基础和核心支撑实现工程/产品创新的主要技术手段,对推动我国制造业转型升级、加快我国从制造大国向制造强国的转变、实现制造强国和高质量发展,具有重要意义。
\subsection{参考功能特征}
高性能CAE软件系统在应用上具有广泛性和综合性比如应用于关重装备、核能开发、航空航天、汽车船舶、石油化工、土木建筑、电子制造等领域在研制上具有融合性和协作性是计算力学、计算数学、相关的工程科学、工程管理学与现代计算机科学和技术相结合而形成的一种综合性、知识密集型的信息产品需要工程应用人员、工程科学家、数学家和计算机科学家合作完成。其参考功能特征包括
\begin{itemize}
\item 大规模复杂几何结构的快速网格生成能力:能处理由众多具有高阶/间断曲面的零部件构造的、空间尺度跨度比大的复杂结构,实现大规模网格的快速生成;
\item 多学科耦合的复杂系统耦合求解能力:复杂的工程/产品大都是处在多物理场与多相多态介质非线性耦合状态下工作,其行为绝非是多个单一问题的简单迭加;
\item 多学科耦合的复杂系统耦合求解能力:复杂的工程/产品大都是处在多物理场与多相多态介质非线性耦合状态下工作,其行为绝非是多个单一问题的简单迭加;
\item 高效发挥高性能计算机计算效率的能力能够适应高性能计算机体系结构的复杂性高效利用其结点间高速互联、结点内众核异构、处理器内多层嵌套的体系结构特点实现深度并行特别要具有面向国产CPU性能优化的能力充分发挥国产芯片的计算性能。
\item 集成化、连贯性: 实现数值模拟流程的连贯性;实现多学科模拟集成,提高工程/产品开发整体流程的连贯性能够帮助用户选择分析流程和判断分析结果使CAE软件具有像``傻瓜''相机一样的一按即得的功效。
\end{itemize}
高性能CAE软件系统通常具有如下能力1大规模复杂几何结构的快速网格生成能力能够处理由众多具有高阶/间断曲面的零部件构造的、空间尺度跨度比大的复杂结构实现大规模网格的快速生成2多学科耦合的复杂系统耦合求解能力复杂的工程/产品大都是处在多物理场与多相多态介质非线性耦合状态下工作其行为绝非是多个单一问题的简单迭加3复杂物理现象的精准刻画和交互分析能力交互显示全机构/全场景复杂系统中的精细复杂的装置结构、极端物理条件下未知的复杂物理现象、几何结构与物理场以及多物理场间的难以解析描述的相互影响4高效发挥高性能计算机计算效率的能力能够适应高性能计算机体系结构的复杂性高效利用其结点间高速互联、结点内众核异构、处理器内多层嵌套的体系结构特点实现深度并行特别要具有面向国产CPU性能优化的能力充分发挥国产芯片的计算性能。5集成化、连贯性: 实现数值模拟流程的连贯性;实现多学科模拟集成,提高工程/产品开发整体流程的连贯性能够帮助用户选择分析流程和判断分析结果使CAE软件具有像“傻瓜”相机一样的一按即得的功效。
\subsection{关键技术挑战}
高性能CAE软件系统在应用上具有广泛性和综合性比如应用于关重装备、核能开发、航空航天、汽车船舶、石油化工、土木建筑、电子制造等领域在研制上具有融合性和协作性是计算力学、计算数学、相关的工程科学、工程管理学与现代计算机科学和技术相结合而形成的一种综合性、知识密集型的信息产品需要工程应用人员、工程科学家、数学家和计算机科学家合作完成。
要实现我国高性能CAE软件系统的自主可控和实际应用高产出必须体系化地实现以下几个飞跃1软件的计算能力与超级计算机硬件峰值性能同步提升实现数量级跨越2软件的置信度与科学建模水平同步提升多维度提高仿真置信度3超大规模模拟前后处理交互能力与工程设计建模精细化水平同步提升实现可交互操控的网格单元数的数量级跨越4CAE的基础理论、方法和科学数据的快速的集成和工程化能力的飞跃实现高性能CAE软件能力的跨越式发展5基于新兴技术的智能化、网络化和云化的新型服务模式实现随时随地的仿真模拟。
为了实现以上飞跃,从软件角度看,必须应对以下关键技术挑战:
\begin{itemize}
\item 突破效能瓶颈随着计算性能的不断提升高性能计算机的体系越来越庞大结构越来越复杂涉及到计算芯片、计算结点、网络互联、存储系统等诸多方面。高性能计算机体系结构上的每项变化都会给CAE软件对计算能力的发挥带来挑战需要在算法研究、应用优化、编程实现等方面进行重大调整使得数值模拟软件获得计算机峰值性能变得更加困难难以做到软件计算能力与计算机硬算力同步发展。当前多数自主CAE软件的计算能力严重滞后于超级计算机峰值性能。
\item 突破精度瓶颈:多可变形体、多相多态介质、多物理场、多尺度耦合分析,以及从材料到工程/产品设计一体化的仿真与优化分析在高性能CAE中普遍存在。在并行模拟仿真情境下数学物理方程解算算法的精度、多物理耦合解算过程中解算算法间耦合的精度以及解算算法与物理模型的匹配度决定了复杂体系科学建模的集成与转化能力是提升高性能CAE软件置信度的决定性因素。
\item 突破交互及其效率瓶颈高性能CAE软件要求人机交互界面直观、直觉和操作便捷。随着工程建模精细度的提高高性能CAE用户界面功能日趋繁杂工作流程的构建及操作日益繁琐同时离散网格和数据场规模持续增长导致人机交互响应速度减慢。这使得在使用高性能CAE软件开展仿真过程中大量时间和人力被花费在几何建模、网格生成和可视分析花费于前后处理的繁琐的参数调节以及漫长的交互响应等待影响了工程/产品的创新型设计和研发严重降低了高性能CAE软件的仿真产出。
\item 突破软件研发效率瓶颈自主高性能CAE软件的成功研制将依赖于工程建模、数值离散、并行计算和大规模前后处理等方向在基础理论、算法研究和软件开发等方面系统化的创新成果。作为一个多学科交叉的、综合性的知识密集型产品CAE软件由数百到数千个算法模块组成其数据库存放着众多的设计方案、标准构件行业性的标准、规范、判定设计和计算正确与否的知识性规则。以上原因导致高性能CAE软件体系结构复杂、代码量巨大、软件开发难度大。
\item 突破效能瓶颈随着计算性能的不断提升高性能计算机的体系越来越庞大结构越来越复杂涉及到计算芯片、计算结点、网络互联、存储系统等诸多方面。高性能计算机体系结构上的每项变化都会给CAE软件对计算能力的发挥带来挑战需要在算法研究、应用优化、编程实现等方面进行重大调整使得数值模拟软件获得计算机峰值性能变得更加困难难以做到软件计算能力与计算机硬算力同步发展。当前多数自主CAE软件的计算能力严重滞后于超级计算机峰值性能。
\item 突破精度瓶颈:多可变形体、多相多态介质、多物理场、多尺度耦合分析,以及从材料到工程/产品设计一体化的仿真与优化分析在高性能CAE中普遍存在。在并行模拟仿真情境下数学物理方程解算算法的精度、多物理耦合解算过程中解算算法间耦合的精度以及解算算法与物理模型的匹配度决定了复杂体系科学建模的集成与转化能力是提升高性能CAE软件置信度的决定性因素。
\item 突破交互及其效率瓶颈高性能CAE软件要求人机交互界面直观、直觉和操作便捷。随着工程建模精细度的提高高性能CAE用户界面功能日趋繁杂工作流程的构建及操作日益繁琐同时离散网格和数据场规模持续增长导致人机交互响应速度减慢。这使得在使用高性能CAE软件开展仿真过程中大量时间和人力被花费在几何建模、网格生成和可视分析花费于前后处理的繁琐的参数调节以及漫长的交互响应等待影响了工程/产品的创新型设计和研发严重降低了高性能CAE软件的仿真产出。
\item • 突破软件研发效率瓶颈自主高性能CAE软件的成功研制将依赖于工程建模、数值离散、并行计算和大规模前后处理等方向在基础理论、算法研究和软件开发等方面系统化的创新成果。作为一个多学科交叉的、综合性的知识密集型产品CAE软件由数百到数千个算法模块组成其数据库存放着众多的设计方案、标准构件行业性的标准、规范、判定设计和计算正确与否的知识性规则。以上原因导致高性能CAE软件体系结构复杂、代码量巨大、软件开发难度大。
\end{itemize}
\subsection{主要研究内容}
对高性能CAE软件系统而言其主要研究内容包括
\subsection{未来研究方向}
对高性能CAE软件系统而言其未来研究方向包括
\begin{itemize}
\item 匹配于高性能计算机硬件体系结构的高可扩展、可移植并行性能优化针对效能瓶颈结合国产高性能计算机硬件体系结构特征开展高并发情形下的数据通信、负载平衡、混合并行、深度并行、微处理器浮点运算性能优化等高性能计算共性基础研究支撑CAE软件的计算能力从当前串行、小规模并行向数千上万处理器核上的大规模并行跃迁为高性能CAE软件高效发挥国产高性能计算机的计算性能奠定基础。
\item 面向数学物理方程的高精度并行解算器:针对解算精度瓶颈,以实现复杂系统高效、高精度求解为目标,研究适应于并行求解环境的高精度/高效率解算算法、解算算法间高精度耦合并行算法设计实现解算算法易于集成的开放式架构和编程接口研究匹配于物理模型的解算算法智能选择机制提高高性能CAE软件的模拟置信度。
\item GUI界面的个性化定制针对交互瓶颈研发高性能CAE软件前后处理技术为精细化建模场景下大规模高质量网格快速生成、海量数据场的复杂物理规律交互展现奠定基础研发高性能CAE软件GUI定制技术实现GUI的个性化定制提高软件操控便捷性实现前后处理自动/半自动的使用方式,降低数值模拟整体时间开销,提高产出效率。
\item 高性能CAE软件系统快速研发新模式针对高性能CAE软件系统研发效率瓶颈研究既适用于基础/共性成果快速集成,又便于基础/共性成果快速专业化应用的高性能CAE软件研发新模式。提供载体将在突破效能瓶颈、精度瓶颈和交互瓶颈过程中形成的工程建模、数值离散、并行计算、前后处理的共性研究成果集成于其中。基于集成载体通过软件复用快速产出高性能CAE软件。高性能CAE软件的计算效能、计算精度和交互能力可通过复用共性并行计算技术、共性科学建模技术、共性前后处理技术来快速获得和提高。
\item 匹配于高性能计算机硬件体系结构的高可扩展、可移植并行性能优化针对效能瓶颈结合国产高性能计算机硬件体系结构特征开展高并发情形下的数据通信、负载平衡、混合并行、深度并行、微处理器浮点运算性能优化等高性能计算共性基础研究支撑CAE软件的计算能力从当前串行、小规模并行向数千上万处理器核上的大规模并行跃迁为高性能CAE软件高效发挥国产高性能计算机的计算性能奠定基础。
\item 面向数学物理方程的高精度并行解算器:针对解算精度瓶颈,以实现复杂系统高效、高精度求解为目标,研究适应于并行求解环境的高精度/高效率解算算法、解算算法间高精度耦合并行算法设计实现解算算法易于集成的开放式架构和编程接口研究匹配于物理模型的解算算法智能选择机制提高高性能CAE软件的模拟置信度。
\item GUI界面的个性化定制针对交互瓶颈研发高性能CAE软件前后处理技术为精细化建模场景下大规模高质量网格快速生成、海量数据场的复杂物理规律交互展现奠定基础研发高性能CAE软件GUI定制技术实现GUI的个性化定制提高软件操控便捷性实现前后处理自动/半自动的使用方式,降低数值模拟整体时间开销,提高产出效率。
\item 高性能CAE软件系统快速研发新模式针对高性能CAE软件系统研发效率瓶颈研究既适用于基础/共性成果快速集成,又便于基础/共性成果快速专业化应用的高性能CAE软件研发新模式。提供载体将在突破效能瓶颈、精度瓶颈和交互瓶颈过程中形成的工程建模、数值离散、并行计算、前后处理的共性研究成果集成于其中。基于集成载体通过软件复用快速产出高性能CAE软件。高性能CAE软件的计算效能、计算精度和交互能力可通过复用共性并行计算技术、共性科学建模技术、共性前后处理技术来快速获得和提高。
\end{itemize}
\section{本章小结}
本章涉及特定领域的软件系统提出了人机物融合应用的系统架构参考模式选择无人自治单体和群体系统、工业控制软件系统、智慧城市系统、高性能CAE软件系统四类特定领域的软件系统分别从其主要技术挑战和主要研究内容两个方面进行分析指出这个特定领域的软件系统在软件方法学上的挑战。
\section{本章小节}
本章涉及特定领域的软件系统,选择无人自治单体和群体系统、工业控制软件系统、智慧城市系统、和基础平台软件系统四类特定领域的软件系统,分别从其参加体系结构、主要技术挑战和未来研究方向等三个方面进行分析,目的是建立特定领域软件系统的参考示范,以及对软件学科发展的挑战。

View File

@ -1,54 +1,54 @@
% !TEX root = main.tex
软件学科是一门工程技术型学科,质量自从软件诞生之日起就是被关注的重点。软件质量\index{软件质量}和安全保障是通过相关技术和管理手段来检测、度量和评估软件制品符合预期的程度,并排除或容忍软件制品中不符合预期的因素,从而保障软件的实现和行为符合预期。经典的软件质量核心价值观强调“绝对正确”,涵盖了正确性、易用性、高效性、可靠性、鲁棒性、(易)理解性、维护性、复用性、移植性、测试性等一系列属性\cite{ISO9126},强调在客观证明基础之上形成对软件质量的客观认识。
软件质量自从软件诞生之日起就是被关注的重点。软件质量\index{软件质量}和安全保障是通过相关技术和管理手段来检测、度量和评估软件制品符合预期的程度,并排除或容忍软件制品中不符合预期的因素,从而保障软件的实现和行为符合预期。经典的软件质量核心价值观强调“绝对正确”,涵盖了功能性、可靠性、易用性、效率、维护性和可移植性等一系列质量属性\cite{ISO9126},强调在客观证据基础之上形成对软件质量的客观认识。
在“软件定义一切”的时代,一方面人机物融合应用场景使得软件的使能空间被进一步大幅度扩展,导致软件系统的规模和复杂性进一步增大,软件开发和演化的成本进一步上升;另一方面动态开放的运行环境使得安全性成为十分重要的质量属性,针对性的保障措施成为迫切需求;进一步,由于软件日益成为实现应用价值的核心载体,各类利益相关者的价值实现被纳入软件质量属性的范围,还需要考虑伦理、授权、法律等相关非技术因素。由于受到可投入成本的限制,人们越来越清楚地认识到在客观证明基础之上形成对软件质量的客观认识是现实达不到的理想目标,因而软件质量的核心价值观转变为强调“相对可信”,即在客观证据(包括部分客观证明)的基础上形成对软件质量的主观判断。
在“软件定义一切”的时代,一方面人机物融合应用场景使得软件的使能空间被进一步大幅度扩展,导致软件系统的规模和复杂性进一步增大,软件开发和演化的成本进一步上升;另一方面动态开放的运行环境使得安全性成为十分重要的质量属性,针对性的保障措施成为迫切需求;进一步,由于软件日益成为实现应用价值的核心载体,各类利益相关者的价值实现被纳入软件质量属性的范围,还需要考虑伦理、授权、法律等相关非技术因素。由于受到可投入成本的限制,“绝对正确”这一理想目标在现实情况下难以达到,因而软件质量的核心价值观转变为强调“相对可信”,即在客观证据基础上形成对软件质量的主观判断。度量与评估软件符合预期的程度一直是软件质量保障的基础性挑战问题,随着软件质量的核心价值观从“绝对正确”转变为“相对可信”,该基础性挑战问题的空间被进一步拓展。
在建立价值观的基础上要进一步建立各类软件质量保障措施,也即围绕各类软件质量关注点提供解决问题的方法和技术。从系统观与生态观的角度看,软件质量的考虑涉及更宽广的范畴。例如,从系统工程的角度看,如何在经济可行条件约束下通过综合集成的方法,用可担负质量的部件实现高质量的系统。又如,如何认识在软件生态系统中质量的依赖与传播规律;考虑到软件生态中各类利益相关者的价值差异和冲突,软件及其服务的质量如何取舍权衡等等。以上内容相关的质量保障措施值得进一步研究,但由于篇幅有限,本章主要关注以下更加迫切、更具挑战性的软件质量与安全保障问题。
随着软件质量的核心价值观从“绝对正确”转变为“相对可信”,度量与评估软件符合预期的程度成为软件质量保障的基础性挑战问题。随着人机物融合程度的加深,实时混成、云端融合、复杂异构、动态聚合、智能适应等非经典需求与应用场景层出不穷,软件系统设计、实现和运行过程中需要采用更具针对性的质量保障措施大规模复杂系统的安全保障变得更重要但又更困难,迫切需要新的技术突破;确保物联网软件安全上升到了国家安全高度,亟需系统深入的研究工作。特别地,数据驱动的智能软件日益成为一类重要的软件形态,不同于传统软件,这类软件基于概率化的归纳推理来实现智能行为,对各类不确定性的驾驭是其内在的要求,如何有效评估和保障这类智能软件系统与服务的质量也是亟待研究的问题。
在人机物融合计算环境下,实时混成、云端融合、复杂异构、动态聚合、智能适应等非经典需求与应用场景层出不穷,软件系统设计、实现和运行过程中需要采用更具针对性的质量保障措施大规模复杂系统的安全保障变得更重要但又更困难,迫切需要新的技术突破;确保物联网环境下软件安全上升到了国家安全高度,亟需系统深入的研究工作数据驱动的智能软件日益成为一类重要的软件形态,不同于传统软件,这类软件基于概率化的归纳推理来实现智能行为,对各类不确定性的驾驭是其内在的要求,如何有效评估和保障这类智能软件系统与服务的质量也是亟待研究的问题。
\section{重大挑战问题}
软件质量与安全保障面临的重大挑战问题主要集中以下几个方面:一是在人工智能时代,数据驱动的智能软件系统高度复杂的数据依赖、软件行为不确定性、计算结果鲁棒性方面,对软件质量提出了新的挑战;二是针对人机物融合场景下的规模化、定义化的软件系统,如何应对传统静态、封闭、开发阶段的可信度量、评估和增强带来的挑战,以支持软件系统的动态、开放、演化;三是如何针对大规模复杂软件系统和无处不在的物联网软件,有效检测漏洞或恶意软件等安全缺陷,并通过构建准确、高效的缺陷修复技术及漏洞防御机制保障安全。
在人机物融合的计算场景下,软件质量与安全保障面临的重大挑战问题主要集中以下几个方面:一是在人工智能时代,数据驱动的智能软件系统高度复杂的数据依赖、软件行为不确定性、计算结果鲁棒性方面,对软件质量提出了新的挑战;二是针对人机物融合场景下的大规模软件系统,拓展传统静态、封闭环境下的正确性、可靠性质量保障技术,支持动态、开放、演化环境下的可信质量保障;三是针对基础设施化软件系统,有效检测漏洞或恶意软件等安全缺陷,并通过构建准确、高效的缺陷修复技术及漏洞防御机制保障安全。
\subsection{数据驱动的智能软件系统质量保障}
越来越多的软件系统采用人工智能技术,基于大规模数据分析进行计算、推理及决策,即综合利用统计分析算法、数据处理、并行计算等技术,从海量、多态的数据中,挖掘知识、实现数据价值的最大化。与传统软件相比,数据驱动的智能软件系统在高度复杂的数据依赖、软件行为不确定性、计算结果鲁棒性方面,对质量保证研究提出了新的挑战\cite{sculley2015hidden}。随着数据驱动的智能软件系统越来越广泛地应用在工业生产、社会生活、金融经济、行政管理的方方面面,其可靠性、鲁棒性、安全性等问题如不能有效地加以防范,将造成重大损失甚至灾难性后果。
越来越多的软件系统采用人工智能技术,基于大规模数据分析进行计算、推理及决策,即综合利用统计分析算法、数据处理、并行计算等技术,从海量、多态的数据中,挖掘知识、实现数据价值的最大化。与传统软件相比,智能算法模型通常构建一些复杂变换(往往是高维非线性)实现智能处理,这种复杂运算给模型内部变换边界带来特定方向的不稳定性。智能软件系统最终得依赖外部物理设备运行,系统运行过程还受环境的精度等方面的资源约束。因此,数据驱动的智能软件系统在高度复杂的数据依赖、软件行为不确定性、计算结果鲁棒性方面,对质量保证研究提出了新的挑战\cite{sculley2015hidden}。随着数据驱动的智能软件系统越来越广泛地应用在工业生产、社会生活、金融经济、行政管理的方方面面,其可靠性、鲁棒性、安全性等方面问题如不能有效地加以防范,将造成重大损失甚至灾难性后果。
(1) 数据质量\index{数据质量}和模型质量\index{模型质量}成为瓶颈。数据驱动的智能软件系统中,往往以数据为核心,围绕数据的处理、分析、挖掘、学习等各种任务设计算法,被称为“面向数据编程”的模式。因此,与传统软件侧重“逻辑正确”不同,数据和模型的质量是数据驱动的智能软件系统可信性的基础和关键。一方面,数据的质量难以保证,噪音会严重干扰模型的有效性;另一方面,鉴于认知系统和认知过程的复杂性,模型有可能不完整、不精确、模型假设存在偏差,算法应具备一定的鲁棒性,不受模型中噪音的干扰,给出可信的决策结果,在数据分布特征等方面,训练数据集与实际应用或是预期的数据集可能存在不一致性,即数据集偏差、歧视、或是样本迁移问题,直接影响模型的可靠性。数据和模型的错误和失效,将造成智能算法判断和决策错误、软件失效。
(1) 数据质量\index{数据质量}和模型质量\index{模型质量}成为瓶颈。数据驱动的智能软件系统中,往往以数据为核心,围绕数据的处理、分析、挖掘、学习等各种任务设计算法,被称为“面向数据编程”的模式。因此,与传统软件侧重“逻辑正确”不同,数据和模型的质量是数据驱动的智能软件系统可信性的基础和关键。一方面,数据的质量难以保证,与传统关系型数据相比,大数据具有数据量大、实时分析要求高、存在多种异构数据格式、噪音高、关键数据元素持续演变等特点,数据质量是大数据分析正确和决策有效的根本保证,数据质量管理更加具有挑战性和迫切性;另一方面,鉴于认知系统和认知过程的复杂性,模型有可能不完整、不精确、模型假设存在偏差,噪音会严重干扰模型的有效性。算法需具备一定的鲁棒性,不受模型中噪音的干扰,给出可信的决策结果,在数据分布特征等方面,训练数据集与实际应用或是预期的数据集可能存在不一致性,即数据集偏差、歧视、或是样本迁移问题,直接影响模型的可靠性。数据和模型的错误和失效,将造成智能算法判断和决策错误、软件失效。
(2) 数据依赖严重且依赖关系复杂、多变,软件行为难以预测。数据驱动的智能软件系统数据、模型之间存在着错综复杂的依赖关系,这些依赖关系可能是隐形的、间接的、动态多变的。数据、模型依赖及其与代码之间的相互关联难以分析和维护,错误难以定位和隔离。相比于代码分析,数据、模型和代码之间依赖和追踪关系的研究还非常有限,尚缺乏有效的技术和工具。由于程序逻辑高度依赖于数据,并且算法对数据、模型的变化敏感,所以基于概率分析和动态学习的决策过程,使得软件行为具有很大的不确定性。
(3) 智能系统需具备运行时故障诊断、预测及自愈的能力。智能系统常常需要融合多种硬件设施、软件件,实时完成大规模数据的采集、综合、分析等处理,实现智能感知和智能决策。系统应用场景多样,功能组合繁多,输入空间难以穷尽,条件组合数量巨大;在实际运行中,软硬件环境等因素复杂多变,各种情况叠加在一起综合作用。离线测试阶段难以覆盖各种可能的场景。另一方面,系统常需要集成大量第三方的数据和软件,如深度学习与机器学习框架。在实际应用中,第三方服务的稳定性、可靠性、安全性以及不同来源的服务之间的兼容性、互操作性等问题,都给系统集成带来了巨大的挑战。因此,运行过程中及时发现和诊断乃至预测系统故障、及时修复故障或通过容错等机制保持系统正常运行,对于保证业务安全和系统高可用性至关重要。
(3) 智能系统需具备运行时故障诊断、预测及自愈的能力。智能系统常常需要融合多种硬件设施、软件件,实时完成大规模数据的采集、综合、分析等处理,实现智能感知和智能决策。系统应用场景多样,功能组合繁多,输入空间难以穷尽,条件组合数量巨大;在实际运行中,软硬件环境等因素复杂多变,各种情况叠加在一起综合作用。离线测试阶段难以覆盖各种可能的场景。另一方面,系统常需要集成大量第三方的数据和软件,如深度学习与机器学习框架。在实际应用中,第三方服务的稳定性、可靠性、安全性以及不同来源的服务之间的兼容性、互操作性等问题,都给系统集成带来了巨大的挑战。因此,运行过程中及时发现和诊断乃至预测系统故障、及时修复故障或通过容错等机制保持系统正常运行,对于保证业务安全和系统高可用性至关重要。
\subsection{人机物融合场景下的软件系统可信增强}
与传统系统不同,人机物融合场景下的软件系统将计算部件与物理环境进行一体化整合,将大量独立的异构设备(及其数据)进行智能化的连接,并针对当前系统、场景等的实时变化根据任务需求对计算逻辑,乃至软件体系结构进行自动调整与配置。这样,计算设备可以更精确获取外界信息并做出针对性、智能化的实时反映,从而提高计算的性能与质量,给出及时、精确并且安全可靠的服务,实现物理世界与信息系统的整合统一\cite{lee2006cyber}。显然,列车、电网、航天等典型安全攸关系统均具有鲜明的人机物融合特质。如何对相关系统的可信性进行保障对相关系统的正确运行具有重要意义。然而,在人机物融合的场景下,相关异构、组合、动态等特性也给系统行为可信保障带来了新的挑战与需求。
与传统系统不同,人机物融合场景下的软件系统将计算部件与物理环境进行一体化整合,将大量独立的异构设备(及其数据)进行智能化的连接,并针对当前系统、场景等的实时变化根据任务需求对计算逻辑,乃至软件体系结构进行自动调整与配置。这样,计算设备可以更精确获取外界信息并做出针对性、智能化的实时反映,从而提高计算的性能与质量,给出及时、精确并且安全可靠的服务,实现物理世界与信息系统的整合统一\cite{lee2006cyber}。显然,列车、电网、航天等典型安全攸关系统均具有鲜明的人机物融合特质。如何对相关系统的可信性进行保障对相关系统的正确运行具有重要意义。然而,在人机物融合的场景下,相关异构、组合、动态等特性也给系统行为可信保障带来了新的挑战与需求。
(1) 人机物融合场景下件间将进行频繁的通信、合作与协同,去完成复杂的任务。因此,相关系统是一个典型的组合系统。长期以来,对大规模组合系统进行分析、测试、验证一直是相关领域难点所在。此外,由于在人机物融合场景下不确定性、概率性行为、实时连续行为越来越常见。如何在建模阶段对随机、不确定、连续行为进行描述,并在分析中对相关行为进行研究,也是对相关复杂不确定系统进行可信增强的一个重要挑战。
(1) 人机物融合场景下件间将进行频繁的通信、合作与协同,去完成复杂的任务。因此,相关系统是一个典型的组合系统。长期以来,对大规模组合系统进行分析、测试、验证一直是相关领域难点所在。此外,由于在人机物融合场景下不确定性、概率性行为、实时连续行为越来越常见。如何在建模阶段对随机、不确定、连续行为进行描述,并在分析中对相关行为进行研究,也是对相关复杂不确定系统进行可信增强的一个重要挑战。
(2) 相较于一般静态可预测系统,人机物融合场景下系统行为更加强调于实时捕获、采集环境或者其他协作成员的运行时参数,从而进行自身策略,乃至件间拓扑结构的智能调整。在开放环境下,相关外界参数取值随时间变化,难以准确离线刻画。因此,从传统的静态测试、分析、验证等角度出发,难以遍历枚举相关开放动态行为中可能出现的所有场景,无法给出完整状态空间描述与安全保障。在此情况下,如何从运行时监控角度应对开放环境带来的连续动态行为是相关领域重要关注问题。
(2) 相较于一般静态可预测系统,人机物融合场景下系统行为更加强调于实时捕获、采集环境或者其他协作成员的运行时参数,从而进行自身策略,乃至件间拓扑结构的智能调整。在开放环境下,相关外界参数取值随时间变化,难以准确离线刻画。因此,从传统的静态测试、分析、验证等角度出发,难以遍历枚举相关开放动态行为中可能出现的所有场景,无法给出完整状态空间描述与安全保障。在此情况下,如何从运行时监控角度应对开放环境带来的连续动态行为是相关领域重要关注问题。
(3) 从系统观来认识人机物融合系统,我们会发现在人机物融合场景下,相关系统的多组件行为呈现出典型的分布式、异构式特征。在组件内部行为难以描述,组件间相互规格和工作方式差异巨大,难以整体把控的情况下,如何从体系结构角度对系统可信增强进行考虑,设计面向容错的新型协同设计方式及异构系统体系结构,为相关软件设计提出了新的挑战。
(3) 从系统观来认识人机物融合系统,我们会发现在人机物融合场景下,相关系统的多构件行为呈现出典型的分布式、异构式特征。在构件内部行为难以描述,构件间相互规格和工作方式差异巨大,难以整体把控的情况下,如何从体系结构角度对系统可信增强进行考虑,设计面向容错的新型协同设计方式及异构系统体系结构,为相关软件设计提出了新的挑战。
\subsection{大规模复杂系统安全缺陷检测}
现代软件系统因需求的快速迭代而增量构建、经过频繁重构和演化、规模庞大、复杂度高,都是典型的大规模复杂系统。他们在企业应用、城市交通、航空航天、智能电网、医疗、指挥控制等重要领域已经成为了不可或缺的一部分,但其实现中存在漏洞或恶意代码等安全缺陷,是导致大规模复杂系统安全性问题的主要根源;而要想保障其安全,需要即时检测并排除安全缺陷。但随着软件的规模和复杂性的不断增大,现有软件安全保障技术与工具的有效性和可扩展性受到了严重制约,软件安全缺陷检测和排除尚未改变以人为中心、侧重经验的实践现状,尚未能形成自动化、客观化的解决方案\cite{cousot2018program, zhang2019recent}。综上所述,软件安全保障所面临的新挑战主要包括:
(1) 安全缺陷统一建模。安全缺陷中,漏洞属于实现中存在遗漏,而恶意代码属于多余的实现。经过几十年的发展,已经公开了大量的安全缺陷,软件安全缺陷具有程序设计语言依赖、系统依赖等特征,有时还依赖于特定的硬件平台与体系结构,安全缺陷形态、机理各异。针对特定的安全缺陷,研究相应的检测方法进行精准制约化检测,虽在特定场景下可行,但已不能满足实际的安全需求。面临的挑战主要在于如何统一表达安全缺陷的语法、语义特征、触发规则、行为特征等问题,使得能够通过相关检测算法高效、精准识别安全缺陷;在此基础上,解决安全缺陷检测方法的平台化、引擎化、定制化,以便检测已有的重要安全缺陷,并具备扩展能力,检测新的安全缺陷。
(1) 安全缺陷统一建模。安全缺陷中,漏洞属于实现中存在遗漏,而恶意代码属于非预期的实现,安全缺陷一旦被攻击或利用,都能对软件系统带来危害。经过几十年的发展,已经公开了大量的安全缺陷,软件安全缺陷具有程序设计语言依赖、系统依赖等特征,有时还依赖于特定的硬件平台与体系结构,安全缺陷形态、机理各异。针对特定的安全缺陷,研究相应的检测方法进行精准制约化检测,虽在特定场景下可行,但已不能满足实际的安全需求。面临的挑战主要在于如何统一表达安全缺陷的语法、语义特征、触发规则、行为特征等问题,使得能够通过相关检测算法高效、精准识别安全缺陷;在此基础上,提升安全缺陷检测方法的可扩展能力,以便检测已有的重要安全缺陷,还能检测新的安全缺陷。
(2) 大规模复杂系统安全缺陷检测方法的效率和资源有效协同。根据已公开的安全缺陷特征通过静态分析、测试和验证等方法检测潜在安全缺陷是目前被普遍采用的技术。但随着软件系统规模越来越大、系统功能日趋复杂公开安全缺陷的数量也急剧上升安全缺陷检测方法的精准性和规模化能力是难点问题。面临的挑战主要包括1需要在处理大规模程序时平衡精度和可扩展性。高精度的检测方法需要更多的资源开销并且受到程序规模的制约而为了适应大规模程序的安全缺陷检测采用保守的策略会导致大量的误报且需要人工进一步确认从而降低了检测方法的可用性 2需要平衡协同计算资源的消耗与检测效率。安全缺陷检测方法可以提升精度但增加复杂度且需要更高的计算资源可以利用大数据处理、硬件加速、并行化等技术优化检测算法依据特定的规则将大规模代码进行切分将检测任务并行化处理、并将其分配到不同的计算资源上完成检测工作。
(3) 安全缺陷检测过程中大规模状态空间的充分探索。在安全缺陷检测过程需要尽快探索到目标程序的状态空间以检测潜在的安全缺陷由于复杂软件系统的程序状态空间十分庞大如何有效地探索程序的状态空间是需要解决的关键问题具体包括以下几个方面1程序分支和循环结构的深度覆盖通过探索程序状态空间过程中历史覆盖、缺陷检测、冗余等信息有效地制导探索过程尽早覆盖关键的程序状态空间2多维信息制导的模糊测试输入生成利用程序结构、安全缺陷特征、执行结果反馈等信息有效地制导模糊测试使其能够产生覆盖多样性目标的输入空间从而快速覆盖程序状态空间到达能够触发安全缺陷的程序行为路径。
(4) 历史漏洞机理和安全专家经验难以复用。在现有安全缺陷检测的分析和测试过程中,多个环节存在不确定性,仍需要安全专家人工进行决策。这些安全专家经验以及历史漏洞的机理信息对后续漏洞分析、检测、利用和修复工作能够起到很大作用。但遗憾的是,这些经验在现阶段难以实现高准确度的复用。然而,机器学习、深度学习等人工智能技术现已在文本翻译、图像处理、语音识别等方面得到广泛应用使其具备人的智能而实现自主决策。因此如何在安全缺陷检测和预警的各个环节中引入智能化技术是现阶段所面临的重要挑战具体包括以下两个方面1安全缺陷检测历史信息的智能化将安全缺陷检测历史信息及其统计特征知识化以便在安全缺陷检测过程中进行智能化预测将深度学习技术应用到安全缺陷检测样本代码相似度映射中以便实现同源安全缺陷检测和挖掘的智能化应用到输入域、程序结构的映射中实现模糊测试中输入生成的智能化2安全专家经验的知识化和智能化利用分析安全缺陷检测过程中的专家经验进而抽象其为安全缺陷检测的启发式规则以便在安全缺陷检测过程中根据自动搜索经验知识空间实现安全缺陷检测的智能化。
(4) 历史漏洞机理和安全专家经验难以复用。在现有安全缺陷检测的分析和测试过程中多个环节存在不确定性仍需要安全专家人工进行决策。这些安全专家经验以及历史漏洞的机理信息对后续漏洞分析、检测、利用和修复工作能够起到很大作用。但遗憾的是这些经验在现阶段难以实现高准确度的复用。然而人工智能技术现已在文本翻译、图像处理、语音识别等方面得到广泛应用使其具备人的智能而实现自主决策。因此如何在安全缺陷检测和预警的各个环节中引入智能化技术是现阶段所面临的重要挑战具体包括以下两个方面1安全缺陷检测历史信息的智能化将安全缺陷检测历史信息及其统计特征知识化以便在安全缺陷检测过程中进行智能化预测将深度学习技术应用到安全缺陷检测样本代码相似度映射中以便实现同源安全缺陷检测和挖掘的智能化应用到输入域、程序结构的映射中实现模糊测试中输入生成的智能化2安全专家经验的知识化和智能化利用分析安全缺陷检测过程中的专家经验进而抽象其为安全缺陷检测的启发式规则以便在安全缺陷检测过程中根据自动搜索经验知识空间实现安全缺陷检测的智能化。
(5) 面向安全保障的缺陷自动修复与验证。及时修复软件中存在的安全缺陷是保障软件安全的主要手段现阶段主要依靠人工修复软件安全缺陷需要花费大量的时间精力阅读理解程序代码、定位安全缺陷并修复非常耗时耗力。面临的挑战主要在于1如何针对安全缺陷实现自动修复。基于遗传算法、程序搜索、程序合成等手段的软件缺陷的自动修复方法面临在实际系统中应用的可扩展性、可用性等方面的挑战。2如何自动验证修复。目前存在一些修复方法在某些实验途径上可以证实有效性但缺少理论基础无法保障其完备性需要有手段保证安全缺陷修复措施符合预期。
\subsection{物联网软件安全保障}
\subsection{物联网环境下基础设施类软件安全保障}
物联网是移动互联网\index{移动互联网}、云计算\index{云计算}、大数据技术和人工智能等新一代信息技术,在人类社会的具体应用领域中,通过人机物融合实现计算、信息、通讯、控制等任务的一体化的产物。物联网软件是其核心使能组成部分,也是软件产业的一个新兴领域。物联网高速发展的同时,也带来新的问题,特别是物理设备实现移动互联后,导致所有物联网终端设备直接暴露在互联网上、处于不安全状态,使得设备自身安全、其拥有和传输的数据的机密性、完整性和可获得性,都面临安全挑战。任一物联网终端软件一旦遭受攻击,将会导致软件崩溃、设备失效、威胁用户隐私、冲击关键信息基础设施等安全事故,对整个物联网系统造成严重的破坏性\cite{ammar2018internet, brumley2008automatic}。但现阶段,全面保障物联网软件与系统安全,需要检测物联网软件的所有潜在安全薄弱环节,实施有针对性的保障措施。但由于物联网软件的复杂性、异构性、人机物融合等特性,仍然需要重点解决如下重大挑战问题:
物联网作为新一代信息技术,通过软件定义、人机物融合实现计算、信息、通讯、控制等任务的一体化,软件是其核心使能、基础设施类组成部分。物联网高速发展的同时,也带来新的问题,特别是物理设备实现移动互联后,导致所有物联网终端设备直接暴露在互联网上、处于不安全状态,使得设备自身安全、其拥有和传输的数据的机密性、完整性和可获得性,都面临安全挑战。任一物联网终端软件一旦遭受攻击,将会导致软件崩溃、设备失效、威胁用户隐私、冲击关键信息基础设施等安全事故,对整个物联网系统造成严重的破坏性\cite{ammar2018internet, brumley2008automatic}。但现阶段,全面保障物联网软件与系统安全,需要检测物联网软件的所有潜在安全薄弱环节,实施有针对性的保障措施。但由于物联网软件的复杂性、异构性、人机物融合等特性,仍然需要重点解决如下重大挑战问题:
(1) 面向复杂异构物联网终端控制软件的安全缺陷检测。物联网系统的使能部件是软件,而这类驱动物联网系统工作的核心软件,如果存在安全缺陷,包括漏洞、恶意软件,容易被攻击利用,在安全关键场景下会带来严重的后果,如何能够及时检测这类安全漏洞是关注的焦点。在复杂物联网系统中,计算、通信和控制设备由于其各自所执行的任务不同,往往由完全不同的软硬件构成,同时不同设备间的相互协作关系也由于系统的庞大而变得十分复杂,有时还可能存在动态变化,这导致对复杂物联网系统中异构的终端设备控制软件进行安全性检测变得异常困难。如何改进现有的静态分析与动态测试技术以适应物联网软件依赖的芯片、硬件外设、操作系统、指令集、外部库、交互接口、外部输入等异构性,是面向复杂异构物联网终端软件进行安全缺陷检测亟需解决的关键问题。
(2) 面向完整物联网软件系统的模糊测试\index{模糊测试}。物联网边界模糊、设备异构,物联网软件实现了控制、计算与通信的集成,使其在处理能力不断强大的同时,内部结构也变得愈加庞杂且与外部世界的交互变得愈加频繁,而现有的模糊测试方法主要针对物联网软件系统自身故障进行安全检测,面临的挑战在于如何针对物联网系统与环境,探索使用基于人工智能技术、深度学习方法,构建智能化模糊测试方法,将物联网状态空间中搜索安全缺陷的问题转化为目标制导模糊测试与优化问题。
(2) 面向完整物联网软件系统的模糊测试\index{模糊测试}。物联网边界模糊、设备异构,物联网软件实现了控制、计算与通信的集成,使其在处理能力不断强大的同时,内部结构也变得愈加庞杂且与外部世界的交互变得愈加频繁,而现有的模糊测试方法主要针对物联网软件系统自身故障进行安全检测,面临的挑战在于如何针对物联网系统与环境,探索使用基于人工智能技术,构建智能化模糊测试方法,将物联网状态空间中搜索安全缺陷的问题转化为目标制导模糊测试与优化问题。
(3) 面向动态安全检测的物联网软件仿真\index{软件仿真}与虚拟化技术。现有物联网软件测试需要互联网环境支撑、动态执行设备并依据获取的运行时反馈信息进行分析使得运行时安全检测面临驱动设备运行困难、捕获设备反馈困难、识别安全缺陷困难等问题具体包括1物联网软件仿真技术。由于物联网软件依赖的终端硬件、体系结构、指令集、部署配置的多样性如何在支持相应固件体系结构、指令集的模拟器的基础上构建通用仿真执行支撑环境如何针对基于特定外设基于适配接口构建物理设备运行驱动环境从而实现能对典型设备进行运行驱动的支撑如何利用通用仿真环境和物理环境的支撑捕获运行时的物理设备的状态、仿真环境下覆盖等反馈信息便于安全缺陷检测过程。 2物联网系统环境建模与虚拟化技术物联网软件需要通过外设、互联网接口与外界交互如何基于各类网络协议对多类交互输入接口进行虚拟化和数字化的基础上统一建模对物联网运行依赖的系统软件平台进行虚拟化建模与支撑。
@ -64,24 +64,25 @@
\end{figure*}
\subsection{软件预期的外延扩展和符合性评估}
由于软件在社会生活中的作用发生根本性变化,作为软件质量与安全保障的依据,软件预期不能局限于传统的用户需求和领域标准,需要分析国际、国家软件质量和安全相关的标准,针对软件体现的人类价值观,研究软件价值要素和反映软件价值要素的软件质量属性,在此基础上研究新型软件质量和安全模型,制定或更新基于软件价值的质量、安全和可信标准;研究软件价值的度量与评估,在此基础上研究质量评估、安全评估、可信评估、标准符合性评估手段;还需要考虑公开缺陷/漏洞库/恶意软件库、软件伦理\index{软件伦理}、软件公平性\index{软件公平性}、软件授权\index{软件授权}、软件立法等社会生活中的非技术因素基于ACM/IEEE软件工程职业伦理规范研究适合我国国情的软件从业人员的职业伦理规范,基于在国家法律法规及重要领域软件应用研究特定领域软件立法基于GPL、APL等国际通行的开源软件授权规定研究适合我国软件产业发展状况的授权法则,在此基础上,需要研究相应的标准、伦理、授权法则、法律等符合性检测、度量和评估技术。
由于软件在社会生活中的作用发生根本性变化,作为软件质量与安全保障的依据,软件预期不能局限于传统的用户需求和领域标准,需要分析国际、国家软件质量和安全相关的标准,针对软件体现的人类价值观,研究软件价值要素和反映软件价值要素的软件质量属性,在此基础上研究新型软件质量和安全模型,制定或更新基于软件价值的质量、安全和可信标准;研究软件价值的度量与评估,在此基础上研究质量评估、安全评估、可信评估、标准符合性评估手段;还需要考虑公开缺陷/漏洞库/恶意软件库、软件伦理\index{软件伦理}、软件公平性\index{软件公平性}、软件授权\index{软件授权}、软件立法等社会生活中的非技术因素基于ACM/IEEE软件工程职业伦理规范研究适合软件从业人员的职业伦理规范基于法律法规及重要领域软件应用研究特定领域软件立法基于GPL、APL等国际通行的开源软件授权规定研究适合未来软件产业发展状况的授权法则,在此基础上,需要研究相应的标准、伦理、授权法则、法律等符合性检测、度量和评估技术。
\subsection{开放空间下的缺陷分析与漏洞挖掘技术}
由于软件自身的发展、开源软件的大量使用,软件系统的规模和复杂度大幅度提升,运行软件的平台不断变迁、软件自身的形态不断变化,而且,互联网和移动互联网使得运行在封闭空间的软件系统暴露到开放空间,面向缺陷检测,需要研究分析、测试、验证、仿真、监控、审查等检测技术的能力提升和可扩展性途径。为提升大规模软件缺陷检测的精度,需要考虑研究采用符号执行技术、抽象解释技术等,提升缺陷检测的精度以减少误报或漏报;针对新型软件方法学、新的软件形态,需要基于形式化方法、模型驱动方法,研究相应的缺陷检测、修复和容错方法;需要研究如何利用人工智能技术、虚拟化技术、大数据处理技术、并行化技术等支撑技术,利用数据、硬件等资源,提升和优化软件质量和安全保障技术。
面向开放空间下,大规模、复杂软件系统的缺陷检测,需要研究提升现有软件分析、测试、验证、仿真、监控、审查等检测技术的精度、效率和可扩展性。需要考虑研究采用符号执行技术、抽象解释技术等,提升缺陷检测的精度以减少误报或漏报;针对新型软件方法学、新的软件形态,需要基于形式化方法、模型驱动方法,研究相应的缺陷检测、修复和容错方法;需要研究如何利用人工智能技术、虚拟化技术、大数据处理技术、并行化技术等支撑技术,利用数据、硬件等资源,提升和优化软件质量和安全保障技术的效率
针对基于开源软件和代码托管平台的复杂、开放、规模大和分布式软件生态系统,充分利用软件生态系统中多种形态的数据(如代码、代码提交日志、程序频谱、文档、历史缺陷数据和开发者数据等),多种形态数据的关联和影响、项目间的依赖关系和数据流动,研究跨项目缺陷检测。
\subsection{系统动态行为监控与容错}
针对系统动态行为,以监控属性和监控设计模型为基础,对复杂状态空间进行快速、准确的计算和分析,结合运行时验证、故障诊断与隔离等技术,研究相关系统行为的实时、高效、主动监控方法。另一方面研究行为预测与控制生成技术,基于运行状态对系统后续状态空间进行预测,研究针对潜在故障的容错方法与技术,在可能发生故障前,进行实时控制生成,对系统运行进行干涉,以避免故障的发生,确保系统的行为符合预期。
\subsection{数据治理技术}
\subsection{数据及智能模型的质量分析与评估}
与传统关系型数据相比,大数据具有数据量大、实时分析要求高、存在多种异构数据格式、噪音高、关键数据元素持续演变等特点,数据质量是大数据分析正确和决策有效的根本保证,数据质量管理更加具有挑战性和迫切性。因而,需要研究数据治理技术,形成高效的数据管理工具,保证数据在全生命周期内正确、规范、安全、符合系统要求,有助于高质量的知识挖掘和利用。
在数据质量保障方面主要研究1数据质量模型及度量方法如准确性、规范性、完整性、一致性、时效性等2以高质量的知识挖掘和利用为目标研究数据质量的改进和优化方法与技术3研究在数据采集、分析、利用、演化的生命周期过程中持续的质量监控和管理方法与技术形成高效的数据管理工具。。
在智能模型的质量保障方面主要研究1有效的监测体系以及检测方法、技术与工具能及时、有效地发现数据集偏差、歧视及样本迁移等问题2针对数据集偏差、歧视及样本迁移等问题高效鲁棒的模型及算法设计3智能系统的鲁棒性、安全性、稳定性分析有效识别和评估智能应用中的风险。
\subsection{智能模型的质量与安全保障}
\subsection{智能系统测试}
针对数据集偏差、歧视及样本迁移等问题,一方面需要提高机器学习算法设计的鲁棒性;另一方面更需要在系统层面上构建一套监测体系来时刻发现数据偏差、歧视和样本迁移问题。在构建这套检测体系时,需要考虑两个维度,一是需要保证检测的高效性和及时性;二是需要保证检测的有效性,要能很好的度量数据分布。分析智能学习算法及其开发框架设计,检测鲁棒性、安全性、稳定性等各方面问题,并评估其在智能应用中的风险。探索有效的智能软件测试和质量评估方法。当前对于智能软件的质量评估主要是机器学习算法精度的度量标准,评估并引导智能软件在人工标注的数据集上得到较好的结果,但是却无法评估智能软件在面对恶意攻击的稳定性
智能系统测试在深入分析智能软件系统的故障模型、缺陷触发和传播机理的基础上,从数据驱动、复杂场景建模、人机物复杂运行环境模拟等几个方面开展相关研究。研究数据分布多样性、数据语义一致性、数据边界稳定性、数据精度适应性等特征数据测试;研究分布式、高并发、多种事件触发机制、复杂规则执行等特征场景测试;研究开放环境、动态交互协同、高度不确定性行为为典型特征的复杂环境测试;研究智能系统应用场景模拟、故障注入、数据及用例的基准测试集等测试工具及测试平台的构建
\subsection{安全缺陷检测、定位、修复和预警}
@ -89,9 +90,9 @@
分析漏洞成因,基于人工进行漏洞修复经验和知识,研究漏洞代码的自动化定位、漏洞代码上下文智能切片和基于上下文的代码逻辑修正等技术,结合智能化方法,构建智能化漏洞修复技术,保障漏洞修复的准确性和及时性。
基于恶意代码的静态结构和动态行为特征及其演化,通过在静态分析中引入人工智能技术,模拟安全专家“手工”检测和识别恶意代码的流程,构建恶意特征集作为训练集,训练智能化恶意代码检测模型,从而快速、准确地实现对恶意特征的识别和判断、对恶意行为的自动化验证。
\subsection{物联网软件的测试技术}
\subsection{物联网环境下的测试技术}
物联网软件存在的安全缺陷可能存在潜在的风险,其自身结构特性和环境依赖给软件测试带来新的问题。需要研究物联网软件建模、模型驱动测试与验证方法;研究针对物联网软件的静态分析和符号执行技术,支持典型安全缺陷的检测;研究面向物联网的智能模糊测试技术,用物联网软件结构、行为模型有效制导模糊测试,生成能够覆盖物联网软件输入域、结构和行为场景的测试输入,利用机器学习、深度学习等人工智能技术,基于对物联网软件结构与行为、物联网软件安全缺陷、模糊测试历史等知识和经验的学习,构建并训练映射模型,预测输入域与状态空间区域的映射关系,通过使用遗传算法、人为指定漏洞关联重点区域,优化模糊测试制导算法,避免无效、冗余的测试用例生成,在资源有限的情况下充分有效地遍历重要的状态空间尽早发现漏洞。
物联网环境下软件存在的安全缺陷可能存在潜在的风险,其自身结构特性和环境依赖给软件测试带来新的问题。需要研究软件建模、模型驱动测试与验证方法;研究针对软件的静态分析和符号执行技术,支持典型安全缺陷的检测检测;研究面向物联网环境的智能模糊测试技术,用软件结构、行为模型有效制导模糊测试,生成能够覆盖软件输入域、结构和行为场景的测试输入,利用人工智能技术,基于对软件结构与行为、软件安全缺陷、模糊测试历史等知识和经验的学习,构建并训练映射模型,预测输入域与状态空间区域的映射关系,通过使用遗传算法、人为指定漏洞关联重点区域,优化模糊测试制导算法,避免无效、冗余的测试用例生成,在资源有限的情况下充分有效地遍历重要的状态空间尽早发现漏洞。
\subsection{过程改进与预防式软件质量保障}

View File

@ -1,5 +1,4 @@
% !TEX root = main.tex
\section{引言}
“人-机-物”三元融合的新型应用模式, 通过综合应用物联网、移动互联网、通信、大数据计算、人工智能等技术,使人类社会(人)、信息空间(机)、物理世界(物)之间实现互联,形成以人为中心的新社会形态\cite{赵兰香等主编2013科技发展新态势与面向}。其中,软件是关键要素;而围绕软件的各类元素之间也存在着复杂的依赖关系,并最终形成了软件生态。软件生态\index{软件生态}是指各类软件制品(包括开发态和运行态)、软件涉众(包括开发者、使用者和维护者等)和软件设施(包括承载软件制品开发与运行的物理设施及其作用的物理设施),围绕软件相关的各种活动(包括开发、使用、服务、维护、演化等),形成的相互依赖和相互作用的网络系统,如图\ref{fig:fig1}所示。随着互联网的发展和软件技术的发展,这些依赖关系使得软件制品越来越依赖于其所存在的软件生态,逐渐推动软件生态化,成为软件产业的未来发展趋势。

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 173 KiB

BIN
fig1-2/2-4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 KiB

After

Width:  |  Height:  |  Size: 190 KiB

BIN
fig2-7/auto.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
fig2-7/city.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

BIN
fig2-7/industry.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
fig2-7/stars.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

View File

@ -11,6 +11,27 @@ doi={10.1109/MC.2006.58},
ISSN={1558-0814},
month={Feb},}
@article{cpss10wang,
author = {Wang, Fei-Yue},
title = {The Emergence of Intelligent Enterprises: From CPS to CPSS},
journal = {IEEE Intelligent Systems},
issue_date = {July 2010},
volume = {25},
number = {4},
month = jul,
year = {2010},
issn = {1541-1672},
pages = {85--88},
numpages = {4},
url = {https://doi.org/10.1109/MIS.2010.104},
doi = {10.1109/MIS.2010.104},
acmid = {1845858},
publisher = {IEEE Educational Activities Department},
address = {Piscataway, NJ, USA},
keywords = {cyber-physical-social systems, cyberphycial systems, intelligent systems},
}
@book{Booch:1999:UML:291167,
author = {Booch, Grady and Rumbaugh, James and Jacobson, Ivar},
@ -612,6 +633,15 @@ year = {2018},
}
@article{SciAme91,
author = {M. Weiser},
title = {The computer for the 21st century},
journal = {Scientific American},
pages = {94-105},
volume = {265},
number = {3},
year = {1991},
}
@book{Naur:1969:SER:1102020,
editor = {Naur, Peter and Randell, Brian},
@ -934,6 +964,27 @@ year = {1937}
year={1999},
}
@article{jos19dongcha,
title={系统软件新洞察},
author={王怀民 and 毛晓光 and 丁博 and 沈洁 and 罗磊 and 任怡},
journal={软件学报},
volume={30},
number={1},
pages={22-32},
year={2019},
}
@article{jos19ma,
title={软件开发方法发展回顾与展望},
author={马晓星 and 刘譞哲 and 谢冰 and 余萍 and 张天 and 卜磊 and 李宣东},
journal={软件学报},
volume={30},
number={1},
pages={3-21},
year={2019},
}
@article{梅宏2009软件分析技术进展,
title={软件分析技术进展},
@ -974,7 +1025,31 @@ year = {1937}
year={1976},
publisher={IEEE}
}
@article{computer13human,
author = {Gunar Schirner and
Deniz Erdogmus and
Kaushik R. Chowdhury and
Taskin Padir},
title = {The Future of Human-in-the-Loop Cyber-Physical Systems},
journal = {{IEEE} Computer},
volume = {46},
number = {1},
pages = {36--45},
year = {2013},
}
@article{tse86ood,
title={Object-oriented development},
author={Grady Booch},
journal={IEEE Transactions on Software Engineering},
volume={SE-12},
number={2},
pages={211-221},
year={1986},
publisher={IEEE}
}
@inproceedings{xanthakis1992application,
title={Application of genetic algorithms to software testing},
@ -1096,21 +1171,15 @@ year = {1937}
publisher={Springer}
}
@article{cccf15,
title={从软件研究者的视角认识“软件定义”},
author={梅宏 and 黄罡 and 曹东刚等},
journal={中国计算机学会通讯},
volume={11},
number={1},
pages={68-72},
year={2015},
}
@inproceedings{Liskov:1974:PAD:800233.807045,
author = {Liskov, Barbara and Zilles, Stephen},
@ -2519,6 +2588,25 @@ author = {CIO Staff}
pages={51},
year={2019}
}
@inproceedings{SIGCSE07CompThinking,
author = {Henderson, Peter B. and Cortina, Thomas J. and Wing, Jeannette M.},
title = {Computational Thinking},
booktitle = {Proceedings of the 38th SIGCSE Technical Symposium on Computer Science Education},
series = {SIGCSE '07},
year = {2007},
isbn = {1-59593-361-1},
location = {Covington, Kentucky, USA},
pages = {195--196},
numpages = {2},
url = {http://doi.acm.org/10.1145/1227310.1227378},
doi = {10.1145/1227310.1227378},
acmid = {1227378},
publisher = {ACM},
address = {New York, NY, USA},
keywords = {computational thinking},
}
@article{wing2014computational,
title={Computational thinking benefits society},
author={Wing, Jeannette M},
@ -3219,3 +3307,14 @@ author = {CIO Staff}
year={2016}
}
@article{mei2006abc,
title={一种以软件体系结构为中心的网构软件开发方法},
author={梅宏 and 黄罡 and 赵海燕 and 焦文品},
journal={中国科学(E辑)},
volume={36},
number={10},
pages={1100--1126},
year={2006}
}

98
reflib.bib Normal file
View File

@ -0,0 +1,98 @@
@article{aihua2017fast,
title={加快发展和建设新工科 主动适应和引领新经济},
author={吴爱华,侯永峰,杨秋波和郝杰},
journal={高等工程教育研究},
number={1},
pages={1--9},
year={2017}
}
@article{hong2018everything,
title={万物皆可互联, 一切均可编程},
author={梅宏},
journal={方圆},
number={12},
pages={24},
year={2018}
}
@article{huaiming2014complex,
title={复杂软件系统的成长性构造与适应性演化},
author={王怀民,吴文峻,毛新军,丁博,郭长国和李未},
journal={中国科学: 信息科学},
volume={44},
number={6},
pages={743--761},
year={2014}
}
@article{hong2017opensource,
title={开源对软件人才培养带来的挑战},
author={梅宏和周明辉},
journal={计算机教育},
number={1},
pages={2--5},
year={2017}
}
@article{bandyopadhyay2016ict,
title={ICT in Education: Open Source Software and its Impact on Teachers and Students},
author={Bandyopadhyay, Soma and Thakur, SS},
journal={International Journal of Computer Applications},
volume={151},
number={6},
year={2016},
publisher={Foundation of Computer Science}
}
@article{borque2014swebok,
title={SWEBOK v3. 0: Guide to the software engineering body of knowledge},
author={Borque, P and Fairley, RE},
journal={USA: IEEE},
year={2014}
}
@article{computerEducation,
title={计算机教育与可持续竞争力},
author={“计算机教育20人论坛”编写组},
journal={高等教育出版社},
year={2019}
}
@article{xiaoming2019older,
title={“老年编程”的畅想},
author={李晓明},
journal={计算机学会通讯},
volume={15},
number={5},
pages={51},
year={2019}
}
@article{wing2014computational,
title={Computational thinking benefits society},
author={Wing, Jeannette M},
journal={40th Anniversary Blog of Social Issues in Computing},
volume={2014},
year={2014}
}
@article{grover20185th,
title={The 5th Cof 21st century skills},
author={Grover, S},
journal={Try computational thinking (not coding).(March 13). Retrieved from EdSurge News: https://www. edsurge. com/news/2018-02-25-the-5th-c-of-21st-century-skills-try-computational-thinking-not-coding},
year={2018}
}
@article{sommerville2012large,
title={Large-Scale Complex IT Systems},
author={SOMMERVILLE, Ian and CLIFF, Dave and CALINESCU, Radu and KEEN, Justin and KELLY, Tim and KWIATKOWSKA, Marta and MCDERMID, John and PAIGE, Richard},
journal={Communications of the ACM},
volume={55},
number={7},
pages={71--77},
year={2012},
publisher={Association for Computing Machinery}
}
@techreport{northrop2006ultra,
title={Ultra-large-scale systems: The software challenge of the future},
author={Northrop, Linda and Feiler, Peter and Gabriel, Richard P and Goodenough, John and Linger, Rick and Longstaff, Tom and Kazman, Rick and Klein, Mark and Schmidt, Douglas and Sullivan, Kevin and others},
year={2006},
institution={CARNEGIE-MELLON UNIV PITTSBURGH PA SOFTWARE ENGINEERING INST}
}
@article{xinjun2019software,
title={软工程实践教程: 基于开源和群智的方法},
author={毛新军,王涛和余跃},
journal={高等教育出版社},
year={2019}
}