博文
程序测试--调试(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、每次进入函数前后所有参数的变化,每次退出函数前后所有参数的变化。......
程序测试--边值分析法(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、除指定层的循环要遍历单循环的全部情况外,其他各层取典型循环次数,再把各层分别作为指定层,重复上述过程; B、对全部循环同时取最小循环次数; C、对全部循环同时取最大循环次数; D、取指定层的循环,遍历单循环的全部情况,其他各层均取最大循环次数,再把各层分别作为指......
程序测试--等价分类法(2007-04-21 10:26:00)
摘要:等价分类法简介一个程序结构的所有输入中,总可以找到一些有代表性的数据。这些有代表性的测试数据应包括对程序有效的输入,以及极端的、正常的和特殊的数据元素。如果能把程序输入数据的可能值划分成若干“等价类”,在每一类中选定一组有代表性的数据,等价于其他数据,使这组数据能发现的错误,该类中的其他数据也可以发现;该组数据发现不了的错误,该类中其他数据也发现不了(除非该类例子中的某些数据也属于其他类)。这种测试用例设计方法就称为等价分类法。用等价分类法设计测试用例可分两步进行:划分等价类和选定测试用例。(1)、划分等价类划分等价类的基本方法是:从程序的功能说明中找出各个输入条件,然后为每个输入条件划分等价类。等价类分为两种:有效等价类和无效等价类。有效等价类是指属于程序的合理输入范围的那些数据,无效等价类是指非法的输入数据。等价类的划分取决于程序的功能要求和定义域,也取决于测试人员对问题的理解力和创造力,带有很大的试探性。下面几条可以作为划分等价类的参考准则:一、如果某个输入条件规定了值的范围,即可为它确定一个有效等价类和两个无效等价类。二、如果一个输入条件规定了输入的一组可能值,而且认为程序是用不同的方式处理每一种值的,则可为每一种值确定一个有效等价类,同时可以为它划分一个无效等价类。三、如果一个输入条件说明了一个“必须”的情况,则可为它确定一个有效等价类和一个无效等价类。四、如果某一等价类别中的元素有不同的处理方式,就应该把这个等价类划分成更小的等价类。(2)、选定测试用例一、给每个等价类规定一个编号。二、设计一个测试用例,使其尽可能多地覆盖未被覆盖的有效等价类。重复这一步直到所有的有效等价类都被覆盖为止。三、为每个无效等价类设计一个测试用例。......
分支程序的覆盖测试(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 = 1B:a = 1, b = 0, x = 3(4)组合条件覆盖法 条件覆盖似乎比判定覆盖更好,但实际上未必这样。因为它有时候不能满足组合条件,也就是说,条件覆盖有可能连分支覆盖准则也满足不了。为此,人们又提出了一种更强的准则--组合条件覆盖准则:执行充足的测试用例,使判定中条件的各种可能组合至少出现一次。对于上面的例子:第一个判定有以下4种条件组合:1、a > 1 && b == 02、a > 1 && b <> 03、a <= 1 &&b == 04、a <= 1 && b <> 0第二个判定也有以下4种条件组合:5、a == 2 && x > 16、a <> 2 && x > 17、a == 2 && x <= 18、a <> 2 && x <= 1下面的4个用例就可以覆盖上述8种可能的组合结果:A:a = 2, b = 0, x = 4(覆盖1与5)B:a = 2, b = 1, x = 1(覆盖2与7)C:a = 1, b = 0, x = 2(覆盖3与6)D:a = 1, b = 1, ......
测试简述(2007-04-18 21:33:00)
摘要:关于测试的三句话: 一、测试是程序的执行过程,目的在于发现错误; 二、一个好测试实例在于能发现至今未发现的错误; 三、一个成功的测试是发现了至今未发现的错误。 测试是以程序通过编译中,没有语法和连接上的错误为前提的。在此基础上,通过让程序试运行一组数据,来检测程序的逻辑以及程序中的各语句有无错误。这一组测试数据应以“任何程序都是有错误的”为前提精心设计出来的,而不是随心所欲地乱凑而成的。它不仅应含被测程序的输入数据,而且还应包括程序执行后预期的结果;每次测试都要把实际的结果与预期的结果相比较,以观察程序是否出错。......
