博文

程序测试--调试(2007-04-30 16:54:00)

摘要:一、语法错误及调试
    (1)、编译器报告的错误位置,有时会有偏离。
    (2)、编译器常常会针对某个错误,发出一系列的错误信息报告。
    常见的语法错误:
  1、语句末尾漏写分号;
  2、使用未经定义的变量;
  3、括号不匹配;
  4、字符串没有结束符;
  5、赋值号左面不是变量;
  6、非void类型的函数缺少return语句;
  7、没有在printf中指定输出项对应的输出格式;
  8、在scanf函数中要么在格式串中使用了非格式字符,要么在格式串中没有使用格式符,要么在输入项的变量前没有使用地址运算符。
二、语义及逻辑错误及其调试
 (1)、语义错误指程序对程序中的语义的理解与编译器理解的不同;
 (2)、逻辑错误指程序在算法上出现错误。
 常见的语义错误:
  1、赋值号与等号用错;
  2、无限循环;
  3、在if、where或for结构后面使用多余的分号;
  4、错误地使用了关系运算符;
  5、计算或将一个大类型的数转换成小类型时,数据的值超出了表示范围;
  6、运算符优先顺序错;
  7、else搭配不当;
  8、off-by-one(偏一)错误,通常指for循环的次数多或少一次;
  9、将无关代码放到循环体中;
  10、使用整数除法。
三、语义错误的发现与调试:
 语义调试的方法:手工跟踪法和工具法。
 手工跟踪法:
  1、在if-else语句的前后显示关键变量的值;
  2、循环开始的前后和循环结构的前后显示,如关键变量的值和循环变量的值;
  3、每次进入函数前后所有参数的变化,每次退出函数前后所有参数的变化。......

阅读全文(2645) | 评论:0

程序测试--边值分析法(2007-04-25 18:23:00)

摘要:边值分析法
(1)、边值分析法
边值分析法是对某些边界条件进行测试。所谓边界条件,是指输入等价类和输出等价类边缘上的数据。运用边值分析法应特别注意它与等价类的差别:
  一、边值分析不是从等价类中随便选一个例子作为代表,而是着眼于使该等价类的边界情况成为测试的主要目标来选择例子。这种例子可能是一个,也可能是几个。一般说来可以考虑下面几种情况:
   A、如果某个输入条件说明了值的范围,则可选择一些恰好取得边界值的例子,另外再给出一些恰好越过边界值属于无效等价的例子。
   B、如果一个输入条件指出了输入数据的个数,则可取最小个数、最大个数、比最小个数少1、比最大个数多1 ,来分别设计测试用例。
若输入是有序集,则应把注意力放在第一和最后一个元素上。
  二、边值分析不仅要注意输入条件,还要注意输出情况,按输出等价类设计测试用例。通常应先考虑以下几点:
   A、对每个输出条件,如果指出了输出值的范围或输出数据的个数,则应按设计输入等价类的方法,为它们设计测试用例。
   B、若输出是个有序集,则应把测试注意力放在第一和最后一个元素上。
(2)循环结构的边值分析法测试
循环结构可以看作是一种特殊的判定结构。一般来说,仅考虑循环结构的设定是否正确,可以采用边值分析法。
  一、单计数循环结构的边值分析法测试。
   A、初始边值条件:
     a、零次循环,即不执行循环体;
     b、一次循环,以便测试初始化方面的问题;
     c、二次循环,进一步揭露初始化方面的问题。
   B、终止边值条件:
     a、第n - 1次循环;
     b、第n次循环;
     c、第n + 1或n - 1次循环,以便测试循环次数有无错误。
   C、特殊循环次数:
    a、属于给定循环次数之内的典型循环次数;
     b、属于非正常情况下的典型循环次数。
  二、嵌套循环的边值分析法测试。嵌套循环可以看作循环的组合。但为了减少测试用例的组合数,可以使用以下策略:
   A、除指定层的循环要遍历单循环的全部情况外,其他各层取典型循环次数,再把各层分......

阅读全文(3002) | 评论:0

程序测试--等价分类法(2007-04-21 10:26:00)

