软件工程——测试

 

单元测试 (白盒测试)

1模块接口:  

内部检查:传输参数的数目、属性、单位、次序是否匹配;全程变量的定义是否一致;只做输入的变元有无被修改,等等  

内部检查:打开、结束、关闭文件的操作;文件和属性;I\O错误处理;输出拼写,等等

2局部数据结构:  

数据说明;初始化与缺省值的设置;变量名拼写;数据类型的相容性;上\下溢出及地址异常,等等。

3重要的执行通路:

 由于穷尽测试的不可能,故通常针对最常见的错误设计测试方案。

较常见的错误有:  计算次序问题;  不同类型混合运算;  初值设置错误;  精度问题;  表达式错误  循环终止条件错误;

4出错处理通路:

 预见出现错误的条件,设置处理。

较常见的问题有:  

输出的错误信息难以理解,

不能确定错误位置

描述的错误与实际错误不符  

处理之前系统已经干预  

处理不正确

5边界条件——单元测试中最后,也可能是最重要的任务,因为软件常在其边界失效。

单元测试的主要手段:

1代码审查  

走读 walk_through:

例如 Lucent Technologies 的测试策略,是由三人一组(包括author,reader,和recorder),逐行检查源代码。  预演由人扮演computer,模拟执行情况

优点:一次审查科发现多个错误,不必改一个测一个。

2制作测试软件:  

Stub(存根)和Driver(驱动)软件的编写,属额外开支。模块高内聚可简化这一过程。

 

 

设计测试方案

任务:

1预定要测试的功能

2设计输入的测试数据

3列出预期结果

主要技术:

1逻辑覆盖(Logical coverage)——适用于白盒测试  覆盖程度由弱到强依次为:  

(1)语句覆盖(Statement coverage):每个语句至少执行依次。  

(2)判定覆盖(Branch coverage):再(1)的基础上,每个判定的每个分支至少执行依次。  

(3)条件覆盖(Condition coverage):在(1)的基础上,使每个判定表达式的每个条件都取到各种可能的结果。  

(4)判定/条件覆盖:即判定覆盖∩条件覆盖  

(5)条件组合覆盖:每个判定表达式中条件的各种肯能组合都至少出现依次。  

(6)点覆盖=语句覆盖  

(7)边覆盖=判定覆盖  

(8)路径覆盖(Path coverage):每条可能的路径都至少执行依次,若图中有环,则每个环至少经过依次。  

(9)路径覆盖/条件组合覆盖

 

2等价划分(Equivalence Partitioning)——适用于黑盒测试  

是一种很常用的测试方法。其对测试数据的选择是基于对程序功能的分析,按照程序输入要求和输出要求,选择若干数据进行测试功能的过程。

(1)划分经验

当规定了输入范围时:无效类【 有效类 】无效类 当规定了一组输入值,且对不同值做不同处理时。

  例:教工分房方案中,按教授、副教授、讲师、助教分别计分=》有效类4个;无效类1个(4个有效类之外)

当规定了输入的规则时:例:PASCAL 语言规定,每个语言以“;”结束=》有效类1个;无效类若干(以“,”结束、以“:”结束、以空格结束等等)

当输入为整型时:有效类可分为Z+、0、Z- 三种

当处理表格时:有效类可分为空表、含一项的表、含多项的表等

(2)设计步骤

设计一个新方案以尽可能多地覆盖尚未被覆盖的有效等价类;重复这一步骤直到所有有效类都被覆盖为止。

设计一个新方案以覆盖一个且仅一个尚未被覆盖的无效等价类;重复这一步骤直到所有无效类都背覆盖为止。(通常程序执行一个错误后即不继续检查其他错误)

 

3边界值分析(Boundary Value Analysis)

注意:  (1)程序最容易在边界发生错误;  (2)通常与等价划分结合进行。

 

4错误推测(Failure Prediction)

思路:  (1)列出可能有的错误;  (2)列出容易发生错误的特殊情况。

以此为基础设计测试方案

根据:经验、直觉

5实用策略(Practical Strategies) 黑盒设计+白盒补充

(1)在任何情况下都应首先实用边界值分析的方法;

(2)必要时用等价划分法补充;

(3)必要时再用错误推测法补充;

(4)对照程序逻辑,检查测试方案。可根据对程序可靠性的要求采用不同的逻辑覆盖标准,必要时补充一些测试方案。

注:即使用上述综合策略设计测试方案,仍不能保证发现一切错误。例如Lucent公司经过包括逐行检查源代码在内的多方面测试之后,其软件能达标运行的成功率为 80%,可想而知,没有经过测试的软件运行成功率更低。

 

 

 

posted @ 2012-12-18 08:52  十三燕  阅读(1166)  评论(0编辑  收藏