logo

中国学科发展战略·软件科学与工程

作者:
软件是信息系统的灵魂,是世界数字化的直接产物、自动化的现代途径、智能化的逻辑载体。时至今日,小到一个智能传感器、一块智能手表,大到一座智慧城市、一张智能电网,无不依赖于软件系统的驱动与驾驭。软件已经成为信息化社会不可或缺的基础设施。软件重塑了从休闲娱乐、人际交往到生产生活、国计民生等社会经济的方方面面,“软件定义一切”日益成为一种现实。高效地构建和运用高质量软件系统的能力成为国家和社会发展的一种核心竞争力。
软件是定义计算的逻辑制品,其实质是以计算为核心手段实现应用目标的解决方案。因此,软件科学与工程学科(简称软件学科)本质上是一门具有高度综合性的方法论学科。七十多年的发展历史表明,软件学科具有独特的发展规律,其内涵与外延随着计算平台与应用范围的不断拓展而迅速发展。当前,随着物联网、云计算、大数据和人工智能应用的进一步发展,软件及软件学科面临着前所未有的系统复杂性和可信性要求的重大挑战,也孕育着新的科学和技术变革的重大机遇。本书回顾和总结软件学科的发展历程与发展规律,进而针对人机物三元融合、“软件定义一切”的发展趋势,展望学科发展的关键问题和重要研究方向,并给出学科领域未来发展的政策建议。
  第一节 软件与软件学科
一、软件
软件因可编程通用计算机的发明而生,人们通常将软件理解为计算机系统中与硬件相对的部分,包括程序及其文档,以及相关的数据。在软件的存在形式之上,究其所表达和实现的实质内容,软件是以计算为核心手段实现应用目标的解决方案。
不同于一般物品,软件是一种人工制品,同时也是一种纯粹的逻辑制品。作为一种人工制品,软件需要以适应其所处环境的方式完成应用目标;作为逻辑制品,软件开发的困难不在于物理限制而在于逻辑构造。因此,软件开发活动在本质上不同于传统工程制造:后者在于“造物”,前者可谓“拟人”,即表达人脑思维形成的问题解决方案。软件没有传统产品意义下的“边际成本”,即复制成本几乎为零,主要成本在于它的“创造”、 “成长”和“演化”。软件既受刚性约束,又能柔性适应。软件以计算为实现手段,受逻辑正确性、图灵可计算性和计算复杂性的刚性约束。而通用图灵机模型和存储程序式计算机架构又使软件具有无与伦比的灵活性,在前述刚性约束下,其丰富的动态语义可以表达千变万化的计算解决方案。高度灵活性也使软件不仅仅是系统中的信息处理工具,也是管理各类资源、融合人机物的“万能集成器”,原则上规模可以无限扩展。这就使整个人工系统的复杂性向软件集中。纵观软件的发展历程,其复杂性呈爆炸性增长趋势。软件成为人类所创造的最复杂的一类制品。对复杂性的驾驭成为软件开发和运维的核心挑战。
二、软件的重要作用
进入 21 世纪以来,信息技术飞速发展,已经广泛覆盖并深深渗入社会经济的方方面面。近年来,以云计算、大数据、物联网、人工智能为代表的新一代信息技术推动了软件的跨界融合发展,开始呈现“网构化、泛在化、智能化”的新趋势,并不断催生新平台、新模式和新思维。可以说,信息技术的深度应用已经推动人类社会步入一个新的发展阶段。
从使能技术的视角看,软件技术在信息技术中始终处于“灵魂”地位,所有新的信息技术应用、平台和服务模式,均离不开软件技术作为基础支撑。例如,谷歌所有的网络服务均由软件实现,涉及的代码达到 20 亿行。更为重要的是,软件技术不仅引领信息技术产业的变革,在很多传统领域(如制造、能源、交通、零售等)中的存在比重和重要性也在不断加大。例如,宝马 7 系的软件代码总量超过 2 亿行,特斯拉 Model S 的软件代码总量超过 4 亿行。软件在支持这些传统领域产业结构升级换代甚至颠覆式创新的过程中起到核心关键作用,加速重构了全球分工体系和竞争格局。作为新一轮科技革命和产业革命的标志,德国的“工业 4.0”和美国的“工业互联网”均将软件技术作为发展重点。无所不在的软件已走出信息世界的范畴,深度渗入物理世界和人类社会,并扮演着重新定义整个世界的重要角色。从这个意义上说,我们正在进入一个“软件定义一切”的时代。
三、软件学科
软件学科是以软件为研究对象,研究以软件解决应用问题的理论、原则、方法和技术,以及相应的支持工具、运行平台和生态环境的学科。换言之,软件学科本质上是一门方法论学科。尽管软件学科的内容一直在不断深化、边界一直在不断扩展,作为一门方法论学科,其焦点始终是如何驾驭用计算为手段解决应用问题的复杂性,而合适的软件抽象是驾驭这个复杂性的关键。可以将计算平台集合看成平台空间,将可能的软件集合看成解空间,而将应用需求归入问题空间。唯有凭借恰当的软件抽象,方能有效认知并合理建模这三个空间,进而在其间建立映射,为给定应用需求找到可在合适计算平台上高效运行的软件解。若以软件抽象为视角,则软件学科可大致划分为四个子领域,即软件语言与软件理论、软件构造方法、软件运行支撑以及软件度量与质量评估,如图 0-1 所示。
  图 0-1 软件学科基本架构
