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