一、实验目的

掌握基于覆盖理论与基本路径的基本白盒测试方法和实践

二、实验要求

运用逻辑覆盖测试的覆盖准则设计被测程序的测试用例,并运行测试用例检查程序的正确与否,给出程序缺陷小结。

三、实验内容

根据各位同学自己的被测程序,分别作出各类白盒测试技术的用例设计和相应的Junit脚本。

所有的覆盖的技术:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖、路径覆盖,基本路径测试方法。

包括的内容有:

1) 被测原代码

import java.util.Scanner;public class Commission {public static double commission(int headphone, int shell, int protector) {double back = 0;float sum = 0;sum = headphone * 80 + shell * 10 + protector * 8;if (sum < 1000) {back = sum * 0.1; // 小于1000时所抽取的佣金} else if (sum >= 1000 && sum <= 1800) {back = 100 + (sum - 1000) * 0.15;// 计算1000--1800的佣金} else if (sum >= 1800) {back = 220 + (sum - 1800) * 0.2;// 1800以上的佣金
        }return back;}static int tu(String a) {int back;char a_c[] = a.toCharArray();int len = a.length();for (int i = 0; i <= len - 1; i++) // 逐个检查是否为数字,小数点同样不通过
        {if (a_c[i] > '9' || a_c[i] < '0') {back = -1;return back;}}back = Integer.parseInt(a);return back;}public static void main(String[] args) {int pass = 0;// 设置初始判断循环是否通过的值
        String headphone;String shell;String protector;@SuppressWarnings("resource")Scanner s = new Scanner(System.in);int headphone_i = 0;int shell_i = 0;int protector_i = 0;double back;while (pass == 0) {System.out.printf("请分别输入三种手机配件的销售情况:\n");while (pass == 0) {System.out.printf("请输入耳机的销售数量:(输入exit退出)\n");headphone = s.next();if (headphone.equals("exit") == true) {System.exit(0);} else if (tu(headphone) == -1) {System.out.printf("输入的数据不合法,请重新输入!\n");continue;} else {headphone_i = tu(headphone);break;}}while (pass == 0) {System.out.printf("请输入手机外壳的销售数量:\n");shell = s.next();if (tu(shell) == -1) {System.out.printf("输入的数据不合法,请重新输入!\n");continue;} else {shell_i = tu(shell);break;}}while (pass == 0) {System.out.printf("请输入手机护膜的销售数量:\n");protector = s.next();if (tu(protector) == -1) {System.out.printf("输入的数据不合法,请重新输入!\n");continue;} else {protector_i = tu(protector);break;}}back = commission(headphone_i, shell_i, protector_i);System.out.println("佣金为:" + back + "\n");}}
}

2)依据覆盖技术,测试用例列表:

commission函数DD-路径图:

语句覆盖、路径覆盖:

  A-B-D-G

  A-B-C-E-G

  A-B-C-F-G

  用例设计:

编号 输入 预期输出 实际输出 执行路径 是否通过
1 0 0 0 0 0 ABDG
2 10 19 6 105.7 105.7 ABCEG
3 32 10 1 393.6 393.6 ABCFG

判定条件覆盖、组合覆盖:

编号 B< 1000 C >= 1000 C <= 1800 路径
1 T F T BDG
2 F T T BCEG
3 F T F BCFG

  用例设计

编号 输入 预期输出 实际输出 执行路径 是否通过 覆盖条件
1 1 1 1 9.8 9.8 ABDG 1
2 10 20 5 106 106 ABCEG 2
3 20 40 0 260 260 ABCFG 3

3)相应Junit测试脚本、执行结果

import static org.junit.Assert.*;import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class CommissionTest {Commission com = new Commission();@Beforepublic void setUp() throws Exception {}@Afterpublic void tearDown() throws Exception {}@Testpublic void testCommission() {assertEquals(9.8,Commission.commission(1, 1, 1),0.00001);assertEquals(105.7, com.commission(10, 19, 6),0.00001);assertEquals(393.6, com.commission(32, 10, 1),0.00001);assertEquals(0,Commission.commission(0, 0, 0),0.00001);assertEquals(106, com.commission(10, 20, 5),0.00001);assertEquals(260, com.commission(20, 40, 0),0.00001);}
}

结果:

4)给出测试参数化和打包测试的脚本,并生成执行结果

测试参数化脚本:

import static org.junit.Assert.assertEquals;import java.util.Arrays;
import java.util.Collection;import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;@RunWith(Parameterized.class)
public class ParameterizedTest{Commission com;private int headphone;private int shell;private int protector;private double result;@Parameterspublic static Collection data(){return Arrays.asList(new Object[][]{{0, 0, 0, 0},{10, 19, 6, 105.7},{32, 10, 1, 393.6},{1, 1, 1, 9.8},{10, 20, 5, 106},{20, 40, 0, 260},});}public ParameterizedTest(int headphone,int shell,int protector,double result){com=new Commission();this.headphone=headphone;this.shell=shell;this.protector=protector;this.result=result;}@Testpublic void testCommission() {assertEquals(result,com.commission(headphone, shell, protector), 0.00001);}
}

执行结果:

注:图片中的类名与代码中的类名不一致的原因是因为为了打包测试,重新创建类一个junit测试类,图片中的运行结果是在第一次的基础上改的。

打包测试脚本:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;@RunWith(Suite.class)
@Suite.SuiteClasses({CommissionTest.class, ParameterizedTest.class})
public class AllCommissionTest {}

执行结果:

