1.第一階段目標 - 把計算的功能封裝成類。
2.設計測試用例:用白盒與黑盒測試設計技術,為計算核心設計測試用例。
3.在實驗環境中(如MyEclipse整合開發環境+Junit測試框架)執行測試用例,分析測試結果,找出程式問題,給出改進前後的程式碼對照。
結對子:
201306114454 陳汝婷 http://home.cnblogs.com/u/chenruting/
201306114448 練麗雲 http://i.cnblogs.com/EditPosts.aspx?opt=1
1 //Test.java 2 import java.awt.event.ActionEvent; 3 import java.awt.event.ActionListener; 4 5 import javax.swing.JFrame; 6 7 import java.awt.GridLayout; 8 import java.awt.GridBagLayout; 9 10 import javax.swing.JToolBar; 11 import javax.swing.JLabel; 12 13 import java.awt.Color; 14 15 import javax.swing.JButton; 16 17 import java.awt.Font; 18 19 20 public class Test extends JFrame implements ActionListener{ 21 public JButton bt1; 22 JLabel lb1; 23 24 public Test() { 25 getContentPane().setBackground(Color.PINK); 26 setTitle("\u56DB\u5219\u8FD0\u7B97"); 27 getContentPane().setLayout(null); 28 setSize(200,200); 29 30 lb1 = new JLabel("\u6B22\u8FCE\u8FDB\u5165\u56DB\u5219\u8FD0\u7B97\u7CFB\u7EDF"); 31 lb1.setForeground(Color.BLUE); 32 lb1.setBounds(10, 10, 159, 15); 33 getContentPane().add(lb1); 34 35 bt1 = new JButton("\u5F00\u59CB"); 36 bt1.setBounds(41, 63, 98, 49); 37 getContentPane().add(bt1); 38 bt1.addActionListener(this); 39 // bt1.addActionListener(new ActionListener() { 40 // public void actionPerformed(ActionEvent arg0) { 41 // //Test1.main(null); 42 // 43 // } 44 // }); 45 46 47 setVisible(true); //將視窗設定為可視 48 setResizable(false); 49 setAlwaysOnTop(true);//設定此視窗永遠為最上方 是window的方法 50 setLocationRelativeTo(null); //讓視窗在螢幕的正中間顯示 51 52 } 53 54 55 public void actionPerformed(ActionEvent arg0) { 56 if(arg0.getSource()==bt1){ 57 setVisible(false); 58 new Test1(); 59 60 } 61 } 62 63 64 public static void main(String[] args) { 65 Test test=new Test(); 66 } 67 } 68 //Test1.java 69 import java.awt.event.ActionEvent; 70 import java.awt.event.ActionListener; 71 72 import javax.swing.JFrame; 73 import javax.swing.JButton; 74 import javax.swing.JLabel; 75 import javax.swing.JTextField; 76 77 78 79 80 public class Test1 extends JFrame implements ActionListener{ 81 private JTextField T1; 82 private JTextField T2; 83 private JTextField T3; 84 private JTextField T4; 85 private JLabel l0 ; 86 private JLabel l1; 87 private JLabel l2; 88 private JLabel label_3; 89 private JButton button,btnNewButton; 90 91 92 public long x; 93 public long y ; 94 95 96 public String s; 97 98 99 public Test1() { 100 setTitle("SI \u5219\u8FD0\u7B97"); 101 getContentPane().setLayout(null); 102 setSize(400,400); 103 btnNewButton = new JButton("\u7EE7\u7EED"); 104 btnNewButton.addActionListener(this); 105 btnNewButton.setBounds(130, 239, 93, 23); 106 getContentPane().add(btnNewButton); 107 108 l0 = new JLabel("\u8BF7\u8F93\u5165\u7B2C\u4E00\u4E2A\u6570\uFF1A"); 109 l0.setBounds(38, 64, 131, 15); 110 getContentPane().add(l0); 111 112 l1 = new JLabel("\u8BF7\u8F93\u5165\u7B2C\u4E8C\u4E2A\u6570\uFF1A"); 113 l1.setBounds(38, 89, 131, 15); 114 getContentPane().add(l1); 115 116 l2 = new JLabel("\u8BF7\u8F93\u5165\u8FD0\u7B97\u7B26\uFF1A"); 117 l2.setBounds(38, 114, 131, 15); 118 getContentPane().add(l2); 119 120 T1 = new JTextField(); 121 T1.setBounds(206, 61, 66, 21); 122 getContentPane().add(T1); 123 T1.setColumns(10); 124 T1.addActionListener(this); 125 T2 = new JTextField(); 126 T2.setColumns(10); 127 T2.setBounds(206, 86, 66, 21); 128 getContentPane().add(T2); 129 T2.addActionListener(this); 130 T3 = new JTextField(); 131 T3.setColumns(10); 132 T3.setBounds(206, 111, 66, 21); 133 getContentPane().add(T3); 134 T3.addActionListener(this); 135 136 button = new JButton("\u7ED3\u675F"); 137 button.addActionListener(this); 138 button.setBounds(264, 239, 93, 23); 139 getContentPane().add(button); 140 141 label_3 = new JLabel("\u8FD0\u7B97\u7ED3\u679C\uFF1A"); 142 label_3.setBounds(38, 139, 131, 15); 143 getContentPane().add(label_3); 144 145 T4 = new JTextField(); 146 T4.setColumns(10); 147 T4.setBounds(206, 142, 66, 21); 148 getContentPane().add(T4); 149 T4.addActionListener(this); 150 this.setVisible(true); 151 } 152 153 public static void main(String[] args) { 154 new Test1(); 155 156 Test.setDefaultLookAndFeelDecorated(false); 157 158 } 159 160 161 public void actionPerformed(ActionEvent evt) { 162 163 164 if(evt.getSource()==T1){ 165 T2.requestFocusInWindow(); 166 } 167 else if(evt.getSource()==T2){ 168 T3.requestFocusInWindow(); 169 } 170 else if(evt.getSource()==T3){ 171 T3.requestFocusInWindow(); 172 Core core=new Core(); 173 long sign=core.calc(T3.getText(), Long.parseLong(T1.getText()),Long.parseLong(T2.getText())); 174 T4.setText(String.valueOf(sign)); 175 176 } 177 else if(evt.getSource()==btnNewButton) 178 { 179 setVisible(false); 180 new Test1(); 181 182 } 183 else if(evt.getSource()==button) 184 { 185 System.exit(0); 186 } 187 188 189 } 190 } 191 //Core.java 192 import java.text.DecimalFormat; 193 import java.util.Scanner; 194 195 public class Core { 196 197 static final int NUM_MAX_OPERATOR = 1; // 最多4 個運算子 198 static final int NUM_SCALE = 2; // 數值範圍是 -1000 到 1000 199 static final int NUM_PRECISION = 3; // 精度是小數點後兩位 200 public static int i=0; 201 public long z; 202 public double calc(String s) { 203 double result = 0.0d; 204 // 這個方法中我可以計算兩個數的+ - * / 205 return result; 206 } 207 public long add(long x,long y) { 208 209 return x+y; 210 } 211 public long calc(String s, long x, long y) { 212 213 Scanner scanner = new Scanner(System.in); 214 if (s.equals("+")) { 215 z=(x+y); 216 System.out.println(z); 217 } else if (s.equals("-")) { 218 z=x-y; 219 System.out.println(z); 220 } else if (s.equals("*")) { 221 z=x*y; 222 System.out.println(z); 223 } else if (s.equals("/")) { 224 if (y != 0) { 225 z=x/y; 226 System.out.println(z); 227 } else { 228 i++; 229 try{ z=x/y;} 230 catch(Exception e){ 231 if(i<3) 232 { 233 System.out.println(e+"分母不能為零!"); 234 System.out.print("請重新輸入第二個數:"); 235 236 y = scanner.nextLong(); 237 calc(s,x,y); 238 239 } 240 else{ 241 System.out.println(i); 242 System.out.println(exit(i=3)); 243 } 244 } 245 } 246 } 247 248 249 250 251 else { 252 System.out.println("輸入異常,不符合要求!"); 253 }return z; 254 } 255 256 public String geta(){ 257 return String.valueOf(z); 258 } 259 private char[] exit(int j) { 260 // TODO 自動生成的方法存根 261 return null; 262 } 263 264 } 265 //CoreTest.java 266 import static org.junit.Assert.*; 267 268 import org.junit.Test; 269 270 271 public class CoreTest { 272 273 @SuppressWarnings("deprecation") 274 @Test 275 276 public void test() { 277 Core core = new Core(); 278 long d = core.calc("+",12589456L,25364563L); 279 assertEquals(37954019, d); 280 } 281 @Test 282 public void jianfatest() { 283 Core core = new Core(); 284 long d = core.calc("-",2,1); 285 assertEquals(1, d); 286 } 287 @Test 288 public void chengfatest() { 289 Core core = new Core(); 290 long d = core.calc("*",2,1); 291 assertEquals(2, d); 292 } 293 @Test 294 public void cftest() { 295 Core core = new Core(); 296 long d = core.calc("/",6,2); 297 assertEquals(2, d); 298 } 299 }
1.測試步驟及執行結果:
1)彈出開始框:
2)點選開始後,彈出相應的計算功能框,輸入相應資料,回車輸出結果:
(1)加法:
(2)減法
(3)乘法:
(4)除法
3)若想再繼續進行計算,則按繼續鍵,則可重新輸入資料進行計算:
4)若想結束運算,則按結束鍵即可退出視窗,結束程式!
2.單元測試:
1)加法單元測試:
2)減法單元測試:
3)乘法單元測試:
4)除法單元測試:
心得體會:
一開始換隊友又再結對子,我們是拒絕的。因為兩個人既要分工合作,又來緊密相連,不然做出來的程式碼整合不到一起是沒有用的。
但是經過幾天的合作,我覺得比上次結對子收穫更大,或許是合作的積極性提高了吧。我曾試過早上6點,就把我的隊友CALL醒,一起出來完善我們未完成好的程式。一開始我們都是不能接受的!但是,我們還是一起乖乖出來談論,一起去測試錯誤,一起去解決問題。相比之前,我覺得我學習的積極性高的,相應的心態也沒有這麼浮躁了。以前我遇到解決不了的問題,都是很煩躁的。現在就一心想靜下來,好好找出解決問題的辦法。我相信這就是團隊合作帶給我的力量和改變了我過往許多不足。雖然我們做的程式不是最好的,但是我們是最用心的。我在這裡也希望大家能得到提高。謝謝!
最後讓大家欣賞下我們團隊照片:花奶隊