课程:Java程序设计实验   班级:1352             姓名: 于佳心           学号:20135206

成绩:               指导教师:娄嘉鹏                   实验日期及时间:2015.06.04

座位号:             必修/选修:选修               实验序号:03

实验名称:敏捷开发和XP实验

实验仪器:

名称

型号

数量

计算机

1

实验楼

1

实验partner:万子惠20135206http://www.cnblogs.com/midori/

实验内容:

1. XP基础

2. XP核心实践

3. 相关工具

步骤

耗时

百分比

需求分析

20min

10%

设计

50min

25%

代码实现

50min

25%

测试

30min

15%

分析总结

50min

40%

(一)敏捷开发与XP

敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。“敏捷流程”是一系列价值观和方法论的集合。

(二)编码标准

单击Eclipse菜单中的source->Format 或用快捷键Ctrl+Shift+F就可以按Eclipse规定的规范缩进

代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可以让自己的代码立马上升一个档次。Java中的一般的命名规则有:

  • 要体现各自的含义
  • 包、类、变量用名词
  • 方法名用动宾
  • 包名全部小写,如:io,awt
  • 类名第一个字母要大写,如:HelloWorldApp
  • 变量名第一个字母要小写,如:userName
  • 方法名第一个字母要小写:setName

    (三)结对编程

    • 驾驶员(Driver)是控制键盘输入的人。
    • 领航员(Navigator)起到领航、提醒的作用。
      • 驾驶员:写设计文档,进行编码和单元测试等XP开发流程。
      • 领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。
      • 驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟。领航员要控制时间。
      • 主动参与。任何一个任务都首先是两个人的责任,也是所有人的责任。没有“我的代码”、“你的代码”或“他/她的代码”,只有“我们的代码”。
      • 只有水平上的差距,没有级别上的差异。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。
      • (四)版本控制
        • 版本控制提供项目级的 undo(撤销) 功能: 没有什么事情是终结版本, 任何错误必须很容易回滚。 假设你在使用世界上最复杂的文字处理系统。 它具备了所有的能想到的功能,就是没有支持 DELETE(删除) 键。想象你打字的时候得多么的谨慎和缓慢吧, 特别是一篇超大的文档的快临近末尾的时候, 一个不小心就要重头再来(试想你选中所有的文字, 不小心按了 DELETE 键, 因为没有撤销功能,只好重新录入)。编辑文字和版本控制相同,任何时候都需要回滚,无论是一个小时, 一天, 还是一周, 这让你的团队工作自由快速的工作, 而且对于修正错误也非常自信。
        • 版本控制允许多人在同一代码上工作, 只要遵守一定的控制原则就行。 再也不会发生诸如一个人覆盖了另一个人编辑的代码,导致那个人的修改无效这样的情况。
        • 版本控制系统保存了过去所作的修改的历史记录。如果你遭遇到一些惊讶的代码,通过版本控制系统可以很容易找出是谁干的, 修改了什么, 修改的时间, 如果幸运的话,还能找出原因。
        • 版本控制系统还支持在主线上开发的同时发布多个软件版本。在软件发布的时候也不需要整个团队的停止工作,不需要冻结代码。
        • 版本控制也是项目级的时间机器,你可以选择任何一个时间, 精确地查看项目在当时的情况。 这对研究非常有用, 也是重现以前某个有问题的发布版本的基础。
        • $ cd /home/shiyanlou/Code/shiyanlou_cs212

          # 修改代码文件

          # 添加修改文件

          $ git add 所有修改的文件

          # 提交到环境中本地代码仓库

          $ git commit -m '本次修改的描述'

          # push到git.shiyanlou.com,无需输入密码

          $ git push

          克隆别人的代码

          $ git clone http://git.shiyanlou.com/[对方的专属用户名]/[课程代码仓库名]

      • 进入Code目录
      • 编辑并运行程序
      • 先用git status查看一下代码状态,显示有未跟踪的代码,并建议用git add <file>...添加,使用git add HelloWorld.* 把要提交的文件的信息添加到索引库中。使用git commit时,git将依据索引库中的内容来进行文件的提交。这只是在本地操作,关闭实验环境,会删除代码的,如果想把代码保存到远程托管服务器中,需要使用git push,实验完成前,一定不要忘了使用git push
      • 修改代码
      • 使用git commit -a
      • 通过git log查看代码提交记录
      • (五)重构

      • 重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。

      • 修改软件的四种动机:

        • 增加新功能;
        • 原有功能有BUG;
        • 改善原有程序的结构;
        • 优化原有系统的性能 。
        • 最单纯的Duplicated Code就是[同一个class内的两个方法含有相同表达式(expression)]。这时候你需要做的就是采用Extract Method提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码。
        • 另一种常见情况就是[两个互为兄弟(sibling)的subclasses内含有相同表达式]。要避免这种情况,只需要对两个classes都使用Extract Method,然后再对被提炼出的代码使用Pull Up Method,将它推入superclass内。
        • 如果代码之间只是类似,并非完全相同,那么就得运用Extract Method将相似部分和差异部分割开,构成单独一个方法。然后你可能发现或许可以运用Form Template Method获得一个Template Method设计模式。
        • 如果有些方法以不同的算法做相同的事,你可以择定其中较清晰的一个,并使用Substitute Algorithm将其它方法的算法替换掉。
        • 如果两个毫不相关的classes内出现Duplicaded Code,你应该考虑对其中一个使用Extract Class,将重复代码提炼到一个独立class中,然后在另一个class内使用这个新class。但是,重复代码所在的方法也可能的确只应该属于某个class,另一个class只能调用它,抑或这个方法可能属于第三个class,而另两个classes应该引用这第三个class。你必须决定这个方法放在哪儿最合适,并确保它被安置后就不会再在其它任何地方出现。
      • 一个完整的重构流程包括:

        从版本控制系统代码库中Check out code

        读懂代码(包括测试代码)

        发现bad smell

        Refactoring

        运行所有的Unit Tests

        往代码库中Check in code

        (六)实践项目

        题目:通过GUI界面实现一个猜数字游戏

        小组成员:于佳心20135206

        万子惠20135314http://www.cnblogs.com/midori/

        代码:

        * 猜数字游戏

        */

        import java.awt.*;
        import java.awt.event.*;
        import javax.swing.*;

        class WindowButton extends JFrame implements ActionListener
        {
        private static final long serialVersionUID = 1L;
        int number;
        JTextField inputNumber;
        JLabel feedBack;
        JButton buttonGetNumber,buttonEnter;
        WindowButton(String s)
        {
        super(s);
        buttonGetNumber = new JButton("得到一个新的随机数");
        feedBack = new JLabel("并没有什么好说的",JLabel.CENTER);
        feedBack.setBackground(Color.red);
        inputNumber = new JTextField("0",5);
        buttonEnter = new JButton("确定");
        buttonEnter.addActionListener(WindowButton.this);
        buttonGetNumber.addActionListener(WindowButton.this);
        Box boxH1 = Box.createHorizontalBox();
        boxH1.add(new JLabel("生成1~100之间随机数:"));
        boxH1.add(buttonGetNumber);
        Box boxH2 = Box.createHorizontalBox();
        boxH2.add(new JLabel("输入您的猜测:"));
        boxH2.add(inputNumber);
        Box boxH3 = Box.createHorizontalBox();
        boxH3.add(new JLabel("决定好就请按这里:"));
        boxH3.add(buttonEnter);
        Box boxH4 = Box.createHorizontalBox();
        boxH4.add(new JLabel("电脑君说:"));
        boxH4.add(feedBack);
        Box baseBox = Box.createVerticalBox();
        baseBox.add(boxH1);
        baseBox.add(boxH2);
        baseBox.add(boxH3);
        baseBox.add(boxH4);
        Container con = getContentPane();
        con.setLayout(new FlowLayout());
        con.add(baseBox);
        con.validate();
        setBounds(230,225,400,200);
        setVisible(true);
        validate();
        }
        public void actionPerformed(ActionEvent e)
        {
        if(e.getSource() == buttonGetNumber) 
        number = (int)(Math.random()*100)+1;
        else if(e.getSource() == buttonEnter) 
        {
        int guess = 0;
        try{
        guess = Integer.parseInt(inputNumber.getText());
        if(guess == number)
        {
        feedBack.setText("猜对了~");
        }
        else if(guess > number)
        {
        if(guess%3 == 0)
        feedBack.setText("猜大了~你是猪吗~");
        else if (guess%3 == 1)
        feedBack.setText("猜大了~能聪明点吗~");
        else
        feedBack.setText("猜大了~我借点智商你好不好~");
        inputNumber.setText(null);
        }
        else if(guess < number)
        {
        if(guess%3 == 0)
        feedBack.setText("猜小了~你是猪吗~");
        else if (guess%3 == 1)
        feedBack.setText("猜小了~能聪明点吗~");
        else
        feedBack.setText("猜小了~我借点智商你好不好~");
        inputNumber.setText(null);
        }
        }
        catch(NumberFormatException event)
        {
        feedBack.setText("请输入数字字符");
        }
        }
        }
        }
        public class GuessNumber {
        public static void main(String[] args) {
        new WindowButton("猜数字小游戏");
        }
        }

        结果展示:

