软件可靠性资料.ppt

* * “4.6.2.2 谨防长度操作符sizeof的副作用” 实验说明 如下代码: int x = 1; int y = 2; int a = 3; a = sizeof(x=y); …… x到底等于几? 现在x=1还是2? exam6 * 编程准则违背的 典型实例 * “4.8.1.4 禁止使用不起作用的语句” (二院补充) 的典型实例 该准则在某软件中以“x-0;”的形式违背了,而经过确认是由于编程人员误将“x=0;”的“=”号写成了“-”号所致,其结果是导致变量x的赋值失败。 * “4.6.1.15 禁止在条件判别语句中使用赋值操作符” 的典型实例一 该准则在某软件中以“if(the_i=5)”的形式违背了,而经过确认是由于编程人员误将“if(the_i==5)”的“==”写成了“=”所致,其结果是该判别条件无论变量the_i为何值都将执行该分支的处理。 * “4.6.1.15 禁止在条件判别语句中使用赋值操作符” 的典型实例二 在某软件中有如下语句: if((uiSendLen == 0x55AA) (uiRecvLen == 0x66BB) (uiBaud = 0x77CC)) 其中将条件(uiBaud==0x77CC)判别误写为(uiBaud=0x77CC)的赋值,后果是即使uiBaud不为 0x77CC,其他条件满足仍能走入真分支。 * “4.14.1.4 逻辑判别表达式如果存在运算项, 必须要使用括号” (二院补充) 的典型实例 该准则在某软件中以“if(tbc0x80==0x80)”的形式违背了,导致当tbc=0x80时条件判别走不成立的分支。正确的写法应该是“if((tbc0x80)==0x80)”。 exam7 * “4.12.1.2 禁止对指针变量赋值类型不匹配” (二院补充) 的典型实例 在某软件中,变量定义如下: unsigned long *p; unsigned char q[50]; 程序中有如下的使用: p = q[1]; * “4.2.1.4 逻辑表达式的连接必须使用括号” 的典型实例 在某软件中 if((S1[0].Coun7S1[0].Coun=1)||(S1[1].Coun7S1[1].Coun=1) (B3Leav == 7)) {……} 从程序结构上猜想,应该是: 在 (B3Leav == 7) 条件下, 或 (S1[0].Coun7S1[0].Coun=1) 或 (S1[0].Coun7S1[0].Coun=1) 如果是此,就应该 if(((S1[0].Coun7S1[0].Coun=1)||(S1[1].Coun7S1[1].Coun=1)) (B3Leav == 7)) {……} * “4.6.1.9 赋值类型必须匹配” 的典型实例 在某软件中ADData[]是定义为signed char类型,程序中: ADData[i]=(signed char)*AD402; /* 读12位带符号的AD采样值 */ ADData[i]=ADData[i]0xfff; 在标准C中,signed char类型变量是8位的,有效范围[-128,127],对8位变量赋12位数值在标准C中是取后8位。ADData[]应定义为int类型。 * “4.6.1.2 数组的使用必须保证不会出现越界” 的典型实例 在某软件中是如下定义的: unsigned char Ykd[6]; 但程序中是如下使用的: for (n=0 ; n7 ; n++) { Ykd[n] = 0x0 ; 按定义,Ykd只有6个元素,即Ykd[0]、Ykd[1]、……、Ykd[5],而是使用中却用到了Ykd[6]。 * “4.14.1.5 禁止对无符号数进行大于等于零 或小于零的比较” (二院补充) 的典型实例 在某软件中有如下语句: unsigned long s_addr; s_addr=(unsigned long)hostGetByName(compName); while (s_addr==ERROR) ERROR在vxWorks.h被定义为-1,用unsigned long类型数与ERROE进行比较总是不成立的。 * “4.13.1.4

文档评论(0)

1亿VIP精品文档

相关文档