软件语言的核心任务是建立通用的抽象机制,包括抽象的表示和抽象之间的关系,为问题空间、解空间和平台空间建模。软件语言包括程序设计语言、各类建模语言以及编程模型等。其中程序设计语言用于描述软件的计算行为,提供基础的软件抽象。一方面,程序设计语言需要提供更有效、有力,更符合人类思维方式的语言设施,以降低软件开发的难度、提高软件制品的质量;另一方面,这些语言设施又需能被高效地实现以保证软件的执行效率。软件理论旨在构建正确、高效软件系统的理论和算法基础,包括可计算性理论、算法理论和程序理论等。软件运行支撑的核心任务是建立解空间向平台空间的映射方法并构建平台空间抽象的计算实现。运行支撑系统包括操作系统、编译系统、中间件和数据库管理系统等,它们负责驱动下层计算资源有效运转,为上层应用提供共性服务,从而将计算平台的概念从硬件扩展到软件层面上。
软件构造方法的核心任务是建立问题空间抽象到解空间抽象的映射方法,构建解决方案,完成特定应用目标。其关键问题包括如何理解所面对的问题空间、如何理解当前需要软件来解决的问题并以此设计可能的解决方案,以及如何高效高质量地开发出能满足需求的软件等。软件构造方法包括软件开发的技术、管理等方面,形成了软件学科的软件工程分支的主要内容。软件度量与质量评估的核心任务是将基于软件抽象的制品与服务及其构造、运行过程作为观察对象,度量、评估和预测其质量与效率等指标。它通过定性和量化的手段发现软件模型、开发和运行的规律,并评价解决方案对应用目标的满足程度。
这四个子领域是密切联系、相互作用的,贯穿其中的是软件范型①。每一个范型为软件工程师(或程序员)提供一套具有内在一致性的软件抽象体系,具化为一系列软件模型及其构造原理,并外化为相应的软件语言、构造方法、运行支撑和度量评估技术,从而可以系统化地回答软件应该“如何表示”、“怎样构造”、“如何运行”及“质量如何”的问题[1]。软件范型的变化将牵引构造方法、运行支撑、度量和质量评估的一系列变化,带动软件学科的发展。
四、软件学科的重要地位
软件学科在整个计算机学科中占有举足轻重的地位。从 1966 年首届图灵奖至 2019 年的 54 次颁奖中,属于软件领域的有 37 次(约占 68.5%),其中以程序设计语言、编译和操作系统为主的有 22 次获奖,还有 4 次数据库获奖。
从目前我国人才培养一级学科划分看,软件学科横跨了计算机科学与技术、软件工程、网络空间安全等三个一级学科,特别是与计算机软件与理论二级学科和软件工程一级学科关系密切。与国际本科计算教育学科划分相比,软件学科横跨了 ACM/IEEE Computing Curricula 的五个学科,即计算机科学、计算机工程、软件工程、信息技术、信息系统。
随着信息技术及信息化的快速发展,软件学科也逐渐成为一门基础学科,并向其他学科渗透。基础学科是指某个拓展人类可认识改造的世界疆域之不可替代的知识体系,具有独特的思维方式与方法论,为其他学科发展提供不可或缺的支撑。首先,软件是将物理世界拓展为信息-物理-社会融合世界的主要手段;其次,“软件定义”赋能的计算思维有可能成为继实验观察、理论推导、计算仿真、数据密集型科学之后的综合性的科学研究手段,尤其是为以信息-物理-社会融合系统为对象的科学研究提供赖以运作的理论基础和实践规范;最后,以软件知识为主体的计算机教育已经成为包括我国在内的多个国家的国民基础教育课程体系的主要内容之一。
  第二节 发展历程与发展规律
