20155239 《Java程序设计》实验三(敏捷开发与XP实践)实验报告
实验三 敏捷开发与XP实践
实验内容
- XP基础
- XP核心实践
- 学会使用git
- 学会代码的重构
- 实现团队合作
团队分工
20155239:按照老师的实验三教程,逐步实验,编写代码,并用git上传,下载团队成员代码,改变并重新上传,总结撰写实验报告。
20155202:按照老师的实验三教程,逐步实验,编写代码,并用git上传,下载团队成员代码,改变并重新上传。
知识学习
(一)敏捷开发与XP
- 软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。软件工程包括下列领域:软件需求分析、软件设计、软件构建、软件测试和软件维护。
- 人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”。软件开发流程的目的是为了提高软件开发、运营、维护的效率,并提高软件的质量、用户满意度、可靠性和软件的可维护性。
- 光有各种流程的思想是不够的,我们还要有一系列的工具来保证这些思想能够在实践中有效率地运作。软件开发很重要的一点不是看你能对多少理论讲的头头是道,还要看你对相关工具应用的如何,比如Java中单元测试要和JUnit的应用结合起来,建模要和Umbrello或StarUML的应用结合起来。编程学习是一个习而学的过程。
- 一个常见的公式是:软件工程=开发流程+工具
- XP是一种更加灵活的开发方式和理念,通过迅速的反应及时充分修改程序,保证所有团队成员对资源和责任的共享;适用于“小而精”的团队开发。同时,其所倡导的“倾听”也是实现了程序开发“需求至上”的终极目标。

(二)编码标准
编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。程序的版式追求清晰、美观,是程序风格的重要因素。
代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可以让自己的代码立马上升一个档次。标识符名字应当直观且可以拼读,可望文知意,不必进行“解码”,一般采用英文单词或其组合,便于记忆和阅读。

(三)结对编程
结对编程中的两个重要角色:驾驶员(Driver)是控制键盘输入的人,领航员(Navigator)起到领航、提醒的作用。
驾驶员:写设计文档,进行编码和单元测试等XP开发流程。领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。
驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟。领航员要控制时间。
(四)版本控制
版本控制提供项目级的 undo(撤销) 功能;
版本控制允许多人在同一代码上工作;
版本控制系统保存了过去所作的修改的历史记录;
git命令上传代码:
$ cd /home/shiyanlou/Code/shiyanlou_cs212
# 修改代码文件
# 添加修改文件
$ git add 所有修改的文件
# 提交到环境中本地代码仓库
$ git commit -m '本次修改的描述'
# push到git.shiyanlou.com,无需输入密码
$ git push
(五)重构
重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。那么要如何保证不改变软件外部行为?这就要求重构后的代码要能通过单元测试。
当有臭味道(Bad Smell)的代码出现时,需要进行重构,例如代码重复、方法过长、参数列过长、条件逻辑过度复杂、分支语句等等,需要通过重构来优化代码。
实验过程
(一)git上传代码
敏捷开发中一个重要过程就是版本控制,可以通过git来进行下载、上传来控制开发中的不同版本,这在结对编程中尤为重要,若是团队中有人上传代码之后,团队其他人可以下载代码,修改完成后再上传,完成结对编程。
git实验过程:
下载最新代码(在实验楼中上线代码库之后,会自动执行git pull操作更新本地的代码)-->修改项目代码(例如可在项目中添加一个新的类实现新的功能)-->通过git上传修改完成后的项目
下面以HelloWord为例进行操作:
首先创建Helloword.java,编译通过确定无误后进行上传操作(注意:上传的代码需要保证其的正确性)。
通过git上传修改完成的项目,具体代码如下图所示。

(二)IDEA 代码标准化
在IDEA菜单项中有一个Code选项,可使用Code选项中的Reformate Code选项来格式化代码,使其符合标准。

(三)IDEA 重构
在IDEA的菜单项中有一个Refactor选项,里面包含了很多重构选项,如图:

也可直接在程序中右键,选中Refactor选项,里面有重构选项,如图:

1.重命名
可以根据命名标准来重命名不符合标准的变量、类名、方法名等。
其中Java中的一般的命名规则有:
- 要体现各自的含义
- 包、类、变量用名词
- 方法名用动宾
- 包名全部小写,如:io,awt
- 类名第一个字母要大写,如:HelloWorldApp
- 变量名第一个字母要小写,如:userName
- 方法名第一个字母要小写:setName
- ...
要给变量重命名时,首先选中要重命名的变量,右键选中Refactor选项中的Rename选项,界面变为:

输入要修改的变量名,根据变量名可知该变量指示名字,所以将"s"改为"name",具体如下:

2.封装
Java中一个重要的特性是封装,封装就是将方法和属性包围,只能通过定义好的接口来进行访问,做到信息隐藏。例如有一个教师类,有属性姓名、年龄和性别三个属性,以姓名属性为例进行封装,选中姓名属性,右键Refactor选项中的Encapsulate Field选项,该操作修改了属性的修饰符,添加get,set方法,具体如下:



3.提取方法
上述封装完成后的代码第21和22行代码违反了DRY原则操作,代码重复,若是需要打印,每次都需要写这么一大串代码,可以将这个提取为一个方法,选中代码,右键Refactor选项中的Encapsulate Method选项,具体为:


当然重构还有其他选项,例如Pull Members Up选项是将子类中的方法上提到父类,而Pull Members Down选项则是将父类的方法下推到子类中,具体就不举例了。
实验过程中遇到的问题和解决方法
1.在java程序编译过程中,之前也有遇到过,在cmd中输入“javac HelloWord”时提醒“错误:仅当显性请求注释处理时才接受类名称 “HelloWord””,原因是因为在javac下时必须要把程序的完整名称写下,包括后缀,所以写成“javac HelloWord.java”即可。这其实是一个很低级的错误,但是由于之前也犯过,所以记下提醒自己。
2.在git生成公钥和私钥后,输入"ssh -T git@git.oschina.net"后,老是提醒"git Permission denied (publickey)."错误,查找很多资料之后发现是没有将本地生成的公钥加入到码云上的公钥库中,所以访问失败。

总结
这次实验相对来说比较简单,更多的是基础工具的熟悉,例如git的使用方法和需要注意的地方,另外就是IDEA关于代码格式化和代码重构的深入了解,在和张旭同学的结对学习下,学会了很多,很满意这次实验。
PSP(Personal Software Process)时间
步骤 耗时 百分比
需求分析 15分钟 9%
设计 15分钟 9%
代码实现 110分钟 64
%
测试 10分钟 6%
分析总结 20分钟 12%
20155239 《Java程序设计》实验三(敏捷开发与XP实践)实验报告的更多相关文章
- 20145308刘昊阳 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20145308刘昊阳 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 20165230 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...
- 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告
20155207王雪纯 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 实验名称 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 统计的PSP(Personal ...
- 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告
2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...
- 20162311 实验三 敏捷开发与XP实践 实验报告
20162311 实验三 敏捷开发与XP实践 实验报告 实验内容 一.研究学习IDEA中的Code菜单 使用Code ->Reformate Code功能将以下代码格式化 public clas ...
- 20165308实验三 敏捷开发与XP实践实验报告
实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...
- 20155220 实验三 敏捷开发与XP实践 实验报告
20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- # 20155224 实验三 敏捷开发与XP实践 实验报告
20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155226 实验三 敏捷开发与XP实践 实验报告
20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
- 20155311 实验三 敏捷开发与XP实践 实验报告
20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...
随机推荐
- 021.3 IO流——字节流-FileInputStream读取字节
内容:文件读取方法,读取方法例子,read(buf)方法中buf的取值,字节流缓冲区对象—提高读取速度/// 文件读取方法:fis.read(),fis.read(buf),具体看例子 例子:文件读取 ...
- Session not active, could not store state 的解决方法
1.开口加上session_start() http://metah.ch/blog/2014/05/facebook-sdk-4-0-0-for-php-a-working-sample-to-ge ...
- memcached源码剖析4:并发模型
memcached是一个典型的单进程系统.虽然是单进程,但是memcached内部通过多线程实现了master-worker模型,这也是服务端最常见的一种并发模型.实际上,除了master线程和wor ...
- Asp.net & Aspose.cells 导出
protected void btnExport_Click(object sender, EventArgs e) { DataTable tbBooks = (DataTable)Session[ ...
- Vim常用命令记录
(本文仅记录了Vim常用的按键功能和操作,用于备忘和查阅.若为Vim小白,建议先通过列出的参考资源获得对Vim更全面的了解.Vi 是几乎所有Linux发行版都支持的文字编辑工具,也是许多Linux下工 ...
- canvas图形库
总结了一些canvas绘制2d图形的方法,记录在博客中,以便需要的同学参考,也便于日后加深记忆. 1. 圆角矩形: 如上图:w表示矩形的宽,h表示矩形的高,r表示矩形圆角的半径.整个矩形在画布中,(0 ...
- 实用的 CSS 小片段
看了 30 Seconds CSS,有了许多收获,所以写下了这篇文章,算是收藏一些代码小片段,留作后用. 一.手写 Loading 动画 (1)弹性加载动画 CSS 代码如下: .bounce-loa ...
- 泛型和 Any 类型
泛型和 Any 类型 这两个类型看起来很相似,但是一定要小心两者的区别.他们区别在于 Any 类型会避开类型的检查,所以尽量少用最好不用.泛型一方面很灵活一方面也很安全,下面举个例子感受下两者的区别: ...
- verilog实现的16位CPU设计
verilog实现的16位CPU设计 整体电路图 CPU状态图 idle代表没有工作,exec代表在工作 实验设计思路 五级流水线,增加硬件消耗换取时间的做法. 具体每一部分写什么将由代码部分指明. ...
- python3之安装mysql问题
python3是不能通过pip install mysql或pipinstall mysqldb这样的形式来安装mysql. 只能 pip install PyMySQL 至于如何在文件中引用? 答曰 ...