结对项目

                                                              结 对 项 目

一.仓库地址等

二.PSP展示(两者对比)

三.结对编程对接口的设计

四.计算模块接口的设计与实现过程

五.计算模块接口部分的性能改进

六.计算模块部分单元测试展示

七.计算模块部分异常处理说明

八.界面模块的详细设计过程

九.界面模块与计算模块的对接

十.结对过程的描述

十一.结对编程的优缺点

十二.项目总结与改进

一.仓库地址: https://git.coding.net/Enther/newTeamwork.git

二.PSP展示。

将计划和实际的放在一张表中,更能形象直观的描述我们实际作业情况。

 

SP2.1

    Personal Software

       Process Stages

            Time 

     SeniorStudenth

 Time 

SDEh

           Planning

                 计划

5

      6

Estimate

  估计这个任务需要多少时间,规划大致步骤

                      1

                   1

         Development

                  开发

                      200

                  240

           Analysis

   需求分析 (包括学习新技术)

                       98

                   130

         Design Spec

           生成设计文档

                        0.5

                    1.5

        Design Review

               设计复审 

                         0

                    0

         Coding Standard

               代码规范 

                        1

                    1.5

             Design

               具体设计

                        2

                    2.5

             Coding

               具体编码

                       93  

                   98

           Code Review

               代码复审

                        2

                    5

              Test

                  测试

                        1.5

                    2

           Reporting

                  报告

                        4         

                    6

  • Test Report

                测试报告

                        3

                   3.5 

  • Size Measurement

              计算工作量

                        1

                     1.5   

  • Postmortem& ProcessImprovement Plan

                事后总结

       并提出过程改进计划

        1

三.结对编程对接口的设计。

信息隐藏:对于面向对象的程序设计而言,信息隐藏是一种重要的软件开发手段,它与对象的封装(encapsulation)与模块化(modularity)密切相关。在我看来,信息隐藏使得一个类把复杂的、敏感的、一旦被外界捕获可能会引起不良后果的内容封装在自身内部,这个类以外的代码得不到此类信息(通过反射等手段可能对得到),以提高程序的安全性与健壮性。

接口设计:一个好的接口能够提供给后面的程序设计一个良好的框架,在这次项目里,接口的运用使我们不必纠结于每个方法和属性,简化了测试;

松耦合:在我们的代码设计时,不用担心会破坏其它地方的代码。这种类与类之间依赖性低的设计方法,使一个类与另外一个类仿佛隔开了。当代码有改动时,可以不用大规模的改动我们的代码,我们只用定位于一个出问题的模块,然后对其进行更改就好了,而且能做到不改变其它模块的目的。

四.计算模块接口的设计与实现过程。

我们运用了类与函数。

整个代码中,包括输入出题个数,语言选择,正确率判定与时间记录等功能,在以下功能的实现中,各类被主类所调用,看上去更加简洁明了。缺点在于,界面全部呈现在一起,耦合度太高,可能会影响后期维护与更新。

五.计算模块接口部分的性能改进。

         

         

 

 以上性能分析的提高比较。可见在改进后,性能方面有一定提高

 

六.计算模块部分单元测试展示。

    

 

     代码覆盖情况

    

七.计算模块部分异常处理说明。

异常处理

输出值异常

 

 

运算符异常

 

 

八.界面模块的详细设计过程。   

以下是我们的设计思路:                                                                                                                             

 

 

相关jsp展示:

