• 结对项目


    一、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

     

  • 相关阅读:
    Winform 打包,卸载程序制作获取ProductCode
    委托/事件的重写
    反序列化无法找到程序集
    Control.Invoke注意事项
    操作config文件
    MemoEdit自动滚动到结尾
    读取局域网内的共享文件
    命令行卸载程序
    获取执行程序的路径
    SCSF 系列:使用 Visualizer 监控 SCSF 运行状态
  • 原文地址:https://www.cnblogs.com/benmatt/p/8765601.html
Copyright © 2020-2023  润新知