• 软件工程实验二---结对编程


    软件工程实验二---结对编程

    一、实验目标:

    1)体验敏捷开发中的两人合作。
    2)进一步提高个人编程技巧与实践

    二、实验内容:

    1)根据以下问题描述,练习结对编程(pair programming)实践;
    2)要求学生两人一组,自由组合。每组使用一台计算机,二人共同编码,完成实验要求;
    3)要求在结对编程工作期间,两人的角色至少切换 4 次;
    4)编程语言不限,版本不限。建议使用 Python 或 JAVA 进行编程。

    三、问题描述(二选一)

    见第一阶段

    四、实验过程

    第一阶段

    ​ 见上一次实验报告

    第二阶段

    1).代码规范

    变量命名规范:使用驼峰式的命名方式,函数和变量以及类名使用简介且容易理解的英文名称
    代码书写规范:需要正确的缩进,对于函数需要有简单易懂的注解;排版避免再一个语句里给多个变量赋值等
    其他:参考阿里巴巴的Java代码约束

    2).程序的总体设计
    经过讨论之后确定总体设计分为如下几个模块,以及各个模块的关系如下:

    • 初始化模块
    • 界面模块
    • 程序规则控制模块
    • 刷新模块
      img

    3).结对编程过程
    经过协商我们决定先写好程序的架构,以及完成初始化模块,界面模块的设计,然后再完成规则控制和刷新模块,并且在此期间参考了网上的文档。
    初始化模块和GUI模块
    初始化模块主要包括初始化随机数组,界面模块设计主要包括可获取行列,以及刷新频率等,还有显示地图信息。

    五、实验结果

    ​ 运行结果:当程序开始运行时,即开始运行,默认刷新频率为1s,长宽分别为50个格子

    image-20200330140844582

    image-20200330141145009

    改变长宽:

    image-20200330141204465

    image-20200330141354931

    代码如仓库中代码所示:仓库链接

    img

    代码如下

    GUI代码块:

    package test.lifeGame;
    
    import test.demo.extendsJPanel;
    
    import javax.swing.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    //对于遇到的覆盖问题,可以使用多个JPanel试试能不能解决,实在不行其他控件只能放菜单栏
    public class GUI extends JFrame {
        Thread thread;
    
        private final gameDemo game;
        private boolean GameStatus = false;
    
        private JButton jbuttonRun;
        private JLabel jlabelRows;
    
        private JTextField jtextRows;
        private JLabel jLabelCols;
        private JTextField jtextCols;
    
        private JLabel jLabelRate;
        private JTextField jtextRate;
    
        public GUI(){
            game = new gameDemo(50,50);//可用像素:500
            game.setBounds(0,0,450,450);
            thread = new Thread(game);
            thread.start();
            add(game);
        }
    
        public  void init(){
            setTitle("生命游戏");
            setBounds(200,150,700,540);
            getContentPane().setLayout(null);
    
            //设置Rate文本
            jLabelRate = new JLabel("Rate:");
            jLabelRate.setBounds(500,100,40,20);
            this.getContentPane().add(jLabelRate);
    
            jtextRate = new JTextField("1=>1s");
            jtextRate.setBounds(540,100,60,20);
            this.getContentPane().add(jtextRate);
    
            //设置cols文本
            jLabelCols = new JLabel("Cols:");
            jLabelCols.setBounds(500,200,40,20);
            this.getContentPane().add(jLabelCols);
    
            jtextCols = new JTextField();
            jtextCols.setBounds(540,200,60,20);
            this.getContentPane().add(jtextCols);
    
            //设置Rows文本
            jlabelRows = new JLabel();
            jlabelRows.setText("Rows:");
            jlabelRows.setBounds(500,300,40,20);
            this.getContentPane().add(jlabelRows);
    
            jtextRows = new JTextField();
            jtextRows.setBounds(540,300,60,20);
            this.getContentPane().add(jtextRows);
    
            //run按钮
            jbuttonRun = new JButton("run");
            jbuttonRun.setBounds(500,400,100,40);
            this.getContentPane().add(jbuttonRun);
            jbuttonRun.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    //添加获取输入的代码,以及执行规则的代码,线程的暂停和重启
                    if(!GameStatus){
                        GameStatus=true;
                        game.cancle();
                        jbuttonRun.setText("stop");
                    }else{
                        String col_st = jtextCols.getText();
                        String row_st = jtextRows.getText();
                        String rate_st = jtextRate.getText();
    
                        System.out.println("col:"+Integer.parseInt(col_st)+",row:"+Integer.parseInt(row_st)+",rate:"+Float.parseFloat(rate_st));
                        game.Start();
                        game.generationRandom(Integer.parseInt(col_st),Integer.parseInt(row_st));
                        game.setFrequenceRate(Float.parseFloat(rate_st));
    
                        GameStatus = false;
                        jbuttonRun.setText("run");
                    }
    
                }
            });
    
        }
    
        public static void main(String[] args) {
            GUI frame = new GUI();
            frame.init();
            frame.setVisible(true);
            frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    
        }
    
    }
    
    

    总结

    经过了两个星期的结对编程实验,基本上掌握了结对编程的基本过程,在结对编程中,最让我感到受益的是在两个人讨论下解决问题的过程,在以往的编程活动中,往往只有自己一个人解决问题,有时即使解决了也感觉自己想的不够全面,但是在结对编程中,两个同时思考如何解决问题,互相讨论,不断完善对这个问题的理解,比仅仅解决这个问题收获更多。

  • 相关阅读:
    Python接口自动化测试(15):Django后台设置
    Python接口自动化测试(14):Django安装和项目创建
    Python接口自动化测试(13):Jmeter测试报告
    Python接口自动化测试(12):Jmeter授权设置
    Python接口自动化测试(11):Jmeter数据驱动
    Python接口自动化测试(10):Jmeter参数关联
    Python接口自动化测试(9):Jmeter变量设置
    redis高可用集群搭建
    熔断器 Hystrix
    负载均衡 Ribbon
  • 原文地址:https://www.cnblogs.com/csLu/p/12598496.html
Copyright © 2020-2023  润新知