博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复利4.0代码黑白盒测试
阅读量:6690 次
发布时间:2019-06-25

本文共 8028 字,大约阅读时间需要 26 分钟。

 

实验目的:

       软件的测试设计与软件产品的设计一样,是一项需要

 花费许多人力和时间的工作,我们希望以最少量的时间和

 人力,最大可能地发现最多的错误。

 

白盒测试

也叫玻璃盒测试(Glass Box Testing)对软件的过程性细节做细致的检查。这一方法是把测试对象看作一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,来设计或选择测试用例,对程序所有逻辑路径进行测试。

 

 

内容:1、对程序模块的所有独立执行路径至少测试一次

      2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测试一次。  

      3、在循环的边界和运行边界限内执行循环体

      4、测试内部数据结构的有效性。

 

 

 

白盒测试方法:

 

1、逻辑覆盖测试方法通常采用流程图来设计测试用例,它考察的重点是图中的判定框,因为这些判定通常是与选择结构有关或是与循环结构有关,是决定程序结构的关键成分。

 

2、判定覆盖/ 分支覆盖设计若干个测试用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次。

 

3、条件覆盖就是设计若干个测试用例,运行被测程序,使得程序中每个判断的每个条件的可能取值至少执行一次。

 

 

 

黑盒测试

已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。

 

 

内容:1Alpha/Beta Testing

      2、菜单/帮助测试

      3、发行测试

      4、回归测试

 

 

 

黑盒测试法四种常用技术:有效等价类、边界值分析法、错误猜测法、因果图法

 

有效等价类是指对于程序的规格说明来说,是合理的有意义的输入数据构成的集合。利用它可以检验程序是否实现预先规定的功能和性能

 

边界值分析法是采用边界值分析法来选择测试用例,可使得被测程序能在边界值及其附近运行,从而更有效地暴露程序中潜藏的错误。

 

错误猜测法是指所谓猜测,就是猜测被测程序在哪些地方容易出错,然后针对可能的薄弱环节来设计测试用例。显然它比前两种方法更多地依靠测试人员的直觉与经验。所以一般都先用前两方法设计测试用例然后再用猜测法去补充一些例子作为辅助的手段。

 

因果图法是借助图形来设计测试用例的一种系统方法。它适用于被测程序具有多种输入条件,程序的输出又依赖于输入条件的各种组合的情况因果图是一种简化了的逻辑图,它能直观地表明程序输入条件(原因)和输出动作(结果)之间的相互关系。

 

测试步骤

    1、把方法从类里面提取出来另写一个public static方法

    2、将方法里面的数据定义一些参数,方便不同类型的数据测试

    3、在另外新建的包里面创建测试类进行测试

 

 

测试设计

     1.测试计算公式是否正确

  2.测试用户输入非法字符

  3.测试输入为空

  4.测试输入为负数

     5、每个条件每个循环的路线都走一次

 

测试代码:将单利计算的类拿出来测试,以下是源代码

