团队作业之四则运算GUI展示
一、项目Coding.net原码仓库地址:https://git.coding.net/caoying/Teamwork.git
队员:
卢琪:2016011986
曹滢:2016012102
二、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 |
三、接口设计介绍
Information Hiding, Interface Design, Loose Coupling
信息隐藏(Information Hiding)
信息隐藏是指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
接口设计(Interface Design)
接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。
松耦合(Loose Coupling)
松耦合系统通常是基于消息的系统,此时客户端和远程服务并不知道对方是如何实现的。客户端和服务之间的通讯由消息的架构支配。只要消息符合协商的架构,则客户端或服务的实现就可以根据需要进行更改,而不必担心会破坏对方。
四、计算模块接口的设计及实现(独立完成)
1.类和函数的组成及关系
我们设计了一些函数,例如生成只含加减号的四则运算还有包括加减乘除的四则运算,还可以控制括号的有无,生成题目的时候就有对这些函数的调用
2.函数流程图
4.算法的关键及独到之处
我们的独到之处是界面模块简洁、功能齐全,算法易懂易理解。
五、计算模块接口的性能改进
1.性能改进思路及时间花费
为确保软件满足或超过设计的期望值,有必要分析应用程序的性能以发现潜在的问题。这个过程被称为“性能分析”。它包括检查应用程序以确保每个组件有效地工作,并根据设计密切注视处理器的使用、网络和系统服务、存储和输入/输出(I/O)。
在运行代码的性能分析中,我们发现资源回收不完全。经过各种调试,我们发现是输入输出流的关系,所以我们关闭输出流、修改了代码。整个过程花费了接近三个小时。
2.性能分析图展示及程序中消耗最大函数
展示图:
程序中消耗最大的函数无疑是包含过程最多、工程量最大的函数Calculate。
六、单元测试展示(展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。只需要测试命令行部分,且该部分覆盖率到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%。如下图
七、异常处理说明(详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景)
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("文件生成错误");
}
八、界面设计过程(详细介绍界面模块是如何设计的,并写一些必要的代码说明解释实现过程)(独立完成)
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);
九、界面模块与计算模块的对接(详细地描述UI模块的设计与两个模块的对接,并截图实现的功能)(独立完成)
1.对接描述
我们GUI界面与计算模块的对接是通过获取参数,调用方法来实现的。出题时,将题目写入文件,然后文件下载到本地。做题时,上传题目后,将题目和答案封装到result集合中。
2.功能截图
首页:
出题界面:
答题界面:
文件上传截图:
生成题目截图:
做题判断结果:
十、结对过程描述及合照
和曹滢同学结对打代码是一件令人开心的事,虽然我们俩对java都不是特别了解,但是我们互相陪伴互相鼓舞,也是完成了这份作业。请教了室友吕晓真同学,本来我和曹滢同学准备做前后台网页版的,但是请教过周围一些同学,发现我们俩都比较倾向于前端,而后端代码不是很熟悉,无法做到与前台紧密结合,也很抱歉曹滢同学已经完成一份前台样式代码了,所以我们改战GUI。
合照:
图左是我,图右是曹滢同学~
十一、结对编程的优缺点(同时指出结对的每一个人的优点和缺点在哪里 (至少三个优点和一个缺点))
结对编程的优点:1.两个人有商有量,可以各自分担项目的一半;
2.两个人互相学习,可以相互鼓励增加彼此信心;
3.两个人更有动力,可以促进各自写代码的效率。
结对编程的缺点:1.两个人商量可能会出现意见有分歧;
2.两个人分开完成项目的一部分,可能会导致事倍功半,比如我们之前做web项目却中途进行不下去了;
3.两个人之中有一个更厉害的,那么另一人可能会产生依赖、付出也较少。
我的队友曹滢同学的优点:1.为人和善,易沟通;2.前端技术掌握的好,善于学习;3.做事认真负责 缺点:对后端java不是特别熟悉
我的优点:1.易于沟通;2.认真学习;3.虚心请教。 缺点:对技术方面掌握的不好;缺乏耐心;有时候碰到困难会不知道怎样解决
十二、总结与反思
通过这次的结对项目,让我清晰地体会到自己的不足,还有很多地方欠缺,希望在今后的学习中能够有所提升!
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 |
团队作业之四则运算GUI展示的更多相关文章
- 团队作业9——Beta版本展示博客
一. 骆杰宁(组长) 风格:少说话,多做事. 擅长技术:Jsp 编程兴趣:GUI 希望角色:PM 一句话宣言:年轻是本钱,不努力就不值钱. 胡丹丹 风格:不断沉淀自己 擅长技术:擅长TCP/IP协议模 ...
- 【集美大学1411_助教博客】团队作业8——第二次项目冲刺(Beta阶段)
写在前面的话 此次团队作业8可以拆分成两部分:1.beta阶段冲刺计划安排,2.7天敏捷冲刺."我们很低调"没有使用leangoo,经过与张老师的商议,张老师同意他们不使用lean ...
- 【集美大学1411_助教博客】团队作业10——项目复审与事后分析(Beta版本)
写在前面的话 软件工程课结束了,大家开心吗?是不是再也不用熬夜写代码了?如果这门课你真的熬夜写代码了,相信你一定有收获,如果这门课结束了你觉得是自己一个全新的开始,那么这门课的意义就实现了.团队作业全 ...
- 【1414软工助教】团队作业6——展示博客(Alpha版本) 得分榜
题目 团队作业6--展示博客(Alpha版本) 作业提交情况情况 为所欲为 团队没有提交,其余都按时提交. 往期成绩 个人作业1:四则运算控制台 结对项目1:GUI 个人作业2:案例分析 结对项目2: ...
- 【集美大学1411_助教博客】团队作业1——团队展示&选题 成绩
第一次团队作业已经新鲜出炉啦,各位同学请查收.截止日期前,全班都按时提交了作业,而且有的团队还提交了两次呢,下次不要这样啦~ 题目 团队作业1--团队展示&选题 回顾 个人作业1--四则运算题 ...
- 【集美大学1411_助教博客】团队作业6——展示博客(Alpha版本)
写在前面的话 工作还真是应该抓紧做呢,以下评分是助教在出差前评的,但出差回来就忘记了大部分内容.同学们都在预期时间内完成了自己的alpha项目.由于助教的频繁出差,评分工作落下一大截,在此表示欠意,会 ...
- 团队作业6——展示博客(Alpha)
一.团队简介 李永豪(PM):项目经理,后台开发人员,协调团队内部的工作及开发团队之间的工作 杨海亮:后台开发人员,测试人员,熟悉java语言,编写java代码 郑靖涛:后台开发人员,测试人员,安卓程 ...
- 【2017集美大学1412软工实践_助教博客】团队作业6——展示博客(Alpha版本)
题目 团队作业6: http://www.cnblogs.com/happyzm/p/6791211.html 团队成绩 团队成员简介 项目地址 项目目标,包括典型用户.功能描述.预期用户数量 如何满 ...
- 团队作业9——测试与发布(Beta版本)(含展示博客)
团队作业9--测试与发布(Beta版) http://www.cnblogs.com/newteam6/p/6938504.html 团队作业9--展示博客 http://www.cnblogs.co ...
随机推荐
- redis持久化机制之AOF与RDB
什么是redis Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. redis为何需要 ...
- 大数据入门第一天——基础部分之Linux基础(环境准备与先导知识)
一.Linux环境安装 1.VM的安装 参考Linux环境搭建随笔:http://www.cnblogs.com/jiangbei/p/7248054.html 2.CentOS的安装 同参考上述随笔 ...
- 2017-2018-2 20155315《网络对抗技术》Exp4:恶意代码分析
实验目的 是监控你自己系统的运行状态,看有没有可疑的程序在运行. 是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systracer套件 ...
- Codeforces VK Cup 2018 Div.2
总题面传送门 这次考试只过了3题,前三题题目难度并不大,但是第三题的代码细节卡了我两个半小时(基本上整场考试),所以以后要合理把握时间,注意把握代码细节,并更加完善我的代码风格,使其更加简练.(赛外话 ...
- RAC建立过程回顾--建立用户和组
一共需要建立6个组: oinstall dba asmadmin asmdba asmoper oper 要建立两个用户: oracle 和 grid 然后还要给各个用户建立各自的环境变量. 以下的操 ...
- 3、计数排序,电影top100
1.计数排序 # -*- coding: utf-8 -*- # @Time : 2018/07/31 0031 11:32 # @Author : Venicid def count_sort(li ...
- Xshell6远程访问linux及Xftp6远程针对linux系统中文件操作(附图文详解)
1.首先我们需要先做好前期准备工作,需要到XManager6官网上将Xshell及Xftp下载并安装,安装过程一直下一步就好了.这里是其官网:http://www.xshellcn.com/.安装完成 ...
- Java SE练习题——求奇数
欢迎来到Java SE练习题频道,我是Fishing,今天我带来的练习题是(做题会有不足之处,可评论,说出更好的方法): 通过键盘输入两个整数,计算这两个整数之间的所有奇数之和,并输出计算结果. 看到 ...
- Netty源码分析第2章(NioEventLoop)---->第1节: NioEventLoopGroup之创建线程执行器
Netty源码分析第二章: NioEventLoop 概述: 通过上一章的学习, 我们了解了Server启动的大致流程, 有很多组件与模块并没有细讲, 从这个章开始, 我们开始详细剖析netty的各个 ...
- Spring入门学习笔记(1)
目录 Spring好处 依赖注入 面向面编程(AOP) Spring Framework Core Container Web Miscellaneous 编写第一个程序 IoC容器 Spring B ...