第5次实验等价类划分测试
黑盒测试法——等价类划分法

⿊盒测试法——等价类划分法实验⽬的:1.掌握等价类划分的⽅法1. 掌握按等价类⽅法设计测试⽤例实验内容:1、请⽤等价类划分法为三⾓形问题划分等价类,并设计相应的测试⽤例,测试下⾯三⾓形问题程序,找出缺陷并改正,给出缺陷报告。
2、三⾓形问题:输⼊3个整数a 、b 、c ,分别作为三⾓形的3条边,通过程序判断由3条边构成的三⾓形的类型为等边三⾓形、等腰三⾓形、⼀般三⾓形或者3条边不构成三⾓形。
3、⽅案设计输⼊三条边a 、b 、c 必须满⾜以下条件:条件1: 1≤a≤100条件2: 1≤b≤100条件3: 1≤c≤100条件4: a <b +c条件5: b <a +c条件6: c <a +b如果输⼊值a 、b 、c 满⾜条件1、2、3,则输出下列四种情况之⼀:(1)如果不同时满⾜条件4、5、6,则程序输出“不构成三⾓形”。
(2)如果3条边相等,则程序输出为“等边三⾓形”。
(3)如果恰好有2条边相等,则程序输出为“等腰三⾓形”。
(4)如果3条边都不相等,则程序输出为“⼀般三⾓形”。
划分等价类输⼊条件输⼊三个整数 有效等价类 ⽆效等价类1、 整数2、 3个整数3、 ⾮0整数13、⼀边为⾮整数14、两边为⾮整数15、三遍为⾮整数16、数字个数⼩于317、数字个数⼤于318、⼀边为019、两边为020、三遍为021、⼀边⼩022、两边⼩于0 3、⾮0整数4、正数22、两边⼩于023、三边⼩于024、⼀边⼤于10025、两边⼤于100、三边⼤于100输出条件、 a+c>b、 b+c>a、b+c<=a、c+a<=b 、 a=b且满⾜5、 b=c且满⾜7、c=a且满⾜611、a=b=c12、不满⾜,6,7中的⼀个等价类划分测试⽤例等价类划分测试⽤例测试⽤例编号等价类条件测试⽤例预期结果a b c d11,2,3,4,5,6,7234 普通三⾓形21,2,3,4,5,6,7,8223 等腰三⾓形31,2,3,4,5,6,7,9232 等腰三⾓形41,2,3,4,5,6,7,10322 等腰三⾓形51,2,3,4,5,6,7,11222 等边三⾓形61,2,3,4,12123 不构成三⾓形71,2,3,4,5,6,7,13 2.134 不构成三⾓形(未测试) 81,2,3,4,5,6,8,14 2.1 2.13 不构成三⾓形(未测试) 91,2,3,4,5,6,9,15 2.1 2.1 2.1 不构成三⾓形(未测试) 101,3,4,,1623null 不构成三⾓形(未测试) 111,2,3,172343不构成三⾓形(未测试) 121,2,18023 抛出异常131,2,19002 抛出异常141,2,20000 抛出异常151,2,3,21-122 抛出异常161,2,3,22-1-22 抛出异常171,2,3,23-2-2-2 抛出异常181,2,3,4,241119999 抛出异常191,2,3,4,2511111199 抛出异常201,2,3,4,26111111111 抛出异常211,2,3,4,27235 不构成三⾓形221,2,3,4,28523 不构成三⾓形231,2,3,4,29253 不构成三⾓形。
黑盒测试《等价类划分》-有这篇就够了

⿊盒测试《等价类划分》-有这篇就够了⼤家好,我是吉提。
在疫情消停不下来的2020年,既然不好跳槽,不好涨薪,也不好发挥创造⼒,那么就沉下⼼来,跟我⼀起,巩固软件测试基础知识。
积攒⼒量,蓄势待发。
本⽂将会详细描述“等价类划分",它是⿊盒测试最基本的⽤例设计⽅法。
⽬录:1. 定义(What)2. 为什么使⽤该⽅法?(Why)3. 如何划分等价类?(How)4. 设计测试⽤例5. 使⽤场景6. 根据测试⽤例的完整性划分7. 等价类划分注意事项8. 等价类划分的优缺点9. 实战演练1. 定义(What)等价类划分法是⼀种典型的,并且是最基础的⿊盒测试⽤例设计⽅法。
采⽤等价类划分法时,完全不⽤考虑程序内部结构,设计测试⽤例的唯⼀依据是软件需求规格说明书。
所谓等价类,是输⼊条件的⼀个⼦集合,该输⼊集合中的数据对于揭⽰程序中的错误是等价的。
从每⼀个⼦集中选取少数具有代表性的数据,从⽽⽣成测试⽤例。
等价类⼜分为有效等价类和⽆效等价类。
有效等价类代表对程序有效的输⼊,⽽⽆效等价类则是其他任何可能的输⼊(即不正确的输⼊值)。
有效等价类和⽆效等价类都是使⽤等价类划分法设计⽤例时所必须的,因为被测程序若是正确的,就应该既能接受有效的输⼊,也能接受⽆效输⼊的考验。
2. 为什么使⽤该⽅法?(Why)理想的测试,是从所有可能的输⼊中找出某个⼩的⼦集,并且是可能发现错误最多的⼦集。
即:使⽤最少的测试数据,达到最好的测试质量(最⾼性价⽐)。
这个⼦集如何确定?可以借助测试⽤例的两个特性:测试⽤例数量达到最少;某个测试⽤例要能覆盖⼤部分其他测试⽤例。
第⼆个特性就暗⽰我们,应该尽量将程序输⼊范围进⾏划分,将其划分为有限数量的等价类,这样就可以合理地假设测试每个等价类的代表性数据等同于测试该类的其他任何数据。
这两种特性形成了称为等价类划分的⿊盒测试⽅法。
因此,等价类划分是⿊盒测试最基本的⽅法。
3. 如何划分等价类?(How)在给定了输⼊或外部条件之后,等价类的划分原则如下:如果输⼊条件规定了⼀个取值范围(例如,“数量可以是1到999”),那么就应确定出⼀个有效等价类(1<数量<999),以及两个⽆效等价类(数量<1,数量>999)。
等价类划分法测试用例

