结对作业

 

结对对象:刘云

(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

posted @ 2018-04-10 07:48  樾神大人  阅读(172)  评论(1编辑  收藏  举报