1、三角形问题是测试中广泛使用的一个经典案例,它要求输入3个正数a、b、c作为三角形的3条边,判断这3个数构成的是一般三角形、等边三角形、等腰三角形,还是无法构成三角形。请使用等价类划分法设计测试用例。

参考答案:

(1)判断是否输入了3个数,可以将输入情况划分成1个有效等价类,4个无效等价类,具体如下。

① 有效等价类:输入3个数。

② 无效等价类:输入0个数。

③ 无效等价类:只输入1个数。

④ 无效等价类:只输入2个数。

⑤ 无效等价类:输入超过3个数。

(2)在输入3个数的基础上,判断3个数是否是正数,可以将输入情况划分为1个有效等价类,3个无效等价类,具体如下。

① 有效等价类:3个数都是正数。

② 无效等价类:有1个数小于等于0。

③ 无效等价类:有2个数小于等于0。

④ 无效等价类:3个数都小于等于0。

(3)在输入3个正数的基础上,判断3个数是否能构成三角形,可以将输入情况划分为1个有效等价类和1个无效等价类,具体如下。

① 有效等价类:任意2个数之和大于第3个数,a+b>c、a+c>b、b+c>a。

② 无效等价类:其中2个数之和小于等于第3个数。

(4)在3个数构成三角形的基础上,判断3个数是否能构成等腰三角形,可以将输入情况划分成1个有效等价类和1个无效等价类,具体如下。

① 有效等价类:其中有2个数相等,a=b||a=c||b=c。

② 无效等价类:3个数均不相等。

(5)在构成等腰三角形的基础上,判断这3个数能否构成等边三角形,可以将输入情况划分为1个有效等价类和1个无效等价类,具体如下。

① 有效等价类:三个数相等,a=b=c。

② 无效等价类:三个数不相等。

上述分析一共将三角形输入划分为了15个等价类,给这些等价类确定编号,并建立等价类表,如表1所示。

表1 三角形输入等价类表

建立了等价类表,接下来设计测试用例覆盖等价类,设计测试用例的原则是,尽可能使用最少的测试用例覆盖最多的等价类。首先设计覆盖有效等价类的测试用例,在设计时,既要考虑测试输入情况的全面性,又要考虑对有效等价类的覆盖情况。根据表1中的有效等价类设计测试用例,如表2所示。

表2 有效等价类的测试用例

表2设计了4组测试用例覆盖了全部的有效等价类。无效等价类测试用例的设计原则与有效等价类的测试用例相同,无效等价类的测试用例如表3所示。

表3 无效等价类的测试用例

2、在上一题中是关于三角形问题等价类划分,在等价类划分中,除了要求输入数据为3个正数之外,没有给出其他限制条件,如果要求三角形的边长取值范围为1~100,请使用边界值分析法设计测试用例对三角形边界边长进行测试。

参考答案:

在设计测试用例时,分别选取1、2、50、99、100这5个值作为测试数据,则三角形边界值分析测试用例如表4所示。

表4 三角形边界值分析测试用例

在表4中,test1中的边长1是最小临界值,test2中边长2是略大于最小值的数据,test3中50是1~100范围内的任意值,test4中边长99是略小于最大值的数据,test5中边长100是最大临界值,使用这几组测试用例基本可以检测出三角形边界存在的缺陷。

3、某房产中介公司的中介费政策如下:如果房屋销售总价少于10万元,那么基础中介费将是销售额的2%;如果房屋销售总价大于10万元,但少于100万元,那么基础佣金将是销售额的1.5%,外加1 000元;如果销售额大于100万元,那么基础中介费将是房屋销售总价的1%,外加1 500元。另外房屋销售单价和销售的套数对中介费也有影响。如果单价低于1万元/m2,则外加基础中介费的5%,此外若是老顾客,则减免外加基础中介费;若单价在1万元/m2以上,但低于2万元/m2,则外加基础中介费的2.5%,若是老顾客,则减免外加基础中介费;若单价在2万元/m2以上,则减免外加基础中介费,若是老顾客,则减去基础中介费的5%。

请使用决策表法设计测试用例。

参考答案:

(1)分析各种输入情况,列出为房屋销售总价、单价、客户性质的有效等价类。

房屋销售总价的有效等价类:

S1:{0≤Sale<100 000}。

S2:{100 000≤Sale<1 000 000}。

S3:{Sale≥1 000 000}。

房屋销售单价的有效等价类:

P1:{Price<10 000}。

P2:{10 000≤Price<20 000}。

P3:{Price≥20 000}。

客户性质的有效等价类:

B1:{新客户}。

B2:{老客户}。