摘要:等价分类法简介
一个程序结构的所有输入中,总可以找到一些有代表性的数据。这些有代表性的测试数据应包括对程序有效的输入,以及极端的、正常的和特殊的数据元素。
如果能把程序输入数据的可能值划分成若干“等价类”,在每一类中选定一组有代表性的数据,等价于其他数据,使这组数据能发现的错误,该类中的其他数据也可以发现;该组数据发现不了的错误,该类中其他数据也发现不了(除非该类例子中的某些数据也属于其他类)。这种测试用例设计方法就称为等价分类法。
用等价分类法设计测试用例可分两步进行:划分等价类和选定测试用例。
(1)、划分等价类
划分等价类的基本方法是:从程序的功能说明中找出各个输入条件,然后为每个输入条件划分等价类。
等价类分为两种:有效等价类和无效等价类。有效等价类是指属于程序的合理输入范围的那些数据,无效等价类是指非法的输入数据。等价类的划分取决于程序的功能要求和定义域,也取决于测试人员对问题的理解力和创造力,带有很大的试探性。下面几条可以作为划分等价类的参考准则:
一、如果某个输入条件规定了值的范围,即可为它确定一个有效等价类和两个无效等价类。
二、如果一个输入条件规定了输入的一组可能值,而且认为程序是用不同的方式处理每一种值的,则可为每一种值确定一个有效等价类,同时可以为它划分一个无效等价类。
三、如果一个输入条件说明了一个“必须”的情况,则可为它确定一个有效等价类和一个无效等价类。
四、如果某一等价类别中的元素有不同的处理方式,就应该把这个等价类划分成更小的等价类。
(2)、选定测试用例
一、给每个等价类规定一个编号。
二、设计一个测试用例,使其尽可能多地覆盖未被覆盖的有效等价类。重复这一步直到所有的有效等价类都被覆盖为止。
三、为每个无效等价类设计一个测试用例。......

阅读全文(5448) | 评论:0

分支程序的覆盖测试(2007-04-18 21:55:00)

摘要:(1)语句覆盖法
  语句覆盖是企图用足够多的测试用例,使程序中的每个语句都执行一遍,以尽可能多的发现程序中的错误。这里,言外之意是,即使第个语句都执行一遍,也还不一定能够发现全部的错误。
(2)分支覆盖法
  分支覆盖也称为判定覆盖,它要求通过足够的测试用例使每个判定的每个分支至少通过一次。分支覆盖准则比语句覆盖准则严密了一些,但仍然不够充分。因为一个判定中往往包含多个条件,而用分支覆盖并不一定能将每个条件都测试一次。
(3)条件覆盖法
  条件覆盖是通过执行充足的测试用例,使每个判定中的每个条件都至少使用一次。
例如:
{
if(a > 1 && b == 0) x /= a;
if(a == 2 || x > 1) x += 1;
}
对于上面的语句有以下四个条件:
1、a > 1   2、b == 0  3、a == 0  4、x > 1
如果设计下面两组测试用例,就可将每个条件都使用一次:
A:a = 2, b = 1, x = 1
B:a = 1, b = 0, x = 3
(4)组合条件覆盖法
  条件覆盖似乎比判定覆盖更好,但实际上未必这样。因为它有时候不能满足组合条件,也就是说,条件覆盖有可能连分支覆盖准则也满足不了。为此,人们又提出了一种更强的准则--组合条件覆盖准则:执行充足的测试用例,使判定中条件的各种可能组合至少出现一次。对于上面的例子:
第一个判定有以下4种条件组合:
1、a > 1 && b == 0
2、a > 1 && b <> 0
3、a <= 1 &&b == 0
4、a <= 1 && b <> 0
第二个判定也有以下4种条件组合:
5、a == 2 && x > 1
6、a <> 2 && x > 1
7、a == 2 && x <= 1
8、a <> 2 && x <= 1
下面的4个用例就可以覆盖......

阅读全文(4580) | 评论:0

测试简述(2007-04-18 21:33:00)

摘要:关于测试的三句话:
  一、测试是程序的执行过程,目的在于发现错误;
  二、一个好测试实例在于能发现至今未发现的错误;
  三、一个成功的测试是发现了至今未发现的错误。
  测试是以程序通过编译中,没有语法和连接上的错误为前提的。在此基础上,通过让程序试运行一组数据,来检测程序的逻辑以及程序中的各语句有无错误。这一组测试数据应以“任何程序都是有错误的”为前提精心设计出来的,而不是随心所欲地乱凑而成的。它不仅应含被测程序的输入数据,而且还应包括程序执行后预期的结果;每次测试都要把实际的结果与预期的结果相比较,以观察程序是否出错。......

阅读全文(2268) | 评论:0