边界值分析法运用的是将被测组件的输入值域和输出值域划分为多个有序并确定边界的集合的模式来设计测试用例。
我们一般可以通过对该组件的需求文档进行分析来得到这个输入值域和输出值域。
在这个模式下被划分出来的集合是有序的,而且有明确的边界。每个被划分出来的集合应该包括一组值或一个取值的范围。
所谓的边界值就是用来界定各个有序集合之间的边界点。
在边界值分析法的模式下设计出来的测试用例将用于覆盖每个被划分出来的集合的边界点上的值和其相邻值(边界点的前一个有序值和边界点的后一个有序值)。每个被划分出来的边界都应该有3个值需要覆盖。这样的边界值是对有效输入值域进行划分所得的集合的边界值和对无效输入值域进行划分所得的集合的边界值。另外,测试用例还可以被设计为用来测试那些无法推导出的无效输出值域的边界值。
每一个运用边界值分析法模式设计的测试用例都应当包括。
l 对于该组件的输入。
l 该用例所执行(覆盖)的边界值。
l 该用例的期望输出。
边界值设计模式的覆盖率为:
边界值覆盖率=(被执行的已确定边界值的数量/总的边界值数)×100%
(以上公式中每一个边界值均对应于测试用例中覆盖的边界值或其相邻值。)
说明:
边界值是基于以下假设。根据组件的设计文档,该组件的输入值域和输出值域可以被划分为多个集合(通常情况下我们会把从输入值域和输出值域划分出来的等价类作为需要收集边界点的集合)。操作这些集合的边界点上的边界值及其相邻值对于开发人员来说是最容易犯错误的。基于这个模式下,我们设计的测试用例就是用来覆盖这些边界。
思路:对于这个例子,首先划分其等价类,然后再确定各个等价类的边界,并设计测试用例覆盖他们。此时等价类将按照该组件的输入和输出域来进行划分。输入域和输出域中所有的有效值域和无效值域者将被考虑。
输入值域:
1、列举该组件的输入域。
(1)首先对其两个参数的有效值域进行划分。
l 0≤考试成绩≤80 。
l 0≤平时成绩≤20 。
(2)然后对这两个参数的其无效值域进行划分。
l 考试成绩<0 。
l 考试成绩>80 。
l 平时表现<0 。
l 平时表现>20 。
2、确定组件输入值域各个等价类的边界值及其相邻值。
3、设计测试用例。
(1)对于考试成绩设计6个用例,
考试成绩测试用例
注:其中平时表现被设定为任意的有效值15。
(2)对于考试成绩设计6个用例,
平时表现测试用例
注:其中考试成绩被设定为任意的有效值75。
4、当然,该组件的输入值域还可以划分为以下无效值域。
l 考试成绩=带小数的浮点数。
l 考试成绩=非数字的字符组合。
l 平时表现=带小数的浮点数。
l 考试成绩=非数字的字符组合。
由于上述无效值域的等价类并不具备“有序”的特征,而且这些等价类中也很难确定其边界点,所以在边界值分析设计模式下将不对这些等价类设计测试用例。
输出值域:
1、下面来分析一下该组件的输出域等价类。
l 80≤总分≤100 将输出 ‘A’(优秀)
l 60≤总分<80 将输出 ‘B’(良好)
l 50≤总分<60 将输出 ‘C’(补考)
l 0≤总分<50 将输出 ‘D’(重修)
l 100<总分 将输出 ‘error message’(错误信息)
l 总分<0 将输出 ‘error message’(错误信息)
在此,
总分=考试成绩+平时表现。
(“error message”(错误信息)也在输出域的有效值域之列。这是因为组件的设计文档中已经指明输入的考试成绩与平时表现如果超出其有效值范围时有这种类型输出。下图是组件输出值域各个等价类的边界值及其相邻值。)
2、确定组件输出值域各个等价类的边界值及其相邻值。
3、设计测试用例
对于输出值域设计用例
由于上节输出值域所划分的以下无效等价类,因为并不具备“有序”的特征,而且这些等价类中也很难确定其边界点,所以在边界值分析设计模式下将不对这些等价类设计测试用例。
4、引申:覆盖隐性的边界值的测试用例 下面来分析一下该组件的输出值域等价类。 l output=“null”等效于输入的两个参数皆为null 。 l output=“float input”等效于输入参数至少有一个是浮点数。 l output=“non-numberic input”等效于输入参数至少有一个是非数字。 除了以上被划分的等价类的边界值之外还有一组隐性的边界值尚未确定。文档中规定2个参数是有符号整型。假设总分也是有符号整型(文档没有明确描述)。假设这个程序在32位机上运行,有符号整型的取值范围是 ~ -1 因此有 l 考试成绩<0 等价于 <考试成绩<0 l 考试成绩>80 等价于 80<考试成绩< -1 l 平时表现<0 等价于 <平时表现<0 l 平时表现>20 等价于 20<平时表现< -1 l 100<总分 等价于 100<总分< -1 l 总分<0 等价于 <总分<0 因此设计了以下用例来覆盖这些隐性的边界值 覆盖隐性的边界值的测试用例 以上45条用例100%覆盖了其输入值域和输出值域及边界点的值及其相邻值。 |