软件测试任务八
软件测试第十一次作业
- 场景法
场景法是通过运用场景来对系统的功能点或业务流程进行描述,从而提高测试效果的~种方法。使用用例场景来测试需求是指模拟特定场景边界发生的事情,通过事件来触发某个动作的发生,观察事件的最终结果,从而用来发现需求中存在的问题。通常以正常的用例场景分析开始然后再着手其他的场景分析。场景法一般包含基本流和备选流,从一个流程开始,通过描述经过的路径来确定过程,经过遍历所有的基本流和备选流来完成整个场景。
图表 1场景法示意图
基本流:采用直黑线表示,是经过用例的最简单的路径。
备选流:采用不同颜色表示,一个备选流可能从基本流开始,在某个特定条件下执行,然后重新加入基本流中,如场景法示意图中的备选流 3;也可以起源于另-个备选流,如备选流 2;或终止用例,不再加入基本流中,如备选流2或备选流4。
- 基本流是主流,备选流是支流。
- 一个业务只存在一个基本流;基本流只有一个起点、一个终点
- 备选流可以起始于基本流,也可以起始于备选流,备选流的终点,可以是一个流程的出口,也可以回到基本流,还可以汇人其他备选流
- 如果在流程图中出现了两个不相上下的基本流,一般需要把它们分别当作一个业务看待。
图表 2场景法示意图的用例场景
场景法的设计步骤:
- 根据说明,描述出程序的基本流及各项备选流;
- 根据基本流和各项备选流生成不同的场景;
- 对每一个场景生成相应的测试用例;
- 对生成的所有测试用例重新复审,去掉多余的测试用例。测试用例确定后,对每一个测试用例确定测试数据值。
- 网上银行支付交易
【案例描述】
图表 3网上银行支付交易系统的基本流表
图表 4网上银行支付交易系统的备选流表
问题1:
假定输入的的银行卡号是正确的,不考虑备选流循环情况,使用场景法设计测试用例,指出所涉及的基本流和备选流。基本流用字母A表示,备选流用题干中描述对应编号表示。
问题2:
请针对描述以上设计的用例场景,依次将银行卡号、初次输入密码、最终输入密码、卡内余额、银行卡可支付额度等信息填入测试用例表。其中V表示这个条件必须是有效的才可以执行用例,I用于表明这种条件下将激活所需的备选流,n/a表示这个条件不适用于测试用例。
【案例分析】
场景法首先需要确定基本流和备选流,在基本流和备选流已经确定的前提下,可以进一步设计场景。每个场景覆盖了在该案例下不同触发顺序与处理结果形成的事件流,最后得出所有的测试用例。例如,可以设计以下场景,如果没有特殊的情况发生,可以顺利完成网上银行支付行为。应该由基本流 A构成,具体如图网上银行支付交易系统的基本流表所示。
如果在支付的过程中,遇到密码不对的情况,则可以用到基本流 A和备选流 B构成场景 A、B。其他情况也依此类推。
根据设计好的场景,就可以对应地进行测试用例的设计比如针对只包括基本流的场景,应该选择正确的银行卡号、正确的输入密码、卡内余额应该大于订单的额度、银行卡的可支付额度也大于可支付的额度,见表网上银行支付交易系统测试用例。
图表 5网上银行支付交易系统基本流
图表 6网上银行支付交易系统测试用例
其中用V表示有效数据元素,I表示无效数据元素,n/a表示不适用。C01表示“成功支付”用例。
【案例实现】
图表 7网上银行支付交易系统场景表
图表 8网上银行支付交易系统测试用例(完整)
- 电子不停车收费系统
- 基本流与备选流描述
图表 9电子不停车收费系统基本流表
图表 10电子不停车收费系统备选流表
- 根据基本流和备选流生成场景
图表 11电子不停车收费系统场景表
- 设计测试用例
图表 12电子不停车收费系统测试用例
一、 单元测试
1. 例子
测试以下程序段的正确性
以JAVA程序为例,创建一个类,将被测方法放入同一个类文件中,并在main()方法中调用。
1.设计测试用例
用例编号 | 输入数据 | 期望结果 |
001 | X=75,y=88 | Z=88 |
002 | X=103,y=589 | Z=589 |
003 | X=233,y=233 | Z=233 |
2.测试结果两者均一致
①
②
③
也可以将被测单元封装在独立的类中,在测试类中创建被测类的对象,并通过调用被测类对象的方法进行测试。
1.设计测试用例
用例编号 | 输入数据 | 期望结果 |
001 | X=75,y=88 | Z=88 |
002 | X=103,y=589 | Z=589 |
003 | X=233,y=233 | Z=233 |
2.测试结果
①
②
③
二、 闰年测试
根据下面的方法,编写桩模块来测试程序
1. 分析
被测案例是一个主函数,需要构造被测单元的桩模块。
创建一个方法作为桩模块,被测单元调用这个方法来测试程序
增加一个循环,以便于多次测试
2.设计测试用例
用例编号 | 输入数据 | 期望结果 |
001 | Year=1001 | 1001 is not a leap year. |
002 | Year=1004 | 1004 is a leap year. |
003 | Year=1000 | 1000 is not a leap year. |
004 | Year=2000 | 2000 is a leap year. |
3.测试结果
三、 拓展案例
(1)根据下面的方法,编写驱动模块来测试程序的正确性
方法一:
1.创建一个类,包含主函数和此方法,通过主函数调用此方法
2. 设计测试用例
用例编号 | 输入数据 | 期望结果 |
001 | A=1,b=2,c=3 | Result=3 |
002 | A=2,b=1,c=3 | Result=3 |
003 | A=2,b=2,c=3 | Result=3 |
004 | A=1,b=2,c=1 | Result=2 |
005 | A=2,b=1,c=2 | Result=2 |
006 | A=3,b=3,c=3 | Result=3 |
3. 测试结果
①
②
③
④
⑤
⑥
方法二:
1.将Max()方法防御一个Max.java文件中,通过对象调用。
2.设计测试用例
用例编号 | 输入数据 | 期望结果 |
001 | A=1,b=2,c=3 | Result=3 |
002 | A=2,b=1,c=3 | Result=3 |
003 | A=2,b=2,c=3 | Result=3 |
004 | A=1,b=2,c=1 | Result=2 |
005 | A=2,b=1,c=2 | Result=2 |
006 | A=3,b=3,c=3 | Result=3 |
5.测试结果
①
②
③
④
⑤
⑥
(2)根据下面的代码,编写桩模块来测试程序
1.创建一个方法来实现判断是否是素数,并且创建Prime.java文件,通过对象调用来实现。
2.设计测试用例
用例编号 | 输入数据 | 期望结果 |
001 | Num=1 | False |
002 | Num=2 | true |
003 | Num=9 | false |
004 | Num=13 | false |
3.测试结果
①
②
③
④
五、使用测试工具JUnit进行单元测试
【案例实现】
①创建caculator类
②创建caculator类的测试类
③测试正确结果
④测试错误结果