实验三 敏捷开发与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实践)实验报告的更多相关文章

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

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

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

    20165230 <Java程序设计>实验三 敏捷开发与XP实践 实验报告 一.实验报告封面 课程:Java程序设计 班级:1652班 姓名:田坤烨 学号:20165230 成绩: 指导教 ...

  3. 20155207王雪纯 《Java程序设计》实验三 敏捷开发与XP实践 实验报告

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

  4. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

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

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

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

    实验三 敏捷开发与XP实践实验报告 实验目的 安装 alibaba 插件,解决代码中的规范问题.再研究一下Code菜单,找出一项让自己感觉最好用的功能. 在码云上把自己的学习搭档加入自己的项目中,确认 ...

  7. 20155220 实验三 敏捷开发与XP实践 实验报告

    20155220 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  8. # 20155224 实验三 敏捷开发与XP实践 实验报告

    20155224 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

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

    20155226 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 XP核心实践 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

  10. 20155311 实验三 敏捷开发与XP实践 实验报告

    20155311 实验三 敏捷开发与XP实践 实验报告 实验内容 XP基础 xp核心工具 相关工具 实验要求 没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim ...

随机推荐

  1. Genymotion安卓模拟器和VirtualBox虚拟机安装、配置、测试(win7_64bit)

    1.概述 VirtualBox是一个优秀的虚拟机软件,它可以在电脑上提供另一个操作系统的运行环境,使多个系统同时运行.VirtualBox支持的操作系统包括Windows.Mac OS X.Linux ...

  2. 关于UITableView 不能回调 tableView: cellForRowAtIndexPath的问题

    做项目时始终遇到一个问题,tableview不能回调cellForRowAtIndexPath方法,导致cell不能显示. 在网上没找到合理的解决方案. 自己弄了一下,按照自己的推测解决了这个问题 首 ...

  3. AngularCLI介绍及配置文件主要参数含义解析

    使用Angular CLI可以快速,简单的搭建一个angular2或angular4项目,是只要掌握几行命令就能构建出前端架构的最佳实践,它本质也是使用了webpack来编译,打包,压缩等构建的事情, ...

  4. programming-languages学习

    programming-languages学习 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {backg ...

  5. 算法-求两个有序数组两两相加的值最小的K个数

    我的思路是: 用队列,  从(0,0)開始入队,每次出队的时候,选(1,0) (0,1) 之间最小的入队,假设是相等的都入队,假设入过队的就不入了,把出队的k个不同的输出来就可以 我測试了几组数据都是 ...

  6. 使用java代码将时间戳和时间互相转换

    时间戳转时间: SimpleDateFormat simpleDateFormat = null; simpleDateFormat = new SimpleDateFormat("yyyy ...

  7. nodejs运行的时候报错:Error: write EIO以及乱码解决方式

    在运行node.js的过程中报如下错误: events.js:72 throw er; // Unhandled 'error' event ^ Error: write EIO at errnoEx ...

  8. Web—07-JQuery

    jquery是一个函数库,一个js文件,页面用script标签引入这个js文件就可以使用. <script type="text/javascript" src=" ...

  9. canvas制作的烟花效果

    最近感觉canvas挺有意思的,在业余时间没事研究了一下,参考过网上一些思路,话不多说,开始啦. github地址:https://github.com/aWhiteBear/fireworks 演示 ...

  10. Mysql-多表连接的操作和用法

    一 .介绍 二 .多表连接查询 三 .符合条件连接查询 四 .子查询 一.介绍 本节主题 多表连接查询 复合条件连接查询 子查询 准备表 #建表 create table dep( id int, n ...