结对作业
结对对象:刘云
(1)前言:代码地址:https://git.coding.net/yueshendaren/teamwork_2.git
由于能力和时间的问题,项目中的部分功能我们并没有实现,比如括号。而且我们的界面也比较粗糙,只有基本的出题功能。总的来说,成品不是很好,如果有时间的话,会进行一次更新。
PSP |
任务内容 |
计划完成需要的时间(min) |
Planning |
计划 |
10 |
Estimate |
明确需求和其他相关因素 |
5 |
Development |
开发 |
10 |
Design spec |
生成设计文档 |
10 |
Design review |
设计复审 |
11 |
Coding standard |
代码规范 |
10 |
Design |
具体设计 |
20 |
Coding |
具体编码 |
300 |
Code review |
代码复审 |
20 |
Test |
测试 |
10 |
Record time spent |
记录用时 |
10 |
Test report |
测试报告 |
30 |
Size measurement |
计算工作量 |
1 |
Postmortem |
事后总结 |
9 |
(3)
Information Hiding:信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
Interface Design:接口设计,我们把这种人-软件之间的接口称作“用户界面”,也就是“UI”。由于前端能力不足,我们使用GUI来设计界面。虽然效果也不是很好,主要原因还是代码能力急需提高
Loose Coupling:松耦合系统通常是基于消息的系统,此时客户端和远程服务并不知道对方是如何实现的。客户端和服务之间的通讯由消息的架构支配。只要消息符合协商的架构,则客户端或服务的实现就可以根据需要进行更改,而不必担心会破坏对方。
(4)计算模块接口的设计与实现过程:
使用sign来对运算进行限制,并生成第二个数。sign可以避免出现连续的乘除、负数、小数、结果高于上限
1 static private String createFormula() 2 { 3 int digital, sign = 0; 4 char symbol = 0; 5 String formula = ""; 6 7 digital = (int)(Math.random()*20); 8 formula = formula + digital; 9 10 for(int i=0; i<sumOfOperator; i++) 11 { 12 if(sign >= 2 || !haveMulityAndDivid) //没有乘除的话只生成+ - 13 sign = (int)(Math.random()*2); 14 else sign = (int)(Math.random()*4); 15 16 if(sign == 0) { 17 symbol = '+'; 18 digital = (int)(Math.random()*maxNum+minNum); 19 } 20 else if(sign == 1) { 21 symbol = '-'; 22 digital = (int)(Math.random()*digital+minNum); //减去上一个digital 23 } 24 else if(sign == 2) { 25 symbol = '*'; 26 digital = (int)(Math.random()*(100/(digital+1))+1); 27 28 } 29 else if(sign == 3) { 30 symbol = '÷'; 31 for(int j=2; j<=digital; j++) 32 if(digital%j == 0) { 33 digital = j; 34 break; 35 } 36 } 37 formula = formula + symbol + digital; 38 } 39 return formula; 40 } 41
(5)
(6)计算模块部分单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。只需要测试命令行部分,且该部分覆盖率到90%以上,否则单元测试部分视作无效。
import static org.junit.Assert.*; import java.io.IOException; import org.junit.Test; public class LibTest { @Test public void testLib() { Lib lib = new Lib(); } @Test public void testSetOps() { Lib.setOps(3); Lib.setOps(5); } @Test public void testSetOpLevel() { Lib.setOpLevel(true); Lib.setOpLevel(false); } @Test public void testSetNum() { Lib.setNum(5, 50); Lib.setNum(1, 100); } @Test public void testSetSum() { Lib.setSum(15); } @Test public void testPrintFormula() { Lib.setSum(5); Lib.setOps(5); Lib.setNum(1, 100); Lib.setOpLevel(true); try { Lib.printFormula(15); Lib.printFormula(); } catch(IOException ioe) { ioe.printStackTrace(); } } }
(7)计算模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。
在命令行测试中,对用户输入的命令即其参数进行判断:
1. 当输入的不是应有命令时,对用户做出提醒,输入正确的命令,列出合法命令
2.当用户输入的参数错误时,对用户做出提醒,并解释各个参数的写法及各个命令的含义
3.对于合法的命令和参数,对参数进行检查,看是否符合要求:不能出现负数题数,负数符号数,下界不能大于上界等。
(8)界面模块的详细设计过程:前面已经说了我们只是做了一个及其简单的界面
使用GUI中网格的布局,这部分队友懂的多一点,大部分都是他做的
public GUI() { Color color = new Color(200,200,200); Font font = new Font("SansSerif",Font.BOLD,13); Font font2 = new Font("SansSerif",Font.CENTER_BASELINE,28); JPanel p1 = new JPanel(); p1.setLayout(new GridLayout(6,2)); JLabel NOQ= new JLabel(" 需要的题目数量" +"(1~10000):"); NOQ.setFont(font); p1.add(NOQ); p1.add(sum); JLabel RON = new JLabel(" 题目的数值范围(下界1~100):"); RON.setFont(font); p1.add(RON); p1.add(min); p1.add(new JLabel(" 题目的数值范围(上界50~1000):")); p1.add(max); JLabel NOO = new JLabel(" 题目中最多存在运算符数量:"); NOO.setFont(font); p1.add(NOO); p1.add(ops); JLabel isMul = new JLabel(" 题目中是否有乘除法:"); isMul.setFont(font); p1.add(isMul); p1.add(b2); b2.setBackground(new Color (200,200,200)); p1.setFont(font); JPanel p2 = new JPanel(); Cre.addActionListener(new ButtonListener()); Cre.setFont(font); Cre.setBackground(new Color(250,250,250)); p2.add(Cre,BorderLayout.WEST); add(p1,BorderLayout.CENTER); JLabel title = new JLabel("四则运算题目生成系统"); title.setFont(font2); JPanel p3 = new JPanel(); p3.add(title,BorderLayout.CENTER);
(9)界面模块与计算模块的对接:
(10)描述结对的过程:我和云总关系本来就不错,彼此之间也有很多的共同语言。结对过程还是很顺利的。云总在代码能力上要比我强,很多时候都是他在带我。总的来说,这次结对项目两边都有进步,也是一次很好的经历。
(11)优点:分工进行工作,节约时间
彼此交流,促进两个人的进步
培养默契,加深对彼此编程习惯的了解
缺点:容易产生分歧,影响进度
编程能力有差别,导致彼此进度不同。影响效率。
(12)
PSP |
任务内容 |
实际完成需要的时间(min) |
Planning |
计划 |
35 |
Estimate |
明确需求和其他相关因素 |
35 |
Development |
开发 |
300 |
Design spec |
生成设计文档 |
10 |
Design review |
设计复审 |
8 |
Coding standard |
代码规范 |
15 |
Design |
具体设计 |
50 |
Coding |
具体编码 |
300 |
Code review |
代码复审 |
50 |
Test |
测试 |
40 |
Record time spent |
记录用时 |
10 |
Test report |
测试报告 |
20 |
Size measurement |
计算工作量 |
10 |
Postmortem |
事后总结 |
20 |