结队项目

结队项目报告

  • Coding.Net项目地址

项目地址:https://git.coding.net/gemyty/team.git

伙伴博客地址:http://www.cnblogs.com/benmatt/p/8765601.html

 

  • 计划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

信息隐藏(Information Hiding)

什么是信息隐藏

    • 信息隐藏指在设计和确定模块时,使得一个模块内包含的特定信息(过程或数据),对于不需要这些信息的其他模块来说,是不可访问的。
    • 信息隐藏是软件的首要技术使命中格外重要的一种启发式方法,因为它强调的就是隐藏复杂度。

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

为什么要隐藏?

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

 

接口设计Interface Design

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

  它涉及与后勤有关的设计参数(如可靠性和维修性)与战备完好性和保障资源要求的相互关系。这些与后勤有关的设计参数应采用使用值而不应采用固有值表示,它与装备系统战备完好性目标和保障费用有着特定的关系。(防务采办术语-98)
  与后勤有关的设计参数(如可靠性和维修性)与战备完好性和保障资源要求间的相互关系。这些与后勤有关的设计参数用使用值而不是用固有值表示,并与装备系统战备完好性目标和保障费用有着特定的关系。(DoDD5000.39-83、防务采办术语-89)
  有关保障性的设计参数(如可靠性和维修性)与战备完好性及保障资源要求之间的相互关系。这些保障性设计参数应该用使用值表示,并与战备完好性目标和保障费用有特定的关系。(GJB1371-92)

对于接口,除了之前学JAVA的时候很草率地了解了“接口”,其余也没有特别的懂,所以在学习这方面的知识时,我们查看了一些博客:

https://blog.youkuaiyun.com/h8135/article/details/307205

https://blog.youkuaiyun.com/lingshaoxia/article/details/21097839

 

松耦合(Loose Coupling

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

松耦合的目标:最小化依赖,主要用来处理可伸缩性、灵活性和容错这些需求。

 

在本次项目中,对于用户而言,只需要设置自己的参数,得到相应的题目,因为用户不会关心题目是如何生成的,只需要调用这个方法,所以可以将生成题目这一模块设计成接口,计算模块也是一样。

在模块的优化过程中,保证接口不变,我们只需要修改接口的实现,并不需要对其他地方进行修改,程序也可以正常运行。

对于本次项目来说,采用mvc模式开发,所以在不同的层都会用到设计的接口。

 

  • 模块接口的设计与实现过程

 

 

  • 单元测试与效能分析

单元测试分三个:Tester、Maker、Outer

Tester:用于测试者的测试,测试题目是否可用并生成答案

Maker:用于制造题目的测试

Outer:用于输出者的测试,规范输出题目

列出一个单元测试及其样例:

对于n

 

case "-n": {
                    try {
                        n = Integer.parseInt(args[i + 1]);
                        if (n < 1 || n > 1000) {
                            System.out.println("对不起,请注意题目数量为1-1000!");
                            return; 
                        }
                    } catch (ArrayIndexOutOfBoundsException e) { //未输入数字时args[i+1]会数组越界
                        System.out.println("您未输入题目数量!");
                        return;
                    }catch (NumberFormatException e) { //输入非数字字符等
                        System.out.println("对不起,请输入1-1000的数字!");
                        return; 
                    }

                    break;
                }

 

@Test
    public void main() throws Exception {
        String[] args1 = {"-n","0","-m","99","60","-o","9"};
        Command.main(args7);

        String[] args2 = {"-n","a","-m","99","60","-o","9"};
        Command.main(args8);

        String[] args3 = {"-n"};
    }

 

 

 

 

  • 关于异常

抛出异常的条件:

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("不对哦,请重新输入数字哦");
            }
………………

}

 

异常时的面板展示:

 

  • 界面模块的详细设计过程

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

GUI——所有GUI界面的设计;

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

Symbol——运算符生成;

Prior——优先级的判断。

 

展示部分面板:

 

 部分代码:

    private JButton jbtRight = new JButton("开始做题");
    private JButton developer = new JButton("上传文件");
    private JCheckBox jchkCentered = new JCheckBox("有乘除法");
    private JCheckBox jchkBold = new JCheckBox("有括号");
    private JTextField n = new JTextField(8);
    private JTextField m1 = new JTextField(8);
    private JTextField m2 = new JTextField(8);
    private JTextField o = new JTextField(8);
    private JLabel label = new JLabel();
    private static JLabel label0 = new JLabel();
    private static JButton jbnext = new JButton("下一题");
    private static JButton jbsubmit = new JButton("完成");
JPanel p1 = new JPanel();
        p1.setLayout(new GridLayout(4, 2, 5, 5));
        p1.add(new JLabel("请输入题目数量[1,10000]:"));
        p1.add(n);
        p1.add(new JLabel("请输入数字最小值[1,100]:"));
        p1.add(m1);
        p1.add(new JLabel("请输入数字最大值[50,1000]:"));
        p1.add(m2);
        p1.add(new JLabel("请输入运算符个数[1,10]:"));
        p1.add(o);
public String addProblem() {
        Font font = new Font(Font.DIALOG, Font.PLAIN, 20);
        label.setFont(font);
        String problem;
        if (b == 1 && c == 1) {
            flag4 = 1;
            problem = Operation.Operation(n1, m11, m22, c, o1);
        } else if (b == 0) {
            flag4 = 0;
            problem = Operation1.Operation(n1, m11, m22, c, o1);
        } else {
            flag4 = -1;
            problem = Operation2.Operation(n1, m11, m22, c, o1);
        }
         label.setText(problem);
        return "题目:" + problem + "=";
    }

 

  • 界面模块与计算模块的对接

 

部分面板展示:

 

 

 

 

  • 结对过程

 

 

  • 关于结对编程

http://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html

    • 结对项目的优点:效率更高,思路更开阔,遇到问题能马上得到一定的解决,有时候可能只是突然脑袋短路,而同伴会马上提醒,就不必一直纠结在一个非常简单的小错误里。而且成果能吸取两个人的优点,弥补个人的不足之处。遇到困难有同伴的陪伴心理压力比一个人小。
    • 结对的缺点:因为每个人的特点不同,需要一段时间来磨合,这段时间效率不太高;还有时间问题,需要找到两个人都有时间有一定的难度。
    • 个人优缺点:

冯舒怡:

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

缺点:做事较拖沓,喜欢延迟到DDL

郭腾岳:

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

缺点:代码能力欠佳 

  • 实际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/Faith-sy/p/8766100.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值