等价类划分法测试用例等价类划分法是一种常用的测试用例设计方法,它将输入数据分成若干等价类,每个等价类中的数据在被测试程序中的处理是一样的。
通过设计测试用例覆盖不同的等价类,可以最大程度地覆盖被测程序的各种情况,提高测试效率。
在设计测试用例时,通常会考虑以下几个方面:1.有效等价类:每个有效等价类包含被测试程序能够接受的有效输入数据。
例如,对于一个需要输入年龄的程序,可以将年龄从0到150划分为一个有效等价类,因为这个范围内的年龄都是可接受的有效输入。
2.无效等价类:每个无效等价类包含被测试程序不能接受的输入数据。
例如,对于一个需要输入性别的程序,将性别划分为男和女两个有效等价类,其他任何值都可以认为是一个无效等价类。
3.边界等价类:边界等价类是指等价类的边界情况,通常会包含边界值以及边界值的前后一个值。
例如,对于一个需要输入年龄的程序,边界等价类可以是(-1, 0, 1),(149, 150, 151),这样可以覆盖到边界情况。
下面我将以一个简单的登录系统为例,来详细介绍等价类划分法的测试用例设计。
假设登录系统需要输入用户名和密码,验证登录是否成功。
1.有效等价类:-用户名和密码都是有效的:例如,用户名为"admin",密码为"123456"。
-用户名是有效的,但密码是无效的:例如,用户名为"admin",密码为"abcde"。
-用户名是无效的,但密码是有效的:例如,用户名为"guest",密码为"123456"。
2.无效等价类:-用户名和密码都是无效的:例如,用户名为"abcde",密码为"abcde"。
-用户名是无效的,密码是有效的:例如,用户名为"abcde",密码为"123456"。
-用户名是有效的,密码是无效的:例如,用户名为"admin",密码为"abcde"。
等价类划分实验指导书

等价类划分实验指导书1.实验目的掌握等价类划分的测试用例设计方法。
2.实验环境硬件:PC机操作系统:Windows测试工具:TestPlatform3.实验内容1.实验一:登录功能等价类划分在各种输入条件下,测试程序的登录对话框功能。
用户名和密码的规则如下:1)用户名长度为6至10位(含6位和10位)2)用户名由字符(a-z、A-Z)和数字(0-9)组成3)不能为空、空格和特殊字符4)密码规则同用户名规则2.实验二:三角形程序等价类划分一个程序读入3个整数,把这三个数值看作一个三角形的3条边的长度值。
这个程序要打印出信息,说明这个三角形是不等边的、是等腰的、还是等边的。
针对该程序使用等价类划分法设计测试用例。
4.实验步骤1.使用自己的帐号密码登陆TestPlatform,见下图:2.选中实验对应的项目目录,在项目管理中新增项目,项目标识和项目名称均为“实验名-学生姓名”。
安全设定选择项目仅对特定的部门及人员公开,并在“请选择公开的人员”中选择老师对其公开。
见下图:3.选中新建项目下的默认版本,在需求管理中新增需求(如实验一新增的需求为登录)。
见下图:4.在测试设计中切换“测试设计源数据”为“需求”,则可以看到新增的需求项。
见下图:5.选中新增的需求项,选择域测试法设计用例。
见下图:6.在参数管理中增加输入,选中输入增加等价类,选中等价类增加样点(常用值或者边界值)。
见下图:7.勾选需要使用的输入,点击下一步。
见下图:8.分析结果中将不需要的测试用例前的勾去除,点击完成。
见下图:9.在测试用例列表中可以看到刚才设计好的测试用例。
见下图:5.实验要求1.等价类划分要完整,不能只考虑一个有效等价类和一个无效等价类。
2.选取样点时多从用户实际使用角度考虑常用值和边界值。
等价类划分法测试用例的设计与实现

