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

实验内容

  1. XP基础
  2. XP核心实践
  3. 相关工具

实验步骤

(一)敏捷开发与XP

  • 软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。

  • 敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。敏捷开发包括很多模式:

  • 一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈、假设简单性、递增更改、提倡更改、优质工作。XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计。

  • XP是一种更加灵活的开发方式和理念,通过迅速的反应及时充分修改程序,保证所有团队成员对资源和责任的共享;适用于“小而精”的团队开发。同时,其所倡导的“倾听”也是实现了程序开发“需求至上”的终极目标。

(二)编码标准

  • 编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。
  • 关于程序的缩进,在IDEA中比较智能,它会帮你自动进行缩进,这样也使得程序的可读性大大增强。
  • Java中的一般命名规则:
  1. 要体现各自的含义
  2. 包、类、变量用名词
  3. 方法名用动宾
  4. 包名全部小写,如:io,awt
  5. 类名第一个字母要大写,如:HelloWorldApp
  6. 变量名第一个字母要小写,如:userName
  7. 方法名第一个字母要小写:setName
  • 在团队操作中,格式规范是为提高效率扫清障碍的做法;命名规范则具有很强灵活性,根据各团队不同的情况和习惯进行,不仅是方便自己,更是方便团队其他成员。

(三)结对编程

  • 结对编程中的两个重要角色:驾驶员(Driver)是控制键盘输入的人,领航员(Navigator)起到领航、提醒的作用。
  • 驾驶员:写设计文档,进行编码和单元测试等XP开发流程。领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。
  • 驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟。领航员要控制时间。

(四)版本控制

  • 版本控制提供项目级的 undo(撤销) 功能;
  • 版本控制允许多人在同一代码上工作;
  • 版本控制系统保存了过去所作的修改的历史记录;
  • git命令上传代码:
$ cd /home/shiyanlou/Code/shiyanlou_cs212
# 修改代码文件
# 添加修改文件
$ git add 所有修改的文件
# 提交到环境中本地代码仓库
$ git commit -m '本次修改的描述'
# push到git.shiyanlou.com,无需输入密码
$ git push
  • 在此分享一下git上传的过程:
  1. 首先打开需要上传的项目文件夹,鼠标右键点击Git Bash Here,接着输入指令git init.

  2. 输入指令git add .

  3. 输入指令git commit -m "你想写的注释"(也可以用git commit -a,它会自动检查应该commit什么文件。如果是新增的文件,仍然要使用git add来添加)

  4. 接着git remote add origin http://项目地址,再git push origin master,按要求输入用户名及密码就OK了,如果有什么问题请参考关于开源中国的代码托管

(五)重构

  • 重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。重构最主要的目标就是清楚“有臭味道”的代码,主要表现为重复代码。
  • 在此介绍一下IDEA中如何进行重构:

  1. 鼠标放在name上,右键->Refactor->Encapsulate Field...

  2. 如图所示,选择Refactor

  3. 重构完的效果如下图所示:

  4. 同样,我们也可以对age、id进行重构,效果如下:

  • 此外,我们还可以在IDEA中给Student类产生一个toString方法:
  1. 鼠标点击Code->Generate...

  2. 选择toString

  3. 点OK

  4. 效果如图所示:

(六)实践项目

我们团队由两名成员组成,各有分工:

20145215卢肖明:负责前期学习的整理工作,将java代码进行必要注释,并对TDD内容进行补充;进行后期测试;

20145221高其:负责中期的测试代码开发;进行后期测试

  • 先在开源中国上添加项目成员:

  • 我们打算利用在上次实验中所设计的Complex代码进行TDD(Test Driven Development, 测试驱动开发):
  1. 首先,先由我将产品的伪代码托管到我的开源中国账户上

  2. 高其再在他的电脑上输入git clone 我的项目地址,将我所上传的伪代码下载下来:

再根据我的伪代码,编写出了测试代码,并上传到我的账户:

  1. 我再从网站上将代码克隆下来,进行产品代码的初步编写:

编写完成之后再次上传,高其再对它进行修改以及重构,最终完成了Complex代码的编写:

package exp03;
public class MyComplex {
private static int r;
private static int i;
private double m;
private double n;
public static int getRealPart(int RealPart){
setR(RealPart);
return getR();
}
public static int getImaginePart(int ImaginePart){
setI(ImaginePart);
return getI();
}
public MyComplex(double m, double n) {
this.setM(m);
this.setN(n);
} public static int getR() {
return r;
} public static void setR(int r) {
MyComplex.r = r;
} public static int getI() {
return i;
} public static void setI(int i) {
MyComplex.i = i;
} public MyComplex add(MyComplex c) {
return new MyComplex(getM() + c.getM(), getN() + c.getN());
}
public MyComplex minus(MyComplex c) {
return new MyComplex(getM() - c.getM(), getN() - c.getN());
}
public MyComplex multiply(MyComplex c) {
return new MyComplex(getM() * c.getM() - getN() * c.getN(), getM() * c.getN() + getN() * c.getM());
}
public String toString() {
String rtr_str = "";
if (getN() > 0)
rtr_str = "(" + getM() + "+" + getN() + "i" + ")";
if (getN() == 0)
rtr_str = "(" + getM() + ")";
if (getN() < 0)
rtr_str = "(" + getM() + getN() + "i" + ")";
return rtr_str;
} public double getM() {
return m;
} public void setM(double m) {
this.m = m;
} public double getN() {
return n;
} public void setN(double n) {
this.n = n;
}
}

【附】20145221高其 博客地址

PSP(Personal Software Process)时间

步骤 耗时 百分比
需求分析 20min 12.5%
设计 25min 15.6%
代码实现 60min 37.5%
测试 35min 21.9%
分析总结 20min 12.5%

总结

本次实验最关键的地方在于团队合作,通过团队合作,我们不仅对团队开发这一概念有了深刻认识,更对XP这一思想有了初步的理解。我觉得之所以要在这个过程中提倡团队开发,首先,软件开发的过程复杂,而团队方式可以使其简单许多,遇到问题的时候可以大家一起想,集思广益,特别是在一个较大型的软件工程项目中,一个人的力量和智慧显然是不够的。其次,团队操作在很大程度上可以实现优势的互补。例如在做软件的时候,一方面需要实现强大的功能,另一方面需要有良好美观的界面,这两个方面就需要两个分别擅长其中一项的人来进行合作。对于我们目前比较简单的代码来说,团队开发可能并不能很好的体现其优势,但是在我们以后做大项目的时候,团队开发将会给我们提供很多方便,也增加了开发人员之间的交流,何乐而不为呢?

20145215实验三 敏捷开发与XP实践的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 20175314 实验三 敏捷开发与XP实践

    20175314 实验二 Java面向对象程序设计 一.实验内容 XP基础 XP核心实践 相关工具 二.实验步骤 (一)代码格式化 创建"175314.exp3"项目,在该项目下创 ...

  9. #实验三 敏捷开发与XP实践---实验报告

    一.实验三 敏捷开发与XP实践-1 1.实验要求 -实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成I ...

随机推荐

  1. nim3取石子游戏 (威佐夫博弈)

    http://www.cnblogs.com/jackge/archive/2013/04/22/3034968.html 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有 ...

  2. INFORMATICA 的部署实施之 BACKUP&RESTORE

    当一套BI 解决方案成熟运行后,公司会快速扩大客户群,这时快速的将开发出来的SOLUTION 应用到全新的生产环境中就很重要了,下面谈谈我做这样项目(INFORMATICA BACKUP&RE ...

  3. mmap 与 read/write

    mmap与read/write两条路线对文件的访问比较 我们知道无论是通过mmap或read/write访问文件在内核中都必须经过缓存, 当需要从文件读写内容时,都经过内存拷贝的方式与内核中的缓存进行 ...

  4. poj 2195 KM算法

    题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...

  5. Andorid 内存溢出与内存泄露,几种常见导致内存泄露的写法

    内存泄露,大部分是因为程序的逻辑不严谨,但是又可以跑通顺,然后导致的,内存溢出不会报错,如果不看日志信息是并不知道有泄露的.但是如果一直泄露,然后最终导致的内存溢出,仍然会使程序挂掉.内存溢出大部分是 ...

  6. C++ enum

    为啥需要枚举类型 编程语言中的所有特性都是为了满足某种需求,达到某个目的还出现.不会莫名其妙的出现在那. 枚举可以用来保存一组属性的值.enum的全称是enumeration意思是列举 看着这句话可能 ...

  7. oracle 高水位线详解

    一.什么是水线(High Water Mark)? 所有的oracle段(segments,在此,为了理解方便,建议把segment作为表的一个同义词) 都有一个在段内容纳数据的上限,我们把这个上限称 ...

  8. 2014 UESTC 暑前集训队内赛(3) 部分解题报告

    B.Battle for Silver 定理:完全图Kn是平面图当且仅当顶点数n<=4. 枚举所有完全图K1,K2,K3,K4,找出最大总权重. 代码: #include <iostrea ...

  9. UVA 12266 Stock prices --优先队列

    优先队列. 做法:维护两个优先队列:quesell  和  quebuy, 一个是小值优先,一个是大值优先.每次push的时候,都取各自的Top元素,比较价格,如果卖的比卖的出价低,则成交,各自的要买 ...

  10. Dijkstra求最短路径

    单源点的最短路径问题:给定带权有向图G和源点V,求从V到G中其余各顶点的最短路径 Dijkstra算法描述如下: (1)用带权的邻接矩阵arcs表示有向图,arcs[i][j]表示弧<vi,vj ...