使用等价类划分法为NextDate函数设计测试用例
软件测试-NextDate函数
边界值分析法
输入 测试用例 month Test Case 1 Test Case 2 Test Case 3 Test Case 4 Test Case 5 Test Case 6 Test Case 7 Test Case 8 Test Case 9 Test Case 10 Test Case 11 Test Case 12 Test Case 13 Test Case 14 Test Case 15 Test Case 16 Test Case 17 Test Case 18 Test Case 19 Test Case 20 -1 0 1 2 11 12 13 6 6 6 6 6 6 6 6 6 6 6 6 6 day 15 15 15 15 15 15 15 -1 0 1 2 30 31 32 15 15 15 15 15 15 year 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 2000 1911 1912 1913 2049 2050 2051 month不在1~12中 month不在1~12中 2000年1月16日 2000年2月16日 2000年11月16日 2000年12月16日 month不在1~12中 day不在1~31中 day不在1~31中 2000年6月2日 2000年6月3日 2000年7月1日 不可能的输入日期 day不在1~31中 year不在1912~2050中 1912年6月16日 1913年6月16日 2049年6月16日 2050年6月16日 year不在1912~2050中 期望输出
返回
Test Case 5
Test Case 6 Test Case 7 Test Case 8
NextDate函数的等价类测试用例[试题]
NextDate函数的等价类测试用例NextDate是一个三变量函数,即月份、日期和年,这些变量的有效值区间定义如下:M1={月份:1≤月份≤12}D1={日期:1≤日期≤31}Y1={年:1812≤年≤2012}无效等价类:M2={月份:月份<1}M3={月份:月份>12}D2={日期:日期<1}D3={日期:日期>31}Y2={年:年<1812}Y3={年:年>2012}由于有效类的数量等于独立变量的个数,因此只有弱一般等价类测试用例出现,并且与强一般等价类测试用例相同:用例ID 月份日期年预期输出WN1,SN1 6 15 1912 1912年6月16日用例ID 月份日期年预期输出WR1 6 15 1912 1912年6月16日WR2 -1 15 1912 月份不在有效值域1..12中WR3 13 15 1912 月份不在有效值域1..12中WR4 6 -1 1912 日期不在有效值域1..31中WR5 6 32 1912 日期不在有效值域1..31中WR6 6 15 1811 年不在有效值域1812..2012中WR7 6 15 2013 年不在有效值域1812..2012中强健壮等价类测试用例集合:用例ID 月份日期年预期输出SR1 -1 15 1912 月份不在有效值域1..12中SR2 6 -1 1912 日期不在有效值域1..31中SR3 6 15 1811 年不在有效值域1812..2012中SR4 -1 -1 1912 月份不在有效值域1..12中日期不在有效值域1..31中SR5 6 -1 1811 日期不在有效值域1..31中年不在有效值域1812..2012中SR6 -1 15 1811 月份不在有效值域1..12中年不在有效值域1812..2012中SR7 -1 -1 1811 月份不在有效值域1..12中日期不在有效值域1..31中年不在有效值域1812..2012中。
2、根据边界值分析法为三角形问题编写测试用例。
老师第一题没装编程的软件先做了后面的俩个题2、根据边界值分析法为三角形问题编写测试用例。
三角形问题的边界值分析测试用例测试用例 a b e 预期输出Test1 Test2 Test3 Test4 Test5 60606050506060605050126099100等腰三角形等腰三角形等边三角形等腰三角形非三角形Test6 Test7 Test8 Test9 60605050129910060605050等腰三角形等腰三角形等腰三角形非三角形Test10 Test11 Test12 Test1312991006060505060605050等腰三角形等腰三角形等腰三角形非三角形3、根据等价类划分法为nextdate函编写测试用例。
有效等价类编号无效等价类编号1912<=year<=2050 1year<1912 4year>2050 5 year有非数字字符 61<=month<=12 2month<1 7month>12 8 Month有非数字字符91<=day<=31 3day<1 10day>31 11 Day有非数字字符12Y ear.month.day 编号Y ear.month.day 编号2006 6 6 1.2.3 2006 0 6 1.3.7 2006 6 a 1.2.12 2006 15 6 1.3.8 2006 a 6 1.3.9 2006 6 0 1.2.10 200a 6 6 2.3.7 2006 6 33 1.2.11 5555 6 6 2.3.61111 6 6 2.3.4000000000000000000000000000。
黑盒测试作业参考答案
黑盒测试作业参考答案.黑盒测试参考答案第三章(注意:答案仅供参考,若有误,请自行修改。
) 1、某保险公司计算保险费率。
,点以上保险费率为0.6%计算方式为10点及10;而点数又是由投保0.1%点以下保险费率为10人的年龄、性别、婚姻状况和抚养人数来决定,年龄有效输入范围其中,具体规则如下表所示。
之间的1-9为1-100;抚养人数可输入“无”或整数。
使用等价类划分进行测试用例设计抚养人性婚年未 M F 已20~39 40~59 0.人最多参考答案:(1)通过对程序功能的分析,其等价类表如下所示:输入条有效等价类无效等价类件 20~39岁(1)小于1岁 40~59岁(11)年龄(2)于100岁大或岁1~19(12)岁60~100 (3).M' (4)除‘M'和‘F'之‘性别‘F 外的其他字符(13)'(5)(外除已婚和未婚之6)已婚婚姻未婚(7的其他字符(14))的外字除无和数之(8)无15)其他字符抚养人(9) 1~6人((数16)1 小于16~19大)设计测试用例表,覆盖等价类。
(输入数覆盖预期输保险费等价性0.6%1 4 6 8127M0.6%2 5 7 92F2503 4 6100.13770M提示“年龄11 4 6 8已4 M 无 0在之间”1~100婚提示“年龄应未12 5 7 9 5 4 F 102 1~100 婚之间”在提示“性别应已1 13 6 8 306 无T”F或M输入婚1 4 14 8 提示“婚姻应离无为30 M 已婚或未7 婚婚”1 4 6 15提示“抚养M830之间的1-数提示“抚养1 4 6 16 -1930M1-之间的数1 4 6 17提示“抚养201030M1-之间的数2、NextDate函数。
该函数要求输入三个变量month、day和year,输出该日期之后一天的日期。
其中year的取值范围为:1900-2079。
如果输入的日期组合不合法,则显示“无效的输入日期”。
NEXTDATE的决策表示例(软件测试技术实验报告)
NextDate函数测试用例选择NextDate函数,是因为它可以说明输入定义域中的依赖性问题,这使得这个例子成为基于决策表测试的一个完美例子,因为决策表可以突出这种依赖关系。
从前面对等价类测试的分析我们知道,等价类分析假设所有的变量都是独立的。
如果变量确实是独立的,则使用类的笛卡尔积是有意义的。
如果变量之间在输入定义域中存在逻辑依赖关系,则这些依赖关系在笛卡尔积中就会丢失(说抑制可能更确切)。
决策表格式通过使用“不可能动作”概念表示条件的不可能组合,使我们能够强调这种依赖关系。
下面将对NextDate函数的决策表描述做三次尝试。
第一次尝试标识合适的条件和动作,假设首先从分析等价类集合开始。
M1= {月份:每月有30天};M2 = {月份:每月有31天};M3二{月份:此月是2月}D1 = {日期:1<0期W 28}; D2 = {日期:日期=29}; D3 = {日期=30}; D4 = {日期=31}Y1 = {年:年是闰年}; Y2 = {年:年不是闰年}如果我们希望突出不可能的组合,则可以建立具有以下条件和动作的有限项决策表。
(请注意,年变量对应的等价类收缩为下表的一个条件。
)有2处条规则的第一袂尝试这个决策表会有256条规则,其中很多是不可能的。
如果要显示为什么这些规则是不可能的,可将动作修改为:al:月份中的天数太多;a2:不能出现在非闰年中;a3:计算NextDate.第二次尝试如果我们将注意力集中到NextDate函数的闰年问题上,则可以修改已有的等价类集合。
为了说明另一种决策表表示方法,这一次采用扩展项决策表开发,并更仔细地研究动作桩。
在构建扩展项决策表时,必须保证等价类构成输入定义域的真划分。
如果规则项之间存在“重叠”,则会存在冗余情况,使得多个规则都能够满足。
这里,Y2是一组1812〜2012之间的年份,并除以4, 2000除外。
M1= {月份:每月有30天}; M2 = {月份:每月有31天}; M3二{月份:此月是2月}D1 = {日期:1<0期W 28}; D2 = {日期:日期=29}; D3 = {日期=30}; D4 = {日期=31}Y1 = {年:年=2000}; Y2 = {年:年是闰年}; Y3 = {年:年是平年}从某种意义上说,我们采用的是“灰盒”技术,因为更仔细地研究了NextDate 函数。
使用等价类划分法为NextDate函数设计测试用例
1、使用等价类划分法为NextDate函数设计测试用例:NextDate函数包含三个输入变量month、day和year(要求month、day和year 均为整数值,并且满足:1≤month≤12; 1≤day≤31;1912≤year≤2050),函数的输出为输入日期后一天的日期。
(1)列出输入域等价类表(包括有效和无效等价类)。
(2)根据(1)中的等价类,设计能覆盖所有等价类的测试用例,要求包括输入数据和预期输出,并指出各个测试用例所覆盖的等价类编号。
2、某城市电话号码由三部分组成,分别是:地区码——空白或者三位数字;前缀——非‘0’或‘1’开头的三位数字;后缀——4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。
(1)列出输入域等价类表(包括有效和无效等价类)。
(2)根据(1)中的等价类表,设计能覆盖所有等价类的测试用例,要求包括输入数据和预期输出,并指出各个测试用例覆盖的等价类编号。
3、使用基本路径测试方法测试以下程序段:V oid sort(int irecordnum,int itype)1{2Int x = 0;3Int y = 0;4While( irecordnum -- >0 )5{6If( itype == 0)7Break;8Else9If(itype == 1)10x = x+10;11Else12y = y+20;13}14}说明:写在程序段某些行开头数字(1~14)是对每条语句的编号。
(1)画出程序的控制流程图(用题中给出的语句编号表示)。
(2)计算上述程序段的环形复杂度。
(3)导出基本路径集,列出程序的独立路径(用题中给出的语句编号表示)。
请根据(3)中的独立路径,设计测试用例的输入数据和预期输出。
4、使用基本路径测试方法测试以下程序段:Int IsGood( int grade ){① If (grade <= 100){② If( grade >= 80 ){③ If(year >= 90 )④ Result = 2; //优秀Else⑤ Result = 1; //良好}Else if(grade >= 0)⑥ Result = 0; //合格Else⑦ Result = -1; //分数为负数}Else⑦ Result = -1; //分数大于100⑧ Return Result;}说明:写在程序段某些行开头数字(①~⑧)是对应语句的编号。
等价类划分法
设计测试用例的着眼点
根据产品规格,测试基本功能; 考虑设计一般用户(非专业人员)的使用方案; 考虑设计稀有或特殊的使用方案; 与系统其他组成部分的配合(如 FAX 和上网可能要用到 MODEM,测试中考虑对设备的共享); 考虑特殊情况(如内存和硬件的冲突等); 设计极端情况(如内存泄漏、破坏性测试等); 好的测试用例集能花费最小的代价(人力、物力、财力、 时间)做最好的测试。
设计测试用例的基本准则
测试用例的代表性 能够代表并覆盖各种合理的和不合理的、合法的和非 法的、边界的和越界的以及极限的输入数据、操作和环 境设置等。 测试结果的可判定性 即测试执行结果的正确性是可判定的,每一个测试用 例都应有相应的期望结果。 测试结果的可再现性 即对同样的测试用例,系统的执行结果应当是相同的。
例:程序输入x取值于一个固定的枚举类型{1,3,7,15},且程序 中对这4个数值分别进行了处理,则有效等价类为x=1、x=3、 x=7、x=15,无效等价类为x≠1,3,7,15的值的集合。
等价类的划分
(3)按照数值集合划分 在输入条件规定了输入值的集合或 规定了“必须如何”的条件下,可以确定一个有效等价类和 一个无效等价类(该集合有效值之外)。 例:程序输入条件为取值为奇数的整数 x,则有效等价类为x (4)按照限制条件或规则划分 在规定了输入数据必须遵 的值为奇数的整数,无效等价类为 x的值不为奇数的整数。 守的规则或限制条件的情况下,可确定一个有效等价类(符 合规则)和若干个无效等价类(从不同角度违反规则)。 例:程序输入条件为以字符‘a’开头、长度为8的字符串,并且 (5)细分等价类 在确知已划分的等价类中各元素在程序中 字符串不包含‘a’~ ‘z’之外的其它字符,则有效等价类为满 的处理方式不同的情况下,则应再将该等价类进一步划分为 足了上述所有条件的字符串,无效等价类为不以‘a’开头的字 更小的等价类,并建立等价类表。 符串、长度不为8的字符串和包含了‘a’~ ‘z’之外其它字符的 字符串。
NextData函数
NextData函数一、问题描述程序有三个输入变量month、day、year(month、day和year均为整数值,并且满足:1≤month≤12、1≤day≤31、1900≤year ≤2050。
),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上下一天的日期。
例如,输入为2005年11月29日,则该程序的输出为2005年11月30日。
请用黑盒测试方法设计测试用例。
二、程序界面计算下一天的程序代码见附录。
三、设计测试用例1. 用边界值测试方法设计测试用例用健壮性测试法设计测试用例,按照下列步骤进行:(1)分析各变量的取值健壮性测试时,各变量分别取:略小于最小值、最小值、略高于最小值、正常值、略低于最大值、最大值和略大于最大值。
month:-1,1,2,6,11,12,13;day:-1,1,2,15,30,31,32year:1899,1900,1901,1975,2049,2050,2051;(2)测试用例数有n个变量的程序,其边界值分析会产生6n+1个测试用例。
这里有3个变量,因此会产生19个测试用例。
(3)设计测试用例,见表1-1。
NextDate函数的复杂性来源于两个方面:一是输入域的复杂性(即输入变量之间逻辑关系的复杂性),二是确定闰年的规则。
但是在进行健壮性测试时,没有考虑输入变量之间的逻辑关系,也没有考虑和闰年相关的问题,因此在设计测试用例时存在遗漏问题,比如和判断闰年相关的日期:2008.2.29、1999.2.28等。
表1-1NextDate函数测试用例2. 用基于判定表的方法设计测试用例(1)分析各种输入情况,列出为输入变量month、day、year划分的有效等价类。
month变量的有效等价类:M1 = { month = 4,6,9,11 }M2 = { month = 1,3,5,7,8,10 }M3 = { month = 12 }M4 = { month = 2 }day变量的有效等价类:D1={日期:1≤日期≤27}D2={日期:日期=28}D3={日期:日期=29}D4={日期:日期=30}D5={日期:日期=31}year变量的有效等价类:Y1 = { year是闰年}Y2 = { year不是闰年}(2)分析程序规格说明,结合以上等价类划分的情况给出问题规定的可能采取的操作(即列出所有的动作桩)。
习题解答1_v2.0
4
(
13
123
23 233 拒绝(无效) 15
4
45
(2)上述方法设计出的测试用例已经相当完善,无须补充。 8、有一个处理单价为 5 角钱的饮料的自动售货机,相应规格说明如下:
若投入 5 角钱或 1 元钱的硬币,按下〖橙汁〗或〖啤酒〗的按钮,则相应的饮料就 送出来。(每次只投入一个硬币,只押下一种饮料的按钮)
15
a.首先为等价类表中的每一 个等价类分别规定一个唯一 的编号。 b.设计一个新的测试用例,使 它能够尽量覆盖尚未覆盖的 有效等价类。重复这个步骤, 直到所有的有效等价类均被 测试用例所覆盖。
@
c.设计一个新的测试用例, 使它仅覆盖一个尚未覆盖的 无效等价类。重复这一步骤, 直到所有的无效等价类均被 测试用例所覆盖。
2060
9
2030 14 5 无法推算
10
[
2 30 无法推算
2000
2、找零钱最佳组合(P47) 假设商店货品价格(R) 都不大于 100 元(且为整数),若顾客付款(P)在 100 元内,现有
一个程序能在每位顾客付款后给出找零钱的最佳组合(找给顾客货币张数最少)。 假定此商 店的货币面值只包括:50 元(N50)、10 元(N10)、 5 元(N5)、1 元(N1) 四种。
“……对于功率大于 50 马力的机器或者维修记录不全的或已经运行 10 年以上的 机器应予以优先的维修处理……”。
这里假定“维修记录不全”和“优先维修处理”有严格的定义。 请建立该需求的决策表,并绘制出化简(合并规则)后的决策表。
解答: 根据题目意思,得到本题有三个条件: C1:功率大于 50 马力 C2:维修记录不全 C3:已经运行 10 年以上
NEXTDATE的决策表示例(软件测试技术实验报告)
NextDate函数测试用例选择NextDate函数,是因为它可以说明输入定义域中的依赖性问题,这使得这个例子成为基于决策表测试的一个完美例子,因为决策表可以突出这种依赖关系。
从前面对等价类测试的分析我们知道,等价类分析假设所有的变量都是独立的。
如果变量确实是独立的,则使用类的笛卡尔积是有意义的。
如果变量之间在输入定义域中存在逻辑依赖关系,则这些依赖关系在笛卡尔积中就会丢失(说抑制可能更确切)。
决策表格式通过使用“不可能动作”概念表示条件的不可能组合,使我们能够强调这种依赖关系。
下面将对NextDate函数的决策表描述做三次尝试。
第一次尝试标识合适的条件和动作,假设首先从分析等价类集合开始。
M1 = {月份:每月有30天};M2 = {月份:每月有31天};M3 = {月份:此月是2月}D1 = {日期:1≤日期≤28};D2 = {日期:日期=29};D3 = {日期=30};D4 = {日期=31}Y1 = {年:年是闰年};Y2 = {年:年不是闰年}如果我们希望突出不可能的组合,则可以建立具有以下条件和动作的有限项决策表。
(请注意,年变量对应的等价类收缩为下表的一个条件。
)这个决策表会有256条规则,其中很多是不可能的。
如果要显示为什么这些规则是不可能的,可将动作修改为:a1:月份中的天数太多;a2:不能出现在非闰年中;a3:计算NextDate。
第二次尝试如果我们将注意力集中到NextDate函数的闰年问题上,则可以修改已有的等价类集合。
为了说明另一种决策表表示方法,这一次采用扩展项决策表开发,并更仔细地研究动作桩。
在构建扩展项决策表时,必须保证等价类构成输入定义域的真划分。
如果规则项之间存在“重叠”,则会存在冗余情况,使得多个规则都能够满足。
这里,Y2是一组1812~2012之间的年份,并除以4,2000除外。
M1 = {月份:每月有30天};M2 = {月份:每月有31天};M3 = {月份:此月是2月}D1 = {日期:1≤日期≤28};D2 = {日期:日期=29};D3 = {日期=30};D4 = {日期=31}Y1 = {年:年=2000};Y2 = {年:年是闰年};Y3 = {年:年是平年}从某种意义上说,我们采用的是“灰盒”技术,因为更仔细地研究了NextDate函数。
软件测试---NextDate函数---测试用例详解
返回
Test Case 5
Test Case 6 Test Case 7 Test Case 8
2
12 9 2
29
31 31 29
2004
2007 2007 2007
2000年3月1日(2004是闰年)
2008年1月1日 不可能的输入日期 不可能的输入日期
Test Case 9
Test Case 10 Test Case 11 Test Case 12 制作者:
NextDate函数的用例设计方法
主讲:黄老师
授课班级:软件设计班
制作者:
NextDate函数的用例设计方法
黑盒测试
等价类划分法
边界值分析法
因果图法 决策表法
制作者:
制作者:
Page 2
等价类划分法——以输入域划分等价类
NextDate 函数包含三个变量:month(月份)、day(日期) 和 year(年),函数的输出为输入日期后一天的日期。 例如, 输入为 2007年9月 9日,则函数的输出为 2007年9月10日 。 要求输入变量 month 、 day 和 year 均为整数值,并且满足 下列条件: (1)1≤month≤12 (2)1≤day≤31 (3)1912≤year≤2050 此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂 性的来源有两个:一个是输入域的复杂性,另一个是指闰年 的规则。例如变量year和变量month取不同的值,对应的变 量day会有不同的取值范围,day值的范围可能是1~30或1~ 31,也可能是1~28或1~29。
制作者: 制作者:
Page 10
等价类划分法——以输入域划分等价类
改进等价类划分测试NextDate函数如表5-5所示。
软件测试-NextDate函数
2
15 9 9
30
9 35 9
Page 11
2007
2007 2007 2100
不可能的输入日期
变量month无效 变量day无效 变量year无效 制作者:
边界值分析法
边界值分析法设计测试用例
在NextDate函数中,规定了变量month、day、year的相应 取值范围。在上面等价类法设计测试用例中已经提过,具 体如下: M1={month:1≤month≤12} D1={day:1≤day≤31} Y1={year:1912≤year≤2050}
决策表共有22条规则: 第1~5条规则解决有30天的月份; 第6~10条规则解决有31天的月份(除12月份以外); 第11~15条规则解决12月份; 第16~22条规则解决2月份和闰年的问题。 不可能规则也在决策表中列出,比如第5条规则中在有30天的 月份中也考虑了31日。
制作者:
Page 16
决策表法
NextDate函数的用例设计方法
主讲:黄老师
授课班级:软件设计班
制作者:
NextDate函数的用例设计方法
黑盒测试
等价类划分法
边界值分析法
因果图法 决策表法
制作者:
Page 2
等价类划分法——以输入域划分等价类
NextDate 函数包含三个变量:month(月份)、day(日期) 和 year(年),函数的输出为输入日期后一天的日期。 例如, 输入为 2007年9月 9日,则函数的输出为 2007年9月10日 。 要求输入变量 month 、 day 和 year 均为整数值,并且满足 下列条件: (1)1≤month≤12 (2)1≤day≤31 (3)1912≤year≤2050 此函数的主要特点是输入变量之间的逻辑关系比较复杂。复杂 性的来源有两个:一个是输入域的复杂性,另一个是指闰年 的规则。例如变量year和变量month取不同的值,对应的变 量day会有不同的取值范围,day值的范围可能是1~30或1~ 31,也可能是1~28或1~29。
软件测试NextDate函数测试用例详解
Test Case 3 13
9
2007
month不在1~12中
Test Case 4
9
0
2007
day不在1~31中
Test Case 5
9
32
2007
day不在1~31中
Test Case 6
9
9
1911
year不在1912~
9
2051
year不在1912~2050中
等价类划分法——以输入域划分等价类
一般等价类测试用例如表5-2所示。
表5-2 NextDate函数的一般等价类测试用例
测试
输入
用例 month day
year
期望输出
Test 9
Case 1
9
2007 2007年9月10日
健壮等价类测试中包含弱健壮等价类测试和强健壮等价类测试。
• 弱健壮等价类测试 弱健壮等价类测试中的有效测试用例使用每个有效等价
关于每个月份的天数问题,可以详细划分为以下等价类: M1={month:month有30天} M2={month:month有31天, 除去12月} M3={month:month是2月} M4={month:month是12月} D1={day:1≤day≤27} D2={day:day=28} D3={day:day=29} D4={day:day=30} D5={day:day=31} Y1={year:year是闰年} Y2={year:year不是闰年}
等价类划分法——以输入域划分等价类
表5-4 NextDate函数的强健壮等价类测试用例
测试用例
Test Case 1 Test Case 2 Test Case 3 Test Case 4
软件测试-nextDate问题
软件测试-nextDate问题NextDate 函数包含三个变量:month 、 day 和 year ,函数的输出为输⼊⽇期后⼀天的⽇期。
例如,输⼊为 2006年3⽉ 7⽇,则函数的输出为 2006年3⽉8⽇。
要求输⼊变量 month 、 day 和 year 均为整数值,并且满⾜下列条件:①1≤month≤12②1≤day≤31③1920≤year≤20501)有效等价类为:M1={⽉份:1≤⽉份≤12}D1={⽇期:1≤⽇期≤31}Y1={年:1812≤年≤2012}2)若条件① ~ ③中任何⼀个条件失效,则 NextDate 函数都会产⽣⼀个输出,指明相应的变量超出取值范围,⽐如 "month 的值不在 1-12 范围当中 " 。
显然还存在着⼤量的 year 、 month 、 day 的⽆效组合, NextDate 函数将这些组合作统⼀的输出: " ⽆效输⼊⽇期 " 。
其⽆效等价类为:M2={⽉份:⽉份<1}M3={⽉份:⽉份>12}D2={⽇期:⽇期<1}D3={⽇期:⽇期>31}Y2={年:年<1812}Y3={年:年>2012}弱⼀般等价类测试⽤例⽉份⽇期年预期输出6 15 1912 1912年6⽉16⽇强⼀般等价类测试⽤例同弱⼀般等价类测试⽤例注:弱--有单缺陷假设;健壮--考虑了⽆效值(⼀)弱健壮等价类测试⽤例ID ⽉份⽇期年预期输出WR1 6 15 1912 1912年6⽉16⽇WR2 -1 15 1912 ⽉份不在1~12中WR3 13 15 1912 ⽉份不在1~12中WR4 6 -1 1912 ⽇期不在1~31中WR5 6 32 1912 ⽇期不在1~31中WR6 6 15 1811 年份不在1812~2012中WR7 6 15 2013 年份不在1812~2012中(⼆)强健壮等价类测试强健性等价类测试⽤例可以包含多个⽆效值,即含有多个缺陷假设。
黑盒测试试题及答案
1:程序规定;输入三个整数作为三边的边长构成三角形。
当此三角形为一般三角形、等腰三角形、等边三角形时,分别作计算。
用等价类划分方法为该程序进行测试用例设计。
2:现有一个学生标准化考试批阅试卷,产生成绩报告的程序。
其规格说明如下:程序的输入文件由一些有80个字符的记录组成,所有记录分为3组,如图:1、标题:改组只有一个记录,其内容是成绩报告的名字。
2、各题的标准答案:每个记录均在第80个字符处标以数字2。
该组的记录:第一个记录:第1~3个字符为试题数(1~999)。
第10~59个字符是1~50题的标准答案(每个合法字符表示一个答案)。
第二个记录:是第51~100题的标准答案。
…….3、学生的答案:每个记录均在第80个字符处标以数字3。
每个学生的答卷在若干个记录中给出。
学号:1~9个字符1~50题的答案:10~59。
当大于50题时,在第二、三、……个记录中给出。
学生人数不超过200,试题数不超过999。
程序的输出有4个报告:a)按学号排列的成绩单,列出每个学生的成绩、名次。
b)按学生成绩排序的成绩单。
c)平均分数及标准偏差的报告d)试题分析报告。
按试题号排序,列出各题学生答对的百分比。
1. 黑盒测试的具体技术方法有哪些?答案: 黑盒测试的具体技术方法主要有边界值分析法、等价类划分法、因果图法、决策表测试法、场景法等。
2. 分析如何选择恰当的黑盒测试方法。
答案: 通常在决定测试策略时,有以下的参考原则:①在任何情况下都必须采用边界值分析法。
这种方法设计出的测试用例发现程序错误的能力最强。
②必要时采用等价划分类方法补充测试用例。
③采用错误推断法再追加测试用例。
④对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。
如果没有达到要求的覆盖标准,则应当在补充更多的测试用例。
⑤如果程序的功能说明中含有输入条件的组合情况,则应在一开始就选用因果图法。
3. 解释黑盒测试的概念。
答案: 黑盒测试被称为功能测试或数据驱动测试。
NextDate函数测试用例
1.测试程序源代码#include"stdafx。
h"#include <iostream>using namespace std;void NextDate(int year,int month,int day);void main(){int year=0,month=0,day=0;NextDate(year,month,day);}void NextDate(int year,int month,int day){cout〈<”请输入年份:”<<endl;cin>>year;while(!(year>=1911 && year<=2013)){cout<<"年份超过界限,请重新输入”<〈endl;cin>〉year;}cout<〈”请输入月份:"<〈endl;cin〉〉month;while (month〉12||month<1){cout〈〈”月份输入有误,请重新输入"<〈endl;cin>>month;}cout<〈”请输入日期:"<〈endl;cin〉>day;while (day〉31||day<1){cout〈〈”日期输入有误,请重新输入"〈<endl;cin>>day;}while(month==4&&day==31||month==6&&day==31||month==9&&day==31||month==11&&day==31) {cout〈<”小月没有31号”〈<endl;cin〉>day;} if((year%4==0 && year%100!=0) ||(year%400==0)) //检查闰年;{int i=0;i=day-29;while(month==2&&i〉0){cout〈〈”本月是闰月,请在1-29之间从新输入日期"<〈endl;cin〉>day;}if(month==2&&day==29){month=3;day=1;}else day++;}else day++;//月底计算;switch(month){case 1:case 3:case 5:case 7:case 8:case 10:if (day==32){month++;day=1;cout<<"明天是:"<<year〈〈’/'〈<month〈<’/'<〈day<〈endl;}break;case 2:if(day==29){month=3;day=1;cout〈〈"明天是:"〈<year〈<’/’〈<month<<'/'<<day<<endl;}break;case 4:case 6:case 9:case 11:if(day==31){month++;day=1;cout<〈"明天是:"〈<year〈〈’/'〈<month〈<'/’<<day〈<endl;}break;case 12:if(day==32){year++;month=1;day=1;cout〈<"明天是:”〈<year<〈’/’<〈month<<’/’〈<day〈〈endl;}break;}cout〈〈”明天是:”<<year<〈’/'〈〈month<〈'/’〈〈day<<endl;}白盒测试7DD-路径情况1. 由一个节点组成,内度=0情况2。
Java黑盒测试之nextDate函数测试
Java⿊盒测试之nextDate函数测试⽬录⼀、实验⽬的⼆、实验内容三、实验要求四、实验过程五、缺陷分析⼀、实验⽬的(1)掌握应⽤⿊盒测试技术进⾏测试⽤例设计。
(2)掌握对测试⽤例进⾏优化设计⽅法。
⼆、实验内容⽇期问题测试以下程序:该程序有三个输⼊变量month、day、year(month、day和year均为整数值,并且满⾜:1≤month≤12、1≤day≤31和1900≤year≤2050),分别作为输⼊⽇期的⽉份、⽇、年份,通过程序可以输出该输⼊⽇期在⽇历上隔⼀天的⽇期。
例如,输⼊为2004 年11⽉30⽇,则该程序的输出为2004年12⽉1⽇。
(1)划分等价类,按照等价类划分法设计测试⽤例;(2)编写nextDate函数;(3)掌握Junit4的⽤法,使⽤Junit4测试nextDate函数。
JUnit4是JUnit框架有史以来的最⼤改进,其主要⽬标便是利⽤Java5的Annotation特性简化测试⽤例的编写。
掌握Junit4定义的⼀些常见Annotations:org.junit.Testorg.junit.Beforeorg.junit.Afterorg.junit.BeforeClassorg.junit.AfterClassorg.junit.Ignoreorg.junit.runner.RunWithorg.junit.runners.Suite.SuiteClassesorg.junit.runners.Parameterized.Parameters三、实验要求(1)根据题⽬要求编写测试⽤例;(2)准备nextDate函数,使⽤Junit4测试执⾏测试;(3)撰写实验报告。
四、实验过程(1)根据题⽬要求编写测试⽤例1)划分等价类并编号输⼊数据有效等价类⽆效等价类年(1) 1900到2050内的闰年整数(10) year<1900(2) 1900到2050内的平年整数(11) year>2050(12) 其他输⼊⽉(3) 1,3,5,7,8,10,12内的整数(13) month<1(4) 4,6,9,11内的整数(14) 12<month(5) 2(15) 其他输⼊⽇(6) 1~28(16) day<1(7) 29(17) year为闰年 month=2时,29<day(8) 30(18) year为⾮闰年 month=2时,28<day(9) 31(19) month=1,3,5,7,8,10,12时,31<day(20) month=4,6,9,11时,30<day(21) day>31(22) 其他输⼊2)为有效等价类设计测试⽤例序号测试数据期望结果覆盖范围12016 2 29下⼀天是2016年3⽉1⽇!(1)(5)(7)22017 1 28下⼀天是2017年1⽉29⽇!(2)(3)(6)32017 1 31下⼀天是2017年2⽉1⽇!(2)(3)(9)42017 4 30下⼀天是2017年5⽉1⽇!(2)(4)(8)52017 12 31下⼀天是2018年1⽉1⽇!(2)(3)(9)3)为每⼀个⽆效等价类⾄少设计⼀个测试⽤例序号输⼊数据期望结果覆盖范围61899 3 1年的值不在指定范围之内(10)72051 3 1年的值不在指定范围之内(11)8205% 3 1⽆效的输⼊⽇期!(12)91901 -1 1⽉的值不在指定范围之内(13)101901 13 1⽉的值不在指定范围之内(14)111901 1% 1⽆效的输⼊⽇期!(15)121901 1 -1⽇的值不在指定范围之内(16)132016 2 30⽇的值不在指定范围之内(17)142017 2 29⽇的值不在指定范围之内(18)152017 3 32⽇的值不在指定范围之内(19)162017 4 31⽇的值不在指定范围之内(20)172017 4 32⽇的值不在指定范围之内(21)182017 4 3%⽆效的输⼊⽇期!(22)(2)编写nextDate函数,使⽤Junit4测试执⾏测试被测代码package io.shentuzhigang.demo.blackbox;import java.util.regex.Pattern;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-05-06 15:43*/public class Date {private static final Pattern pattern = pile("^[-\\+]?[\\d]*$");public static String nextDate(String s_year, String s_month, String s_day) { //检测是否存在⽆效字符if (!(isInteger(s_year) && isInteger(s_month) && isInteger(s_day))) {return "⽆效的输⼊⽇期!";}//将字符串转为intint year = Integer.parseInt(s_year);int month = Integer.parseInt(s_month);int day = Integer.parseInt((s_day));boolean flag = false;if (year < 1900 || year > 2050) {return ("年的值不在指定范围之内");} else if (month > 12 || month < 1) {return ("⽉的值不在指定范围之内");} else if (day > 31 || day < 1) {return ("⽇的值不在指定范围之内");}switch (month) {case 1:case 3:case 5:case 7:case 8:case 10:if (day == 31) {day = 1;month = month + 1;} else {day = day + 1;}break;case 4:case 6:case 9:case 11:if (day == 30) {day = 1;month = month + 1;} else if (day == 31) {flag = true;} else {day = day + 1;}break;case 12:if (day == 31) {day = 1;month = 1;year = year + 1;} else {day = day + 1;}break;case 2: {if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) { // 闰年if (day == 29) {day = 1;month = 3;} else if (day < 29) {day = day + 1;} else {flag = true;// day超过29}} else {//⾮闰年if (day == 28) {day = 1;month = 3;} else if (day < 28) {day = day + 1;} else {flag = true;}}}break;default:}if (year > 2050) {return ("年的值不在指定范围之内");} else if (flag) {return ("⽇的值不在指定范围之内");} else {return ("下⼀天是" + year + "年" + month + "⽉" + day + "⽇!"); }}/*** 判断输⼊字符串是否是整数型** @param str* @return*/public static boolean isInteger(String str) {return pattern.matcher(str).matches();}}测试代码package io.shentuzhigang.demo.blackbox;import org.junit.Assert;import org.junit.Test;import org.junit.runner.RunWith;import org.junit.runners.Parameterized;import org.junit.runners.Parameterized.Parameters;import java.util.Arrays;import java.util.Collection;/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-05-06 15:43*/@RunWith(Parameterized.class)public class DateTests {private String input1;private String input2;private String input3;private String expected;@Parameterspublic static Collection<?> prepareData(){String [][] object = {// 有效等价类{"2016","2","29","下⼀天是2016年3⽉1⽇!"},{"2017","1","28","下⼀天是2017年1⽉29⽇!"},{"2017","1","31","下⼀天是2017年2⽉1⽇!"},{"2017","4","30","下⼀天是2017年5⽉1⽇!"},// ⽆效等价类{"1899","3","1","年的值不在指定范围之内"},{"2051","3","1","年的值不在指定范围之内"},{"205%","3","1","⽆效的输⼊⽇期!"},{"1901","-1","1","⽉的值不在指定范围之内"},{"1901","13","1","⽉的值不在指定范围之内"},{"1901","1%","1","⽆效的输⼊⽇期!"},{"1901","1","-1","⽇的值不在指定范围之内"},{"2016","2","30","⽇的值不在指定范围之内"},{"2017","2","29","⽇的值不在指定范围之内"},{"2017","3","32","⽇的值不在指定范围之内"},{"2017","4","31","⽇的值不在指定范围之内"},{"2017","4","32","⽇的值不在指定范围之内"},{"2017","4","3%","⽆效的输⼊⽇期!"}};return Arrays.asList(object);}public DateTests(String input1,String input2,String input3,String expected){this.input1 = input1;this.input2 = input2;this.input3 = input3;this.expected = expected;}@Testpublic void testDate(){String result = Date.nextDate(input1,input2,input3);Assert.assertEquals(expected,result);}}测试结果五、缺陷分析1.⽤例?发⽣故障的原因是程序先判断day为29就变为3⽉1⽇,⽽不先判断是否为闰年,于是⽤例?的输出结果为2007-3-1⽽不是⽆效输⼊⽇期。
软件测试经典练习题
一、判断题(正确的“√”,错误的“╳”)2、测试程序仅仅按预期方式运行就行了。
(F )3、不存在质量很高但可靠性很差的产品。
(F )4、软件测试员可以对产品说明书进行白盒测试。
(F )5、静态白盒测试可以找出遗漏之处和问题。
( T)6、总是首先设计白盒测试用例。
(F )7、可以发布具有配置缺陷的软件产品。
(T )8、所有软件必须进行某种程度的兼容性测试。
(T )9、所有软件都有一个用户界面,因此必须测试易用性。
(F )10、测试组负责软件质量。
(F )11、软件测试按照测试过程分类为黑盒、白盒测试。
( F)12、在设计测试用例时,应包括合理的输入条件和不合理的输入条件。
( T)13、集成测试计划在需求分析阶段末提交。
(F )14、单元测试属于动态测试。
(F )15、缺陷跟踪系统只针对测试人员来使用。
(F )16、从用户软件开发者的角度出发,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,以考虑是否可接受该产品。
( F)17、项目立项前测试人员不需要提交任何工件。
( F)18、软件测试的目的是尽可能多的找出软件的缺陷。
( F)19、软件项目在进入需求分析阶段,测试人员应该开始介入其中。
(T )20、软件生存周期是从软件开始开发到开发结束的整个时期。
( F)21、单元测试能发现约80%的软件缺陷。
( F)22、数据流图和数据字典共同构成系统的逻辑模型。
(T )23、负载测试是验证要检验的系统的能力最高能达到什么程度。
(F )24、测试人员要坚持原则,缺陷未修复完坚决不予通过。
(T25、代码评审员一般由测试员担任。
( F)26、测试组负责软件质量。
(F )27、程序的效率与程序的复杂性相关。
(F )28、详细设计的目的是为软件结构图中的每一个模块确定使用的算法和块内数据结构,并用某种选定的表达工具给出清晰的描述。
(T ) 29、软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
(T )30、测试程序仅仅按预期方式运行就行了。
覆盖率(白盒)测试功能(黑盒)测试_真题-无答案
覆盖率(白盒)测试、功能(黑盒)测试(总分166,考试时间90分钟)一、选择题1. 使用白盒测试方法时,确定测试数据应根据______和指定的覆盖标准。
A.程序的内部逻辑B.程序的复杂结构C.使用说明书D.程序的功能2. 下列选项中不属于覆盖率对软件测试作用的是______。
A.得知测试是否充分B.了解测试的弱点在哪些方面C.指导设计能够增加覆盖率的测试用例D.协助找出代码中的语法错误3. 如果程序中有两个判定条件,其复合条件表达式分别为(a>=1)and(b<=10)和(a>0)or(c <4),为了达到100%的判定覆盖率,至少需要设计的测试用例个数为______个。
A.1 B.2 C.3 D.44. 以下程序的路径数为______条。
if(a>0)if(b>0)result=a+b;if(c>0) result+=1;A.3 B.6 C.8 D.125. 数据流覆盖关注的是程序中某个变量从其声明、赋值到引用的变化情况,它是______的变种。
A.语句覆盖 B.判定覆盖 C.路径覆盖 D.分支覆盖6. 下列选项中不能作为定义节点的是______。
A.过程调用 B.循环控制语句C.输入语句 D.输出语句7. 下列选项中不能作为使用节点的是______。
A.过程调用 B.循环控制语句C.输入语句 D.输出语句8. 以下程序如果采用路径覆盖法进行测试,则至少需要______个测试用例。
if (result==null || result.getRowCount() == 0)found=false;System.out.println("没有结果!!!");elseif(type==1)found=true;elsefound=false;A.2 B.3 C.4 D.59. 路径覆盖必定也满足______。
A.判定覆盖 B.条件覆盖C.语句覆盖 D.多条件覆盖10. 在用逻辑覆盖法设计测试用例时,有语句覆盖、分支覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖等。
NextData判定表
NextData函数
设计测试用例
2. 用基于判定表的方法设计测试用例
(1)分析各种输入情况,列出为输入变量month、day、year划分的有效等价类。
month变量的有效等价类:
M1 = { month = 4,6,9,11 }
M2 = { month = 1,3,5,7,8,10 }
M3 = { month = 12 }
M4 = { month = 2 }
day变量的有效等价类:
D1={日期:1≤日期≤27}
D2={日期:日期=28}
D3={日期:日期=29}
D4={日期:日期=30}
D5={日期:日期=31}
year变量的有效等价类:
Y1 = { year是闰年}
Y2 = { year不是闰年}
(2)分析程序规格说明,结合以上等价类划分的情况给出问题规定的可能采取的操作(即列出所有的动作桩)。
考虑各种有效的输入情况,程序中可能采取的操作有以下六种:
a1:不可能
a2:日期增1
a3:日期复位
a4:月份增1
a5:月份复位
a6:年增1
(3)根据步骤(1)和(2),画出判定表。
对判定表进行化简。
简化后的判定表,如表1-2所示。
(4)对判定表进行化简。
简化后的判定表,如表1-3所示。
表1.3(续)
(5)设计测试用例
为判定表中的每一列设计一个测试用例,见表1-4。
表 1.4 NextDate测试用例。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、使用等价类划分法为NextDate函数设计测试用例:
NextDate函数包含三个输入变量month、day和year(要求month、day和year 均为整数值,并且满足:1≤month≤12; 1≤day≤31;1912≤year≤2050),函数的输出为输入日期后一天的日期。
(1)列出输入域等价类表(包括有效和无效等价类)。
(2)根据(1)中的等价类,设计能覆盖所有等价类的测试用例,要求包括输入数据和预期输出,并指出各个测试用例所覆盖的等价类编号。
2、某城市电话号码由三部分组成,分别是:
地区码——空白或者三位数字;
前缀——非‘0’或‘1’开头的三位数字;
后缀——4位数字。
假定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。
(1)列出输入域等价类表(包括有效和无效等价类)。
(2)根据(1)中的等价类表,设计能覆盖所有等价类的测试用例,要求包括输入数据和预期输出,并指出各个测试用例覆盖的等价类编号。
3、使用基本路径测试方法测试以下程序段:
V oid sort(int irecordnum,int itype)
1{
2Int x = 0;
3Int y = 0;
4While( irecordnum -- >0 )
5{
6If( itype == 0)
7Break;
8Else
9If(itype == 1)
10x = x+10;
11Else
12y = y+20;
13}
14}
说明:写在程序段某些行开头数字(1~14)是对每条语句的编号。
(1)画出程序的控制流程图(用题中给出的语句编号表示)。
(2)计算上述程序段的环形复杂度。
(3)导出基本路径集,列出程序的独立路径(用题中给出的语句编号表示)。
请根据(3)中的独立路径,设计测试用例的输入数据和预期输出。
4、使用基本路径测试方法测试以下程序段:
Int IsGood( int grade )
{
① If (grade <= 100)
{
② If( grade >= 80 )
{
③ If(year >= 90 )
④ Result = 2; //优秀
Else
⑤ Result = 1; //良好
}
Else if(grade >= 0)
⑥ Result = 0; //合格
Else
⑦ Result = -1; //分数为负数
}
Else
⑦ Result = -1; //分数大于100
⑧ Return Result;
}
说明:写在程序段某些行开头数字(①~⑧)是对应语句的编号。
(4)画出程序的控制流程图(用题中给出的语句编号表示)。
(5)计算上述程序段的环形复杂度。
(6)导出基本路径集,列出程序的独立路径(用题中给出的语句编号表示)。
(7)假设输入的取值范围是 0 <= grade <= 100,请根据(3)中的独立路径,设计测试用例的输入数据和预期输出。