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

时间:2021-09-09 23:28:12

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,目录指向当前文件夹
      20145221 《Java程序设计》实验报告三:敏捷开发与XP实践

    • git init:在当前文件夹下,建立本地库,形式为“.git”隐藏文件夹(如果每次git的路径相同,该指令仅在第一次使用)
      20145221 《Java程序设计》实验报告三:敏捷开发与XP实践

    • git add .:创建/修改/删除代码文件,完毕后使用该指令,意为添加之前的修改文件(注意:此时还没有添加到本地代码仓库)
    • git commit -m "xxx":将上一步中添加的修改文件提交到环境中本地代码仓库,下图中红框部分因为没有代码改动,所以显示nothing to commit
      20145221 《Java程序设计》实验报告三:敏捷开发与XP实践

    • git remote add origin http://git.oschina.net/用户名/项目名.git:设置将本地代码提交到你设置的目的项目地址(如果每次git的路径相同,该指令仅在第一次使用)
    • git push:将本地库更新的部分push到http://git.oschina.net/用户名/项目名,需要输入账户名与密码。
    • git clone http://git.oschina.net/用户名/项目名:可以将该项目的代码下载到本地
      20145221 《Java程序设计》实验报告三:敏捷开发与XP实践

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

重构

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

实践部分

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

遇到问题及解决办法

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

  • 如图,开始只知道打开相关项目网址,点下载按钮
    20145221 《Java程序设计》实验报告三:敏捷开发与XP实践

  • 最后经过浏览与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%

参考资料