214 lines
45 KiB
TeX
214 lines
45 KiB
TeX
% !TEX root = main.tex
|
||
|
||
%\section*{总论}
|
||
%软件承载着文明\footnote{“Our civilization runs on software.” —C++之父Bjarne Stroustrup.}。
|
||
|
||
%\footnote{这里所谓人是指系统中的人类参与者及其社会关系,机是指计算平台和信息空间的数据、软件服务等各种资源,物是指数字化的设备装置和可传感的物品。或曰“信息-物理-社会”三元融合系统。}
|
||
|
||
如第一章中所述,软件是以计算为核心手段实现应用目标的解决方案;软件学科是研究以软件求解应用问题的理论、原则、方法和技术,以及相应的工具支持和生态环境的学科。也就是说,软件学科本质上是一门方法论学科~\cite{Wirth:2008:BHS:1449571.1449577}。其带来的是一种人类思维方式的创新,以人机共融的方式延伸了单纯的人脑思维,形成了一种前所未有的创造力。随着软件应用范围的扩张、软件计算平台的泛化和软件方法技术的发展,软件学科的边界不断拓展,内涵不断深化。本章总论“软件作为基础设施”这一发展趋势,进而以系统观、形态观、价值观和生态观四个视角探讨软件学科的方法论新内涵。
|
||
|
||
\section{软件作为基础设施}
|
||
|
||
从人类社会信息化的角度看,软件的基础设施地位具体表现为两个方面。一方面,软件自身已成为信息技术应用基础设施的重要构成成分,以平台方式为各类信息技术应用和服务提供基础性能力和运行支撑。另一方面,软件正在“融入”到支撑整个人类经济社会运行的“基础设施”中,特别是随着互联网和其他网络(包括电信网、物联网等)的不断交汇融合,软件正在对传统物理世界基础设施和社会经济基础设施进行重塑,通过软件定义的方式赋予其新的能力和灵活性,成为促进生产方式和生产关系变革、产业转型升级、新兴产业和价值链诞生与发展的重要引擎。因而,计算成为了人类与物理世界互动的中介,软件成为了创造新文明的载体,软件“赋能、赋值”的作用正在被加速和加倍放大,对人类社会的运行和人类文明的发展进步起到重要支撑作用。大规模、高效率地生产高质量的软件产品和提供软件服务的能力已成为社会经济升级发展的新动能,成为国家的一种核心竞争力。
|
||
|
||
软件成为人类社会基础设施是社会信息化进程不断加深的必然结果,其技术基础是“计算的泛在化”和“软件定义一切”。
|
||
|
||
“计算的泛在化”是指计算变得无处不在而又无迹可寻。互联网和其他网络的交汇融合,进一步推动了人类社会、信息空间、物理世界的融合。计算设备、网络设备、存储设备与各类传感器设备、判断与决策设备、执行设备所形成的数量众多、大大小小的平台互联融合,成为一体;与此同时,对于所服务的用户而言,计算自然融入人类生产、生活环境和过程之中,无需关注,不着痕迹,形成新的人机物融合计算环境。人机物融合标志着我们从终端互联、用户互联、应用互联开始走向万物互联,信息技术及其应用更加无处不在,“大数据”现象随之产生,信息化的第三波浪潮正在开启。
|
||
|
||
“软件定义”是指软件以平台化的方式,向下管理各种资源,向上提供编程接口,其核心途径是资源虚拟化以及功能可编程。需要注意的是,“软件定义”与“软件化”是不同的两个概念。“软件化”仅仅描述了根据业务需求来开发具有相应功能的软件应用系统的过程;而“软件定义”则是一种技术手段,其关注点在于将底层基础设施资源进行虚拟化并开放API,通过可编程的方式实现灵活可定制的资源管理,适应上层业务系统的需求和变化。“软件定义一切” ( Software Defined Everything,简称SDX)则将软件平台所管理的资源和提供的编程抽象泛化到包括计算、存储、网络、软件服务等在内的各类计算资源、包括各种数字化机电设备和可传感物体对象在内的各类物理资源、乃至可通过激励机制调配的人力资源。软件定义可递归分层,形成一种生长式、演化式的可扩展体系。这种软件定义的人机物融合平台逐渐呈现了“泛在操作系统”的发展方向。
|
||
|
||
“软件定义一切”实质上是通用可编程思想在各个领域的应用,是一种以软件实现分层抽象的方式来驾驭复杂性的方法论。数字化使得几乎所有的设备都包含了独立或者集成的计算设备,完成“感知、判断、决策、执行”闭环的部分或者全部。这个改变是信息化发展的基础,使得现代设备或装置往往都具备编程控制的能力,推动了人们基于通用计算机的思维架构(人们将其总结成计算思维)来理解和求解各领域问题。可见,“软件定义一切”意味着需要构造针对“X”的“操作系统”。未来的面向人机物融合的软件平台,就是对海量异构基础设施资源进行按需、深度软件定义而形成的“泛在”操作系统(Ubiquitous Operating System)。
|
||
|
||
\section{软件学科范畴的拓展}
|
||
|
||
作为一门方法论学科,软件学科拓展的驱动力来自软件应用范围扩张、计算平台泛化和软件方法技术本身发展三个方面。
|
||
|
||
从软件应用范围扩张的角度看,正如上文所述,计算日益变得无处不在,“人-机-物”三元融合不断深入。在此趋势下,从宏观上看,软件从实现计算的工具逐步转变为信息社会不可或缺的基础设施;从微观上看,软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的“人-机-物”各类资源,实现应用价值。软件作为系统解决方案,涉及的范畴扩展到各类物理设备、物品和人类的主观体验与价值实现;因而软件学科无可避免地涉及到控制科学、系统科学以及心理学、管理学、社会学等范畴的问题,并以软件学科自身的方法论将其内化和拓展。
|
||
|
||
从软件依赖的平台泛化的角度看,计算平台已经从传统的集中式单机发展到并行与分布式平台,再到今天的“云-边-端”异构多态计算平台。这个网络化计算平台不仅包括传统的互联网,还融合了传感网、物联网、移动互联网、社交网等,标志着计算平台不断向物理世界和人类社会快速延伸,形成了一种泛化的计算平台。软件定义技术为这个“人-机-物”融合的平台提供可编程计算抽象。同时,这个计算平台也使得关于“人-机-物”融合的应用场景的海量数据不断被收集、处理和积累,成为平台上的重要资源。软件作为应用解决方案,在这个计算平台之上利用数据资源,协同人机物,实现应用价值;同时也在这个平台上提供服务并进一步积累数据,从而不断拓展这个计算平台。
|
||
|
||
从软件方法技术发展的角度看,当前软件的基本形态、所实现的逻辑推理形式、软件开发的隐喻(metaphor)模式、软件的生态环境、元级方法论都在发生深刻的改变。软件的基本形态从计算机硬件的附属品到独立的软件产品,再到云化的软件服务,继而转变为无处不在而又无迹可寻的泛在服务。软件所实现的逻辑推理形式在基于规则的演绎之上发展出数据驱动的归纳,统计机器学习技术就是后者的典型表现。软件开发的隐喻模式\footnote{即软件开发从问题空间向解空间的映射模式}经历了从实现数学计算到模拟物理世界,再到虚实融合再创造的转变。对软件作为客体对象的考察从以个体及其生产使用为主扩展到在生态的层面上考虑软件及其利益相关者群体的竞争、协作等社会性特征。在元级方法论层面上,正从以还原论为主向系统论发展,软件作为解决方案越来越多地被视为开放环境中的复杂适应系统,而不是封闭规约下的确定行为系统。
|
||
|
||
随着学科内涵的不断拓展,软件学科逐渐成为一门基础学科,并向其他学科渗透。所谓基础学科,是指某个拓展人类可认识改造的世界疆域之不可替代的知识体系,具有独特的思维方式与方法论,为其他学科发展提供不可或缺的支撑。软件学科日益呈现出这些特征:软件是把物理世界拓展为信息-物理-社会融合世界的主要手段;与此同时,“软件定义”赋能的计算思维有可能成为继实验观察、理论推导、计算仿真、大数据分析之后的新的综合性研究手段,尤其是为以信息-物理-社会融合系统为对象的科学研究提供了赖以运作的理论基础和实践规范。而以软件知识为主体的计算机教育已经成为包括我国在内的多个国家的国民基础教育课程体系的主要内容之一。
|
||
%其一个标志是其基础内容进入国民基础教育课程体系。
|
||
|
||
\section{软件科学的新理解}
|
||
|
||
一般而言,驾驭系统固有复杂性的基本途径是有效抽象和层次分解。与其他人工制品不同,软件是纯粹的逻辑产品,原则上只受能行可计算的限制,可以实现最纯粹的抽象,也可以支持最具扩展性的层次分解。回顾软件学科的发展,贯穿始终的主题一直都是围绕建立抽象、实现抽象和使用抽象,以软件范型为基础,软件构造方法、软件运行支撑、软件度量和质量评估相互促进、螺旋上升的过程。由于在应对复杂性方面具有独特优势,软件成为了各类复杂应用系统的“万能集成器”,也成为了各类人造复杂系统的核心,并且这些系统的复杂性往往集中体现为软件的复杂性。
|
||
|
||
在软件作为基础设施、软件定义一切的背景下,软件进一步成为构造开放环境下复杂系统的关键。在展望软件学科在新时代所面临的挑战与机遇之前,我们首先在元级方法学,也就是研究方法学的层面上讨论观察软件学科内涵的若干新视角,包括以驾驭复杂性为目标的系统观、以泛在服务和持续演化为特征的形态观、以使用质量为核心的价值观、以及关注群体协作平衡的生态观。
|
||
|
||
\subsection{系统观}
|
||
|
||
所谓软件学科的系统观,有三层含义。
|
||
|
||
第一层含义是复杂系统。现代软件系统的复杂性体现在其前所未有的代码规模、软件处理的数据量、软件用户量和使用的多样性、软件通过网络形成的连接量和种类、涉及承载运行的计算和物理设备量和种类等方面,也体现在其所处环境的开放性和由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭静态环境下的确定行为系统向开放动态环境中的可适应、可成长的系统、从单体系统向系统之系统转变。
|
||
|
||
第二层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法,超越还原论。
|
||
|
||
第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部分,上升到关注“人-机-物”融合的整个系统的价值实现。软件定义一切的趋势使得软件不仅仅是系统中的信息处理工具,而且也是管理各类资源、融合人机物的“万能集成器”,是实现应用价值的整体解决方案。
|
||
|
||
\subsubsection{系统观下的软件学科发展}
|
||
|
||
软件作为人类智力产品,无论是软件制品本身,还是软件开发、使用过程和场景都与万物和人类有着紧密关联,其开发和运行的网络化、服务化\cite{Mei:2016:INS:3086926},以及软件基础设施化都触发了计算平台、软件生产方式和运行方式的变革。软件创新从个人、组织智慧发展到群体智慧创新。软件科学与自然科学、社会科学等各领域产生了千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为技术-社会系统(Socio-technical System)。人机物融合的软件系统,其复杂性本身就呈现在系统乃至系统之系统的层面上,综合性和系统性也愈来愈强。系统观要求软件科学体系需破除传统还原论的思维藩篱。
|
||
|
||
近年来,软件科学在系统观方向上进行了不少探索,包括:基于复杂网络来认识大规模软件系统的整体性质、基于多自主体的软件系统和方法、复杂自适应软件与系统、群体化软件开发方法等。网络化和大数据催发了融合软件系统与系统论研究的切入点,数据驱动的软件性能优化甚至软件设计辅助初显端倪。通过对软件代码大数据特别是动态运行大数据的分析,软件性能优化在云计算平台等一些特定场景中获得很大成功。对于数据驱动的软件设计,人们不再遵循传统的自顶向下、分而治之、逐步精化的经典还原论法则,而是采用一种基于输入输出的黑盒的数据描述,训练出深度神经网络,充当所需要的软件部件。这种基于深度学习的方法从海量的样本中归纳出神经网络,其泛化能力可视为通过神经元系统的涌现而达成的功能。然而,这些研究仍处于方法层次,还未达到方法论的层次,即关于研究问题需要遵循的途径和研究路线,也可视作具体方法的元级层次。
|
||
|
||
新的软件方法学的关键在于如何认识因果和相关。因果观是有前提的,相对的;相关性是绝对的;探寻因果是认知的必需,也是追求。软件发展在人机物融合时代,人在回路、“拟人化”计算(Human Computation)、人机共融等需要关于软件规律的元级方法论创新。
|
||
|
||
在软件系统的建模方面,软件将从单纯的信息处理向“场景计算”发展,这里的场景包括物理环境和社会环境。软件与软件所处的环境或应用场景共同决定了软件的特性和价值,包括功能、性能、安全、可靠等。软件将作用于环境,并且可以改变自身结构以适应环境变化和影响环境的需求。
|
||
|
||
在软件系统的机理方面,软件的语义将由传统的还原论形式语义方法,向多尺度、可演化的抽象方向发展,组合方式将从传统的静态组合方式向动态可演化的、具有涌现特性的方式发展,建立软件微观行为与宏观行为的辩证统一。面向人机物融合的认知,软件作为人工智能或者“智能+”的承载,将深化复杂自主系统的智能行为理论和方法,软件定义将成为人机物融合系统中学习赋能(型)资源的管理途径。
|
||
|
||
软件科学的发展也将促进系统论和系统学的发展。在软件定义一切的时代,软件成为复杂适应性系统认知的载体和实验平台,而软件发展中形成的以形式化体系为基础的规则驱动软件理论,高性能计算之上建立的模拟仿真技术,与进入智能化阶段形成的大数据驱动的软件方法,为形成还原论和整体论的辩证统一奠定了良好的基础,软件走向人机物融合更是为系统论和系统学的发展提供了实践探索的大场景。
|
||
|
||
\subsubsection{系统观下关键科学问题}
|
||
|
||
软件学科的系统观形成、并与系统学的交叉融合将经历一个长期的阶段。当前软件学科所面临的一个关键科学问题是对于人机物融合系统的建模与分析,表现为两个方面:一是系统论驱动的复杂软件系统的观察和度量方法;二是兼容离散、连续、实时等不同特性的模型表示方法及其工具支持。在操作层面上,系统观下软件方法学的研究有紧密联系的两个抓手:
|
||
|
||
\begin{enumerate}
|
||
|
||
\item 以复杂适应性软件系统为抓手,形成元级反射和学习赋能相结合的元级化理论,以此研究泛在操作系统的基本理论、关键技术和实现平台,为人机物融合的资源和应用场景建模提供计算的平台抽象;
|
||
|
||
\item 推进数据驱动软件开发方法的发展,打通传统软件方法与数据驱动软件方法,突破大数据分析的可解释性和常识推理问题,为涌现现象规律的认识、解释、设计建立基础理论和方法。
|
||
|
||
\end{enumerate}
|
||
|
||
展望未来,多自主体形成的协同与自组织以及自适应结构和能力、网络化产生的大数据与数据语义的复杂网络,将是软件系统在传统规则驱动基础上走向人机物融合超大规模系统的基础。软件作为复杂系统乃至复杂巨系统,软件科学将与系统学共同发展—软件方法学将吸收系统论成果,并支撑系统论和系统学的发展。
|
||
|
||
\subsection{形态观}
|
||
随着计算机技术的发展和计算机应用的不断深入,软件的外在形态逐步从硬件附属物、独立的软件制品发展到网络化服务。与之相对应,软件范型也经历了无结构、结构化、面向对象、基于构件、面向服务的发展历程。当前,软件范型进一步向网构化以及数据驱动的方向发展。其应用形态在空间维度上,随着软件应用的范围越来越广、对于人类生活和现实世界的渗透力越来越强,呈现出泛在化的趋势;在时间维度上,随着应用上下文环境及用户需求的变化不断适应和演化,呈现出持续成长的趋势。
|
||
\subsubsection{软件应用的泛在化}
|
||
计算和信息处理早已通过各种移动设备、嵌入式设备以及各种传感器渗透到了我们日常生活的方方面面,并通过各种通信技术实现了广泛的设备互连和信息互通。各种软件应用以嵌入式的方式实现预定义的信息处理和通信功能。近些年来,信息技术呈现软件定义一切的发展趋势,即软件全面接管人类社会以及物理社会中的各种资源(包括物理、计算和人力资源),以各种形式的接口对外提供服务。这一发展建立在软件的云化与服务化基础上,这使得软件的核心能力脱离了固化的用户界面和使用环境,可以按需灵活获取并组合。另一方面,硬件专用化使得运行在各种面向特定用途的硬件设备上的软件应用能够获得更好的执行效率。
|
||
|
||
面向最终用户的软件应用将越来越多地以人机物融合的形态出现,即软件以平台化、定制化和集成化的方式融合人、机、物三个方面的资源和服务从而满足用户的各种需求。这种新型的人机物融合应用具有泛在化、社会化、情境化、智能化的特点,即:软件应用无处不在同时又无迹可寻;所融合的人机物资源具备社会属性,来自于不同所有者并以社会化的方式产生价值交换;软件应用面向最终用户所处的情境按需构造,以满足即时的用户需求为目标;软件应用在智能化技术基础上,以非预设的方式按需聚合人机物资源并进行定制。
|
||
\subsubsection{软件应用的持续成长}
|
||
越来越多的软件都已具备面向动态变化环境的适应性和面向需求变化的演化性。软件通过监控、分析、决策、执行的元级反馈环路对其结构和行为进行调控,并通过不断演化来保持其可用性。快速响应变更请求并实现持续的软件演化是软件产品保持竞争优势的一个必要条件。在过去的几十年中,软件开发的主流方法正在从以瀑布模型为代表的计划驱动的方法演变为以敏捷开发为代表的快速迭代开发方法。基于云的软件应用以及软件开发平台的发展进一步催生了开发运维一体化(DevOps)的技术趋势。由此反映出软件演化中的反馈和迭代周期越来越短,演化越来越频繁。另一方面,越来越多的软件应用以服务化和云化的方式运行,在提供服务的同时持续收集用户的行为及其反馈,并在云端汇聚形成软件用户大数据。这种不断积累的用户数据为软件应用的持续优化和改进提供了一种数据驱动的新途径。数据驱动的软件演化方式反映了用户行为和体验的反馈已经在一定程度上成为掌握软件演化方向的主导力量。软件将逐步从开发人员主导的被动演化转变为基于内生机制的持续生长。
|
||
|
||
\subsubsection{形态观下的软件学科发展}
|
||
在软件定义一切以及人机物融合的发展背景下软件应用的泛在化和持续成长的新特征对于软件学科将产生多个方面的影响。
|
||
|
||
首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。因此,最终用户必须具备基于计算思维的问题解决方案规划和构造能力。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
|
||
|
||
其次,适应泛在而专用化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移和优化。针对通用目的开发的软件需要不依附于硬件的长期生长演化能力,并具备面向不同专用硬件和平台的高效定制和裁剪能力。
|
||
|
||
再次,内生的持续成长能力将成为软件的基本能力。除了自适应能力外,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长不仅意味着通过各种智能化方法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成以及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动的方式进行设计,并实现自演化和自生长。
|
||
|
||
最后,软件与人将在不断汇聚的群体智慧中实现融合发展。软件的覆盖面越来越广、渗透性越来越强,最终用户对于软件的依赖也越来越强。由此,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智慧。这种群体智慧注入软件后又将服务于每个最终用户,使得他们能够在各种应用场景中以更加智能化和个性化的方式满足自身的需求,从而使得软件在使用中越来越有“灵性”和“人性”。未来的软件学科及相关研究需要摈弃“人”与“软件”二元分离的思维定式,更加自觉的考虑人机共融,不仅考虑“人因”,更要考虑“群智”。
|
||
|
||
\subsubsection{形态观下关键科学问题}
|
||
|
||
形态观下软件学科面临的核心科学问题是如何面向最终用户场景、通过人机物资源的按需融合与自适应、自演化持续满足用户的多样化需求。这一问题的解决有赖于编程语言及系统软件支撑、软件构造方法、软件演化与维护方法等多个层面的方法和技术发展。
|
||
|
||
\begin{enumerate}
|
||
|
||
\item 最终用户是人机物融合应用的使用者,同时也直接参与、在其所见的人机物资源视图上构造应用。这方面涉及的科学问题是如何面向最终用户提供基于软件定义的建模方法并提供相应的编程模型和语言,技术层面包括如何发展示教编程(programming by demonstration)、图形化编排等面向非专业开发者的最终用户编程方法以及相配套的工具环境。
|
||
|
||
\item 软件应用的泛在化要求各种面向通用目的开发的软件以解构再重构的方式,以用户为中心按需分布到泛在化、专用化的计算设备和运行平台上,从而适应应用按需融合与自适应、自演化的要求。这方面的科学问题在于如何为“解构再重构”建立抽象,技术层面包括:如何通过新型编译器、翻译器及其他系统软件工具支持遗留软件系统实现面向不同专用硬件和平台的高效定制和裁剪;如何构建新型的泛在操作系统、支持泛在环境下软件部件的高效动态部署和运行。
|
||
|
||
\item 软件应用的持续生长要求软件以更加柔性的方式进行定义和构造,同时以更加智能化的方式实现软件的动态构造和更新。这方面的科学问题在于如何构建软件适应性演化、成长性构造的体系结构和核心机理,技术层面包括:如何通过运行时模型实现软件功能和实现策略的运行时定义;如何基于用户行为和反馈数据实现对于软件用户满意度及环境适应性的评价;如何根据用户目标、代码上下文及运行时反馈实现程序的自动合成和适应性调节。
|
||
|
||
\item 软件作为“万能集成器”扮演着人机物融合时代万物互联平台的重要角色,向下通过软件定义的方式接入各种人机物资源,向上支撑面向最终用户的人机物融合应用场景的实现。这方面的科学问题在于如何支持跨越人机物三元空间的统一的数据流、控制流和状态空间抽象及运行时代码自动生成,技术层面包括:如何将传统软件系统中局限于确定系统边界之内的人机物交互建模与实现方式扩展到面向开放系统的场景;如何面向用户需求实现人机物资源的统一调度并确保开放环境下的可信交互。
|
||
|
||
|
||
\end{enumerate}
|
||
|
||
\subsection{价值观}
|
||
传统的软件质量观以软件制品为中心,人们主要通过客观度量软件系统来评估软件。新时代下,软件制品的内外部质量要求进一步强化和扩展。更重要的变化是,软件泛在服务的趋势强化了软件作为人类价值载体的特征,需要在传统的质量观的基础上发展以人为中心的价值观。
|
||
\subsubsection{从质量走向价值}
|
||
传统的软件质量模型着重于系统质量,包括内部质量和外部质量,而对使用质量关注不多。在人机物融合的趋势下,软件形态和生态特征的变化促使我们从价值的角度重新思考软件质量的问题。一方面,软件的外在形态已经发展为无处不在的网络化服务,面向具体应用场景按需组合,软件系统的边界进一步模糊,这使得用户的关注点从确定边界的单一系统的质量转换为特定场景下的的总体应用价值。另一方面,软件对人类社会经济生活的渗透性越来越强,软件的运行结果以及其中所蕴含的判断逻辑所带来的社会影响越来越大,使得其中所体现的价值超越个体的范畴并上升到整个社会的观点和看法。
|
||
|
||
以上这些都促使用户对软件的关注点从质量走向价值。人类价值观,指的是“基于人的一定的思维感官之上而作出的认知、理解、判断或抉择,体现了人、事、物一定的价值或作用”,价值观具有稳定性、持久性、历史性和选择性等特点。软件通过一系列价值要素体现了主观的人类价值观,这些价值要素包括隐私性、安全性(Safety \& Security)、公平性和伦理道德等。传统的软件质量观转变为“以软件制品为基础,以用户体验为中心,以社会价值为导向”的价值观。在价值观主导下,不同用户会有不同的软件预期,也会使得同一软件系统具有不同的价值;软件系统体现的价值观,在人机物融合的发展背景下将作用于物理世界,影响物理世界的价值走向。
|
||
\subsubsection{价值观下的软件学科发展}
|
||
软件会有多个不同的角度来评价其价值。在可信性、安全性、伦理和持续性等软件价值要素上的研究将会持续推动软件学科的发展。
|
||
|
||
(1)可信性
|
||
|
||
人机物融合使得整个社会系统遍布软件,“软件无处不在”,软件系统的可信性对于整个社会系统至关重要。软件系统的可信性,要求在软件开发、运行、维护、使用等过程采取有效的措施和方法确认其满足人们的普遍要求和期望,它体现了新时代软件的价值取向。软件系统的可信性,包括软件本身可信和行为可信两个方面。软件本身可信,指的是软件的身份和能力可信,即:软件开发过程提供可信证据(如关于软件质量的过程记录和评审、测试结果等),对软件及其组成成分的来源和质量进行自证;软件行为可信,指的是软件运行时行为可追踪且记录不可篡改,即:通过监控软件运行过程并控制其对周围环境的影响,使得包含该软件在内的整个系统的对外表现符合用户要求。软件形态日趋多样,自身以及运行环境的复杂性越来越高,加剧了软件可信面临的挑战。
|
||
|
||
(2)安全性
|
||
|
||
安全性要求为人类活动和生存环境提供必要的安全保障,包括功能安全(Safety)和信息安全(Security)。功能安全是指能及时有效地避免给人员、设施、环境、经济等造成严重损害,信息安全是指系统保护自身免于入侵及信息的非法获取、使用和篡改,具体包括机密性、完整性和可用性三方面。本书将两种安全性合二为一,统称为安全性(Safety \& Security)。传统软件质量观将安全视作系统质量的一部分,强调确定边界之内的系统安全性。在人机物融合的趋势下,软件已经广泛并深入渗透到人类社会生活的方方面面,与人形成了密切的交互关系。换言之,泛在计算平台上软件与软件、软件与人的交互无处不在,软件个体可影响整个泛在网络计算平台的行为;软件个体的漏洞等故障很容易扩散(传播)。这些也导致了信息安全问题很容易转化为防危安全问题。软件作为基础设施,参与并掌控了很多关键领域的资源,其安全性威胁会给整个系统甚至人类社会带来致命的威胁。因此,安全性随着软件成为基础设施的现状变得愈发重要。
|
||
|
||
(3)伦理
|
||
|
||
作为人类价值的重要载体,软件的行为体现了人类价值观;由于软件泛在化,导致人类价值观往往通过软件影响人类社会。软件与人从以往的“使用”关系变为了“伙伴”关系。因此,软件系统的行为应符合社会道德标准,不会对个人和社会产生负面结果,这种规范称为软件系统的伦理。社会道德定义了一定时间区域内人们行为规范,可具体表现为无歧视、尊重隐私、公平公正等,并最终体现于软件系统的具体行为。因此,软件系统的伦理,也体现于软件行为的上述方面,并需要通过软件开发和运行的诸多机制进行支持。
|
||
|
||
(4)持续性
|
||
|
||
软件系统成为支撑社会经济运行的基础设施,掌控了国民经济和社会关键基础资源,需具有持续提供服务的能力。软件系统提供服务的可持续性(Sustainability),指的是在持续不间断运行、维护和发展过程中,面对各种突发异常事件,仍能提供令人满意的服务的能力。软件支撑的基础设施服务,为满足各类应用快速增长、新技术不断涌现的需求,需要具有开放扩展能力,即能集成各种异构的技术及系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。显然,这种开放体系架构常常引入系统设计的脆弱性和质量隐患,从而给持续提供服务带来挑战。
|
||
|
||
\subsubsection{价值观下关键科学问题}
|
||
软件价值观不仅囊括传统的软件质量观,而且凸显了新时代下软件系统对物理世界的使能作用带来的影响,强调通过人的主体作用避免或减少软件系统违反人类价值观。具体地,价值观强化了可信性、安全性、伦理、持续性等具有新时代特色的价值要素,这些价值要素与软件开发运行维护过程的交融将经历一个长期的阶段,其带来的关键科学问题包括四个方面:
|
||
|
||
\begin{enumerate}
|
||
\item 软件以何种方式承载人类价值观?具体地,如何通过需求、设计等阶段获得项目特定的价值关注面,将其细化并融合于软件开发过程(包括软件的分析、设计、实现和测试等环节)中?
|
||
|
||
\item 如何定义复杂开放软件的价值度量模型,并以此为基础通过开发过程及运行环境中的证据收集评估软件的价值要素?在开放环境下,价值要素的定义也是动态多变的,如何在系统开发和运行中支持动态的价值定义?
|
||
|
||
\item 如何在复杂软件开发和运行过程中引入持续的价值保障机制,使得作为基础设施的软件系统在各种内外部非确定动态因素影响下不仅具有持续性,而且在演化成长中持续保障价值实现?
|
||
|
||
\item 如何应对复杂人机物融合环境下多元价值观以及多方利益相关者所带来的价值冲突?如何通过软件的自适应和自演化实现动态的价值调整?
|
||
|
||
\end{enumerate}
|
||
|
||
% 3) 如何在泛在网络计算平台下,系统地从硬件层、系统层、应用层等全栈来考量软件安全性(Safety\&Security)?
|
||
|
||
\subsection{生态观}
|
||
软件的开发、维护和应用所涉及的各种元素(包括开发者、用户、制品、相关组织和企业,以及软件基础设施等)彼此交互、互相依赖,逐渐形成复杂生态系统,需要用生态化的观点去理解和研究。生态化是软件的强大渗透力所带来的必然结果:一方面软件活动延伸到了个体、群体和社会;另一方面软件所涉及的各种元素之间产生了越来越多的依赖性、相关性和相互作用。
|
||
\subsubsection{软件生态系统}
|
||
“人-机-物”三元融合的新型应用模式涉及到广大社会群体,涉及面广,分工精细,不仅需要各有所长的各种企业和个体参与,也使得它们可以根据其本身特点和业务诉求参与到开发、应用及其支撑的各个环节,联合形成生态。
|
||
|
||
开源是一类典型的软件生态系统。开源以燎原之势渗透到了软件产业的各个领域。目前大量的软件开发都复用了开源代码,几乎所有的IT企业都在使用开源代码,这使得软件制品、上下游项目、软件涉众的经验和技能等方面的依赖无处不在。一些大规模复杂软件(尤其是基础软件)例如Linux内核、Android、OpenStack等,因其基础性和流行度涉及到众多厂商的利益,因此也会吸引庞大的群体(包括企业和个体)在其开发和应用市场中扮演不同的角色,形成生态。
|
||
|
||
总的来说,软件生态系统是由软件活动(开发、运行、维护、应用等)中各类元素及其环境组成的、彼此交互和依存的体系。生态系统可以从下述几个维度来刻画。%%摘要中完全引用了下述三点
|
||
|
||
首先,多元素交互(开发者、用户、制品及相关组织和企业,以及软件基础设施等)是软件生态系统的最典型特征,而且交互的元素具有深刻的社会性(例如核心参与者——开发者和用户——都是社会体)。元素关系主要体现为协作、竞争和混合并保持生态的平衡。系统中要素关系(对立、独立或互补)之间的平衡是秩序之本,非平衡是运动变化之源。
|
||
|
||
其次,生态系统的关键元素是软件涉众、制品和基础设施,三者互相融合、依赖和影响。个体之间、制品之间、基础设施之间存在各种依赖,网状的依赖形成各种供应链,而个体、制品和基础设施之间因为彼此依存也存在各种影响。生态的要义在于供应链的形成和各种影响的相互作用需要抵达平衡。
|
||
|
||
|
||
第三,生态系统是由人类智能和机器智能交互并融合而实现的。人类智能体现为分布在全球的开发者和用户;机器智能体现为支撑分布式开发和使用的软件工具与基础设施,支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。通过众多的个体认知的汇聚,以及商业和宏观调控角度的战略调控,人类智能和机器智能相互协作、补充,并向群体混合智能方向发展。
|
||
|
||
\subsubsection{生态观下关键科学问题}
|
||
软件从过去的个体作坊开发,到不同组织内或组织间人员混合参与的组织化开发,再发展到数以万计互相依赖的软件形成的供应链和庞大的生态系统下的社会化开发。其转变给软件开发带来了前所未有的创新可能。同时,规模指数级增长的项目及其之间庞杂的依赖关系使得供应链复杂度激增,进而给软件开发和应用及市场带来诸多挑战。
|
||
|
||
第一,个体参与生态系统的学习成本进一步增大。首先因为软件之间广泛存在的依赖和供应链关系使得掌握一个新的软件需要学习别的软件。例如,对某个软件进行调试需要学习的相关软件依赖包可能会很多。其次,复杂依赖关系带来了新的问题,涉及更多的学习内容。
|
||
%例如,不同开源项目遵循相应许可证(License)的约束,并且不同许可证之间存在兼容问题,这就要求开发者在借鉴开源代码时需要了解对应的许可证。
|
||
其面临的关键科学问题是:个体如何学习并加入复杂项目和生态?
|
||
|
||
第二,群体协作更加复杂和不可控。群体元素更为多样,不同元素围绕生态中的各种软件活动存在着错综复杂的协作关系,协作行为并非恒定而是不断发展和演化的。
|
||
%例如供应链问题使得开发者需要跨越多个项目去实现目标功能,开发者之间的协作不再拘泥于单个项目。又如具有不同商业目标的公司需要各司其职,互补有无,还需要跟竞争对手建立协作,在商业利益和群体目标之间实现平衡。已有的群体协作机制大多聚焦对单个项目的支持,互相依赖的项目之间因缺少有效的信息沟通与集成机制使得群体协调的复杂度增大。
|
||
其面临的关键科学问题是:复杂生态中群体如何协作,协作行为如何发展?
|
||
|
||
第三,生态可持续性受到的威胁持续增加。软件供应链上的节点是组成生态的关键元素,它们互相依赖互相影响。一个软件的漏洞有可能使得其他依赖该软件的项目面临同样的威胁。
|
||
%例如,影响昭著的Heartbleed漏洞所涉及的OpenSSL项目中的两个文件至少存在于其他六千多个开源项目中。
|
||
各大企业因为软件供应链的存在对软件溯源有很大的需求。然而软件供应链上节点间的依赖关系隐藏在开发活动数据中,看不见摸不着但广泛存在,这就使得软件生态的可持续受到更多潜在威胁。而生态的形成和可持续发展影响到软件甚至信息产业的模式变革和发展。这方面的关键科学问题是:大规模代码和项目的供应链行为如何理解?产业生态如何形成,如何实现可持续发展?
|
||
|
||
尽管有数千万个软件项目及超过一千亿的源代码文件,但人们对软件生态中供应链的形成和发展,及其可能带来的风险和挑战却知之甚少。随着软件生态系统的快速延展,各类供应链关系逐步显现,如开发供应、技术供应、以及产销供应等。供应链中数以千万计的个体开发者、软件项目、公司等围绕软件形成复杂生态的各种活动数据都由软件支持工具记录下来,可以方便的获取,这为公众或者企业自己更好地理解生态的形成和发展,以降低或消除上述生态中的风险、识别其他可能存在的风险提供了一种很好的方法。利用社会学理论对海量数据可视化出来的供应链网络进行分析,可以从个体学习、群体协作、以及生态持续的角度去识别评估风险,进而地更好保障软件生态的可持续发展。
|
||
|
||
综上,生态观对软件方法学带来显著的变化,软件学科跟其他学科的交叉性将更为凸显。软件和软件学科需要从以往关注个体软件的构建和运维转变到关注有广泛社会参与的软件体系的构建、运维和成长,以及软件生态的平衡和可持续发展。
|
||
|
||
|
||
\section{软件学科的发展趋势}
|
||
|
||
本书在第一篇总结了软件学科是由软件语言和理论、软件构造方法、软件运行支撑、软件度量和质量评估等四方面形成有机整体,软件范型的变化将牵引软件技术体系的变化。而上述系统观、形态观、价值观和生态观的新视角将引起软件范型的变化,并辐射到软件语言与理论、软件开发、运行和度量评估等各个层面方法和技术的变革,进而从整体软件的生态与教育方面产生深刻的影响。
|
||
|
||
软件理论和软件语言方面将着力解决如何建立适应人机物融合的软件范型基础这一基本问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,特别是需要应对大规模的数据与计算的算法理论,以及在新的硬件架构(异构多态)和计算平台(量子计算平台)下的程序理论等等。与软件理论紧密相关,软件语言应重点研究领域和应用问题表达和求解的新抽象,加强大数据时代语言对数据处理的支持,以及开发人机物融合的泛在混合系统的编译技术,在领域特定语言和语言工程、多范式程序设计范式融合、软件语言和实现的内生安全等方面奠定软件范型发展的基础。
|
||
|
||
软件构造方法将“软件定义”人机物融合的“场景计算机”,它要在万物互联的平台上持续演进地提供服务,具有自主性、协同性、演化性、情境性、涌现性和可信性等诸多特性。这在软件构造的技术方法和组织模式上均需要新方法和技术,包括:复杂场景分析与建模、软件自适应与自成长、基于人机协作的群智化软件开发、数据驱动的软件自动化、安全可信高度智能的开发运维一体化等。
|
||
|
||
软件运行支撑需要满足软件作为社会基础设施的规模、效能、持续、演进等诸多关键需求,并适应人机物融合的各类资源和应用场景的管理和实现。这将集中反映在未来的泛在操作系统与运行平台方面,需研究支持软件定义的新型运行平台架构、泛在资源的高效虚拟化和灵活调度、复杂软件系统持续适应演化的共性支撑、人机物融合过程中的安全与隐私保护等关键问题。
|
||
|
||
软件度量和质量评估是软件学科的科学观察、工程构造相交融的重要方面。未来的重要变化是在复杂系统和软件生态层面的科学观察并以此为基础开展在软件开发和运行层面的持续发展。以各类软件大数据为核心的度量抽象将揭示
|
||
软件生态如何形成、如何可持续发展的基本规律,进而理解并驾驭大规模代码和项目的供应链及其变化、支持个体学习并加入复杂项目和生态,改进复杂生态中群体的协作。数据驱动和规则驱动将在软件质量与安全保障上发挥重要的作用。
|
||
|
||
“数据为中心”是人机物融合时代的最为突出的特征,数据工程和数据管理是未来软件构造和运行支撑的共性沉淀。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。在数据管理方面,需研究如何管理大数据、特别是如何利用新硬件混合架构来实现大数据的管理。
|
||
|
||
软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局,这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在不同的应用领域,面对系统边界的可伸缩性、系统成分的异构性和系统模型的混成性,需研究各领域的环境建模及其软件定义方法、模型驱动场景感知和认知、异构资源的统一表示和封装、系统学习赋能机制及性能确保、异构模型的融合和验证以及空间分布系统的的时空一致性等关键技术问题,在已有共性方法上发展领域特定方法,并反馈并带动新型共性方法的发展,从而系统综合地把握“以纵带横、纵横交错、落实在横”的学科未来。
|
||
|
||
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。软件教育需要适应“软件定义一切”普及教育的需求,还要在顺应人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育上有新发展。
|
||
|
||
本部分余下各章将讨论学科内各个领域方向所面临的一些主要挑战问题。
|
||
我们大胆预测,软件学科的未来发展将由这些问题上的突破和进展所塑造。
|