根据两个第一章的内容更新摘要。以及一些小修正。
This commit is contained in:
parent
33840df4ef
commit
697e5d4919
|
@ -33,7 +33,7 @@
|
|||
\subsection{软件}
|
||||
|
||||
人们通常把软件理解为计算机系统中与硬件相对的部分,包括程序及其文档,以及相关的数据。
|
||||
但这只是软件的存在形式,其所表达和实现的实质内容是以计算为核心手段实现应用目标的解决方案。
|
||||
但这只是软件的存在形式,其所表达和实现的实质内容是\emph{以计算为核心手段实现应用目标的解决方案}。
|
||||
|
||||
不同于一般物品,软件是一种人工制品,同时也是一种纯粹的逻辑制品。
|
||||
作为一种人工制品,其需以适应其所处环境的方式完成应用目标;作为逻辑制品,其困难不在于物理限制而在于逻辑构造。
|
||||
|
@ -106,7 +106,9 @@
|
|||
度量、评估和预测其质量和效率等指标。软件度量评估通过量化发现软件和技术的规律,并评价解决方案对应用目标的满足程度。
|
||||
这涉及到软件语言、构造和运行诸多方面,通常也将其归在软件工程的主要内容之中。
|
||||
|
||||
这四个子领域是密切联系、相互作用的,贯穿其中的是软件范型。
|
||||
这四个子领域是密切联系、相互作用的,贯穿其中的是软件范型%
|
||||
\footnote{这里的软件范型对应的英文是Software Paradigm。
|
||||
而为遵循习惯,在本书中程序设计和程序设计语言的Paradigm译为“范式”。}。
|
||||
每一个范型为软件工程师(或程序员)提供一套具有内在一致性的软件抽象体系,具化为一系列软件模型及其构造原理,并外化为相应的软件语言、构造方法、运行支撑和度量评估技术,从而可以系统化地回答软件应该“如何表示”、“怎样构造”、“如何运行”以及“质量如何”的问题~\cite{Mei:2016:INS:3086926,}。软件范型的变化将牵引构造方法、运行支撑、度量和质量评估的一系列变化,带动软件学科的发展。
|
||||
|
||||
\begin{figure}[htbp]
|
||||
|
@ -168,7 +170,7 @@
|
|||
\subsection{软件学科发展规律}
|
||||
|
||||
纵观软件学科的历史,可以发现其发展的外在驱动力始终来自于计算平台的发展和应用范围的扩张,
|
||||
而内在驱动力来自于其核心问题的解决,追求更具表达能力、更符合人的思维模式的编程范型,
|
||||
而内在驱动力来自于其核心问题的解决,追求更具表达能力、更符合人的思维模式的编程范式,
|
||||
追求更高效地发挥计算机硬件所提供的计算能力,不断凝练应用共性并沉淀计算平台,同时更好地满足用户对易用性的需求。
|
||||
这是由软件学科的方法论学科本质所决定的。
|
||||
|
||||
|
@ -203,7 +205,7 @@
|
|||
但面临非结构化、海量数据的应用问题后,数据库不再采用严苛的关系模型,转而使用更为灵活的键值对结构、文档模型、图模型等更为契合问题空间的抽象,
|
||||
同时给出这些抽象在大规模分布计算平台上的高效实现。
|
||||
|
||||
\subsection{我国的软件学科与产业}
|
||||
\subsection{我国的软件学科与产业}\todo{可能需要根据第17章更新本小节}
|
||||
我国软件学科起步较早,在几代科学家的不懈努力下取得了一系列的成果。例如,在上世纪60 年代中期就自主研发了ALGOL等语言的编译系统,70年代初研发了XT系列操作系统,
|
||||
80-90年代在银河系列巨型机上配备了操作系统、高级语言编译程序等系统软件。
|
||||
在软件相关的基础研究方面,我国在程序理论、算法理论等方面取得了一批基础性的成果,提出了以时序逻辑作为软件开发的统一基础。
|
||||
|
@ -249,9 +251,9 @@
|
|||
\section{发展趋势与挑战问题}
|
||||
|
||||
\subsection{软件成为基础设施}
|
||||
当前,计算的泛在化和软件定义一切的发展趋势使得软件成为信息社会的基础设施,软件学科也进入了一个新的发展阶段。
|
||||
人类信息化发展有三条并行不悖的主线:以单机应用为主要特征的数字化、以联网应用为主要特征的网 络化和以数据的深度挖掘和融合应用为主要特征的智能化。当前,计算的泛在化和软件定义一切的发展趋势使得信息化进入了一个新的时代,即从数字化阶段发展进入了网络化阶段,并正进入智能化阶段。这也使得软件真正成为信息社会的基础设施,软件学科也进入了一个新的发展阶段。
|
||||
|
||||
所谓“计算的泛在化”是指计算变得无处不在而又无迹可寻。万物数字化、万物互联使得计算无处不在,形成了“人-机-物” 三元融合的发展趋势。计算自然融入人类 生产、生活活动的环境和过程之中,无需关注,不着痕迹。
|
||||
所谓“计算的泛在化”是指计算变得无处不在而又无迹可寻。万物数字化、万物互联使得计算无处不在,形成了人机物三元融合的发展趋势。计算自然融入人类 生产、生活活动的环境和过程之中,无需关注,不着痕迹。
|
||||
所谓“软件定义”是指软件以平台化的方式,向下管理各种资源,向上提供编程接口,其核心途径是资源虚拟化以及功能可编程。而“软件定义一切”则将软件平台所管理的资源和提供的编程抽象泛化到包括计算、存储、网络、软件服务等在内的各类计算资源,包括各种数字化机电设备和可传感物体对象在内的各类物理资源,乃至可通过激励机制调配的人力资源。
|
||||
|
||||
软件的基础设施地位具体表现为两个方面。一方面,软件自身已成为信息技术应用基础设施的重要构成成分,以平台方式为各类信息技术应用和服务提供基础性能力和运行支撑。另一方面,软件正在 “融入”到支撑整个人类经济社会运行的“基础设施”中,特别是随着以互联网和其他网络(包括电信网、移动网、物联网等)的不断交汇融合,软件正在对传统物理世界基础设施和社会经济基础设施进行重塑,通过软件定义的方式赋予其新的能力和灵活性,成为促进生产方式升级、生产关系变革、产业升级、新兴产业和价值链的诞生与发展的重要引擎。从经济社会整体发展的角度,计算成为了人类与物理世界互动的中介,软件对人类社会的运行和人类文明的发展进步起到重要支撑作用。
|
||||
|
@ -264,13 +266,13 @@
|
|||
|
||||
软件学科的拓展来自软件应用范围扩张、计算平台的泛化和软件方法技术本身发展三个方面的驱动。
|
||||
|
||||
从软件应用范围扩张的角度看,计算日益变得无处不在,“人-机-物”三元融合不断深入。
|
||||
软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的“人-机-物”各类资源,实现应用价值。
|
||||
从软件应用范围扩张的角度看,计算日益变得无处不在,人机物三元融合不断深入。
|
||||
软件的角色也从负责应用过程中孤立、确定的信息处理环节,转变为负责定义并协同整个应用涉及的人机物各类资源,实现应用价值。
|
||||
软件作为应用解决方案,涉及的范畴扩展到各类物理设备、物品和人类的主观体验与价值实现;
|
||||
因而软件学科无可避免地涉及到控制科学、系统科学以及心理学、管理学、经济学和社会学等范畴的问题,并以软件学科自身的方法论将其内化和拓展。
|
||||
|
||||
从软件依赖的计算平台泛化的角度看,计算平台从传统的集中式单机发展到并行与分布平台,到今天的“云-边-端”异构多态计算平台。
|
||||
软件定义技术为这个“人-机-物”融合的平台提供可编程计算抽象。
|
||||
软件定义技术为这个人机物融合的平台提供可编程计算抽象。
|
||||
软件作为解决方案,在这个计算平台之上利用数据资源,协同人机物,实现应用价值;同时也通过在这个平台上提供服务,并进一步积累数据,不断拓展这个计算平台。
|
||||
|
||||
从软件方法技术发展的角度看,软件的基本形态从计算机硬件的附属品到独立的软件产品,转变到云化和泛在的软件服务,%,转变为无处不在而又无迹可寻的泛在服务。
|
||||
|
@ -289,9 +291,9 @@
|
|||
%体现在其前所未有的代码规模、软件处理的数据量、软件用户量和使用的多样性、软件通过网络形成的连接量和种类、涉及承载运行的计算和物理设备量和种类等方面,也体现在且其所处环境的具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。
|
||||
%第三层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法。
|
||||
所谓软件学科的系统观,有三层含义。
|
||||
第一层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,且所处的环境具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。第二层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法,超越还原论。第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注“人-机-物”融合的整个系统的价值实现。
|
||||
第一层含义是复杂系统。现代软件系统具有前所未有的规模和内部复杂性,且所处的环境具有开放性,并面临由于“人在回路”所带来的不确定性。这使得看待软件的视角从封闭规约下的确定行为系统向开放环境中的复杂自适应系统、从单体系统向系统之系统转变。第二层含义是系统论。对于上述复杂软件系统,常常难以用其组成部件的性质去解释其整体性质。此时单纯依赖还原论方法难以驾驭其复杂性,需要借鉴系统论方法,超越还原论。第三层含义是系统工程。软件学科的关注点应从为应用系统提供高质量的软件部件,上升到关注人机物融合的整个系统的价值实现。
|
||||
|
||||
以系统观看软件学科发展,软件科学与自然科学、社会科学等各领域产生了千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为技术-社会系统。人机物融合的软件系统,其复杂性本身就呈现在系统乃至系统之系统的层面上,综合性和系统性也愈来愈强。%系统观要求软件科学体系需超越传统还原论的思维藩篱。
|
||||
以系统观看软件学科发展,软件科学与自然科学、社会科学等各领域产生了千丝万缕的联系,信息物理融合、软件社会化、大数据时代的软件新形态使得软件必然成为技术-社会系统。人机物融合的软件系统,其复杂性本身就呈现在系统乃至系统之系统的层面上,综合性和系统性也愈来愈强,必须作为视作复杂系统来认识对待。这就要求超越传统还原论的思维藩篱,发展作为复杂系统的软件的理论。
|
||||
%
|
||||
近年来,软件科学在系统观方向上进行了不少探索,包括:基于复杂网络来认识大规模软件系统的整体性质、基于多自主体(Agent)的软件系统和方法、复杂自适应软件与系统、群体化软件开发方法等。网络化和大数据催发了融合软件系统与系统论研究的切入点,数据驱动的软件设计和优化初显端倪,在一些特定领域获得很大成功。
|
||||
%人们对于数据驱动的软件的设计,不再遵循传统的自顶向下、分而治之、逐步精化的经典还原论法则,而是一种基于输入输出的黑盒的数据描述,训练出深度神经网络,充当所需要的软件。这种%
|
||||
|
@ -301,13 +303,13 @@
|
|||
|
||||
% 新的软件方法学的关键在于如何认识因果和相关。因果观是有前提的,相对的;相关性是绝对的。软件发展在人机物融合时代,人在回路、“拟人化”计算(Human Computation)、人机共融等需要关于软件规律的元级方法论创新。在软件系统的建模方面,软件将从单纯信息处理向“场景计算”发展,这里的场景包括物理环境和社会环境。在软件系统的机理方面,软件的语义将由传统的还原论形式语义方法,向多尺度、可演化的抽象方向发展,组合方式将从传统的静态组合方式向动态可演化的、具有涌现特性的方式发展,建立软件微观行为与宏观行为的辩证统一。面向人机物融合的认知,软件作为人工智能或者“智能+”的承载,将深化复杂自主系统的智能行为理论和方法,软件定义将成为人机物融合系统中学习赋能(型)资源的管理途径。
|
||||
|
||||
软件科学的发展也将促进系统论和系统学的发展。在软件定义一切的时代,软件成为复杂适应系统认知的载体和实验平台,而软件发展中形成的以形式化体系为基础的规则驱动软件理论,高性能计算之上建立的模拟仿真技术,与进入智能化阶段形成的大数据驱动的软件方法,为形成还原论和整体论的辩证统一奠定了良好的基础,软件走向人机物融合更是为系统论和系统学的发展提供了实践探索的大场景。
|
||||
软件科学的发展也将促进系统论和系统学的发展。在软件定义一切的时代,软件成为复杂适应系统认知的载体和实验平台,而软件发展中形成的以形式化体系为基础的规则驱动软件理论,高性能计算之上建立的模拟仿真技术,与进入智能化阶段形成的大数据驱动的软件方法,为形成还原论和整体论的辩证统一奠定了良好的基础,软件走向人机物融合更是为系统论和系统学的发展提供了实践探索的大场景。尤其是,正如 Jim Gray所指出,大数据将成为人类触摸、理解和逼近现实复杂系统的有效途径。
|
||||
|
||||
% 展望未来,多自主体形成的协同与自组织以及自适应结构和能力、网络化产生的大数据与数据语义的复杂网络,将是软件系统在传统规则驱动基础上走向人机物融合超大规模系统的基础。软件作为复杂系统乃至复杂巨系统,在软件定义时代,软件科学将与系统学共同发展,软件方法学将吸收系统论成果,并支撑系统论和系统学的发展。
|
||||
|
||||
\subsubsection{形态观}
|
||||
% 随着计算机技术的发展和计算机应用的不断深入,软件的外在形态逐步从硬件附属物、独立的软件制品发展到网络化服务。与之相对应,软件开发范型也经历了无结构、结构化、面向对象、面向构件、面向服务的发展历程。
|
||||
当前,软件的外在形态正在朝着泛在化和可持续成长的方向发展:在空间维度上,软件应用的范围越来越广,对于人类生活和现实世界的渗透力越来越强,呈现出泛在化的趋势;时间维度上,软件应用随着上下文环境及用户需求的变化不断适应和演化,呈现出持续成长的趋势。与此同时,软件开发范型也进一步向网构化以及数据驱动方向发展。
|
||||
当前,在空间维度上,随着应用的范围越来越广、软件对于人类生活和现实世界的渗透力越来越强,呈现出泛在化的趋势;在时间维度上,随着应用上下文环境及用户需求的变化不断适应和演化,软件呈现出持续成长的趋势。与之相应地,软件的范型进一步向网构化以及数据驱动的方向发展。
|
||||
% \subsubsubsection{软件应用的泛在化}
|
||||
% 计算和信息处理早已通过各种移动设备、嵌入式设备以及各种传感器渗透到了我们日常生活的方方面面,并通过各种通信技术实现了广泛的设备互连和信息互通。各种软件应用以嵌入式的方式实现预定义的信息处理和通信功能。
|
||||
%
|
||||
|
@ -322,18 +324,18 @@
|
|||
%在软件定义一切以及人机物融合的发展背景下产生的软件应用的泛在化和持续成长的
|
||||
这一软件形态的发展趋势对于软件学科的内涵发展将产生多个方面的影响。
|
||||
|
||||
首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。因此,最终用户必须具备基于计算思维的问题解决方案规划和构造能力。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
|
||||
首先,“软件定义+计算思维”将成为每个人解决现实问题、满足自身需求的新范式。未来的人类社会及日常生活的方方面面都将以软件定义的人机物融合应用的方式来实现。实现用户需求的应用软件将越来越多地以最终用户编程的方式面向应用场景按需构造。同时,这也要求我们为支持人机物融合的泛在服务软件提供通用的编程抽象(包括编程模型和语言),支持这种最终用户编程。
|
||||
|
||||
其次,适应泛在化、专用化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移和优化。针对通用目的开发的软件需要不依附于硬件的长期生长演化能力,并具备面向不同专用硬件和平台的高效定制和裁剪能力。
|
||||
其次,适应泛在而专用化甚至变化的计算设备和运行平台成为软件的普遍要求。大量的应用软件将从通用的硬件和平台迁移到专用的硬件和平台上,需要新的方法和工具支持来实现大范围的软件迁移和优化。软件平台需要具有预测和管理未来硬件资源变化的能力,能适应硬件、底层资源和平台的变化,乃至能相对独立地长期生存演化。
|
||||
|
||||
再次,内生的持续成长能力将成为软件的基本能力。除了自适应能力外,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长意味着通过各种智能化算法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成以及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动(代码也可以看作一种数据)的方式进行表示,并实现自演化和自生长。
|
||||
再次,内生的持续成长能力将成为软件的基本能力。除了自适应能力外,软件将越来越多地具备支持自演化的持续生长能力。这种持续生长不仅意味着通过各种智能化方法调整软件的算法和策略从而实现优化运行,而且还意味着软件通过各种生成以及合成能力不断增强自身的能力。因此,未来软件定义中功能与数据的界限将进一步模糊,越来越多的功能将通过数据驱动的方式进行设计,并实现自演化和自生长。
|
||||
|
||||
最后,软件与人将在不断汇聚的群体智慧中实现融合发展。软件的覆盖面越来越广、渗透性越来越强,最终用户对于软件的依赖也越来越强。由此,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智慧。这种群体智慧注入软件后又将服务于每个最终用户,使得他们能够在各种应用场景中以更加智能化和个性化的方式满足自身的需求,从而使得软件在使用中越来越有“灵性”和“人性”。未来的软件学科及相关研究需要摒弃“人”与“软件”二元分离的思维定式,更加自觉地考虑人机共融,不仅考虑“人因”,更要考虑“群智”。
|
||||
最后,软件与人将在不断汇聚的群体智能中实现融合发展。软件的覆盖面越来越广,软件所能获得的关于用户行为和反馈的数据越来越全面和丰富,并在此基础上形成越来越强的群体智能。这种群体智能注入软件后又将服务于每个最终用户,使得他们能够在各种应用场景中以更加智能化和个性化的方式满足自身的需求,从而使得软件在使用中越来越有``灵性''和``人性''。%未来的软件研究需要更加自觉的考虑人机共融,不仅考虑``人因'',更要考虑``群智''。
|
||||
%
|
||||
|
||||
\subsubsection{价值观}
|
||||
软件在整个系统中角色定位日益从负责应用过程中的信息处理环节转变为实现应用价值的主要载体。
|
||||
这就要求对软件质量的理解从以软件制品为中心的传统质量观转变为以人为中心的价值观。
|
||||
这就要求对软件质量的理解从以软件制品为中心的传统质量观拓展、转变到以人为中心的价值观。
|
||||
传统的软件质量观下,人们主要关注软件制品的正确性、高效性、易用性等外部质量属性和易维护性、易移植性等内部质量属性。这些质量属性一般是客观的。
|
||||
软件的价值观是建立在传统的软件制品质量属性基础上,强调用户体验,强调软件系统的应用对人类价值的实现。软件通过一系列价值要素体现了主观的人类价值。
|
||||
除了可以用经济价值衡量的软件质量以外,尤其需要强调软件的可信性、安全性、
|
||||
|
@ -356,22 +358,19 @@
|
|||
|
||||
%软件作为信息化社会的的基础设施,其可信性对于整个社会系统至关重要。
|
||||
%软件系统的可信性,要求在软件开发、运行、维护、使用等过程采取有效的措施和方法确认其满足人们的普遍要求和期望,它体现了新时代软件的价值取向。
|
||||
软件系统的可信性,包括软件本身可信和行为可信两个方面。
|
||||
软件本身可信,指的是软件身份可信和能力可信,即:软件开发过程提供可信证据(如内部质量和外部质量)进行自证。
|
||||
软件行为可信,指的是软件行为可追踪记录、不可更改,即:软件运行过程提供监控以控制其对周遭的影响,使得包含该软件在内的整个系统的对外表现符合用户要求。
|
||||
软件形式日趋多样,加剧了软件可信面临的挑战。
|
||||
软件系统的可信性包括软件本身可信和行为可信两个方面。软件本身可信,指的是软件的身份和能力可信,即:软件开发过程提供可信证据(如关于软件质量的过程记录和评审、测试结果等),对软件及其组成成分的来源和质量进行自证;软件行为可信,指的是软件运行时行为可追踪且记录不可篡改,即:通过监控软件运行过程并控制其对周围环境的影响,使得包含该软件在内的整个系统的对外表现符合用户要求。软件形态日趋多样,自身以及运行环境的复杂性越来越高,加剧了软件可信面临的挑战。
|
||||
%
|
||||
% (2)安全性
|
||||
%
|
||||
|
||||
% 安全性要求软件为人类活动和生存环境提供必要的安全保障,包括系统安全(Safety)和信息安全(Security)。系统安全是指能及时有效地避免给人员、设施、环境、经济等造成严重损害,信息安全是指能有效防控各类信息的非法获取、传播和使用。
|
||||
安全性,既包括了功能安全,也包括了信息安全。功能安全是指避免给人员、设施、环境、经济等造成严重损失。其安全性设计通过主动冗余、失效安全等机制,降低系统失效导致灾难性后果的概率。信息安全性防护防止信息以及系统软硬件设施被非法获取、传播和使用。
|
||||
%软件信息安全保障失效的后果之一就是系统安全故障,因此,本书将两种安全性合二为一,统称为安全性(Safety\&Security)。传统软件质量观将安全视作系统质量的一部分,强调软件个体的安全性。随着人机物融合,软件系统已融入人类社会,并与人类无缝交互。换言之,泛在计算平台上软件与软件、软件与人的交互无处不在,软件个体可影响整个泛在网络计算平台的行为;软件个体的漏洞等故障很容易扩散(传播)。
|
||||
软件作为基础设施,描述并掌控了很多关键领域的资源,其安全性威胁会给整个系统带来致命的威胁。因此,安全性这一质量属性随着软件成为基础设施的趋势而变得愈发重要。
|
||||
|
||||
%
|
||||
% (4)持续性
|
||||
%
|
||||
软件系统的安全性要求其为人类活动和生存环境提供必要的安全保障,包括功能安全(Safety)和信息安全(Security)。功能安全是指能及时有效地避免给人员、设施、环境、经济等造成严重损害,信息安全是指系统保护自身免于入侵及信息的非法获取、使用和篡改,具体包括机密性、完整性和可用性三方面。
|
||||
%本书将两种安全性合二为一,统称为安全性(Safety \& Security)。传统软件质量观将安全视作系统质量的一部分,强调确定边界之内的系统安全性。
|
||||
在人机物融合的趋势下,%软件已经广泛并深入渗透到人类社会生活的方方面面,与人形成了密切的交互关系。换言之,泛在计算平台上软件与软件、软件与人的交互无处不在,软件个体可影响整个泛在网络计算平台的行为;软件个体的漏洞等故障很容易扩散(传播)。这些也导致了信息安全问题很容易转化为防危安全问题。
|
||||
软件作为基础设施,参与并掌控了很多关键领域的资源,其安全性威胁会给整个系统甚至人类社会带来致命的威胁。因此,安全性随着软件成为基础设施的现状变得愈发重要。
|
||||
|
||||
|
||||
|
||||
|
||||
%软件系统成为支撑社会经济运行的基础设施,需具有持续提供服务的能力。
|
||||
% 软件系统提供服务的持续性(sustainability),指的是在持续不间断运行、维护和发展过程中,面对各种突发异常事件,仍能提供令人满意的服务的能力。
|
||||
|
@ -382,12 +381,16 @@
|
|||
%
|
||||
|
||||
%作为人类价值载体,软件行为体现了人类价值观;由于软件无迹可寻,导致人类价值观又通过软件影响人类社会。因此,
|
||||
软件系统的行为应符合社会道德标准,不对个人和社会产生负面结果,这种规范称为软件系统的伦理观。社会道德定义了一定时间区域内人们行为规范,可具体表现为无歧视、尊重隐私、公平公正等,并最终在软件系统的具体行为中体现。因此,软件系统的伦理观,体现于软件行为的上述方面,并需要通过软件开发和运行的诸多机制进行支持。
|
||||
软件系统的伦理是指系统的行为应符合社会道德标准,不会对个人和社会产生负面结果。社会道德定义了一定时间区域内人们行为规范,可具体表现为无歧视、尊重隐私、公平公正等,并最终体现于软件系统的具体行为。因此,软件系统的伦理,也体现于软件行为的上述方面,并需要通过软件开发和运行的诸多机制进行支持。
|
||||
|
||||
|
||||
%
|
||||
% (4)持续性
|
||||
%
|
||||
|
||||
%软件支撑的基础设施服务,为满足各类应用快速增长、新技术不断涌现的需求,需要具有开放扩展能力,即能集成各种异构的技术及系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。显然,这种开放体系架构常常引入系统设计的脆弱性和质量隐患,从而给持续提供服务带来挑战。
|
||||
|
||||
软件系统成为支撑社会经济运行的基础设施,需具有持续提供服务的能力。软件系统提供服务的可持续性(Sustainability),指的是在持续不间断运行、维护和发展过程中,面对各种突发异常事件,仍能提供令人满意的服务的能力。软件支撑的基础设施服务,为满足各类应用快速增长、新技术不断涌现的需求,需要具有开放扩展能力,即能集成各种异构的技术及系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。
|
||||
软件系统的可持续性(Sustainability),指的是在持续不间断运行、维护和发展过程中,面对各种突发异常事件,仍能提供令人满意的服务的能力。这是软件作为信息社会基础设施的必然要求。同时,为满足各类应用快速增长、新技术不断涌现的需求,软件系统需要具有开放扩展能力,即能集成各种异构的技术及子系统,支持各类软件制品的即时加载/卸载,对内部状态及外部环境变化的感应、自主响应以及调控机制,以及个性化服务的定制等。
|
||||
|
||||
% \subsubsubsection{价值观下,软件方法学的关键科学问题}
|
||||
% 软件价值观强化了可信性、安全性、持续性等具有新时代特色的价值要素,这些价值要素与软件开发运行维护过程的交融将经历一个长期的阶段,其带来的关键科学问题在于四个方面:
|
||||
|
@ -411,7 +414,7 @@
|
|||
%
|
||||
|
||||
\subsubsection{生态观}
|
||||
软件的开发、维护、运行及使用所涉及的三大类元素(包括软件涉众、软件制品和软件设施)彼此交互、互相依赖,逐渐形成复杂生态系统,需要用生态化的观点去理解和研究。
|
||||
软件的开发、维护和应用所涉及的三大类元素,包括软件涉众(开发者、用户及企业和组织等),软件制品,以及软件设施(支持软件活动的软件设施),彼此交互、互相依赖,逐渐形成复杂生态系统,需要用生态化的观点去理解和研究。
|
||||
%生态化是软件的强大渗透力的必然结果:一方面软件活动延伸到了个体、群体和社会;另一方面软件所涉及的各种元素之间存在越来越多的依赖性、相关性和相互作用。
|
||||
% \subsubsection{软件生态系统}
|
||||
% “人-机-物”三元融合的新型应用模式涉及到广大社会群体,涉及面广,分工精细,不仅需要术业专攻的各种企业和个体参与,也使得它们可以根据其本身特点和业务诉求参与到开发、应用及其支撑的各个环节,从而形成联合生态。
|
||||
|
@ -422,60 +425,36 @@
|
|||
生态系统可以从下述维度来刻画。
|
||||
%
|
||||
|
||||
首先,多元素交互是软件生态系统的最典型特征,而且交互的元素具有深刻的社会性。元素关系主要体现为协作、竞争和混合并保持生态的平衡。系统中要素关系之间的平衡是秩序之本,非平衡是运动变化之源。
|
||||
首先,多元素交互是软件生态系统的最典型特征,而且交互的元素具有深刻的社会性(例如核心参与者---开发者和用户---都是社会体)。元素关系主要体现为协作、竞争和混合并以生态平衡为目标。系统中要素关系(对立、独立或互补)之间的平衡是秩序之本,非平衡是运动变化之源。
|
||||
|
||||
|
||||
其次,生态系统的关键元素是软件涉众、软件制品和软件设施,三者互相融合、依赖和影响。涉众之间、制品之间、设施之间存在各种依赖,网状的依赖形成各种供应链,而涉众、制品和设施之间因为彼此依存也存在各种影响。生态的要义在于供应链的形成和各种影响的相互作用需要抵达平衡。
|
||||
其次,生态系统的关键元素是软件涉众、制品和基础设施,三者互相融合、依赖和影响。涉众之间、制品之间、基础设施之间存在各种依赖,网状的依赖形成各种供应链,而涉众、制品和基础设施之间因为彼此依存也存在各种影响。生态的要义在于供应链的形成和各种影响的相互作用需要抵达平衡。
|
||||
|
||||
第三,生态系统是由人类智能和机器智能交互并融合而实现的。人类智能体现为分布在全球的开发者和用户;机器智能体现为支撑分布式开发和使用的软件工具与基础设施,支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。通过众多的个体认知的汇聚,以及商业和宏观调控角度的战略调控,人类智能和机器智能相互协作、补充,并向群体混合智能方向发展。
|
||||
%生态系统是由群体智能和计算机智能交互并融合而实现的。群体智能体现为分布在全球的开发者和用户,计算机智能体现为支撑分布式开发和使用的工具和基础设施(计算机辅助支持和人机交互)。群体智能(体现了众多的个体认知的汇聚,并涵盖商业智能和宏观调控的战略智能等)通过计算机智能凝炼为代码和产品,计算机智能支持人们更好地协作、开发和无处不在的使用,并且在开发和使用活动中不断迭代增强。
|
||||
|
||||
软件从过去的个体作坊开发,到不同组织内或组织间人员混合参与的组织化开发,再发展到数以万计互相依赖的软件形成的供应链和庞大的生态系统下的社会化开发。其转变给软件开发带来了前所未有的创新可能。
|
||||
%同时,规模指数级增长的项目及其之间庞杂的依赖关系使得供应链复杂度激增,进而给软件开发、运行和使用及市场带来诸多挑战。
|
||||
相应地,生态观对软件方法学带来显著的变化。软件和软件学科需要从以往关注个体软件的构建和运维转变到关注有广泛社会参与的软件体系的构建、运维和成长,以及软件生态的平衡和可持续发展。同时软件学科跟其他学科的交叉性将更为凸显,社会学、经济学、组织学、生物学等学科的理论和发现可被用来研究海量软件活动数据隐含的软件生态网络,其发现反过来对其他学科的发展也将很有裨益。
|
||||
|
||||
% \subsubsection{生态观下的软件学科的关键科学问题}
|
||||
软件从过去的个体作坊开发,到不同组织内或组织间人员混合参与的组织式开发,发展到了数以万计互相依赖的软件或项目形成的供应链和庞大的生态系统。其转变给软件开发带来了前所未有的创新水平。同时,规模指数级增长的软件或项目及其之间庞杂的依赖关系使得软件供应链的复杂度激增,进而给软件开发和使用及市场带来诸多挑战,包括:大规模代码和项目的供应链行为如何理解和利用?面临高昂的学习成本,个体开发者如何学习并加入复杂项目和生态?复杂生态中群体如何协作,协作行为如何发展?产业生态如何形成,如何实现可持续发展?等等。
|
||||
%
|
||||
|
||||
% 第一,个体开发者学习成本进一步增大。
|
||||
%首先因为软件之间广泛存在的依赖关系使得掌握一个新的软件需要学习别的软件。例如,对某个软件进行调试需要学习的相关软件依赖包可能会很多。其次,复杂依赖关系带来了新的问题,涉及更多的学习内容。例如,不同开源项目遵循相应许可证(License)的约束,并且不同许可证之间存在兼容问题,这就要求开发者在借鉴开源代码时需要了解对应的许可证。这其中的关键科学问题是:
|
||||
% 个体开发者如何学习并加入复杂项目和生态?
|
||||
%
|
||||
|
||||
% 第二,群体协作更加复杂。%首先群体元素更为多样,其次不同元素围绕生态中的各种软件活动存在错综复杂的协作关系,最后协作行为并非恒定而是不断发展和演化的。例如供应链上的软件项目互相依赖,开发者需要跨越多个项目去实现目标功能,开发者之间的协作不再拘泥于单个项目。例如具有不同商业目标的公司需要各司其职,互补有无,还需要跟竞争对手建立协作,在商业利益和群体目标之间实现平衡。已有的群体协作机制大多聚焦对单个项目的支持,互相依赖的项目之间因缺少有效的信息沟通与集成机制使得群体协调的复杂度增大。总之,这其中的关键科学问题是:复杂生态中群体如何协作,协作行为如何发展?
|
||||
%
|
||||
% 第三,生态可持续性受到的威胁持续增加。软件供应链上的节点是组成生态的关键元素,它们互相依赖互相影响。一个软件的漏洞有可能使得其他依赖该软件的项目面临同样的危机。例如,影响昭著的Heartbleed漏洞所涉及的OpenSSL项目中的两个文件至少存在于其他六千多个开源项目中。各大企业因为软件供应链的存在对软件溯源(即追踪代码问题的来源)有很大的需求,投资也是可观的。然而软件供应链上节点间的依赖关系隐藏在开发活动数据中,看不见摸不着但广泛存在,这就使得软件生态的可持续受到更多潜在威胁。而生态的形成和可持续发展影响到软件甚至信息产业的革新和发展。这方面的关键科学问题是:大规模代码和项目的供应链行为如何理解?产业生态如何形成,如何实现可持续发展?
|
||||
%
|
||||
|
||||
% 总之,尽管有数千万个软件和项目及超过一千亿的源代码文件,但人们对软件生态中供应链的形成和发展,及其可能带来的风险和挑战却知之甚少。随着软件生态系统的快速延展,各类供应链关系逐步显现,如开发供应、技术供应、以及产销供应等。供应链中数以千万计的个体开发者、软件项目、公司等围绕软件形成复杂生态的各种活动数据都被软件支持工具记录下来,可以方便的获取,这为公众或者企业自己更好地理解生态的形成和发展,以降低或消除上述生态中的依赖风险、识别其他可能存在的风险提供了一种很好的方法。利用社会学理论对海量数据可视化出来的软件供应链网络进行分析,可以允许我们从个体学习、群体协作、以及生态持续的角度去识别评估风险,进而地更好保障软件生态的可持续发展。
|
||||
%
|
||||
% 综上,生态观对软件方法学带来显著的变化和跨越,软件学科跟其他学科的交叉性将更为凸显。软件和软件学科需要从以往关注个体软件的构建和运维转变到关注有广泛社会参与的软件体系的构建、运维和成长,以及软件生态的平衡和可持续发展。
|
||||
%
|
||||
%
|
||||
%
|
||||
|
||||
\subsection{学科研究的主要问题}
|
||||
|
||||
软件学科的学科内容主要涵盖软件语言与软件理论、软件开发方法、软件运行支撑、软件度量和质量评估四方面的内容,而软件范型贯穿其间,使之相互配合形成方法论意义上的有机整体。软件范型的变化将牵引软件技术体系的变化。而上述系统观、形态观、价值观和生态观的新视角将引起软件范型的变化,并辐射到软件开发、运行和度量各个层面方法和技术的变革,进而对软件的整体生态与教育方面产生深刻的影响。
|
||||
|
||||
软件语言与软件理论方面将着力解决适应人机物融合新软件范型的抽象建立这一基础性问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,特别是需要应对大规模的数据与计算的算法理论,以及在异构多态的新硬件架构和量子计算等新计算平台下的程序理论等等。与软件理论紧密相关,软件语言应重点研究领域和应用问题表达和求解的新抽象,加强大数据时代语言对数据处理的支持,以及开发人机物融合的泛在混成系统的编译技术,在领域特定语言和语言工程、多范式程序设计范式融合、软件语言和实现的内生安全等方面奠定软件定义的形态基础。
|
||||
软件理论和软件语言方面将着力解决如何建立适应人机物融合的软件范型基础这一基本问题。软件理论的核心是从复杂系统的角度来建立构建正确、高效、可靠、安全软件系统的理论和算法基础,\wang{拓展可计算理论传统研究的内容范围,特别是需要应对网络环境下日益增长的大数据与持续计算的算法与计算复杂性理论,以及在新的硬件架构(异构多态)和计算平台(量子计算平台)下的计算理论和程序理论等等}。与软件理论紧密相关,软件语言\wang{将重点研究泛在计算各种抽象,构建领域特定的程序设计语言,探索语言演化和生长机制、以及基于“语言工程”的软件设计方法和支撑环境,共同奠定软件范型发展的理论和语言基础}。
|
||||
|
||||
软件构造方法将面向人机物融合场景的“软件定义”,软件需要在万物互联的平台上开发、运行、并持续演进地提供服务,具有自主性、协同性、演化性、情境性、涌现性和可信性等诸多特性。这在软件构造的技术方法和组织模式上均需要新方法和技术,包括:复杂场景分析与建模、软件自适应与自成长、基于人机协作的群智化软件开发、数据驱动的软件自动化、安全可信高度智能的开发运维一体化等。
|
||||
软件构造方法将\wang{研究人机物融合场景下的软件开发范型和技术体系,也即研究面向应用场景需求、如何“软件定义”人机物融合的“场景计算机”。
|
||||
%它要在万物互联的平台上持续演进地面向场景提供服务,具有自主性、协同性、演化性、情境性、涌现性和可信性等诸多特性。
|
||||
面向高效、高质量、低成本的目标,软件构造的技术方法和组织模式上需要应对复杂场景分析与建模、群智开发、人机协作编程、开发运维一体化等以一系列挑战,亟待新方法和技术的发展。}
|
||||
|
||||
软件运行支撑需要满足软件作为社会基础设施的规模、效能、持续、演进等诸多关键需求,并适应人机物融合的各类资源和应用场景的管理和实现。这将集中反映在未来的泛在操作系统与运行平台方面,需研究支持软件定义的新型运行平台架构、泛在资源的高效虚拟化和灵活调度、复杂软件系统持续适应演化的共性支撑、人机物融合过程中的安全与隐私保护等关键问题。
|
||||
软件运行支撑\wang{将向支撑人机物融合、具有“资源虚拟化”和“功能可编程”特点的泛化运行平台发展,需要满足作为社会基础设施在规模、适应、演化、安全、效能等方面的诸多严格要求。未来的泛在操作系统与运行平台,需在软件定义的新型运行平台架构、泛在资源的高效虚拟化和调度方法、软件系统持续适应演化的支撑机制、人机物融合过程中的安全与隐私保护等关键问题上有突破。}
|
||||
|
||||
软件度量和质量评估是软件学科的科学观察、工程构造相交融的重要方面。未来的重要变化是在复杂系统和软件生态层面的科学观察,用以指导软件开发和运行技术层面的持续创新。以各类软件大数据为核心的度量抽象将揭示
|
||||
软件生态如何形成、如何可持续发展的基本规律,进而理解并驾驭大规模代码和项目的供应链行为、支持个体学习并加入复杂项目和生态,改进复杂生态中群体的协作。数据驱动和规则驱动将在软件质量与安全保障上发挥重要的作用。
|
||||
软件度量和质量评估是软件学科的科学观察、工程构造相交融的重要方面,\wang{其未来的重要变化是在复杂系统和软件生态层面的科学观察,并以此为基础推进软件开发和运行层面的持续发展。一方面,将通过有效的度量和分析,理解和利用大规模代码和项目的供应链行为,研究个体学习和群体协作,并探索软件生态的形成和可持续机制机理等。另一方面,在软件成为信息社会的基础设施后,软件质量评估和保障的需求不断增长、更为突出。以应用场景的价值牵引,带动软件质量和确保技术的发展成为重要趋势,未来突破的重点将在数据驱动的智能系统质量保障、 人机物融合场景下的系统可信增强、大规模复杂系统安全缺陷检测、物联网环境下的系统安全保障等方面。}
|
||||
|
||||
“数据为中心”是人机物融合时代的最为突出的特征,数据工程和数据管理是未来软件构造和运行支撑的共性沉淀。在数据工程方面,需要应对异构数据整理、数据分析和数据安全与隐私保护等挑战。在数据管理方面,需研究如何管理大数据、特别是如何利用新硬件混合架构来实现大数据的管理。
|
||||
|
||||
在软件成为基础设施的时代,%软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局,
|
||||
应用软件系统日益以面向领域的人机物融合的场景计算为主要呈现形式。
|
||||
%这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在不同的应用领域,
|
||||
面对系统边界的可伸缩性、系统成分的异构性和系统模型的混成性,需研究各领域的环境建模及其软件定义方法、模型驱动场景感知和认知、异构资源的统一表示和封装、系统学习赋能机制及性能确保、异构模型的融合和验证以及空间分布系统的的时空一致性等关键技术问题。
|
||||
%,在共性方法上发展领域特定方法,并反馈、沉淀于共性方法。
|
||||
当前智慧城市、无人自治系统、以及软件定义卫星等新兴应用领域为此方面的研究提供了大场景。
|
||||
软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局。这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在已有共性方法上发展领域特定方法,并反馈并带动新型共性方法的发展,是学科发展的有效途径。\wang{在人机物融合及软件定义一切的大背景下,以卫星、流程工业控制、智慧城市、无人自主系统等为代表的重大领域都蕴含着平台再造与整合的发展机遇,即以软件作为万能集成器对相关系统原有的软硬件和服务资源进行解构然后以平台化的方式进行重构,从而建立软件定义的融合发展平台。此外,高性能 CAE 软件系统等专用工程软件也是软件学科的重要关注点。在支撑实现高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计等重大应用价值外,其高效能、高精度、高定制的需求亦将推动软件技术的发展。}
|
||||
|
||||
|
||||
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。软件教育需要适应“软件定义一切”普及教育的需求,还要在顺应人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育上有新发展。
|
||||
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。\wang{软件教育需要构建包括顺应``软件定义一切''发展趋势的通识教育、针对人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育和继续教育的完整体系,并建设发展相应的教育理念、方法和伦理。}
|
||||
|
||||
%在此软件学科发展的新阶段,可以上述系统观、形态观、价值观和生态观的新视角,展望本学科的主要挑战和研究问题:
|
||||
%\begin{itemize}
|
||||
|
|
|
@ -268,7 +268,6 @@ Sapir-Whorf语言相对论假设对语汇的重要性给出了一个表述~\cite
|
|||
\end{minipage}
|
||||
\end{figure}
|
||||
|
||||
\todo{左图中抽象请去掉}
|
||||
%软件范型重点解决软件是什么的问题,描述了软件的模型和模型构造、运行的基本理论,包括了计算理论、程序设计语言和程序理论。计算理论包括可计算性理论、算法理论等。可计算性理论回答什么能或不能在计算平台上求解,算法理论回答如何在计算平台上高效能行求解问题。程序设计语言和程序理论回答软件抽象是什么以及它们之间联系的问题。我们将软件范型的学科内容归入程序设计语言与理论。
|
||||
|
||||
%软件语言的核心任务是建立通用的抽象机制,包括抽象的表示和抽象之间的关系,为问题空间、解空间和平台空间建模。
|
||||
|
|
|
@ -210,7 +210,7 @@
|
|||
|
||||
软件学科的发展呈现了纵横交错的发展态势,即共性沉淀和领域牵引相辅相成的格局。这在人机物融合时代复杂多变的应用和开放平台上将更为显现。在已有共性方法上发展领域特定方法,并反馈并带动新型共性方法的发展,是学科发展的有效途径。\wang{在人机物融合及软件定义一切的大背景下,以卫星、流程工业控制、智慧城市、无人自主系统等为代表的重大领域都蕴含着平台再造与整合的发展机遇,即以软件作为万能集成器对相关系统原有的软硬件和服务资源进行解构然后以平台化的方式进行重构,从而建立软件定义的融合发展平台。此外,高性能 CAE 软件系统等专用工程软件也是软件学科的重要关注点。在支撑实现高端装备、重大工程和重要产品的计算分析、模拟仿真与优化设计等重大应用价值外,其高效能、高精度、高定制的需求亦将推动软件技术的发展。}
|
||||
|
||||
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。\wang{软件教育需要适应“软件定义一切”\wang{通识教育}、顺应人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育和继续教育的需求,并教育理念、方法和伦理建设上有重要发展。}
|
||||
软件学科的发展离不开软件教育体系、内容、方法、手段的变革。\wang{软件教育需要构建包括顺应``软件定义一切''发展趋势的通识教育、针对人机物融合时代特点的专业教育、融合软件学科知识的其他学科专业教育和继续教育的完整体系,并建设发展相应的教育理念、方法和伦理。}
|
||||
|
||||
本部分余下各章将讨论学科内各个领域方向所面临的一些主要挑战问题。
|
||||
我们大胆预测,软件学科的未来发展将由这些问题上的突破和进展所塑造。
|
||||
|
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue