单元测试(第一阶段+部分第二阶段+部分第三阶段+部分第四阶段)


 

♣ 第一阶段目标

    能把计算的功能封装起来,通过测试程序API接口测试其简单的加法功能。

♣ 第二阶段目标

    通过测试程序API接口测试其简单的加法、减法、乘法、除法功能。并能看到代码覆盖率。

♣ 第三阶段目标

    通过测试程序API接口测试对于各种参数的支持。并能看到代码覆盖率。

♣ 第四阶段目标

    通过增量修改改进程序,完成对各种错误情况的处理

 


 

开发环境: Eclipse 

结对伙伴:

 

姓名学号博客地址
余雅诗(领航员)201306114453http://www.cnblogs.com/ys1101/
方俊杰(驾驶员)201306114417http://www.cnblogs.com/imfjj/

 

源程序:

  1 package operation;
  2 
  3 import java.awt.Dimension;
  4 
  5 public class Test implements ActionListener, KeyListener {
  6 
  7     private JFrame frame;
  8     private JTextField textField;
  9     private JTextField textField_1;
 10     private JTextField textField_2;
 11     private JTextField textField_3;
 12     private JTextField textField_4;
 13     private JTextField textField_5;
 14     private JTextField textField_6;
 15     private JTextField textField_7;
 16     private JButton btnNewButton;
 17     private JButton btnNewButton_1;
 18     private  DecimalFormat df;
 19     private Random r=new Random();
 20 
 21     private int five=0;//判断运算符
 22     private static double a;
 23     private static double b;
 24     private JTextField textField_8;
 25 
 26     /**
 27      * Launch the application.
 28      */
 29     public static void main(String[] args) {
 30         EventQueue.invokeLater(new Runnable() {
 31             public void run() {
 32                 try {
 33                     Test window = new Test();
 34                     window.frame.setVisible(true);
 35                 } catch (Exception e) {
 36                     e.printStackTrace();
 37                 }
 38             }
 39         });
 40     }
 41 
 42     /**
 43      * Create the application.
 44      */
 45     public Test() {
 46         initialize();
 47     }
 48 
 49     /**
 50      * Initialize the contents of the frame.
 51      */
 52     public static boolean isNumeric(String number) {
 53           for (int i = number.length(); --i >= 0;) {
 54              
 55               if (!Character.isDigit(number.charAt(i))&&number.charAt(i)!='.') {
 56                   return false;
 57               }
 58           }
 59           return true;
 60         }
 61     private void initialize() {
 62         
 63          df=new DecimalFormat(".##");//保留两位
 64          five=r.nextInt(3);
 65          a=r.nextDouble()*100;
 66          b=r.nextDouble()*100;
 67         
 68         String as=df.format(a);
 69         a=Double.parseDouble(as);
 70         String ab=df.format(b);
 71         b=Double.parseDouble(ab);
 72         frame = new JFrame();
 73         frame.setTitle("\u5C0F\u5B66\u751F\u7B80\u6613\u56DB\u5219\u8FD0\u7B97--\uFF08\u5355\u5143\u6D4B\u8BD5\u7BC7\uFF09");
 74         Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize();
 75         frame.setSize(500, 300 );
 76         frame.setLocation((screenSize.width-500 )/2, (screenSize.height-500)/2);
 77         frame.getContentPane().setLayout(null);
 78         
 79         JLabel label = new JLabel("\u9898\u76EE");
 80         label.setBounds(10, 10, 54, 15);
 81         frame.getContentPane().add(label);
 82         
 83         textField = new JTextField();
 84         textField.setBounds(46, 7, 66, 21);
 85         frame.getContentPane().add(textField);
 86         textField.setColumns(10);
 87         textField.setText(String.valueOf(a));
 88         
 89         textField_1 = new JTextField();
 90         textField_1.setBounds(139, 7, 33, 21);
 91         frame.getContentPane().add(textField_1);
 92         textField_1.setColumns(10);
 93         if(five==0)
 94         textField_1.setText("+");
 95         else if(five==1)
 96             textField_1.setText("-");
 97         else if(five==2)
 98             textField_1.setText("*");
 99         else if(five==3)
100                 textField_1.setText("/");//随机产生第一次进去的运算符号
101         
102         textField_2 = new JTextField();
103         textField_2.setBounds(207, 7, 66, 21);
104         frame.getContentPane().add(textField_2);
105         textField_2.setColumns(10);
106         textField_2.setText(String.valueOf(b));
107         
108         JLabel lblNewLabel = new JLabel("    =");
109         lblNewLabel.setBounds(283, 10, 31, 15);
110         frame.getContentPane().add(lblNewLabel);
111         
112         textField_3 = new JTextField();
113         textField_3.setBounds(322, 7, 66, 21);
114         frame.getContentPane().add(textField_3);
115         textField_3.setColumns(10);
116         
117         JLabel label_1 = new JLabel("\u7B54\u6848");
118         label_1.setBounds(10, 52, 54, 15);
119         frame.getContentPane().add(label_1);
120         
121         textField_4 = new JTextField();
122         textField_4.setEditable(false);
123         textField_4.setBounds(46, 49, 66, 21);
124         frame.getContentPane().add(textField_4);
125         textField_4.setColumns(10);
126         
127         textField_5 = new JTextField();
128         textField_5.setEditable(false);
129         textField_5.setBounds(140, 49, 33, 21);
130         frame.getContentPane().add(textField_5);
131         textField_5.setColumns(10);
132         
133         textField_6 = new JTextField();
134         textField_6.setEditable(false);
135         textField_6.setBounds(207, 49, 66, 21);
136         frame.getContentPane().add(textField_6);
137         textField_6.setColumns(10);
138         
139         JLabel lblNewLabel_1 = new JLabel("    =");
140         lblNewLabel_1.setBounds(283, 52, 31, 15);
141         frame.getContentPane().add(lblNewLabel_1);
142         
143         textField_7 = new JTextField();
144         textField_7.setEditable(false);
145         textField_7.setBounds(322, 49, 66, 21);
146         frame.getContentPane().add(textField_7);
147         textField_7.setColumns(10);
148         
149         btnNewButton = new JButton("\u9000\u51FA");
150         btnNewButton.setBounds(173, 211, 93, 23);
151         frame.getContentPane().add(btnNewButton);
152         
153         btnNewButton_1 = new JButton("\u4E0B\u4E00\u9898");
154         btnNewButton_1.setBounds(398, 6, 76, 23);
155         frame.getContentPane().add(btnNewButton_1);
156         btnNewButton.addActionListener(this);
157         
158         JLabel label_2 = new JLabel("\u60C5\u51B5");
159         label_2.setBounds(10, 106, 54, 15);
160         frame.getContentPane().add(label_2);
161         
162         textField_8 = new JTextField();
163         textField_8.setEditable(false);
164         textField_8.setBounds(46, 103, 428, 21);
165         frame.getContentPane().add(textField_8);
166         textField_8.setColumns(10);
167         btnNewButton_1.addActionListener(this);
168         frame.setResizable(false);
169     }
170 
171     
172 
173     @Override
174     public void keyPressed(KeyEvent arg0) {
175         // TODO Auto-generated method stub
176     
177         if (arg0.getKeyCode() == KeyEvent.VK_ENTER) 
178         {
179             textField_4.setText(textField.getText());
180             textField_5.setText(textField_1.getText());
181             textField_6.setText(textField_2.getText());
182         }
183     }
184 
185     @Override
186     public void keyReleased(KeyEvent e) {
187         // TODO Auto-generated method stub
188         
189     }
190     @Override
191     public void keyTyped(KeyEvent e) {
192         // TODO Auto-generated method stub
193         
194         
195     }
196     @Override
197     public void actionPerformed(ActionEvent e) {
198         // TODO Auto-generated method stub
199         if(e.getSource()==btnNewButton_1)
200         {
201             textField_4.setText(textField.getText());
202             textField_5.setText(textField_1.getText());
203             textField_6.setText(textField_2.getText());
204             
205             if(textField_1.getText().equals("+")||textField_1.getText().equals("-")||textField_1.getText().equals("*")||textField_1.getText().equals("/"))
206             {
207                 if(textField_3.getText().equals(""))
208                 {
209                     textField_8.setText("答案为空");
210                     textField_7.setText(null);
211                     textField_4.setText(null);
212                     textField_5.setText(null);
213                     textField_6.setText(null);
214                 }
215                 else
216                 {
217                     if(textField_1.getText().equals("+"))
218                     {
219                         Additive add=new Additive(Double.parseDouble(textField.getText()),Double.parseDouble(textField_2.getText()));//构造对象
220                         double c=add.Get_AaddB();
221                         String cs=df.format(c);
222                         c=Double.parseDouble(cs);
223                         System.out.print("cs="+cs+"c="+c);
224                         textField_7.setText(String.valueOf(c));
225                     }
226                     else if(textField_1.getText().equals("-"))
227                     {
228                          Subduction sub=new Subduction(Double.parseDouble(textField.getText()),Double.parseDouble(textField_2.getText()));
229                         
230                         double c=sub.Get_AsbuB();
231                         String cs=df.format(c);
232                         c=Double.parseDouble(cs);
233                     
234                         textField_7.setText(String.valueOf(c));
235                     }
236                     else if(textField_1.getText().equals("*"))
237                     {
238                          Multiplication mul=new Multiplication(Double.parseDouble(textField.getText()),Double.parseDouble(textField_2.getText()));
239                         
240                         double c=mul.Get_AmulB();
241                         String cs=df.format(c);
242                         c=Double.parseDouble(cs);
243                         textField_7.setText(String.valueOf(c));
244                     }
245                     else if(textField_1.getText().equals("/"))
246                     {
247                          Division div=new Division(Double.parseDouble(textField.getText()),Double.parseDouble(textField_2.getText()));
248                         if(div.Get_b()!=0)
249                         {
250                         double c=div.Get_AmulB();
251                         String cs=df.format(c);
252                         c=Double.parseDouble(cs);
253                             
254                             textField_7.setText(String.valueOf(c));
255                         
256                         }
257                         
258                         else
259                         {
260                         
261                             textField_8.setText("分母不能为"+0+"\n");
262                             textField_7.setText(null);
263                             textField_4.setText(null);
264                             textField_5.setText(null);
265                             textField_6.setText(null);
266                         }
267                             
268                     }
269                     //if(!textField_1.getText().equals("/"))
270                     if(this.isNumeric(textField_3.getText()))
271                     {
272                         
273                         if(Double.parseDouble(textField_3.getText())==Double.parseDouble(textField_7.getText()))
274                         {
275                         textField_8.setText("答对了");
276                         }    
277                         else
278                         textField_8.setText("答错了");                    
279                     }
280                     else
281                     textField_8.setText("答案无效");
282                     
283                 }
284                 
285                 
286             
287             }
288             else
289             {
290                 textField_8.setText("符号无效");
291                 textField_7.setText(null);
292                 textField_4.setText(null);
293                 textField_5.setText(null);
294                 textField_6.setText(null);
295             }
296             
297             
298             
299             five=r.nextInt(4);//重新设置运算
300              a=r.nextDouble()*100;
301              b=r.nextDouble()*100;
302             
303             String as=df.format(a);
304             a=Double.parseDouble(as);
305             String ab=df.format(b);
306             b=Double.parseDouble(ab);
307             textField.setText(String.valueOf(a));
308             if(five==0)
309                 textField_1.setText("+");
310                 else if(five==1)
311                     textField_1.setText("-");
312                 else if(five==2)
313                     textField_1.setText("*");
314                 else if(five==3)
315                         textField_1.setText("/");//随机产生第一次进去的运算符号
316 
317             textField_2.setText(String.valueOf(b));
318             
319         
320                 
321             textField_3.setText(null);
322                 
323         }
324         else if(e.getSource()==btnNewButton)
325         {
326             System.exit(0);
327         }
328         
329     }
330     
331 }
Test
 1 package operation;
 2 
 3 import java.text.DecimalFormat;
 4 import java.util.Random;
 5 import java.util.Scanner;
 6 
 7 public class Additive {
 8     
 9     private static double a;
10     private static double b;
11     Scanner in=new Scanner(System.in);
12     public Additive(double c,double d)
13     {
14         this.a=c;
15         this.b=d;
16     }
17     public double Get_AaddB()
18     {    
19     return a+b;
20 
21     }
22     public double Get_a()
23     {
24         return a;
25     }
26     public double Get_b()
27     {
28         return b;
29     }
30     
31     
32 
33     
34     
35 
36 }
Additive(加法)
 1 package operation;
 2 
 3 import java.util.Scanner;
 4 
 5  class Subduction {
 6     private static double a;
 7     private static double b;
 8     Scanner in=new Scanner(System.in);
 9     public Subduction(double a,double b)
10     {
11         this.a=a;
12         this.b=b;
13     }
14     public double Get_AsbuB()
15     {
16     return a-b;
17     }
18     public double Get_a()
19     {
20         return a;
21     }
22     public double Get_b()
23     {
24         return b;
25     }
26 
27 }
Subduction(减法)
 1 package operation;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Multiplication {
 6     private static double a;
 7     private static double b;
 8     Scanner in=new Scanner(System.in);
 9     public Multiplication(double a,double b)
10     {
11         this.a=a;
12         this.b=b;
13     }
14     public double Get_AmulB()
15     {
16         
17     
18     
19     return a*b;
20     }
21     public double Get_a()
22     {
23         return a;
24     }
25     public double Get_b()
26     {
27         return b;
28     }
29     
30 
31 }
Multiplication(乘法)
 1 package operation;
 2 
 3 import java.util.Scanner;
 4 
 5 public class Division {
 6     private static double a;
 7     private static double b;
 8     Scanner in=new Scanner(System.in);
 9     public Division(double a,double b)
10     {
11         this.a=a;
12         this.b=b;
13     }
14     public double Get_AmulB()
15     {
16         return a/b;
17     }
18     public double Get_b()
19     {
20         return b;
21     }
22     public double Get_a()
23     {
24         return a;
25     }
26 
27 }
Division(除法)

 


 

    软件测试是为了发现错误而执行程序的过程,或者说软件测试是根据软件开发各阶段的规格说明和程序内部结构而精心设计的一批测试用例(即输入数据及预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。

    一般Bug有3种类型:症状(Sympton)、程序错误(Fault)、根本原因(Root cause)。

    症状(Sympton)即从用户的角度看,软件出了什么问题。 例如在小学生简易四则运算中,当用户输入了某些字符后,程序错误退出,这属于用户报告,即一个Windows应用程序有时在启动时报错,程序不能运行。我们这次程序并没有出现该类Bug,如果出现了,并不代表程序有多难,而是说明我们还不够细心。

    程序错误(Fault)从代码的角度看,是代码的什么错误导致了软件的问题。例如,代码在用户答题的答案框中输入非法字符的话,系统就会访问到非法的内存地址,这个时候一个子窗口的handle为空,导致程序访问了非法内存地址,此为代码错误。

    根本原因(Root cause)是错误的根源,即导致代码错误的根本原因。例如,代码并没有确保用户答题的答案框是否有输入数值,如果没有的话,则发生在调用子类之前时就调用,因此子类的变量有时在访问时为空,导致上面提到的错误。

 


 

测试用例(黑盒测试)
测试项目名称 小学生简易四则运算--(单元测试篇)
测试人员方俊杰、余雅诗编制日期2015年4月29日
功能特性 封装;支持加减乘数算法;支持小数、负数;具备界面;具备报错处理
用例编号输入数据预期输出实际输出测试状态
1 (22.25 , p , 45.57) 67.82 NULL 符号无效
2 (1.25 , + , 2.57) 3.82 3.82  答对了
3 (87.84 , + , 17.99) 50.33 105.83 答错了
4 (5.7 , + , 53.98) NULL NULL 答案为空
5 (39.59 , + , 97.87) op 137.46 答案无效
6 (3 , - , 3) 0.0 0.0 答对了
7 (7.25 , - , 78.22) 23.87 -70.97 答错了
8 (31.74 , - , 81.93) NULL -50.19 答案为空
9 (67.18 , - , 50.95) p 16.23 答案无效
10 (88.21 , * , 67.32) 5938.3 5938.30 答对了
11 (56.46 , * , 69.8) 1024.5 3940.91 答错了
12 (41.38 , * , 93.33) NULL 3862.0 答案为空
13 (3.18 , * , 93.47) jj 297.23 答案无效
14 (67.04 , / , 0) 0 NULL 分母不能为0
15 (18.43 , / , 1) 18.43 18.43 答对了
16 (56.82 , / , 1) 56.81 56.82 答错了
17 (42.35 , / , 72.3) NULL 0.59 答案为空
18 (60.44 , / , 47.37) ys 1.28 答案无效
测试结果分析    与预期结果一致

 


 

运行结果:

1:; 2:; 3:

 

4:; 5:; 6:

 

7:; 8:; 9:

 

10:; 11:; 12:

 

13:; 14:; 15:

 

16:; 17:; 18:

 


 

收获与感悟:

 (  在这一次结对子小项目中  )

  • 我主要充当领航员的作用,我的同伴充当着驾驶员的作用,有时我们也互相交换着彼此的角色。
  • 我的同伴主要是对程序进行编码,然后由我来提出见解、后期调试、撰写文档。
  • 这一次的结对子中,我们一开始组员有4个,有时候我们一起讨论,然后我们分别两两结对,经过讨论后,最后决议出队友成员。
  • 这一次的结对,无疑比上一次(即第一次)轻松了很多,因为彼此熟悉了,并有了结对子的经验。
  • 其实,之前学习JAVA的时候,只是略懂封装的概念,很少去操作,也没有像这一次这样仔细的进行单元测试和调试测试用例,这一次的学习,让我更深入的接触了学习JAVA的细节,对JAVA更有兴趣了。
  • 我和队友首先在课余时间先商量具体的工作,然后在课堂时间编程,在课后我们一起到了图书馆一起工作,互相提醒对方。
  • 当完成程序的所有编写、测试、撰稿后,很有成就感。
  • 依然非常期待下一次的结对项目,因为在结对子项目中,我们可以彼此学习到很多,真的很多。

 


 

结对工作过程:

 


 

转载于:https://www.cnblogs.com/ys1101/p/4466654.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值