您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 软件安全性分析中故障树方法的应用
软件安全性分析中故障树方法的应用故障树分析法(FTA)是硬件可靠性、安全性分析的传统技术工具.20世纪80年代,软件的可靠性和安全性开始成为科技界关注的课题,为了适应软件安全性分析的需要,故障树分析法被移植到软件这个新领域.。经过20年不断的应用和创新,现在软件故障树分析已经成为软件安全性分析的重要手段并简称为SFTA.软件故障树分析极具应用潜力,在软件开发的早期,可以用故障树分析来确定软件的安全要求,进入概要设计、详细设计设计和实现阶段,可以对故障树加以扩充,继续进行更深入的分析.故障树分析法对于硬一软件复合系统的安全性分析尤为有效,分析人员可用它分析程序产生安全事故的各种原因,分析系统任何部分发生的失效,分析硬件、软件和操作员的失误,并可以识别潜在的、复杂的失效模式。SFTA涉及的内容十分丰富,受篇幅限制,本篇文章介绍的是SFTA的基本框架和方法。1故障树的逻辑关系a.逻辑或门设x1,x2表示两个不同的事件,如果两个事件中至少有一个事件发生便能导致另一个事件x3发生,则称这种关系为逻辑或门关系,相应的布尔代数式为(1)其逻辑图见图1b.逻辑与门事件x1和x2必须同时发生,x3才能发生,这种关系称为逻辑与门关系,相应的布尔代数式为(2)其逻辑图见图2c.逻辑否定逻辑否定表示同原命题相反,用x1表示事件发生,则其相反命题事件不发生用x1表示,在分析逻辑否定关系时经常用到德莫根定理(3)(4)进行故障树分析需要绘制故障树图.故障树图类似于一棵倒立的树.树的根部位于图的上方,代表需要分析的危险事件(或关键性失效)事件,从顶向下再层层衍生出许多分支,形成了若干的分支点,这些分支点代表了危险事件形成过程中的中间事件,分支的终点,类似于树叶,代表了可能导致危险事件发生的基本事件.为适应绘制故障树图的需要,在故障树分析法发展过程中,形成了一套可靠性工程界公认的图形符号标志.软件的故障树分析法的思路与硬件故障树分析法基本相同,因此这套源于硬件故障分析的图形符号,也为软件分析所采用.感兴趣的读者可从各种硬件FTA的资料中找到,本文不再赘述。2危险分析危险分析是进行系统安全分析必须采取的第一个步骤,也是故障树赖以建立的必要前提.危险分析的目的是确定系统可能出现的各种不安全状态(或关键性失效状态),从安全的角度确定哪些失效是可以容许的,确定哪些失效是不可容许的,确定在危及安全的失效发生或可能发生时,怎样使系统处于失效一安全状态的措施.通常系统可能由于以下的原因而进入不安全状态:(l)硬件部件失效;(2)系统部件接口出现的问题;(3)操作中的人为错误;(4)环境应力;(5)软件控制错误.使系统处于不安全状态的软件控制错误有以下五种类型:(1)不能执行某一要求的功能,这个功能很可能从来没有执行过或者是在要求执行时没有反应;(2)执行了一种非要求的功能,即产生了一个错误的回答或者回答的时机和环境不恰当,例如偶然地、过早地或过迟地启动了传动机构,或者未能在要求的时间停止某项操作.(3)顺序问题上的错误;(4)不能识别某些需要采取改正措施的危险条件;(5)对于某些危险条件产生了错误反应.在对系统的软件进行危险分析时,不仅应该考虑软件的控制错误,而且必须研究软件和系统其他单元的接口.有些软件的控制动作只有在系统的其他元件失效时或者在异常的环境中才会使系统出现不安全状态.在对系统的软件进行危险分析时,还必须把操作者的因素考虑在内.要仔细地考虑控制系统中的人机接口.给操作者提供系统当前状况的信息是保证系统安全运行的一个必要措施.例如飞行着陆软件的安全性能,必须达到飞行员要求的标准,否则飞行员宁可人工操作,而不愿冒险去使用自动着陆系统.然而在飞行高度过低时,人工操作同样是危险的。因此软件系统不仅应使飞机能安全飞行和安全着陆,而且应按飞行员希望的方式飞行和着陆,才能使他们对飞控软件的安全性具有信心。使操作者保持信心的一个重要方法是不断地提供有关数据,操作者能主动的监视系统运行的动态过程。当系统正趋向发生错误时,系统及软件的信息尤其重要。只有在正确、及时获得和分析这些信息之后,操作者才能对系统进行有效的监控和干预,才能采取正确的避错和失效安全措施。3、构造故障树软件故障树的建造步骤与硬件故障树基本相同.而且软件故障树所用的标志符,除某些特殊情况下新增加的符号外,也与硬件故障树相同.软件故障树分析的这些特点,使得硬件故障树与软件故障树可以在接口处平稳的相互联接,从而实现从硬软件复合系统的故障树分析向安全关键部位的软件故障树分析过渡。软件故障树分析可以在软件开发期的各个不同的阶段中使用。在开发早期的高层次的故障树中,既包括硬件,也包括软件.图3是以‘火轮”系统空间飞行器自转速度过快为顶端事件,然后展开的高层次的故障树例图,‘火轮’系统的细节在节4中另有介绍。在图3中我们看到有两处出现了与软件有关的事件,这两个事件都可随着软件设计的深入,进一步加以展开,直至最底层.软件故障树分析的最低层次取决于分析的要求,原则上可以深入到程序的编码或语句。在进行最低层次的编码语句故障树分析时,应以代码的输出为出发点,然后反向追溯,分析程序的控制流程是通过什么途径转移到被分析的部位,分析它怎样给各个输出变量赋值.图4显示了怎样用反向追溯法,分析IF-THEN-ELSE语句。进行软件故障树分析时,首先假定某个不希望事件在执行这个语句时发生,然后通过构造故障树来描述这个事件发生的过程.图5是以语句“IFABTHENX:=F(X)ELSEX:=10”为对象,当事件“X>100”发生时所构造的故障树图。在图5右部的子树代表一个不可能出现的事件,可以从故障树图中删除,此后可以继续针对事件“ab”和事件“X:=f(x)产生,X100”展开,最终可以找出与图5顶端事件有关的全部基本事件.对于下列主要由赋值语句组成的程序段P:a:=ran(0);G:b:=0.01;IFabTHENFIRE;应以‘调用FIRE’为需要分析的事件,分析之后得出的逻辑关系见图6.在函数调用中发生的错误,可能源于参数不当或程序的错误,其故障树示于图7。对干WHILE循环语句,其故障树图示于图8为了说明WHILE语句故障树图的实际应用,我们用一个简单的程序段作为分析案例,这个程序段是WHlLEbxdoBEGINb:=b-1;Z:=Z+10;END;选择‘Z>100’作为需要分析的事件,其故障树图见图9。图9中左边的子树表示WHILE语句没有执行,这种状况意味着z一开始就大于100而且b小于或等于x。图9右边的子树是反映Z在循环体中数值的变化.令n表示执行中的循环次数,Zn表示Z在n次循环中的数值,Znl00是在循环中需要分析的事件。在研究了上述程序段后,可以得出Zn=Z0+10n(5)由于在n次循环以后bn=b0-n,在停止循环时bn=x,所以b0-x=n(6)从式(5)和式(6)得出100<Zn<Z0+10(b0-x)(7)4、故障树分析实例Lereson和Harvey应用故障树分析了‘火轮’系统.火轮系统是一个由宇宙飞船发射的空间飞行器,它带有一个金属丝网架,网架终端有一个电场传感小球.火轮系统的飞行控制程序由1250行Intel8080汇编语言的语句构成,通过微机控制该小球对地磁拖尾中的电场进行抽样检测,然后由微机将抽样值变换为遥测信息发出.飞行器上的其他设备也由这个程序控制.出于费用方面的考虑,飞行器不能接收卫星地面站的指令,一切决策必须由飞行器的微机作出。金属丝网架是依靠空间飞行器旋转赋予传感小球的离心力而放置的,当网架的长度增加时,飞行器的转速减慢,所以微机还控制了一个小推进器,推进器喷口的位置与飞行器壳体相切,打开气体控制阀可以增加飞行器的自旋速度.飞行器的自旋速度必须处在一定的速度区间之中,才能圆满的完成预定的任务.在网架放置时,很可能因为飞行器的速度过快,产生的离心力过大而发生失效.实验数据表明,当飞行器的离心力超过重力25倍时,网架将缠绕在飞行器上.所以这个系统的关键失效事件是金属网架损坏.图10是以“飞行器自旋过快”作为顶端事件构造的故障树图,图11是以“PERIOD太大”为顶事件构成的故障树图.图中的PERIOD,LENTH,MONITORSPIN,GASON,GASOFF等是程序中的函数,其余的标示符是程序的变量名。用故障树分析之后发现,在‘火轮’运行过程中,如果在64毫秒的时间区间内,发生两个太阳脉冲造成的中断事件,就足以使微机控制失效,从而导致金属丝网架损坏.这个发现为改进空间飞行器的设计提供了重要的依据.在此之前,由独立的测试组已经对程序进行过非常严格的测试,但是未能发现这个潜在的重大问题。5软件故障树的定量分析和硬件故障树分析法相似,软件故障树一旦建成,就可按照故障树的逻辑关系,将顶端事件与各个基本事件的关系用一个布尔代数式来表示.这个布尔代数式又称为顶端事件的结构函数.按照布尔代数运算法则对结构函数进行简化,可得出结构函数的‘积之和’型.这种结构函数的每一个‘积之和’项,代表了顶端事件发生的充分和必要条件.如果每一个基本事件发生的概率是已知的,顶端事件发生的概率就可以计算出来.除此之外,还可以对故障树进行灵敏度分析,找出对顶端事件影响最大、最灵敏的基本事件.在进行故障树的分析和计算的过程中,必须对软件故障树的各个基本事件是否满足统计独立的假定进行论证.只有在进行近似分析时,才能直接采用相互独立的假设.这种作法得出的结果,虽然不够准确,但是在比较各种备用方案的优劣时,仍可发挥重要作用。SFTA使用的数学工具及具体计算方法,受限于篇幅,本文从略。需要提请读者注意的是,软件故障树分析法的定量分析能力并不是它最重要的用途.软件故障树分析最重要的意义在于,根据分析的结果可以找出关键性的安全事故发生的原因,可以用于指导软件的安全性设计和测试、确定软件测试的重点和内容,使系统的安全得到更充分的保证.例如软件故障树分折提供的信息,可以用来判断哪些模块是安全关键单元并且确定是否需要进一步采取容错措施,软件故障树分析中揭示的系统失效的条件,可以用来识别系统的不安全状态,决定在什么情况下应该必须采取失效_安全措施.在本文的结尾,还想再次对爱好FTA方法的读者指出,软件故障树分析法存在固有的局限性。SFTA的分析工作相当繁琐费时,实际上不可能在编码的层次对整个系统进行彻底的分析,所以软件故障树分析法一般只限于在程序的安全关键部位使用。不顾这种客观存在的约束,企图将软件故障树分析方法拓展为一般的可靠性分析工具的作法是不明智的。此外不能因为应用了软件故障树分析,就在设计中放弃避错、查错措施,软件故障树分析法很难考虑系统的时间效应及环境条件导致的失效,系统的各种接口中的问题,也不能仅仅靠软件故障树分析来解决.在对实时系统进行分析时,软件故障树分析的这些特点,应该予以充分的考虑。
本文标题:软件安全性分析中故障树方法的应用
链接地址:https://www.777doc.com/doc-2011231 .html