20145221 《Java程序设计》实验报告三:敏捷开发与XP实践

实验要求

  • 以结对编程的方式编写一个软件,Blog中要给出结对同学的Blog网址
  • 记录TDD和重构的过程,测试代码不要少于业务代码
  • 团队代码要使用git在实验楼中托管,要使用结对同学中的一个同学的账号托管
  • 实验报告中统计自己的PSP(Personal Software Process)时间

实验内容

  • XP基础
  • XP核心实践
  • 相关工具

实验步骤

敏捷开发与XP

  • 一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈、假设简单性、递增更改、提倡更改、优质工作。XP软件开发的基石是XP的活动,包括:编码、测试、倾听、设计
  • XP是一种更加灵活的开发方式和理念,通过迅速的反应及时充分修改程序,保证所有团队成员对资源和责任的共享;适用于“小而精”的团队开发。同时,其所倡导的“倾听”也是实现了程序开发“需求至上”的终极目标。
  • 敏捷可以作为一种做事的方式,掌握好的在以后的工作中也会受益无穷。

编码标准

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

结对编程

  • 结对编程中有两个角色:

    • 驾驶员(Driver)是控制键盘输入的人。
    • 领航员(Navigator)起到领航、提醒的作用。
  • 具体的操作实现结对编程重点是:
    • 驾驶员:写设计文档,进行编码和单元测试等XP开发流程。
    • 领航员:审阅驾驶员的文档、驾驶员对编码等开发流程的执行;考虑单元测试的覆盖率;思考是否需要和如何重构;帮助驾驶员解决具体的技术问题。
    • 驾驶员和领航员不断轮换角色,不要连续工作超过一小时,每工作一小时休息15分钟。领航员要控制时间。
    • 主动参与。任何一个任务都首先是两个人的责任,也是所有人的责任。没有“我的代码”、“你的代码”或“他/她的代码”,只有“我们的代码”。
    • 只有水平上的差距,没有级别上的差异。两人结对,尽管可能大家的级别资历不同,但不管在分析、设计或编码上,双方都拥有平等的决策权利。
  • 团队精神是好多地方都强调的一个精神,最小的团队就是一对一的二人团队了,结对编程是团队精神在编代码中的具体体现,可以大大提高编程效率,完善代码质量。

版本控制

  • 通过结对编程不难发现,多人合作的方式大大提高了编程的速度,因为一旦代码中出现错误,任何程序员都能修正它。这同时也意味着代码要放到一个大家都能方便获取的地方,我们叫代码仓库。这引出另外一个话题叫版本控制(Version Control)。
  • 版本控制的好处:
    • 版本控制提供项目级的 undo(撤销)功能
    • 版本控制允许多人在同一代码上工作
    • 版本控制系统保存了过去所作的修改的历史记录
    • 版本控制也是项目级的时间机器,你可以选择任何一个时间, 精确地查看项目在当时的情况
  • 版本控制的常用指令:
    • Git Bash Here:在当前文件夹下启用Git.exe,目录指向当前文件夹

    • git init:在当前文件夹下,建立本地库,形式为“.git”隐藏文件夹(如果每次git的路径相同,该指令仅在第一次使用)

    • git add .:创建/修改/删除代码文件,完毕后使用该指令,意为添加之前的修改文件(注意:此时还没有添加到本地代码仓库)
    • git commit -m "xxx":将上一步中添加的修改文件提交到环境中本地代码仓库,下图中红框部分因为没有代码改动,所以显示nothing to commit

    • git remote add origin http://git.oschina.net/用户名/项目名.git:设置将本地代码提交到你设置的目的项目地址(如果每次git的路径相同,该指令仅在第一次使用)
    • git push:将本地库更新的部分push到http://git.oschina.net/用户名/项目名,需要输入账户名与密码。
    • git clone http://git.oschina.net/用户名/项目名:可以将该项目的代码下载到本地

  • 其它细节详见我的博客开源中国的代码托管

重构

  • 重构(Refactor),就是在不改变软件外部行为的基础上,改变软件内部的结构,使其更加易于阅读、易于维护和易于变更 。重构最主要的目标就是清楚“有臭味道”的代码,主要表现为重复代码。
  • 常出现的Bad Smell及处理方法(图片来源:实验三 敏捷开发与XP实践):
  • 此外,在重构代码后,还有一个必不可少的步骤即进行新一轮的测试,即产品代码仍要通过之前的所有测试。

实践部分

  • 本次实验是以小组为单位结对编程进行的,相关实验报告已撰写完毕,详见20145215卢肖明-博客

遇到问题及解决办法

问题一:对git下载操作指令不熟

  • 如图,开始只知道打开相关项目网址,点下载按钮

  • 最后经过浏览与Git相关的博客,详细讲述了Git的初阶教程,知道输入git clone http://git.oschina.net/用户名/项目名:可以将该项目的代码下载到本地。