一、软件学科发展历程
以程序化的系列步骤表达解决方案是人类思维的基本形式之一。但直到20 世纪 40 年代末存储程序式电子计算机出现以后,现代意义上的软件才真正出现。粗略而言,软件的发展历程可分为如下四个阶段。
(一)第一阶段
从存储程序式电子计算机出现到实用高级程序设计语言出现之前为第一阶段(20 世纪 40 年代末到 50 年代中期)。在此阶段,计算机处理能力有限,应用领域主要集中于科学计算与工程计算。编制程序所用的工具是低级语言。系统软件主要提供程序载入、汇编等功能。程序开发无系统方法,强调编程技巧。
(二)第二阶段
从实用高级程序设计语言出现到软件工程提出之前为第二阶段(20 世纪50 年代中期到 60 年代后期)。在此阶段,计算机处理能力迅速提高,应用领域扩展到商业数据处理等领域。人们开发了操作系统以充分利用系统资源。为了适应大量数据处理问题的需要,数据库及其管理系统开始出现。Fortran、COBOL、ALGOL 等高级语言大大提高了程序设计的效率。但软件的复杂程度
迅速提高,研制周期变长,质量难以保证,出现了软件危机。为此,人们提出结构化程序设计方法,并开始了程序正确性和软件可靠性的理论研究。
(三)第三阶段
从软件工程提出到基于互联网的软件服务广泛使用之前为第三阶段(20 世 纪 60 年代后期到 90 年代后期)。计算机系统的处理能力继续增长,向嵌入式和局域网或基于广域网的企业计算延伸;应用领域扩展到社会生产生活的诸多方面。以系统化、工程化的方法开发大型软件逐渐成为主流,软件开发方法和技术迅速发展,对象化、构件化等方法获得广泛应用。分布式应用和分布式软件得到快速发展,出现了软件中间件。关系数据库管理系统高速发展,获得很大成功。软件知识产权得到重视,基于软件产品形态的软件产业迅速发展。
(四)第四阶段
从基于互联网的软件服务广泛使用到现在为第四阶段(20 世纪 90 年代后期以来)。随着互联网和万维网的普及以及物联网、移动互联网的兴起,软件的应用范围向泛在化发展,全面融入人类生产生活的各个方面。软件的核心价值日益以网络服务的形式呈现。云计算、大数据和人工智能技术的进步推动了服务化的软件产业的繁荣。软件技术呈现网构化、泛在化和智能化的发展趋势。与此同时,开源软件运动取得巨大成功,软件和软件技术的可获得性极大提升,对整个软件生态产生了重要影响。
二、软件学科发展规律
纵观软件学科的历史,可以发现其发展的外在驱动力始终来自计算平台的发展和应用范围的扩张,而内在驱动力来自其核心问题的解决,追求更具表达能力、更符合人的思维模式的编程范式,追求更高效地发挥计算机硬件所提供的计算能力,不断桥接异构、凝练应用共性并沉淀计算平台,同时更好地满足用户对易用性的需求。这是由软件学科的方法论学科本质所决定的。换言之,如何深入软件开发所涉及的问题空间、平台空间和解空间,并在其间有效协同,是软件学科的“元”主题,而随着问题空间和平台空间的拓展,如何以更好的软件抽象帮助驾驭软件开发的复杂性,即尽量避免引入附属的复杂性,更好理解和应对本质的复杂性[2],是学科发展的“元”规律。不同层次的抽象(集中体现在软件语言等表达设施)、抽象的计算实现(集中体现在系统软件)和使用(集中体现在软件工程)组成了软件学科的主体内容,而体系化的软件范型迭代更新则展现了学科发展的脉络。图 0-2 展示了在应用范围扩张和计算平台发展驱动下主要软件范型的发展历程。例如,结构化软件范型是由于 20 世纪 60 年代计算机基础能力(计算、存储与外设)的快速发展和软件危机的出现而导致人们对基础的程序设计方法与语言的科学思考而产生的。它以结构化的程序抽象较好地协调了软件开发的平台空间与解空间,解空间和平台空间匹配较好,但问题空间和解空间差别大。随着计算机的应用范围从计算与数据处理向各类行业应用延伸,软件应用的问题复杂性迅速提升。而对象化(或称面向对象)软件范型进一步发展了从宏观角度控制复杂性的手段,如数据抽象、信息隐蔽、多态等,并强调将问题空间纳入软件设计的范畴,提出与问题结构具有良好对应关系的面向对象程序抽象与支撑机制,从而协调了软件开发的问题空间和解空间。同时,在平台空间也发展出中间件和容器等技术以支持对象抽象在网络化计算平台的实现。除了通用软件范型的迭代更新,软件学科中的各类专门抽象也随着平台空间和问题空间的发展而发展。例如,关系数据库以关系模型抽象很好地平衡了来自平台空间的性能需求和来自问题空间的易用性需求,取得巨大成功;但非结构化、海量数据的应用问题出现后,数据库不再采用严苛的关系模型,转而使用更为灵活的键值对结构、文档模型、图模型等更契合问题空间的抽象,同时给出这些抽象在大规模分布计算平台上的高效实现。
  图 0-2 软件范型的发展历程
