目录:

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

二.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文件。

结对项目-四则运算出题程序(GUI版)

 

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

   1.性能分析改进

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

   2.性能分析截图

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

结对项目-四则运算出题程序(GUI版)

性能分析过程截图:

结对项目-四则运算出题程序(GUI版)

 

结对项目-四则运算出题程序(GUI版)

结对项目-四则运算出题程序(GUI版)

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

 测试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");//未编写单元测试函数,单元测试失败
	}

}

 

结对项目-四则运算出题程序(GUI版)

 

 代码覆盖率:

结对项目-四则运算出题程序(GUI版)

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

结对项目-四则运算出题程序(GUI版)

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

1.登陆面板:

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

结对项目-四则运算出题程序(GUI版)

结对项目-四则运算出题程序(GUI版)

 

对应部分代码展示:

 1 JButton b_log=new JButton("登录");  
 2         b_log.addActionListener(new ActionListener() {  
 3             public void actionPerformed(ActionEvent e) {  
 4                 // TODO Auto-generated method stub  
 5                 //获取用户名和密码,进行校验  
 6                 String myUsername=tf_name.getText(); 
 7                 String myPassword=password.getText();  
 8                 if(myUsername.equals("1")&&              myPassword.equals("1")){  
 9                     JOptionPane.showMessageDialog(null, "登陆成功!");  
10                     f.dispose();
11                     //new MyExGUI();
12                     new ShowGridLayout();
13                     
14                 }
15                 else{  
16                     JOptionPane.showMessageDialog(null, "账号或密码错误!");  
17                     tf_name.setText( "");  
18                     password.setText( "");  
19                 }  
20                   
21             }  
22         });  
View Code

相关文章:

  • 2021-10-30
  • 2021-08-27
  • 2022-02-07
  • 2021-06-05
  • 2022-01-03
  • 2021-05-19
猜你喜欢
  • 2021-12-21
  • 2021-08-13
  • 2021-05-21
  • 2021-12-31
  • 2021-10-23
  • 2021-07-12
  • 2022-03-02
相关资源
相似解决方案