软件可靠性安全性技术

上传人:苏**** 文档编号:240755107 上传时间:2024-05-05 格式:PPT 页数:123 大小:1.64MB
返回 下载 相关 举报
软件可靠性安全性技术_第1页
第1页 / 共123页
软件可靠性安全性技术_第2页
第2页 / 共123页
软件可靠性安全性技术_第3页
第3页 / 共123页
点击查看更多>>
资源描述
软件可靠性安全性技术 1几个基本术语几个基本术语v 故障故障(Fault)Fault)v 差错差错(Error)Error)v 失效失效(Failure)Failure)v 缺陷缺陷(Defect)Defect)v 失误失误(Mistake)Mistake)v 隐错隐错(Bug)Bug)2软件质量的一个示例软件质量的一个示例 在一段在一段Visual Basic 6.0Visual Basic 6.0编写的程序写的程序DivisionDivision中,从文本框中,从文本框1 1中中输入数入数A#A#,从文本框从文本框2 2中中输入数入数B#B#,计算算C#=A#/B#C#=A#/B#从文本框从文本框3 3中中输出,其程序如下出,其程序如下:Public A#,B#,C#Public A#,B#,C#Private Sub Division()Private Sub Division()A#=Val(Text1.Text)A#=Val(Text1.Text)从文本框从文本框1 1中输入中输入 B#=Val(Text2.Text)B#=Val(Text2.Text)从文本框从文本框2 2中输入中输入 C#=A#/B#C#=A#/B#Text3.Text=Str(C#)Text3.Text=Str(C#)从文本框从文本框3 3中输出中输出End SubEnd Sub A#=1A#=1,B#=0B#=0时结果如何?时结果如何?exam13软件可靠性软件可靠性 软件可靠性:在一定条件下软件实现所要求功能的能力。软件可靠性:在一定条件下软件实现所要求功能的能力。关于软件可靠性的误区:软件对一组条件下的运行,如关于软件可靠性的误区:软件对一组条件下的运行,如果是对的,则永远是对的,何有可靠性?果是对的,则永远是对的,何有可靠性?对软件可靠性误区的回答:对已认为满足了功能和性能对软件可靠性误区的回答:对已认为满足了功能和性能要求的软件,为何有的软件在实际的运行中会经常出错?追要求的软件,为何有的软件在实际的运行中会经常出错?追其原因都是对运行中异常的操作、输入、事件无防范处理措其原因都是对运行中异常的操作、输入、事件无防范处理措施,诸如人机交互界面软件对误操作经常死机,通讯软件对施,诸如人机交互界面软件对误操作经常死机,通讯软件对外界干扰经常瘫痪等,这能说不是软件可靠性的问题吗?外界干扰经常瘫痪等,这能说不是软件可靠性的问题吗?4软件可靠性的一个示例软件可靠性的一个示例 前面的前面的exam1exam1就是一个示例。我们再给一个示例。就是一个示例。我们再给一个示例。用用Visual Visual BasicBasic编写一个写一个读入入给定数据文件的程序。用定数据文件的程序。用户输入的文件名存入的文件名存放在放在text1.txttext1.txt中,数据文件格式是:第一个数是整型数中,数据文件格式是:第一个数是整型数N N(表明表明以下存放了以下存放了N N个浮点数),后个浮点数),后续以空格、逗号或以空格、逗号或换行行为区分符存区分符存放放N N个浮点数。个浮点数。OpenFile()OpenFile()子程序完成将数据文件中的子程序完成将数据文件中的N N个浮点数个浮点数读出存放在出存放在变量数量数组A#()A#()中。中。5Private Sub OpenFile()Private Sub OpenFile()Dim i,N Dim i,N Open Trim(Text1.Text)For Input As#1 Open Trim(Text1.Text)For Input As#1 打开数据文件打开数据文件 Input#1,N Input#1,N 读入数据个数读入数据个数 ReDim A#(1 To N)ReDim A#(1 To N)For i=1 To N For i=1 To N Input#1,A#(i)Input#1,A#(i)读入数据读入数据 NextNext Close#1 Close#1 关闭数据文件关闭数据文件End SubEnd Sub 文件不存在或数据格式错误时结果如何?文件不存在或数据格式错误时结果如何?exam26软件安全性软件安全性 软件安全性:件安全性:对对由于由于软件的件的缺陷缺陷造成人造成人员伤亡、亡、财产损失等危失等危险事件事件的的防范防范能力。能力。关于关于软件安全性的件安全性的误区:区:软件只是代件只是代码程序和相程序和相应文档,文档,软件件结果只是果只是对与与错,何有安全性?,何有安全性?对软件安全性件安全性误区的回答:区的回答:对实时嵌入式嵌入式软件而言,件而言,软件的指令直接控制着硬件的件的指令直接控制着硬件的动作,如果作,如果软件不件不对所控制硬件所控制硬件的指令的指令进行安全性保行安全性保护,有何信心保,有何信心保证系系统是安全的?由于是安全的?由于软件的件的错误造成重大造成重大财产损失、失、严重人重人员伤亡的亡的实例已屡例已屡见不不鲜,这能能说软件没有安全性的件没有安全性的问题吗?7软件安全性的实例软件安全性的实例转塔设备的调转控制转塔设备的调转控制8软件可靠性安全性软件可靠性安全性设计准则设计准则9 软件可靠性和安全性设计的一般性指导可参考软件可靠性和安全性设计的一般性指导可参考 GJB/Z 102-1997 GJB/Z 102-1997 软件可靠性和安全性设计准则软件可靠性和安全性设计准则 Q/WE 871-1999 Q/WE 871-1999 软件可靠性和安全性设计指南软件可靠性和安全性设计指南 二院制定的武器系统软件可靠性安全性设计准二院制定的武器系统软件可靠性安全性设计准则,则是结合二院以往地空导弹武器系统软件中实则,则是结合二院以往地空导弹武器系统软件中实际暴露的典型问题,总结整理归纳出的有关软件可靠际暴露的典型问题,总结整理归纳出的有关软件可靠性和安全性设计的具体细则,适用于二院武器系统软性和安全性设计的具体细则,适用于二院武器系统软件开发中可靠性和安全性的设计。件开发中可靠性和安全性的设计。104.4 4.4 圈复杂度的限制圈复杂度的限制11圈复杂度问题的示例圈复杂度问题的示例圈复杂度115的控制流图 圈复杂度10的控制流图 124.5 4.5 余量的设计余量的设计 应注意关键软件的余量设计,这些余量包括:存储量、应注意关键软件的余量设计,这些余量包括:存储量、IOIO通道吞吐量及处理时间等。在同步时间要求较高的系统中,通道吞吐量及处理时间等。在同步时间要求较高的系统中,处理时间的余量应不少于处理时间的余量应不少于20%20%。如,某系统。如,某系统9 9msms通讯一次,则通讯一次,则该系统的处理时间应小于该系统的处理时间应小于7.27.2msms。余量设计为我们在软件测试时使用一些在线动态测试工余量设计为我们在软件测试时使用一些在线动态测试工具,如具,如CodeTestCodeTest等,提供了必要的应用条件。等,提供了必要的应用条件。134.9.1 4.9.1 谨防防实数取整的精度数取整的精度损失失 实数取整的转换函数实数取整的转换函数int()int()在在C C中是截取取整的,如果需中是截取取整的,如果需要四舍五入,则必须特殊处理。要四舍五入,则必须特殊处理。例如:例如:float f=1.9;float f=1.9;int k;int k;k=(int)(f);k=(int)(f);则则 k k 是是 1 1,而不是,而不是 2 2。14实数数四舍五入后四舍五入后取整取整的方法的方法 如果如果 f=0f=0,则则 int(f+0.5)int(f+0.5)是四舍五是四舍五入后的取整结果;入后的取整结果;如果如果 f 0f 0,则则 int(f 0.5)int(f 0.5)是四舍五入是四舍五入后的取整结果。后的取整结果。154.11 4.11 安全关键信息码的设计安全关键信息码的设计 安全关键的信息码应采用具有检错能力的编码。安全关键的信息码应采用具有检错能力的编码。禁禁止止对对关关键键信信息息用用一一位位的的逻逻辑辑判判别别,如如用用“0”“0”来来表表示示“不不起起飞飞”,用用“1”“1”来来表表示示“起起飞飞”。对对此此具具有有检检错错能能力力的的编编码码可可以以为为用用二二位位的的逻逻辑辑判判别别,如如用用“01”“01”来来表表示示“不不起起飞飞”,用用“10”“10”来来表表示示“起起飞飞”。显显然然在在有有一一位位可可能能受受干干扰扰的的系系统统假假设设下下,用用一一位位的的逻逻辑辑判判别别无无法法检检测测其其是是否否受受干干扰扰,而而二二位位的的逻逻辑辑判判别别则则可可以以检检测测其其是是否否受受干干扰扰,如如“00”“00”和和“11”“11”就表示信号受到了干扰。就表示信号受到了干扰。16安全关键信息码应用的实例安全关键信息码应用的实例操作杆的误信号操作杆的误信号174.10 4.10 异常计算的防范设计异常计算的防范设计 在数值计算中,要充分考虑计算中的异常情况,如:在数值计算中,要充分考虑计算中的异常情况,如:(1)(1)在在除除法法计计算算中中,要要考考虑虑除除数数为为0 0或或很很小小时时的的计计算算溢溢出出的处理,可计算前先进行除数大小的判别检查;的处理,可计算前先进行除数大小的判别检查;(2)(2)在在开开平平方方根根的的计计算算中中,要要考考虑虑被被开开根根数数是是否否大大于于等等于零,可计算前先进行被开根数的符号判别。于零,可计算前先进行被开根数的符号判别。18异常计算设计问题的实例一异常计算设计问题的实例一有效视线角误差有效视线角误差19异常计算设计问题的实例二异常计算设计问题的实例二204.13 4.13 接口数据的定义接口数据的定义 在通讯接口数据定义时必须明确通讯的数据量、数据格在通讯接口数据定义时必须明确通讯的数据量、数据格式、数据内容、换算要求、传输协议、传输率、误码率。式、数据内容、换算要求、传输协议、传输率、误码率。(1)(1)初初始始状状态态要要设设计计为为0 0位位状状态态。如如,“00“00表表示示状状态态未未定定”即即应应为为初初始始状状态态。又又如如,用用2 2位位表表示示的的:“01“01表表示示状状态态1”1”、“10“10表表示示状状态态2”2”、“00“00表表示示状状态态未未定定”,和和用用1 1位位表表示示的的:“0“0表表示示状状态态1”1”、“1“1表表示示状状态态2”2”,对对初初始始状状态态的的理理解解是是不不一样的。一样的。21 (2)(2)对交换字各位解释说明其含义时,单一位的解释说对交换字各位解释说明其含义时,单一位的解释说明,不仅要说明为明,不仅要说明为“1”“1”的含义,还要说明为的含义,还要说明为“0”“0”的含义;的含义;多位解释说明时,不仅要说明特定组合的含义,还要说明其多位解释说明时,不仅要说明特定组合的含义,还要说明其它组合的含义。如它组合的含义。如2 2位组合的含义解释说明时,不仅要说明位组合的含义解释说明时,不仅要说明“00“00表示状态未定表示状态未定”、“01“01表示状态表示状态1”1”、“10“10表示状态表示状态2”2”,还要说明,还要说明“11”“11”表示何含义(可能是无意义,但要明确说表示何含义(可能是无意义,但要明确说明,有些是不需要处理而保持以前状态,有些是要进行报警明,有些是不需要处理而保持以前状态,有些是要进行报警或异常错误处理的)。或异常错误处理的)。224.15 4.15 异常处理的设计异常处理的设计 对对软软件件的的编编程程不不能能只只考考虑虑正正常常情情况况下下的的处处理理,还还应应充充分分考考虑虑可可能能的的异异常常事事件件的的处处理理。在在软软件件的的设设计计过过程程中中应应专专门门对对可可能能的的异异常常事事件件进进行行分分析析,这这一一工工作作称称之之为为“软软件件失失效效模模式式及影响分析及影响分析”。23 如,在对数据文件操作时可以考虑的异常事件有:如,在对数据文件操作时可以考虑的异常事件有:(1)(1)错误的文件名或文件数错误的文件名或文件数(2)(2)文件没找到文件没找到(3)(3)错误的文件模式错误的文件模式 (4)(4)文件已经被打开文件已经被打开(5)(5)I/OI/O设备错误设备错误 (6)(6)文件已经存在文件已经存在(7)(7)错误的记录长度错误的记录长度 (8)(8)磁盘满磁盘满(9)(9)超过文件结尾的输入超过文件结尾的输入 (10)(10)错误的记录数错误的记录数(11)(11)错误的文件名错误的文件名 (12)(12)太多的文件太多的文件(13)(13)设备不可使用设备不可使用 (14)(14)权限不允许权限不允许(15)(15)磁盘没准备好磁盘没准备好 (16)(16)不能对不同设备重新命名不能对不同设备重新命名(17)(17)路径或文件访问错误路径或文件访问错误 (18)(18)没找到路径没找到路径24 显显然然这这1818种种模模式式无无需需也也不不必必都都考考虑虑,可可依依据据实实际际情情况况裁裁剪剪考考虑虑。如如在在人人机机交交互互软软件件中中用用户户选选择择数数据据文文件件,则则“错错误误的的文文件件名名或或文文件件数数”、“文文件件没没找找到到”和和“路路径径或或文文件件访访问问错错误误”是必须要考虑的,需要对此设计相应的处理方法。是必须要考虑的,需要对此设计相应的处理方法。如如果果是是具具有有运运行行错错误误陷陷阱阱功功能能的的高高级级语语言言,如如:VBVB、VCVC、AdaAda等等,则则错错误误陷陷阱阱的的使使用用是是很很好好的的方方法法。无无可可靠靠性性措措施施的的软软件件:如如当当输输入入的的文文件件不不存存在在时时,软软件件运运行行被被异异常常终终止止。用用户户不不知知所所措,甚至连相关信息都没得到。软件失控了!措,甚至连相关信息都没得到。软件失控了!有有可可靠靠性性措措施施的的软软件件:如如当当输输入入的的文文件件不不存存在在时时,软软件件提提示示输输入入文文件件不不存存在在的的信信息息,并并重重新新返返回回到到用用户户输输入入状状态态,等等待用户终止输入过程,或重新输入。软件始终处于受控!待用户终止输入过程,或重新输入。软件始终处于受控!exam3254.17 4.17 变量的命名变量的命名 变量量命命名名要要清清晰晰。通通常常的的命命名名有有头字字母母大大写写命命名名法法和和下下划划线命名法。命名法。头字字母母大大写写命命名名法法如如:InitialValueInitialValue,ObjectPositionObjectPosition等等。下下划划线命命名名法法如如:initial_valueinitial_value,object_positionobject_position等等。现 在在 又又 流流 行行 带 类 型型 说 明明 的的 头 字字 母母 大大 写写 命命 名名 法法:如如intInitialValueintInitialValue表表明明是是intint的的类型型,flObjectPositionflObjectPosition表表明明是是floatfloat的的类型型,而而用用tempInitialValuetempInitialValue来来表表明明其其是是一一个个临时变量。量。变量的命名量的命名对程序的理解及程序的理解及维护起着非常重要的作用。起着非常重要的作用。26变量命名问题的实例变量命名问题的实例for(tchflag=0;tchflag14;tchflag+)for(tchflag=0;tchflag0&mo0&no10)if(mo11)mp(5);if(no10)mp(6);if(mo0&mo0&no10)else if(mo10)mp(5);else if(no9)mp(6);else /此处进行提示报告 324.22 4.22 函数调用返回的设计函数调用返回的设计 函函数数的的返返回回必必须须要要有有运运行行状状态态的的标标识识,以以使使调调用用者者能能识识别被调函数的运行状态。别被调函数的运行状态。33函数调用返回设计的示例函数调用返回设计的示例 方方法法一一:可可以以设设置置整整型型函函数数的的返返回回值值,以以标标识识函函数数的的运运行状态。如计算三角形面积的函数可设计为:行状态。如计算三角形面积的函数可设计为:intTriangleComp(floata,floatb,floatc,float*s)if()/正常时的计算,面积值赋给正常时的计算,面积值赋给*sreturn(0);elseif()/出现边长小于零的情况出现边长小于零的情况return(-1);elseif()/两边之和小于第三边的情况两边之和小于第三边的情况return(-2);else/其它情况其它情况return(-10);intflag;flag=TriangleComp(3,4,5,&s);if(flag0)/异常处理异常处理else/正常处理正常处理在调用时可以进行判别在调用时可以进行判别34 方方法法二二:可可以以在在调用用参参数数中中专门设计一一个个函函数数运运行行状状态的参数。如上述的参数。如上述计算三角形面算三角形面积的函数也可的函数也可设计为:floatTriangleComp(floata,floatb,floatc,int*e)floats;if()/正常时的计算,面积值赋给正常时的计算,面积值赋给s返回返回*e=0;return(s);elseif()/出现边长小于零的情况出现边长小于零的情况*e=-1;return(0);elseif()/两边之和小于第三边的情况两边之和小于第三边的情况*e=-2;return(0);else/其它情况其它情况*e=-10;return(0);inte;floats;s=TriangleComp(3,4,5,&e);if(e0)/异常处理异常处理else/正常处理正常处理在调用时可以进行判别在调用时可以进行判别354.23 4.23 函数调用参数的匹配函数调用参数的匹配 函函数数调用用的的参参数数类型型、次次序序和和个个数数必必须匹匹配配。类型型的的匹匹配配一一是是注注意意intint、floatfloat、doubledouble、charchar等等类型型的的匹匹配配,二二是是注注意意指指针地地址址和和地地址址内内容容的的匹匹配配。如如,int int func(float func(float*)*)的的函函数数,直直接接调用用func(0)func(0),则funcfunc使使用用的的是是0 0地地址址单元元中中的的值,而而非非0 0值,如如要要送送0 0值则应先先申申请“float float angle=0;”angle=0;”再再调用用func(&angle)func(&angle)。36函数调用参数匹配问题的实例函数调用参数匹配问题的实例回路测试回路测试374.28 4.28 对对GOTOGOTO语句的限制语句的限制 原则上限制使用跳转(原则上限制使用跳转(GOTOGOTO)语句,在使用语句,在使用GOTOGOTO语句能语句能带来某些好处的地方,一定要控制带来某些好处的地方,一定要控制GOTOGOTO的方向的方向:只允许向下只允许向下GOTOGOTO,不允许向上不允许向上GOTOGOTO;只允只允许从循从循环中中GOTOGOTO出去,不允出去,不允许GOTOGOTO到循到循环中来。中来。但在即将颁布的国军标中将严格禁止但在即将颁布的国军标中将严格禁止GOTOGOTO语句的使用。语句的使用。384.29.2 4.29.2 中断的嵌套中断的嵌套 中中断断嵌嵌套套分分自自嵌嵌套套和和外外嵌嵌套套。自自嵌嵌套套就就是是被被自自身身中中断断嵌套,外嵌套就是被其它中断嵌套。嵌套,外嵌套就是被其它中断嵌套。中中断断的的使使用用除除特特殊殊需需要要外外一一定定要要避避免免嵌嵌套套,常常用用的的方方法法就是就是进入中断服入中断服务程序后关掉不希望嵌套的所有中断。程序后关掉不希望嵌套的所有中断。v 自嵌套一定要避免;自嵌套一定要避免;v 必要必要时的外嵌套要充分考的外嵌套要充分考虑中断中断优先先级的影响;的影响;v 允允许中断和禁止中断的中断和禁止中断的语句位置要独立句位置要独立进行仔行仔细分析。分析。394.29.3 4.29.3 中断的返回中断的返回 除特殊需要外一定要避免从中断服除特殊需要外一定要避免从中断服务子程序中使用跳子程序中使用跳转语句直接出去,句直接出去,应当使用正常返回当使用正常返回语句。因句。因为直接跳出一是直接跳出一是影响了堆影响了堆栈的控制,二是可能破坏跳的控制,二是可能破坏跳转处的的应有状有状态。404.29.4 4.29.4 中断的现场保护中断的现场保护 要充分考要充分考虑到中断任何到中断任何时刻都可能刻都可能发生的特点,保存好生的特点,保存好需要保存的需要保存的现场,并在中断服,并在中断服务子程序返回子程序返回时正确恢复正确恢复现场。如在主程序中有的程序段是禁止如在主程序中有的程序段是禁止带符号位运算,有的程序段符号位运算,有的程序段是允是允许带符号位运算,而中断服符号位运算,而中断服务子程序中需要子程序中需要带符号位运符号位运算,算,则在中断服在中断服务子程序返回子程序返回时一定要恢复到中断响一定要恢复到中断响应时的的禁止或允禁止或允许带符号位运算。符号位运算。414.29.5 4.29.5 不用中断源的屏蔽不用中断源的屏蔽 不用中断源一定要进行屏蔽。不用中断源一定要进行屏蔽。不不用用中中断断源源的的软屏屏蔽蔽应通通过编写写空空处理理的的对应中中断断服服务子程序来子程序来实现。42不用中断源无空中断服务子程序的实例不用中断源无空中断服务子程序的实例Int03Int03中断不用后,残留允许打开语句,但删除了中断不用后,残留允许打开语句,但删除了Int03Int03的中断服务子程序的中断服务子程序434.29.6 4.29.6 注意对误中断和漏中断的防范注意对误中断和漏中断的防范 在在中中断断的的使使用用中中,除除了了要要遵遵循循一一般般的的可可靠靠性性安安全全性性设设计计准准则则外外,还还应应该该重重点点对对每每一一中中断断的的两两个个故故障障模模式式进进行行认认真真分分析析。这这两两个个故故障障模模式式是是:误误中中断断和和漏漏中中断断。通通常常是是在在程程序序中中设设计计一一些些特特征征标标识识量量,在在中中断断响响应应服服务务子子程程序序中中应应首首先先检检查查相相应应的的特特征征标标识识量量,以以防防误误中中断断。在在一一些些依依赖赖于于中中断断响响应应服服务务子子程程序序执执行行结结果果的的关关键键处处理理程程序序中中,应应首首先先检检查查相相应应的的特特征标识量,以防漏中断。征标识量,以防漏中断。在在软件件的的概概要要设计阶段段,应认真真分分析析哪哪些些处理理过程程是是不不能能被被中中断断打打断断的的,必必须以以清清单方方式式列列表表。对这些些处理理过程程应在在相相应程程序序执行行前前关关闭中中断断源源,执行行完完后后再再打打开开必必要要的的中中断断源。源。44误中断的实例误中断的实例上传程序被中断打断上传程序被中断打断45漏中断的实例漏中断的实例多通道异步并发多通道异步并发46防漏不防误防漏又防误474.30 4.30 看门狗的设计看门狗的设计 看看门门狗狗技技术术是是控控制制运运行行时时间间的的一一种种有有效效方方法法。看看门门狗狗实实际际上上是是一一种种计计时时装装置置,当当计计时时启启动动后后看看门门狗狗在在累累计计时时间间,当当累累计计时时间间到到了了规规定定值值时时触触发发到到时时中中断断(即即狗狗叫叫),看看门门狗狗在在不不需需要要时可以关闭。看门狗的设计要首先明确其目的性。如:时可以关闭。看门狗的设计要首先明确其目的性。如:(1)(1)要要防防某某段段程程序序可可能能的的死死循循环环,则则在在此此段段程程序序前前启启动动狗狗,在此段程序后关闭狗,在狗叫中断中进行超时异常处理。在此段程序后关闭狗,在狗叫中断中进行超时异常处理。(2)(2)要要防防外外来来的的信信息息长长时时间间不不来来,则则在在开开始始等等外外来来信信息息时时启启动动狗狗,在在接接收收到到外外来来信信息息时时关关闭闭狗狗,在在狗狗叫叫中中断断中中进进行行超超时时异常处理。异常处理。(3)(3)要要防防计计算算超超时时,则则在在开开始始计计算算时时启启动动狗狗,在在计计算算完完毕毕后关闭狗,在狗叫中断中进行超时异常处理。后关闭狗,在狗叫中断中进行超时异常处理。显然,不可能要求一个狗可以看管好所有的超然,不可能要求一个狗可以看管好所有的超时情况。情况。48看门狗设计问题的实例一看门狗设计问题的实例一 这里,狗叫可能是因里,狗叫可能是因为程序某程序某处选入死循入死循环,可能是外来信息,可能是外来信息长时间不来,不来,也可能是也可能是处理信息超理信息超时。如果。如果这里里设计的定的定时器是器是为了了检测与外系与外系统的通的通讯是是否出否出现异常异常为目的(如目的(如规定定1818msms未来信未来信息表明通息表明通讯异常),异常),显然如此然如此设计就有就有所欠缺。所欠缺。49看门狗设计问题的实例二看门狗设计问题的实例二总线占用超时控制总线占用超时控制504.31 4.31 避免潜在的死循环避免潜在的死循环 在在等等待待外外部部信信号号的的程程序序段段中中,不不允允许无无限限制制地地等等待待。正正确确的的做做法法应是是,或或采采用用循循环等等待待次次数数控控制制,或或使使用用定定时器器,使使得得规定定时间内内(无无论成成功功或或失失败)必必须保保证退退出出等等待待外外部部信信号号的的程序段。程序段。不允许的设计方法不允许的设计方法建议采用的设计方法建议采用的设计方法514.35 4.35 注意通过双口注意通过双口RAMRAM进行握手进行握手 通通过过双双口口RAMRAM进进行行信信息息交交换换是是设设计计师师经经常常采采用用的的一一种种设设计计方方案案。的的确确双双口口RAMRAM提提供供了了信信息息交交换换双双方方的的方方便便读读写写,但但仅仅靠靠双双口口RAMRAM要做到读写的时序要求就要格外小心。要做到读写的时序要求就要格外小心。如如此此的的设设计计是是要要避避免免的的:通通过过双双口口RAMRAM交交换换信信息息,在在双双口口RAMRAM中中设设置置了了握握手手信信号号单单元元。读读方方检检查查到到握握手手信信号号为为0101H H,表表明明对对方方已已准准备备好好数数据据,再再读读数数据据,读读完完后后将将握握手手信信号号置置为为0000H H;写写方方检检查查到到握握手手信信号号为为0000H H,表表明明对对方方已已取取走走数数据据,再再写写数数据据,写写完数据后再将握手信号置为完数据后再将握手信号置为0101H H,表明自己已准备好数据。表明自己已准备好数据。52 这种种设计不一定可靠,可能会出不一定可靠,可能会出现写方要写握手信号写方要写握手信号时,读方正在方正在读握手信号,握手信号,则写方要写的写方要写的值写不写不进去。可靠的去。可靠的设计应用硬件用硬件连线保保证握手,而不要靠双口握手,而不要靠双口RAMRAM中的握手信号。中的握手信号。如果一定要靠双口如果一定要靠双口RAMRAM进行握手,行握手,则写握手信号写握手信号单元数据元数据时一定要写完后接着再一定要写完后接着再读出,出,经验证确确实写成功后再写成功后再进行下面行下面的操作,否的操作,否则需需继续写。写。当然这必须与避免潜在的死循环的设计准则联合使用。当然这必须与避免潜在的死循环的设计准则联合使用。53可靠的设计方法可靠的设计方法 握手标志置不上的可能握手标志置不上的可能 544.36 4.36 数据采集的数据采集的多路冗余多路冗余设计 关关键数据的采集可采用多路冗余数据的采集可采用多路冗余设计,即可以从多个通,即可以从多个通讯口口对同一数据同一数据进行采集,通行采集,通过表决表决进行有效数据的裁决。通常行有效数据的裁决。通常多采用奇数路的冗余多采用奇数路的冗余设计,如,如3 3路、路、5 5路等路等。(1)(1)开关量的裁决可采用多数票的裁决,如开关量的裁决可采用多数票的裁决,如3 3取取2 2、5 5取取3 3等。等。(2)(2)模模拟量的裁决可采用中量的裁决可采用中间数平均数平均值的裁决,如的裁决,如3 3路数的路数的中中间值、5 5路数去掉最大最小路数去掉最大最小值后的平均后的平均值等。等。55 关关键数据的采集可采用多次冗余数据的采集可采用多次冗余设计,即可以从同一通,即可以从同一通讯口多次口多次对同一数据同一数据进行采集,通行采集,通过表决表决进行有效数据的裁行有效数据的裁决。通常多采用奇数次的冗余决。通常多采用奇数次的冗余设计,如,如3 3次、次、5 5次等。次等。(1)(1)开关量的裁决可采用多数票的裁决,如开关量的裁决可采用多数票的裁决,如3 3取取2 2、5 5取取3 3等,也可采用等,也可采用连续次数的裁决,如次数的裁决,如5 5次里次里连续3 3次的量被才被次的量被才被认可,当然可,当然这种裁决被种裁决被认可量比可量比简单的的5 5取取3 3裁决更裁决更严格。格。(2)(2)模模拟量的裁决可采用中量的裁决可采用中间数平均数平均值的裁决,如的裁决,如3 3次数次数的中的中间值、5 5次数去掉最大最小次数去掉最大最小值后的平均后的平均值等。等。56 极关键数据的采集亦可采用多路多次的综合冗余设计,极关键数据的采集亦可采用多路多次的综合冗余设计,即可以从多个通讯口对同一数据进行多次采集,通过表决进即可以从多个通讯口对同一数据进行多次采集,通过表决进行有效数据的裁决。行有效数据的裁决。附注:附注:(m+1)/(2m+1)m+1)/(2m+1)冗余措施失效率的计算冗余措施失效率的计算 假假设设一一个个过过程程的的失失效效率率是是,在在2m+1个个相相同同功功能能的的过过程程中中取取m+1个个相相同同的的结结果果作作为为最最终终结结果果,这这种种措措施施称称为为(m+1)/(2m+1)冗冗余余措措施施,在在不不考考虑虑共共因因失失效效的的前前提提下下,其其失失效率为效率为574.37 4.37 时间飘逸的防范时间飘逸的防范584.38 4.38 TMS320C25TMS320C25的初始化的初始化 采用采用辅助寄存器助寄存器对4 4号号单元元进行初始化置位行初始化置位,在常温下是,在常温下是可以的,但在低温条件下(小于可以的,但在低温条件下(小于-5-5)将会出现问题。)将会出现问题。对4 4号号单元元进行初始化置位行初始化置位必须必须采用直接采用直接寻址的方式址的方式。59软件可靠性安全性软件可靠性安全性C语言编程准则语言编程准则60 19981998年年,国国际际汽汽车车工工业业软软件件可可靠靠性性协协会会MISRAMISRA组组织织制制定定了了“汽汽车车软软件件C C语语言言使使用用指指南南”的的标标准准。这这份份标标准准的的产产生生在在自自动动化化行行业业极极大大地地推推动动了了使使用用“安安全全的的C”C”进进行行编编程程。这这份份标标准准在在汽汽车车行行业业被被广广泛泛接接受受,同同时时它它也也被其它行业所广泛借鉴。被其它行业所广泛借鉴。利利物物浦浦数数据据研研究究协协会会LDRALDRA作作为为专专业业软软件件测测试试协协会会建建立立于于19751975年年。LDRA LDRA TestbedTestbed软软件件测测试试工工具具可可基基于于MISRAMISRA的的C C语语言言使使用用标标准准对对C C语语言言程程序序进进行行检检查查,以以帮帮助助用户们在程序代码上加强行业标准的执行。用户们在程序代码上加强行业标准的执行。在在我我国国,20052005年年颁颁布布实实施施了了GJB GJB 5369-20055369-2005,航航天型号天型号软件件C C语言安全子集言安全子集。61Q/WE 905-2005 Q/WE 905-2005 导弹武器系武器系统C C语言安全子集言安全子集 本本标准完全遵循准完全遵循GJBGJB 5369-2005,5369-2005,航天型号航天型号软件件C C语言安全子集言安全子集,并在二院型号,并在二院型号软件工程件工程实践的基践的基础上,新上,新补充了充了2222条条强强制性准制性准则和和2 2条推荐性准条推荐性准则,将,将GJBGJB航天型号航天型号软件件C C语言安全子集中的一条推荐性准言安全子集中的一条推荐性准则上升上升为强强制性准制性准则。附。附录B B是相是相对于于GJBGJB航天型号航天型号软件件C C语言安全子集新增言安全子集新增加的附加的附录。62准则分类准则分类(1)(1)声明定义类声明定义类 (2)(2)版面书写类版面书写类 (3)(3)分支控制类分支控制类 (4)(4)指针使用类指针使用类 (5)(5)跳转控制类跳转控制类 (6)(6)运算处理类运算处理类 (7)(7)过程调用类过程调用类 (8)(8)语句使用类语句使用类 (9)(9)调用返回类调用返回类(10)(10)程序注释类程序注释类 (11)(11)循环控制类循环控制类 (12)(12)类型转换类类型转换类 (13)(13)初始化类初始化类 (14)(14)比较判断类比较判断类 (15)(15)名称、符号与变量使用类名称、符号与变量使用类634.1.1.154.1.1.15字符型字符型变量必量必须明确定明确定义是有符号是有符号还是无符号是无符号 void static_p(void)void static_p(void)char c=c;char c=c;/*.*/*.*/违背违背644.1.1.204.1.1.20禁止在禁止在#include include 中使用中使用绝对路径名路径名#include include void Dummy(void)void Dummy(void)/*.*/*.*/头文件路径应该在编译器的选项中予以设置说明头文件路径应该在编译器的选项中予以设置说明违背违背654.2.1.24.2.1.2循循环体必体必须用大括号括起来用大括号括起来 int static_p(int p_1)int static_p(int p_1)int j=10;int j=10;int k=0;int k=0;/*.*/*.*/for(k=0;k 10;k=k+1)j=j+1;for(k=0;k 0)if(p_1 0)i=i-1;i=i-1;else else i=i+1;i=i+1;return i;return i;违背违背674.2.1.44.2.1.4逻辑表达式的表达式的连接必接必须使用括号使用括号 void static_p(void)void static_p(void)bool flag=true;bool flag=true;unsigned int y=0u,x=0u,z=1u;unsigned int y=0u,x=0u,z=1u;/*.*/*.*/if(x 0|z+y!=0&!flag)if(x=0?x:-xdefine static_p(x)x=0?x:-xvoid test_p(void)void test_p(void)unsigned int result;unsigned int result;int a=6,b=5;int a=6,b=5;/*.*/*.*/result=static_p(a-b);result=static_p(a-b);result=static_p(a)+1;result=static_p(a)+1;/*.*/*.*/违背违背704.2.1.74.2.1.7嵌入嵌入汇编程序的程序的过程必程必须是是纯汇编程序程序 void static_p(void)void static_p(void)unsigned int x;unsigned int x;x=0u;x=0u;_asm _asm mov eax,x mov eax,x 违背违背714.2.1.94.2.1.9禁止字符串中单独使用禁止字符串中单独使用“”“”而非而非“0”“0”(二院进一步明确为二院进一步明确为:4.2.1.9:4.2.1.9 字符型数组赋值时,必须使字符型数组赋值时,必须使用用“0”“0”终止字符串终止字符串)void static_p(void)void static_p(void)unsigned char str5;unsigned char str5;str0=a;str0=a;str1=b;str1=b;str2=c;str2=c;/*/*其它其它处理理*/*/违背违背724.3.1.14.3.1.1禁止条件判禁止条件判别成立成立时相相应分支无分支无执行行语句句 void static_p(void)void static_p(void)unsigned int value_x=1u;unsigned int value_x=1u;/*.*/*.*/if(value_x=0u);if(value_x=0u);/*.*/*.*/if(value_x=0u);if(value_x=0u);违背违背734.3.1.44.3.1.4在在switchswitch语句中必句中必须有有defaultdefault语句句 如如果果switchswitch语句句中中缺缺省省了了defaultdefault语句句,当当所所有有的的casecase语句句的的表表达达式式值都都不不匹匹配配时,则会会跳跳转到到整整个个switchswitch语句句后后的的下下一一个个语句句执行行。强强制制defaultdefault语句句的的使使用用体体现出已考出已考虑了各种情况的了各种情况的编程思想。程思想。744.3.1.74.3.1.7禁止禁止switchswitch的的casecase语句不是由句不是由breakbreak终止止 如如果果某某个个casecase语句句最最后后的的breakbreak被被省省略略,在在执行行完完该casecase语句句后后,系系统会会继续执行行下下一一个个casecase语句句。casecase语句句不不是是由由breakbreak终止止,有有可可能能是是编程程者者的的粗粗心心大大意意,也也有有可可能能是是编程程者者的的特特意意使使用用。为了了避避免免编程程者者的的粗粗心心大大意意,因因此此禁禁止止switch的的case语句不是由语句不是由break终止终止.二二院院的的调调整整:原原则上上禁禁止止switchswitch的的casecase语句句不不是是由由breakbreak终止止,当当确确实是是编程程者者的的特特意意使使用用时,必必须加加以以“/*“/*此此情情况况属于部分的属于部分的casecase共用共用*/”*/”的明确注的明确注释。754.4.1.24.4.1.2指针的指针不能超过两级指针的指针不能超过两级(二院进一步明确为二院进一步明确为:4.4.1.2:4.4.1.2 禁止指针的指针超过两级禁止指针的指针超过两级)对指指针进行行控控制制是是很很困困难的的,当当指指针的的指指针超超过两两级时,使使用起来更是具有用起来更是具有风险,因此禁止指,因此禁止指针的指的指针超超过两两级。二二院院的的细细化化:当当在在某某种种特特殊殊情情况况下下确确实需需要要超超过两两级的的指指针时,必必须加加以以“/*“/*详见详细设计报告告的的指指针特特殊殊设计 */”*/”的的明明确确注注释,在在详细设计报告告的的指指针特特殊殊设计中中详细说明明理理由由,并在并在单元元测试报告中提供告中提供针对性的性的测试结果。果。764.6.1.154.6.1.15禁止在禁止在逻辑表达式逻辑表达式中使用中使用赋值操作符操作符(二院进一步明确为二院进一步明确为:4.2.1.15:4.2.1.15 禁止在条件判别语句中使禁止在条件判别语句中使用赋值操作符用赋值操作符)void static_p(void)void static_p(void)unsigned int z=0u,x=0u;unsigned int z=0u,x=0u;bool flag=true;bool flag=true;/*.*/*.*/if(flag=false)if(flag=false)z=x-1u;z=x-1u;/*.*/*.*/违背违背774.6.1.24.6.1.2数数组的使用必的使用必须保保证不会出不会出现越界越界 void static_p(void)void static_p(void)unsigned int a4;unsigned int a4;/*.*/*.*/a4=1;a4=1;/*.*/*.*/违背违背784.6.1.74.6.1.7位的定位的定义必必须是有符号整数或无符号整数是有符号整数或无符号整数 struct static_p unsigned char x:1;struct static_p unsigned char x:1;void dummy(void)void dummy(void)/*.*/*.*/违背违背794.6.1.84.6.1.8禁止禁止给变量量赋的的值与与变量的量的类型不一致型不一致 void static_p(void)void static_p(void)unsigned int d;unsigned int d;d=2.0;/*d=2.0;/*应该使用应该使用 2 2u*/u*/*.*/*.*/违背违背804.6.2.24.6.2.2谨防防长度操作符度操作符sizeofsizeof的副作用的副作用 长度度操操作作符符sizeofsizeof不不计算算操操作作数数的的值,所所以以更更明明确确的的要要求求是:禁止在是:禁止在sizeofsizeof中使用赋值。中使用赋值。void static_p(void)void static_p(void)unsigned int x=1u;unsigned int x=1u;unsigned int y=2u;unsigned int y=2u;int a=3;int a=3;/*.*/*.*/a=sizeof(x=y);a=sizeof(x=y);违背违背814.6.2.44.6.2.4避免由于避免由于设计的原因的原因导致某些代致某些代码不能不能执行行#define defval 0define defval 0void static_p(void)void static_p(void)if(0)if(0)/*.*/*.*/if(defval)if(defval)/*.*/*.*/违背违背82对程序文件的限制对程序文件的限制4.2.2.14.2.2.1建建议一个文件中的程序一个文件中的程序总行不超行不超过20002000行行 4.2.2.24.2.2.2建建议一个一个过程或函数中的程序程或函数中的程序总行不超行不超过200200行行 4.7.1.34.7.1.3staticstatic类型的型的过程在所在文件中必程在所在文件中必须被被调用用834.8.1.1 4.8.1.1 禁止使用容易混淆的语句禁止使用容易混淆的语句 (二院进一步明确为二院进一步明确为:4.8.1.1:4.8.1.1禁止单独使用小写字母禁止单独使用小写字母“l”l”或大写字母或大写字母“O”O”作为变量名作为变量名 )void static_p(void)void static_p(void)int l=1,O=0;int l=1,O=0;/*.*/*.*/l=O;l=O;O=l;O=l;违背违背844.8.1.44.8.1.4禁止使用不起作用的语句禁止使用不起作用的语句(二院补充)(二院补充)void static_p(void)void static_p(void)unsigned int x=0u;unsigned int x=0u;x;x;违背违背85函数返回的限制函数返回的限制4.9.1.14.9.1.1函数必函数必须有返回有返回语句句 4.9.1.24.9.1.2禁止禁止voidvoid类型的型的过程中的程中的returnreturn语句句带有返回有返回值 4.9.1.34.9.1.3有返回有返回值的函数中的函数中returnreturn必必须带有返回有返回值 4.9.1.44.9.1.4函数返回函数返回类型必型必须一致一致 864.10.1.14.10.1.1禁止使用嵌套的注禁止使用嵌套的注释 void static_p(void)void static_p(void)/*This is the Outer Comment /*This is the Outer Comment /*This is the Inner Comment /*This is the Inner Comment */*/违背违背874.11.1.24.11.1.2循循环变量必量必须是局部声明的是局部声明的 unsigned int global_f=0u;unsigned int global_f=0u;int loop_standards(int p_1)int loop_standards(int p_1)int j=10;int j=10;/*.*/*.*/for(global_f=0;global_f 10;global_f+)for(global_f=0;global_f=0?x:-xdefine p(x)x=0?x:-x int result;int result;int a=6;int a=6;result=p(a)+1;result=p(a)+1;resultresult到底等于几?到底等于几?如下代码如下代码2 2:#define p(x)(x=0?x:-x)define p(x)(x=0?x:-x)int result;int result;int a=6;int a=6;result=p(a)+1;result=p(a)+1;resultresult到底等于几?到底等于几?result=6还是还是7?exam593“4.6.2.2“4.6.2.2 谨防长度操作符谨防长度操作符sizeofsizeof的副作用的副作用”实验说明实验说明如下代码:如下代码:int x=1;int x=1;int y=2;int y=2;int a=3;int a=3;a=sizeof(x=y);a=sizeof(x=y);x x到底等于几?到底等于几?现在现在x=1还是还是2?exam694编程准则违背的编程准则违背的典型实例典型实例95“4.8.1.4“4.8.1.4 禁止使用不起作用的禁止使用不起作用的语句句”(二院补充二院补充)的的典型实典型实例例 该准准则在某在某软件中以件中以“x-0;”的形式的形式违背了,而背了,而经过确确认是是由于由于编程人程人员误将将“x=0;”的的“=”号写成了号写成了“-”号所致,其号所致,其结果是果是导致致变量量x的的赋值失失败。96“4.6.1.15“4.6.1.15 禁止在条件判别语句中使用赋值操作符禁止在条件判别语句中使用赋值操作符”的的典型实典型实例例一一 该准准则在某在某软件中以件中以“if(the_i=5)”的形式的形式违背了,而背了,而经过确确认是由于是由于编程人程人员误将将“if(the_i=5)”的的“=”写成了写成了“=”所致,其所致,其结果是果是该判判别条件无条件无论变量量the_i为何何值都将都将执行行该分支的分支的处理。理。97“4.6.1.15“4.6.1.15 禁止在条件判别语句中使用赋值操作符禁止在条件判别语句中使用赋值操作符”的的典型实典型实例例二二 在某软件中有如下语句:在某软件中有如下语句:if(uiSendLen=0 x55AA)&(uiRecvLen=0 x66BB)&(uiBaud=0 x77CC)其其中中将将条条件件(uiBaud=0 x77CC)判判别别误误写写为为(uiBaud=0 x77CC)的的赋赋值值,后后果果是是即即使使uiBaud不不为为 0 x77CC,其其他他条条件件满满足足仍仍能能走走入
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 金融资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!