、我国的软件学科、教育与产业
中国计算机软件事业发展始于 20 世纪 50 年代中后期。起步阶段,主要是面向国家战略急需,迅速填补程序开发、算法设计、系统软件等方面的空白,自力更生地为国产计算机研制配套的操作系统、编译系统和应用软件。改革开放后,中国软件界不断扩大国际交流与合作,在跟踪学习中迅速发展,全面融入世界。除在国产超级计算机上配备操作系统、高级语言编译系统和应用系统等软件,我国在程序理论、算法理论等方面取得一批基础性的成果,在大规模综合性的软件工程环境、软件自动化技术、软件中间件等方面取得一系列成果。
进入 21 世纪以来,在面向互联网的软件新范型、软件运行平台、群体化软件开发平台及大数据计算和应用平台等方面,中国取得有国际影响力的成果。
近十年来,在软件学科顶级国际期刊和学术会议上,中国学者开始大量发表研究成果,学术水平逐步得到国际学术界的认可。从计量指标来看,中国学者的论文、引文的数量及国际合作的规模呈现持续增长的态势,在主要会议和期刊上发表论文的占比渐增,部分指标已经位于世界前列。但是,我国软件学科在不同子研究领域的发展很不平衡,软件理论和语言等基础研究比较薄弱;以操作系统、编译环境、数据库系统、开发运维环境为代表的基础性软件设施和生态方面的自主构建能力还不能满足我国信息化进程的重大需求。
自 20 世纪 80 年代初以来,我国的软件教育,尤其是软件工程教育,迅速发展,先后开展了开设软件工程系列课程、试办软件工程专业、培养软件工程 硕士研究生等一系列建设工作。2001 年,国家开展示范性软件学院的建设,全国共有 37 家(首批 35 家)重点高校试办示范性软件学院。2010 年,教育部软件工程专业教学指导委员会编制了《高等学校软件工程本科专业规范》,以指导我国软件工程专业建设。2011 年,国家增设软件工程一级学科。截至目前,我国已有三百多所高校成立了软件学院或开设了软件工程专业,形成本、硕、博多层次成系统的软件工程教育体系。2019 年,软件工程专业教学指导委员会推出了中国软件工程知识体系 C-SWEBOK。2019 年,教育部出台的《2019 年教育信息化和网络安全工作要点》指出,要在中小学阶段逐步推广编程教育。
随着软件基础性的地位日益突出,国家对软件人才培养的数量和质量提出了更高的要求。在发展软件学科的专业教育之外,也需大力推进软件通识教育,并积极利用在线教育等新兴技术促进软件教育的发展。基于软件学科发展的技术和人才积累,我国的软件产业伴随着改革开放的东风起步。1980 年 6 月,国家电子计算机工业总局颁布试行《软件产品实行登记和计价收费的暂行办法》,中国软件登记中心、软件工程国家工程研究中心(北京)和中国软件行业协会先后成立,推动软件产业的形成和发展。此后,随着计算机的日益普及带来的需求增长、国家法律法规和产业政策的不断完善,我国软件产业迅速壮大。尤其是进入 21 世纪以来,其发展尤为迅猛。据国家有关部门统计,软件与信息技术服务业产值从 2000 年的 560 亿元增至
2019 年的 7 万亿元,且近年来保持每年 10%以上的增速。根据工业和信息化部公布的数据,2019 年我国软件产业从业人数达到 673.2 万人。尽管面临国际
软件企业巨头的竞争,但是国内软件企业通过自主创新,逐渐探索出符合中国国情的发展道路。近年来,国内龙头软件企业在软件研发投入和产出上持续增长,技术水平不断提高,市场影响力日益扩大。
在迅速发展的同时,我国软件产业也存在一些问题。在总量上,我国软件产业占电子信息产业的比重约为 30%,显著低于发达国家的 50%~70%,仍有巨大的发展空间。我国软件产业基础薄弱,在操作系统、编译系统、软件开发环境、数据库管理系统等基础软件和电子设计自动化(electronic designautomation,EDA)、计算机辅助工程(computer aided engineering,CAE)等核心工业软件领域有待摆脱受制于人的局面。我国软件企业科技创新和自我发展能力不强,数据和知识的确权、保护及共享水平亟待提高,产业链和产业生态有待完善。考虑到软件产业自身的发展规律和当前的国际政经竞合形势,我国软件产业的进一步发展和升级亟须软件学科在原创技术和人才供给方面提供更有力的支持。
  第三节 发展趋势与挑战问题
