软件可靠性安全性技术课件.ppt
《软件可靠性安全性技术课件.ppt》由会员分享,可在线阅读,更多相关《软件可靠性安全性技术课件.ppt(123页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件可靠性安全性技术 1 精品文档几个基本术语v 故障(Fault)v 差错(Error)v 失效(Failure)v 缺陷(Defect)v 失误(Mistake)v 隐错(Bug)2 精品文档软件质量的一个示例 在一段Visual Basic 6.0编写的程序Division中,从文本框1中输入数A#,从文本框2中输入数B#,计算C#=A#/B#从文本框3中输出,其程序如下:Public A#,B#,C#Private Sub Division()A#=Val(Text1.Text)从文本框1中输入 B#=Val(Text2.Text)从文本框2中输入 C#=A#/B#Text3.Text
2、=Str(C#)从文本框3中输出End Sub A#=1,B#=0时结果如何?exam13 精品文档软件可靠性 软件可靠性:在一定条件下软件实现所要求功能的能力。关于软件可靠性的误区:软件对一组条件下的运行,如果是对的,则永远是对的,何有可靠性?对软件可靠性误区的回答:对已认为满足了功能和性能要求的软件,为何有的软件在实际的运行中会经常出错?追其原因都是对运行中异常的操作、输入、事件无防范处理措施,诸如人机交互界面软件对误操作经常死机,通讯软件对外界干扰经常瘫痪等,这能说不是软件可靠性的问题吗?4 精品文档软件可靠性的一个示例 前面的exam1就是一个示例。我们再给一个示例。用Visual B
3、asic编写一个读入给定数据文件的程序。用户输入的文件名存放在text1.txt中,数据文件格式是:第一个数是整型数N(表明以下存放了N个浮点数),后续以空格、逗号或换行为区分符存放N个浮点数。OpenFile()子程序完成将数据文件中的N个浮点数读出存放在变量数组A#()中。5 精品文档Private Sub OpenFile()Dim i,N Open Trim(Text1.Text)For Input As#1 打开数据文件 Input#1,N 读入数据个数 ReDim A#(1 To N)For i=1 To N Input#1,A#(i)读入数据 Next Close#1 关闭数据文
4、件End Sub 文件不存在或数据格式错误时结果如何?exam26 精品文档软件安全性 软件安全性:对由于软件的缺陷造成人员伤亡、财产损失等危险事件的防范能力。关于软件安全性的误区:软件只是代码程序和相应文档,软件结果只是对与错,何有安全性?对软件安全性误区的回答:对实时嵌入式软件而言,软件的指令直接控制着硬件的动作,如果软件不对所控制硬件的指令进行安全性保护,有何信心保证系统是安全的?由于软件的错误造成重大财产损失、严重人员伤亡的实例已屡见不鲜,这能说软件没有安全性的问题吗?7 精品文档软件安全性的实例转塔设备的调转控制8 精品文档软件可靠性安全性设计准则9 精品文档 软件可靠性和安全性设计
5、的一般性指导可参考 GJB/Z 102-1997 软件可靠性和安全性设计准则 Q/WE 871-1999 软件可靠性和安全性设计指南 二院制定的武器系统软件可靠性安全性设计准则,则是结合二院以往地空导弹武器系统软件中实际暴露的典型问题,总结整理归纳出的有关软件可靠性和安全性设计的具体细则,适用于二院武器系统软件开发中可靠性和安全性的设计。10 精品文档4.4 圈复杂度的限制1 1 精品文档圈复杂度问题的示例圈复杂度115的控制流图 圈复杂度10的控制流图 12 精品文档4.5 余量的设计 应注意关键软件的余量设计,这些余量包括:存储量、IO通道吞吐量及处理时间等。在同步时间要求较高的系统中,处
6、理时间的余量应不少于20%。如,某系统9ms通讯一次,则该系统的处理时间应小于7.2ms。余量设计为我们在软件测试时使用一些在线动态测试工具,如CodeTest等,提供了必要的应用条件。13 精品文档4.9.1 谨防实数取整的精度损失 实数取整的转换函数int()在C中是截取取整的,如果需要四舍五入,则必须特殊处理。例如:float f=1.9;int k;k=(int)(f);则 k 是 1,而不是 2。14 精品文档实数四舍五入后取整的方法 如果 f=0,则 int(f+0.5)是四舍五入后的取整结果;如果 f 0,则 int(f 0.5)是四舍五入后的取整结果。15 精品文档4.11 安
7、全关键信息码的设计 安全关键的信息码应采用具有检错能力的编码。禁止对关键信息用一位的逻辑判别,如用“0”来表示“不起飞”,用“1”来表示“起飞”。对此具有检错能力的编码可以为用二位的逻辑判别,如用“01”来表示“不起飞”,用“10”来表示“起飞”。显然在有一位可能受干扰的系统假设下,用一位的逻辑判别无法检测其是否受干扰,而二位的逻辑判别则可以检测其是否受干扰,如“00”和“11”就表示信号受到了干扰。16 精品文档安全关键信息码应用的实例操作杆的误信号17 精品文档4.10 异常计算的防范设计 在数值计算中,要充分考虑计算中的异常情况,如:(1)在除法计算中,要考虑除数为0或很小时的计算溢出的
8、处理,可计算前先进行除数大小的判别检查;(2)在开平方根的计算中,要考虑被开根数是否大于等于零,可计算前先进行被开根数的符号判别。18 精品文档异常计算设计问题的实例一有效视线角误差19 精品文档异常计算设计问题的实例二20 精品文档4.13 接口数据的定义 在通讯接口数据定义时必须明确通讯的数据量、数据格式、数据内容、换算要求、传输协议、传输率、误码率。(1)初始状态要设计为0位状态。如,“00表示状态未定”即应为初始状态。又如,用2位表示的:“01表示状态1”、“10表示状态2”、“00表示状态未定”,和用1位表示的:“0表示状态1”、“1表示状态2”,对初始状态的理解是不一样的。21 精
9、品文档(2)对交换字各位解释说明其含义时,单一位的解释说明,不仅要说明为“1”的含义,还要说明为“0”的含义;多位解释说明时,不仅要说明特定组合的含义,还要说明其它组合的含义。如2位组合的含义解释说明时,不仅要说明“00表示状态未定”、“01表示状态1”、“10表示状态2”,还要说明“11”表示何含义(可能是无意义,但要明确说明,有些是不需要处理而保持以前状态,有些是要进行报警或异常错误处理的)。22 精品文档4.15 异常处理的设计 对软件的编程不能只考虑正常情况下的处理,还应充分考虑可能的异常事件的处理。在软件的设计过程中应专门对可能的异常事件进行分析,这一工作称之为“软件失效模式及影响分
10、析”。23 精品文档 如,在对数据文件操作时可以考虑的异常事件有:(1)错误的文件名或文件数(2)文件没找到(3)错误的文件模式(4)文件已经被打开(5)I/O设备错误(6)文件已经存在(7)错误的记录长度(8)磁盘满(9)超过文件结尾的输入(10)错误的记录数(11)错误的文件名(12)太多的文件(13)设备不可使用(14)权限不允许(15)磁盘没准备好(16)不能对不同设备重新命名(17)路径或文件访问错误(18)没找到路径24 精品文档 显然这18种模式无需也不必都考虑,可依据实际情况裁剪考虑。如在人机交互软件中用户选择数据文件,则“错误的文件名或文件数”、“文件没找到”和“路径或文件访
11、问错误”是必须要考虑的,需要对此设计相应的处理方法。如果是具有运行错误陷阱功能的高级语言,如:VB、VC、Ada等,则错误陷阱的使用是很好的方法。无可靠性措施的软件:如当输入的文件不存在时,软件运行被异常终止。用户不知所措,甚至连相关信息都没得到。软件失控了!有可靠性措施的软件:如当输入的文件不存在时,软件提示输入文件不存在的信息,并重新返回到用户输入状态,等待用户终止输入过程,或重新输入。软件始终处于受控!exam325 精品文档4.17 变量的命名 变量命名要清晰。通常的命名有头字母大写命名法和下划线命名法。头字母大写命名法如:InitialValue,ObjectPosition等。下划
12、线命名法如:initial_value,object_position等。现 在 又 流 行 带 类 型 说 明 的 头 字 母 大 写 命 名 法:如intInitialValue表明是int的类型,flObjectPosition表明是float的类型,而用tempInitialValue来表明其是一个临时变量。变量的命名对程序的理解及维护起着非常重要的作用。26 精品文档变量命名问题的实例for(tchflag=0;tchflag14;tchflag+)27 精品文档4.19 变量的初始化 所使用的变量要有明确的初始化,避免使用缺省的初始值。同时,对循环处理过程的变量初始化要特别注意。2
13、8 精品文档变量初始化问题的实例一固化与非固化的差异29 精品文档变量初始化问题的实例二双发时的过程标志30 精品文档4.21 多组条件判别的完全性 C语言中的IF语句推荐的书写格式为 if(id=0)/0的处理;else if(id=1)/1的处理;else/其它情况的处理;注意这里else要求明确写出,要充分利用else进行异常情况的处理。事实上,if处理条件的遗漏是经常发生的,需要特别小心。31 精品文档多组条件判别不完全性的实例 if(mo0&mo0&no10)if(mo11)mp(5);if(no10)mp(6);if(mo0&mo0&no10)else if(mo10)mp(5);
14、else if(no9)mp(6);else/此处进行提示报告 32 精品文档4.22 函数调用返回的设计 函数的返回必须要有运行状态的标识,以使调用者能识别被调函数的运行状态。33 精品文档函数调用返回设计的示例 方法一:可以设置整型函数的返回值,以标识函数的运行状态。如计算三角形面积的函数可设计为:int TriangleComp(float a,float b,float c,float*s)if()/正常时的计算,面积值赋给*s return(0);else if()/出现边长小于零的情况 return(-1);else if()/两边之和小于第三边的情况 return(-2);els
15、e/其它情况 return(-10);int flag;flag=TriangleComp(3,4,5,&s);if(flag0)/异常处理 else/正常处理 在调用时可以进行判别34 精品文档 方法二:可以在调用参数中专门设计一个函数运行状态的参数。如上述计算三角形面积的函数也可设计为:float TriangleComp(float a,float b,float c,int*e)float s;if()/正常时的计算,面积值赋给s返回*e=0;return(s);else if()/出现边长小于零的情况*e=-1;return(0);else if()/两边之和小于第三边的情况*e=-
16、2;return(0);else/其它情况*e=-10;return(0);int e;float s;s=TriangleComp(3,4,5,&e);if(e0)/异常处理 else/正常处理 在调用时可以进行判别35 精品文档4.23 函数调用参数的匹配 函数调用的参数类型、次序和个数必须匹配。类型的匹配一是注意int、float、double、char等类型的匹配,二是注意指针地址和地址内容的匹配。如,int func(float*)的函数,直接调用func(0),则func使用的是0地址单元中的值,而非0值,如要送0值则应先申请“float angle=0;”再调用func(&ang
17、le)。36 精品文档函数调用参数匹配问题的实例回路测试37 精品文档4.28 对GOTO语句的限制 原则上限制使用跳转(GOTO)语句,在使用GOTO语句能带来某些好处的地方,一定要控制GOTO的方向:只允许向下GOTO,不允许向上GOTO;只允许从循环中GOTO出去,不允许GOTO到循环中来。但在即将颁布的国军标中将严格禁止GOTO语句的使用。38 精品文档4.29.2 中断的嵌套 中断嵌套分自嵌套和外嵌套。自嵌套就是被自身中断嵌套,外嵌套就是被其它中断嵌套。中断的使用除特殊需要外一定要避免嵌套,常用的方法就是进入中断服务程序后关掉不希望嵌套的所有中断。v 自嵌套一定要避免;v 必要时的外
18、嵌套要充分考虑中断优先级的影响;v 允许中断和禁止中断的语句位置要独立进行仔细分析。39 精品文档4.29.3 中断的返回 除特殊需要外一定要避免从中断服务子程序中使用跳转语句直接出去,应当使用正常返回语句。因为直接跳出一是影响了堆栈的控制,二是可能破坏跳转处的应有状态。40 精品文档4.29.4 中断的现场保护 要充分考虑到中断任何时刻都可能发生的特点,保存好需要保存的现场,并在中断服务子程序返回时正确恢复现场。如在主程序中有的程序段是禁止带符号位运算,有的程序段是允许带符号位运算,而中断服务子程序中需要带符号位运算,则在中断服务子程序返回时一定要恢复到中断响应时的禁止或允许带符号位运算。4
19、1 精品文档4.29.5 不用中断源的屏蔽 不用中断源一定要进行屏蔽。不用中断源的软屏蔽应通过编写空处理的对应中断服务子程序来实现。42 精品文档不用中断源无空中断服务子程序的实例Int03中断不用后,残留允许打开语句,但删除了Int03的中断服务子程序43 精品文档4.29.6 注意对误中断和漏中断的防范 在中断的使用中,除了要遵循一般的可靠性安全性设计准则外,还应该重点对每一中断的两个故障模式进行认真分析。这两个故障模式是:误中断和漏中断。通常是在程序中设计一些特征标识量,在中断响应服务子程序中应首先检查相应的特征标识量,以防误中断。在一些依赖于中断响应服务子程序执行结果的关键处理程序中,
20、应首先检查相应的特征标识量,以防漏中断。在软件的概要设计阶段,应认真分析哪些处理过程是不能被中断打断的,必须以清单方式列表。对这些处理过程应在相应程序执行前关闭中断源,执行完后再打开必要的中断源。44 精品文档误中断的实例上传程序被中断打断45 精品文档漏中断的实例多通道异步并发46 精品文档防漏不防误防漏又防误47 精品文档4.30 看门狗的设计 看门狗技术是控制运行时间的一种有效方法。看门狗实际上是一种计时装置,当计时启动后看门狗在累计时间,当累计时间到了规定值时触发到时中断(即狗叫),看门狗在不需要时可以关闭。看门狗的设计要首先明确其目的性。如:(1)要防某段程序可能的死循环,则在此段程
21、序前启动狗,在此段程序后关闭狗,在狗叫中断中进行超时异常处理。(2)要防外来的信息长时间不来,则在开始等外来信息时启动狗,在接收到外来信息时关闭狗,在狗叫中断中进行超时异常处理。(3)要防计算超时,则在开始计算时启动狗,在计算完毕后关闭狗,在狗叫中断中进行超时异常处理。显然,不可能要求一个狗可以看管好所有的超时情况。48 精品文档看门狗设计问题的实例一 这里,狗叫可能是因为程序某处选入死循环,可能是外来信息长时间不来,也可能是处理信息超时。如果这里设计的定时器是为了检测与外系统的通讯是否出现异常为目的(如规定18ms未来信息表明通讯异常),显然如此设计就有所欠缺。49 精品文档看门狗设计问题的
22、实例二总线占用超时控制50 精品文档4.31 避免潜在的死循环 在等待外部信号的程序段中,不允许无限制地等待。正确的做法应是,或采用循环等待次数控制,或使用定时器,使得规定时间内(无论成功或失败)必须保证退出等待外部信号的程序段。不允许的设计方法 建议采用的设计方法51 精品文档4.35 注意通过双口RAM进行握手 通过双口RAM进行信息交换是设计师经常采用的一种设计方案。的确双口RAM提供了信息交换双方的方便读写,但仅靠双口RAM要做到读写的时序要求就要格外小心。如此的设计是要避免的:通过双口RAM交换信息,在双口RAM中设置了握手信号单元。读方检查到握手信号为01H,表明对方已准备好数据,
23、再读数据,读完后将握手信号置为00H;写方检查到握手信号为00H,表明对方已取走数据,再写数据,写完数据后再将握手信号置为01H,表明自己已准备好数据。52 精品文档 这种设计不一定可靠,可能会出现写方要写握手信号时,读方正在读握手信号,则写方要写的值写不进去。可靠的设计应用硬件连线保证握手,而不要靠双口RAM中的握手信号。如果一定要靠双口RAM进行握手,则写握手信号单元数据时一定要写完后接着再读出,经验证确实写成功后再进行下面的操作,否则需继续写。当然这必须与避免潜在的死循环的设计准则联合使用。53 精品文档可靠的设计方法 握手标志置不上的可能 54 精品文档4.36 数据采集的多路冗余设计
24、 关键数据的采集可采用多路冗余设计,即可以从多个通讯口对同一数据进行采集,通过表决进行有效数据的裁决。通常多采用奇数路的冗余设计,如3路、5路等。(1)开关量的裁决可采用多数票的裁决,如3取2、5取3等。(2)模拟量的裁决可采用中间数平均值的裁决,如3路数的中间值、5路数去掉最大最小值后的平均值等。55 精品文档 关键数据的采集可采用多次冗余设计,即可以从同一通讯口多次对同一数据进行采集,通过表决进行有效数据的裁决。通常多采用奇数次的冗余设计,如3次、5次等。(1)开关量的裁决可采用多数票的裁决,如3取2、5取3等,也可采用连续次数的裁决,如5次里连续3次的量被才被认可,当然这种裁决被认可量比
25、简单的5取3裁决更严格。(2)模拟量的裁决可采用中间数平均值的裁决,如3次数的中间值、5次数去掉最大最小值后的平均值等。56 精品文档 极关键数据的采集亦可采用多路多次的综合冗余设计,即可以从多个通讯口对同一数据进行多次采集,通过表决进行有效数据的裁决。附注:(m+1)/(2m+1)冗余措施失效率的计算 假设一个过程的失效率是,在2m+1个相同功能的过程中取m+1个相同的结果作为最终结果,这种措施称为(m+1)/(2m+1)冗余措施,在不考虑共因失效的前提下,其失效率为57 精品文档4.37 时间飘逸的防范58 精品文档4.38 TMS320C25的初始化 采用辅助寄存器对4号单元进行初始化置
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 可靠性 安全性 技术 课件
限制150内