此部分为运用java.swing布局

  1   private void initComponents() {
  2         title1 = new javax.swing.JLabel();
  3         title2 = new javax.swing.JLabel();
  4         title7 = new javax.swing.JLabel();
  5         enter1 = new javax.swing.JTextField();
  6         language1 = new javax.swing.JButton();
  7         language1.setBackground(Color.LIGHT_GRAY);
  8         language2 = new javax.swing.JButton();
  9         language2.setBackground(Color.LIGHT_GRAY);
 10         language3 = new javax.swing.JButton();
 11         language3.setBackground(Color.LIGHT_GRAY);
 12         title3 = new javax.swing.JLabel();
 13         start = new javax.swing.JButton();
 14         start.setBackground(Color.gray);
 15         userAnswer = new javax.swing.JScrollPane();
 16         enter2 = new javax.swing.JTextArea();
 17         enter2.setBackground(Color.white);
 18         title5 = new javax.swing.JLabel();
 19         resultprintf = new javax.swing.JLabel();
 20         finish = new javax.swing.JButton();
 21         finish.setBackground(Color.gray);
 22         jScrollPane1 = new javax.swing.JScrollPane();
 23         question = new javax.swing.JTextArea();
 24         question.setBackground(Color.white);
 25         title4 = new javax.swing.JLabel();
 26         jScrollPane2 = new javax.swing.JScrollPane();
 27         rightanswer = new javax.swing.JTextArea();
 28         rightanswer.setBackground(Color.white);
 29         title6 = new javax.swing.JLabel();
 30         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
 31         title2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 32         title2.setText("请输入出题数目:");
 33         title2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
 34         title7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 35         title7.setText("输入范围:");
 36         title7.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
 37         title1.setFont(new java.awt.Font("微软雅黑", 0, 35)); // NOI18N
 38         title1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 39         title1.setText("四则运算  ");
 40         enter1.addActionListener(new java.awt.event.ActionListener() {
 41             public void actionPerformed(java.awt.event.ActionEvent evt) {
 42                 enter1ActionPerformed(evt);
 43             }
 44         });
 45         language1.setText("简体中文");
 46         language1.addActionListener(new java.awt.event.ActionListener() {
 47             public void actionPerformed(java.awt.event.ActionEvent evt) {
 48                 language1ActionPerformed(evt);
 49             }
 50         });
 51         language2.setText("繁體中文");
 52         language2.addActionListener(new java.awt.event.ActionListener() {
 53             public void actionPerformed(java.awt.event.ActionEvent evt) {
 54                 language2ActionPerformed(evt);
 55             }
 56         });
 57         language3.setText("English");
 58         language3.addActionListener(new java.awt.event.ActionListener() {
 59             public void actionPerformed(java.awt.event.ActionEvent evt) {
 60                 language3ActionPerformed(evt);
 61             }
 62         });
 63         title3.setText("语言");
 64         start.setText("出题");
 65         start.addActionListener(new java.awt.event.ActionListener() {
 66             public void actionPerformed(java.awt.event.ActionEvent evt) {
 67                 startActionPerformed(evt);
 68             }
 69         });
 70         userAnswer.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
 71         enter2.setColumns(60);
 72         enter2.setRows(5);
 73         enter2.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
 74         userAnswer.setViewportView(enter2);
 75         title5.setText("请输入答案:");
 76         resultprintf.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
 77         resultprintf.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
 78         finish.setText("结束");
 79         finish.addActionListener(new java.awt.event.ActionListener() {
 80             public void actionPerformed(java.awt.event.ActionEvent evt) {
 81                 finishActionPerformed(evt);
 82             }
 83         });
 84         jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
 85         question.setColumns(20);
 86         question.setRows(5);
 87         jScrollPane1.setViewportView(question);
 88         title4.setText("问题显示:");
 89         jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
 90         jScrollPane2.setToolTipText("");
 91         jScrollPane2.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
 92         rightanswer.setColumns(40);
 93         rightanswer.setRows(5);
 94         rightanswer.setCursor(new java.awt.Cursor(java.awt.Cursor.TEXT_CURSOR));
 95         jScrollPane2.setViewportView(rightanswer);
 96         title6.setText("正确答案:");
 97         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
 98         getContentPane().setLayout(layout);
 99         layout.setHorizontalGroup(
100             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
101             .addGroup(layout.createSequentialGroup()
102                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
103                     .addGroup(layout.createSequentialGroup()
104                         .addContainerGap()
105                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
106                             .addComponent(language2)
107                             .addComponent(language1)
108                             .addComponent(language3, javax.swing.GroupLayout.Alignment.TRAILING)))
109                     .addGroup(layout.createSequentialGroup()
110                         .addGap(31, 31, 31)
111                         .addComponent(title3)))
112                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
113                     .addGroup(layout.createSequentialGroup()
114                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
115                         .addComponent(finish)
116                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
117                     .addGroup(layout.createSequentialGroup()
118                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
119                             .addGroup(layout.createSequentialGroup()
120                                 .addGap(48, 48, Short.MAX_VALUE)
121                                 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
122                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
123                             .addGroup(javax.swing.GroupLayout.Alignment.CENTER, layout.createSequentialGroup()
124                                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
125                                 .addComponent(title4)
126                                 
127                                 .addGap(36, 36, 36)))
128                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
129                             .addComponent(title5)
130                             .addComponent(userAnswer, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE))
131                         .addGap(25, 25, 25)))
132                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
133                     .addComponent(title6)
134                     .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 197, javax.swing.GroupLayout.PREFERRED_SIZE))
135                 .addGap(25, 25, 25))
136             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
137                 .addContainerGap()
138                 .addComponent(resultprintf, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
139                 .addContainerGap())
140             .addGroup(layout.createSequentialGroup()
141                 .addGap(61, 61, 61)
142                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
143                     .addComponent(title1, javax.swing.GroupLayout.PREFERRED_SIZE, 269, javax.swing.GroupLayout.PREFERRED_SIZE)
144                     .addGroup(layout.createSequentialGroup()
145                         .addComponent(title2, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
146                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
147 //                             .addComponent(title7, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE)
148 //                             .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
149                         .addComponent(enter1, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)
150                         .addGap(28, 28, 28)
151                         .addComponent(start, javax.swing.GroupLayout.PREFERRED_SIZE, 59, javax.swing.GroupLayout.PREFERRED_SIZE)))
152                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
153         );
154         layout.setVerticalGroup(
155             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
156             .addGroup(layout.createSequentialGroup()
157                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
158                 .addComponent(title1)
159                 .addGap(18, 18, 18)
160                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
161                     .addComponent(start)
162                     .addComponent(enter1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
163                     .addComponent(title2, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE))
164                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 18, Short.MAX_VALUE)
165                 .addComponent(resultprintf, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)
166                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
167                     .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
168                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 77, Short.MAX_VALUE)
169                         .addComponent(title3)
170                         .addGap(18, 18, 18)
171                         .addComponent(language1)
172                         .addGap(38, 38, 38)
173                         .addComponent(language2)
174                         .addGap(48, 48, 48)
175                         .addComponent(language3)
176                         .addGap(58, 58, 58))
177                     .addGroup(layout.createSequentialGroup()
178                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
179                             .addComponent(title5)
180                             .addComponent(title4)
181                             .addComponent(title6))
182                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
183                         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER, true)
184                             .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
185                             .addComponent(jScrollPane1)
186                             .addComponent(userAnswer))
187                         .addGap(50, 50, 50)
188                         .addComponent(finish)
189                         .addGap(0, 0, Short.MAX_VALUE))))
190         );
191         pack();
192     }// </editor-fold>//GEN-END:initComponents

