课程: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. 美团热修复Robust的踩坑之旅-使用篇

    最近需要在项目中使用热修复框架,在这里以美团的Robust为主写一篇文章总结一下学习的过程. 一直认为要学习一个框架的原理,首先需要让他跑起来,从效果反推回去,这样更容易理解. 一.美团Robust的 ...

  2. Oracle 12.2 报错:ORA-12012: error on auto execute of job "SYS"."ORA$AT_OS_OPT_SY_7458"

    alert报错 2019-01-12T10:10:11.499130+08:00Errors in file /u01/app/oracle/diag/rdbms/rac1/rac112/trace/ ...

  3. jQuery----奇偶选择器和索引选择器

    奇偶选择器: $( " #uu>li:odd").css( " backgroundColor "," red " ); 获取id为u ...

  4. 使用zabbix发送邮件的简易设置流程(存档用)

    1.安装邮件软件 (一般默认安装sendmail,这样apache也不用重新设置.) $sudo yum install sendmail 2.在zabbix上设置发送邮件用的本地邮箱 选择管理-&g ...

  5. ruby的循环使用及区别(for、each等)

    ruby的循环有以下几种: times方法 for语句 while语句 until语句(与while相反) each方法(与for极度相似,在ruby内部,for语句是用each实现的) loop方法 ...

  6. net辅助工具列表

    最近对.net的辅助工具比较感兴趣,网上也已经有.net的十个必备工具的帖子了,这里提供了一份全面的工具列表: Code generation NVelocity CodeSmith X-Code . ...

  7. 20155238 2016-2017-2 《Java程序设计》第三周学习总结

    教材学习内容总结 类定义使用class关键词,名称使用Cloths,建立实例运用New关键词 Clothes c1 = new Clothes(); = :制定参考名称参考某个对象 == :比较参考名 ...

  8. 使用 lxml 中的 xpath 高效提取文本与标签属性值

    以下代码在 python 3.5 + jupyter notebook 中运行测试无误! # 我们爬取网页的目的,无非是先定位到DOM树的节点,然后取其文本或属性值 myPage = '''<h ...

  9. 正则表达式简介及在C++11中的简单使用

    正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex.regexp.RE.regexps.regexes.regexen. 正则表达式是一种 ...

  10. C#中如果类的扩展方法和类本身的方法签名相同,那么会优先调用类本身的方法

    新建一个.NET Core项目,假如我们有如下代码: using System; namespace MethodOverload { static class DemoExtension { pub ...