目录:

一.致搭档(含项目地址)

二.PSP(planning)

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

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

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

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

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

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

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

十.结对过程的描述

十一.结对编程的优缺点

十二.PSP(actual)


一、致搭档:

      队友:李庭娟(我很喜欢把这位队友叫娟子,感觉很亲切)

首先非常非常感谢这位结对搭档——娟子,从最初组队到如今合作,始终非常信任我,鼓励我。性格洒脱,热情亲切。跟她合作过程中,真的没有一丝分歧。这些天和我一起讨论,分工,合作这个作业。都说“男女搭配,干活不累”,我是真的体会到了。完成项目的整个过程中,她始终积极主动的分担任务。我倒是很惭愧,由于个人能力的原因,不能承担着一个男生应该承担的任务。临近截止日期,我还催着她和我一起熬夜赶项目,非常非常不好意思。在此,衷心地向我的搭档说句感谢,很开心能有一次结对项目的作业,非常开心能有一次这样的机会去深入认识了解身边的同学,最最开心的是两个人在这个过程中的彼此信任与支持。不管结果怎么样,这是一次不同寻常的学习经历,不仅限于知识的学习和项目的制作,还有的是同伴的合作。

我的Coding.net源码仓库地址:https://git.coding.net/Vsmile1997/pairworkend.git

搭档博客地址:http://www.cnblogs.com/tingjuanli/p/8746012.html

二、PSP(planning)

PSP

任务内容

计划时间(min)

Planning

计划

30

Estimate

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

10

Development

开发

780

Analysis

需求分析

23

Design Spec

生成文档

0

Design Review

设计复审

0

Coding Standard

代码规范

7

Design

具体设计

40

Coding

具体编码

210

Code Review

代码复审

30

Test

测试

30

Reporting

报告

160

Test Report

测试报告

180

Size Measurement

计算工作量

40

Postmortem & Process Improvement Plan

事后总结, 并提出过程改进计划

60

 

三、结对编程中对接口的设计

1、Information Hiding

  信息隐藏是结构化设计于面向对象设计的基础。在结构化中函数的概念和面向对象的封装思想都来源于信息隐藏。信息隐藏原则的主要应用有:

(1)多层设计中的层与层之间加入接口层;

(2)所有类与类之间都通过接口类访问;

(3)类的所有数据成员都是private,所有访问都是通过访问函数实现的。

我们的做法:信息隐藏的目的主要是隐藏复杂度,它所具有的封装思想就是体现了这个目的。我们把程序分解为各个模块(主模块,生成算式模块,计算模块等),隐藏每个模块具体算法的实现原理,而只需要知道每个模块的功能,按需调用即可。

2、Interface Design

接口设计,我理解的接口就是契约,一种职责。在我们的项目中使用接口指明了多个类需要实现的方法,不需要知道对象对应的类,就可以知道对象之间的交互界面,提高了编程效率。

3、Loose Coupling

松耦合就是降低系统部件和部件之间的耦合性,也就是降低部件的依赖性,使得部件之间相互独立,这样对于日后的系统维护以及扩展都是有好处的。因此,耦合程度,模块与模块之间的联系性就更高,系统的灵活性就越低,报错率就更高。我们的理解就是,松耦合归根结底就是一种“模块化”编程思想,将项目尽可能多的分为相互独立的几个模块,便于调用和实现优化。我们在项目中也力求实现模块化处理,做到松耦合。

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

方法说明:

Command:调用其它方法,实现整个程序的功能;

arithmetic()方法:综合了不同定制要求的算式方法;

Simple()方法:产生满足定制需求的加减算式;

OnlyMD()方法:产生满足定制需求的加减乘除算式

OnlyBra()方法:产生满足定制需求的含括号的加减算式;

BothMDBra()方法:产生满足定制需求的含括号的加减乘除算式;

Youxianji()方法:处理计算结果过程中的优先级问题;

Stack()方法:处理后缀表达式的运算顺序问题;

login.java,ShowGridLayout.java,MyExGUI.java等实现GUI面板的Java文件。

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

   1.性能分析改进

         在整体编程结束后,进行性能分析与改进是非常有必要的。因为在小规模的数据下或者是一般情况下,功能的实现是不太会涉及到优化算法的。但是,个别特例或者是大规模的数据往往会导致程序报错,这就要求我们需要对程序进行性能的优化改进。比如,我们在生成算式过程中,由于上下限和算式个数选择上偏于极端情况,算式的结果“迟迟”无法生成,CPU占有率极大。因此我们在算法中做了异常处理,并且规范输入,这样一来,软件的使用性能上就得到了优化改进。

   2.性能分析截图

  项目总体分析图,从内存,多线程,CPU等方面分析了计算模块的性能,截图如下:

性能分析过程截图:

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