问题二:对结对编程理解不透彻

  • 最开始,我们小组比较“混乱”,不知道谁该干嘛、谁先做谁后做、应该从哪里着手、应该怎么配合、编重复了怎么办·····
  • 在发现没头绪后,我俩决定认真看看老师的实验指导博客,重新分工,确定“驾驶员”、“领航员”两种角色,按照实验二中所学的TDD开发模式,一步一步完成,遇到对代码有不同理解的时候,停下来交流一下对代码的要求与期望,达成共识后继续编写。

总结

  • 在团队操作中,格式规范是为提高效率扫清障碍的做法;命名规范则具有很强灵活性,根据各团队不同的情况和习惯进行,不仅是方便自己,更是方便团队其他成员。
  • 本次实验是以小组为单位结对编程完成的,不同于以往单个人的实验,在这次实验过程中,双方的合作配合是非常重要的。首先,我们各自发表了对本次实验实现的看法,然后结合实验要求,制定了大致的设计方案,采用TDD开发模式,双方分工合作,依次确定伪代码、测试代码、初期产品代码、中期产品代码、最终产品代码。使得代码在双方的努力下,不断完善更新,使程序功能完整性能稳定。
  • 在本次实验中,体会到了Git的好处,它就好比是放在那的一个存储器,项目中的任何编程人员可以通过相关指令下载该项目中的代码,同时你也可以对其进行维护和完善,并将你的修改结果上传,大家也会看见你的修改版本,这就使得编程效率大大提高,大家可以同时上传、同时修改、同时下载。总之,版本控制是团队精神在程序编写中最好的体现。

  • PSP(Personal Software Process)时间:

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

参考资料

20145221 《Java程序设计》实验报告三:敏捷开发与XP实践的更多相关文章

  1. java实验报告三 敏捷开发与XP

    20145306 java 实验三 实验报告 实验内容 1.git下载结对同学的代码 2.修改结对同学的代码 3.实现代码重构 实验步骤 新建存储空间 git下载代码 将修改后的代码上传 上传结果 重 ...

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

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

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

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

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

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

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

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

  6. 20155229实验三 《Java面向对象程序设计实验三 敏捷开发与XP实践 》实验报告

    实验题目 1.在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Code菜单,找出一项让自己感觉最好用的功能. 2.下载搭档实验二的Complex代 ...

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

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

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

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

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

    20155324 <Java程序设计>实验三 敏捷开发与XP实践 实验内容 XP基础 1.XP核心实践 2.相关工具 实验步骤 敏捷开发与XP 1.敏捷开发(Agile Developme ...

  10. 20172328《程序设计与数据结构》实验三 敏捷开发与XP实践报告

    20172328<程序设计与数据结构>实验三 敏捷开发与XP实践报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 李馨雨 学号:20172328 实验教师:王志强 ...

随机推荐

  1. php面向对象基础概念(封装)

    封装性是面象对象编程中的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义: 1. 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独 ...

  2. Eclipse版GoogleI/O2014开源项目

    https://github.com/google/iosched谷歌原版是Gradle工程,用Eclipse开发的导入不了,所以搞了一个Elicpse工程,依赖的jar.库比较多,也比较难找... ...

  3. activemq 实战 四 传输连接器-Transport connectors 4.2

    In order to exchange messages, producers and consumers (clients) need to connect to the broker. This ...

  4. Java初学者笔记五:泛型处理

    一.泛型类: 泛型是指适用于某一种数据类型而不是一个数据机构中能存不同类型 import java.io.*; import java.nio.file.Files; import java.nio. ...

  5. C# TOKEN的保存与验证

    Token主要为了防止非本页数据的提交,防止重复提交. /** * * 保存TOKEN信息 * */ public void saveToken() { //此处生成md5串 string md5 = ...

  6. 【BZOJ2164】采矿 树链剖分+线段树维护DP

    [BZOJ2164]采矿 Description 浩浩荡荡的cg大军发现了一座矿产资源极其丰富的城市,他们打算在这座城市实施新的采矿战略.这个城市可以看成一棵有n个节点的有根树,我们把每个节点用1到n ...

  7. ThinkPHP流程控制!

    IF判断: 在thinkphp 中不能使用 <> 这样的尖括号: <if condition='表达式'> <elseif condition='表达式'/> &l ...

  8. js 格式验证大全

    1.身份证号码验证: var Common = { //身份证号验证 IsIdCardNo: function (IdCard) { var reg = /^\d{15}(\d{2}[0-9X])?$ ...

  9. fastBoot使用

    fastBoot使用 作者:李老师,华清远见嵌入式学院讲师. 1.1. 使用Fastboot方式烧写 在安卓手机中Fastboot是一种比Recovery更底层的刷机模式.Fastboot是一种线刷, ...

  10. MySQL 慢查询日志工具之pt-query-digest

    1. 工具简介 pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOWPROCESSLIST或者通过tc ...