20145226夏艺华 《Java程序设计》实验报告三

实验三 敏捷开发与XP实践

实验内容

  1. XP基础

  2. XP核心实践

  3. 相关工具

实验步骤

(一)敏捷开发与XP

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

敏捷开发(Agile Development)是一种以人为核心、迭代、循序渐进的开发方法。“敏捷流程”是一系列价值观和方法论的集合。敏捷开发包括很多模式:

其中,极限编程(eXtreme Programming,XP)是 是一种全新而快捷的软件开发方法。XP团队使用现场客户、特殊计划方法和持续测试来提供快速的反馈和全面的交流。

XP是以开发符合客户需要的软件为目标而产生的一种方法论;XP是一种以实践为基础的软件工程过程和思想;XP认为代码质量的重要程度超出人们一般所认为的程度;XP特别适合于小型的有责任心的、自觉自励的团队开发需求不确定或者迅速变化的软件。

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

(二)编码标准

编程标准使代码更容易阅读和理解,甚至可以保证其中的错误更少。编程标准包含:具有说明性的名字、清晰的表达式、直截了当的控制流、可读的代码和注释,以及在追求这些内容时一致地使用某些规则和惯用法的重要性。程序的版式追求清晰、美观,是程序风格的重要因素。

程序没有最基本的缩进,让人读起来很费劲,这个问题在Eclipse中比较容易解决,我们单击Eclipse菜单中的source->Format 或用快捷键Ctrl+Shift+F就可以按Eclipse规定的规范缩进。代码标准中很重要的一项是如何给包、类、变量、方法等标识符命名,能很好的命名可以让自己的代码立马上升一个档次。Java中的一般的命名规则有:

  • 要体现各自的含义
  • 包、类、变量用名词
  • 方法名用动宾
  • 包名全部小写,如:io,awt
  • 类名第一个字母要大写,如:HelloWorldApp
  • 变量名第一个字母要小写,如:userName
  • 方法名第一个字母要小写:setName
  • ...

标识符名字应当直观且可以拼读,可望文知意,不必进行“解码”,一般采用英文单词或其组合,便于记忆和阅读。

代码标准:

(三)结对编程

结对编程是XP中的重要实践。在结对编程模式下,一对程序员肩并肩、平等地、互补地进行开发工作。

结对编程中有两个角色:

驾驶员(Driver)是控制键盘输入的人。写设计文档,进行编码和单元测试等XP开发流程。
领航员(Navigator)起到领航、提醒的作用。审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。

驾驶员和领航员不断轮换角色,不要连续工作超过一小时。领航员要控制时间。任何一个任务都首先是两个人的责任,也是所有人的责任。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。

(四)版本控制

XP的集体所有制意味着每个人都对所有的代码负责;这一点,反过来又意味着每个人都可以更改代码的任意部分。

  • 版本控制(Version Control)的好处:

  • 版本控制提供项目级的 undo(撤销) 功能。

  • 版本控制允许多人在同一代码上工作, 只要遵守一定的控制原则就行。

  • 版本控制系统还支持在主线上开发的同时发布多个软件版本。

  • 版本控制也是项目级的时间机器,你可以选择任何一个时间, 精确地查看项目在当时的情况。

流行的版本控制工具有CVS,SVN,Git等,Git是Linus除了Linux操作系统外的另外一个重要发明。

git命令上传代码:

$ cd /home/shiyanlou/Code/shiyanlou_cs212
# 修改代码文件
# 添加修改文件
$ git add 所有修改的文件
# 提交到环境中本地代码仓库
$ git commit -m '本次修改的描述'
# push到git.shiyanlou.com,无需输入密码
$ git push

下面给出一个HelloWorld的例子:

1.首先进入工作目录,创建一个新的项目,编译运行通过后上传新建代码。值得注意的是,往代码库提交的代码一定编译、运行、测试都没有问题的代码。

2.我们可以先用git status查看一下代码状态,显示有未跟踪的代码,并建议用git add ...添加,我们使用git add HelloWorld.* 把要提交的文件的信息添加到索引库中。当我们使用git commit时,git将依据索引库中的内容来进行文件的提交。这只是在本地操作,关闭实验环境,会删除代码的,如果想把代码保存到远程托管服务器中,需要使用git push,实验完成前,一定不要忘了使用git push,否则就是相当于你在Word中编辑了半天文件最后却没有保存。如下图所示:

注意:HelloWorld.class是不应该保存在代码库中的,我们只要有HelloWorld.java就行。

运行过程如下图所示:

在码云上的运行结果如下所示:

(五)重构

重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。重构中一个非常关键的前提就是“不改变软件外部行为”,它保证了我们在重构原有系统的同时,不会为原系统带来新的BUG,以确保重构的安全。

下面以Eclipse这个IDE的重构为例:

1.重构的第一项功能就是Rename,可以给类、包、方法、变量改名字。修改方法是,用鼠标单击要改的名字,选择Eclipse中菜单中的Refactor->Rename,具体如下所示:

2.重构的下一项功能为封装,例如有个学生类,有姓名、年龄和编号三个属性,下面要对姓名属性进行封装,进行Refactor->Encapsulate Field操作。该操作修改了属性的修饰符,增加了属性的get和set方法,并修改了调用方法,具体如下所示:

另外,每次打印学生信息都这么写代码违反了DRY原则,造成代码重复。方法一可以可以使用Eclipse中的Extract Method来创建一个toString()方法,另一个是使用Eclipse中Source->Generate toString()来产生一个toString()方法用于打印,结果如下所示:

一个完整的重构流程包括:

  • 从版本控制系统代码库中Check out code
  • 读懂代码(包括测试代码)
  • 发现bad smell
  • Refactoring
  • 运行所有的Unit Tests
  • 往代码库中Check in code

(六)实践项目

1.结对伙伴:http://www.cnblogs.com/lxy1997/p/6820928.html

2.任务很简单,两人用git来下载已完成项目代码,并下载到本地,修改完成后通过git上传到服务器中,这些在上面的内容中已经展示完成。

本次实验的 PSP(Personal Software Process) 时间:

步骤 耗时 百分比
需求分析 40min 18.2%
设 计 50min 22.7%
代码实现 60min 27.3%
测 试 30min 13.6%
分析总结 40min 18.2%
posted @ 2017-04-26 13:45  夏艺华20145226  阅读(246)  评论(0编辑  收藏  举报