中国学科发展战略·软件科学与工程(中)
发布时间:2022-07-16 08:00:00
       第三节 发展趋势与挑战问题
       一、软件成为基础设施
       人类信息化发展经历了以单机应用为主要特征的数字化、以联网应用为主要特征的网络化两个阶段,正在开启以数据的深度挖掘和融合应用为主要特征的智能化新阶段。计算的泛在化和“软件定义一切”的发展趋势使软件正在成为信息社会的新型基础设施,软件学科也进入一个新时代。
     “计算的泛在化”是指计算变得无处不在而又无迹可寻。万物数字化、万物互联使得计算无处不在,形成人机物三元融合的发展趋势。计算自然融入人类生产、生活活动的环境和过程之中,无须关注,不着痕迹。“软件定义”是指软件以平台化的方式,向下管理各种资源,向上提供编程接口,其核心途径是资源虚拟化及功能可编程。而“软件定义一切”则将软件平台所管理的资源和提供的编程抽象泛化到包括计算、存储、网络、软件服务等在内的各类计算资源,包括各种数字化机电设备和可传感物体对象在内的各类物理资源,乃至可通过激励机制调配的人力资源。
       软件的基础设施地位具体表现为两个方面:一方面,软件自身已成为信息技术应用基础设施的重要构成成分,以平台方式为各类信息技术应用和服务提供基础性能力和运行支撑;另一方面,软件正在“融入”支撑整个人类经济社会运行的“基础设施”中,特别是随着互联网向物理世界的拓展延伸并与其他网络的不断交汇融合,软件正在对传统物理世界基础设施和社会经济基础设施进行重塑,通过软件定义的方式赋予其新的能力和灵活性,成为促进生产方式升级、生产关系变革、产业升级、新兴产业和价值链诞生与发展的重要引擎。从经济社会整体发展的角度,计算成为人类与物理世界互动的中介,软件对人类社会的运行和人类文明的发展进步起到重要支撑作用。在此宏观趋势下,软件学科的边界日益拓展,内涵不断深化。
       二、软件学科的拓展
       软件学科的拓展来自软件应用范围扩张、计算平台泛化和软件方法技术发展三个方面的驱动。
      (一)软件应用范围扩张角度
       从软件应用范围扩张的角度看,计算日益变得无处不在,人机物三元融合不断深入。软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的人机物各类资源,实现应用价值。软件作为应用解决方案,涉及的范畴扩展到各类物理设备、物品和人类的主观体验与价值实现;软件学科不可避免地涉及控制科学、系统科学及心理学、管理学、经济学和社会学等范畴的问题,并以软件学科自身的方法论将其内化和拓展。
      (二)计算平台泛化角度
       从计算平台泛化的角度看,计算平台从传统的集中式单机发展到并行与分布平台,到今天的“云-边-端”异构多态计算平台。软件定义技术为这个人机物融合的平台提供可编程计算抽象。软件作为解决方案,在这个计算平台之上利用数据资源,协同人机物,实现应用价值;通过在这个平台上提供服务,并进一步积累数据,不断拓展这个计算平台。
       (三)软件方法技术发展角度
       从软件方法技术发展的角度看,软件的基本形态从计算机硬件的附属品,到独立的软件产品,再转变到云化和泛在的软件服务,软件形态的耦合边界趋于模糊,开发运维一体化成为趋势;面向计算平台和应用需求变化及拓展的软件演化成为软件的常态,元级结构以及在基于规则的演绎之上发展出数据驱动的归纳,将成为超大规模软件体系结构的重要元素,各种场景的适应和成长 是软件运行支撑发展的焦点;软件开发经历了从实现数学计算到模拟物理世界,将拓展到虚实融合创造的转变,人类社会和赛博空间的虚实互动促进着软件系统向社会-技术系统(socio-technical system)发展;对软件作为客体对象的考察从以个体及其生产使用为主扩展到生态的层面,转换为考虑软件及其利益相关者群体的竞争、协作等社会性特征,软件度量与质量评估的科学观察对技术的发展和软件生态的发展具有重要意义。
       三、软件学科的新理解
       在软件作为基础设施、“软件定义一切”的背景下,软件进一步成为构造开放环境下复杂系统的关键。在研究方法学的层面上,认识软件学科的内涵需要有新的视角,包括以驾驭复杂性为目标的系统观、以泛在服务和持续演化为特征的形态观、以人为中心的价值观,以及关注群体协作平衡的生态观。
      (一)系统观
