基于系统科学的复杂系统软件生命周期模型研究
2021-04-22颜乐鸣刘从越陈申平
颜乐鸣, 刘从越, 陈申平
中国电子科技集团公司第七研究所, 广州 510310
0 引 言
近年来,在航天、航空、通信电子等领域,系统需求复杂度和技术复杂度均不断提升,越来越多的复杂系统随之诞生.随着“软件定义装备”时代的到来,这些系统的核心功能多由软件实现.系统功能的日渐复杂使得这些系统中的软件也在向复杂系统演变,软件已成为复杂系统的核心和灵魂,也是系统可信性和质量的关键影响因素.
目前,一般系统工程和软件工程是复杂系统软件研制和管理的主流方法,通过系统分解将复杂问题转化为相对简单的问题进行处理,未考虑复杂系统的主要特征,存在一定局限性. 本文引入系统科学中的复杂性科学、网络科学等理论以及敏捷方法和知识工程等技术,对现有软件工程方法进行扩展,建立一种复杂系统软件生命周期模型.还将软件分析设计的关注焦点从系统分解上升到系统整体,并建立与之相适应的技术管理机制,以有效应对开放性、涌现性、自组织性等复杂系统特征.
1 系统科学及相关理论方法
1.1 系统科学简介
钱学森现代科学技术体系从横向上看有11个大科学技术部门,分别是自然科学、社会科学、数学科学、系统科学、思维科学、行为科学、人体科学、军事科学、地理科学、建筑科学、文艺理论[1]. 作为科学技术体系中的一个部门,系统科学是研究系统的结构、环境与功能关系,探索系统的演化与调控规律的科学[2]. 系统科学的发展经历了现代系统理论阶段、自组织理论阶段和复杂性科学阶段[3].
文献4依据钱学森现代科学技术体系,将系统科学分为3个层次,分别为:工程技术、技术科学和系统学[4].如图1所示,系统工程是工程技术中的一个学科,而系统学是系统科学的基础科学,奠定了系统科学中工程技术和技术科学的理论基础.近年来发展起来的网络科学和复杂性科学也属于系统学的范畴.
1.2 相关方法和理论
以下简要介绍本文使用的3种系统科学相关方法和理率.
图1 系统科学的层次结构Fig.1 Hierarchical structure of systems science
钱学森于上世纪80年代提出的综合集成法是我国系统科学领域极为重要的研究成果.该方法在整体论和还原论辩证统一的思想指导下,将定性方法和定量方法相结合,相互促进去寻找解决问题的适当框架,并对框架进行数学验证[5].
综合集成法与人工智能和知识工程相结合后,通过对众多专家的经验进行整理和综合分析及数学建模和验证,以有效解决复杂系统研制中存在的问题[6].目前已在我国复杂作战系统的建模和实验工作中应用,但尚未在软件的研制和管理过程中应用.
复杂性科学以复杂系统作为研究对象,试图超越还原论,找到更有效的方法来揭示并描述复杂系统的运行规律.到目前为止,复杂性科学尚未形成统一的、系统性的完整理论,有些概念也相互重叠,但现有理论对复杂系统的分析设计和验证仍具有一定的指导作用.
除复杂性科学之外,网络科学也是系统学中的一个重要学科.网络科学是专门研究复杂网络系统的定性和定量规律的一门崭新的交叉科学[7],近年来,越来越多的专家和组织致力于复杂网络的研究.
2 复杂系统概述
复杂系统具有如下典型特征[8-9]:
(1) 整体性
系统要素之间的非线性作用是复杂系统存在的内在原因,也是构成系统主要特征的基础.单个要素遵循相对简单的原则,但是,众多要素的共同作用则导致系统产生复杂、不断变化且难以预测的行为模式.
(2) 自组织性(也称动态性、时变性)
复杂系统内外部关系之间的相互作用非常复杂,使系统处于无序和有序、平衡态和非平衡态相互转化的持续运动和变化中.因此,系统分析设计时不仅要描述独立事件随时间的变化,还要描述系统整体状态随时间的变化.
(3) 开放性
复杂系统不是封闭系统,而是与其所处的复杂环境进行大量复杂信息交互的开放系统.系统与内外部环境的接口和信息交互是动态变化的,会因系统或其要素之间交互的属性而突然涌现,因此无法完全预先设计.
(4) 涌现性
复杂系统中通常存在多种不同类型的要素,这些要素既相互独立又相互依存,构成错综复杂的关系.涌现式属性产生于系统要素之间的交互,这些属性无法预测,也无法从要素属性推导出来,因此增加了复杂系统的不确定性和不可预测性.涌现性是系统层面的属性,与部件无关,只存在于系统部件或行为的关系及交互之中.涌现性主要取决于设计的鲁棒性、系统的内外部通信以及系统的自我学习.
目前,复杂系统软件的研制和管理主要采用基于一般系统工程和软件工程的方法,即根据系统整体逻辑框架,构建结构化的系统工程流程,用于控制各个工程技术、领域设计和验证过程,让系统所有构成元素相互配合与协调,得到成本最低、技术最优、时间最少、运行最稳的工程研制过程[10].此类方法具有如下3个特征[11]:
1)系统性,提供一系列必须完成的顺序步骤(有时是严格的线性形式);2)分解性,将系统整体分解为模块;3)说明性,提供详细的应用方向.
这类方法可用于简单系统的分析设计,但难以应对复杂系统的涌现性、开放性、自组织性等基本特征所带来的系统层面问题,因此用于复杂系统软件研制和管理时存在一定局限性,会导致软件存在质量和安全隐患.
3 复杂系软件生命周期模型
3.1 模型构建思路
本文根据复杂系统具有的整体性、自组织性、开放性和涌现性等基本特征,在现有系统工程和软件工程方法的基础上,引入综合集成法、知识工程和敏捷方法,建立了一种适用于复杂系统的生命周期模型,并结合网络科学、复杂性科学等系统学理论,提出了复杂系统软件分析设计方法的扩展思路,以有效应对复杂系统的特征.
该模型的主要构建思路如下:
(1)将软件工程与综合集成法和知识工程相结合
将综合集成法的计算机体系、专家体系和知识体系以及主要步骤与软件工程技术活动相结合,并通过知识工程建立这三类体系之间的平台,实现知识的高效获取、存储、共享、应用和更新.
(2)将系统学与软件工程相结合
系统学方法主要用于软件的顶层需求分析和顶层架构设计等宏观层面,实现需求和体系结构随时间的不断演变;软件工程则主要用于软件生命周期模型的定义和管理、设计实现等微观层面.通过整体论与还原论的结合和优势互补,在规范软件研制过程的同时有效应对涌现性、开放性等相关问题.
(3)将开发与运行维护相结合
综合DevOps和DODAF 2.0的理念,通过对分析设计建模的要求来综合考虑并平衡顾客、开发、运维等不同维度的需求.DevOps通过短周期迭代来实现软件产品的增量式开发、验证、发布和运行维护[12].DODAF 2.0中的体系结构设计,从纵向的时间轴上不仅反映当前的系统,还考虑未来的系统演变,即要建立基线视角和未来视角,以及从基线视角到未来视角的演进路线;从横向上则综合考虑能力、运行、服务、系统等多维视角[10].
3.2 模型概述
图2描述了基于系统科学和敏捷方法的复杂系统软件生命周期模型的基本架构.本模型以用户需求和上层系统策划作为输入,通过多轮时间盒驱动的短周期迭代(通常小于一个月)快速、增量地发布软件产品.每次迭代的活动和完成准则可根据软件的特殊要求来灵活定义,既可以是一次完整的分析、设计、编码、验证、发布、运行和维护过程,也可以只包括其中的部分技术活动.
模型由总体策划阶段和多次迭代组成,每个迭代均视为生命周期中的一个阶段,图3描述了模型中多次迭代内的活动.迭代内既包含软件开发、验证、运维等技术活动,也包含策划、监控等管理活动.需求管理活动则贯穿软件研制全生命周期,结合短周期迭代,及时获取顾客需求及顾客对软件产品的反馈,从而实现对所有需求的及时、有效管控.此外,测量分析、配置管理和质量保证等技术管理活动也贯穿全生命周期,以充分利用采集和分析的信息进行决策,确保过程质量和技术状态受控.
在第一次迭代前进行总体策划,确定阶段及主要活动进度,明确每次迭代的完成准则,并对策划内容进行评审.每次迭代启动之初,先进行本次迭代的策划,即阶段策划.迭代内部通常以每日例会的形式对阶段策划的执行情况进行监控.每次迭代结束后,采用阶段评审、里程碑评审等形式对总体策划的执行情况进行监控.
图2 复杂系统软件生命周期模型Fig.2 Software life cycle model of complex systems
图3 迭代活动图Fig.3 The activity of iteration
综合集成法和知识工程也贯穿软件的全生命周期,既可用在迭代内部,也可跨多个迭代使用.本文将综合集成法的具体做法、敏捷方法、知识工程以及系统学理论相结合来实现顾客需求向系统模型的转换:第一步是利用知识工程和大数据来整理并提炼顾客需求和领域专家的经验,然后自上而下定义系统的顾客需求和技术需求;第二步是运用进化算法和机器学习算法等人工智能方法以及复杂性科学、网络科学等理论进行系统建模和仿真;第三步是结合敏捷方法,对系统模型和软件代码进行领域专家参与的反复验证,并通过快速反馈不断优化系统模型.
该模型具有如下特点:
(1)持续、增量地实现软件需求
为适应复杂系统软件因不可预测而带来的需求不确定度高且变更频繁的特点,采用迭代增量模式.在项目启动初期,无需确定所有需求,也无需明确与系统和硬件设计相关的所有需求细节,只需根据已明确的需求建立初始功能基线,并从顾客视角确定每项需求的优先级.基于需求优先级进行项目总体策划,先完成高优先级的需求以及对系统质量至关重要的设计约束和通用质量特性等总体要求,并在后续迭代中与新增需求一起反复进行验证,从而确保关键需求的质量.每次迭代的输出均是上次迭代输出的增量,并吸纳前续迭代中获取的来自各方的反馈来持续完善及细化需求,持续改进和交付软件产品.因此功能基线和分配基线也在不断演变.
(2)覆盖技术过程和技术管理过程
ISO/IEC/IEEE15288:2015 《Systems and software engineering ——System life cycle process》(系统生命周期过程应用指南)[13]和ISO/IEC 12207:2017 《Systems and software engineering ——Software life cycle process》(软件生命周期过程应用指南)[14]两项国际标准均将生命周期中执行的活动划分为四类过程:协定过程、组织的项目使能过程、技术管理过程和技术过程.其中,技术管理过程和技术过程是项目研制过程中最核心的两类活动,且通常并行或迭代进行.
本模型中的迭代不仅覆盖软件分析、设计、编码及验证等技术活动以及发布、部署和运维等保障活动,还覆盖了项目策划、项目监控、配置管理和测量分析等技术管理活动,且策划的重点由预定义计划转为对变化的及时管理和控制,既聚焦用户需求的实现,又关注过程活动要素,以实现对需求、过程和产品的有效控制.
(3)实现软件开发、测试和运维的高度集成
DevOps通过软件开发人员和维护人员之间的频繁沟通、紧密协作和高度集成,以加快软件交付进度,提升交付产品质量[12].本模型基于DevOps的理念,允许在一次迭代中进行软件的开发、测试和运行维护,并明确维护人员与开发人员之间的沟通机制.
此外,系统建模时综合考虑设计维度和运行维度以建立系统的完整多维视图.设计维度反映预定性能目标的满足情况,运行维度反映软件交付用户后的运行情况.这两个维度与业务目标紧密结合,实现软件开发和运维的相互促进相互补充,并通过迭代不断增量或优化,达到缩短开发周期、增加部署频率、保证发布软件质量的目的.
3.3 分析设计方法扩展
分析和设计是软件生命周期中最重要的两项活动,对软件可信性和质量起决定性影响.但是,现有的软件分析设计方法未充分考虑复杂系统的特征,存在质量隐患.为此,本模型运用系统学理论对复杂系统软件的分析设计方法提出如下扩展思路:
(1)开放性分析设计
复杂系统需要与其所处的复杂外部环境进行大量信息交互,且接口和交互的信息是动态变化的,无法完全预先设计.环境变化将导致系统功能发生变化,进而改变体系结构.系统越开放,系统应对变化和产生新秩序的能力就越强.在复杂系统中,随机扰动和小事件往往起到决定性作用,会对系统产生重大影响,无穷多的小因素大大增加了复杂系统建模的难度.因此应加强系统外部接口的分析设计,特别是分析接口中的各种变量对系统可能产生的非线性影响.
(2)鲁棒性分析设计
常规的风险管理难以有效应对涌现性相关风险,而系统的反馈机制决定了系统的鲁棒性反馈对于系统进化来说尤为重要,利用反馈信息不断优化自身的进化算法具有天然的反脆弱性.因此系统设计时必须考虑建立快速有效的信息反馈机制,并采用进化算法来提升系统设计的鲁棒性.短周期的迭代试错也有助于系统设计的持续快速优化,从而提升适应性和反脆弱能力.
(3)系统层级划分及内部通信设计
对复杂系统各个层级而言,要素之间的关系比要素本身的特征更重要.每一层内部及不同层之间的接口设计是涌现性和整体性设计的重要部分.因此,应结合复杂性科学和网络科学的理论来对软件架构进行建模,并对不同层级间以及同层要素间的接口进行分析设计.此外,还应充分分析自组织性所引发的需求和体系架构随时间变化的规律,考虑系统的多要素、多变量以及相互间的依赖关系,作为软件架构设计的基础.
(4)体系的自我学习和演化分析设计
复杂系统的自我学习和自我演化能力决定了体系的涌现性和自组织性,系统必须对内外部环境持续进行扫描和分析,识别影响体系性能的涌现式趋势和条件,并通过机器学习、递归算法以及正反馈机制,确保体系能自适应地应对涌现出的特征.体系结构的自我演化则要求对体系结构的演化历史进行记录,并通过对体系结构演变和体系内外部环境的综合分析,来设计未来的体系结构.系统的学习功能包括识别非预期的结果、形式、结构或属性,处理对系统及其子系统有意义的结果,以及增加适当的响应[11].应结合知识工程,通过多次迭代获取与软件分析、设计、验证和确认等活动相关的知识,并建立知识的表示和使用机制来实现系统的学习功能.
(5)提升系统分析设计的预测性
复杂系统的规律可以事后总结,但基本不具备可预测性,最多只能对短期、局部进行预测.本模型除采用综合集成法充分利用专家的经验和建议得到相对准确的先验概率,再结合机器学习算法来建立系统模型以预测系统未来的需求和结构变化外,还通过短周期迭代来及时处理短期和局部的预测,并结合风险管理加强技术风险的识别和分析,以应对复杂系统的不确定性.
4 结 论
本文基于系统科学相关理论方法、知识工程及敏捷方法,对一般系统工程和软件工程方法进行扩展,建立了一种适用于复杂系统软件的生命周期模型,并提出了软件分析设计的扩展要求,以保证软件的可信性和质量.
后续将在现有研究基础上,继续开展系统学理论,以及知识工程、敏捷方法、DevOps等工程技术方法在复杂系统研制和运维中的应用研究,特别是在软件可信性设计中的应用,并将在工程型号项目中对研究成果进行验证,根据项目反馈对模型进行不断完善和优化,提升模型的实用性和适应性.