[1] 范明红,浦云明,汪志华 . 等价类测试与划分研究 [J]. 计算机技术与发展 .2009(07).
[2] 浦云明,陈黎震 . 基于划分的等价类测试 [J]. 计算机工 程与设计 .2009(19).
[3] 李刚,姚红 . 软件测试用例设计的方法与实现 [J]. 大众 科技 .2012(01).
b、设计有效等价类需要的测试用例。为覆盖①、⑤、⑧三 个有效等价类,可以设计一个共用的测试用例 ;
c、为每一个无效等价类至少设计一个测试用例。 实例 4 保险公司计算保费费率的程序 某保险公司的人寿保险的保费计算方式为 :投保额 × 保险 费率其中,保险费率依点数不同而有别,10 点及 10 点以上保险 费率为 0.6%,10 点以下保险费率为 0.1% ;而点数又是由投保人 的年龄、性别、婚姻状况和抚养人数来决定。 a、分析程序规格说明中给出和隐含的对输入条件的要求, 列出等价类表(包括有效等价类和无效等价类)。 ■年龄 :一位或两位非零整数,值的有效范围为 1~99 ■性别 :一位英文字符,只能取值‘M’或’F’ ■婚姻 :字符,只能取值‘已婚’或‘未婚’ ■抚养人数 :空白或一位非零整数(1~9) ■点数 :一位或两位非零整数,值的范围为 1~99 b、根据(1)中的等价类表,设计能覆盖所有等价类的测试 用例。 4 总结 本文讨论了如何使用等价类划分法来设计测试用例。
(1)按照区间划分在输入条件规定了取值范围或值的个数的 情况下,可以确定一个有效等价类和两个无效等价类。
例 :程序输入条件为小于 100 大于 10 的整数 x,则有效等价 类为 10 < x < 100,两个无效等价类为 x ≤ 10 和 x ≥ 100。
(2)按照数值划分在规定了一组输入数据(假设包括 n 个输 入值),并且程序要对每一个输入值分别进行处理的情况下,可 确定 n 个有效等价类(每个值确定一个有效等价类)和一个无效 等价类(所有不允许的输入值的集合)。
等价类划分法来测试