测试Command.java类(下图的单元测试中的Main即代码中的Command,截图时未更名):

package test;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test; public class CommandTest { private static Command con = new Command();
@Before
public void setUp() throws Exception {
} @Test
public void testSimple() {
con.Simple(2,50,3);//产生2个50以内最多3个运算符的算式
} @Test
public void testOnlyMD() {
con.OnlyMD(1,500,2);//产生1个500以内最多2个运算符的算式
} @Test
public void testOnlyBra() {
con.OnlyBra(10,50,4,1);//故意输入参数错误,检验单元测试报错
} @Test
public void testBothMDBra() {
fail("Not yet implemented");//未编写单元测试函数,单元测试失败
} }

代码覆盖率:

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

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

1.登陆面板:

单用户登陆:username:1 password:1

对应部分代码展示:

 JButton b_log=new JButton("登录");
b_log.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
//获取用户名和密码,进行校验
String myUsername=tf_name.getText();
String myPassword=password.getText();
if(myUsername.equals("1")&& myPassword.equals("1")){
JOptionPane.showMessageDialog(null, "登陆成功!");
f.dispose();
//new MyExGUI();
new ShowGridLayout(); }
else{
JOptionPane.showMessageDialog(null, "账号或密码错误!");
tf_name.setText( "");
password.setText( "");
} }
});

2.定制面板:

通过输入合理有效的数值,定制不同需求的题目

对应部分代码展示:

 JButton b_enter=new JButton("进入");
b_enter.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { String myNum=tf_num.getText();
int n = Integer.parseInt(myNum); String myLow=tf_low.getText();
int ml = Integer.parseInt(myLow); String myUp=tf_up.getText();
int mu = Integer.parseInt(myUp); String myOp=tf_op.getText();
int o = Integer.parseInt(myOp); String myMul=tf_mul.getText(); String myBak=tf_bak.getText(); if((n>0&& n<10001) && (ml>0&& ml<101) && (mu>=50&&mu<1001) && (o>0&&o<11) &&
( myMul.equals("0")|| myMul.equals("1") )&&
( myBak.equals("0")|| myBak.equals("1") )
){
JOptionPane.showMessageDialog(null, "欢迎使用!");
f.dispose();
new MyExGUI(n,ml,mu,o,myMul,myBak); }
else{
JOptionPane.showMessageDialog(null, "你输入的数据有错!");
tf_num.setText( "");
tf_low.setText( "");
tf_up.setText( "");
tf_op.setText( "");
tf_mul.setText( "");
tf_bak.setText( "");
} }
});

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

UI的整体设计思路:

我们想设计登陆,定制,菜单,统计4个面板:

(1)登陆页面包含用户的名称和密码以及多种语言的选择;

(2)定制页面包含具体不同需求的题目定制以及输入异常数据的提示处理;

(3)菜单页面包含启动开始答题项,文件的保存,本地文件的上传的功能;

(4)统计页面包含对答题结果的统计和分析,给出分数柱状图。

部分图片展示如下:

文件的上传

题目解答:

十、描述结对的过程,提供非摆拍的两人在讨论的结对照片。

1.一开始本打算做网页版的,但是前端我们都不大熟悉,所以决定做GUI界面。此次结对编程中,一人负责内部功能的算法实现,一人负责界面,各自负责编写自己的那部分代码;对接过程中,我们一起合作,在这一阶段也充分感受到了结对编程的高效,也意识到好队友的挑选对项目的完成有很大的促进促进作用。

2.结对照片展示

十一、结对编程的优缺点

1.结对编程的优缺点

优点:充分锻炼了两个人的合作,沟通能力。两个人之间可以相互学习交流,从而取长补短。后期两人共同对接模块时,充分结合了两人的优点,使对接较为顺利的完成。

缺点:需要一段磨合时间,刚开始时效率不高,需要相互熟悉了解代码风格之后渐入佳境。

2.结对个人优缺点

我的优点:      (1)擅长算法,编码效率高。对项目进度的把握很有规划

(2)编程思路清晰,能够尽最大的能力做到最好

        (3)既细心又耐心。在结对编程中能很快地处理bug

缺点:           (1)缺乏主见,在选择上摇摆不定

搭档优点:(1)编程思路清晰,能够尽自己最大的能力实现自己能做到的最好

(2)耐心,不惧怕问题的出现,出现问题时不骄不躁,能静下心来处理解决问题

缺点:      (1)我认为娟子最大的缺点就是没有缺点,哈哈哈哈哈!

参考博客:http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html

十二、在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。

PSP

任务内容

计划时间(min)

完成时间(min)

Planning

计划

30

30

Estimate

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

10

10

Development

开发

780

2700

Analysis

需求分析

23

40

Design Spec

生成文档

0

20

Design Review

设计复审

0

20

Coding Standard

代码规范

7

15

Design

具体设计

40

