结对作业
Posted boscojk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对作业相关的知识,希望对你有一定的参考价值。
一、项目
源代码地址:https://git.coding.net/mal123/arithmetic.git
网页版测试地址:
结对成员: 马玲 2016012054
王雪 2016012013
二、PSP展示
PSP |
任务内容 |
计划时间(min) |
Planning |
计划 |
60 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
30 |
Development |
开发 |
1200 |
Test |
测试 |
90 |
Algorithm Optimization |
算法优化 |
180 |
Interface Design |
接口设计 |
150 |
Coding Standard |
代码规范 |
240 |
Design |
具体设计 |
120 |
Coding |
具体编码 |
450 |
Code Review |
代码复审 |
90 |
Test |
测试 |
60 |
Reporting |
报告 |
180 |
Test Report |
测试报告 |
120 |
Size Measurement |
计算工作量 |
30 |
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
120 |
三、 看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节,说明你们在结对编程中是如何利用这些方法对接口进行设计的。
1)关于Information Hiding:信息隐藏
对于面向对象的程序设计而言,信息隐藏是一种重要的软件开发手段,它与对象的封装与模块化相关。信息隐藏是开发整体程序结构时使用的法则,将每个程序的隐蔽或封装在一个单一的设计模块中,定义每一个模块时尽可能少地显露其内部的处理。把信息隐蔽用作模块化系统的一个设计标准,在后面项目调试过程中,编程人员的任务量能够得以减轻,提高代码可读性。
本次结对项目,我们将生成题目和计算两个模块设计成接口,用户只需在页面输入自己所想要的参数的值,点击提交,后台就会调用生成题目这个接口,将生成的题目输出出来。计算接口也是同样的调用,就会将结果与输入框中的结果进行核对正确性。在后期项目优化过程中,我们只需要修改接口中的方法来实现功能,不必修改其他地方,极大程度上减轻了我们的任务量。
2)Interface Design:接口设计
设计接口的时候,我们也有讨论接口该如何设计会更加合理。接口在设计的时候应当尽量的详细划分,使得每一个接口中方法应该尽量少,将功能实现在接口中,所以我们决定讲生成题目与计算功能分开,分成两个接口。在层与层之间调用接口,类之间通过接口访问。
3)Loose Coupling:降低耦合
模块与模块之间总会存在一些“联系”,这就会提升我们维护过程中的复杂度和任务量。松耦合通过接口的方式实现各个模块之间的调用,可以使模块在发生改变时,其他的部分可以保持不变,减少模块间的相互“联系”,降低耦合。
四、计算模块接口的设计与实现过程
我们将生成题目和计算设计成了两个接口。
生成题目接口:
方法间的关系:
计算接口:
五、计算模块接口部分的性能改进
六、
import org.junit.Test; import static org.junit.Assert.*; public class CommandTest { @Test public void main() throws Exception { Command command = new Command(); String[] args1 = {"-m","3","800","-n","7"};//正确的参数类型(默认模式) String[] args2 = {"-m","50","400","-n","100000"};//参数范围不合法 String[] args3 = {"-m","3","800","-n","7","-o","3","-b","-c"};//正确的参数范围(不默认) String[] args4 = {"-m","3","800","-n","7","-o","你","-b","-c"};//参数类型错误 String[] args5 = {"-m","L","800","-n","7"};//参数类型错误 String[] args6 = {"-m","3","800","-n","、"};//参数类型错误 String[] args7 = {"-m","3","800","-n","7","M"};//输入参数不合法 String[] args8 = {"-m","3","800"};//缺少参数 Command.main(args1); Command.main(args2); Command.main(args3); Command.main(args4); Command.main(args5); Command.main(args6); Command.main(args7); Command.main(args8); } }
代码覆盖率如下:
接口类测试覆盖率:
Command类的测试覆盖率:
在单元测试中,每个类对应一个测试类,测试类中每个测试方法对应一个方法。构造测试数据时,根据方法中每个分支对应的情况,设置相应的参数,确保测试会进入到每一个分支,达到测试的目的。
七、计算模块部分异常处理说明
@Test public void createCharacter() throws Exception { System.out.println(createArithmetic.CreateCharacter(56,true)); }
当上下界不在合理范围时:
@Test public void createNumber() throws Exception { System.out.println(createArithmetic.CreateNumber(4,-9,800)); }
当上下界范围太小时:
@Test public void createFile() throws Exception { System.out.println(createArithmetic.createFile(-9,true,true,10,1000,4)); }
当题目数量不在合理范围时:
@Test public void createFile() throws Exception { System.out.println(createArithmetic.createFile(-9,true,true,10,1000,4)); }
八、界面模块的详细设计过程
九、界面模块与计算模块的对接
十、描述结对的过程
本次作业,我们两个人在工作室完成结对编程的。本次编程过程中,我们两个人都有明确的分工,一人负责一个模块,过程虽然有点困难,但是我们也充分的感受到了合作的重要性。尤其是在编程过程中,明白了自己设计的东西要简单易懂,让人能一眼看懂。
十一、说明结对编程的优点和缺点
结对编程优点: 1.结对编程就是两个程序员互相审查的过程,在编程过程中能够尽早发现问题并解决问题,提高了编程效率。
2.编程过程中遇到瓶颈两个人相互鼓励,极大的提高了编程的积极性。
3.两个人在编程过程中不断磨合,相互学习,使双方的代码能力得到了一定程度上的增强,同时也有了合作意识。
结对编程缺点: 1.一个人独立钻研的时候,两个人思路会不同,编程方法也不同,需要时间来抉择用哪一个方法,需要磨合时间
马玲优点: 1.编程能力强,认真
2.对于模块独立化有独特的见解
3.逻辑思维能力强,编程严谨
马玲缺点: 1.
王雪优点: 1.遇到bug有耐心解决
2.注重细节,努力
3.态度积极,乐于学习
王雪缺点: 1.编程经验不足,对程序把握不够
十二、PSP表格
PSP |
任务内容 |
实际时间(min) |
Planning |
计划 |
50 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
30 |
Development |
开发 |
1560 |
Test |
测试 |
110 |
Algorithm Optimization |
算法优化 |
200 |
Interface Design |
接口设计 |
160 |
Coding Standard |
代码规范 |
60 |
Design |
具体设计 |
160 |
Coding |
具体编码 |
600 |
Code Review |
代码复审 |
60 |
Test |
测试 |
150 |
Reporting |
报告 |
120 |
Test Report |
测试报告 |
100 |
Size Measurement |
计算工作量 |
30 |
Postmortem & Process Improvement Plan |
事后总结, 并提出过程改进计划 |
150 |
以上是关于结对作业的主要内容,如果未能解决你的问题,请参考以下文章