public void Scalculate() {        double principal = 0;        double amount = 0;        double rate = 0;        int n = 0;        NumberFormat currencyformatter = NumberFormat.getCurrencyInstance();        String output = "年" + "/" + "单利存款";        int year = 1;        int result;        if (b4.getText().equals("") && b1.getText() != null                && b3.getText() != null && b2.getText() != null) // 求期望值        {            try {                rate = Double.parseDouble(b2.getText());                if (rate < 0) {                    JOptionPane.showMessageDialog(null, "利率输入有误,请重新输入数字");                    rate = 0;                }                n = Integer.parseInt(b3.getText());                if (n < 0) {                    JOptionPane.showMessageDialog(null, "年份输入有误,请重新输入数字");                    n = 0;                }                principal = Double.parseDouble(b1.getText()); // b1本金                if (principal < 0) {                    JOptionPane.showMessageDialog(null, "本金输入有误,请重新输入数字");                    principal = 0;                }            } catch (Exception e2) {                // TODO: handle exception                JOptionPane.showMessageDialog(null, "数据输入有误,请重新输入数字");            }            double tempprincipal = principal;            result = JOptionPane.showConfirmDialog(null, "是否每年添加本金");            if (result == JOptionPane.YES_OPTION) {                while (year <= n) {                    amount = principal * (1 + rate * year) + tempprincipal;                    output += String.valueOf(year) + "\t\t\t"                            + currencyformatter.format(amount) + "\n";                    year = year + 1;                }            } else {                while (year <= n) {                    amount = principal * (1 + rate * year);                    output += String.valueOf(year) + "\t\t\t"                            + currencyformatter.format(amount) + "\n";                    year = year + 1;                }            }            text.setText(output);        }        else if (b1.getText().equals("") && b2.getText() != null                && b3.getText() != null && b4.getText() != null) { // 求本金            try {                rate = Double.parseDouble(b2.getText());                if (rate < 0) {                    JOptionPane.showMessageDialog(null, "利率输入有误,请重新输入数字");                    rate = 0;                }                n = Integer.parseInt(b3.getText());                if (n < 0) {                    JOptionPane.showMessageDialog(null, "年份输入有误,请重新输入数字");                    n = 0;                }                amount = Double.parseDouble(b4.getText());                if (amount < 0) {                    JOptionPane.showMessageDialog(null, "期待值输入有误,请重新输入数字");                    amount = 0;                }            } catch (Exception e2) {                // TODO: handle exception                JOptionPane.showMessageDialog(null, "数据输入有误,请重新输入数字");            }            principal = 0;            while (year <= n) {                principal = amount / (1 + rate * year);                year = year + 1;            }            output = "本金" + currencyformatter.format(principal) + "\n";            text.setText(output);        }        else if (b2.getText().equals("") && b1.getText() != null                && b3.getText() != null && b4.getText() != null) // 求利率        {            try {                principal = Double.parseDouble(b1.getText()); // b1本金                if (principal < 0) {                    JOptionPane.showMessageDialog(null, "本金输入有误,请重新输入数字");                    principal = 0;                }                n = Integer.parseInt(b3.getText()); // b3年份                if (n < 0) {                    JOptionPane.showMessageDialog(null, "年份输入有误,请重新输入数字");                    n = 0;                }                amount = Double.parseDouble(b4.getText()); // b4期望值                if (amount < 0) {                    JOptionPane.showMessageDialog(null, "期待值输入有误,请重新输入数字");                    amount = 0;                }            } catch (Exception e2) {                // TODO: handle exception                JOptionPane.showMessageDialog(null, "数据输入有误,请重新输入数字");            }            rate = (amount / principal - 1) / n;            output = "利率" + rate + "\n";            text.setText(output);        }        else if (b3.getText().equals("") && b1.getText() != null                && b2.getText() != null && b4.getText() != null) // 求年份        {            try {                principal = Double.parseDouble(b1.getText()); // b1本金                if (principal < 0) {                    JOptionPane.showMessageDialog(null, "本金输入有误,请重新输入数字");                    principal = 0;                }                amount = Double.parseDouble(b4.getText()); // b4期望值                if (amount < 0) {                    JOptionPane.showMessageDialog(null, "期待值输入有误,请重新输入数字");                    amount = 0;                }                rate = Double.parseDouble(b2.getText());                if (rate < 0) {                    JOptionPane.showMessageDialog(null, "利率输入有误,请重新输入数字");                    rate = 0;                }            } catch (Exception e2) {                // TODO: handle exception                JOptionPane.showMessageDialog(null, "数据输入有误,请重新输入数字");            }            double n2 = (amount / principal - 1) / rate;            double n3 = n2;            n = (int) n2;            if (n3 - n > 0) {                n += 1;                output = "至少年数" + n + "\n";                text.setText(output);            } else {                output = "刚好" + n + "年\n";                text.setText(output);            }        }        else if (b1.getText() != null && b4.getText() != null                && b3.getText() != null && b2.getText() != null) {            JOptionPane.showMessageDialog(null, "请删除一个数据");        } else {            JOptionPane.showMessageDialog(null, "请增加数据");        }    }

 

 

 

测试数据及结果:

测试模块

测试输入

(本金,利率,年限,期望值)

测目的

预期结果

运行结果

Bug跟踪

测试公式是否正确

(100000,0.03,3,0, )

期望值

10900

10900

bug

 

(100000,0.03,0,10900)

年限

3

3

bug

 

(0,0.03,3,10900)

本金

100000

100000

bug

 

(100000,0,3,0,10900 )

利率

0.03

0.03

bug

测试用户输入非法字符

(g,0,3,0,0)

期望值

false

false

 无bug

 

(100000,p,0,10900 )

年限

false

false

无bug 

 

(0,f,3,10900 )

本金

false

false

 无bug

 

(l,0,3,10900)

利率

false

false

 无bug

测试输入为空

(100000,0.03,00)

false

false

 无bug

测试输入为负数

(-100000,0.03,3,0)

期望值

 false

 false

无bug 

 

(-100000,0.03,0,10900)

年限

 false

false 

无bug 

 

(-100000,0,3,10900)

利率

 false

false 

 无bug

 

(0,0.03,3,-10900)

本金

false 

false 

 无bug

 

 

 

测试的代码:

@Test	public void testScalculate() {		boolean isT=Scalculate();		assertEquals(true, isT);	}

  

 

@Test    public void testCalculateA() {        double z=new Fuli().CalculateA(1, 3, 100, 0.03, 100);        boolean flag=0.0==z-209.2727;        assertEquals(true, flag);    }

 

转载于:https://www.cnblogs.com/15linzhijie/p/5336520.html

你可能感兴趣的文章
武侠-event
查看>>
学习C# delegate和C# event
查看>>
把XML文件转换为字符串
查看>>
AD域的唯一ID字段uSNCreated
查看>>
Ubuntu 12.04中文输入法的安装
查看>>
Linux MySQL-Workbench安装
查看>>
jQuery的.live()和.die()[转]
查看>>
hdu_2002_计算球体积_解题报告
查看>>
连接数据库通过配置文件app.config
查看>>
赛星软件---智能视频分析事件检测
查看>>
【二叉树遍历】中序
查看>>
一个完整的类用来读取OpenSSL生成的pem格式的x509证书
查看>>
Delphi调用WebService(通过SoapHeader认证)经验总结
查看>>
2014年最新世界各国面积排名(172个国家)
查看>>
socket编程演示样例(多线程)
查看>>
C++ 初始化与赋值
查看>>
碰到的异常
查看>>
TOMCAT 关闭报错:Tomcat did not stop in time. PID file was not removed
查看>>
Android对话框-上篇-之系统对话框
查看>>
利用Segue在视图控制器间传值的问题
查看>>