1、1.2 测试方法n静态方法n动态方法 n黑盒测试n白盒测试静态方法和动态方法 n静态方法的主要特征是在用计算机测试源程序时,计算机并不真正运行被测试的程序,只对被测程序进行特性分析。因此,静态方法常称为“分析”,静态分析是对被测程序进行特性分析的一些方法的总称。n动态方法的主要特征是计算机必须真正运行被测试的程序,通过输入测试用例,对其运行情况(输入/输出的对应关系)进行分析。黑盒测试 黑盒测试(Blackbox Testing)又称功能测试、数据驱动测试或基于规格说明的测试,是一种从用户观点出发的测试。用这种方法进行测试时,被测程序被当作一个黑盒,在不考虑程序内部结构和内部特性,测试者只知道
2、该程序输入和输出之间的关系或程序的功能的情况下,依靠能够反映这一关系和程序功能的需求规格说明书考虑确定测试用例和推断测试结果的正确性。软件的黑盒测试被用来证实软件功能的正确性和可操作性。白盒测试 白盒测试(Whitebox Testing)又称结构测试、逻辑驱动测试或基于程序的测试。它依赖于对程序细节的严密检验,针对特定条件和/与循环集设计测试用例,对软件的逻辑路经进行测试。在程序的不同点检验“程序的状态”以判定其实际情况是否和预期的状态相一致。软件的白盒测试用来分析程序的内部结构。白盒测试n白盒测试要求对某些程序的结构特性做到一定程度的覆盖,或者说是“基于覆盖的测试”。最为常见的程序结构覆盖
3、有:n语句覆盖:它要求被测程序的每一可执行语句在测试中尽可能都检验过,这是最弱的逻辑覆盖准则;n分支覆盖或判定覆盖:要求程序中所有判定的分支尽可能得到检验;n条件覆盖:当判定式中含有多个条件时,要求每个条件的取值均得到检验;n判定条件覆盖:同时考虑条件的组合值及判定结果的检验;n路径覆盖:只考虑对程序路径的全面检验。取得测试覆盖的方法程序插装 黑盒测试与白盒测试的比较 黑盒测试白盒测试测试规划根据用户的规格说明,即针对命令、信息、报表等用户界面及体现它们的输入数据与输出数据之间的对应关系,特别是针对功能进行测试。根据程序的内部结构,比如语句的控制结构,模块间的控制结构以及内部数据结构等进行测试
4、。特点优点能站在用户立场上进行测试。能够对程序内部的特定部位进行覆盖测试。缺点不能测试程序内部特定部位。如果规格说明有误,则无法发现。无法检验程序的外部特性。无法对未实现规格说明的程序内部欠缺部分进行测试。方法举例基于图的测试等价类划分边值分析比较测试语句覆盖判定覆盖条件覆盖判定/条件覆盖基本路径覆盖循环覆盖模块接口测试测试阶段与测试方法测试阶段目的执行者测试方法单元测试查找独立模块中逻辑错误、数据错误和算法错误软件工程师白盒测试集成测试查找模块之间接口错误软件工程师测试人员白盒测试、自顶向下或自底向上确认测试确认软件是否满足软件需求测试人员黑盒测试模拟用户操作系统测试对系统中各个组成部分进行
5、综合性检验测试人员黑盒测试模拟用户操作回归测试确认软件变更后是否仍满足软件需求测试人员黑盒测试模拟用户操作测试与测试用户黑盒测试模拟用户操作验收测试确认软件是否满足用户需求用户、项目组测试人员黑盒测试模拟用户操作2软件测试用例设计黑盒测试n2.0 概述n2.1 等价类划分n2.2 因果图 n2.3 边值分析 n2.4 判定表驱动测试n2.5 正交实验设计法n2.6 自动测试用例生成方法n2.7 小结 2.0 黑盒测试概述n这种方法是把看做,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。n黑盒测试又叫做或。n黑盒测试方法是在程序接
6、口上进行测试,主要是为了发现以下错误:n?n 在接口上,?n(例如数据文件)?n?n?黑盒测试目标n用黑盒测试发现程序中的错误,必须在中确定测试数据,来检查程序是否都能产生正确的输出。n但这是的。n假设一个程序P有输入量X和Y及输出量Z。在字长为32位的计算机上运行。若X、Y取整数,按黑盒方法进行穷举测试:n可能采用的 测试数据组:232232 264 n如果测试一 组数据需要1毫秒,一年工作365 24小时,完成所有测试需5亿年。2.1 测试用例设计方法等价等价类划分类划分n选取测试用例n等价类划分的办法是把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据当作测试用例。n在分析
7、需求规格说明的基础上划分等价类,列出等价类表。2.1.1 等价类n所谓等价类是指某个输入域的集合。它表示,如果用集合中的一个输入条件作为测试数据进行测试不能发现程序中的错误,那么使用集合中的其它输入条件进行测试也不可能发现错误。也就是说,对揭露程序中的错误来说,集合中的每个输入条件是等效的。有效等价类和无效等价类n在考虑等价类时,应该注意区别两种不同的情况:n*有效等价类:有效等价类指的是对程序的规格说明是有意义的、合理的输入数据所构成的集合。在具体问题中,有效等价类可以有一个,也可以是多个。n*无效等价类:无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,
8、无效等价类至少应有一个,也可能有多个。等价类n输入条件 有效等价类 无效等价类n输入条件:项数可以从1到999 n有效等价类为“1项数999”n无效等价类为“项数999”2.1.2 经典例子n“输入三个整数作为三边的边长构成三角形。当此三角形为一般三角形、等腰三角形及等边三角形时,分别做计算”n注意输入和输出条件有效等价类型号码无效等价类号码121314151617整数1a 为非整数一边为非整数 b 为非整数c 为非整数a,b 为非整数两边为非整数 b,c 为非整数a,c 为非整数三边 a,b,c 均为非整数18192021222324三个数2只给 a只给一边 只给 b只给 c只给 ab只给两
9、边 只给 b,c只给 ac给出三个以上25262728293031非零数3a 为 0一边为零 b 为 0c 为 0a,b 为 0二边为零 b,c 为 0a,c 为 0三边 a,b,c 均为 032333435363738输入条件输入三个整数正数4a0一边0 b0c0a0 且 b0二边0 a0 且 c0b0 且 c0三边均0:a0 且 b0 且 ccb+ca a+cb567a+b0a+b=0b+cab+c=aa+cba+c=b45构成等腰三角形a=bb=c 且两边之和a=c 大于第三边8910输出条件构成等腰三角形a=b=c11表 4.1例 1 的等价类型表有效等价类n 覆盖有效等价类的测试用例
10、:na b c 覆盖等价类号码n3 4 5 (1)-(7)n4 4 5 (1)-(7),(8)n4 5 5 (1)-(7),(9)n5 4 5 (1)-(7),(10)n4 4 4 (1)-(7),(11)无效等价类2.1.3 问题讨论n问题:给出下面的有效和无效等价类n输入条件:“统计全国各省、市、自治区的人口”n输入条件:“标识符应以字母开头”n输入条件:长度为1-20的字符串n输入条件:数据库中的值域,CHAR(20),NOT NULL2.2 测试方法因果图因果图 n采用因果图方法(Cause一Effect Graphics)能够帮助我们按一定步骤,高效率地选择测试用例,同时还能为我们指
11、出,程序规格说明描述中存在着什么问题。2.2.1因果图介绍 n4种符号分别表示了规格说明中向4种因果关系 n因果图中使用了简单的逻辑符号,以直线联接左右结点。左结点表示输入状态(或称原因),右结点表示输出状态(或称结果)。nCi表示原因,通常置于图的左部;ei表示结果,通常在图的右部。ci和ei均可取值0或1,0表示某状态不出现,1表示某状态出现。(a)恒等 (b)非 V A (c)或 (d)与图 4.1因果图的基本符号C1e1C1e1C1e1C2C2C3C1e1关系n恒等:若ci是1,则ei也是1;否则ei为0。n非:若ci是1,则ei是0;否则ei是1。n或:若c1或c2或c3是1,则ei
12、是1;否则ei为0。“或”可有任意个输入。n与:若c1和c2都是1,则ei为1;否则ei为0。“与”也可有任意个输入。约束 n输入状态相互之间还可能存在某些依赖关系 n某些输入条件本身不可能同时出现。输出状态之间也往往存在约束 输入条件约束类型n 对于输入条件的约束有以下4类:n E约束(异):a和b中至多有一个可能为1,即a和b不能同时为1。n I约束(或):a、b和c中至少有一个必须是1,即 a、b 和c不能同时为0。n O约束(唯一);a和b必须有一个,且仅有1个为1。nR约束(要求):a是1时,b必须是1,即不可能a是1时b是0。输出条件约束类型n输出条件的约束只有:nM约束(强制):
13、若结果a是1,则结果b强制为0。2.2.2 步骤 n 分析程序规格说明的描述中,哪些是原因,哪些是结果。原因常常是输入条件或是输入条件的等价类。而结果是输出条件。n分析程序规格说明的描述中语义的内容,并将其表示成连接各个原因与各个结果的“因果图”。步骤n由于语法或环境的限制,有些原因和结果的组合情况是不可能出现的。为表明这些特定的情况,在因果图上使用若干个特殊的符号标明约束条件。n把因果图转换成判定表。n把判定表中每一列表示的情况写成测试用例。2.2.3 例子n软件规格说明书n“第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改。但如果第一列字符不正确,则给出信息L,如
14、果第二列字符不是数字,则给出信息M。”原因和结果n原因:n 1第一列字符是A;n 2第一列字符是B;n 3第二列字符是一数字。n 结果:n 21修改文件;n 22 给出信息L;n 23给出信息M。因果图和具有约束的因果图 n11为中间节点;n考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束。判定表 n根据因果图建立如下的判定表 表中8种情况的左面两列情况中,原因和原因同时为1,这是不可能出现的,故应排除这两种情况。表的最下一栏给出了6种情况的测试用例,这是我们所需要的数据。1 2 3 4 5 6 7 8 1 1 1 1 1 0 0 0 0 2 1 1 0 0 1 1 0 0 3 1
15、 0 1 0 1 0 1 0 条件 11/1 1 1 1 0 0 原 因 22/0 0 0 0 1 1 21/1 0 1 0 0 0 动作 23/0 1 0 1 0 1 结 果 测试 用例/A3 A8 AM A?B5 B4 BN B!C2 X6 DY P;2.2.4 讨论n在较为复杂的问题中,这个方法常常是十分有效的,它能有力地帮助我们确定测试用例 n如果哪个开发项目在设计阶段就采用了判定表,也就不必再画因果图,而是可以直接利用判定表设计测试用例了。2.3 测试用例设计方法边值边值分析分析 n在软件设计和程序编写中,常常对于规格说明中的输入域边界或输出域边界不够注意,以致形成一些差错。实践证明
16、,在设计测试用例时,对边界附近的处理必须给予足够的重视,为检验边界附近的处理专门设计测试用例,常常取得良好的测试效果。2.2.1 边值分析遵循的原则 n如果输入条件规定了取值范围,或是规定了值的个数,应以该范围的边界内及刚刚超出范围的边界外的值,或是分别对最大、最小个数及稍小于最小、稍大于最大个数作为测试用例。例如,如果程序的规格说明中规定:“重量在10公斤至50公斤范围内的邮件,其邮费计算公式为”。作为测试用例,我们应取10及50,还应取10.01,49.99,9.99及50.01等。如果另一问题规格说明规定:“某输入文件可包含1至255个记录,”,则测试用例可取1和255,还应取0及256
17、等。遵循以下几条原则n针对规格说明的每个输出条件使用前面的第(1)条原则。例如,某程序的规格说明要求计算出“每月保险金扣除额为0至116525元”,其测试用例可取000及11652、还可取一001及116526等。如果另一程序属于情报检索系统,要求每次”最多显示1条情报摘要”,这时我们应考虑的测试用例包括1和4,还应包括0和5等。遵循以下几条原则n如果程序规格说明中提到的输入或输出域是个有序的集合(如顺序文件、表格等),就应注意选取有序集的第一个和最后一个元素作为测试用例。n分析规格说明,找出其它的可能边界条件。2.2.2 例子n 某一为学生考试试卷评分和成绩统计的程序,其规格说明指出了对程序
18、的要求:n 程序的输入文件由80个字符的一些记录组成,这些记录分为三组:n 标题n 这一组只有一个记录,其内容为输出报告的名字。n 试卷各题标准答案记录n 每个记录均在第80个字符处标以数字“2”。该组的第一个记录的第1至第3个字符为题目编号(取值为1一999)。第10至第59个字符给出第1至第50题的答案(每个合法字符表示一个答案)。该组的第2,第3个记录相应为第51至第100,第101至第150,题的答案。n 每个学生的答卷描述n 该组中每个记录的第80个字符均为数字“3”。每个学生的答卷在若干个记录中给出。如甲的首记录第1至第9字符给出学生姓名及学号,第10至第59字符列出的是甲所做的第
19、1至第50题的答案。若试题数超过50,则第2,第3纪录分别给出他的第51至第100,第101至第150题的解答。然后是学生乙的答卷记录。若学生最多为200人,输入数据的形式如图4。15所示。n学生考卷评分和成绩统计程序输入数据的形式 n 该程序应给出4个输出报告,即:n 按学生学号排序,每个学生的成绩(答对的百分比)和等级报告。n 按学生得分排序,每个学生的成绩。n 平均分数,最高与最低分之差。n 按题号排序,每题学生答对的百分比。输入条件测试用例输入文件空输入文件标题无标题记录只有 1 个字符的标题具有 80 个字符的标题出题个数除了 1 个题除了 50 个题除了 51 个题除了 100 个
20、题除了 999 个题没有出题题目是非数值量答案记录标题记录后没有标准答案记录标准答案记录多 1 个标准答案记录少 1 个学生人数学生人数为 0学生人数为 1学生人数为 200学生人数为 201学生答题某学生只有 1 个答卷记录,但有两个标准答案记录该学生是文件中的第 1 个学生该学生是文件中的最后 1 个学生学生答题某学生有 2 个答卷记录,但只有 1 个标准答案记录该学生是文件中的第 1 个学生该学生是文件中的最后 1 个学生输出条件测试用例学生得分所有学生得分相同所有学生得分不同一些学生(不是全部)得分相同(用以计算等级)1 个学生得 0 分1 个学生得 100 分输出报告(1),(2)1
21、 个学生编号最小(检查排序)1 个学生编号最大学生数恰好使报告印满一页(检查打印)学生数使报告 1 页打印不够,恰好多 1 人输出报告(3)平均值取最大值(所有学生都得满分)平均值为 0(所有学生都得 0 分)标准偏差取最大值(1 学生得 0 分,1 学生得 100 分)标准偏差相同(所有学生得分相同)输出报告(4)所有学生都答对第 1 题所有学生都答错第 1 题所有学生都答对最后 1 题所有学生都答错最后 1 题题数恰好使报告打印在 1 页上报告打印完 1 页后,恰剩 1 题未打2.4 判定表驱动测试判定表驱动测试 n在一些数据处理问题中,某些操作是否实施依赖于多个逻辑条件的取值。也即在这些
22、逻辑条件取值的组合所构成的多种情况下,分别执行不同的操作。处理这类问题的一个非常有力的分析和表达工具是判定表(Decision Table)。2.3.1 例子1n一张关于科技书阅读指南的判定驱动表:3个问题8种情况12345678你觉得疲倦吗?YYYYNNNN你对内容感兴趣吗?YYNNYYNN问题书中内容使你胡涂吗?YNYNYNYN请回到本章开头重读xx继续读下去xx跳到下一章去读xx建议停止阅读,请休息xx”读书指南”判定表判定表组成n条件桩(Condition Stub)n动作桩(Action Stub)n条件项(Condition Entity)n动作项(Action Entity)规则
23、及规则合并n任何一个条件组合的特定取值及其相应要执行的操作称为规则。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,即条件项和动作项有多少列。n化简 就是规则合并有两条或多条规则 具有相同的动作,并且其条件项之间 存在着极为相似的关系 两条规则合并成一条 两条规则的进一步合并 一个规则合并的例子n一个规则合并的例子1234你觉得疲倦吗?-YN你对内容感兴趣吗?YYNN问题书中内容使你胡涂吗?YN-请回到本章开头重读x继续读下去X跳到下一章去读x建议停止阅读,请休息x化减后的”读书指南”判定表2.3.2 例子2n问题要求:”对功率大于50马力的
24、机器、维修记录不全或已运行10年以上的机器,应给予优先的维修处理”n假定,“维修记录不全”和“优先维修处理”均已在别处有更严格的定义 n按5步建立判定表 建立判定表的步骤n确定规则的个数。这里有3个条件,每个条件有两个取值,故应有2*2*2=8种规则。n列出所有的条件茬和动作茬。n填人条件项。为防止遗漏可从最后1行条件项开始,逐行向上填满乙如第三行是:Y N Y N Y N Y N第二行是:Y Y N N Y Y N N等等。建立判定表的步骤n填人动作桩和动作顶。这样便得到形如图的初始判定表。12345678功率大于 50 马力吗?YYYYNNNN维修记录不全吗?YYNNYYNN条件运行超过
25、10 年吗?YNYNYNYN进行优先处理xxXXX动作作其他处理Xxx初始判定表建立判定表的步骤n化简。合并相似规则后得到图。12345功率大于 50 马力吗?YYYNN维修记录不全吗?YNN-条件运行超过 10 年吗?-YNYN进行优先处理xxX动作作其他处理xx化减后的判定表2.3.3 判定表在功能测试中的应用 n一软件规格说明n(1)当条件1和条件2满足,并且条件3和条件4不满足,或者当条件1、3和条件4满足时,要执行操作1。n(2)在任一个条件都不满足时,要执行操作2。n(3)在条件1不满足,而条件4被满足时,要执行操作3。规则n只给出了16种规则中的4种 根据规格说明得到的判定表 默
26、许的规则 规 则1规 则1规 则1规 则1条 件1YYNN条 件2Y-N-条 件3NYN-条 件4NYNY操 作1xx操 作2x操 作3x根 据 规 则 说 明 得 到 的 判 定 表 规 则5规 则 6规 则 7规 则 8条 件 1-N Y Y 条 件 2-Y Y N 条 件 3Y N N N 条 件 4N N Y-默 许 操 作 xxxx默 许 的 规 则 2.3.4 判定表的优点和缺点n优点:它能把复杂的问题按各种可能的情况一一列举出来,简明而易于理解,也可避免遗漏。n缺点:不能表达重复执行的动作,例如循环结构。其他?使用判定表设计测试用例的Beizer条件n规格说明以判定表形式给出,或
27、是很容易转换成判定表。n条件的排列顺序不会也不应影响执行哪些操作。n规则的排列顺序不会也不应影响执行哪些操作。n每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。n如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。nB。Beizer提出这5个必要条件的目的是为了使操作的执行完全依赖于条件的组合。其实对于某些不满足这几条的判定表,同样可以借以设计测试用例,只不过尚需增加其它的测试用例罢了。2.5正交实验设计法n把软件功能测试作为实验的一种,从大量的实验点中选出适量有代表性的点,应用依据伽罗瓦理论导出的“正交表”,合理安排实验的一种科学的实验设计方法。n从规约中找出影响其功能实现的操作对象和外部因素作为因子,因子的取值作为状态,构造因素分析表,利用正交表进行各因子的专题组合,构造有效的测试数据集,并由此建立因果图。