一、结对作业(祁晨2016012057,王晓哲2016012052)项目地址:https://git.coding.net/lvgx/wsz.git
二、PSP:
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
15 |
15 |
Estimate |
估计这个任务需要多少时间 并规划大致工作步骤 |
15 |
15 |
Development |
开发 |
4225 |
5350 |
Analysis |
需求分析 (包括学习新技术) |
15 |
20 |
Design Spec |
生成设计文档 |
10 |
10 |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
10 |
15 |
Design |
具体设计 |
25 |
45 |
Coding |
具体编码 |
4000 |
5000 |
Code Review |
代码复审 |
45 |
60 |
Test |
测试 (自我测试,修改代码,提交修改) |
120 |
200 |
Reporting |
报告 |
55 |
60 |
Test Report |
测试报告 |
15 |
15 |
Size Measurement |
计算工作量 |
10 |
5 |
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
30 |
40 |
三、说明在结对编程中是如何利用这些方法(Information Hiding, Interface Design, Loose Coupling)对接口进行设计的?
通过查询资料了解到 information-hiding(信息隐藏):采用MATLAB实现图像信息隐藏。将文本信息,通过DCT和LSB算法嵌入到二维图像中实现信息隐藏。 interface_design(接口设计):提供给其他模块或者系统使用的一种约定或者规范。Loose Coupling(松散耦合):意味着DM系统将使用DB或DW系统的某些设施,从这些系统管理的数据库中提取数据,进行数据挖掘,然后将挖掘的结果存放到计算机中。
四、
在模块接口的设计与实现过程中,我们两人在编程时一共用了7个类和9个函数。
其中Main函数作为程序执行的起点,程序是从main函数开始执行的,从而负责接收参数判断参数是否合法。
在我们的程序中,Operation类是生成并计算不带括号的式子,Operation1类是生成带括号并且带乘除的式子,Operation2类是生成并计算带括号只带加减的式子。
并且在GUI(图形用户界面指采用图形方式显示的计算机操作用户界面)中,我们分别使用了复选框监听器和按钮监听器。复选框监听器,创建复选框按键,并设置快捷键和选定, 并且设置一个panel,将复选框放入同一个panel,最后添加复选框的监听事件。按钮监听器,定义为静态变量以便main使用,
该面板用来放置按钮组件,
定义按钮组件,
新建按钮,
添加按钮到面板。
五、
从目前完成进度来说,我们这次作业完成度只有百分之六七十左右。毕竟能力有限,而且编程这种技术性极高的能力也不是一朝一夕能够加强的。但在之后补充时,我们花费了4个小时左右,在此我们还界面程序的性能进行分析,和优化,改进,尽量减少除法中随机数,以减少代码因随机数生成的无效循环,按F4再一次查看,内存占用率明显减少,但是仍有内存没释放,我们会继续改进的。
六、
在此次项目中,对五个类进行了测试,采用结合或者独立的测试方法,下面是代码覆盖率的展示;
2、GUi界面
3、Judge判断括号的优先级
4、Operationa2生成并计算带括号只带加减的式子
5、Choose简单的加减乘除
七、
1、判断输入的出题数、运算符个数、范围等是否合法或者超出其范围(展示了对数的范围的处理,代码结果如下)
try{ r=Integer.parseInt(args[i+1]); r1=Integer.parseInt(args[i+2]); if(r<=0||r>100) { System.out.println("r不在范围[1,100]内"); return; } if(r1<50||r1>1000) { System.out.println("r1不在范围[50,1000]内"); return; } } catch(Exception e) { System.out.println("r的输入不合法,请重新输入"); } }
2、文件处理异常:点击出题时,如果文件生成错误,将不再生成。
try{ PrintStream file=newPrintStream("../result.txt"); System.setOut(file); } catch(Exception e) { System.out.println("文件生成错误"); }
八、
使用GUI设计该程序出题、答题界面public static void main(String[] args) { Gui frame=new Gui(); frame.pack(); frame.setSize(500, 300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE ); frame.setVisible(true); }
九、
1、出题界面:通过按钮监听器——出题按钮实现
2、做题界面:通过按钮监听器——下一题按钮实现,并且在此按钮下进行判断、继续出题,最重要的是根据此按钮调用统计界面
3、最终界面:通过按钮监听器——提交按钮实现,出现最终页面,展示做题总数、正确数以及你所用的时间,并且在下面展示整个卷面
十、
我(祁晨)与我结对作业的队友(王晓哲)是同一个寝室的室友,因此我们在老师发布这个作业的时候,就不约而同的选择了对方。因为是室友,所以我们在一起的时间比较多,对于这次作业的讨论与交流也会比较方便。由于我的项目经验不足,所以此次项目中的结构框架、所用的技术等等都是由我的队友主要负责,而我就负责对于项目的测试,以及一些简单的编码。
十一、说明结对编程的优点和缺点
现代软件产业经过几十年的发展,一个软件由一个人单枪匹马完成,已经很少见了,软件都是在相互合作中完成的。合作的最小单位是两个人,两个工程师在一起,做的最多的事情就是“看代码”,每个人都能看“别人的代码”,并发表意见。 ————《构建之法》第四章
通过这次两人结对项目也让我亲身体会到了上面这句话的意思,并且在这次项目中也感受到了更多的道理。那么下面我就说一说我通过这次结对作业对结对编程的感受。
结对编程的优点:提高了工作效率,一个编程项目从一个人变为两个人去完成,不仅减轻了每个人的工作负担,也提高了编程的效率。更多奇思妙想的碰撞,一个人的想法也许比较单一,但是有两个人合力去思考就会发现一条与众不同的道路。编程氛围变得有趣,一个人的枯燥不见了,取而代之的是两个人的彼此鼓励与交流,出现任何的负面情绪也不再孤单,有人去倾听你的烦恼,你也能够帮助你的队友解决忧愁。
结对编程的缺点:奇思妙想的碰撞容易摩擦出火花,每个人的思考不同,很有可能对彼此的意见产生疑问与抗拒。并且每个人的编程习惯不同,如果不能很好地融合就会导致彼此的代码之间出现间隙。最重要的是,有了队友之后自己容易出现依赖心理,全权依靠队友自己什么事情都不做。从而,导致工作效率降低,甚至项目无法完成。
十二、指出结对的每一个人的优点和缺点在哪里 (要列出至少三个优点和一个缺点)?
1、 队友优点:工作能力超强,对于她的part总是完成的及时并且有质量;十分勤奋,对于她不懂的问题肯花时间、费心思的去查阅资料和询问老师同学;很有自己的想法,对于项目的每一步都有思考。
队友缺点:过于细致。
2、自身优点:队友安排的工作尽全力完成;能够及时与队友沟通交流自己的想法与问题;气氛担当。
自身缺点:缺乏项目经验,无法给予队友更多的帮助。