background image

软件故障模型驱动软件测试

 摘要:为了解决软件测试中的盲目性和不确定性,本文从软件故障模型分析出发,阐述
利用目前成熟的动态内存故障模型如何驱动软件测试,提出由软件故障模型驱动软件测试
的思路。并对现在软件故障模型的分析提出进一步开展的一些想法。

 

  关键词:软件故障模型

 驱动 软件测试 软件可靠性 

  软件测试一直是提高软件产品(文档、数据、程序)质量的重要方法,在大量的工程实
践过程中,不管是面向程序结构的白盒测试,还是面向程序功能的黑盒测试,测试人员都
是通过测试活动尽可能多地发现软件缺陷,通过长期的测试增强对产品发布的信心,降低
发布风险。但是,由于这种测试方法缺乏有效的理论指导,使得软件测试工作比较盲目,测
试工作的针对性不强。即使现在的测试方法和工具在不断地完善,但是测试人员仍然无法确
定产品缺陷是否都被发现,发布的产品是否不在存在缺陷,测试仍然是尽可能多地发现问
题,但软件产品中还存在多少问题,仍然无法定量说清楚,软件测试仍然没有从本质上改
变软件产品质量和可靠性。软件故障模型脱胎于以硬件为主的设备故障模型,随着硬件的逐
步成熟和软件规模、复杂度的逐步增加,软件故障模型逐渐被重视,虽然不够完善,但为软
件测试走向更科学,更自信提供了一个新的发展方向。本文拟从软件故障模型中寻找驱动软
件测试的动力,寻求一种能说明软件存在哪些类型的故障,以及依据故障模型改进软件测
试的方法。

 

  

1 软件故障与软件测试 

  蔡开元先生对软件失效机理进行了如下描述:软件错误是一种人为错误,一个软件错
误必定会产生一个或多个软件缺陷;当一个软件缺陷被激活时,便产生一个软件故障。同一
个软件缺陷在不同条件下被激活,可能产生不同的软件故障;软件故障如果没有及时的容
错处理,便不可避免的导致软件失效,同一个软件故障在不同条件下可能产生不同的软件
失效。这样的复杂关系如图

1 所示。 

  图

1 可以很好地说明软件故障产生与测试的复杂性,软件功能层面的失效往往是由各

种特定的条件和环境决定的,存在必然的复杂性和多样性。而测试虽然能从软件的不同层次
开展测试,但如果不能从问题的根源处着手,要测试出全部问题是不可能的,这也导致了
测试再充分也不能保证测试后的软件没有问题。同样地,我们也能看出,如果从问题产生的
根源出发开展软件的测试,是可以将后续环境中无穷发散的问题解决的。这无疑是改善测试
不确定性和盲目性的一个有效办法。

 

  

2 用软件故障模型驱动软件测试 

  软件故障模型(

SFMEA)从发生的软件错误入手探究和分析导致软件故障模型,是寻

找软件问题产生的根源的一种有效方法,是软件测试的基础。这里以成熟的动态内存故障模
型为例阐述利用故障模型来驱动软件测试的方法。

 

  

2.1 动态内存故障分析 

  (

1)动态内存是一个自由存储区域,编程人员根据需要,利用编程语言提供的动态内

存管理命令,进行动态内存的分配、访问、回收等操作。各类操作后的结果与该内存区域当前
所处状态紧密相关,由此产生了动态内存使用过程中的各类问题,在分析导致其错误的原
因的基础上,可以建立动态内存故障模型。如图

2 所示。 

  

Start 表示开始状态;Memory Allocate 表示对内存进行动态内存分配,若没有足够的动

态内存,则内存指针为

NULL;Check Memory 检查动态内存分配的结果,以保证后续动态

内存操作的正确性;

Access Memory 表示对动态内存中的内容进行写、读、修改等操作;Free 

Memory 表示动态内存操作结束,进行动态内存的释放;End 表示结束状态; 
  (

2)动态内存的四个核心操作缺一不可,且在不同状态下操作也有约束,由此导致了

诸多与动态内存使用相关的问题,如图

3 所示。