《实验二 动态分析测试》由会员分享,可在线阅读,更多相关《实验二 动态分析测试(11页珍藏版)》请在金锄头文库上搜索。
1、软软 件件 学学 院院上上 机机 实实 验验 报报 告告课程名称:课程名称: 软件测试与评估软件测试与评估 实验项目:实验项目: 实验二基于规格说明的测试技术实验二基于规格说明的测试技术 实实 验验 室:室: 耘慧耘慧 416416 姓姓 名:名: 学学 号:号: 专业班级:专业班级: 软件软件 13-713-7 实验时间:实验时间: 2016/4/72016/4/7 实验成绩实验成绩评阅教师评阅教师一、一、 实验目的及要求实验目的及要求1.掌握基于规格说明的测试技术(即动态测试技术) ; 2.能够运用其进行测试用例的设计。二、二、 实验性质实验性质设计性三、三、 实验学时实验学时2 学时四、
2、四、 实验环境实验环境1.实验环境:主流 PC 机一套,要求安装 windows 操作系统、OFFICE 工具 2.知识准备: (1)软件基于规格说明的测试技术; (2)划分测试用例的原理和方法的同时,运用其设计测试用例。5 5、实验内容及步骤实验内容及步骤1.对问题进行分析,选用基于规格说明的测试技术中适合的方法为 NextDate 函数问题 设计测试用例: NextDate 函数 NextDate 函数说明另一种复杂的关系,即输入变量之间逻辑关系的复杂性。 NextDate 函数包含三个变量 month、day 和 year,函数的输出为输入日期后一天的日期。 要求输入变量 month、d
3、ay 和 year 均为整数值,并且满足下列条件: 条件 1 1month 12 条件 2 1day 31 条件 3 1912year 2050 结论:在 NextDate 函数中有两种复杂性的输入来源,一是输入域的复杂性,二是确定 闰年的规则并要增加“额外天” 。 2.以覆盖测试技术中的判定覆盖为例来进行三角形问题的测试用例的设计: 如果输入值 a、b、c 不满足条件 1、条件 2 和条件 3 ,程序给出“边的取值超出允许范 围”的信息。 如果输入值 a、b、c 满足条件 1、条件 2 和条件 3,则输出下列四种情况之一:(1)如果不满足条件 4、条件 5 和条件 6 中的一个,则程序输出为
4、“非三角形” ; (2)如果三条边相等,则程序输出为“等边三角形” ; (3)如果恰好有两条边相等,则程序输出为“等腰三角形” ; (4)如果三条边都不相等,则程序输出为“一般三角形” 。 五、实验要求及步骤 1.对于 NextDate 函数问题进行分析: (1)选用基于规格说明的测试技术中适合的方法为其设计测试用例; (2)选定等价类、边界值、等价类边界值结合法、因果图/决策表法其中之一设计具体 测试用例,给出预定输入和输出,以及实际输出结果; 可供选择的设计方法包括: 等价类测试 等价类测试方法是把所有可能的输入数据,即程序的输入域划分成若干部分,然后从每 一部分中选取少数有代表性的数据作
5、为测试用例。使用等价类划分方法设计测试用例要 经历划分等价类(列出等价类表)和选取测试用例两步。 等价类的划分有两种不同的情况:有效等价类:是指对于程序的规格说明来说,是合 理的,有意义的输入数据构成的集合。无效等价类:是指对于程序的规格说明来说, 是不合理的,无意义的输入数据构成的集合。在设计测试用例时,要同时考虑有效等价 类和无效等价类的设计。 用等价类划分法设计测试用例步骤: a 形成等价类表,每一等价类规定一个唯一的编号; b 设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类,重复这一步骤, 直到所有有效等价类均被测试用例所覆盖; c 设计一个新测试用例,使其只覆盖一个无效
6、等价类,重复这一步骤直到所有无效等价 类均被覆盖。 边界值分析 边界值分析是考虑边界条件而选取测试用例的一种功能测试方法。边界值分析关注输入 空间的边界,以标识测试用例,因为错误更可能出现在输入变量的极值附近。 边界值分析的基本思想是:利用输入变量的最小值(min)、略大于最小值(min+)、正常 值(nom)、略小于最大值(max-)和最大值(max)来设计测试用例。使用在最小值、略高于 最小值、正常值、略低于最大值和最大值处取输入变量值。 在边界值分析法中获取测试用例的方法是: a 每次保留程序中一个变量,让其余的变量取正常值,被保留的变量依次取 min、min+、nom、max-和 ma
7、x 作为有效边界值;依次取 min-和 max+作为无效边界值。 b 对程序中的每个变量重复 1) 。 决策表的测试 决策表(也称判定表)适合描述分析和表达针对不同逻辑条件的组合取值执行不同操作 的情况。 决策表分为 4 部分,如下图所示:其中: a 条件桩:列出问题的所有条件 b 条件项:针对条件桩给出的条件列出所有可能的取值 c 动作桩:列出问题规定的可能采取的操作 d 动作项:指出在条件项的各组取值情况下应采取的动作 使用决策表标识测试用例,则决策表中的条件就是规格说明书中的输入条件,动作就是 输出结果,而规则就是贯穿条件项和动作项的一列,一条规则要对应设计一个测试用例。因果图法 因果图
8、法最终生成的是决策表。利用因果图生成测试用例的基本步骤如下: a 分析软件规格说明中哪些是原因(即输入条件或输入条件的等价类) ,哪些是结果 (即输出条件) ,并给每个原因和结果赋予一个标识符。 b 分析软件规格说明中的语义,找出原因与结果之间、原因与原因之间对应的关系,根 据这些关系画出因果图。 c 由于语法或环境的限制,有些原因与原因之间、原因与结果之间的组合情况不可能出 现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。 d 把因果图转换为决策表。 e 根据决策表中的每一列设计测试用例。 (3)比较这些方法之间的优缺点。 NextDate 函数的决策表测试用例设计 1.问题
9、分析: 为了获得下一个日期,NextDate 函数执行如下操作:如果输入日期不是当月最后一天, 则把 day 变量的值加 1; 如果输入日期是 111 月份中某月的最后一天,则把 day 变量的值复位为 1,month 变量 的值加 1; 如果输入日期是 12 月的最后一天,则 day 变量和 month 变量的值都复位为 1,year 变 量的值加 1。 关于最后一天的判断: 如果是有 31 天的月份(1,3,5,7,8,10,12),day 变量值为 31; 如果是有 30 天的月份(4,6,9,11),day 变量值为 30; 如果是有 29 天的月份(闰年的 2 月),day 变量值为
10、 29; 如果是有 28 天的月份(非闰年的 2 月),day 变量值为 28。 2.根据所执行的操作,可列出 NextDate 函数的动作桩: a1: 不可能;a2: day 加 1;a3: day 复位;a4: month 加 1;a5: month 复位;a6: year 加 1 考虑到决策表的规模,条件使用 month、day、year 变量的等价类,在以下等价类集合上建立决策表: 对于 month 变量的取值 M1: mouth: mouth 有 30 天;M2: mouth:mouth 有 31 天,12 月除外; M3: mouth:mouth 有 12 月;M4: mouth:
11、mouth 是 2 月; 对于 day 变量的取值 D1:day:1day27;D2: day:day=28; D3: day:day=29;D4: day:day=30;D5: day:day=31; 对于 year 变量的取值 Y1:year:year 是闰年;Y2: year:year 不是闰年 month 变量的有效等价类: M1: month=4,6,9,11 M2: month=1,3,5,7,8,10 M3: month=12 M4: month=2 day 变量的有效等价类: D1: 1day27 D2:day=28 D3:day=29 D4:day=30 D5: day=31
12、 year 变量的有效等价类: Y1: year 是闰年 Y2: year 不是闰年 3.考虑各种有效的输入情况,程序中可能采取的操作有以下六种: a1: 不可能 a2: 日增 1 a3: 日期复位 a4: 月增 1 a5: 月复位 a6: 年增 1 4.绘制决策表:5.设计测试用例:6 6、 实验总结实验总结通过本次实验,我完成了动态测试技术,并且使用决策表法和覆盖法分别测试了 Nextday 程序和三角形程序,通过亲自上机测试,解决了程序中存在的一些 bug,更加 深刻的体会到测试的重要性。附录 源程序清单1、Nextday /date11.cpp #include using names
13、pace std; class Date int day; int month; int year; public: int Year(); int Month(); int Day(int day1,int month1,int year1); ; int Date:Year() return year; int Date:Month() return month; int Date:Day(int day1,int month1,int year1) if(month1=1|month1=3|month1=5|month1=7|month1=8|month1=10|month1=12) if(day112) month = 1; /day =1; year1+; year = year1; if(year2050)/1912 couta; if(a=0) break; coutb; coutc; cout=1912 int dd = p-Day(c,b,a); if(dd)/DATE-Year();coutyearmonthdayYear()Month()“月“dd“日“endl; else continue; else cout“输入的内容不和题意“endl;continue; return 0;