(2)分析程序的规格说明,并结合以上等价类划分的情况,给出问题规定的可能采取的操作(即列出所有的动作桩)。考虑各种有效的输入情况,程序中可能采取的操作有以下6种:

a1:基础中介费为销售总价的2%。

a2:基础中介费为(销售总价的1.5%+1 000)元。

a3:基础中介费为(销售总价的1%+1 500)元。

a4:外加基础中介费的5%。

a5:外加基础中介费的2.5%。

a6:减去基础中介费的5%。

(3)根据以上分析的步骤(1)和(2),画出决策表,如表5所示。

表5 房产中介费的决策表

(续表)

根据上述房产中介费收费的决策表,设计测试用例,如表6所示。

表6 房产中介费的测试用例表

4、某企业内部要进行薪资核算,功能描述如下:

学历分为大专、本科、硕士;

职称分为初级、中级、高级;

工作年限分为1~3年、3~5年、5年以上。

要求使用正交实验法设计测试用例。

参考答案:

根据上述功能说明,列出薪资构成因素表,如表7所示。

表7 薪资构成因素表

根据以上内容,为了方便测试的设计,构造因素状态表,如表8所示。

表8 因素状态表

测试对象为3因素(A、B、C),均为3状态,因此,应采用3因素3水平正交表。但是通过查询正交表查询网站发现并没有对应的正交表,因此当水平数(变量的取值)与某正交表相同,但因素数(变量)却不相同,则取因素数最接近但略大于实际值的正交表表,套用之后,最后一列因素去掉即可,所以应使用L9(33)正交表,如表9所示。

表9正交表

从表9我们可以看出,因素的每种状态组合都是唯一的,每个因素出现的次数是相同的,符合正交表的原则。接下来用每一个字母代号对应的状态情况代替字母代号,完成测试用例设计的因素和状态的组合,如表10所示。

表10 因素状态表

5、针对保险产品投保业务逻辑代码进行分析,运用语句覆盖和判定覆盖法进行测试用例设计。

某个人税收优惠型保险产品A/B1/B2/C款承保规则:

(1)凡16周岁以上且投保时未满法定退休年龄的(男性为59周岁、女性为54周岁,后续将随国家相关法规做相应调整),适用商业健康保险税收优惠政策的纳税人,可作为本合同的被保险人。保险公司根据被保险人是否参加公费医疗或基本医疗保险确定适用条款。

(2)被保人为健康体,或者参加医疗保险的,可选择A款、B1款或B2款。

(3)未参加公费医疗的非健康体(有既往症)只能选择C款。

以下为个人税收优惠型保险产品承保的部分伪代码实现:

参考答案:

1. 测试分析

(1)根据保险产品的承保业务描述,分析产品承保流程,包括主流程、分支流程以及正常流程、异常流程。

(2)模拟保险产品承保场景:触发允许产品承保的条件,不同条件是否走不同的承保流程。

(3)数据项检查:数据项的计算规则,数据项后台判断逻辑。

2. 测试设计

根据产品承保代码,设计出程序流程图,并对程序流程图做节点标记。

分析伪代码得到两个判定:

判定A:(性别="男"AND 16<年龄<59)OR(性别="女"AND 16<年龄<54)

判定B:健康体OR有医疗保险

3. 测试设计

根据业务场景与流程逻辑判定,运用语句覆盖法进行用例设计,运用判定覆盖法来进行用例设计。

语句覆盖是一个比较弱的逻辑覆盖标准,通过选择足够多的测试用例,使得被测试程序中的每个语句至少被执行一次。根据如图1所示的流程图,为使程序中的每个语句至少执行一次,只需设计两个测试用例,覆盖语句A、B、C、E,即覆盖判定A“成立”、判定B“成立”或“不成立”各被覆盖一次,如表11所示。

图1 流程图

表11 语句覆盖测试用例设计

接下来我们运用判定覆盖法来进行用例设计。判定覆盖又称为分支覆盖,判定覆盖语句覆盖的标准稍强一些,它是指通过设计足够多的测试用例,使得被测试程序中的每个判定(即上述判定A、判定B)都获得一次“真”“假”值,如表12所示。

表12 判定覆盖测试用例设计

6、以银行内部转账为实例,针对内部转账业务逻辑代码进行分析,运用条件覆盖和条件组合覆盖进行测试用例设计。

内部转账用于处理发起户口号和接收户口号都是内部账户的系统内资金转账业务,主要用于财务资金的划拨、未实现自动清算业务的清算资金的划拨。

(1)内部转账发起是指:发起行发出内部资金交易,并换人复核,满足条件时需会计主管授权。

(2)内部转账接收是指:内部资金交易接收方根据接收方确认方式,对交易进行接收经办,满足条件的需复核或授权。

