胡剑波,李 俊,郑 磊,邢晓波
(空军工程大学装备管理与无人机工程学院,西安 710051)
以信息技术和信息集成为主要特征的现代高科技快速发展,给人们带来自动化、信息化、便捷化的现代实用系统,同时也给复杂系统的设计、开发和运行提出了严峻挑战。这些复杂系统的安全性要求更高、安全影响因素更多、安全因素之间的关联性更强,尤其在系统交联、信息融合、人机结合、软硬件结合等方面引起的系统性风险愈加突出。为此,人们必须在设计、开发和使用等环节牢固树立系统安全观念,使新技术在带给人们幸福生活和各种便捷的同时,远离因系统性原因而引发的事故。
事实上,计算机、软件等高新技术的飞速发展带来了事故特征、模式的深刻改变,出现了许多新的事故类型。许多新型系统的事故并不是因为系统组件的故障,而是因为非故障组件之间的不安全相互作用所致,尤其表现为系统交联不良、系统组件之间非期望相互作用、系统能力不及等非故障因素。这种现状迫使人们重新考虑那些基于可靠性理论、概率论和统计分析等数学方法基础上的传统安全性分析方法,也充分暴露了那些建立在线性事件链、故障率、线性独立性等假设基础上的传统事故模型的局限性。同时可以发现,这些传统事故模型的各种假设,不但违背了复杂系统相互关联的本质属性,而且不能如实反映系统运行所依据的上下文信息,包括历史背景、当前态势及目标任务,以及难以描述复杂系统多输入、多输出、非线性、有记忆等根本特征。正如文献[1]中所描述的那样,对于复杂系统的安全性问题,需要充分考虑组件故障、组建不良交联、软件需求分析不充分、组件性能变化共振以及人为和组织差错等带来的影响或后果。
首先,现有方法在分析复杂系统方面存在着局限性。安全工程的现有方法十分适合于防止诸如组件故障等简单的事故原因,但难以识别诸如有缺陷的需求等其他复杂的事故原因。事实上,大多数流行方法是基于预定方式错误行为的组件模型或者故障模式的,但这些模型并不适合于复杂系统及人为和组织差错。安全工程活动常常在系统开发过程的后阶段才开展,此时已经有相当详细的设计用于安全性分析,但这一方法恰恰限制了可采用的解决方案,而且可能引起设计更改,实施起来代价极其昂贵。尽管人们已经努力采用传统方法来分析复杂的人为任务或者软件模型,但这些方法只将人员或软件当作特殊的系统组件,而没有从系统角度提出整个安全性的集成观点。事实上,安全性是一种与系统中多个组件之间相互作用行为相关的涌现特性。换言之,安全性是一种系统特性,它只在系统组件集成的环境中涌现。例如,软件就是由物理实现抽象出来的一种想法,其本身不可能是安全或者不安全的,软件只有通过影响相关组件的行为才会引发事故。应该看到,许多事故并不是由于单个组件故障引起的,而是由于系统内部的多个运行组件之间相互作用的复杂过程所引起的。不幸的是,尽管可以用多种分析方法用于单个组件分析,但几乎没有可用于分析整个系统复杂关系以及软件、硬件和人为组件之间相互作用的综合方法。
其次,软件错误给安全工程技术带来了巨大挑战。在过去,大多数事故可被追溯到系统中的不可靠组件或者突发性故障。幸运的是,现有安全工程技术在阻止因为组件故障引起的事故上已经十分有效,然而现有大多数事故并非因为组件故障引发的,而是由于按设计运行时所碰到的各种复杂情况和组件之间的不期望相互作用。这一现象在软件组件中尤其突出,因为好多事故是由于软件执行了有缺陷的程序和指令。但是现有系统越来越依赖于软件,软件的集成度越来越高,软件之间的关联性越来越强,也使软件成为系统安全的关键所在。为此,软件错误已经成为安全工程技术必须面对的首要任务之一。
再次,人为和组织差错也给安全工程技术带来了巨大挑战。软件的广泛使用同样改变着人机交互和操作员的行为,使人为和组织差错具有了新的特点。在过去,操作员通常根据简单和具体的指令来直接执行任务。现在,越来越多的系统开始采用自动化技术,旨在减少操作员的劳动强度和缩减人力资源。只要能采用自动化的任务,就会采用自动化的方式来完成。这样,操作员不得不承担起另一种更为重要的角色,即监督这些先进的计算机系统,并执行自动化难以实现的复杂操作任务,如故障诊断、在线维护等。这势必极大地增加了人机交互的耦合度,人为和组织差错不再仅仅受类似于失效或者分心等那些琐碎问题的支配,而受整个复杂过程的支配,主要依赖于人员所接收反馈信息的类型和质量,以及人员操作所处的运行上下文信息。可见,尽管自动化代替了大量简单、重复的任务,但那些不能被自动化的任务还得由人来完成。显然,这些没被自动化的任务往往是无规律可循的、需要人员根据所处上下文、结合实际经验来执行的繁琐、困难任务。这些任务的复杂度高、要求高、难度大,容易导致人为和组织差错。将近70 %的航空领域事故是人为和组织因素所致的事实也在某种程度上说明了这种情况。
可见,传统的危险分析技术均假定事故是由于组件故障或者失效[2]引起的,并且简化了人为和组织因素[3-4]。尽管人们企图通过扩展这些传统危险分析技术来应对包括软件错误和人为和组织差错,但所作的假设并不能与当今所构建系统的基本属性相匹配。例如,大多数软件相关的事故可追溯到不完全或者有缺陷的软件需求[5]。当然,FTA等现有的分析方法十分适合于组件故障分析,但很容易忽视一些复杂的不安全要求。同时,新型系统正在改变人在系统中的作用,人已从步骤的服从者变成自动化的监督者和高级决策者[6]。为此,人们正在引入系统思维方法来考虑系统安全性,建立新的事故致因模型,开展系统安全性分析和控制。近年来,针对现有方法的局限性和复杂系统不断涌现的实际情况,人们开始热衷于用系统思维来考虑系统安全性问题,提出了基于系统思维的事故模型和安全性分析与控制方法。比较典型的有STAMP模型、STPA分析方法[7]和 FRAM 模型、FRAM 分析方法[8]等。这些方法的共同特点在于从系统思维的角度来研究复杂系统的安全性,强调多个组件相互作用在系统安全性分析中的重要性,通过各种约束来规范各个系统之间的相互制约,通过信息反馈来刻画系统运行的上下文背景,刚好弥补了传统分析方法的不足,在应对复杂系统面临的软件密集、新型人为和组织因素等系统安全性难题上具有显著优势,已经引起业界的广泛关注。
本文将从事故模型、危险性分析、危险性控制以及安全性仿真等方面阐述复杂系统安全性研究的最新进展,希望对这一全新领域的研究起到积极的推进作用。本文首先对现有的基于故障的事故模型和基于系统理论的事故模型进行对比研究。进一步研究复杂系统安全性分析的仿真方法,提出仿真系统整体结构以及基于模型偏离和机器学习的安全性仿真分析方法。
所有安全性努力,无论出于前瞻性的事故预防还是出于回顾性的事故分析,都离不开事故模型。事故模型代表着事故分析或者系统设计的事故致因原理。事故模型包含有关于事故如何产生、什么因素导致事故,以及这些因素如何组合、相互作用或者传递而导致事故的各种假设。为此,认清每种事故模型的基本假设是搞清楚每种安全性分析特点及局限性的前提。本节描述了各种当今流行的事故模型,归纳相应假设和局限性。
下页表1给出了两种基于故障的事故模型和两种基于系统思维的事故模型在模型假设、模型特点、应用场合、应用领域等方面的比较,从中可以看出在复杂系统安全性分析与控制中适宜采用的事故模型应该是基于系统思维的事故模型,而不是传统的基于故障的事故模型。
尽管事故模型解释了在一定假设条件下事故为什么发生、如何发生,但这些模型并没有规定分析系统安全性所需步骤。当然,人为和组织行为、软件出错、需求缺陷、上下文等问题难以用事故模型或者不可能用事故模型来描述,并且多为非线性、强耦合事故原因,传统的基于故障模型方法已经力不从心。主要表现在:
1)基于概率论的事故模型方法不适用于需求缺陷分析。许多一般情形下能够正常运行的系统,但其可能存在着需求缺陷,激发软件错误或者人为和组织差错。在事故发生之前,一般没有数据来支持这种缺陷的发生概率,只在事后才发现这种缺陷。为了发现缺陷并形成新的安全性需求,需要采用有效方法来阐述这些问题,而不是估计其发生概率。
2)基于故障方法一般被用来捕获那些引起不期望事件的系统组件故障传递,容易忽略导致事故的整体性因素。随着当今系统复杂度的不断提高,越来越多的事故并非由组件故障所致,而是由于关键设计错误或者需求存在缺陷所致。
3)许多在表面上看起来相互独立的组件,但其工作原理十分相似,其运行性能受到同样的环境因素影响,当一个组件出现故障时,也就意味着另一个组件出现完全相同的故障,预期的主备份构型、冗余结构均会失效。
4)人为和组织差错依赖于极其复杂的上下文,需求缺陷也是造成人为和组织差错的原因之一。在基于故障模型的方法中,只用“人为和组织差错”来标识或者做忽略处理,难以刻画人为和组织行为的相关因素,如现场环境、过去的经验以及临时的想法等等。
5)软件出错与执行的时机、环境、次序等上下文有关,需求缺陷也是造成软件错误的原因之一。如果软件执行中碰到以前未曾分析过的“意外”情况,软件就会错误地执行,出现设计者未曾预料的结果,很可能起因于需求缺陷。
表1 4种模型的对比
目前,有两类使用的事故分析模型:一类是事故分析方法,另一类是危险分析方法,统称为安全性分析。事故分析方法描述事故模型如何识别所发生事故的原因。危险分析方法主要用于现有系统或者正在设计的系统,描述事故模型如何识别未来可能发生事故的潜在原因。下面主要阐述FTA、ETA和FMEA等现有的危险分析方法,指出需要面对的实际难题。
下页表2给出了STPA、FRAM、HAZOP和传统方法等危险性分析方法的假设条件、优缺点、应用领域等方面的比较,从中可以看出复杂系统安全性分析与控制中适宜采用的分析方法应该是基于系统思维的分析方法,而不是传统的基于故障的分析方法。
危险性控制是指消除所识别危险源或者将危险源影响减缓至可接受水平的所有技术和管理活动的总称[36]。危险性控制是一种受约束于危险源识别能力、可利用技术水平和可承受成本,以所识别的危险源、人为和组织差错和运行要求为输入,综合采用技术手段、人为控制手段和管理控制手段,消除危险源或者减缓危险源的影响程度至可接受水平的复杂控制问题。
一般地,从技术控制、人为和组织行为控制和管理控制等3个方面来实现危险控制。技术控制采用技术措施对固有危险源进行控制,主要有消除、减缓、防护、隔离、监控、保留和转移等措施。人为和组织行为控制就是控制人为和组织差错,减少人不正确行为对危险源的触发作用。人为和组织差错的主要表现形式有:操作差错、指挥差错、不正确的判断或缺乏判断、粗心大意、厌烦、懒散、疲劳、紧张、疾病或生理缺陷、错误使用防护用品或防护装置。管理控制技术采用建立健全危险源管理的规章制度、定期检查与日常管理、信息反馈与隐患排查、危险源归档与设置安全标识牌以及安全考核评价与奖惩等管理措施,对危险源进行控制。表3给出了事件链、STAMP、FRAM和HAZOP等事故模型所对应的分析结果、控制任务及控制方法对比。
表2 危险性分析方法对比
表3 危险性控制方法对比
近年来,安全性仿真是一个很热的研究领域,但现有的安全性仿真还是比较基础的,其内容主要集中在自动化分析、情形模拟与验证以及相关参数计算与分析等方面,其类型主要有危险源展示型和激励模拟型两种,还存在着仿真功能局限性大、仿真信息利用率低以及系统性不强等问题。
首先,尽管已经认识到系统安全性仿真的重要性,但没有用系统思维来开展复杂系统安全性仿真,其工作还集中在几个基础性方向上,缺少综合性。1)自动化建模与分析。面对安全性分析过程费工、费力的实际情况,研制出用于安全性分析的自动化工具,如FTA、FMEA、STAMP等自动化分析软件,通过自动化工具来实现安全性建模、分析等具体工作,以提高安全性分析的工作效率。2)情形模拟与验证。面对许多事故是其运行上下文背景、当前态势、所执行任务、人工操作等因素的综合结果,而这些几乎不可能在实物上做情形再现,需要通过情形模拟来开展相应的验证和分析工作,如在许多飞机飞行模拟器中,具有情景模拟、人工操作、事故再现等仿真能力,以便进行飞行不安全因素分析或者事故原因分析等。3)相关参数的计算与分析。面对安全领域存在的一些小概率威胁或者周期较长的故障,需要通过仿真来进行分析,突破时间约束提高分析效率,如飞机人机诱发振荡、空速管堵塞等事故原因分析。
其次,现有安全性仿真系统的功能相对简单、用途也十分有限,只是对安全性建模与分析结果的直接仿真验证,主要分为危险源展示型和激励模拟型这两种类型:1)危险源展示型,即通过仿真危险源的工作机理,达到必须严格遵守安全规范以及相应的安全警示作用。从本质上讲,这种仿真只是对所识别危险源的直观演示,其针对性很强。如许多安全训练模拟系统、安全法规教育系统均属于这种类型的安全仿真系统。其基本架构如图1所示。2)激励模拟型,即由人工设置事故原因来激励系统的机理模型,通过安全性参数监控,进行安全性操作,并验证安全性措施的有效性。如许多安全评估系统、训练器材均属于这类安全仿真系统。
图1 危险源展示型仿真架构示意图
其基本架构如图2所示。
图2 机理模拟型仿真架构示意图
另外,尽管上述两种类型的实施相对容易,但在仿真功能、信息利用以及系统架构等方面存在着严重的不足:1)仿真功能的局限性大。从本质上讲,类型1只是所识别危险源的直观演示,其内容、情形均具有局限性。类型2只是对所识别危险控制作用及其抑制措施的有效性验证,本身只是一个面向事件的仿真,存在着假设条件过多、仿真内容不全面等问题。2)仿真信息的利用率低。类型1或类型2仿真缺少与事故模型和分析方法的内在联系,不能或难以将仿真结果反馈至安全性模型与分析过程,不能用仿真结果来改进安全性模型和分析方法。3)系统架构的整体性差。类型1或类型2仿真没有采用系统思维的观念来全面构建复杂系统安全性仿真系统,对于实际系统普遍存在的组件不良相互作用、上下文背景、人为和组织差错等事故原因,其仿真能力十分有限。
为此,应努力扩展安全性仿真类型,开发集机理建模、事故模型、危险性分析以及危险性控制等于一体的综合型仿真系统,除了继续加强常规的自动化分析、情形模拟与验证以及相关参数计算与分析等内容开发,还要加强仿真功能、提高仿真信息利用率、优化系统架构,以满足复杂系统安全性仿真的需要。
复杂系统的综合型安全性仿真是建立在复杂系统运行机理仿真基础上的,它通过注入组件故障、上下文环境、人为和组织差错、组件之间非良好的相互作用等事故激励,不但要实现复杂系统工作机理、运行环境、人-机协同以及状态监控等物理过程仿真,还要依据物理过程模型和其事故模型进行系统安全性分析以及安全控制对策的仿真,涉及复杂系统工作机理仿真、安全性模型仿真、安全性分析方法仿真、安全性控制措施仿真、事故激励和上下文信息仿真等6个模块。
下页图3给出了这种综合型安全性仿真的整体架构。下面详细描述每个模块的主要功能和实现原理。
物理系统:需要根据实际对象的工作原理采用适当的软件来构建。对于飞行控制系统等基于牛顿第二定律的物理系统,其机理模型是以动力学微分方程、解析关系、时间次序、状态流程等形式来描述的,可以由Matlab等工程计算工具软件来构建[37]。而对于机翼、油箱、电子线路等基于材料力学、热力学或者电磁场理论的物理系统,其机理模型常用偏微分方程来描述,可以采用Anysys等有限元分析工具软件来构建[38]。应该指出,这些仿真模型可以借用其他项目中所采用的成熟软件。如为了研究飞行控制系统的安全性,可以直接采用工程化的飞行仿真软件,只需要留出故障设置、上下文数据采集、状态监控、安全控制作用、人-机接口等接口就可以了。
图3 综合型安全性仿真的整体架构示意图
事故模型:需要根据对象的实际情况以及可得到的资料、经验和数据来构建合适的事故模型。对于复杂系统而言,前面介绍了两种事故模型。对于FRAM模型,可以采用Matlab的Stateflow工具来构建,且每个功能的6个属性可以用Stateflow的有限状态机来实现。对于STAMP模型,可以用Matlab的模块化工具来实现分层控制结构模型,而其底层的各个控制回路可以用Matlab的Simulink来实现,组成由过程模型、执行器、受控对象和传感器等组成的闭环控制回路。当然,需要在设计中留出上下文信息接口。
危险性分析:对应于所采用的事故模型。如果采用的是线性事故模型,可以用FTA、FMEA等自动化分析软件来分析[39],其定量分析所需的数据可以来自经验数据,也可以从物理系统的仿真计算来得到。如果采用的是FRAM事故模型,其分析模型和事故模型是同一个模型,需要根据物理系统的运行逻辑、时间次序和参数变化,当作各个功能的输入、输出、事件、前提和控制,在Matlab环境下来完成功能共振分析。如果采用的是STAMP模型,其分析方法采用STPA方法,需要开发自动化的工具软件来执行STAMP的步骤1和步骤2,以确定每种危险情形所对应的危险控制作用,并依据底层控制回路分析得到每一种危险控制作用的直接事故原因。尽管这一自动化工作十分艰难,文献[40]还是开展了一些研究,并取得了一定的成功。
控制对策:控制对策来自事故模型以及危险分析的结果,是将危险分析的结果作为安全性措施落实到具体的物理系统中。为了有效地实现这些控制对策,需要接受事故激励和上下文信息,以形成控制算法或者控制指令,且需要用程序来实现这些基于激励和上下文信息的控制算法或控制指令。鉴于Matlab、Ansys等均具有编程环境,一般就可以实现这些控制算法或者控制指令,以作用于物理系统。
事故激励:事故激励是一组在一定背景下能够引起事故的动作,这些激励可能是组件故障、组件组合故障、组件之间不良好相互作用、人为和组织差错、软件出错或者需求缺陷,并只有在一定的上下文背景下才会引起事故。为了有效地实现事故激励,需要将故障建模和危险性分析的事故致因转化为事故激励模型,并将其描述为数学表达式或者逻辑表达式,便于在Matlab、Ansys等编程环境下实现,以作用于物理系统。
上下文信息:上下文信息是在事故建模、危险性分析、控制对策、事故激励模拟和物理系统运行中所不可或缺的有记忆物理参数集合。一般包括面临的任务、过去的背景以及当前的状态。如果系统采用的是线性事故模型和FTA、FMEA等危险性分析方法,上下文信息主要表现为故障组件或组合故障组件的性能变化趋势或者突然改变,很容易建立数学模型,并在Ansys、Matlab中来实现。如果系统采用的FRAM、STAMP等事故模型,其不再仅仅是组件故障或者组件组合故障等性能参数的变化或者突然改变,而是包括人的操作习惯、操作人员没时间响应警告信息、操作人员没有注意到警告信息等更为复杂的可记忆信息,很难用数学模型来描述,更不容易在Matlab、Ansys的编程环境下实现。尽管上下文信息仿真十分困难,但文献[41-42]还是开展了一些研究,并取得了一定的成功。
可见,该整体架构中的事故激励和上下文信息模块反应了复杂系统事故模型FRAM和STAMP的系统思维,即现有复杂系统的大多数事故并非由单一的组件故障或者组件组合故障所致,而是由上下文信息的理解不正确、解释不合理或者响应不及时所致,这其中包括过程模型构建错误、需求缺陷、软件错误、人为和组织差错以及组件之间的非良好相互作用等。应该指出,仿真方法也是安全性分析的有效辅助手段之一。下页图4给出了基于模型偏离和机器学习的安全性仿真分析示意图。其中的派生模型是在标称模型的基础上引入各种偏离而得到的系统运行模型。通过仿真这些派生模型,得到大量关于输入集合、输出集合的仿真结果。由于派生模型会很多,其仿真结果也会有许多,人工分析就会面临十分巨大的工作量。为此,采用机器学习方法,从大量的输入/输出数据集合中,挖掘出危险偏离事故综合规则集合。
图4 基于模型偏离和机器学习的安全性仿真分析示意图
4.3.1 仿真方法也可用于危险情形识别
为了发现常规分析没有发现的危险情形,可通过构建偏差模型来完成基于偏差的安全性仿真与分析。其方法是利用偏差模型及其组合,进行仿真计算,由机器学习自动完成结果分析,得出偏差导致危险的情形结合。显然,对于没有建立模型的机理,仿真方法是没有办法开展其安全性分析的。为此,需要根据系统的工作方式以及有关的经验知识来构建有意义的偏差模型,为通过仿真方法发现潜在危险提供模型支持。
4.3.2 安全性仿真有别于常规的系统仿真
安全性仿真是在假设了系统运行中可能遇到的诸如组件故障、组件不良交联、人为和组织差错、需求缺陷、软件错误等情形,以研究这些情形是否导致事故。在仿真中,可以用偏离(如组件实际行为与期望行为的偏离、组件交联实际性能指标与期望指标的偏离、实际操作与期望操作的偏离、所作需求分析与客观需求的偏离、软件实际运行效果与期望运行效果的偏离)来描述组建故障、组建不良交联、人为和组织差错、需求缺陷、软件错误等情形,构成可能导致事故的原因集合,且每个集合元素又会有多种不同的表现形式(如人为和组织差错可能是操作人员没接收到应该收到的信息,而这种信息的种类、样式、时机均十分多样)。应该指出,这些偏离恰恰就反应了复杂系统事故模型希望达到的目的。当然,对于实际对象的正常标称系统,其仿真可以做到全面、完整和合法。但对于偏离集合及其子集,仿真模型的具体形式就会有无穷多种,仿真结果也会多种多样。本文任务是从仿真结果中挖掘出可能导致事故的事故原因。由此可见,安全性仿真的难度要远远大于一般的系统仿真。
4.3.3 安全性仿真的几个要点
一是要选择好仿真工具。可以用Matlab、Ansys等工具来构建复杂系统,处理好多事件、多流程、多变量以及强耦合等方面,尽量采用模块化方法来构建各种“功能”。例如,在FRAM仿真中,应使功能具有“输入、输出、时间、前提条件、控制、资源”等属性,并对各种属性定义偏离样式。这样,便可根据实际情形,快速地组成满足特定偏离条件的仿真系统,检验其安全性,发现危险,找出可导致事故的原因。
二是要研究复杂系统的定量化事故模型。STAMP是一种很好的复杂系统事故模型,但其仿真就会遇到定量化的难题,因为现有STAMP模型是很难定量描述各种偏离的。为了将STAMP模型定量化,需要研究偏离集合与输出集合之间的映射关系,并提出安全性相关的偏离边界条件,以指导安全性仿真,从而避免无谓的重复仿真。
三是要研究人为操作、需求分析和组件之间交联等偏离的定量描述问题。在STAMP模型中,常常用“精神模型”与实际模型的不一致性来描述人为和组织差错、需求缺陷或者组件之间的不良交联,均是定性的。而在仿真中必须定量地实现这些偏离,目前还需要进一步深入研究。
随着系统复杂性的日益增加,传统的基于故障模型的事故模型,由于其不能反应组件之间不良交联、需求缺陷、软件错误、人为和组织差错等事故原因,正在被基于系统思维的FRAM、STAMP等系统事故模型所替代。本文从复杂系统安全性的系统观点出发,对比了传统事故模型和系统事故模型,指出了传统事故模型的不足和系统事故模型必须解决的难题,指出FRAM、STAMP等事故模型在安全性事故建模中的合理性。进一步对比了传统危险分析方法和系统危险分析方法,指出了传统分析方法在实际使用中难以解决的问题和系统分析方法必须具有的特征,指出FRAM、STPA等系统分析方法在危险分析中的优越性。同时,给出了安全性控制策略的对比,指出了其相同点。最后,在分析现有安全性仿真系统内容、类型和主要问题的基础上,提出了一种综合型仿真系统,给出了一种集系统机理模型、事故模型、分析方法、控制策略等于一体的安全性仿真整体架构,并讨论了安全性仿真系统构建的基本思路。对今后复杂系统的安全性分析提供了新的思路,即应从系统的思维、数学理论、定量和规范方法格式等方面入手来完善FRAM、STPA等系统分析方法,进而改善现有的安全性评估方法,弥补其存在的不足,也为今后深入研究安全性分析方法指明了值得关注的途径。