一、软件成为基础设施
人类信息化发展经历了以单机应用为主要特征的数字化、以联网应用为主要特征的网络化两个阶段,正在开启以数据的深度挖掘和融合应用为主要特征的智能化新阶段。计算的泛在化和“软件定义一切”的发展趋势使软件正在成为信息社会的新型基础设施,软件学科也进入一个新时代。
“计算的泛在化”是指计算变得无处不在而又无迹可寻。万物数字化、万物互联使得计算无处不在,形成人机物三元融合的发展趋势。计算自然融入人类生产、生活活动的环境和过程之中,无须关注,不着痕迹。“软件定义”是指软件以平台化的方式,向下管理各种资源,向上提供编程接口,其核心途径是资源虚拟化及功能可编程。而“软件定义一切”则将软件平台所管理的资源和提供的编程抽象泛化到包括计算、存储、网络、软件服务等在内的各类计算资源,包括各种数字化机电设备和可传感物体对象在内的各类物理资源,乃至可通过激励机制调配的人力资源。
软件的基础设施地位具体表现为两个方面:一方面,软件自身已成为信息技术应用基础设施的重要构成成分,以平台方式为各类信息技术应用和服务提供基础性能力和运行支撑;另一方面,软件正在“融入”支撑整个人类经济社会运行的“基础设施”中,特别是随着互联网向物理世界的拓展延伸并与其他网络的不断交汇融合,软件正在对传统物理世界基础设施和社会经济基础设施进行重塑,通过软件定义的方式赋予其新的能力和灵活性,成为促进生产方式升级、生产关系变革、产业升级、新兴产业和价值链诞生与发展的重要引擎。从经济社会整体发展的角度,计算成为人类与物理世界互动的中介,软件对人类社会的运行和人类文明的发展进步起到重要支撑作用。在此宏观趋势下,软件学科的边界日益拓展,内涵不断深化。
二、软件学科的拓展
软件学科的拓展来自软件应用范围扩张、计算平台泛化和软件方法技术发展三个方面的驱动。
(一)软件应用范围扩张角度
从软件应用范围扩张的角度看,计算日益变得无处不在,人机物三元融合不断深入。软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的人机物各类资源,实现应用价值。软件作为应用解决方案,涉及的范畴扩展到各类物理设备、物品和人类的主观体验与价值实现;软件学科不可避免地涉及控制科学、系统科学及心理学、管理学、经济学和社会学等范畴的问题,并以软件学科自身的方法论将其内化和拓展。
(二)计算平台泛化角度
从计算平台泛化的角度看,计算平台从传统的集中式单机发展到并行与分布平台,到今天的“云-边-端”异构多态计算平台。软件定义技术为这个人机物融合的平台提供可编程计算抽象。软件作为解决方案,在这个计算平台之上利用数据资源,协同人机物,实现应用价值;通过在这个平台上提供服务,并进一步积累数据,不断拓展这个计算平台。
(三)软件方法技术发展角度
从软件方法技术发展的角度看,软件的基本形态从计算机硬件的附属品,到独立的软件产品,再转变到云化和泛在的软件服务,软件形态的耦合边界趋于模糊,开发运维一体化成为趋势;面向计算平台和应用需求变化及拓展的软件演化成为软件的常态,元级结构以及在基于规则的演绎之上发展出数据驱动的归纳,将成为超大规模软件体系结构的重要元素,各种场景的适应和成长 是软件运行支撑发展的焦点;软件开发经历了从实现数学计算到模拟物理世界,将拓展到虚实融合创造的转变,人类社会和赛博空间的虚实互动促进着软件系统向社会-技术系统(socio-technical system)发展;对软件作为客体对象的考察从以个体及其生产使用为主扩展到生态的层面,转换为考虑软件及其利益相关者群体的竞争、协作等社会性特征,软件度量与质量评估的科学观察对技术的发展和软件生态的发展具有重要意义。
三、软件学科的新理解在软件作为基础设施、“软件定义一切”的背景下,软件进一步成为构造开放环境下复杂系统的关键。在研究方法学的层面上,认识软件学科的内涵需要有新的视角,包括以驾驭复杂性为目标的系统观、以泛在服务和持续演化为特征的形态观、以人为中心的价值观,以及关注群体协作平衡的生态观。
(一)系统观
软件学科的系统观有三层含义。第一层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,且所处的环境具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。第二层含义是系统论。上述复杂软件系统的整体性质,常常难以用其组成部件的性质来解释。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法。第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注人机物融合的整个系统的价值实现。
以系统观看软件学科发展,软件科学与自然科学、社会科学等各个领域产生千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为社会-技术系统。人机物融合的软件系统,其复杂性本身就呈现在系统乃至系统的系统层面上,综合性和系统性也越来越强,必须当成复杂系统来认识和对待。这就要求超越传统还原论的思维藩篱,发展作为复杂系统的软件理论。近年来,软件科学在系统观方向上进行了不少探索,包括基于复杂网络来认识大规模软件系统的整体性质、基于多智能体(agent)的软件系统和方法、复杂自适应软件与系统、群体化软件开发方法等。网络化和大数据催发了融合软件系统与系统论研究的切入点,数据驱动的软件设计和优化初显端倪,在一些特定领域获得很大成功。例如,基于深度学习的方法从海量的样本中构建出神经网络,其泛化能力可视为通过神经元系统的涌现而达成的功能。然而,总体来看,这些研究仍较初步,未能形成体系化的软件系统论和软件系统工程方法。
软件学科的发展也将促进系统论和系统学的发展。在“软件定义一切”的时代,软件成为复杂适应系统认知的载体和实验平台,而软件发展形成的以形式化体系为基础的规则驱动软件理论、高性能计算之上建立的模拟仿真技术、与进入智能化阶段形成的大数据驱动的软件方法,为建立还原论和整体论的辩证统一奠定了良好的基础,软件走向人机物融合更是为系统论和系统学的发展提供了实践探索的大场景。正如詹姆士 格雷(James Gray)所指出的,大数据将成为人类触摸、理解和逼近现实复杂系统的有效途径。
(二)形态观
在空间维度上,随着应用范围的拓展,软件对人类生活和现实世界的渗透力越来越强,呈现泛在化的趋势;在时间维度上,随着应用上下文环境及用户需求的变化不断适应和演化,软件呈现出持续成长的趋势。与之相应地,软件的范型进一步向网构化以及数据驱动的方向发展,这对软件学科的内涵发展将产生多个方面的影响。
首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
其次,适应泛在而专用化甚至变化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移与优化。软件平台需要具有预测和管理未来硬件资源变化的能力,能适应硬件、底层资源和平台的变化,乃至能相对独立地长期生存演化。
再者,内生的持续成长能力将成为软件的基本能力。除了自适应能力,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长不仅意味着通过各种智能化方法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动的方式进行设计,并实现自演化和自生长。
最后,软件与人将在不断汇聚的群体智能中实现融合发展。软件的覆盖面越来越广,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智能。这种群体智能注入软件后又将服务于每个最终用户,这样软件能够在各种应用场景中以更加智能化和个性化的方式满足用户自身的需求,从而在使用中越来越有“灵性”和“人性”。
(三)价值观
软件在整个系统中的角色定位日益从负责应用过程中的信息处理环节转变为实现应用价值的主要载体。这就要求对软件质量的理解从以软件制品为中心的传统软件质量观拓展转变到以人为中心的价值观。传统的软件质量观下,人们主要关注软件制品的正确性、高效性、易用性等外部质量属性和易维护性、易移植性等内部质量属性。这些质量属性一般是客观的。软件的价值观是建立在传统的软件制品质量属性基础上的,强调用户体验,强调软件系统的应用对人类价值的实现。软件通过一系列价值要素体现了主观的人类价值。除了可以用经济价值衡量的软件质量,尤其需要强调软件的可信性、安全性、伦理和持续性等价值要素。
软件系统的可信性包括软件本身可信和软件行为可信两个方面。软件本身可信是指软件的身份和能力可信,即软件开发过程提供可信证据(如关于软件质量的过程记录和评审、测试结果等),对软件及其组成成分的来源和质量进行自证;软件行为可信是指软件运行时行为可追踪且记录不可篡改,即通过监控软件运行过程并控制其对周围环境的影响,使包含该软件在内的整个系统的对外表现符合用户要求。软件及其应用场景日趋多样,自身以及运行环境的复杂性越来越高,加剧了软件可信面临的挑战。
软件系统的安全性要求其为人类活动和生存环境提供必要的安全保障,包括功能安全(safety)和信息安全(security)。功能安全是指不会因为软件自身的缺陷而给人员、设施、环境、经济等造成严重损害,信息安全是指系统保护自身免于被入侵及信息被非法获取、使用和篡改,具体包括机密性、完整性和可用性三个方面。在人机物融合的趋势下,软件作为基础设施,参与并掌控了很多关键领域的资源,其安全性威胁会给整个系统甚至人类社会带来致命的威胁。因此,安全性随着软件成为基础设施的现状变得愈发重要。软件系统的伦理是指系统的行为应符合社会道德标准,不会对个人和社会产生负面影响。社会道德定义了一定时间区域内人们的行为规范,可具体表现为无歧视、尊重隐私、公平公正等,并最终体现于软件系统的具体行为。因此,软件系统的伦理也体现在软件行为的上述方面,并需要通过软件开发和运行的诸多机制进行支持。
软件系统的可持续性是指软件系统在持续不间断运行、维护和发展过程中,始终能提供令人满意的服务的能力。这是软件作为信息社会基础设施的必然要求。同时,为满足各类应用快速增长、新技术不断涌现的需求,软件系统需要具有开放扩展能力,即能集成各种异构的技术及子系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应及调控机制,以及个性化服务的定制等。
(四)生态观
软件的开发、运行、维护和使用涉及三大类元素,包括软件制品(包括开发态和运行态)、软件涉众(包括开发者、使用者和维护者等)和软件基础设施(包括承载软件制品开发与运行等活动的软件基础设施等)。这些元素彼此作用、互相依赖,形成复杂的生态系统,需要用生态化的观点去理解和研究。生态系统可以从下述维度来刻画。
首先,软件生态系统的关键元素是软件涉众、软件制品和软件基础设施,
三者互相融合、依赖和影响。软件涉众之间、软件制品之间、软件基础设施之间存在各种依赖,网状的依赖形成各种供应链,而软件涉众、软件制品和软件基础设施之间因为彼此依存也存在各种影响。生态的要义在于供应链的形成和各种影响的相互作用需要达到平衡。
其次,软件生态系统具有深刻的社会性,开发者和用户都是社会体,参与或主导生态的企业也有很强的社会性。参与生态的社会群体如何协作以建立生态并不断适应变化以支持可持续生态是软件生态的核心挑战。群体关系(对立、独立或互补)之间的平衡是秩序之本,非平衡是运动变化之源。
最后,软件生态系统是由人类智能和机器智能交互并融合而实现的。人类智能体现为分布在全球的开发者和用户;机器智能体现为支撑分布式开发和使用的软件工具与基础,支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。通过众多的个体认知的汇聚,以及商业和宏观调控角度的战略调控,人类智能和机器智能相互协作、补充,并向群体混合智能方向发展。软件从过去的个体作坊开发,到不同组织内或组织间人员混合参与的组织化开发,再发展到数以万计互相依赖的软件形成的供应链和庞大的生态系统下的社会化开发。其转变给软件开发带来前所未有的创新可能。相应地,生态观对软件方法学带来显著的变化。软件和软件学科需要从以往关注个体软件的构建和运维转变到关注有广泛社会参与的软件体系的构建、运维和成长,以及软件生态的平衡和适应各种变化的可持续发展。同时,软件学科与其他学科的交叉性将更加凸显,社会学、经济学、组织学、生物学等学科的理论和发现可用来研究海量软件活动数据隐含的软件生态网络,其发现反过来对其他学科的发展也将很有裨益。
四、学科研究的主要问题
软件学科的学科内容主要涵盖软件语言与软件理论、软件构造方法、软件运行支撑、软件度量与质量评估四个方面的内容,而软件范型贯穿其间,使之相互配合形成方法论意义上的有机整体。软件范型的变化将牵引软件技术体系的变化。而上述系统观、形态观、价值观和生态观的新视角将引起软件范型的变化,并辐射到软件开发、运行和度量各个层面方法和技术的变革,进而对软件的整体生态与教育方面产生深刻的影响。
(一)软件语言与软件理论
软件语言与软件理论方面将着力解决如何建立适应人机物融合的软件范型基础这一基本问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,拓展可计算理论传统研究的内容范围,特别是需要支撑大数据与持续计算的算法和计算复杂性理论,以及在新的硬件架构(异构多态)和计算平台(如量子计算平台)的计算理论和程序理论等。与软件理论紧密相关,软件语言将重点研究泛在计算各种抽象,构建领域特定的程序设计语言,探索语言演化和生长机制,以及基于“语言工程”的软件设计方法和支撑环境,共同奠定软件范型发展的理论和语言基础。
(二)软件构造方法
软件构造方法将研究人机物融合场景下的软件开发范型和技术体系,换言之,即研究面向应用场景需求以及如何“软件定义”人机物融合的“场景计算机”。面向高效、高质量、低成本的目标,软件构造的技术方法和组织模式需要应对复杂场景分析与建模、群体智能开发、人机协作编程、开发运维一体化等一系列挑战,亟待新方法和技术的发展。
(三)软件运行支撑
软件运行支撑将向支撑人机物融合、具有“资源虚拟化”和“功能可编程”特点的泛化运行平台发展,满足作为社会基础设施在规模、适应、演化、安全、效能等方面的诸多严格要求。未来的泛在操作系统与运行平台,需在软件定义的新型运行平台架构、泛在资源的高效虚拟化和调度方法、软件系统持续适应演化的支撑机制、人机物融合过程中的安全与隐私保护等关键问题上寻求突破。
(四)软件度量与质量评估
软件度量与质量评估是软件学科的科学观察和工程构造相交融的重要方面,其未来的重要变化是在复杂系统和软件生态层面的科学观察,并以此为基础推进软件开发和运行层面的持续发展。一方面,将通过有效的度量和分析,理解和利用大规模代码及项目的供应链行为,研究个体学习和群体协作,并探索软件生态的形成和可持续机制机理等。另一方面,以应用场景的价值牵引,带动软件质量和保障技术的发展成为重要趋势,未来突破的重点将在数据驱动的智能系统质量保障、人机物融合场景下的系统可信增强、大规模复杂系统安全缺陷检测、物联网环境下的系统安全保障等方面。“以数据为中心”是人机物融合时代的最为突出的特征,数据工程和数据管理是未来软件构造和运行支撑的共性沉淀。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。在数据管理方面,需要研究如何管理大数据,特别是如何利用新型硬件混合架构来实现大数据的管理。
软件学科的发展呈现纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局。学科发展的途径将呈现为:先在已有共性方法上发展领域特定方法,然后反馈并带动新型共性方法的发展。在人机物融合及“软件定义一切”的大背景下,以卫星系统、流程工业控制系统、智慧城市系统、无人自主系统等为代表的重大领域都蕴含着平台再造与整合的发展机遇,即以软件作为万能集成器对相关系统原有的软硬件和服务资源进行解构,然后以平台化的方式进行重构,从而建立软件定义的融合发展平台。此外,高性能 CAE 软件系统等专用工程软件也是软件学科的重要关注点。此类软件用于支撑高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计,具有重大应用价值;其高效能、高精度、高定制的需求也将推动软件技术的发展。软件学科的发展离不开软件教育体系、内容、方法、手段的变革。软件教育需要构建包括顺应“软件定义一切”发展趋势的通识教育、针对人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育和继续教育的完整体系,并建设发展相应的教育理念和方法。
  第四节 政 策 建 议
