结对项目

一、Coding.Net项目地址: https://git.coding.net/gemyty/team.git

 

二、PSP表格估算时间:

PSP

任务内容

计划共完成需要的时间(min)

Planning

计划

70

·        Estimate

·   估计这个任务需要多少时间,

并规划大致工作步骤

70

Development

开发

2585

·        Analysis

·         需求分析 (包括学习新技术)

120

·        Design Spec

·         生成设计文档

60

·        Design Review

·         设计复审 (和同事审核设计文档)

20

·        Coding Standard

·         代码规范 (为目前的开发制定合适的规范)

15

·        Design

·         具体设计

120

·        Coding

·         具体编码

1800

·        Code Review

·         代码复审

90

·        Test

·         测试(自我测试,修改代码,提交修改)

360

Reporting

报告

95

·         Test Report

·         测试报告

45

·         Size Measurement

·         计算工作量

20

·         Postmortem & Process Improvement Plan

·         事后总结, 并提出过程改进计划

30

 

Information Hiding, Interface Design, Loose Coupling方法对接口进行设计的实现

      首先我对这几个概念进行了资料查阅,了解了它们是什么,为何这么做。

1、Information Hiding(信息隐藏)

什么是信息隐藏

信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。

信息隐藏是软件的首要技术使命中格外重要的一种启发式方法,因为它强调的就是隐藏复杂度。

信息隐藏在设计的所有层次上都有很大作用:从用具名常量代替字面常量,到创建数据类型,再到类的设计、子程序的设计以及子系统的设计等等。

为什么要隐藏

  1. 隐藏复杂度:这样你就不用再去应付它,除非你要特别关注的时候;
  2. 隐藏变化源:这样当变化发生时,其影响就能被限制在局部范围内。复杂度的根源包括复杂的数据类型、文件结构、布尔判断以及晦涩的算法等等。

2、Interface Design(接口设计)

设计接口 design interface是传统的后勤保障的一种要素也是一种后勤功能。

  与后勤有关的设计参数(如可靠性和维修性)与战备完好性和保障资源要求间的相互关系。这些与后勤有关的设计参数用使用值而不是用固有值表示,并与装备系统战备完好性目标和保障费用有着特定的关系。

      它涉及与后勤有关的设计参数(如可靠性和维修性)与战备完好性和保障资源要求的相互关系。这些与后勤有关的设计参数应采用使用值而不应采用固有值表示,它与装备系统战备完好性目标和保障费用有着特定的关系。

  有关保障性的设计参数(如可靠性和维修性)与战备完好性及保障资源要求之间的相互关系。这些保障性设计参数应该用使用值表示,并与战备完好性目标和保障费用有特定的关系。

 

3、Loose Coupling

松耦合的基本概念是:允许改变或者当问题发生在“电线的一端时”来避免影响到其他的端点。也就是说,改变或者供应者或者服务的问题不能影响到用户----或者用户的问题不应影响到供应者或者服务。举例来说,如果服务的新版本被推出的话,服务的用户就不必非要去修改,不必非要去改变路线,甚至不必经历停滞期----因为它(服务的新版本被推出)能清楚地向他们显示出来。相对而言,如果服务的一个用户决定改变他们正在使用的供应者(可能有了一个更低价格的服务供选择),这不需要用户应用必须要被重新编码,甚至是中断来做这样的改变。作为提供松耦合的必备基本要素,Web服务管理代理经常使用在用户和供应者之间。松耦合的目标是最小化依赖。松耦合这个概念主要用来处理可伸缩性、灵活性和容错这些需求。

 在本次结对项目中,我们用了MVC模型开发,在不同层都用到了接口的设计,并不需要在很多地方修改。

 

四、计算模块接口的设计与实现过程。

 

五、单元测试与效能分析

 

//测试题目是否可用并更改题目的可用状态
    boolean testQuestion() throws MyException {
        Box box1 = this.box;
        questionTest.setResults(getResult(box1));
        if(questionTest.getResults()>0&&!(questionTest.getResults()==20180323)){
            questionTest.getResults();
            questionTest.setUseful(true);
        }
        return questionTest.isUseful();
    }

    //获取运算后的答案
    int getResult(){
        return questionTest.getResults();
    }

    //遗留的未实现方法
    public Question fixQuestion(){
        return questionTest;
    }
}

//策略模式--------------------------------------------|
class Function{
    Box run(Box box,int[] m) throws MyException{
        return box;
    }
}