软件学科的系统观有三层含义。第一层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,且所处的环境具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。第二层含义是系统论。上述复杂软件系统的整体性质,常常难以用其组成部件的性质来解释。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法。第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注人机物融合的整个系统的价值实现。
       以系统观看软件学科发展,软件科学与自然科学、社会科学等各个领域产生千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为社会-技术系统。人机物融合的软件系统,其复杂性本身就呈现在系统乃至系统的系统层面上,综合性和系统性也越来越强,必须当成复杂系统来认识和对待。这就要求超越传统还原论的思维藩篱,发展作为复杂系统的软件理论。近年来,软件科学在系统观方向上进行了不少探索,包括基于复杂网络来认识大规模软件系统的整体性质、基于多智能体(agent)的软件系统和方法、复杂自适应软件与系统、群体化软件开发方法等。网络化和大数据催发了融合软件系统与系统论研究的切入点,数据驱动的软件设计和优化初显端倪,在一些特定领域获得很大成功。例如,基于深度学习的方法从海量的样本中构建出神经网络,其泛化能力可视为通过神经元系统的涌现而达成的功能。然而,总体来看,这些研究仍较初步,未能形成体系化的软件系统论和软件系统工程方法。
       软件学科的发展也将促进系统论和系统学的发展。在“软件定义一切”的时代,软件成为复杂适应系统认知的载体和实验平台,而软件发展形成的以形式化体系为基础的规则驱动软件理论、高性能计算之上建立的模拟仿真技术、与进入智能化阶段形成的大数据驱动的软件方法,为建立还原论和整体论的辩证统一奠定了良好的基础,软件走向人机物融合更是为系统论和系统学的发展提供了实践探索的大场景。正如詹姆士·格雷(James Gray)所指出的,大数据将成为人类触摸、理解和逼近现实复杂系统的有效途径。
      (二)形态观
