实验三 敏捷开发和XP实验
课程: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实验的更多相关文章
- 20165324 Java实验三 敏捷开发与XP实验
20165324 Java实验三 敏捷开发与XP实验 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:何春江 学号:20165324 指导教师:娄嘉鹏 实验日期:2018年4月16日 ...
- 20145213《Java程序设计》实验三敏捷开发与XP实践
20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- JAVA课程实验报告 实验三 敏捷开发与XP实践
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1353 姓名:韩玉琪 学号:20135317 成绩: 指导教师:娄嘉 ...
- 20145225《Java程序设计》 实验三 "敏捷开发与XP实践"
20145225<Java程序设计> 实验三 "敏捷开发与XP实践" 实验报告 实验内容 使用 git 上传代码 使用 git 相互更改代码 实现代码的重载 git 上 ...
- 20145215实验三 敏捷开发与XP实践
20145215实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验步骤 (一)敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法应用到软件的开发.运营和维护上的过程.软 ...
- 20145325张梓靖 实验三 "敏捷开发与XP实践"
20145325张梓靖 实验三 "敏捷开发与XP实践" 程序设计过程 实验内容 使用 git 上传代码 git上传中遇到的问题 使用 git 相互更改代码 实现代码的重构 git ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- 2018-2019-20175205 实验三敏捷开发与XP实践《Java开发环境的熟悉》实验报告
2018-2019-20175205 实验三敏捷开发与XP实践<Java开发环境的熟悉>实验报告 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)>&l ...
随机推荐
- 美团热修复Robust的踩坑之旅-使用篇
最近需要在项目中使用热修复框架,在这里以美团的Robust为主写一篇文章总结一下学习的过程. 一直认为要学习一个框架的原理,首先需要让他跑起来,从效果反推回去,这样更容易理解. 一.美团Robust的 ...
- 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/ ...
- jQuery----奇偶选择器和索引选择器
奇偶选择器: $( " #uu>li:odd").css( " backgroundColor "," red " ); 获取id为u ...
- 使用zabbix发送邮件的简易设置流程(存档用)
1.安装邮件软件 (一般默认安装sendmail,这样apache也不用重新设置.) $sudo yum install sendmail 2.在zabbix上设置发送邮件用的本地邮箱 选择管理-&g ...
- ruby的循环使用及区别(for、each等)
ruby的循环有以下几种: times方法 for语句 while语句 until语句(与while相反) each方法(与for极度相似,在ruby内部,for语句是用each实现的) loop方法 ...
- net辅助工具列表
最近对.net的辅助工具比较感兴趣,网上也已经有.net的十个必备工具的帖子了,这里提供了一份全面的工具列表: Code generation NVelocity CodeSmith X-Code . ...
- 20155238 2016-2017-2 《Java程序设计》第三周学习总结
教材学习内容总结 类定义使用class关键词,名称使用Cloths,建立实例运用New关键词 Clothes c1 = new Clothes(); = :制定参考名称参考某个对象 == :比较参考名 ...
- 使用 lxml 中的 xpath 高效提取文本与标签属性值
以下代码在 python 3.5 + jupyter notebook 中运行测试无误! # 我们爬取网页的目的,无非是先定位到DOM树的节点,然后取其文本或属性值 myPage = '''<h ...
- 正则表达式简介及在C++11中的简单使用
正则表达式(regular expression)是计算机科学中的一个概念,又称规则表达式,通常简写为regex.regexp.RE.regexps.regexes.regexen. 正则表达式是一种 ...
- C#中如果类的扩展方法和类本身的方法签名相同,那么会优先调用类本身的方法
新建一个.NET Core项目,假如我们有如下代码: using System; namespace MethodOverload { static class DemoExtension { pub ...