我们比任何时候都需要更加重视软件学科建设,牢固确立软件学科的优先发展地位,准确把握新时代软件学科的发展方向。建议从加强软件基础前沿研究、升级完善软件学科高等教育体系和构建软件产业良性发展环境等维度规划我国的软件学科发展战略。
一、加强软件基础前沿研究
新时代的软件学科面对的软件是人机物融合、泛在、可演化的复杂系统。这样的系统已经超出传统软件学科关注的以计算机为中心的软件范畴,因此加强软件基础前沿研究既现实又紧迫。
(一)加强面向人机物融合、泛在计算模式的软件理论研究
新时代的软件系统是持续演化、人机物融合、泛在的开放复杂系统。以互联网(物联网)上大量涌现的人机物融合的智能云服务系统为例,软件系统需要处理持续增长的网络大数据,融合离散计算与连续的物理空间,服务行为具有不确定性和持续演化性。此类软件系统已经超出当前算法和程序理论的研究范畴。需要借鉴复杂系统思想、理论和方法,拓展与控制理论的交叉,研究开放的新型软件理论,为新时代的软件学科提供理论支持。
(二)加强面向泛在计算的程序设计语言及其支撑环境研究
随着计算向各个领域的渗透,降低普通用户学习门槛成为面向泛在计算的程序设计语言关注的重点。需要结合各个行业领域的软件定义需求,以领域特定的程序设计语言设计原理和高效实现为目标,研究面向领域应用的新型程序设计语言理论、程序设计语言的演化和互操作性机理、程序设计语言的支撑环境和工具链等,提供共性和个性兼顾的编程支撑。
(三)布局基于软件定义方法的泛在操作系统原理和技术研究
需要研究以“连接协调”为核心的新型软件体系结构下泛在操作系统模型和机理、各类新型异构资源的抽象机制及其虚拟化技术、应用需求导向的按需高效资源调度、内生可信安全机制等,以及研究如何充分发挥泛在操作系统的“元层”共性基础支撑作用,有效驱动和实现“信息-物理-社会”空间的协同持续演化。
(四)探索以数据为中心的新型应用开发运行模式及其平台支撑
随着大数据应用的繁荣和数据作为主要资产定位的确立,围绕数据部署应用将成为一种主要的应用模式。需要研究异构海量数据的抽象和建模、多元(源)数据资源的互操作和调度管理技术及平台、以多元(源)数据为中心的应用快速开发和高效运行技术,以及相应的数据安全和隐私保护技术等。
(五)加强对大规模代码和项目的供应链和生态行为研究
开源、众包等软件开发社区模式已成为传统组织型软件开发模式之外的重要模式。需要以刻画和分析复杂的软件供应链模型为基础,研究个体如何高效认知复杂项目和生态、群体如何高效高质地协作完成各类软件开发相关的任务、软件涉众如何围绕软件构建可持续性演化的生态系统等。基于互联网群体智能的软件开发方法和支撑平台研究、基于软件工程大数据的软件自动化方法和技术研究,以及软件知识产权的甄别和保护技术也是值得关注的重点。
(六)重视软件技术研究和应用的价值取向及管理
鉴于软件的基础设施化的发展趋势,需要加强复杂人机物融合系统安全可靠保障、机器学习赋能软件的质量评估和风险防控等,同步发展软件确保工具环境、软件基础设施以及软件生态治理。需要推进以人为中心的软件价值观研究和规范,研究各种社会因素带来的超越软件使用质量的新型软件价值及其约束和规范、可能风险的防护和提示机制等,软件技术及其应用的伦理研究也应受到关注。
二、升级完善软件学科高等教育体系
软件不仅成为社会经济活动的基础设施,还将重塑人们的思维模式。在现代高等教育体系中,软件教育不仅仅是面向软件专门人才的专业教育,还应该成为覆盖全体大学生的通识教育。
(一)布局面向全体大学生的软件通识教育
要通过以“算法抽象+编程思维”为核心的认知教育,帮助学生形成用算法和编程理解数字空间的认知能力;通过以“语言案例+编程案例”为核心的实践案例教育,帮助学生形成自主学习编程工具、解决现实计算问题的实践能力。要使大学软件通识教育与中小学的计算机基础教育相衔接;要与当下大学开设的“大学计算机基础”通识课程融合衔接;要与大学各类专业教育和未来终身学习相衔接。
(二)重构软件学科专业人才培养体系
需将以计算机为核心的软件学科知识体系拓展为以网络为平台的软件学科知识体系,系统能力培养标准也要由计算机空间拓展到网络空间,建立与软件新“四观”相适应的高层次研究型专门人才培养方法,强化解决以网络为平台的复杂系统问题的能力,造就勇于开拓新时代软件学科“无人区”的探索者,为中国引领新时代软件学科发展培养领军人才。
(三)开展面向其他学科专业的软件工程教育
为适应“软件定义一切”的时代特点,结合各行业领域信息化转型发展需求,需构建面向其他学科专业的软件工程课程体系,实现复合型、创新型和跨界人才培养,有效提升行业领域应用专门人才与软件专业人才合作开发复杂应用软件的能力,为各行业领域提供高端软件开发人才,提高基于计算机和网络开发仿真、设计、分析、制造、测试等工具软件的能力和水平。
(四)构建并开放软件教育支撑平台
要把握软件学科实践性的特点,坚持以泛在化的计算机和网络为支撑工具,支持软件人才实践能力培养,研发支持软件人才培养的支撑软件和大规模开放在线课程(massive open online course,MOOC),与开源软件资源以及开源软件开发部署云平台对接,构建开放共享的软件开发、部署、维护、升级和演化的实训平台,推广大规模开放在线实践(massive open online practice,MOOP)教学,对接软件产业环境,形成支撑大学教育和终身教育的开放平台。
三、构建软件产业良性发展环境
在“软件定义一切”成为经济社会基础设施的时代背景下,强大的软件产业需要强大的软件学科支撑,同时也提供了软件学科发展的沃土。需要把握住新时代软件的颠覆式发展机遇期,实现创新发展和跨越发展。
(一)完善知识产权保护
需加强软件知识产权保护的宣传,加强各个领域、各种形态、各种应用场景下的软件技术知识产权保护方法和措施研究以及法规制定,完善健全软件知识产权保护体系并建立严格的实施机制,切实保护软件技术和应用创新,促进我国软件产业的技术升级。
(二)大力发展融合应用
在智慧城市、社会治理、智能交通、敏捷物流、信息消费等重点领域加强投入,发展软硬融合的垂直设计技术,构建人机物融合的关键应用系统;推进相关抽象规范和软件标准的制定,引导形成以应用程序编程接口(application programming interface,API)经济为基础的人机物融合应用生态;构建相应的大数据互操作平台和应用开发工具,支撑高附加值软件产品和服务的技术创新及应用。
(三)布局新基础设施建设
  结合数字中国建设和数字经济发展新需求,打造新一代信息技术主导的社会经济活动的新型基础设施,如 5G 通信网、物联网、人工智能开放平台和大型数据中心等。同时,加快推动传统物理基础设施的软件定义改造和升级,如电力传输网、交通路网等。以此为基础,面向传统行业领域数字化转型、网络化重构和智能化提升的迫切需求,大力推进软件定义方法在各行业的推广应用,推进工业互联网技术研发和平台构建,按需打造各行业特定的泛在操作系统。
(四)积极培育开源生态
需培育基于开源模式的公益性生态环境建设,“参与融入”国际成熟开源社区的同时,以建设中文开源社区逐步“蓄势引领”。探索开源生态下的新型商业模式,并以其为抓手提升我国在信息技术领域的核心竞争力和国际影响力,特别是通过中文开源平台的建设构建国家软件资产托管和共享体系。
(五)推进公共数据开放
需通过政策和法规制定,鼓励地理、气候、统计、环境、交通等政府数据和公共数据开放,构建基于互联网的大数据开放共享平台及开放的数据分析工具库,支持不同组织和个人开展数据汇聚、管理、分析和应用的大规模协作以及高附加值的数据类软件产品及服务创新。
  第五节 本 章 小 结
经由七十多年的发展,软件已经成为信息社会不可或缺的基础设施,支撑着国计民生,承载着现代文明。本书旨在勾画软件科学与工程的学科体系及其发展态势,指出其所面临的挑战和未来的研究方向。如未做到,乃能力及知识所限,请读者见谅。