软件测试报告1
软件测试技术 课 程 设 计
设计题目 组长姓名 组长学号
计算机系统测试
卫丽
1242157136
专业班级 12计科(1)班
指导教师
钱丽
信息工程学院 院 计科 系
2015年 4 月 12 日
我们的小组分工安排表
摘 要
在计算机日益普及的今天,对各个部门而言,以前的手工检索已不能满足人们的要求,为了便于结算的管理,采用JAVA技术生成的计算器系统将会极大地方便人们日常的结算资金的管理,也使工作人员从繁忙、复杂的工作进入到一个简单、高效的工作中。
基于这个问题,开发了计算器系统,系统采用JAVA技术,实现了数字的基本运算的计算器功能。该系统的开发由系统概述、系统设计过程、系统测试部分三个重要部分组成,并基于软件测试技术中的白盒和黑盒测试技术对系统做了一系列测试,使系统实施性变得更加可靠。
关键字:计算器系统;JAVA技术;软件测试技术
目录
一 系统概述 ....................................................... 5
1系统运行环境要求............................................... 5 2系统实现的功能................................................. 5 3系统界面功能描述............................................... 5 二 系统设计过程 ................................................... 6
1系统设计构思图................................................. 6 2系统功能流程图................................................. 7 3系统静态代码分析............................................... 8
3.1按钮及文本框的设置 ....................................... 8 3.2运算符的判断 ............................................. 9 4系统运行截面图................................................ 12 三 系统测试部分 .................................................. 13
1白盒测试用例的设计............................................ 13 1.1初始化界面为零测试.......................................... 13
1.2数字按键测试 ............................................ 13 1.3清零键测试 .............................................. 13 1.4小数点键测试 ............................................ 14 2黑盒测试用例的设计............................................ 14
2.1被除数为零测试 .......................................... 14 2.2按键和运算符测试 ........................................ 14
四 心得体会 ...................................................... 16 参考文献 ......................................................... 17 附录 系统源代码 .................................................. 18
一 系统概述
我们此次设计的简易计算器系统是基于JAVA技术来实现的,主要实现最基本计算器运算功能,下面我们将从以下几个部分来向大家展示我们设计的这个系统。
1系统运行环境要求
操作系统:WIN XP或更高版本 开发语言:java 开发工具:eclipse
2系统实现的功能
系统能完成四则混合“+”、“-”、“*”、“/”和求倒数、求平方根和简单函数运算,并且计算器能够根据输入的运算公式,自动计算出相应的结果。同时完成计算器中的清除、逐个删除、和存储等功能。
3系统界面功能描述
(1) 界面布局:创建三个面板,先将数字键和功能键分别放在两个面板上,并采用网
格状布局,再将文本框放置在另一个面板上,采用系统自动的布局格式,并且将它们分别添加监视器ActionListener;最后将三个面板放置在窗体上,并采用边框式的布局格式就可以了;
(2) 归零键:表示输入的数字,第一个数字将为零; (3) 数字键:表示选择要输入的数字;
(4) 运算符键:表示选择要进行怎样的运算。
二 系统设计过程
本系统主要从以下几个方面来设计和构思的,以简单和方便为主题来实现计算器的基本功能,首先我们对系统的界面图进行构思,然后对其实现怎样的功能进行逻辑分析,最后编写调试程序,模拟计算器完善系统的功能。
1系统设计构思图
2系统功能流程图
3系统静态代码分析
3.1按钮及文本框的设置
/** 计算器上的键的显示名字 */
private final String[] KEYS = {
private final String[] COMMAND = {
private final String[] M = {
private JButton keys[] = new JButton[KEYS.length]; /** 计算器上的功能键的按钮 */
private JButton commands[] = new JButton[COMMAND.length]; /** 计算器左边的M的按钮 */
private JButton m[] = new JButton[M.length]; /** 计算结果文本框 */
private JTextField resultText = new JTextField(
// 文本框中的内容采用右对齐方式
resultText.setHorizontalAlignment(JTextField.RIGHT); // 不允许修改结果文本框 resultText.setEditable(false); // 设置文本框背景颜色为白色
resultText.setBackground(Color.white);
// 初始化计算器上键的按钮,将键放在一个画板内 JPanel calckeysPanel = new JPanel();
// 用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3)); for (int i = 0; i
keys[i] = new JButton(KEYS[i]); calckeysPanel.add(keys[i]);
keys[i].setForeground(Color.blue); }
// 运算符键用红色标示,其他键用蓝色表示 keys[3].setForeground(Color.red); keys[8].setForeground(Color.red); keys[13].setForeground(Color.red); keys[18].setForeground(Color.red);
keys[19].setForeground(Color.red);
// 初始化功能键,都用红色标示。将功能键放在一个画板内 JPanel commandsPanel = new JPanel();
// 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
commandsPanel.setLayout(new GridLayout(1, 3, 3, 3)); for (int i = 0; i
commands[i] = new JButton(COMMAND[i]); commandsPanel.add(commands[i]); commands[i].setForeground(Color.red); }
// 初始化M键,用红色标示,将M键放在一个画板内 JPanel calmsPanel = new JPanel();
// 用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calmsPanel.setLayout(new GridLayout(5, 1, 3, 3)); for (int i = 0; i
m[i] = new JButton(M[i]); calmsPanel.add(m[i]);
m[i].setForeground(Color.red); }
3.2运算符的判断
private void handleOperator(String key) {
if (operator.equals(
// 除法运算
// 如果当前结果文本框中的值等于0 if (getNumberFromText() == 0.0) {
// 操作不合法
operateValidFlag = false;
resultText.setText(
resultNum /= getNumberFromText(); }
}
else if (operator.equals(
// 倒数运算
if (resultNum == 0.0) {
// 操作不合法
operateValidFlag = false;
resultText.setText(
resultNum = 1 / resultNum; } }
else if (operator.equals(
// 加法运算
resultNum += getNumberFromText(); }
else if (operator.equals(
// 减法运算
resultNum -= getNumberFromText(); }
else if (operator.equals(
// 乘法运算
resultNum *= getNumberFromText(); }
else if (operator.equals(
// 平方根运算
resultNum = Math.sqrt(resultNum); }
else if (operator.equals(
// 百分号运算,除以100 resultNum = resultNum / 100; }
else if (operator.equals(
// 正数负数运算
resultNum = resultNum * (-1);
}
else if (operator.equals(
// 赋值运算
resultNum = getNumberFromText(); }
if (operateValidFlag) {
// 双精度浮点数的运算 long t1; double t2;
t1 = (long) resultNum; t2 = resultNum - t1; if (t2 == 0) {
resultText.setText(String.valueOf(t1)); } else {
resultText.setText(String.valueOf(resultNum)); } }
// 运算符等于用户按的按钮 operator = key; firstDigit = true;
operateValidFlag = true; }
4系统运行截面图
初始界面:
三 系统测试部分
系统的测试部分我们主要从黑盒和白盒测试两种方面来进行的,下面是我们设计的测试用例及运行的结果图。
1白盒测试用例的设计 1.1初始化界面为零测试
1.2数字按键测试
当按下数字键3时:
1.3清零键测试
当按下清零键时:
1.4小数点键测试
当按下数字键为0.35时:
2黑盒测试用例的设计 2.1被除数为零测试
2.2按键和运算符测试
测试用例1运行结果: 测试用例2运行结果:
测试用例3运行结果: 测试用例4运行结果:
测试用例5运行结果:
测试用例7运行结果:
测试用例6运行结果:
测试用例8运行结果:
四 心得体会
这学期的软件测试课程,着实让我们学到了很多知识,不仅是简单的测试技术也有软件的开发方面,我们学会了自己去动手设计开发一个小的软件,并对它进行测试直至完善正常运行。
首先,我们刚刚开始做这个计算器时,也感觉到了一点的困难,因为编写代码的能力确实很差,但是通过我们团队一起查资料,收集各方面计算器系统编写材料,我们最终成功的实现了比较简易的计算器系统。
界面布局是我们调试很长的一个部分,因为我们一直没法让按键和文本框调至到我们想要的位置,所以耗费了我们很长时间,但是我们仍没有放弃,不停地重试和尝试新的措施,最终在我们共同坚持不懈地努力下我们实现了我们想要的布局格式。这也让我们知道了,在遇到不同的困难时,都要努力的去奋斗和坚持的去研究,最终是会收获成功的果实的。
此次试验,使我们团队每个人都有着深深的体会,那就是知识是在实践中获得的,成功是在解决每一个困难中收获的,而提高编程能力是在不断研究代码的过程中潜移默化成就的。
参考文献
[1] 朱少民《软件测试》[M].人民邮电出版社,2009.8;
[2] 章精设《Flash ActionScript 3.0》[M].清华大学出版社,2008.10; [3] 史济民《软件工程》[M].北京高等教育出版社,2002.12; [4] 刘纯录.《软件评测师教程》[M].清华大学出版社,2006.03;
[5] 崔启亮/ 胡一鸣.《国际化软件测试》[M].电子工业出版社,2006.04 [6] 朱少民《软件测试方法和技术》[M].清华大学出版社,2005.02; [7] Glenford.Myers《软件测试的艺术》[M].机械工程出版社,2006. [8] 朱福喜.《Java语言程序设计》(第二版).科学出版社 [9] 陈国军等.《Java程序设计基础》(第二版).清华大学出版社 [10]Deitel. 《Java大学基础教程》(第六版).电子工业出版社 [11] 於东军[等]著.《java2技能百练》中国铁道出版社.2004 [12] 宁书林等.《Java程序设计基础》(第二版).清华大学出版社
附录 系统源代码
package jb;
import java.awt.BorderLayout; // 边框式布局定义 import java.awt.Color; // 布局颜色定义
import java.awt.GridLayout; // 网格式布局定义 import java.awt.event.ActionEvent; // 动作事件定义 import java.awt.event.ActionListener; // 监听器定义 import javax.swing.JButton; // 按钮定义 import javax.swing.JFrame; // 窗体定义 import javax.swing.JPanel; // 面板定义
import javax.swing.JTextField; // 文本框定义
public class Calculate extends JFrame implements ActionListener { private static final long serialVersionUID = -[***********]1L; // 消除版本兼容性 private final String[] KEYS = {
private final String[] COMMAND = {
/** 计算器左边的M的显示名字 */
private final String[] M = {
private JButton keys[] = new JButton[KEYS.length]; /** 计算器上键的按钮 */
private JButton commands[] = new JButton[COMMAND.length]; /** 计算器上的功能键的按钮 */
private JButton m[] = new JButton[M.length]; /** 计算器左边的M的按钮 */ private JTextField resultText = new JTextField(
// 标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字
private boolean firstDigit = true; // 计算的中间结果。
private double resultNum = 0.0; // 当前运算的运算符
private String operator =
private boolean operateValidFlag = true; public Calculate() {
super();
// 初始化计算
init();
// 设置计算器的背景颜色
this.setBackground(Color.LIGHT_GRAY); this.setTitle(
// 在屏幕(500, 300)坐标处显示计算器 this.setLocation(500, 300); // 不许修改计算器的大小 this.setResizable(false);
// 使计算器中各组件大小合适 this.pack(); // 调整外部容器的大小 }
/* 初始化计算器 */ private void init() {
// 文本框中的内容采用右对齐方式
resultText.setHorizontalAlignment(JTextField.RIGHT); // 不允许修改结果文本框 resultText.setEditable(false); // 设置文本框背景颜色为白色
resultText.setBackground(Color.white);
// 初始化计算器上键的按钮,将键放在一个画板内 JPanel calckeysPanel = new JPanel();
// 用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calckeysPanel.setLayout(new GridLayout(4, 5, 3, 3)); for (int i = 0; i
keys[i] = new JButton(KEYS[i]); calckeysPanel.add(keys[i]);
keys[i].setForeground(Color.blue); }
// 运算符键用红色标示,其他键用蓝色表示
keys[3].setForeground(Color.red); keys[8].setForeground(Color.red); keys[13].setForeground(Color.red); keys[18].setForeground(Color.red); keys[19].setForeground(Color.red);
// 初始化功能键,都用红色标示。将功能键放在一个画板内 JPanel commandsPanel = new JPanel();
// 用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
commandsPanel.setLayout(new GridLayout(1, 3, 3, 3)); for (int i = 0; i
{
commands[i] = new JButton(COMMAND[i]); commandsPanel.add(commands[i]); commands[i].setForeground(Color.red); }
// 初始化M键,用红色标示,将M键放在一个画板内 JPanel calmsPanel = new JPanel();
// 用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素
calmsPanel.setLayout(new GridLayout(5, 1, 3, 3)); for (int i = 0; i
m[i] = new JButton(M[i]); calmsPanel.add(m[i]);
m[i].setForeground(Color.red); }
// 下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部, // 将文本框放在北部,将calms画板放在计算器的西部。
// 新建一个大的画板,将上面建立的command和calckeys画板放在该画板内 JPanel panel1 = new JPanel();
// 画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3素 panel1.setLayout(new BorderLayout(3, 3)); panel1.add(
// 建立一个画板放文本框 JPanel top = new JPanel();
top.setLayout(new BorderLayout()); top.add(
// 整体布局
getContentPane().setLayout(new BorderLayout(3, 5)); getContentPane().add(
keys[i].addActionListener(this); }
for (int i = 0; i
commands[i].addActionListener(this);
for (int i = 0; i
{
m[i].addActionListener(this);
}
}
/* 处理事件*/
public void actionPerformed(ActionEvent e)
{
// 获取事件源的标签
String label = e.getActionCommand();
if (label.equals(COMMAND[0]))
{
// 用户按了
handleBackspace();
}
else if (label.equals(COMMAND[1]))
{
// 用户按了
resultText.setText(
}
else if (label.equals(COMMAND[2]))
{
// 用户按了
handleC();
}
else if (
{
// 用户按了数字键或者小数点键
handleNumber(label);
// handlezero(zero);
}
else
{
// 用户按了运算符键
handleOperator(label);
}
}
/* 处理Backspace键被按下的事件 */
private void handleBackspace()
{
String text = resultText.getText();
int i = text.length();
if (i > 0)
// 退格,将文本最后一个字符去掉
text = text.substring(0, i - 1);
if (text.length() == 0)
{
// 如果文本没有了内容,则初始化计算器的各种值
resultText.setText(
firstDigit = true;
operator =
}
else
{
// 显示新的文本
resultText.setText(text);
}
}
}
/* 处理数字键被按下的事件*/
private void handleNumber(String key)
{
if (firstDigit)
{
// 输入的第一个数字
resultText.setText(key);
}
else if ((key.equals(
{
// 输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的面 resultText.setText(resultText.getText() +
}
else if (!key.equals(
{
// 如果输入的不是小数点,则将数字附在结果文本框的后面
resultText.setText(resultText.getText() + key);
}
// 以后输入的肯定不是第一个数字了
firstDigit = false;
}
/*处理C键被按下的事件 */
private void handleC()
{
// 初始化计算器的各种值
resultText.setText(
firstDigit = true;
operator =
}
/*处理运算符键被按下的事件 */
private void handleOperator(String key)
{
if (operator.equals(
{
// 除法运算
// 如果当前结果文本框中的值等于0
if (getNumberFromText() == 0.0)
{
// 操作不合法
operateValidFlag = false;
resultText.setText(
}
else
{
resultNum /= getNumberFromText();
}
}
else if (operator.equals(
{
// 倒数运算
if (resultNum == 0.0)
{
// 操作不合法
operateValidFlag = false;
resultText.setText(
}
else
{
resultNum = 1 / resultNum;
}
}
else if (operator.equals(
{
// 加法运算
resultNum += getNumberFromText();
}
else if (operator.equals(
{
// 减法运算
resultNum -= getNumberFromText();
}
else if (operator.equals(
{
// 乘法运算
resultNum *= getNumberFromText();
}
else if (operator.equals(
{
// 平方根运算
resultNum = Math.sqrt(resultNum);
}
else if (operator.equals(
{
// 百分号运算,除以100
resultNum = resultNum / 100;
}
else if (operator.equals(
{
// 正数负数运算
resultNum = resultNum * (-1);
}
else if (operator.equals(
{
// 赋值运算
resultNum = getNumberFromText();
}
if (operateValidFlag)
{
// 双精度浮点数的运算
long t1;
double t2;
t1 = (long) resultNum;
t2 = resultNum - t1;
if (t2 == 0)
{
resultText.setText(String.valueOf(t1));
}
else
{
resultText.setText(String.valueOf(resultNum));
}
}
// 运算符等于用户按的按钮
operator = key;
firstDigit = true;
operateValidFlag = true;
}
/* 从结果文本框中获取数字 */
private double getNumberFromText()
{
double result = 0;
try
{
result = Double.valueOf(resultText.getText()).doubleValue();
}
catch (NumberFormatException e)
{
}
return result;
}
public static void main(String args[])
{
Calculate calculator1 = new Calculate();
calculator1.setVisible(true);
calculator1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
【部分语句解释】
1)private static final long serialVersionUID = -[***********]1L: 用来表明类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。为了在反序列化时,确保类版本的兼容性,最好在每个要序列化的类中加入private static final long serialVersionUID这个属性,具体数值自己定义。
2) Backspace - 逐个删除
CE - 全部清除
C - 一次运算完成后,单击“C”按钮即可清除当前的运算结果,再次输入时可开始新的运算
MC - 是清除储存数据
MR - 是读取储存的数据
MS - 将所显示的数存入存储器中,存储器中原有的数据被冲走
M+ - 是计算结果并加上已经储存的数