文档介绍:软件测试失效案例分析
报 告 提 纲
研究软件失效的目的
软件失效的产生机理
软件测试典型失效
有效的软件测试
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
研究软件失效的目
设计类缺陷(一)
设计缺陷是在软件需求到软件设计的转换过程中由设计者产生于软件设计之中的隐患。
软件的设计类缺陷主要产生于:
设计者对需求的理解不充分;
设计者对程序语言的理解不充分;
设计者疏忽导致的设计纰漏。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
设计类缺陷(二)
失效表现
飞行前自检测过程中出现A/D接口故障,导致软件死机,不再响应外部命令。
缺陷分析
软件设计中使用无限循环结构作为等待接口信号的机制,一旦A/D接口出现故障无法发出信号,软件陷入死循环。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
设计类缺陷(三)
纠正措施
在设计的循环结构中加入了延时退出的判断条件,使得出现A/D接口故障后,延时一段时间,循环自动退出,并且进入错误处理程序。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
设计类缺陷(四)
失效表现
多个航路点位置重叠时,飞机直线飞行,失去控制。
缺陷分析
设计中缺少对这种情况的考虑,且代码中没有对除零情况进行保护。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
设计类缺陷(五)
纠正措施
设计人员对上述问题进行了双重保护:
首先,在航路点输入、修改、删除等操作流程中增加了对相同航路点情况的判断,避免此种情况的出现;
其次,在程序设计的待飞距计算公式中,增加了对分母为零情况的判断和相应处理。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
设计类缺陷(六)
失效表现
设备掉电重启后,飞机不再按照掉电前的飞行状态进行飞行。
缺陷分析
软件设计中没有将飞机的重要飞行状态信息保存在非易失存储器中。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
设计类缺陷(七)
纠正措施
设计人员根据需求重新对程序变量进行了分析,找出了其中影响飞行姿态和航迹的关键变量,在每个程序运行周期内都将这些变量往NVRAM中存储一次,有效地防止了掉电重启对重要数据的损坏情况。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
设计类缺陷(八)
失效表现
任务机软件为导弹提供任务数据,由于数据不够精确,导致导弹的命中率很低。
缺陷分析
在任务机软件的设计中,任务数据的计算按照地理平面坐标进行,与实际的地球坐标相差较大。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
设计类缺陷(九)
纠正措施
重新设计了软件中的任务数据计算方式,将平面坐标改为使用球面坐标,事实证明极大的提高了任务数据的精确性,导弹的打靶准确度得到改善。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
代码类缺陷(一)
代码缺陷是在软件设计到软件代码的转换过程中由编程者产生于代码中的隐患。
软件的代码类缺陷主要产生于:
编程人员的疏漏;
对软件设计理解的不充分;
对程序运行环境的了解不充分。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
代码类缺陷(二)
失效表现
1962年7月22日,携带着飞向金星的无人驾驶飞船水手1号的火箭在升空290秒之后毁掉了。
缺陷分析
地面计算机的程序:
If not 雷达能够与火箭联系 then
不要纠正火箭的飞行路线
但由于错误,语句中的not被丢掉了。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
代码类缺陷(三)
纠正措施
显而易见,当然是直接修改了代码。
NASA对这个缺陷的调查表明:
代码检查和程序测试都是不完全的,它们都是基于检查者和测试者的想象力和洞察力;
程序测试能说明程序错误的存在,但却不能说明它们不存在!
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
代码类缺陷(四)
失效表现
删除航点时,多拷贝了一个航点。
若航线的长度为150时,会出现数组越界。
缺陷分析
航线中的航点保存在一个长度为150的数组中,删除航点的操作是每次删除一个点,并且将后面的元素往前移一个,缺陷产生于对数组中最后一个航点的删除操作中。
首届军工产品软件测试技术专题研讨会
中航一集团软件可靠性管理与测评中心
代码类缺陷(五)
纠正措施
在删除航点的代码中,增加了对是否为数组中最后一个航点的判断,如