实验三 敏捷开发和XP实验的更多相关文章

  1. 20165324 Java实验三 敏捷开发与XP实验

    20165324 Java实验三 敏捷开发与XP实验 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...

  2. 20145213《Java程序设计》实验三敏捷开发与XP实践

    20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...

  3. 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

    20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...

  4. JAVA课程实验报告 实验三 敏捷开发与XP实践

    北京电子科技学院(BESTI) 实     验    报     告 课程:Java程序设计  班级:1353  姓名:韩玉琪  学号:20135317 成绩:             指导教师:娄嘉 ...

  5. 20145225《Java程序设计》 实验三 "敏捷开发与XP实践"

    20145225<Java程序设计> 实验三 "敏捷开发与XP实践" 实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上 ...

  6. 20145215实验三 敏捷开发与XP实践

    20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...

  7. 20145325张梓靖 实验三 "敏捷开发与XP实践"

    20145325张梓靖 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 git上传中遇到的问题 使用 git 相互更改代码 实现代码的重构 git ...

  8. 20162311 实验三 敏捷开发与XP实践 实验报告

    20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...

  9. 2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告

    2018-2019-20175205 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...

随机推荐

  1. 【取色】ColorMania

    取色剂软件

  2. Objective-C(生命周期)

    视图控制器生命周期 : 1)当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序 1.alloc 创建对象,分配空间 2.init(initWithNibName) 初始化对象,初始化数据 ...

  3. switch...case 语句

    var a = 6;switch(a){ case 1:   alert("1111");   break; case 2:   alert("2222");  ...

  4. CUDA基础介绍

    一.GPU简介 1985年8月20日ATi公司成立,同年10月ATi使用ASIC技术开发出了第一款图形芯片和图形卡,1992年4月ATi发布了Mach32图形卡集成了图形加速功能,1998年4月ATi ...

  5. Kubernetes学习之路(六)之创建K8S应用

    一.Deployment的概念 K8S本身并不提供网络的功能,所以需要借助第三方网络插件进行部署K8S中的网络,以打通各个节点中容器的互通. POD,是K8S中的一个逻辑概念,K8S管理的是POD,一 ...

  6. STM8S——Flash program memory and data EEPROM

    1.简介 STM8S内部的FLASH程序存储器和数据EEPROM是由一组通用寄存器来控制的:所以我们可以通过这些通用寄存器来编程或擦除存储器的内容.设置写保护.或者配置特定的低功耗模式.我们也可以自己 ...

  7. 利用自定义 ORM 下使用 flask-login 做登录校验使用笔记

    1. 安装: pip install flask_login 2. 使用: 注册应用 import os from flask_login import LoginManager, current_u ...

  8. Altium中坐标的导出及利用坐标快速布局

    器件的坐标其实在我们处理布局的时候,非常有用,例如A板布局导入B板. 1.在A板PCB中执行菜单命令“File-Assembly-Generates Pick and Place File”对器件的坐 ...

  9. Linux学习之常用命令(二)

    1.上次介绍了一些常用的系统命令,这次又总结了一些小命令,故分享一下: 网卡地址查询的命令: ifconfig #不同于Windows系统,它的是ifconfig而不是ipconfig ip -a # ...

  10. yum指令常用参数说明

    1.使用YUM查找软件包 命令:yum search 2.列出所有可安装的软件包 命令:yum list 3.列出所有可更新的软件包 命令:yum list updates 4.列出所有已安装的软件包 ...