zoukankan      html  css  js  c++  java
  • 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

    注意: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%
  • 相关阅读:
    java虚拟机字节码执行引擎
    java7 invokedynamic命令深入研究
    [转载]使用expect实现shell自动交互
    elasticsearch 聚合时 类型转换错误
    ES的关键端口
    CentOS6.5安装ganglia3.6
    Linux远程执行echo问题
    [转载]CentOS修改用户最大进程数
    elasticsearch新加入节点不能识别问题
    ssh免密码登录的注意事项
  • 原文地址:https://www.cnblogs.com/bestixyh/p/6767510.html
Copyright © 2011-2022 走看看