确定接收方的入账流程,“确认方式”分为以下三种:

(1)不需接收方确认,即发起方发起后自动记发起方和接收方的一套账务,接收方无须再做接收动作。

(2)需接收方确认,即接收方接收时不能更改接收信息,只能依据发起方输入的信息入账或退发起方。以目前的处理方式,接收经办→入账(金额小于100万元),大于100万元时为接收经办+接收授权→入账。

(3)需接收方经办,即接收方接收时可以更改接收信息,执行入账或退发起行。以目前的处理方式,接收经办+接收复核→入账(金额小于100万元),大于100万元时为接收经办+接收复核+接收授权→入账。

内部转账权限控制如表13所示。

表13 内部转账权限控制

以下为银行内部转账控制的部分伪代码实现:

参考答案:

1. 测试分析

(1)根据银行内部转账业务描述,分析内部转账流程,包括主流程、分支流程以及正常流程、异常流程。

(2)模拟内部转账场景:触发内部转账的条件,不同条件是否走不同的转账流程。

(3)数据项检查:数据项的计算规则,数据项后台判断逻辑。

2. 测试设计

根据内部转账业务需求,设计出程序流程图,并对程序流程图做节点标记,分析流程图的判定条件与结果,如图2 所示。

图2 程序流程图

A~Q为测试路径编号,在下面的测试用例分析中将根据测试路径编号确定测试用例的业务流向。

根据图2所示的流程图,标记出节点。根据条件覆盖方法来进行分析,得到如表2所示的符合条件覆盖标准的测试用例。

表2 符合条件覆盖标准的测试用例

S(2)条件组合覆盖

对于判定1:

①条件转账金额>100W 取真为T1

②条件转账金额<=100W 取假为F1

对于判定2:

①条件“确认方式”==1 取真为T2

②条件“确认方式”==2 取真为T3

③条件“确认方式”==3 取真为T4

④条件T2、T3和T4都不成立 取假为F2

对于判定3:

①条件“确认方式”==2 取真为T5

②条件“确认方式”==3 取真为T6

③条件T5和T6都不成立 取假为F3

通过设计足够多的测试用例,使得被测试程序中的每个判断的所有可能条件取值的组合至少出现一次。在这个银行内部转账流程上,判定1的条件和判定2、3中的条件分别构成组合。由于业务特定的逻辑,其组合简化为7个,而不是14个。

①判定1的条件T1和判定3中的各个条件构成组合,即3个组合,而不是2×3=6个组合;

②判定1的条件F1和判定2中的各个条件构成组合,即4个组合,而不是2×4=8个组合。

因此根据条件组合覆盖,总共有7个测试用例完成组合覆盖,如表3所示。这里不考虑异常情况,如转账金额<=0的情况。遇到这种情况会直接异常退出,也无法进入下一个判定2或判定3,和组合也没关系。

表14 符合条件组合覆盖度量标准的测试用例

7、针对下面的Java语言程序使用基本路径覆盖测试方法设计测试用例。

参考答案:

步骤1:导出程序控制流图

根据源代码可以导出程序的控制流图,如图3所示。每个圆圈代表控制流图的结点,可以表示一个或多个语句。圆圈中的数字对应程序中某一行的编号。箭头代表边的方向,即控制流方向。

图3 程序的控制流图

步骤2:求出程序环形复杂度

根据程序环形复杂度的计算公式,求出程序路径集合中的独立路径数目。

公式1:V(G)=10-8+2,其中10是控制流图 G中边的数量,8是控制流图中结点的数目。

公式2:V(G)=3+1,其中3是控制流图G中判定结点的数目。

公式3:V(G)=4,其中4是控制流图G中区域的数目。

因此,控制流图G的环形复杂度是4。就是说至少需要4条独立路径组成独立路径集合,并由此得到能够覆盖所有程序语句的测试用例。

步骤3:导出测试用例

根据上面环形复杂度的计算结果,源程序的独立路径集合中有4条独立路径:

path 1:10→18。

path 2:10→11→12→16→10→18。

path 3:10→11→13→15→16→10→18。

path 4:10→11→13→14→15→16→10→18。

步骤4:设计测试用例

根据上述4条独立路径,设计了测试用例,如表15所示。测试用例中的4个测试用例作为程序输入数据,能够遍历这4条独立路径。对于源程序中的循环体,测试用例中的输入数据使其执行零次或一次。

表15 测试用例

注意:如果程序中的条件判断表达式是由一个或多个逻辑运算符(and,or,not)连接的复合条件表达式,则需要变换为一系列只有单个条件的嵌套的判断。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