结对项目报告

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

二、预计PSP及实际PSP对比展示

 

SP2.1

    Personal Software

       Process Stages

            Time

     SeniorStudent(h)

 Time

SDE(h)

           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

三、看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节收获

(1)information hiding:看了这篇博客  https://blog.csdn.net/gongchuangsu/article/details/53895916 

  1. 隐藏复杂度:这样你就不用再去应付它,除非你要特别关注的时候;
  2. 隐藏变化源:这样当变化发生时,其影响就能被限制在局部范围内。复杂度的根源包括复杂的数据类型、文件结构、布尔判断以及晦涩的算法等等
  3. 信息隐藏的价值:信息隐藏有着独特的启发力,它能够激发出有效的设计方案。信息隐藏同样有助于设计类的公开接口。在设计的所有层面上,都可以通过询问该隐藏些什么来促成好的设计决策 养成问“我该隐藏些什么?”的习惯,你会惊奇的发现,有很多棘手的设计难题都会在你面前化解

(2)Interface Design:运用接口编程,对出题模块和计算模块设计接口增强了程序的可扩展性,可维护性

(3)Loose Coupling:Loose Coupling即松耦合,耦合程度越高,模块与模块之间的联系性就更高,系统的灵活性就越低,报错率就更高。我们在设计过程中尽可能地让算式的产生和计算,优先级判断相互独立,但是我们目前使用的算法还可能出现性能方面的不稳定性(一般出现在加减乘除带括号运算的情况中),在程序设计中将出题模块、计算模块、运算符判断模块等均封装到不同的方法中,降低程序的耦合度

四、计算机模块接口的设计与实现

运用了GUI,代码中通过类之间的相互调用实现了相应的功能

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


 

六、计算机部分单元测试展示

代码覆盖率:

七、计算机部分异常处理说明

1.输出值异常

:

2.运算符异常

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

系统结构图:

预计实现的界面:

 

九、界面模块与计算机模块对接

 

 

以下是部分GUI代码展示:

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 finishActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_finishActionPerformed
// TODO add your handling code here:
rightanswer.setText("");
int correct = 0;
int fault = 0;
String[] anslist = enter2.getText().split("\n");
for (int i = 0; i < Answer.size(); i++) {
if (Answer.get(i).equals(anslist[i])) {
correct++;
rightanswer.append( "正确!答案是:"+Answer.get(i)+"\n");
} else {

rightanswer.append( " 错误!正确答案是:"+Answer.get(i)+"\n");
fault++;

}
}
String toDate = simpleFormat.format(new Date());
try {
to = simpleFormat.parse(toDate).getTime();
} catch (ParseException ex) {
Logger.getLogger(sizeyunsuan.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println((float) ((to - from) / (1000 * 60 * 60)));
if (language == 1) {
resultprintf.setText("答对" + correct + "题,正确率:" + (float) correct / (correct + fault) * 100 + "%,花费时间:" + (int) ((to - from) / (1000)) + "秒");
} else if (language == 2) {
resultprintf.setText("答對" + correct + "題,正確率:" + (float) correct / (correct + fault) * 100 + "%,花費時間:" + (int) ((to - from) / (1000)) + "秒");
} else if (language == 3) {
resultprintf.setText("Answer correct " + correct + "questions, correct rate:" + (float) correct / (correct + fault) * 100 + "%,Spend time:" + (int) ((to - from) / (1000)) + "s");
}
// for (int i = 0; i < Answer.size(); i++) {
// Answer.remove(i);
// anslist = null;
}
// }//GEN-LAST:event_finishActionPerformed
private void startActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startActionPerformed
// TODO add your handling code here:
String num = enter1.getText();
int n = 0;
try {
n = Integer.parseInt(num);
} catch (NumberFormatException e) {
if (language == 1) {
resultprintf.setText("输入错误!请重新输入");
} else if (language == 2) {
resultprintf.setText("輸入錯誤!請重新輸入");
} else if (language == 3) {
resultprintf.setText("input error! please enter again");
}
}

int m = (int) (Math.random() * n);//随机整数题目和分数题目的题量
for (int i = 0; i < (n - m); i++) {//先随机出整数题型
Random random = new Random();


十、描述结对过程并提供照片

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

十 一、结对项目优缺点

结对的优点:

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

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

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

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

结对的缺点:

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

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

我(赵瑞雪)的优点:比较有耐心,曾过项目经验识,能出一些新颖的点子,合作过程中积极向上+乐观

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

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

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

最后总结:

首先,我要谢谢我的小伙伴,因为她带给我学习过程中相互讨论相互学习的感觉,使我们都能投入到学习当中去,用我们共同的力量去寻求更好的解决问题的方法。通过结对学习,使我们之间受益匪浅。  两个人合作还可以发现多方身上的优点,找出自己身上的不足,并能相互监督让彼此变得更好,还可以彼此分享好的学习经验,所以我们认为两个人合作的效率远远大于一个人。在交流与学习的过程中,既掌握了知识,又学到了他人的一些思想与方法,这是我觉得本次实验中学到的最重要的东西!通过这次结对编程的经历我对编程也有了更进一步的了解:

1. 每个人对编写代码的想法都是不同

2. 对同一个问题(即使很小的问题)从多个角度思考,能有不同的认识

4. 结对编程对程序的质量有明显的提升

5. 在编写程序中多个人的想法、思路对程序功能有不同的实现方法

通过这次编程,我觉得能够带来1+1>2的效果,之前一个人做的时候,遇到不懂得问题时,就会陷入迷茫。当两个人一起编程时,有不懂的还可以一起讨论,说出自己的意见,也为整个编程过程节约了时间,除此之外,两个人一起合作时就会产生更多更好的想法,可以更好的优化整个项目的设计,遇到问题时可以相互帮助解决问题,效率也比较高!

posted @ 2018-04-10 08:27  赵瑞雪  阅读(221)  评论(2编辑  收藏  举报