语言设置:

 private void language1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_language1ActionPerformed
        // TODO add your handling code here:
        language = 1;
        title1.setText("四则运算");
        //title1.setText("WELCOM TO USE THE SYSTEM");
        title2.setText("请输入出题数目:");
        title7.setText("输入范围:");
        title3.setText("语言");
        title4.setText("问题:");
        title5.setText("请输入答案:");
        title6.setText("正确答案!:");
        start.setText("出题");
        finish.setText("结束");
    }//GEN-LAST:event_language1ActionPerformed
 private void language2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_language2ActionPerformed
        // TODO add your handling code here:
        language = 2;
        title1.setText("四則運算");
        title2.setText("請輸入四則算式的數量:");
        title3.setText("語言");
        title4.setText("問題:");
        title5.setText("請輸入答案:");
        title6.setText("正確答案!:");
        start.setText("出題");
        finish.setText("結束");
    }//GEN-LAST:event_language2ActionPerformed
    private void language3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_language3ActionPerformed
        // TODO add your handling code here:
        language = 3;
        title1.setText("Arithmetic");
        title2.setText("enter number:");
        title3.setText("language");
        title4.setText("problem display:");
        title5.setText("Enter answer:");
        title6.setText("proofreader:");
        start.setText("enter");
        finish.setText("end");
    }//GEN-LAST:event_language3ActionPerformed