一、实验目的用等价类划分法、边界值分析法等来测试分析实例。
二、实验内容(一)、将ppt上所讲的三角形例子用程序语言实现,并按照等价类法设计测试用例,并对你的程序进行测试,分析测试结果(按步骤写出完整的过程)。
(二)、实现一个小的计算器程序,只需要完成加、减、乘、除运算,用等价类法设计测试用例,进行测试并分析。
然后假设运算数值的范围在0到100之间,使用边界值法设计测试用例,并测试(按步骤写出完整的过程)。
三、实验环境Windows XP系统、Microsoft Visual Studio 2008四、实验步骤1、三角形:程序:using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1{class triangle{public bool tiaojian(double a, double b, double c){if ((a >= 1 & a <= 100) & (b >= 1 & b <= 100) & (c >= 1 & c <= 100)){Console.WriteLine("边的取值没有超出允许范围");if (a + b > c & b + c > a & a + c > b){Console.WriteLine("三边满足组成三角形");return true;}else{Console.WriteLine("非三角形");return false;}}else{if (a < 1 | a > 100)Console.WriteLine("a边的取值超出允许范围");}else if (b < 1 | b > 100){Console.WriteLine("b边的取值超出允许范围");}else if (c < 1 | c > 100){Console.WriteLine("c边的取值超出允许范围");}return false;}}static void Main(string[] args){Program gh = new Program();double a = 0, b = 0, c = 0;Console.WriteLine("请输入三角形的边长a");a = Convert.ToDouble(Console.ReadLine());Console.WriteLine("请输入三角形的边长b");b = Convert.ToDouble(Console.ReadLine());Console.WriteLine("请输入三角形的边长c");c = Convert.ToDouble(Console.ReadLine());if (gh.tiaojian(a, b, c)){if (a == b & a == c & b == c){Console.WriteLine("等边三角形");}else if ((a == b & b != c) | (a == c & c != a) | (b == c & a != b)){if (((a * a) == (b * b + c * c)) | ((b * b) == (a * a + c * c)) | ((c * c) == (b * b + a * a))){Console.WriteLine("等腰直角三角形");}else{Console.WriteLine("等腰三角形");}}else if (((a * a) == (b * b + c * c)) | ((b * b) == (a * a + c * c)) | ((c * c) == (b * b + a * a)))Console.WriteLine("直角三角形"); }else{Console.WriteLine("一般三角形"); }}Console.ReadLine();}}}等价类划分为以下几类:1、输入数据小于0或大于1002、输入数据不符合两边之和大于第三边3、输入数据符合三角形2、计算器界面:程序:public partial class FrmCalculator : Form{public FrmCalculator(){InitializeComponent();}private bool isDouble = false;//是否有小数private bool isSign = false;//运算符是否输入private bool isEnableBackSpace = false;//退格是否可用private bool isResult = false;//得到结果状态private string sencond;//第二个数private string first;//第一个数private string sign;//运算符private bool isCalcu = false;//是否使用运算符进行计算private bool isMinus = false;//是否为负数private bool isException = false;//是否抛异常private bool Switch = false;private Thread timeThr;//时间线程private bool thrIsStart = false;//线程开关//事件0-9private void button1_Click(object sender, EventArgs e) {if (Switch){if (isException){return;}Control c = (Control)sender;//如果当前操作数未点小数点则其最后一位必定为.if (!isDouble){//判断当前显示框内是否为初始值0.//截取除.外的字符串赋给txtDisthis.txtDis.Text = this.txtDis.Text.Substring(0, this.txtDis.Text.Length - 1);//如果txtDis为0 则为初始值将其清空if (this.txtDis.Text == "0")this.txtDis.Text = "";if (!isSign)//当前未输入运算符{//将但前字符串与原有字符串累加最后加.this.txtDis.Text += c.Text + ".";}else//已输入运算符{//将当前输入字符串后加. 直接赋值给txtDisthis.txtDis.Text = c.Text + ".";//将运算符标志位置成falsethis.isSign = false;//现在可以计算结果了this.isCalcu = true;}}else//当前操作数有小数点{if (!isSign)//当前未输入运算符{//将当前字符串与原字符串累加this.txtDis.Text += c.Text;}else//已输入运算符{//将当前字符串与原字符串累加this.txtDis.Text = "0." + c.Text;//将运算符标志位置成falsethis.isSign = false;//现在可以计算结果了this.isCalcu = true;}}this.isEnableBackSpace = true;}else{this.button24.Focus();}}//Cprivate void button11_Click(object sender, EventArgs e) {if (Switch){//调用清空方法Clear();}else{this.button24.Focus();}}//.private void button15_Click(object sender, EventArgs e) {if (Switch){if (isException){return;}//判断当前是否为小数if (!isDouble)isDouble = true;//打开退格开关this.isEnableBackSpace = true;}else{this.button24.Focus();}}//BackSpaceprivate void button10_Click(object sender, EventArgs e) {if (Switch){if (isException){return;}//退格开关打开if (this.isEnableBackSpace){//如果当前为整数if (!isDouble){//包括后面一位.和要减去的数字固减2 若等于"" 则为空值为0.if (this.txtDis.Text.Substring(0, this.txtDis.Text.Length - 2) == "") {this.txtDis.Text = "0.";}else{this.txtDis.Text = this.txtDis.Text.Substring(0,this.txtDis.Text.Length - 2) + ".";}}else{//为小数减一位this.txtDis.Text = this.txtDis.Text.Substring(0,this.txtDis.Text.Length - 1);//若不包含小数点if (!this.txtDis.Text.Contains(".")){//减到已成为整数后加.this.txtDis.Text += ".";//小数开关关闭isDouble = false;}}}}else{this.button24.Focus();}}private void btnChu_Click(object sender, EventArgs e){if (Switch){if (isException){return;}//拆箱Control c = (Control)sender;if (isCalcu)//如果是当前已经点击过运算符后又点击数字会打开运算符计算开关{//如果你再点运算符 isCalcu为true 表示可以计算isCalcu = false;//将结果标志位置成false 否则当前txtDis值无法赋值到sencondisResult = false;//调用方法Calcu();}//字符串处理//为整数甩掉最后一位.赋值小数则原值赋值if (!this.isDouble)this.first = this.txtDis.Text.Substring(0, this.txtDis.Text.Length - 1);elsethis.first = this.txtDis.Text;//运算符赋值sign = c.Text;//运算符标志位置成truethis.isSign = true;//小数点标志位支撑falsethis.isDouble = false;//退格开关关闭this.isEnableBackSpace = false;//结果开关关闭this.isResult = false;}else{this.button24.Focus();}}private void button14_Click(object sender, EventArgs e){if (Switch){if (isException){return;}//调用方法Calcu();//结果开关打开固定sencond值this.isResult = true;//相当于点了运算符计算结果isCalcu = false;}else{this.button24.Focus();}}private void Calcu(){//没有计算结果if (!this.isResult){//如果为整数去掉最后一位.if (!this.isDouble){this.sencond = this.txtDis.Text.Substring(0, this.txtDis.Text.Length - 1); }else{this.sencond = this.txtDis.Text;}}try{switch (this.sign){case"+":this.txtDis.Text = ((double.Parse(this.first)) +(double.Parse(this.sencond))).ToString();break;case"-":this.txtDis.Text = ((double.Parse(this.first)) -(double.Parse(this.sencond))).ToString();break;case"*":this.txtDis.Text = ((double.Parse(this.first)) *(double.Parse(this.sencond))).ToString();break;case"/":if (int.Parse(this.sencond) == 0){throw new MyException("除数不能为0.");}this.txtDis.Text = ((double.Parse(this.first)) /(double.Parse(this.sencond))).ToString();break;default:break;}}catch (MyException ex){this.txtDis.Text = ex.Message;isException = true;}catch (Exception ex){this.txtDis.Text = ex.Message;isException = true;}//结果不包含小数点则为整数if (!this.txtDis.Text.Contains(".")){//后加.this.txtDis.Text += ".";this.first = this.txtDis.Text.Substring(0, this.txtDis.Text.Length - 1);this.isDouble = false;}else{this.first = this.txtDis.Text;this.isDouble = true;}this.isSign = true;this.isEnableBackSpace = false;}public void Clear(){this.txtDis.Text = "0.";this.isSign = false;this.isResult = false;this.isEnableBackSpace = false;this.isDouble = false;this.isCalcu = false;this.isMinus = false;this.first = null;this.sencond = null;this.sign = null;isException = false;}//CEprivate void button12_Click(object sender, EventArgs e) {if (Switch){if (!isResult){if (this.first != null){if (!this.first.Contains(".")){this.txtDis.Text = this.first + "."; }if (this.first.Length != 0){this.txtDis.Text = this.first;}else{this.txtDis.Text = "0.";}this.isCalcu = false;}else{Clear();}}else{Clear();}}else{this.button24.Focus();}}private void button17_Click(object sender, EventArgs e){if (Switch){if (isException){return;}if (!isMinus){if (this.txtDis.Text.Length == 2 && this.txtDis.Text.Substring(0,this.txtDis.Text.Length - 1) == "0"){if (isDouble){this.txtDis.Text = "-" + this.txtDis.Text;isMinus = true;}}else{this.txtDis.Text = "-" + this.txtDis.Text;isMinus = true;}}else{this.txtDis.Text = this.txtDis.Text.Substring(1, this.txtDis.Text.Length - 1);isMinus = false;}}else{this.button24.Focus();}}//开关private void button24_Click(object sender, EventArgs e){if (this.button24.Text == "ON"){thrIsStart = false;this.button24.Text = "OFF";Clear();Switch = true;}else{this.button24.Text = "ON";Switch = false;ThrStart();}}private void ThrStart(){timeThr = new Thread(new ThreadStart(DisTime));thrIsStart = true;timeThr.Start();}private void DisTime(){while (thrIsStart){this.txtDis.Text = DateTime.Now.ToString();Thread.Sleep(1000);}}private void Form1_Load(object sender, EventArgs e){ThrStart();Control.CheckForIllegalCrossThreadCalls = false;}private void Form1_FormClosing(object sender, FormClosingEventArgs e) {thrIsStart = false;}private void FrmCalculator_KeyPress(object sender, KeyPressEventArgs e) {if (Switch){// Control c = (Control)sender;if (e.KeyChar >= '0' && e.KeyChar <= '9'){if (isException){return;}//如果当前操作数未点小数点则其最后一位必定为.if (!isDouble){//判断当前显示框内是否为初始值0.//截取除.外的字符串赋给txtDisthis.txtDis.Text = this.txtDis.Text.Substring(0, this.txtDis.Text.Length - 1);//如果txtDis为0 则为初始值将其清空if (this.txtDis.Text == "0")this.txtDis.Text = "";if (!isSign)//当前未输入运算符{//将但前字符串与原有字符串累加最后加.this.txtDis.Text += e.KeyChar.ToString() + "."; }else//已输入运算符{//将当前输入字符串后加. 直接赋值给txtDisthis.txtDis.Text = e.KeyChar.ToString() + ".";//将运算符标志位置成falsethis.isSign = false;//现在可以计算结果了this.isCalcu = true;}}else//当前操作数有小数点{if (!isSign)//当前未输入运算符{//将当前字符串与原字符串累加this.txtDis.Text += e.KeyChar.ToString();}else//已输入运算符{//将当前字符串与原字符串累加this.txtDis.Text = "0." + e.KeyChar.ToString();//将运算符标志位置成falsethis.isSign = false;//现在可以计算结果了this.isCalcu = true;}}this.isEnableBackSpace = true;}else if (e.KeyChar == '.'){this.button15.PerformClick();}else if (e.KeyChar == '+' || e.KeyChar == '-' || e.KeyChar == '*' || e.KeyChar == '/'){if (isException){return;}if (isCalcu)//如果是当前已经点击过运算符后又点击数字会打开运算符计算开关 {//如果你再点运算符 isCalcu为true 表示可以计算isCalcu = false;//将结果标志位置成false 否则当前txtDis值无法赋值到sencondisResult = false;//调用方法Calcu();}//字符串处理//为整数甩掉最后一位.赋值小数则原值赋值if (!this.isDouble)this.first = this.txtDis.Text.Substring(0, this.txtDis.Text.Length - 1);elsethis.first = this.txtDis.Text;//运算符赋值sign = e.KeyChar.ToString();//运算符标志位置成truethis.isSign = true;//小数点标志位支撑falsethis.isDouble = false;//退格开关关闭this.isEnableBackSpace = false;//结果开关关闭this.isResult = false;}else if (e.KeyChar == 13){this.button14.PerformClick();}else if (e.KeyChar == 8){this.button11.PerformClick();}this.button14.Focus();}else{this.button24.Focus();}if (e.KeyChar == 27){Application.Exit();}1. 等价类等价类1: Integer(整数)等价类2: Decimal fraction(小数)等价类3: Negative(负数)等价类4: Invalid input(无效输入)结果:整型,加:,减:,乘:,除。
等价划分类实验报告

一、实验目的1. 理解等价划分类的概念和原理。
2. 掌握等价划分类在黑盒测试中的应用。
3. 学会使用等价划分类方法设计测试用例。
二、实验内容本次实验以一个简单的学生信息管理系统为例,通过等价划分类方法设计测试用例,并验证系统功能。
三、实验步骤1. 分析系统需求学生信息管理系统主要功能包括:学生信息录入、查询、修改和删除。
其中,学生信息包括姓名、学号、性别、年龄、班级等。
2. 划分等价类(1)有效等价类:姓名:姓名为空、姓名过长、姓名符合规范。
学号:学号为空、学号过长、学号符合规范。
性别:性别为空、性别输入不正确、性别输入正确(男、女)。
年龄:年龄为空、年龄输入不正确、年龄输入正确(整数)。
班级:班级为空、班级过长、班级符合规范。
(2)无效等价类:姓名:姓名为数字、姓名包含特殊字符。
学号:学号包含字母、学号包含特殊字符。
性别:性别为数字、性别包含特殊字符。
年龄:年龄为负数、年龄为小数。
班级:班级包含数字、班级包含特殊字符。
3. 设计测试用例根据等价划分类方法,设计以下测试用例:(1)有效等价类测试用例:用例1:姓名为“张三”,学号为“******”,性别为“男”,年龄为“20”,班级为“A班”。
用例2:姓名为“李四”,学号为“******”,性别为“女”,年龄为“21”,班级为“B班”。
(2)无效等价类测试用例:用例3:姓名为“123”,学号为“abcdef”,性别为“123”,年龄为“-1”,班级为“ABC”。
4. 执行测试按照设计的测试用例,对系统进行测试。
测试过程中,重点关注以下方面:(1)功能测试:验证系统各项功能是否正常。
(2)界面测试:检查界面布局、样式等是否符合设计要求。
(3)性能测试:测试系统响应速度、资源占用等性能指标。
5. 分析测试结果(1)用例1、用例2测试通过,说明系统对学生信息录入、查询、修改和删除功能的支持正常。
(2)用例3测试失败,说明系统在处理无效输入时存在缺陷。
四、实验总结通过本次实验,我们了解了等价划分类的概念和原理,掌握了在黑盒测试中应用等价划分类方法设计测试用例的技巧。
等价类划分例题

;T0l)D.R$@ e7b9j0S s N T8l S1i-O2Z0 说明:本系统的单元测试主要以单个单元内部的消息传递和功能实现为主。
测试方法为等价类划分法。
51Testing软件测试网 t p D a;V { g&K"|1.新用户注册页面:{ f Y5d0\ _ P;E |/@ a"\0数据项取值:51Testing软件测试网)a%t+c.x x,w+~USER NAME:长度为3-19 ;以字母开头;非空。
(没用)51Testing软件测试网/y&v u |4Y)Q LE H-{ 姓名:非空。
51Testing软件测试网 M%T-W)h7l.z.\%{ ~密码:非空。
U h)d ` d C*I:} n0确认密码:值和密码值相同。
H+Y K Q"{ f0s p0出生年份:年——四位数字;月——1-12;日——1-31。
51Testing软件测试网0O [ R-`%` }#Z9L4D u+k0B其余项:不要求。
51Testing软件测试网 \ R%[+rq b%s"C G等价类的划分:等价类表。
%u D n9F.C3V s0数据项有效等价类无效等价类;U9s W K W0USER NAME (1)长3-19 ;(2)以字母开头; (1)长度<3;(2)非字母开头(3)长度>19 51Testing软件测试网&r2s.h9r B)r G3k)a.n姓名(3)非空(4)为空 51Testing软件测试网-W.W A ]+F } }!| P密码(4)非空(5)为空 51Testing软件测试网,\ G V f&m K2Z确认密码(5)值和密码值相同(6)值和密码值不同 51Testing软件测试网;_ ^ F+V"_ x g出生年份(6)月—1-12;(7)日—1-31(没有列出年份)(7)月日中有字母(分别列出;月日中有非数字符号)(8)月数字为负(零)(9)月数字大于12(10)年数中有字母(有非数字符号,年数在合理范围)(11)日数字为负(零)(12)日数字大于31(判断大月小月)*B0]I W5t!L0其余项(8)都填(9)都不填 51Testing软件测试网? N K(J#@0R z~*M @ U*q.P s'}6n h"l-_0 51Testing软件测试网 X;X#h;s4j \!w n51Testing软件测试网9Lm A o u h)U F51Testing软件测试网)r%U Rm4f D S/q51Testing软件测试网 SA!O y*s Q o~;h X H,A5L(v0测试用例及结果结果陈述S _\.j2R p0 USER NAME 姓名密码确认密码出生年份其余项所属等价类结果3s$I k P-k7E C k E j0有效等价类 aaaaaa aaaaaa aaaaaa aaaaaa 1977.8.22 空(1)—(7),(9) Y 51Testing软件测试网4l7q z:t'U-Q*gTttttt Tttttt tttttt Tttttt 1977.8.22 非空(1)—(8) Y)L/^9U$Z x c/T0无效等价类 t tttt tttt tttt 1972.8.22 (1) Y%^(f Q T e T:S0 qqqqqqqqqqdfasdfasdfasdfadfasdfad tttt tttt Tttt 1977.8.22 (3) NT6i { w I&P U0 111111 tttt tttt tttt 1977.8.22 (2) 提示不符)Bb I _ S m(y m0 zzzz 空 zzzz zzzz 1977.8.23 (4) Y&C;| w)R q.Y ? @$A b0 zzzz zzzz 空 zzzz 1977.8.22 (5) Y 51Testing软件测试网v x'N3@ | ]&E Wzzzz zzzz zzzz tttt 1977.8.22 (6) YZ8z X M%z0S;\0 ssss ssss ssss ssss 19a7.8.22 (10) Y 51Testing软件测试网} s ?1X { p6Dssss ssss ssss ssss 1977.8a.22 (7) N*Q m6J W ?:C(y v n j0G0 ssss ssss ssss ssss 1977.8.2a (7) N 51Testing软件测试网 X-P:w Q/S*S c+?ssss ssss ssss ssss 1977.-1.22 (8) YO o n o W0 ssss ssss ssss ssss 1977.81.22 (9) Y!L6x3e&R D _-NB @)v0 ssss ssss ssss ssss 1977.8.-2 tt (11) Y 51Testing软件测试网 a b l F \ J$c ssss ssss ssss ssss 1977.8.55 (12) Y"{ | a tm T y2x0 E A,T Vr02.忘记密码部分0N-u c#G sw E [V6j0数据项取值51Testing软件测试网 b3t U0y q0v k'r z登录用户名:已存在的用户名{3N }0u t%W7k o)?*^0用户的回答:和注册值相同d$F @ J)q8N0密码:>=551Testing软件测试网$\ Ru k.] h!q o ?'T \确认密码:值和密码值相同51Testing软件测试网8| Y K7F T;i1l2p P9| V等价类的划分51Testing软件测试网6b c ` B!G x9l数据项有效等价类无效等价类 51Testing软件测试网A R!o R1k N h登录用户名 (1)已存在 (1)不存在(是否正确)? b4G*B l2c0用户的回答(2)和注册值相同(2)和注册值不同 51Testing软件测试网 o:p z:w \ T.n U 密码(3)>=5 (3)<58q P'k W)D0A\ T z0密码确认 (4)值和密码值相同 (4)和密码值不同 u d$X r~-U VR V$j6`051Testing软件测试网-|-t:l'P G U r1K)i测试用例及结果结果陈述51Testing软件测试网L.| Y"e Q F1} Q V&c lw登录用户名用户的回答密码密码确认所属等价类结果r1R-u6i#A2a r0有效等价类 ttttt aaaaa aaaaa (1)-(4) Ys3L!P!A+[&~;N3b0无效等价类 Tttttta (1) Y 51Testing软件测试网 \;^8] t s M ttttt ccc (2) Y 51Testing软件测试网,U S z Z r kttttt aa aa (3) Y 51Testing软件测试网8K Q!I e9F c6n u+httttt aaaaa aaaaa (4) YZ1m `5hc/d0i W2r/J H x z03.登陆页面51Testing软件测试网 U A b1D+u数据项取值|:^3U @x+@;| x ]0用户名:已存在值)F d.g q.F0密码:和注册值相同51Testing软件测试网0K t1b \ re等价类的划分51Testing软件测试网5~ U8J D$k p L I;k)r数据项有效等价类无效等价类 51Testing软件测试网 a1n/p7o a f用户名 (1)已存在 (1)不存在 51Testing软件测试网8V$X-K @ s*Q K密码(2)和注册值相同(2)和注册值不同 51Testing软件测试网1O TD#} | R,]3} qv ` o6D+` t0M Q0测试用例及结果结果陈述t } Y z D$\ ^ u6X _0 用户名密码所属等价类结果S Y1E F {6R ` @ J ^ F-m0有效等价类 ttttt aaaaa (1)-(2) Ya y%kb K8\:M1W0无效等价类 Tttttta aaaaa (1) Y3b h V2u;P O T r8b0 ttttt tttt (2) YS m M |&f,Q6z.I0H P"Z d(d ]04.信箱首页51Testing软件测试网3u!] td a B9C S ~ ~数据项取值K*Q ?$H&l0待创建的文件夹名:不存在的文件夹名51Testing软件测试网!V { q Mh T*K t)K待删除的文件夹名:已存在的文件夹名51Testing软件测试网8x-a ?8B W x I N等价类的划分e ~,D Z)F0数据项有效等价类无效等价类 51Testing软件测试网-z z/o+L"| m待创建的文件夹名 (1) 不存在的文件夹名 (1)已存在(2)空值 51Testing软件测试网 V B/`(L#E3O)] 待删除的文件夹名(2)已存在的文件夹名(3)不存在(4)空值(非文件夹)1} A | A-O$^ m a E M051Testing软件测试网 `0N a5R/p5S测试用例及结果!}9G-n%D Xm0 输入操作所属等价类结果Y Q B \-A V a0有效等价类 Aa 创建(1) Y 51Testing软件测试网 S ? v-P!E Baa 删除(2) Y 51Testing软件测试网 F _)S T9{ [8?#a无效等价类 Aaa(已存在)创建(1) ND4i i PY%l K u0 创建(2) Y (t r{ Z N \ B o D k y0 ttttt 删除(3) NN az @M9h0 删除(4) Yd%`-c H g0c%IK-{ @ U$@05.发邮件3T4l l s @6} p q b(P(o2A0数据项取值7B0U ]C ] Z0收件人:7d*D v N(x o#b0定时发送时间:年——四位数字;月——1-12;日——1-31;51Testing软件测试网 m0a P5A i H*r其余项:不要求51Testing软件测试网$xL2V T.Q i l U-] y操作:寄出,存原稿,存地址薄,加附件,取消F [(a w'F u1V0等价类的划分51Testing软件测试网.E"R3A1M1\数据项有效等价类无效等价类 51Testing软件测试网 J b;Q a7[收件人 (1) 非空寄出(3)非空存原稿(4)非空加入地址薄(5)非空加附件(6)取消为空寄出(9)为空存原稿(10)为空加入地址薄(11)为空加附件51Testing软件测试网+F }-`L a(输入字符不合法) 51Testing软件测试网 ^4Dy m X4j w定时发送时间(2)年——四位数字;月——1-12;日——1-31 (3)月日中有字母(4)月数字为负(5)月数字大于12(6)年数中有字母(7)日数字为负(8)日数字大于31 51Testing软件测试网7D-yb0Qm p其余项(7)都填(8)都不填 51Testing软件测试网'C l O7r u%c(对于有效等价类,所有操作都要列出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件测试实验报告
实验题目:黑盒测试技术之等价类划分测试
姓名:何晓晓
学号:1012210110
班级:10计本1
指导老师:蒋平
一、实验介绍
1.实验技术
等价类划分是一种典型的、常用的黑盒测试方法,这类方法是把所有可能的输入数据划分成若干个部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。
2.实验对象
完成一段程序,要求实现这样的功能。
输入三个整数a,b,c,分别作为三角形的三条边,取值范围为1-100,判断由三条边构成的三角形类型为等边三角形、等腰三角形、一般三角形以及不构成三角形。
判断结果打印输出。
#include<stdio.h>
void main(void)
{
int a,b,c,k;
printf("请输入三角形的三边长(0-100):");
scanf("%d %d %d",&a,&b,&c);
if((a>=1&&a<=100)&&(b>=1&&b<=100)&&(c>=1&&c<=100))
{
if((a+b>c)&&(a+c>b)&&(b+c>a))
{
if((a==b&&b!=c)||(a==c&&c!=b)||(b==c&&a!=b))
k=1;
if(a==b&&a==c)
k=2;
if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(c*c+b*b==a*a))
k=3;
switch(k)
{
case 1:printf("等腰三角形\n");
break;
case 2:printf("等边三角形\n");
break;
case 3:printf("直角三角形\n");
break;
default:printf("一般三角形\n");
break;
}
}
else
printf("不能构成三角形\n");
}
else
printf("警告:无效输入\n");
}
三、测试用例设计
等价类划分如下:
有效等价类编号无效等价类编号
三边满足1-100 1≤a≤100
1≤b≤100
1≤c≤100
1
一边<1 9
两边<110
三边<111
一边>100 12
两边>10013
三边>10014
两边之和大于第三边a+b>c 2 a+b≤c 15 b+c>a 3 b+c≤a 16 a+c>b 4 a+c≤b 17
等腰三角形a=b,a≠c 5 a=c,a≠b 6 b=c,a≠b 7
等边三角形a=b,b=c,c=a8
测试用例(要求每个等价类都至少被覆盖一次):
测试用例{a,b,c} 覆盖等价类号预期输出{0,10,20} 9 警告:无效输出
{0,0,10} 10 警告:无效输出
{10,30,15} 9 不能构成三角形
{10,20,25} 3 一般三角形
{20,20,30} 5 等腰三角形
{30,40,50} 2 直角三角形
{30,30,30} 8 等边三角形三、实验结果
输入输出
10,30,15 不能构成三角形
0,10,20 警告:无效输出
20,20,30 等腰三角形
30,30,30 等边三角形
四、心得与体会
通过本次实验我了解了等价类划分的方法以及等价类的测试方法。