课程: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. 不大于N的所有素数

    算法如下: #include<stdio.h> #include<math.h> void Sieve(int n) { int p,j,i; ],L[n+]; ;p<= ...

  2. weex中UISegmentControl实现及遇到的问题

    在最近主导的一个项目中,App端的实现使用了weex.通过近一个月的实践,我们发现如果对于人机交互较少的App,即使较少前端经验的人也能迅速进入开发(当然需要一定时间 才能上手weex).在开发的时候 ...

  3. pandas对excel处理过程中的总结

    在处理excel数据时需要将一组具有相同标签值的数据给按标签抽取出来,同样的标签值对应着同一个类别,这项操作让我对pandas的聚合功能有了更深刻的认识. 所谓聚合groupby,实际上是指将向量或者 ...

  4. Linux系统编译Openssl步骤

    参照:  https://blog.csdn.net/luckydog612/article/details/80396077 1.提前准备工作 去https://www.openssl.org网站下 ...

  5. PostgreSQL统计信息索引页

    磨砺技术珠矶,践行数据之道,追求卓越价值 返回顶级页:PostgreSQL索引页 本页记录所有本人所写的PostgreSQL的统计信息相关文摘和文章的链接: pg_stats:   --------- ...

  6. pythonDjango开发-创建django程序

    1.创建jgango程序 a.命令 cmd命令行下 进入到需要创建项目的路径下 django-admin startproject mysite  创建项目 cd mysite 进入项目文件夹 pyt ...

  7. 【转载】COM 组件设计与应用(五)——用 ATL 写第一个组件

    原文:http://vckbase.com/index.php/wv/1215.html 一.前言 1.如果你在使用 vc5.0 及以前的版本,请你升级为 vc6.0 或 vc.net 2003: 2 ...

  8. 7 stark组件介绍、配置、2层url

    1.django的admin配置 model.py from django.db import models # Create your models here. class UserInfo(mod ...

  9. 第二章:走进shell

    2.2 通过Linux控制台终端访问CLI(command line interface) 打开CLI:control+alt+t   用于设置前景色和背景色的setterm选项 选项 参数 描述 - ...

  10. python爬虫之scrapy框架介绍

    一.什么是Scrapy? Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,非常出名,非常强悍.所谓的框架就是一个已经被集成了各种功能(高性能异步下载,队列,分布式,解析,持久化等) ...