//乘法运算部分
class Multiplication extends Function {
    @Override
    Box run(Box box,int[] m)throws MyException{
        if((box.listN.get(box.listC.indexOf('*')) * box.listN.get(box.listC.indexOf('*') + 1))>m[0]&&(box.listN.get(box.listC.indexOf('*')) * box.listN.get(box.listC.indexOf('*') + 1))<m[1]) {
            box.listN.set(box.listC.indexOf('*'), box.listN.get(box.listC.indexOf('*')) * box.listN.get(box.listC.indexOf('*') + 1));
            box.listN.remove(box.listC.indexOf('*') + 1);
            box.listC.remove(box.listC.indexOf('*'));
        }else {
            throw new MyException("无法使用该题目");
        }
        return box;
    }
}

 

  

 

 

 

六、计算模块部分异常处理说明。

private class ButtonListener implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            try {
                n1 = Integer.parseInt(n.getText());
                if (n1 <= 0 || n1 > 10000) {
                    n.setText("输入数字错误,请输入0到10000的数字哦");
                    return;
                }
                flag0 = 1;
            } catch (Exception a) {
                n.setText("不对哦,请重新输入数字哦");
            }
            try {
                m11 = Integer.parseInt(m1.getText());
                if (m11 <= 0 || m11 > 100) {
                    m1.setText("输入数字错误,请输入0到100的数字哦");
                    return;
                }
                flag1 = 1;
            } catch (Exception a) {
                m1.setText("不对哦,请重新输入数字哦");
            }
            try {
                m22 = Integer.parseInt(m2.getText());
                if (m22 < 50 || m22 > 1000) {
                    m2.setText("输入数字错误,请输入50到1000的数字哦");
                    return;
                }
                flag2 = 1;

            } catch (Exception a) {
                m2.setText("不对哦,请重新输入数字哦");
            }
            try {
                o1 = Integer.parseInt(o.getText());
                if (o1 <= 0 || o1 > 10) {
                    o.setText("输入数字错误,请输入1到10的数字哦");
                    return;
                }
                flag3 = 1;
            } catch (Exception a) {
                o.setText("不对哦,请重新输入数字哦");
            }

 

七、界面模块的详细设计过程。在博客中详细介绍界面模块是如何设计的,并写一些必要的代码说明解释实现过程。

1、Command:出题界面,按要求输入想要获得的题目条件;

2、GUI:所有GUI界面的设计;

3、Operation系列:根据接受要求实现生产运算式,并判断正误,得出结果,并计时;

4、Symbol:运算符生成;

5、Prior:优先级的判断。

public class Prior {
    public static int prior(char c)
    {
        if (c == '(')
            return 0;
        if (c == '+' || c == '-')
            return 1;
        if (c == '*' || c == '÷')
            return 2;
        return -1;
    }
}

 

八、界面模块与计算模块的对接。

 

 

 

 

 

 

 

 

九、两人在讨论的结对照片。

 

十、说明结对编程的优点和缺点。同时指出结对的每一个人的优点和缺点在哪里 (要列出至少三个优点和一个缺点)。

1、结对项目

优点:效率更高,思路更开阔,遇到问题能马上得到一定的解决,有时候可能只是突然脑袋短路,而同伴会马上提醒,就不必一直纠结在一个非常简单的小错误里。而且成果能吸取两个人的优点,弥补个人的不足之处。遇到困难有同伴的陪伴心理压力比一个人小。

缺点:因为每个人的特点不同,需要一段时间来磨合,这段时间效率不太高;还有时间问题,需要找到两个人都有时间有一定的难度。

2、个人

冯舒怡:

优点:认真负责,耐心,能想到特别的点子

缺点:做事较拖沓

我:

优点:沉着冷静,态度积极,细心

缺点:代码能力欠佳

 

十一、PSP各个模块上实际花费的时间。

PSP

任务内容

实际完成的时间(min)

Planning

计划

60

·        Estimate

·   估计这个任务需要多少时间,

并规划大致工作步骤

60

Development

开发

2995

·        Analysis

·         需求分析 (包括学习新技术)

220

·        Design Spec

·         生成设计文档

40

·        Design Review

·         设计复审 (和同事审核设计文档)

15

·        Coding Standard

·         代码规范 (为目前的开发制定合适的规范)

20

·        Design

·         具体设计

160

·        Coding

·         具体编码

2000

·        Code Review

·         代码复审

120

·        Test

·         测试(自我测试,修改代码,提交修改)

420

Reporting

报告

130

·         Test Report

·         测试报告

80

·         Size Measurement

·         计算工作量

20

·         Postmortem & Process Improvement Plan

·         事后总结, 并提出过程改进计划

30

 

原文地址:https://www.cnblogs.com/benmatt/p/8765601.html