在空间维度上,随着应用范围的拓展,软件对人类生活和现实世界的渗透力越来越强,呈现泛在化的趋势;在时间维度上,随着应用上下文环境及用户需求的变化不断适应和演化,软件呈现出持续成长的趋势。与之相应地,软件的范型进一步向网构化以及数据驱动的方向发展,这对软件学科的内涵发展将产生多个方面的影响。
       首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
       其次,适应泛在而专用化甚至变化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移与优化。软件平台需要具有预测和管理未来硬件资源变化的能力,能适应硬件、底层资源和平台的变化,乃至能相对独立地长期生存演化。
       再者,内生的持续成长能力将成为软件的基本能力。除了自适应能力,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长不仅意味着通过各种智能化方法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动的方式进行设计,并实现自演化和自生长。
       最后,软件与人将在不断汇聚的群体智能中实现融合发展。软件的覆盖面越来越广,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智能。这种群体智能注入软件后又将服务于每个最终用户,这样软件能够在各种应用场景中以更加智能化和个性化的方式满足用户自身的需求,从而在使用中越来越有“灵性”和“人性”。
      (三)价值观
       软件在整个系统中的角色定位日益从负责应用过程中的信息处理环节转变为实现应用价值的主要载体。这就要求对软件质量的理解从以软件制品为中心的传统软件质量观拓展转变到以人为中心的价值观。传统的软件质量观下,人们主要关注软件制品的正确性、高效性、易用性等外部质量属性和易维护性、易移植性等内部质量属性。这些质量属性一般是客观的。软件的价值观是建立在传统的软件制品质量属性基础上的,强调用户体验,强调软件系统的应用对人类价值的实现。软件通过一系列价值要素体现了主观的人类价值。除了可以用经济价值衡量的软件质量,尤其需要强调软件的可信性、安全性、伦理和持续性等价值要素。
       软件系统的可信性包括软件本身可信和软件行为可信两个方面。软件本身可信是指软件的身份和能力可信,即软件开发过程提供可信证据(如关于软件质量的过程记录和评审、测试结果等),对软件及其组成成分的来源和质量进行自证;软件行为可信是指软件运行时行为可追踪且记录不可篡改,即通过监控软件运行过程并控制其对周围环境的影响,使包含该软件在内的整个系统的对外表现符合用户要求。软件及其应用场景日趋多样,自身以及运行环境的复杂性越来越高,加剧了软件可信面临的挑战。
       软件系统的安全性要求其为人类活动和生存环境提供必要的安全保障,包括功能安全(safety)和信息安全(security)。功能安全是指不会因为软件自身的缺陷而给人员、设施、环境、经济等造成严重损害,信息安全是指系统保护自身免于被入侵及信息被非法获取、使用和篡改,具体包括机密性、完整性和可用性三个方面。在人机物融合的趋势下,软件作为基础设施,参与并掌控了很多关键领域的资源,其安全性威胁会给整个系统甚至人类社会带来致命的威胁。因此,安全性随着软件成为基础设施的现状变得愈发重要。软件系统的伦理是指系统的行为应符合社会道德标准,不会对个人和社会产生负面影响。社会道德定义了一定时间区域内人们的行为规范,可具体表现为无歧视、尊重隐私、公平公正等,并最终体现于软件系统的具体行为。因此,软件系统的伦理也体现在软件行为的上述方面,并需要通过软件开发和运行的诸多机制进行支持。
       软件系统的可持续性是指软件系统在持续不间断运行、维护和发展过程中,始终能提供令人满意的服务的能力。这是软件作为信息社会基础设施的必然要求。同时,为满足各类应用快速增长、新技术不断涌现的需求,软件系统需要具有开放扩展能力,即能集成各种异构的技术及子系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应及调控机制,以及个性化服务的定制等。
      (四)生态观
       软件的开发、运行、维护和使用涉及三大类元素,包括软件制品(包括开发态和运行态)、软件涉众(包括开发者、使用者和维护者等)和软件基础设施(包括承载软件制品开发与运行等活动的软件基础设施等)。这些元素彼此作用、互相依赖,形成复杂的生态系统,需要用生态化的观点去理解和研究。生态系统可以从下述维度来刻画。
       首先,软件生态系统的关键元素是软件涉众、软件制品和软件基础设施,
