第01章、使用等价类及边界值方法设计测试用例
- 格式:ppt
- 大小:1.86 MB
- 文档页数:84
软件测试中的边界值分析和等价类划分边界值分析和等价类划分是软件测试中常用的两种测试方法。
这两种方法可以帮助测试人员更有效地识别和设计测试用例,从而增加测试的覆盖率和准确性。
本文将介绍边界值分析和等价类划分的基本原则和应用场景,并结合具体案例说明其在软件测试中的重要性和实际应用。
边界值分析是一种测试用例设计技术,其基本原则是将输入和输出的数据范围分为不同的区域,并着重测试各个区域的边界条件。
在软件开发过程中,很多功能的正确性与否取决于输入的数据范围是否在设定的边界内。
因此,边界值分析是一种针对这种情况的有效测试方法。
举个例子来说,对于一个要求用户输入年龄的程序,我们可以将输入的年龄范围分为婴儿(0-1岁)、儿童(2-12岁)、青少年(13-18岁)、成年人(19-60岁)和老年人(61岁及以上)五个区域。
我们可以通过测试各个区域边界上的数值,如0岁、1岁、2岁、12岁、13岁、18岁、19岁、60岁、61岁等,来验证程序是否正确处理各个年龄段的输入。
等价类划分是一种将测试输入分为不同等价类的方法。
等价类划分的原则是将具有相同功能和行为的输入数据归为同一类,并设计测试用例来覆盖每个等价类。
这样做的好处是能够有效地减少测试用例数量,同时保证测试覆盖到了不同的情况。
以一个登录系统为例,假设要测试用户名和密码输入的功能。
我们可以将用户名的输入等价类划分为合法用户名和非法用户名两类,密码的输入等价类划分为合法密码和非法密码两类。
在设计测试用例时,我们只需要从每个等价类中选择一个典型的测试数据来进行测试,比如选择一个合法用户名和一个合法密码、一个非法用户名和一个合法密码等,就可以覆盖到各种情况。
边界值分析和等价类划分在实际软件测试中的应用非常广泛。
它们可以帮助测试人员更全面地测试软件的功能,减少遗漏测试点的风险,并提高测试效率。
特别是在系统具有复杂输入输出、有大量的输入数据范围的情况下,使用边界值分析和等价类划分可以事半功倍。
实验报告一、实验目的按照等价类法设计测试用例、使用边界值法设计测试用例二、实验内容(一)、将ppt上所讲的三角形例子用程序语言实现,并按照等价类法设计测试用例,并对你的程序进行测试,分析测试结果(按步骤写出完整的过程)。
(二)、实现一个小的计算器程序,只需要完成加、减、乘、除运算,用等价类法设计测试用例,进行测试并分析。
然后假设运算数值的范围在0到100之间,使用边界值法设计测试用例,并测试(按步骤写出完整的过程)。
三、实验环境Windows XP 、Microsoft Visual Studio 2008四、实验步骤(一)、三角形:在三角形问题中,有四种可能的输出:等边三角形、等腰三角形、一般三角形和非三角形。
利用这些信息能够确定下列输出(值域)等价类。
R1 = { <a,b,c>: 边为a,b,c的等边三角形 }R2 = { <a,b,c>: 边为a,b,c的等腰三角形 }R3 = { <a,b,c>: 边为a,b,c的一般三角形 }R4 = { <a,b,c>: 边为a,b,c不能组成三角形 }(1)标准等价类测试:1、三角形问题的4个标准等价类测试用例的分析过程:2、对应测试与结果:Test1:Test2:Test3:Test4:(2)健壮等价类测试:1、三角形问题的7个健壮等价类测试用例分析过程:测试用例 a b c 预期输出Test1 5 6 7 一般三角形Test2 -1 5 5 a值超出输入值定义域Test3 5 -1 5 b值超出输入值定义域Test4 5 5 -1 c值超出输入值定义域Test5 101 5 5 a值超出输入值定义域Test6 5 101 5 b值超出输入值定义域Test7 5 5 101 c值超出输入值定义域2、对应测试与结果:Test1:Test2:Test3:Test4:Test5:Test6:Test7:(二)、计算器:(1)标准等价类测试:1、计算器4个标准等价类测试用例的分析过程如下:测试用例加减乘除预期输出整型98+12 67-34 74*23 54/23 正常运算小数34.5+23.4 56.6-34.2 23.5*45.7 46.3/23.6 正常运算负数-23+-34 (-98)-(-23) -54*-34 -54/-23 正常运算无效输入e5+t6 g6-k4 i6*l9 Ff/se 非法操作无法输入2、对应测试与结果:整型:1.加(98+12)2.减(67-34)3.乘(74*23)4.除(54/23)小数5.加(34.5+23.4)6.减(56.6-34.2)7.乘(23.5*45.7)8.除(46.3/23.6)(其中算式写法错误导致正常运算错误)负数9.加((-23)+(-34))10.减((-98)-(-23))11.乘-54*-34(其中算式写法错误导致正常运算错误)12.除(其中算式写法错误导致正常运算错误)无效输入13.加(e5+t6):程序中无效数字无法正常输入,程序无法进行。
软件测试中的边界值分析与等价类划分在软件测试中,边界值分析和等价类划分是两种常用的测试方法。
它们能够帮助测试人员有效地减少测试用例数量,并提高测试效率。
本文将介绍软件测试中的边界值分析和等价类划分的概念、原则和实践方法,并结合几个具体的案例进行讲解。
一、边界值分析边界值分析是一种测试方法,通过选择接近或在输入数据边界上的测试用例,以检测系统在边界处是否能正常工作。
它主要基于以下原则:1. 边界处往往是出错的地方:在开发软件时,程序员可能会忽略或错误地处理接近边界的情况。
因此,边界处往往是出现错误的潜在区域。
2. 边界值通常会涉及不同的处理逻辑:在边界处,系统可能需要进行不同的判断和处理。
因此,通过测试边界值,可以验证系统是否正确地处理了这些特殊情况。
3. 边界值测试用例数量相对较少:相比于测试所有可能的值,测试边界值的测试用例数量相对较少。
因此,通过边界值分析可以有效地减少测试工作量,提高测试效率。
在进行边界值分析时,可以根据输入的数据类型和范围选择相应的边界值进行测试。
例如,对于一个接受整数输入的函数,如果要测试的范围是1到100,那么可以选择以下边界值进行测试:1、2、99、100。
二、等价类划分等价类划分是一种测试方法,通过将输入数据划分为等价类,选择代表性的测试用例进行测试。
它主要基于以下原则:1. 数据在同一等价类中具有相同的处理逻辑:在软件系统中,对于同一等价类的数据,系统应该有相同的处理逻辑。
因此,只需要选择一个代表性的测试用例进行测试。
2. 减少测试用例数量:等价类划分可以将数据划分为多个等价类,从而减少测试用例的数量。
通过选择代表性的测试用例进行测试,可以覆盖所有等价类,减少测试工作量。
在进行等价类划分时,可以根据输入的数据特点和处理逻辑进行划分。
例如,对于一个接受年龄输入的函数,可以将年龄划分为以下等价类:小于0、0到18、19到60、大于60。
然后选择代表性的测试用例进行测试,例如:-1、0、18、19、60、61。
等价类和边界值测试用例举例等价类和边界值测试是软件测试中常用的测试方法,能够有效地发现系统中的错误和问题。
在进行等价类和边界值测试时,需要将输入值划分为不同的等价类,并选择边界值进行测试。
下面将以某个电子商务网站的注册功能为例,列举10个符合题目要求的等价类和边界值测试用例。
1. 等价类测试用例:用户名- 等价类1: 用户名为空- 等价类2: 用户名长度小于3个字符- 等价类3: 用户名长度大于20个字符- 等价类4: 用户名包含非法字符(如特殊符号、空格等)- 等价类5: 用户名已存在2. 边界值测试用例:用户名- 边界值1: 用户名长度等于3个字符- 边界值2: 用户名长度等于20个字符- 边界值3: 用户名长度大于3个字符,小于20个字符3. 等价类测试用例:密码- 等价类1: 密码为空- 等价类2: 密码长度小于6个字符- 等价类3: 密码长度大于16个字符- 等价类4: 密码包含非法字符(如特殊符号、空格等)4. 边界值测试用例:密码- 边界值1: 密码长度等于6个字符- 边界值2: 密码长度等于16个字符- 边界值3: 密码长度大于6个字符,小于16个字符5. 等价类测试用例:邮箱- 等价类1: 邮箱为空- 等价类2: 邮箱格式不正确(缺少@或后缀不正确)- 等价类3: 邮箱已存在6. 边界值测试用例:邮箱- 边界值1: 邮箱长度等于5个字符- 边界值2: 邮箱长度等于254个字符- 边界值3: 邮箱长度大于5个字符,小于254个字符7. 等价类测试用例:手机号码- 等价类1: 手机号码为空- 等价类2: 手机号码格式不正确(长度不为11位或不以1开头) - 等价类3: 手机号码已存在8. 边界值测试用例:手机号码- 边界值1: 手机号码长度等于10位- 边界值2: 手机号码长度等于11位- 边界值3: 手机号码长度大于10位,小于11位9. 等价类测试用例:验证码- 等价类1: 验证码为空- 等价类2: 验证码不正确10. 边界值测试用例:验证码- 边界值1: 验证码长度等于3个字符- 边界值2: 验证码长度等于6个字符- 边界值3: 验证码长度大于3个字符,小于6个字符通过以上的等价类和边界值测试用例,可以覆盖到各种可能的输入情况,包括空值、边界值、非法字符等。
测试用例设计方法1——等价类边界值1、等价类划分等价类划分是黑盒测试最常用的方法,使用等价类划分的方法是将输入域划分为若干个区域,并从中选择少数具有代表性的数据进行测试,这样可以避免使用大量的测试数据,也避免了盲目性。
等价类划分针对程序的输入部分,常用的设计方法是:找出输入条件,划分等价类,并进行用例的设计。
等价类分为有效等价类和无效等价类。
所谓有效等价类是指用户输入的有效数据,并得到预期的或正常的结果;另一种是无效等价类,无效等价类是指异常的或不符合规定的输入,相应的也会得到异常的输出或提示信息。
因此在划分等价类的时候又从有效和无效两方面去考虑。
一般在设计测试用例时,要是一条用例尽量多的覆盖有效等价类,而无效等价类则要求一对一的覆盖。
2、边界值边界值同样是一种经典的黑盒测试方法,他常常作为等价类的一种补充,与等价类方法一起使用。
在进行程序设计时,大量的错误容易发生在输入数据或输出数据的边界上,因此使用边界值的方法可以经常检测出错误。
当一个输入明确的规定了一个值的取值范围时或输入条件是一组有序的集合时,就可以使用边界值的方法来设计测试用例。
关于边界值得上点、内点、离点的概念,可以参见下图。
由于等价类和边界值经常配合使用,因此两者可以合并为一个用例设计方法,下面总结一下使用等价类边界值设计测试用例的思路和方法。
1、分析需求,挖掘隐式条件,确认边界值,划分等价类2、将划分出的等价类填入表格,进行编号3、对有效等价类,用一条用例尽量多的覆盖4、对于无效等价类,一对一的覆盖,最终得到测试用例下面以最经典的三角形问题来说明如何使用等价类边界值方法设计测试用例:输入3个数,判定是否构成三角型,并判定什么时候是等腰三角形,什么时候是等边三角形。
分析输入条件:1、3个整数2、任意两边和大于第三遍3、满足1、2,且只有两个边相等4、满足1,三遍全部相等由上面的条件得到表格:获得等价类的划分后可以轻松的得到测试用例:至此,一个完整的测试用例就完成了。
一、实验目的用等价类划分法、边界值分析法等来测试分析实例。
二、实验内容(一)、将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.等价类划分1.1.前言我们知道软件测试是根据软件开发各个阶段的规格说明和程序的内部结构而精心设计一批测试用例,并利用这些测试用例运行软件,以发现软件错误的过程。
但在设计测试用例时,往往程序的输入是不可能穷举的。
因此,我们在测试某个程序时就被限制在从所有的输入条件中挑选某个小的子集来设计测试用例。
选择这个子集的前提是必须保证子集是正确的,保证子集尽可能的发现最多的错误,保证子集能代表其他大部分的测试用例,保证子集的数量是最为合理的。
1.2.定义在前言中提到的“子集”,因为他们一个个具有代表性的集合,我们将这个“子集”称为等价类。
等价类是指某个输入域的子集合。
在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某个等价类的代表值就等于对这一类其他值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。
等价类划分是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。
1.3.方法应用使用等价类划分方法来做测试,主要分两个步骤:确定等价类,生成测试用例。
1.3.1.确定等价类确定等价类的过程是根据规格说明选取每一个输入条件将其划分为两个或更多的组。
一般将等价类分为两类,有效等价类和无效等价类。
有效等价类代表对程序的有效输入。
无效等价类代表的则是其他任何可能的不正确的输入。
遵循“有效”,“无效”这个两个原则我们可以设计一个等价类表,确定等价类的结果就是生成一个等价类表。
1.3.2.生成测试用例根据第一步的等价类表来生成测试用例,其过程如下:1.为每一个等价类设置一个不同的编号2.编写新的测试用例,尽可能多地覆盖那些尚未被覆盖的有效等价类,直到所有的有效等价类都被测试用例所覆盖。
也就可理解为一个测试用用例可以涵盖多个有效等价类。