60

Coding

具体编码

210

1800

Code Review

代码复审

30

45

Test

测试

30

700

Reporting

报告

160

840

Test Report

测试报告

180

780

Size Measurement

计算工作量

40

30

Postmortem & Process Improvement Plan

事后总结, 并提出过程改进计划

60

30

结对项目-四则运算出题程序(GUI版)的更多相关文章

  1. 结对项目——四则运算GUI项目

    一.项目地址:https://git.coding.net/lvgx/wsz.git 二.PSP: PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min) Plannin ...

  2. 结对项目-小学生四则运算系统(GUI)

    Coding克隆地址:https://git.coding.net/FrrLolix/CalGUI.git 伙伴博客:http://www.cnblogs.com/wangyy39/p/8763244 ...

  3. 小学生四则运算出题程序 无操作界面java版 简单的运用java中一些基本操作

    这是本学期java课中实验大纲里的第一个实验,这里简单做了一个无用户界面版本. import java.util.Random; import java.util.Scanner; public cl ...

  4. 结对项目-四则运算"软件"之升级版

    本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 github地址为:https://github.com/L ...

  5. 结对随即四则运算(带界面Java版)

    //随机四则运算类 public class 随机四则运算 { public static void main(String[] args) { new 界面();//进入随机四则运算的首界面 } } ...

  6. 结对项目3-功能增强型带基本函数计算java计算器

    -----------------------------------------------------实验报告------------------------------------------- ...

  7. 结对编程项目——四则运算vs版

    结对编程项目--四则运算vs版 1)小伙伴信息:        学号:130201238 赵莹        博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...

  8. 小学四则运算结对项目报告(GUI)

    小学四则运算结对项目报告(GUI) 一.Coding.Net项目地址: https://git.coding.net/wsshr/Calculation.git 二.PSP表格(完成前): PSP 任 ...

  9. 高级软件工程2017第3次作业——结对项目:四则运算题目生成程序(基于GUI)

    Deadline:2017-10-11(周三)21:00pm (注:以下内容参考集大作业 ) 前言 想过和别人一起探索世界吗?多么希望,遇到困难时,有人能一起探讨:想要懈怠时,有人推你一把:当你专注于 ...

随机推荐

  1. Visual Studio 2010 Express for Windows Phone 永久免费序列号

    Visual Studio 2010 Express for Windows Phone 永久免费序列号:YDK44-2WW9W-QV7PM-8P8G8-FTYDF

  2. mfc 带参数的构造函数

    知识点 默认的构造函数 带参数的构造函数 重载构造函数 一.默认的构造函数 二.带参数的构造函数 三.重载构造函数 class Tdate { public: int year;//年 int mon ...

  3. VC编译连接选项详解

    VC编译连接选项详解 大家可能一直在用VC开发软件,但是对于这个编译器却未必很了解.原因是多方面的.大多数情况下,我们只停留在“使用”它,而不会想去“了解”它.因为它只是一个工具,我们宁可把更多的精力 ...

  4. java实现利用httpclient访问接口

    HTTP协议时Internet上使用的很多也很重要的一个协议,越来越多的java应用程序需要通过HTTP协议来访问网络资源. HTTPClient提供的主要功能: 1.实现了所有HTTP的方法(GET ...

  5. c# 缓存详解

    如果说要对一个站点或者应用程序经常优化,可以说缓存的使用是最快也是效果最明显的方式.一般而言,我们会把一些常用的,或者需要花费大量的资源或时间而产生的数据缓存起来,使得后续的使用更加快速. 如果真要细 ...

  6. 简单字典实现(KV问题)

    搜索二叉树基本概念请看上篇博客 这两个问题都是典型的K(key)V(value)问题,我们用KV算法解决. 判断一个单词是否拼写正确:假设把所有单词都按照搜索树的性质插入到搜索二叉树中,我们判断一个单 ...

  7. Selenium笔记:PO模型

    所有用到的页面都定义成一个类,继承自基础的Page类 把页面中用到的元素定义成方法 把页面上一些操作定义成方法

  8. eclipse创建spring boot项目加载不到application.properties配置文件

    在配置文件application.properties中修改了端口号,但重启服务后发现端口号并没有跟着改变,发现是项目启动时没有加载application.properties文件导致 解决:项目-& ...

  9. 一种利用ADO连接池操作MySQL的解决方案(VC++)

    VC++连接MySQL数据库 常用的方式有三种:ADO.mysql++,mysql API ; 本文只讲述ADO的连接方式. 为什么要使用连接池? 对于简单的数据库应用,完全可以先创建一个常连接(此连 ...

  10. go 运行项目

    此时运行项目,不能像之前简单的使用go run main.go,因为包main包含main.go和router.go的文件,因此需要运行go run *.go命令编译运行.如果是最终编译二进制项目,则 ...