三者互相融合、依赖和影响。软件涉众之间、软件制品之间、软件基础设施之间存在各种依赖,网状的依赖形成各种供应链,而软件涉众、软件制品和软件基础设施之间因为彼此依存也存在各种影响。生态的要义在于供应链的形成和各种影响的相互作用需要达到平衡。
       其次,软件生态系统具有深刻的社会性,开发者和用户都是社会体,参与或主导生态的企业也有很强的社会性。参与生态的社会群体如何协作以建立生态并不断适应变化以支持可持续生态是软件生态的核心挑战。群体关系(对立、独立或互补)之间的平衡是秩序之本,非平衡是运动变化之源。
       最后,软件生态系统是由人类智能和机器智能交互并融合而实现的。人类智能体现为分布在全球的开发者和用户;机器智能体现为支撑分布式开发和使用的软件工具与基础,支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。通过众多的个体认知的汇聚,以及商业和宏观调控角度的战略调控,人类智能和机器智能相互协作、补充,并向群体混合智能方向发展。软件从过去的个体作坊开发,到不同组织内或组织间人员混合参与的组织化开发,再发展到数以万计互相依赖的软件形成的供应链和庞大的生态系统下的社会化开发。其转变给软件开发带来前所未有的创新可能。相应地,生态观对软件方法学带来显著的变化。软件和软件学科需要从以往关注个体软件的构建和运维转变到关注有广泛社会参与的软件体系的构建、运维和成长,以及软件生态的平衡和适应各种变化的可持续发展。同时,软件学科与其他学科的交叉性将更加凸显,社会学、经济学、组织学、生物学等学科的理论和发现可用来研究海量软件活动数据隐含的软件生态网络,其发现反过来对其他学科的发展也将很有裨益。
       四、学科研究的主要问题
       软件学科的学科内容主要涵盖软件语言与软件理论、软件构造方法、软件运行支撑、软件度量与质量评估四个方面的内容,而软件范型贯穿其间,使之相互配合形成方法论意义上的有机整体。软件范型的变化将牵引软件技术体系的变化。而上述系统观、形态观、价值观和生态观的新视角将引起软件范型的变化,并辐射到软件开发、运行和度量各个层面方法和技术的变革,进而对软件的整体生态与教育方面产生深刻的影响。
      (一)软件语言与软件理论
       软件语言与软件理论方面将着力解决如何建立适应人机物融合的软件范型基础这一基本问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,拓展可计算理论传统研究的内容范围,特别是需要支撑大数据与持续计算的算法和计算复杂性理论,以及在新的硬件架构(异构多态)和计算平台(如量子计算平台)的计算理论和程序理论等。与软件理论紧密相关,软件语言将重点研究泛在计算各种抽象,构建领域特定的程序设计语言,探索语言演化和生长机制,以及基于“语言工程”的软件设计方法和支撑环境,共同奠定软件范型发展的理论和语言基础。
      (二)软件构造方法
       软件构造方法将研究人机物融合场景下的软件开发范型和技术体系,换言之,即研究面向应用场景需求以及如何“软件定义”人机物融合的“场景计算机”。面向高效、高质量、低成本的目标,软件构造的技术方法和组织模式需要应对复杂场景分析与建模、群体智能开发、人机协作编程、开发运维一体化等一系列挑战,亟待新方法和技术的发展。
      (三)软件运行支撑
       软件运行支撑将向支撑人机物融合、具有“资源虚拟化”和“功能可编程”特点的泛化运行平台发展,满足作为社会基础设施在规模、适应、演化、安全、效能等方面的诸多严格要求。未来的泛在操作系统与运行平台,需在软件定义的新型运行平台架构、泛在资源的高效虚拟化和调度方法、软件系统持续适应演化的支撑机制、人机物融合过程中的安全与隐私保护等关键问题上寻求突破。
      (四)软件度量与质量评估
       软件度量与质量评估是软件学科的科学观察和工程构造相交融的重要方面,其未来的重要变化是在复杂系统和软件生态层面的科学观察,并以此为基础推进软件开发和运行层面的持续发展。一方面,将通过有效的度量和分析,理解和利用大规模代码及项目的供应链行为,研究个体学习和群体协作,并探索软件生态的形成和可持续机制机理等。另一方面,以应用场景的价值牵引,带动软件质量和保障技术的发展成为重要趋势,未来突破的重点将在数据驱动的智能系统质量保障、人机物融合场景下的系统可信增强、大规模复杂系统安全缺陷检测、物联网环境下的系统安全保障等方面。“以数据为中心”是人机物融合时代的最为突出的特征,数据工程和数据管理是未来软件构造和运行支撑的共性沉淀。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。在数据管理方面,需要研究如何管理大数据,特别是如何利用新型硬件混合架构来实现大数据的管理。

       软件学科的发展呈现纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局。学科发展的途径将呈现为:先在已有共性方法上发展领域特定方法,然后反馈并带动新型共性方法的发展。在人机物融合及“软件定义一切”的大背景下,以卫星系统、流程工业控制系统、智慧城市系统、无人自主系统等为代表的重大领域都蕴含着平台再造与整合的发展机遇,即以软件作为万能集成器对相关系统原有的软硬件和服务资源进行解构,然后以平台化的方式进行重构,从而建立软件定义的融合发展平台。此外,高性能 CAE 软件系统等专用工程软件也是软件学科的重要关注点。此类软件用于支撑高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计,具有重大应用价值;其高效能、高精度、高定制的需求也将推动软件技术的发展。软件学科的发展离不开软件教育体系、内容、方法、手段的变革。软件教育需要构建包括顺应“软件定义一切”发展趋势的通识教育、针对人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育和继续教育的完整体系,并建设发展相应的教育理念和方法。


COPYRIGHT版权所有 中国软件工程与电子技术发展协会