正确率与时间计算:

 1  try {
 2             to = simpleFormat.parse(toDate).getTime();
 3         } catch (ParseException ex) {
 4             Logger.getLogger(CalMachineSwingBuild.class.getName()).log(Level.SEVERE, null, ex);
 5         }
 6         System.out.println((float) ((to - from) / (1000 * 60 * 60)));
 7         if (language == 1) {
 8             resultprintf.setText("答对" + correct + "题,正确率:" + (float) correct / (correct + fault) * 100 + "%,花费时间:" + (int) ((to - from) / (1000)) + "秒");
 9         } else if (language == 2) {
10             resultprintf.setText("答對" + correct + "題,正確率:" + (float) correct / (correct + fault) * 100 + "%,花費時間:" + (int) ((to - from) / (1000)) + "秒");
11         } else if (language == 3) {
12             resultprintf.setText("Answer correct " + correct + "questions, correct rate:" + (float) correct / (correct + fault) * 100 + "%,Spend time:" + (int) ((to - from) / (1000)) + "s");
13         }

是否正确判断:

 1  private void finishActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_finishActionPerformed
 2         // TODO add your handling code here:
 3         rightanswer.setText("");
 4         int correct = 0;
 5         int fault = 0;
 6         String[] anslist = enter2.getText().split("\n");
 7         for (int i = 0; i < Answer.size(); i++) {
 8             if (Answer.get(i).equals(anslist[i])) {
 9                 correct++;
10                 rightanswer.append( "正确!答案是:"+Answer.get(i)+"\n"); 
11             } else {
12                 
13                 rightanswer.append( " 错误!正确答案是:"+Answer.get(i)+"\n");
14                 fault++;
15             
16             }
17         }

 

九.界面模块与计算模块的对接。

  在两模块对接部分,通过获取参数并调用的方式进行。

出题界面

 

 

结果界面

 

 

十.结对过程描述。

对于此次结对项目,我们在互相进步在完成。由于时间之间不好协调,因此我们共同作业的部分不多,前后台我们没有很细致的分工。在一起作业的过程中,感觉不再是孤军奋战。在两个人思维碰撞中,共同努力完成此次作业。

 

 

十一,结对项目优缺点。

结对项目的优缺点:

1.     程中遇到困难时双方可以互相鼓励,这要比一个人闷头苦想好的多

2.     相监督,避免了在做项目过程中有惰性

3.     替写代码,既减少了产生的bug,两个人又不会很累,效率有所提高

4.     彼此的团队协作和沟通交流的能力

结对项目的缺点:

5.     偶尔会出现分歧,会让效率下降

6.     问题,我们两个人都有各自的时间课程安排,彼此进度不一致,两个人可以一起做项目的时间不多

赵瑞雪的优点:比较有耐心,曾过项目经验识,能出一些新颖的点子

合作过程中积极向上+乐观

赵瑞雪的缺点:我的选修课比较多,时间分配上更多是需要对方来配合我的时间

王怡镔的优点:性格温和,做事踏实,善于合作,在写代码的过程中特别细心

王怡镔的缺点:Java语言基础不是特别好

 十二,项目总结与改进。

    很高兴此次能和大雪一起完成作业。在这次结对作业中,使我感受的结对编程的力量,也感受到个人的不足。对于有的方面考虑不完善,在同学的指正下得到改进。感受到结对编程促进我们共同进步。对于结对编程,首先就是工作效率得到了提高,有个人在旁边和你一起工作的时候,就比较不容易跑神儿去做跟工作无关的事情了,而且两个人一起思考问题也会更加全面,一起的讨论,可以扩充一个人的思路。但是可能还是彼此需要磨合的关系,在思路上可能不那么一致,还要讨论双方的思路,难免会多花一些时间,不过,这也有助于我们找到更好的解决方案。写代码是一个枯燥的过程,能和同伴一起交流,一同解决问题是一件挺好的事。

posted @ 2018-04-10 08:03  昔陌上  阅读(174)  评论(1编辑  收藏  举报