• 四则运算之结对作业报告


    一、项目Coding.net原码仓库地址:https://git.coding.net/caoying/Teamwork.git

        曹滢2016012102

        卢琪2016011986

    二、PSP表格之时间规划

    PSP

    任务内容

    计划时间(min

    Planning

    计划

    30

    Estimate

    估计这个任务需要多少时间,并规划大致工作步骤

     

    30

    Development

    开发

    2880

    Analysis

    需求分析

    30

    Design Spec

    生成文档

    40

                       Design Review

    设计复审

    20

    Coding Standard

    代码规范

    10

    Design

    具体设计

    40

    Coding

    具体编码

    2000

    Code Review

    代码复审

    30

    Test

    测试

    30

    Reporting

    报告

    180

    Test Report

    测试报告

    30

    Size Measurement

    计算工作量

    20

    Postmortem & Process Improvement Plan

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

     

    30

    三、接口设计介绍

    1.Information Hiding:即信息隐藏。封装经常与信息隐藏交替使用,可以把信息隐藏作为原理和封装的技术。一个软件模块隐藏信息封装成模块或其他信息构建了一个接口。信息隐藏的一个常见用途是隐藏数据的物理存储布局,如果是改变,改变是限制的总计划的一小部分。面向对象的程序设计,信息隐藏(通过嵌套类型)通过移动代码的降低软件开发的风险附属国在一个不确定的实施(设计)到一个明确的接口。接口的客户端执行的操作完全通过它所以如果实现的变化,客户不必改变。

    设计:调用方法——对函数进行封装、模块化设计

    2.Interface Design:即接口设计。接口是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,接口类型可用来声明一个变量可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

    设计:调用抽象方法——对抽象类、接口进行模块化设计

    3.Loose Coupling:即松耦合。松耦合发生在依赖类包含一个指针只有一个接口,然后可以通过一个或多个具体的类实现。依赖类的依赖是一种“合同”指定的接口;定义列表的方法和/或特性,实现类必须提供。任何实现该接口的类可以满足一类依赖的依赖不改变类。这使得在软件设计中的可扩展性;一个新的类实现一个接口可以写在一些或所有的情况下,代替目前的依赖,无需改变依赖类;新老班可自由转换。

    设计:减少各模块间的依赖性。

    四、计算模块接口的设计及实现

    1.类和函数的组成及关系

        我们一共用了6个类,一共用了 10个函数。它们的关系是不同的类都包含着不同的函数。

    2.函数流程图

    4.算法的关键及独到之处

        我们算法的关键是利用了不同的监听器来实现各种组件,利用不同的接口来实现函数调用。我们的独到之处是界面模块简洁、功能齐全,算法易懂易理解。

    五、计算模块接口的性能改进

    1.性能改进思路及时间花费

        为确保软件满足或超过设计的期望值,有必要分析应用程序的性能以发现潜在的问题。这个过程被称为“性能分析”。它包括检查应用程序以确保每个组件有效地工作,并根据设计密切注视处理器的使用、网络和系统服务、存储和输入/输出(I/O)。

        在运行代码的性能分析中,我们发现资源回收不完全。经过各种调试,我们发现是输入输出流的关系,所以我们关闭输出流、修改了代码。整个过程花费了接近三个小时。

    2.性能分析图展示及程序中消耗最大函数

    展示图:

    程序中消耗最大的函数无疑是包含过程最多、工程量最大的函数。

    六、单元测试展示

    1.单元测试代码及函数

    单元测试的代码:(这里就以算分这个类为例,其余测试类似)

    public class CoreTest extends TestCase {
    
    	public void testNewExpSome() {
    		Core.newExpSome(true, 50, 1, 3);
    	}
    
    	public void testNewExpAll() {
    		Core.newExpAll(false, 50, 1, 3);
    	}
    
    	public void testDivideExactly() {
    		Core.divideExactly(48, 8,5);
    	}
    
    }
    

    单元测试的函数:(这里就以算分这个类为例,其余测试类似)

    2.构造测试数据的思路

        我们的思路是从要测试的对象出发:首先,我们有一个生成加减乘除类、有一个可以计算式子并返回结果的类、有一个判断优先级的类;接下来我们就要对它们测试。其次我们还有GUI窗口,因此也要进行测试。

    3.测试覆盖率截图

    在同学的帮助下,使得我们团队的测试覆盖率达到了97%

    如下图:

    七、异常处理说明

    1.输入数判断是否超范围

        这里用try——catch方法来捕获异常:

    try {
        n = Integer.parseInt(n.getText());
        if (n<0 || n > 10000) {
            n.setText("n不在范围内,需重输");
            return;
        }
        flag0 = 1;
    } catch (Exception a) {
        n.setText("n异常,需重输");
    }
    

    2.文件处理异常

       这里同样用try——catch方法来捕获异常:

    try {
      Ffile = new PrintStream("result.txt");
       System.setOut(Ffile);
     } catch (Exception e) {
      System.out.println("文件生成错误");
     }
    

    八、界面设计过程

    1.设计思路

       我们要设计各个界面的GUI,就要弄清楚分几个界面、各个界面要包含哪些组件、要实现什么具体的功能。所以我们根据分析,有这些:出题界面GUI的设计、答题界面GUI的设计及文件上传界面GUI的设计。

    2.实现过程

    首页界面GUI代码:

    static class Hello extends JPanel {
    		JLabel title = new JLabel("欢迎来到四则运算小程序!");
    		JLabel l = new JLabel();
    		JButton timu = new JButton("生成题目");
    		JButton finish = new JButton("完成题目");
    

    出题界面GUI代码:

    static class InMakeExp extends JPanel{
    		JLabel timunum = new JLabel("题目数量");
    		JLabel timulower = new JLabel("数值的下界范围");
    		JLabel timuupper = new JLabel("数值的上界范围");
    		JLabel most = new JLabel("运算符最多个数");
    		JCheckBox chenchu = new JCheckBox("乘除法",false);
    		JCheckBox bracket = new JCheckBox("括号",false);
    		JButton ok = new JButton("提交");
    JTextField num = new JTextField(10);
    JTextField lower = new JTextField(10);
    JTextField upper = new JTextField(10);
    JTextField most_ = new JTextField(10); JLabel l = new JLabel();

    答题界面GUI代码:

                    timu = new JLabel("题目:");
    		timu.setSize(100, 40);
    		timu.setLocation(650, 100);
    		l.add(timu);
    		timu.setVisible(false);
    
    		daan = new JLabel("答案:");
    		daan.setSize(100, 40);
    		daan.setLocation(650, 160);
    		l.add(la22);
    		daan.setVisible(false);
    
    		question = new JTextArea();
    		question.setSize(150, 30);
    		question.setLocation(700, 100);
    		l.add(question);
    		question.setVisible(false);
    
    		answer = new JTextArea();
    		answer.setSize(70, 30);
    		answer.setLocation(700, 160);
    		l.add(answer);
    		answer.setVisible(false);
    
    		tijiao= new JButton("提交");
    		tijiao.addActionListener(this);
    		tijiao.setSize(70, 30);
    		tijiao.setLocation(780, 160);
    		tijiao.setFont(new Font("Dialog", 1, 14));
    		l.add(next);
    		tijiao.setVisible(false);
    	}
    

    文件上传界面GUI代码:

                    shangchuan= new JButton("上传文件");
    		shangchuan.addActionListener(this);
    		shangchuan.setFont(new Font("Dialog", 1, 18));
    		shangchuan.setSize(120, 30);
    		shangchuan.setLocation(515, 140);
    		l.add(upload);

    九、界面模块与计算模块的对接

    1.对接描述

        我们GUI界面与计算模块的对接是通过获取参数,调用方法来实现的。出题时,将题目写入文件,然后文件下载到本地。做题时,上传题目后,将题目和答案封装到list集合中。

    2.功能截图

    首页:

    出题界面:

    答题界面:

    文件上传截图:

    生成题目截图:

    做题判断结果:

    十、结对过程描述及合照

    描述:我是主动找卢琪同学结对的,因为和她很合得来。结对之后,针对我们的结对作业,我们讨论过很多次。最开始我们商量做一个web网页,我负责前端部分、她负责后端部分,后台代码实现用她个人作业的Java代码,并且规划了具体要展示什么、实现什么,然后我们利用课余时间以及假期分别做了各自的部分。这里说明一下,各自分开做是卢琪同学有假期出行,也为我的队友出行还在顾着项目作业点个赞。然而由于我们各自分开做各自的,导致后端和前端的代码合不上,并且问题接临而至,如前端部分不能获取后台数据、没有服务器等等,所以后来我们由协商了一下决定做GUI。但这里还是稍微展示一下我完成的前端部分:

    前端构架:

    首页:(输入完整后点确定即跳到主页)

    主页:(可以计时,做完题目后点提交可判断每题的正确与否,可计算答对题数)

    合照:

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

    结对编程的优点:1.两个人有商有量,可以各自分担项目的一半;

                    2.两个人互相学习,可以相互鼓励增加彼此信心;

                    3.两个人更有动力,可以促进各自写代码的效率。

    结对编程的缺点:1.两个人商量可能会出现意见有分歧;

                    2.两个人分开完成项目的一部分,可能会导致事倍功半,比如我们之前做web项目却中途进行不下去了;

                    3.两个人之中有一个更厉害的,那么另一人可能会产生依赖、付出也较少。

    我的队友卢琪的优点:1.为人和善,易沟通;2.技术厉害,善于学习;3.做事细致。 缺点:做事太细致,速度稍微有点慢。

    我的优点:1.平易近人;2.认真学习;3.虚心请教。 缺点:做事风风火火,不是很细致。

    十二、PSP表格之时间记录

    PSP

    任务内容

    完成时间(min

    Planning

    计划

    40

    Estimate

    估计这个任务需要多少时间,并规划大致工作步骤

     

    60

    Development

    开发

    4320

    Analysis

    需求分析

    30

    Design Spec

    生成文档

    60

    Design Review

    设计复审

    20

    Coding Standard

    代码规范

    10

    Design

    具体设计

    60

    Coding

    具体编码

    3600

    Code Review

    代码复审

    40

    Test

    测试

    50

    Reporting

    报告

    300

    Test Report

    测试报告

    50

    Size Measurement

    计算工作量

    30

    Postmortem & Process Improvement Plan

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

     

    40

  • 相关阅读:
    排序算法整理
    V-REP Plugin 开发
    YAML-CPP
    YAML
    V-REP Remote API
    V-REP Plugin
    结构化方法与面向对象方法的比较
    敏捷软件开发vs传统软件工程
    个人项目-地铁出行路线规划程序
    Week1个人作业
  • 原文地址:https://www.cnblogs.com/caoying993/p/8769255.html
Copyright © 2020-2023  润新知