4、测试小结:

  • 测试找到的缺陷清单

  无

  • 对源代码的修改建议

  实验1第三个程序要求commission函数返回的类型是float型。

  • 测试总结与心得体会

  Junit4提供的参数化测试及打包测试极大的方便了我们进行单元测试,然而我认为难点还在于测试用例的设计,本次实验我只针对commission函数,也就是最后的佣金计算函数进行了各种覆盖测试,而合法性输入判断函数并没有衔接在一起,如果我向commission函数输入了负数,而我期望的结果是它报错,但实际上单元测试的结果会出现结算佣金为负数,而不是报错,这时候我们需要将整个程序画在同一个流程图内吗?但是将整个程序画在同一流程图内,最后设计测试用例又未免显得太复杂。

  另外本次实验测试的代码判断的条件其实有四个但在我看来实际上只有两个,事实上sum < 1000与sum >= 1000是一对相反的条件,而sum <= 1800与(sum >= 1800也是一对相反的条件,这使得我设计条件覆盖满足条件的时候很迷茫,不知道该怎么设计。

转载于:https://www.cnblogs.com/destinyandfate/p/6706981.html

实验二+070+胡阳洋相关推荐

  1. 实验四+070+胡阳洋

    一.实验目的 1) 学习QTP工具的使用 2)了解黑盒自动化测试 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)对QTP的飞机订票系统的任一界面或控件实现自动化测试.(测试的具体自选) ( ...

  2. 实验三+070+胡阳洋

    一.实验目的 掌握黑盒测试用例设计方法 二.实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类.边界值.决策表.状态图法等进行测试用例设计. (3)对手机上任意一款音乐软件进行黑盒测试实 ...

  3. 第5次作业+105032014070+胡阳洋

    被测对象博客:http://www.cnblogs.com/zhen-firstblog/p/6792834.html 1)被测项目界面. 2)测试用例设计表 1.等价类划分 输入条件 三个数据 有效 ...

  4. 第4次作业类测试代码+105032014070+胡阳洋

    1.类图. 2.代码及界面. package test.java.distinguish.triangle;public class Distinguish {/*** * @param a 三角形边 ...

  5. 胡阳:汗水铺就代码之路,三分天注定,七分靠打拼

    胡阳  前搜狐资深开发工程师,现任知乎资深开发工程师 2008年开始,他写博客11年了. 仅最近两年内,博客的访问量累计超过600万. 2017年,他发布了<Django企业开发实战>视频 ...

  6. 图灵直播——听胡阳老师和大家聊聊《Python Web开发者的破局之道》

    Quora联合创始人Adam D"Angelo在Quora开发中选择Python时所说, 到目前为止,我们对这一选择感到非常满意...所有在过去一直使用其他语言的早期员工都乐意转换到Pyth ...

  7. 2017-2018-2 1723《程序设计与数据结构》第八周作业 实验二 第一周结对编程 总结...

    作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...

  8. java实验报告系统分析怎么写_20155218 《Java程序设计》实验二(Java面向对象程序设计)实验报告...

    20155218 <Java程序设计>实验二(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)单元测试 主要学习安装和使用junit来测试编写的程序,并学习以TDD(Test ...

  9. 电力电子技术课程实验:实验二、可控整流电路及pwm逆变电路设计、制作、测试

    电力电子技术课程实验:实验二.可控整流电路及pwm逆变电路设计.制作.测试 第一部分.可控整流电路预习报告 一.知识准备 1.1.三相桥式全控整流电路的构成及其工作原理 1.2.三相桥式全控整流电路对 ...

最新文章

  1. Linux IO实时监控iostat命令详解
  2. android监听输入框光标,EditText光标的移动
  3. MySQL 优化之 index_merge (索引合并)
  4. Win7和Vista移动设备正常弹出
  5. docker 打包部署 python项目_Docker如何部署Python项目的实现详解
  6. Linux 字符集 en_us,Linux语言环境:en_US.UTF-8 vs en_US
  7. endnotex7怎么导入中文文献,EndNote 7.0使用中文详细教程
  8. workman 心跳
  9. 改变了的Windows MediaPlayer9.0SDK控制集
  10. 【MATLAB】图像分割
  11. Unity3DAI行为------路径跟随
  12. DotNet 资源大全中文版,内容包括:编译器、压缩、应用框架、应用模板、加密、数据库、反编译、IDE、日志、风格指南等...
  13. Docker 安装 Elasticsearch 7.12.1
  14. Flixel横板游戏制作教程(六)—SoundsandMusic(音效与音乐)
  15. java+vue+onlyoffice的简单集成
  16. You-Get--基于Python3的开源网络视频下载工具
  17. 西瓜视频下载软件有吗
  18. 没有IP地址的主机如何保持IP层联通
  19. js - 内存溢出与内存泄漏
  20. 黑科技|感官世界与人机交互的盛宴 --未来虚拟现实养成记

热门文章

  1. 阿里面试:“说一下从 url 输入到返回请求的过程”
  2. 查询onedrive空间大小
  3. 豆瓣top250图书爬取
  4. 转型经验分享|作为传统汽车工程师,我如何转型去阿里做无人驾驶?
  5. 零基础如何入门嵌入式领域
  6. 都2022年了相册分类还如此不准?不如试试亲影
  7. 国外数据下载(阿里云+七牛云)
  8. 阿里云盘下载与公测预约(最新)
  9. 最近程序员频繁被抓,如何避免面向监狱编程!?
  10. 2021全国特种设备-Q2起重机司机模拟考试题库一[安考星]