1、项目Coding.net原码仓库地址:https://git.coding.net/caoying/Teamwork.git前端
队员:java
卢琪:2016011986git
曹滢:2016012102web
2、PSP表格之时间规划算法
PSP编程 |
任务内容小程序 |
计划时间(min)后端 |
Planning网络 |
计划架构 |
30 |
Estimate |
估计这个任务须要多少时间,并规划大体工做步骤 |
30 |
Development |
开发 |
2880 |
Analysis |
需求分析 |
30 |
Design Spec |
生成文档 |
40 |
Design Review |
设计复审 |
20 |
Coding Standard |
代码规范 |
10 |
Design |
具体设计 |
40 |
Coding |
具体编码 |
2000 |
Code Review |
代码复审 |
30 |
Test |
测试 |
30 |
Reporting |
报告 |
180 |
Test Report |
测试报告 |
30 |
Size Measurement |
计算工做量 |
20 |
Postmortem & Process Improvement Plan |
过后总结,并提出过程改进计划 |
30 |
3、接口设计介绍
Information Hiding, Interface Design, Loose Coupling
信息隐藏(Information Hiding)
信息隐藏是指在设计和肯定模块时,使得一个模块内包含的特定信息(过程或数据),对于不须要这些信息的其余模块来讲,是不可访问的。
接口设计(Interface Design)
接口泛指实体把本身提供给外界的一种抽象化物(能够为另外一实体),用以由内部操做分离出外部沟通方法,使其能被内部修改而不影响外界其余实体与其交互的方式。
松耦合(Loose Coupling)
松耦合系统一般是基于消息的系统,此时客户端和远程服务并不知道对方是如何实现的。客户端和服务之间的通信由消息的架构支配。只要消息符合协商的架构,则客户端或服务的实现就能够根据须要进行更改,而没必要担忧会破坏对方。
4、计算模块接口的设计及实现(独立完成)
1.类和函数的组成及关系
咱们设计了一些函数,例如生成只含加减号的四则运算还有包括加减乘除的四则运算,还能够控制括号的有无,生成题目的时候就有对这些函数的调用
2.函数流程图
4.算法的关键及独到之处
咱们的独到之处是界面模块简洁、功能齐全,算法易懂易理解。
5、计算模块接口的性能改进
1.性能改进思路及时间花费
为确保软件知足或超过设计的指望值,有必要分析应用程序的性能以发现潜在的问题。这个过程被称为“性能分析”。它包括检查应用程序以确保每一个组件有效地工做,并根据设计密切注视处理器的使用、网络和系统服务、存储和输入/输出(I/O)。
在运行代码的性能分析中,咱们发现资源回收不彻底。通过各类调试,咱们发现是输入输出流的关系,因此咱们关闭输出流、修改了代码。整个过程花费了接近三个小时。
2.性能分析图展现及程序中消耗最大函数
展现图:
程序中消耗最大的函数无疑是包含过程最多、工程量最大的函数Calculate。
6、单元测试展现(展现出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试获得的测试覆盖率截图,发表在博客中。只须要测试命令行部分,且该部分覆盖率到90%以上。)
1.单元测试代码及函数
单元测试的代码:(这里就以算分这个类为例,其他测试相似)
public class CoreTest extends TestCase { public void testNewExpSome() { Core.newExpSome(true, 50, 1, 3); } public void testNewExpAll() { Core.newExpAll(false, 50, 1, 3); } public void testDivideExactly() { Core.divideExactly(48, 8,5); } }
单元测试的函数:(这里就以算分这个类为例,其他测试相似)
2.构造测试数据的思路
咱们的思路是从要测试的对象出发:首先,咱们有一个生成加减乘除类、有一个能够计算式子并返回结果的类、有一个判断优先级的类;接下来咱们就要对它们测试。其次咱们还有GUI窗口,所以也要进行测试。
3.测试覆盖率截图
在同窗的帮助下,使得咱们团队的测试覆盖率达到了97%。以下图
7、异常处理说明(详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景)
1.输入数判断是否超范围
这里用try——catch方法来捕获异常:
try { n = Integer.parseInt(n.getText()); if (n<0 || n > 10000) { n.setText("n不在范围内,需重输"); return; } flag0 = 1; } catch (Exception a) { n.setText("n异常,需重输"); }
2.文件处理异常
这里一样用try——catch方法来捕获异常:
try { Ffile = new PrintStream("result.txt"); System.setOut(Ffile); } catch (Exception e) { System.out.println("文件生成错误"); }
8、界面设计过程(详细介绍界面模块是如何设计的,并写一些必要的代码说明解释实现过程)(独立完成)
1.设计思路
咱们要设计各个界面的GUI,就要弄清楚分几个界面、各个界面要包含哪些组件、要实现什么具体的功能。因此咱们根据分析,有这些:首页GUI设计,分为两块,出题和作题、出题界面GUI的设计、答题界面GUI的设计及文件上传界面GUI的设计。
2.实现过程
首页界面GUI代码:
static class Hello extends JPanel { JLabel title = new JLabel("欢迎来到四则运算小程序!"); JLabel l = new JLabel(); JButton timu = new JButton("生成题目"); JButton finish = new JButton("完成题目");
出题界面GUI代码:
static class InMakeExp extends JPanel{ JLabel timunum = new JLabel("题目数量"); JLabel timulower = new JLabel("数值的下界范围"); JLabel timuupper = new JLabel("数值的上界范围"); JLabel most = new JLabel("运算符最多个数"); JCheckBox chenchu = new JCheckBox("乘除法",false); JCheckBox bracket = new JCheckBox("括号",false); JButton ok = new JButton("提交");<br> JTextField num = new JTextField(10); <br> JTextField lower = new JTextField(10); <br> JTextField upper = new JTextField(10); <br> JTextField most_ = new JTextField(10);
答题界面GUI代码:
timu = new JLabel("题目:"); timu.setSize(100, 40); timu.setLocation(650, 100); l.add(timu); timu.setVisible(false); daan = new JLabel("答案:"); daan.setSize(100, 40); daan.setLocation(650, 160); l.add(la22); daan.setVisible(false); question = new JTextArea(); question.setSize(150, 30); question.setLocation(700, 100); l.add(question); question.setVisible(false); answer = new JTextArea(); answer.setSize(70, 30); answer.setLocation(700, 160); l.add(answer); answer.setVisible(false); tijiao= new JButton("提交"); tijiao.addActionListener(this); tijiao.setSize(70, 30); tijiao.setLocation(780, 160); tijiao.setFont(new Font("Dialog", 1, 14)); l.add(next); tijiao.setVisible(false); }
文件上传界面GUI代码:
shangchuan= new JButton("上传文件"); shangchuan.addActionListener(this); shangchuan.setFont(new Font("Dialog", 1, 18)); shangchuan.setSize(120, 30); shangchuan.setLocation(515, 140); l.add(upload);
9、界面模块与计算模块的对接(详细地描述UI模块的设计与两个模块的对接,并截图实现的功能)(独立完成)
1.对接描述
咱们GUI界面与计算模块的对接是经过获取参数,调用方法来实现的。出题时,将题目写入文件,而后文件下载到本地。作题时,上传题目后,将题目和答案封装到result集合中。
2.功能截图
首页:
出题界面:
答题界面:
文件上传截图:
生成题目截图:
作题判断结果:
10、结对过程描述及合照
和曹滢同窗结对打代码是一件使人开心的事,虽然咱们俩对java都不是特别了解,可是咱们互相陪伴互相鼓舞,也是完成了这份做业。请教了室友吕晓真同窗,原本我和曹滢同窗准备作先后台网页版的,可是请教过周围一些同窗,发现咱们俩都比较倾向于前端,然后端代码不是很熟悉,没法作到与前台紧密结合,也很抱歉曹滢同窗已经完成一份前台样式代码了,因此咱们改战GUI。
合照:
图左是我,图右是曹滢同窗~
11、结对编程的优缺点(同时指出结对的每个人的优势和缺点在哪里 (至少三个优势和一个缺点))
结对编程的优势:1.两我的有商有量,能够各自分担项目的一半;
2.两我的互相学习,能够相互鼓励增长彼此信心;
3.两我的更有动力,能够促进各自写代码的效率。
结对编程的缺点:1.两我的商量可能会出现意见有分歧;
2.两我的分开完成项目的一部分,可能会致使事倍功半,好比咱们以前作web项目却中途进行不下去了;
3.两我的之中有一个更厉害的,那么另外一人可能会产生依赖、付出也较少。
个人队友曹滢同窗的优势:1.为人和蔼,易沟通;2.前端技术掌握的好,善于学习;3.作事认真负责 缺点:对后端java不是特别熟悉
个人优势:1.易于沟通;2.认真学习;3.虚心请教。 缺点:对技术方面掌握的很差;缺少耐心;有时候碰到困难会不知道怎样解决
12、总结与反思
经过此次的结对项目,让我清晰地体会到本身的不足,还有不少地方欠缺,但愿在从此的学习中可以有所提高!
PSP |
任务内容 |
实际完成时间(min) |
Planning |
计划 |
60 |
Estimate |
估计这个任务须要多少时间,并规划大体工做步骤 |
60 |
Development |
开发 |
3000 |
Analysis |
需求分析 |
30 |
Design Spec |
生成文档 |
60 |
Design Review |
设计复审 |
30 |
Coding Standard |
代码规范 |
20 |
Design |
具体设计 |
50 |
Coding |
具体编码 |
2100 |
Code Review |
代码复审 |
40 |
Test |
测试 |
50 |
Reporting |
报告 |
185 |
Test Report |
测试报告 |
35 |
Size Measurement |
计算工做量 |
30 |
Postmortem & Process Improvement Plan |
过后总结,并提出过程改进计划 |
40 |